diff --git a/gas/ChangeLog b/gas/ChangeLog index 223ea8d9ba8..8dd6bfcf1fd 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,11 @@ +2019-11-12 Mihail Ionescu + + * config/tc-arm.c (s_arm_fpu): Clear selected_cpu fpu bits. + (fpu_any): Remove OBJ_ELF guards. + * testsuite/gas/arm/fpu-rst.s: New. + * testsuite/gas/arm/fpu-rst.d: New. + * testsuite/gas/arm/fpu-rst.l: New. + 2019-11-12 Jan Beulich * config/tc-i386.c (type_names): Remove OPERAND_TYPE_ESSEG diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c index 2a884b13dcd..167d039b764 100644 --- a/gas/config/tc-arm.c +++ b/gas/config/tc-arm.c @@ -281,9 +281,7 @@ static const arm_feature_set arm_ext_i8mm = ARM_FEATURE_CORE_HIGH (ARM_EXT2_I8MM); static const arm_feature_set arm_arch_any = ARM_ANY; -#ifdef OBJ_ELF static const arm_feature_set fpu_any = FPU_ANY; -#endif static const arm_feature_set arm_arch_full ATTRIBUTE_UNUSED = ARM_FEATURE (-1, -1, -1); static const arm_feature_set arm_arch_t2 = ARM_ARCH_THUMB2; static const arm_feature_set arm_arch_none = ARM_ARCH_NONE; @@ -32775,6 +32773,7 @@ s_arm_fpu (int ignored ATTRIBUTE_UNUSED) if (streq (opt->name, name)) { selected_fpu = opt->value; + ARM_CLEAR_FEATURE (selected_cpu, selected_cpu, fpu_any); #ifndef CPU_DEFAULT if (no_cpu_selected ()) ARM_MERGE_FEATURE_SETS (cpu_variant, arm_arch_any, selected_fpu); diff --git a/gas/testsuite/gas/arm/fpu-rst.d b/gas/testsuite/gas/arm/fpu-rst.d new file mode 100644 index 00000000000..9b5451b042b --- /dev/null +++ b/gas/testsuite/gas/arm/fpu-rst.d @@ -0,0 +1,2 @@ +#name: arm FPU reset test +#error_output: fpu-rst.l diff --git a/gas/testsuite/gas/arm/fpu-rst.l b/gas/testsuite/gas/arm/fpu-rst.l new file mode 100644 index 00000000000..c3cb2433d53 --- /dev/null +++ b/gas/testsuite/gas/arm/fpu-rst.l @@ -0,0 +1,4 @@ +[^:]*: Assembler messages: +[^:]*:8: Error: selected processor does not support `vfms.f32 s0,s1,s2' in ARM mode +[^:]*:11: Error: selected processor does not support `vfms.f32 s0,s1,s2' in ARM mode +[^:]*:17: Error: selected processor does not support `vfms.f32 s0,s1,s2' in ARM mode diff --git a/gas/testsuite/gas/arm/fpu-rst.s b/gas/testsuite/gas/arm/fpu-rst.s new file mode 100644 index 00000000000..26ae832dd22 --- /dev/null +++ b/gas/testsuite/gas/arm/fpu-rst.s @@ -0,0 +1,17 @@ +.syntax unified +.text +.arch armv8-a @ SET BASE +.arch_extension fp @ ADD FP-ARMV8 +vfms.f32 s0, s1, s2 @ OK + +.arch armv8-a @ RESET +vfms.f32 s0, s1, s2 @ ERROR + +.fpu vfpv2 @ SET VFPV2 +vfms.f32 s0, s1, s2 @ ERROR + +.arch armv8-a @ RESET +.fpu fp-armv8 @ ADD FP-ARMV8 +vfms.f32 s0, s1, s2 @ OK +.fpu vfpv2 @ RESET to VFPV2 +vfms.f32 s0, s1, s2 @ ERROR