[GAS,ARM] Implement yield, wfe, wfi and sev assembly instructions for ARMv6T2.

Message ID d862a188-7480-45d3-1b9d-4da44361b1e3@arm.com
State New
Headers show
Series
  • [GAS,ARM] Implement yield, wfe, wfi and sev assembly instructions for ARMv6T2.
Related show

Commit Message

Srinath Parvathaneni Jan. 10, 2019, 7:59 p.m.
Hi All,

This patch implements the assembly instructions yield, wfe, wfi and sev
for ARMv6T2 in both ARM mode and Thumb mode.
These instructions executes as NOP for ARMv6T2, please refer these
instructions documented in the ArmARM[1]

[1]
http://arminfo.emea.arm.com/help/topic/com.arm.doc.ddi0406c.d/DDI0406C_d_armv7ar_arm.pdf

Bootstrapped on arm-none-linux-gnueabihf and regression tested on
arm-none-eabi with no regressions.

Ok for trunk? If ok, could someone commit the patch on my behalf, I
don't have commit rights.

Thanks,
Srinath.

gas/ChangeLog:

2019-01-10  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.

Patch

diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
index eff117c3d8654cd9ccd242a5a055710d2401cab7..57bf5a8750bacfd34960f72368f72f924538b911 100644
--- a/gas/config/tc-arm.c
+++ b/gas/config/tc-arm.c
@@ -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
index 0000000000000000000000000000000000000000..a4b4c34f5d32019b266a8276a65153298c1d4921
--- /dev/null
+++ b/gas/testsuite/gas/arm/archv6t2-1.d
@@ -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
index 0000000000000000000000000000000000000000..b621bbeab25b1a8b2eeedfb3c135764c23271999
--- /dev/null
+++ b/gas/testsuite/gas/arm/archv6t2-1.s
@@ -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
index 0000000000000000000000000000000000000000..0617bfc26238a8f9fd8f3aeeabd00cc83384953b
--- /dev/null
+++ b/gas/testsuite/gas/arm/archv6t2-2.d
@@ -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