arm.rs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. use core::mem;
  2. #[repr(C)]
  3. pub struct u64x2 {
  4. a: u64,
  5. b: u64,
  6. }
  7. #[no_mangle]
  8. pub unsafe extern "aapcs" fn __aeabi_uldivmod(num: u64, den: u64) -> u64x2 {
  9. let mut rem = mem::uninitialized();
  10. let quot = ::__udivmoddi4(num, den, &mut rem);
  11. u64x2 { a: quot, b: rem }
  12. }
  13. extern "C" {
  14. fn memcpy(dest: *mut u8, src: *const u8, n: usize) -> *mut u8;
  15. fn memmove(dest: *mut u8, src: *const u8, n: usize) -> *mut u8;
  16. fn memset(dest: *mut u8, c: i32, n: usize) -> *mut u8;
  17. }
  18. // FIXME: The `*4` and `*8` variants should be defined as aliases.
  19. #[no_mangle]
  20. pub unsafe extern "aapcs" fn __aeabi_memcpy(dest: *mut u8, src: *const u8, n: usize) {
  21. memcpy(dest, src, n);
  22. }
  23. #[no_mangle]
  24. pub unsafe extern "aapcs" fn __aeabi_memcpy4(dest: *mut u8, src: *const u8, n: usize) {
  25. memcpy(dest, src, n);
  26. }
  27. #[no_mangle]
  28. pub unsafe extern "aapcs" fn __aeabi_memcpy8(dest: *mut u8, src: *const u8, n: usize) {
  29. memcpy(dest, src, n);
  30. }
  31. #[no_mangle]
  32. pub unsafe extern "aapcs" fn __aeabi_memmove(dest: *mut u8, src: *const u8, n: usize) {
  33. memmove(dest, src, n);
  34. }
  35. #[no_mangle]
  36. pub unsafe extern "aapcs" fn __aeabi_memmove4(dest: *mut u8, src: *const u8, n: usize) {
  37. memmove(dest, src, n);
  38. }
  39. #[no_mangle]
  40. pub unsafe extern "aapcs" fn __aeabi_memmove8(dest: *mut u8, src: *const u8, n: usize) {
  41. memmove(dest, src, n);
  42. }
  43. // Note the different argument order
  44. #[no_mangle]
  45. pub unsafe extern "aapcs" fn __aeabi_memset(dest: *mut u8, n: usize, c: i32) {
  46. memset(dest, c, n);
  47. }
  48. #[no_mangle]
  49. pub unsafe extern "aapcs" fn __aeabi_memset4(dest: *mut u8, n: usize, c: i32) {
  50. memset(dest, c, n);
  51. }
  52. #[no_mangle]
  53. pub unsafe extern "aapcs" fn __aeabi_memset8(dest: *mut u8, n: usize, c: i32) {
  54. memset(dest, c, n);
  55. }
  56. #[no_mangle]
  57. pub unsafe extern "aapcs" fn __aeabi_memclr(dest: *mut u8, n: usize) {
  58. memset(dest, 0, n);
  59. }
  60. #[no_mangle]
  61. pub unsafe extern "aapcs" fn __aeabi_memclr4(dest: *mut u8, n: usize) {
  62. memset(dest, 0, n);
  63. }
  64. #[no_mangle]
  65. pub unsafe extern "aapcs" fn __aeabi_memclr8(dest: *mut u8, n: usize) {
  66. memset(dest, 0, n);
  67. }