ARM EABI: add new helper functions resp. function names
authorWolfgang Denk <wd@denx.de>
Thu, 6 Aug 2009 19:29:59 +0000 (21:29 +0200)
committerWolfgang Denk <wd@denx.de>
Sun, 9 Aug 2009 21:08:59 +0000 (23:08 +0200)
The ARM EABI defines new names for GCC helper functions,
and GCC seems to need some new functions as well.

This patch is a minimal-invasive approach to fix problems with EABI
conformant tool chains (to be used with "USE_PRIVATE_LIBGCC=yes").

Signed-off-by: Wolfgang Denk <wd@denx.de>
Tested-by: Dirk Behme <dirk.behme@googlemail.com>
lib_arm/_ashldi3.S
lib_arm/_ashrdi3.S
lib_arm/_divsi3.S
lib_arm/_lshrdi3.S
lib_arm/_udivsi3.S

index de4403d632a0b52189aa76c6574187884e6f7c34..834ddc25426bcc38599992e3aea078e645413d19 100644 (file)
@@ -35,7 +35,9 @@ Boston, MA 02110-1301, USA.  */
 #endif
 
 .globl __ashldi3
+.globl __aeabi_llsl
 __ashldi3:
+__aeabi_llsl:
 
        subs    r3, r2, #32
        rsb     ip, r2, #32
index 5edbcb3ae7965c8a6c034bea2468e02c2a8bd4e9..671ac87a2b5245492854da586d90426dd7d31fc9 100644 (file)
@@ -35,7 +35,9 @@ Boston, MA 02110-1301, USA.  */
 #endif
 
 .globl __ashrdi3
+.globl __aeabi_lasr
 __ashrdi3:
+__aeabi_lasr:
 
        subs    r3, r2, #32
        rsb     ip, r2, #32
index 9dc15f6d6b51af13e21d6a012bdc8c44a6314925..cfbadb2ab99f094d88bb81b4a4194187d660b195 100644 (file)
@@ -96,7 +96,9 @@
 
        .align  5
 .globl __divsi3
+.globl __aeabi_idiv
 __divsi3:
+__aeabi_idiv:
        cmp     r1, #0
        eor     ip, r0, r1                      @ save the sign of the result.
        beq     Ldiv0
index fabfd9f0c3c2069ee4440eb5323d0c26d3283532..e7fa79938781fad775d04b5358251d17ded9ee07 100644 (file)
@@ -35,7 +35,9 @@ Boston, MA 02110-1301, USA.  */
 #endif
 
 .globl __lshrdi3
+.globl __aeabi_llsr
 __lshrdi3:
+__aeabi_llsr:
 
        subs    r3, r2, #32
        rsb     ip, r2, #32
index a3f9b5961c04e555546b5c83796be194842e1abf..13098026104734f83075727b1a197f145ffb15d9 100644 (file)
@@ -11,9 +11,12 @@ curbit               .req    r3
 /* pc          .req    r15     */
        .text
        .globl   __udivsi3
-       .type  __udivsi3       ,function
+       .type   __udivsi3 ,function
+       .globl  __aeabi_uidiv
+       .type   __aeabi_uidiv ,function
        .align  0
- __udivsi3      :
+ __udivsi3:
+ __aeabi_uidiv:
        cmp     divisor, #0
        beq     Ldiv0
        mov     curbit, #1
@@ -68,10 +71,23 @@ Ldiv0:
        mov     r0, #0                  @ about as wrong as it could be
        ldmia   sp!, {pc}
        .size  __udivsi3       , . -  __udivsi3
-/* # 235 "libgcc1.S" */
-/* # 320 "libgcc1.S" */
-/* # 421 "libgcc1.S" */
-/* # 433 "libgcc1.S" */
-/* # 456 "libgcc1.S" */
-/* # 500 "libgcc1.S" */
-/* # 580 "libgcc1.S" */
+
+.globl __aeabi_uidivmod
+__aeabi_uidivmod:
+
+       stmfd   sp!, {r0, r1, ip, lr}
+       bl      __aeabi_uidiv
+       ldmfd   sp!, {r1, r2, ip, lr}
+       mul     r3, r0, r2
+       sub     r1, r1, r3
+       mov     pc, lr
+
+.globl __aeabi_idivmod
+__aeabi_idivmod:
+
+       stmfd   sp!, {r0, r1, ip, lr}
+       bl      __aeabi_idiv
+       ldmfd   sp!, {r1, r2, ip, lr}
+       mul     r3, r0, r2
+       sub     r1, r1, r3
+       mov     pc, lr