diff options
author | Mark Mitchell <mark@codesourcery.com> | 2004-08-11 02:50:14 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 2004-08-11 02:50:14 +0000 |
commit | b3f8d95d356ae617eaa76aa21ebfa0649f927c13 (patch) | |
tree | 8ecb27f99fc899aec528b0cc2ea297f10080750c /gcc/config/arm/lib1funcs.asm | |
parent | fba73eb1cb3e624b60cb9974d53c004c2562486b (diff) | |
download | gcc-b3f8d95d356ae617eaa76aa21ebfa0649f927c13.zip gcc-b3f8d95d356ae617eaa76aa21ebfa0649f927c13.tar.gz gcc-b3f8d95d356ae617eaa76aa21ebfa0649f927c13.tar.bz2 |
configure.in (arm*-*-eabi*): New target.
* configure.in (arm*-*-eabi*): New target.
* configure: Regenerate.
* configure.ac (arm*-*-eabi*): New target.
(arm*-*-symbianelf*): Likewise.
* configure: Regenerated.
* config.gcc (arm*-*-eabi*): New target.
* defaults.h (TARGET_LIBGCC_FUNCS): New macro.
(TARGET_LIB_INT_CMP_BIASED): Likewise.
* expmed.c (expand_divmod): Try a two-valued divmod function as a
last resort.
* gthr.h: Remove bogus tokens at end of #pragma.
* optabs.c (expand_twoval_binop_libfunc): New function.
(prepare_cmp_insn): Handle the !TARGET_LIB_INT_CMP_BIASED case.
(prepare_float_lib_cmp): Try reversing the condition.
(debug_optab_libfuncs): New function.
* optabs.h (expand_twoval_binop_libfunc): Declare.
* config/arm/arm.c (arm_init_libfuncs): New function.
(arm_compute_initial_eliminatino_offset): Return HOST_WIDE_INT.
(TARGET_INIT_LIBFUNCS): Define it.
* config/arm/arm.h (TARGET_BPABI): New macro.
* config/arm/arm-protos.h
(arm_compute_initial_elimination_offset): Return HOST_WIDE_INT.
* config/arm/bpabi.S: New file.
* config/arm/bpabi.c: Likewise.
* config/arm/bpabi.h: Likewise.
* config/arm/ieee754-df.S (__aeabi_dneg): New function or alias.
(__aeabi_drsub): Likewise.
(__aeabi_dsub): Likewise.
(__aeabi_dadd): Likewise.
(__aeabi_ui2d): Likewise.
(__aeabi_i2d): Likewise.
(__aeabi_f2d): Likewise.
(__aeabi_dmul): Likewise.
(__aeabi_ddiv): Likewise.
(__aeabi_cdrcmple): Likewise.
(__aeabi_cdcmpeq): Likewise.
(__aeabi_cdcmple): Likewise.
(__aeabi_dcmpeq): Likewise.
(__aeabi_dcmplt): Likewise.
(__aeabi_dcmple): Likewise.
(__aeabi_dcmpge): Likewise.
(__aeabi_dcmpgt): Likewise.
(__aeabi_dcmpun): Likewise.
(__aeabi_d2iz): Likewise.
(__aeabi_d2uiz): Likewise.
(__aeabi_d2f): Likewise.
* config/arm/ieee754-sf.S (__aeabi_fneg): New function or alias.
(__aeabi_frsub): Likewise.
(__aeabi_fsub): Likewise.
(__aeabi_fadd): Likewise.
(__aeabi_ui2f): Likewise.
(__aeabi_i2f): Likewise.
(__aeabi_fmul): Likewise.
(__aeabi_fdiv): Likewise.
(__aeabi_cfrcmple): Likewise.
(__aeabi_cfcmpeq): Likewise.
(__aeabi_cfcmple): Likewise.
(__aeabi_fcmpeq): Likewise.
(__aeabi_fcmplt): Likewise.
(__aeabi_fcmple): Likewise.
(__aeabi_fcmpge): Likewise.
(__aeabi_fcmpgt): Likewise.
(__aeabi_fcmpun): Likewise.
(__aeabi_f2iz): Likewise.
(__aeabi_f2uiz): Likewise.
* config/arm/lib1funcs.asm (ARM_CALL): New macro.
(__aeabi_uidivmod): New function or alias.
(__aeabi_idivmod): Likewise.
(__aeabi_idiv0): Likewise.
(__aeabi_ldiv0): Likewise.
(__aeabi_llsr): Likewise.
(__aeabi_lasr): Likewise.
(__aeabi_llsl): Likewise.
(bpabi.S): Include it.
* config/arm/libgcc-bpabi.ver: New file.
* config/arm/symbian.h (ARM_DEFAULT_ABI): Remove.
(LINK_SPEC): Remove.
* config/arm/t-arm-elf (LIB1ASMFUNCS): Add __aeabi_lcmp and
__aeabi_ulcmp.
* config/arm/t-bpabi: New file.
* doc/tm.texi (TARGET_LIBGCC_FUNCS): New entry.
(TARGET_LIB_INT_CMP_BIASED): Likewise.
* gcc.dg/testsuite/gcc.dg/arm-eabi1.c: New test.
* gcc.dg/dll-2.c: Fix dg-require syntax.
* gcc.misc-tests/arm-isr.c (abort): Declare.
(exit): Likewise.
From-SVN: r85788
Diffstat (limited to 'gcc/config/arm/lib1funcs.asm')
-rw-r--r-- | gcc/config/arm/lib1funcs.asm | 40 |
1 files changed, 38 insertions, 2 deletions
diff --git a/gcc/config/arm/lib1funcs.asm b/gcc/config/arm/lib1funcs.asm index 9f8b467..cea093c 100644 --- a/gcc/config/arm/lib1funcs.asm +++ b/gcc/config/arm/lib1funcs.asm @@ -199,6 +199,9 @@ SYM (__\name): _L__\name: /* A hook to tell gdb that we've switched to ARM */ .endm #define EQUIV .thumb_set +.macro ARM_CALL name + bl _L__\name +.endm #else .macro ARM_FUNC_START name .text @@ -209,6 +212,9 @@ _L__\name: /* A hook to tell gdb that we've switched to ARM */ SYM (__\name): .endm #define EQUIV .set +.macro ARM_CALL name + bl __\name +.endm #endif .macro ARM_FUNC_ALIAS new old @@ -649,6 +655,15 @@ LSYM(Lgot_result): DIV_FUNC_END udivsi3 +ARM_FUNC_START aeabi_uidivmod + stmfd sp!, { r0, r1, lr } + ARM_CALL udivsi3 + ldmfd sp!, { r1, r2, lr } + mul r3, r2, r0 + sub r1, r1, r3 + RET + FUNC_END aeabi_uidivmod + #endif /* L_udivsi3 */ /* ------------------------------------------------------------------------ */ #ifdef L_umodsi3 @@ -769,6 +784,15 @@ LSYM(Lover12): DIV_FUNC_END divsi3 +ARM_FUNC_START aeabi_idivmod + stmfd sp!, { r0, r1, lr } + ARM_CALL divsi3 + ldmfd sp!, { r1, r2, lr } + mul r3, r2, r0 + sub r1, r1, r3 + RET + FUNC_END aeabi_idivmod + #endif /* L_divsi3 */ /* ------------------------------------------------------------------------ */ #ifdef L_modsi3 @@ -834,9 +858,13 @@ LSYM(Lover12): #ifdef L_dvmd_tls FUNC_START div0 + ARM_FUNC_ALIAS aeabi_idiv0 div0 + ARM_FUNC_ALIAS aeabi_ldiv0 div0 RET + FUNC_END aeabi_ldiv0 + FUNC_END aeabi_idiv0 FUNC_END div0 #endif /* L_divmodsi_tools */ @@ -884,7 +912,8 @@ LSYM(Lover12): #ifdef L_lshrdi3 FUNC_START lshrdi3 - + ARM_FUNC_ALIAS aeabi_llsr lshrdi3 + #ifdef __thumb__ lsr al, r2 mov r3, ah @@ -907,6 +936,7 @@ LSYM(Lover12): mov ah, ah, lsr r2 RET #endif + FUNC_END aeabi_llsr FUNC_END lshrdi3 #endif @@ -914,6 +944,8 @@ LSYM(Lover12): #ifdef L_ashrdi3 FUNC_START ashrdi3 + ARM_FUNC_ALIAS aeabi_lasr ashrdi3 + #ifdef __thumb__ lsr al, r2 mov r3, ah @@ -941,6 +973,7 @@ LSYM(Lover12): RET #endif + FUNC_END aeabi_lasr FUNC_END ashrdi3 #endif @@ -948,6 +981,8 @@ LSYM(Lover12): #ifdef L_ashldi3 FUNC_START ashldi3 + ARM_FUNC_ALIAS aeabi_llsl ashldi3 + #ifdef __thumb__ lsl ah, r2 mov r3, al @@ -970,6 +1005,7 @@ LSYM(Lover12): mov al, al, lsl r2 RET #endif + FUNC_END aeabi_llsl FUNC_END ashldi3 #endif @@ -1104,4 +1140,4 @@ LSYM(Lchange_\register): #include "ieee754-df.S" #include "ieee754-sf.S" - +#include "bpabi.S" |