Implement the assembly instructions yield, wfe, wfi and sev for ARMv6T2 in both ARM...
authorSrinath Parvathaneni <srinath.parvathaneni@arm.com>
Mon, 14 Jan 2019 10:35:50 +0000 (10:35 +0000)
committerNick Clifton <nickc@redhat.com>
Mon, 14 Jan 2019 10:35:50 +0000 (10:35 +0000)
* config/tc-arm.c (arm_ext_v6k_v6t2): Define.
(insns) [ARM_VARIANT]: Modified.
(insns) [THUMB_VARIANT]: To implement few ARMv6K instructions
in ARMv6T2 as well.
* testsuite/gas/arm/archv6t2-1.d: New test.
* testsuite/gas/arm/archv6t2-1.s: Likewise.
* testsuite/gas/arm/archv6t2-2.d: Likewise.

gas/ChangeLog
gas/config/tc-arm.c
gas/testsuite/gas/arm/archv6t2-1.d [new file with mode: 0644]
gas/testsuite/gas/arm/archv6t2-1.s [new file with mode: 0644]
gas/testsuite/gas/arm/archv6t2-2.d [new file with mode: 0644]

index 7d47d936810d1faef29444f88e2d386458401d18..abc092310718234fa0ae74ef8009f4f3db394b9b 100644 (file)
@@ -1,3 +1,13 @@
+2019-01-14  Srinath Parvathaneni  <srinath.parvathaneni@arm.com>
+
+       * config/tc-arm.c (arm_ext_v6k_v6t2): Define.
+       (insns) [ARM_VARIANT]: Modified.
+       (insns) [THUMB_VARIANT]: To implement few ARMv6K instructions
+       in ARMv6T2 as well.
+       * testsuite/gas/arm/archv6t2-1.d: New test.
+       * testsuite/gas/arm/archv6t2-1.s: Likewise.
+       * testsuite/gas/arm/archv6t2-2.d: Likewise.
+
 2019-01-11  Alan Modra  <amodra@gmail.com>
 
        PR 23963
index 7900c1b369e920afa995b65e880623b4c6bdd711..da5dd25fcf2807b8e173e923331026f5dd82cb9b 100644 (file)
@@ -204,6 +204,9 @@ static const arm_feature_set arm_ext_v5j = ARM_FEATURE_CORE_LOW (ARM_EXT_V5J);
 static const arm_feature_set arm_ext_v6 = ARM_FEATURE_CORE_LOW (ARM_EXT_V6);
 static const arm_feature_set arm_ext_v6k = ARM_FEATURE_CORE_LOW (ARM_EXT_V6K);
 static const arm_feature_set arm_ext_v6t2 = ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2);
+/* Only for compatability of hint instructions.  */
+static const arm_feature_set arm_ext_v6k_v6t2 =
+  ARM_FEATURE_CORE_LOW (ARM_EXT_V6K | ARM_EXT_V6T2);
 static const arm_feature_set arm_ext_v6_notm =
   ARM_FEATURE_CORE_LOW (ARM_EXT_V6_NOTM);
 static const arm_feature_set arm_ext_v6_dsp =
@@ -19994,9 +19997,9 @@ static const struct asm_opcode insns[] =
  TCE("usat16", 6e00f30, f3a00000, 3, (RRnpc, I15, RRnpc),         usat16, t_usat16),
 
 #undef  ARM_VARIANT
-#define ARM_VARIANT   & arm_ext_v6k
+#define ARM_VARIANT   & arm_ext_v6k_v6t2
 #undef  THUMB_VARIANT
-#define THUMB_VARIANT & arm_ext_v6k
+#define THUMB_VARIANT & arm_ext_v6k_v6t2
 
  tCE("yield",  320f001, _yield,    0, (), noargs, t_hint),
  tCE("wfe",    320f002, _wfe,      0, (), noargs, t_hint),
diff --git a/gas/testsuite/gas/arm/archv6t2-1.d b/gas/testsuite/gas/arm/archv6t2-1.d
new file mode 100644 (file)
index 0000000..a4b4c34
--- /dev/null
@@ -0,0 +1,12 @@
+# name: ARMv6T2 THUMB mode
+# as: -march=armv6t2 -mthumb
+# source: archv6t2-1.s
+# objdump: -dr --prefix-addresses --show-raw-insn
+
+.*: +file format .*arm.*
+
+Disassembly of section .text:
+0[0-9a-f]+ <[^>]+> bf10        yield
+0[0-9a-f]+ <[^>]+> bf20        wfe
+0[0-9a-f]+ <[^>]+> bf30        wfi
+0[0-9a-f]+ <[^>]+> bf40        sev
diff --git a/gas/testsuite/gas/arm/archv6t2-1.s b/gas/testsuite/gas/arm/archv6t2-1.s
new file mode 100644 (file)
index 0000000..b621bbe
--- /dev/null
@@ -0,0 +1,5 @@
+       .text
+       yield
+       wfe
+       wfi
+       sev
diff --git a/gas/testsuite/gas/arm/archv6t2-2.d b/gas/testsuite/gas/arm/archv6t2-2.d
new file mode 100644 (file)
index 0000000..0617bfc
--- /dev/null
@@ -0,0 +1,12 @@
+# name: ARMv6T2 ARM mode
+# as: -march=armv6t2
+# source: archv6t2-1.s
+# objdump: -dr --prefix-addresses --show-raw-insn
+
+.*: +file format .*arm.*
+
+Disassembly of section .text:
+0[0-9a-f]+ <[^>]+> e320f001    yield
+0[0-9a-f]+ <[^>]+> e320f002    wfe
+0[0-9a-f]+ <[^>]+> e320f003    wfi
+0[0-9a-f]+ <[^>]+> e320f004    sev