This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[PATCH][GAS][ARM] Implement yield, wfe, wfi and sev assembly instructions for ARMv6T2.
- From: Srinath Parvathaneni <Srinath dot Parvathaneni at arm dot com>
- To: binutils <binutils at sourceware dot org>
- Cc: nd <nd at arm dot com>, "nickc at redhat dot com" <nickc at redhat dot com>, Richard Earnshaw <Richard dot Earnshaw at arm dot com>
- Date: Thu, 10 Jan 2019 19:59:35 +0000
- Subject: [PATCH][GAS][ARM] Implement yield, wfe, wfi and sev assembly instructions for ARMv6T2.
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.
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