@@ -2,33 +2,28 @@ use core::intrinsics;
2
2
3
3
// NOTE This function and the one below are implemented using assembly because they using a custom
4
4
// calling convention which can't be implemented using a normal Rust function
5
- // TODO use `global_asm!`
6
5
#[ naked]
7
- #[ no_mangle]
8
- pub unsafe extern "aapcs" fn __aeabi_uidivmod ( ) {
9
- asm ! ( "push { lr }
10
- sub sp, sp, #4
11
- mov r2, sp
12
- bl __udivmodsi4
13
- ldr r1, [sp]
14
- add sp, sp, #4
15
- pop { pc }" ) ;
6
+ #[ cfg_attr( not( test) , no_mangle) ]
7
+ pub unsafe fn __aeabi_uidivmod ( ) {
8
+ asm ! ( "push {lr}
9
+ sub sp, sp, #4
10
+ mov r2, sp
11
+ bl __udivmodsi4
12
+ ldr r1, [sp], #4
13
+ pop {pc}" ) ;
16
14
intrinsics:: unreachable ( ) ;
17
15
}
18
16
19
- // TODO use `global_asm!`
20
17
#[ naked]
21
- #[ no_mangle]
22
- pub unsafe extern "aapcs" fn __aeabi_uldivmod ( ) {
23
- asm ! ( "push {r11, lr}
24
- sub sp, sp, #16
25
- add r12, sp, #8
26
- str r12, [sp]
27
- bl __udivmoddi4
28
- ldr r2, [sp, #8]
29
- ldr r3, [sp, #12]
30
- add sp, sp, #16
31
- pop {r11, pc}" ) ;
18
+ #[ cfg_attr( not( test) , no_mangle) ]
19
+ pub unsafe fn __aeabi_uldivmod ( ) {
20
+ asm ! ( "push {lr}
21
+ sub r12, sp, #12
22
+ str r12, [sp, #-20]!
23
+ bl __udivmoddi4
24
+ ldrd r2, r3, [sp, #8]
25
+ add sp, sp, #20
26
+ pop {pc}" ) ;
32
27
intrinsics:: unreachable ( ) ;
33
28
}
34
29
@@ -40,55 +35,55 @@ extern "C" {
40
35
41
36
// FIXME: The `*4` and `*8` variants should be defined as aliases.
42
37
43
- #[ no_mangle]
44
- pub unsafe extern "aapcs " fn __aeabi_memcpy ( dest : * mut u8 , src : * const u8 , n : usize ) {
38
+ #[ cfg_attr ( not ( test ) , no_mangle) ]
39
+ pub unsafe extern "C " fn __aeabi_memcpy ( dest : * mut u8 , src : * const u8 , n : usize ) {
45
40
memcpy ( dest, src, n) ;
46
41
}
47
- #[ no_mangle]
48
- pub unsafe extern "aapcs " fn __aeabi_memcpy4 ( dest : * mut u8 , src : * const u8 , n : usize ) {
42
+ #[ cfg_attr ( not ( test ) , no_mangle) ]
43
+ pub unsafe extern "C " fn __aeabi_memcpy4 ( dest : * mut u8 , src : * const u8 , n : usize ) {
49
44
memcpy ( dest, src, n) ;
50
45
}
51
- #[ no_mangle]
52
- pub unsafe extern "aapcs " fn __aeabi_memcpy8 ( dest : * mut u8 , src : * const u8 , n : usize ) {
46
+ #[ cfg_attr ( not ( test ) , no_mangle) ]
47
+ pub unsafe extern "C " fn __aeabi_memcpy8 ( dest : * mut u8 , src : * const u8 , n : usize ) {
53
48
memcpy ( dest, src, n) ;
54
49
}
55
50
56
- #[ no_mangle]
57
- pub unsafe extern "aapcs " fn __aeabi_memmove ( dest : * mut u8 , src : * const u8 , n : usize ) {
51
+ #[ cfg_attr ( not ( test ) , no_mangle) ]
52
+ pub unsafe extern "C " fn __aeabi_memmove ( dest : * mut u8 , src : * const u8 , n : usize ) {
58
53
memmove ( dest, src, n) ;
59
54
}
60
- #[ no_mangle]
61
- pub unsafe extern "aapcs " fn __aeabi_memmove4 ( dest : * mut u8 , src : * const u8 , n : usize ) {
55
+ #[ cfg_attr ( not ( test ) , no_mangle) ]
56
+ pub unsafe extern "C " fn __aeabi_memmove4 ( dest : * mut u8 , src : * const u8 , n : usize ) {
62
57
memmove ( dest, src, n) ;
63
58
}
64
- #[ no_mangle]
65
- pub unsafe extern "aapcs " fn __aeabi_memmove8 ( dest : * mut u8 , src : * const u8 , n : usize ) {
59
+ #[ cfg_attr ( not ( test ) , no_mangle) ]
60
+ pub unsafe extern "C " fn __aeabi_memmove8 ( dest : * mut u8 , src : * const u8 , n : usize ) {
66
61
memmove ( dest, src, n) ;
67
62
}
68
63
69
64
// Note the different argument order
70
- #[ no_mangle]
71
- pub unsafe extern "aapcs " fn __aeabi_memset ( dest : * mut u8 , n : usize , c : i32 ) {
65
+ #[ cfg_attr ( not ( test ) , no_mangle) ]
66
+ pub unsafe extern "C " fn __aeabi_memset ( dest : * mut u8 , n : usize , c : i32 ) {
72
67
memset ( dest, c, n) ;
73
68
}
74
- #[ no_mangle]
75
- pub unsafe extern "aapcs " fn __aeabi_memset4 ( dest : * mut u8 , n : usize , c : i32 ) {
69
+ #[ cfg_attr ( not ( test ) , no_mangle) ]
70
+ pub unsafe extern "C " fn __aeabi_memset4 ( dest : * mut u8 , n : usize , c : i32 ) {
76
71
memset ( dest, c, n) ;
77
72
}
78
- #[ no_mangle]
79
- pub unsafe extern "aapcs " fn __aeabi_memset8 ( dest : * mut u8 , n : usize , c : i32 ) {
73
+ #[ cfg_attr ( not ( test ) , no_mangle) ]
74
+ pub unsafe extern "C " fn __aeabi_memset8 ( dest : * mut u8 , n : usize , c : i32 ) {
80
75
memset ( dest, c, n) ;
81
76
}
82
77
83
- #[ no_mangle]
84
- pub unsafe extern "aapcs " fn __aeabi_memclr ( dest : * mut u8 , n : usize ) {
78
+ #[ cfg_attr ( not ( test ) , no_mangle) ]
79
+ pub unsafe extern "C " fn __aeabi_memclr ( dest : * mut u8 , n : usize ) {
85
80
memset ( dest, 0 , n) ;
86
81
}
87
- #[ no_mangle]
88
- pub unsafe extern "aapcs " fn __aeabi_memclr4 ( dest : * mut u8 , n : usize ) {
82
+ #[ cfg_attr ( not ( test ) , no_mangle) ]
83
+ pub unsafe extern "C " fn __aeabi_memclr4 ( dest : * mut u8 , n : usize ) {
89
84
memset ( dest, 0 , n) ;
90
85
}
91
- #[ no_mangle]
92
- pub unsafe extern "aapcs " fn __aeabi_memclr8 ( dest : * mut u8 , n : usize ) {
86
+ #[ cfg_attr ( not ( test ) , no_mangle) ]
87
+ pub unsafe extern "C " fn __aeabi_memclr8 ( dest : * mut u8 , n : usize ) {
93
88
memset ( dest, 0 , n) ;
94
89
}
0 commit comments