+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.
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 ();
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);
{
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))
#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)