diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d1abcce666bd5994502e52583a3fe160dd5947a5..c7b1bbb4332de044fee6a9804f911fb6b89f12bd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2017-06-16 Richard Earnshaw <rearnsha@arm.com> + + * config/arm/arm.h (TARGET_HARD_FLOAT): Also check that we + have some floating-point instructions. + (TARGET_SOFT_FLOAT): Define as inverse of TARGET_HARD_FLOAT. + (TARGET_MAYBE_HARD_FLOAT): New macro. + * config/arm/arm-builtins.c (arm_init_builtins): Use + TARGET_MAYBE_HARD_FLOAT. + * config/arm/arm.c (arm_option_override): Use TARGET_HARD_FLOAT_ABI. + 2017-06-16 Richard Earnshaw <rearnsha@arm.com> * common/config/arm/arm-common.c: Define INCLUDE_LIST. diff --git a/gcc/config/arm/arm-builtins.c b/gcc/config/arm/arm-builtins.c index 8ecf58171c13c1f02994c1a67acec8a0475de709..8d14e58d916620108f822cbe88a5c377e3535296 100644 --- a/gcc/config/arm/arm-builtins.c +++ b/gcc/config/arm/arm-builtins.c @@ -1876,7 +1876,7 @@ arm_init_builtins (void) arm_init_neon_builtins which uses it. */ arm_init_fp16_builtins (); - if (TARGET_HARD_FLOAT) + if (TARGET_MAYBE_HARD_FLOAT) { arm_init_neon_builtins (); arm_init_vfp_builtins (); @@ -1885,7 +1885,7 @@ arm_init_builtins (void) arm_init_acle_builtins (); - if (TARGET_HARD_FLOAT) + if (TARGET_MAYBE_HARD_FLOAT) { tree ftype_set_fpscr = build_function_type_list (void_type_node, unsigned_type_node, NULL); diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 9e857a2b011d89b21c98bda7a3cfefd0d7664d7b..385792ddc4db9689d375d9a24f53f915ec6d8c7f 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -3449,8 +3449,7 @@ arm_option_override (void) { if (arm_abi == ARM_ABI_IWMMXT) arm_pcs_default = ARM_PCS_AAPCS_IWMMXT; - else if (arm_float_abi == ARM_FLOAT_ABI_HARD - && TARGET_HARD_FLOAT) + else if (TARGET_HARD_FLOAT_ABI) { arm_pcs_default = ARM_PCS_AAPCS_VFP; if (!bitmap_bit_p (arm_active_target.isa, isa_bit_VFPv2)) diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h index 57f4958e2b5dae0d06ff9e8e307b345a91a70549..92361fc9c30ed358a03fb42c332bd8293431aae1 100644 --- a/gcc/config/arm/arm.h +++ b/gcc/config/arm/arm.h @@ -119,9 +119,14 @@ extern tree arm_fp16_type_node; #define TARGET_32BIT_P(flags) (TARGET_ARM_P (flags) || TARGET_THUMB2_P (flags)) /* Run-time Target Specification. */ -#define TARGET_SOFT_FLOAT (arm_float_abi == ARM_FLOAT_ABI_SOFT) /* Use hardware floating point instructions. */ -#define TARGET_HARD_FLOAT (arm_float_abi != ARM_FLOAT_ABI_SOFT) +#define TARGET_HARD_FLOAT (arm_float_abi != ARM_FLOAT_ABI_SOFT \ + && bitmap_bit_p (arm_active_target.isa, \ + isa_bit_VFPv2)) +#define TARGET_SOFT_FLOAT (!TARGET_HARD_FLOAT) +/* User has permitted use of FP instructions, if they exist for this + target. */ +#define TARGET_MAYBE_HARD_FLOAT (arm_float_abi != ARM_FLOAT_ABI_SOFT) /* Use hardware floating point calling convention. */ #define TARGET_HARD_FLOAT_ABI (arm_float_abi == ARM_FLOAT_ABI_HARD) #define TARGET_IWMMXT (arm_arch_iwmmxt)