From 26272ba2c429064f8b39f38771d879fc913114cc Mon Sep 17 00:00:00 2001 From: Paul Brook Date: Mon, 1 Sep 2008 23:20:34 +0000 Subject: arm.c (arm_override_options): Set arm_abi earlier. 2008-09-01 Paul Brook gcc/ * config/arm/arm.c (arm_override_options): Set arm_abi earlier. Allow Interworking on ARMv4 EABI based targets. * config/arm/bpabi.h (TARGET_FIX_V4BX_SPEC): Define. (SUBTARGET_EXTRA_ASM_SPEC, LINK_SPEC): Add TARGET_FIX_V4BX_SPEC. From-SVN: r139874 --- gcc/ChangeLog | 7 +++++++ gcc/config/arm/arm.c | 36 +++++++++++++++++++----------------- gcc/config/arm/bpabi.h | 6 ++++-- 3 files changed, 30 insertions(+), 19 deletions(-) (limited to 'gcc') diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e271d88..d92bff6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,12 @@ 2008-09-01 Paul Brook + * config/arm/arm.c (arm_override_options): Set arm_abi earlier. + Allow Interworking on ARMv4 EABI based targets. + * config/arm/bpabi.h (TARGET_FIX_V4BX_SPEC): Define. + (SUBTARGET_EXTRA_ASM_SPEC, LINK_SPEC): Add TARGET_FIX_V4BX_SPEC. + +2008-09-01 Paul Brook + * config/arm/thumb2.md (thumb2_negscc): Match the correct operand for optimized LT0 test. Remove optimization for GT. diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 68f2278..c6128ac 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -1186,12 +1186,30 @@ arm_override_options (void) tune_flags = all_cores[(int)arm_tune].flags; + if (target_abi_name) + { + for (i = 0; i < ARRAY_SIZE (arm_all_abis); i++) + { + if (streq (arm_all_abis[i].name, target_abi_name)) + { + arm_abi = arm_all_abis[i].abi_type; + break; + } + } + if (i == ARRAY_SIZE (arm_all_abis)) + error ("invalid ABI option: -mabi=%s", target_abi_name); + } + else + arm_abi = ARM_DEFAULT_ABI; + /* Make sure that the processor choice does not conflict with any of the other command line choices. */ if (TARGET_ARM && !(insn_flags & FL_NOTM)) error ("target CPU does not support ARM mode"); - if (TARGET_INTERWORK && !(insn_flags & FL_THUMB)) + /* BPABI targets use linker tricks to allow interworking on cores + without thumb support. */ + if (TARGET_INTERWORK && !((insn_flags & FL_THUMB) || TARGET_BPABI)) { warning (0, "target CPU does not support interworking" ); target_flags &= ~MASK_INTERWORK; @@ -1304,22 +1322,6 @@ arm_override_options (void) if (arm_arch5) target_flags &= ~MASK_INTERWORK; - if (target_abi_name) - { - for (i = 0; i < ARRAY_SIZE (arm_all_abis); i++) - { - if (streq (arm_all_abis[i].name, target_abi_name)) - { - arm_abi = arm_all_abis[i].abi_type; - break; - } - } - if (i == ARRAY_SIZE (arm_all_abis)) - error ("invalid ABI option: -mabi=%s", target_abi_name); - } - else - arm_abi = ARM_DEFAULT_ABI; - if (TARGET_IWMMXT && !ARM_DOUBLEWORD_ALIGN) error ("iwmmxt requires an AAPCS compatible ABI for proper operation"); diff --git a/gcc/config/arm/bpabi.h b/gcc/config/arm/bpabi.h index e28d9ea..38be1da 100644 --- a/gcc/config/arm/bpabi.h +++ b/gcc/config/arm/bpabi.h @@ -51,9 +51,11 @@ /* The BPABI integer comparison routines return { -1, 0, 1 }. */ #define TARGET_LIB_INT_CMP_BIASED !TARGET_BPABI +#define TARGET_FIX_V4BX_SPEC " %{mcpu=arm8|mcpu=arm810|mcpu=strongarm*|march=armv4:--fix-v4bx}" + /* Tell the assembler to build BPABI binaries. */ #undef SUBTARGET_EXTRA_ASM_SPEC -#define SUBTARGET_EXTRA_ASM_SPEC "%{mabi=apcs-gnu|mabi=atpcs:-meabi=gnu;:-meabi=4}" +#define SUBTARGET_EXTRA_ASM_SPEC "%{mabi=apcs-gnu|mabi=atpcs:-meabi=gnu;:-meabi=4}" TARGET_FIX_V4BX_SPEC #ifndef SUBTARGET_EXTRA_LINK_SPEC #define SUBTARGET_EXTRA_LINK_SPEC "" @@ -63,7 +65,7 @@ #define BPABI_LINK_SPEC \ "%{mbig-endian:-EB} %{mlittle-endian:-EL} " \ "%{static:-Bstatic} %{shared:-shared} %{symbolic:-Bsymbolic} " \ - "-X" SUBTARGET_EXTRA_LINK_SPEC + "-X" SUBTARGET_EXTRA_LINK_SPEC TARGET_FIX_V4BX_SPEC #undef LINK_SPEC #define LINK_SPEC BPABI_LINK_SPEC -- cgit v1.1