aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gas/ChangeLog8
-rw-r--r--gas/config/tc-arm.c3
-rw-r--r--gas/testsuite/gas/arm/fpu-rst.d2
-rw-r--r--gas/testsuite/gas/arm/fpu-rst.l4
-rw-r--r--gas/testsuite/gas/arm/fpu-rst.s17
5 files changed, 32 insertions, 2 deletions
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 <mihail.ionescu@arm.com>
+
+ * 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 <jbeulich@suse.com>
* 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