diff options
author | Nicolas Pitre <nico@cam.org> | 2006-01-14 11:18:29 -0500 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2006-01-14 11:18:29 -0500 |
commit | ba95e4e4a0a8a3c6aba363d45f78d5f2e2d111eb (patch) | |
tree | 886cf3398d3a8e9ca3212dcf233b59110fc87d3d /arch | |
parent | 499b2ea11ff00c624d63af23516404fa2156639a (diff) |
[ARM] 3104/1: ARM EABI: new helper function names
Patch from Nicolas Pitre
The ARM EABI defines new names for GCC helper functions.
Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/kernel/armksyms.c | 22 | ||||
-rw-r--r-- | arch/arm/lib/ashldi3.S | 1 | ||||
-rw-r--r-- | arch/arm/lib/ashrdi3.S | 1 | ||||
-rw-r--r-- | arch/arm/lib/lib1funcs.S | 23 | ||||
-rw-r--r-- | arch/arm/lib/lshrdi3.S | 1 | ||||
-rw-r--r-- | arch/arm/lib/muldi3.S | 1 | ||||
-rw-r--r-- | arch/arm/lib/ucmpdi2.S | 14 |
7 files changed, 63 insertions, 0 deletions
diff --git a/arch/arm/kernel/armksyms.c b/arch/arm/kernel/armksyms.c index 9997098009a9..1574941ebfe1 100644 --- a/arch/arm/kernel/armksyms.c +++ b/arch/arm/kernel/armksyms.c | |||
@@ -35,6 +35,16 @@ extern void __udivsi3(void); | |||
35 | extern void __umodsi3(void); | 35 | extern void __umodsi3(void); |
36 | extern void __do_div64(void); | 36 | extern void __do_div64(void); |
37 | 37 | ||
38 | extern void __aeabi_idiv(void); | ||
39 | extern void __aeabi_idivmod(void); | ||
40 | extern void __aeabi_lasr(void); | ||
41 | extern void __aeabi_llsl(void); | ||
42 | extern void __aeabi_llsr(void); | ||
43 | extern void __aeabi_lmul(void); | ||
44 | extern void __aeabi_uidiv(void); | ||
45 | extern void __aeabi_uidivmod(void); | ||
46 | extern void __aeabi_ulcmp(void); | ||
47 | |||
38 | extern void fpundefinstr(void); | 48 | extern void fpundefinstr(void); |
39 | extern void fp_enter(void); | 49 | extern void fp_enter(void); |
40 | 50 | ||
@@ -141,6 +151,18 @@ EXPORT_SYMBOL(__udivsi3); | |||
141 | EXPORT_SYMBOL(__umodsi3); | 151 | EXPORT_SYMBOL(__umodsi3); |
142 | EXPORT_SYMBOL(__do_div64); | 152 | EXPORT_SYMBOL(__do_div64); |
143 | 153 | ||
154 | #ifdef CONFIG_AEABI | ||
155 | EXPORT_SYMBOL(__aeabi_idiv); | ||
156 | EXPORT_SYMBOL(__aeabi_idivmod); | ||
157 | EXPORT_SYMBOL(__aeabi_lasr); | ||
158 | EXPORT_SYMBOL(__aeabi_llsl); | ||
159 | EXPORT_SYMBOL(__aeabi_llsr); | ||
160 | EXPORT_SYMBOL(__aeabi_lmul); | ||
161 | EXPORT_SYMBOL(__aeabi_uidiv); | ||
162 | EXPORT_SYMBOL(__aeabi_uidivmod); | ||
163 | EXPORT_SYMBOL(__aeabi_ulcmp); | ||
164 | #endif | ||
165 | |||
144 | /* bitops */ | 166 | /* bitops */ |
145 | EXPORT_SYMBOL(_set_bit_le); | 167 | EXPORT_SYMBOL(_set_bit_le); |
146 | EXPORT_SYMBOL(_test_and_set_bit_le); | 168 | EXPORT_SYMBOL(_test_and_set_bit_le); |
diff --git a/arch/arm/lib/ashldi3.S b/arch/arm/lib/ashldi3.S index 561e20717b30..55e57a1c2e6d 100644 --- a/arch/arm/lib/ashldi3.S +++ b/arch/arm/lib/ashldi3.S | |||
@@ -37,6 +37,7 @@ Boston, MA 02110-1301, USA. */ | |||
37 | #endif | 37 | #endif |
38 | 38 | ||
39 | ENTRY(__ashldi3) | 39 | ENTRY(__ashldi3) |
40 | ENTRY(__aeabi_llsl) | ||
40 | 41 | ||
41 | subs r3, r2, #32 | 42 | subs r3, r2, #32 |
42 | rsb ip, r2, #32 | 43 | rsb ip, r2, #32 |
diff --git a/arch/arm/lib/ashrdi3.S b/arch/arm/lib/ashrdi3.S index 86fb2a90c301..0b31398f89b2 100644 --- a/arch/arm/lib/ashrdi3.S +++ b/arch/arm/lib/ashrdi3.S | |||
@@ -37,6 +37,7 @@ Boston, MA 02110-1301, USA. */ | |||
37 | #endif | 37 | #endif |
38 | 38 | ||
39 | ENTRY(__ashrdi3) | 39 | ENTRY(__ashrdi3) |
40 | ENTRY(__aeabi_lasr) | ||
40 | 41 | ||
41 | subs r3, r2, #32 | 42 | subs r3, r2, #32 |
42 | rsb ip, r2, #32 | 43 | rsb ip, r2, #32 |
diff --git a/arch/arm/lib/lib1funcs.S b/arch/arm/lib/lib1funcs.S index 4964e5bafa0f..4e492f4b3f0e 100644 --- a/arch/arm/lib/lib1funcs.S +++ b/arch/arm/lib/lib1funcs.S | |||
@@ -206,6 +206,7 @@ Boston, MA 02111-1307, USA. */ | |||
206 | 206 | ||
207 | 207 | ||
208 | ENTRY(__udivsi3) | 208 | ENTRY(__udivsi3) |
209 | ENTRY(__aeabi_uidiv) | ||
209 | 210 | ||
210 | subs r2, r1, #1 | 211 | subs r2, r1, #1 |
211 | moveq pc, lr | 212 | moveq pc, lr |
@@ -246,6 +247,7 @@ ENTRY(__umodsi3) | |||
246 | 247 | ||
247 | 248 | ||
248 | ENTRY(__divsi3) | 249 | ENTRY(__divsi3) |
250 | ENTRY(__aeabi_idiv) | ||
249 | 251 | ||
250 | cmp r1, #0 | 252 | cmp r1, #0 |
251 | eor ip, r0, r1 @ save the sign of the result. | 253 | eor ip, r0, r1 @ save the sign of the result. |
@@ -303,6 +305,27 @@ ENTRY(__modsi3) | |||
303 | rsbmi r0, r0, #0 | 305 | rsbmi r0, r0, #0 |
304 | mov pc, lr | 306 | mov pc, lr |
305 | 307 | ||
308 | #ifdef CONFIG_AEABI | ||
309 | |||
310 | ENTRY(__aeabi_uidivmod) | ||
311 | |||
312 | stmfd sp!, {r0, r1, ip, lr} | ||
313 | bl __aeabi_uidiv | ||
314 | ldmfd sp!, {r1, r2, ip, lr} | ||
315 | mul r3, r0, r2 | ||
316 | sub r1, r1, r3 | ||
317 | mov pc, lr | ||
318 | |||
319 | ENTRY(__aeabi_idivmod) | ||
320 | |||
321 | stmfd sp!, {r0, r1, ip, lr} | ||
322 | bl __aeabi_idiv | ||
323 | ldmfd sp!, {r1, r2, ip, lr} | ||
324 | mul r3, r0, r2 | ||
325 | sub r1, r1, r3 | ||
326 | mov pc, lr | ||
327 | |||
328 | #endif | ||
306 | 329 | ||
307 | Ldiv0: | 330 | Ldiv0: |
308 | 331 | ||
diff --git a/arch/arm/lib/lshrdi3.S b/arch/arm/lib/lshrdi3.S index 46c2ed19ec95..a86dbdd59cc4 100644 --- a/arch/arm/lib/lshrdi3.S +++ b/arch/arm/lib/lshrdi3.S | |||
@@ -37,6 +37,7 @@ Boston, MA 02110-1301, USA. */ | |||
37 | #endif | 37 | #endif |
38 | 38 | ||
39 | ENTRY(__lshrdi3) | 39 | ENTRY(__lshrdi3) |
40 | ENTRY(__aeabi_llsr) | ||
40 | 41 | ||
41 | subs r3, r2, #32 | 42 | subs r3, r2, #32 |
42 | rsb ip, r2, #32 | 43 | rsb ip, r2, #32 |
diff --git a/arch/arm/lib/muldi3.S b/arch/arm/lib/muldi3.S index c7fbdf005319..72d594184b8a 100644 --- a/arch/arm/lib/muldi3.S +++ b/arch/arm/lib/muldi3.S | |||
@@ -25,6 +25,7 @@ | |||
25 | #endif | 25 | #endif |
26 | 26 | ||
27 | ENTRY(__muldi3) | 27 | ENTRY(__muldi3) |
28 | ENTRY(__aeabi_lmul) | ||
28 | 29 | ||
29 | mul xh, yl, xh | 30 | mul xh, yl, xh |
30 | mla xh, xl, yh, xh | 31 | mla xh, xl, yh, xh |
diff --git a/arch/arm/lib/ucmpdi2.S b/arch/arm/lib/ucmpdi2.S index 112630f93e5d..d847a62834cb 100644 --- a/arch/arm/lib/ucmpdi2.S +++ b/arch/arm/lib/ucmpdi2.S | |||
@@ -10,6 +10,7 @@ | |||
10 | * published by the Free Software Foundation. | 10 | * published by the Free Software Foundation. |
11 | */ | 11 | */ |
12 | 12 | ||
13 | #include <linux/config.h> | ||
13 | #include <linux/linkage.h> | 14 | #include <linux/linkage.h> |
14 | 15 | ||
15 | #ifdef __ARMEB__ | 16 | #ifdef __ARMEB__ |
@@ -33,3 +34,16 @@ ENTRY(__ucmpdi2) | |||
33 | movhi r0, #2 | 34 | movhi r0, #2 |
34 | mov pc, lr | 35 | mov pc, lr |
35 | 36 | ||
37 | #ifdef CONFIG_AEABI | ||
38 | |||
39 | ENTRY(__aeabi_ulcmp) | ||
40 | |||
41 | cmp xh, yh | ||
42 | cmpeq xl, yl | ||
43 | movlo r0, #-1 | ||
44 | moveq r0, #0 | ||
45 | movhi r0, #1 | ||
46 | mov pc, lr | ||
47 | |||
48 | #endif | ||
49 | |||