This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] [ARM] Add support for ARMv8.1 PAN extension


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=ddfded2f7bba485d6c967b502337a72310f24913

commit ddfded2f7bba485d6c967b502337a72310f24913
Author: Matthew Wahab <matthew.wahab@arm.com>
Date:   Tue Jun 2 12:30:38 2015 +0100

    [ARM] Add support for ARMv8.1 PAN extension

Diff:
---
 gas/ChangeLog                       | 10 ++++++++++
 gas/config/tc-arm.c                 | 29 +++++++++++++++++++++++++++++
 gas/doc/c-arm.texi                  |  1 +
 gas/testsuite/ChangeLog             | 23 ++++++++++++++---------
 gas/testsuite/gas/arm/armv8-a+pan.d | 11 +++++++++++
 gas/testsuite/gas/arm/armv8-a+pan.s | 14 ++++++++++++++
 include/opcode/ChangeLog            |  5 +++++
 include/opcode/arm.h                |  3 +++
 opcodes/ChangeLog                   |  5 +++++
 opcodes/arm-dis.c                   |  5 +++++
 10 files changed, 97 insertions(+), 9 deletions(-)

diff --git a/gas/ChangeLog b/gas/ChangeLog
index aa7195e..eb3fcca 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,5 +1,15 @@
 2015-06-02  Matthew Wahab  <matthew.wahab@arm.com>
 
+	* config/tc-arm.c (arm_ext_pan): New.
+	(do_setpan): New, encode an ARM SETPAN instruction.
+	(do_t_setpan): New, encode a Thumb SETPAN instruction.
+	(insns): Add "setpan".
+	(arm_extensions): Add "pan".
+	* doc/c-arm.texi (ARM Options): Add "pan" to list of -mcpu processor
+	extensions.
+
+2015-06-02  Matthew Wahab  <matthew.wahab@arm.com>
+
 	* config/tc-aarch64.c (aarch64_features): Add "rdma".
 	* doc/c-aarch64.texi (AArch64 Extensions): Add "rdma".
 
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
index 683774f..ece5ebc 100644
--- a/gas/config/tc-arm.c
+++ b/gas/config/tc-arm.c
@@ -207,6 +207,7 @@ static const arm_feature_set arm_ext_sec = ARM_FEATURE_CORE_LOW (ARM_EXT_SEC);
 static const arm_feature_set arm_ext_os = ARM_FEATURE_CORE_LOW (ARM_EXT_OS);
 static const arm_feature_set arm_ext_adiv = ARM_FEATURE_CORE_LOW (ARM_EXT_ADIV);
 static const arm_feature_set arm_ext_virt = ARM_FEATURE_CORE_LOW (ARM_EXT_VIRT);
+static const arm_feature_set arm_ext_pan = ARM_FEATURE_CORE_HIGH (ARM_EXT2_PAN);
 
 static const arm_feature_set arm_arch_any = ARM_ANY;
 static const arm_feature_set arm_arch_full = ARM_FEATURE (-1, -1, -1);
@@ -9181,6 +9182,24 @@ do_swi (void)
   inst.reloc.pc_rel = 0;
 }
 
+static void
+do_setpan (void)
+{
+  constraint (!ARM_CPU_HAS_FEATURE (cpu_variant, arm_ext_pan),
+	      _("selected processor does not support SETPAN instruction"));
+
+  inst.instruction |= ((inst.operands[0].imm & 1) << 9);
+}
+
+static void
+do_t_setpan (void)
+{
+  constraint (!ARM_CPU_HAS_FEATURE (cpu_variant, arm_ext_pan),
+	      _("selected processor does not support SETPAN instruction"));
+
+  inst.instruction |= (inst.operands[0].imm << 3);
+}
+
 /* ARM V5E (El Segundo) signed-multiply-accumulate (argument parse)
    SMLAxy{cond} Rd,Rm,Rs,Rn
    SMLAWy{cond} Rd,Rm,Rs,Rn
@@ -18884,6 +18903,13 @@ static const struct asm_opcode insns[] =
  TCE("hvc",	1400070, f7e08000, 1, (EXPi), hvc, t_hvc),
  TCE("eret",	160006e, f3de8f00, 0, (), noargs, noargs),
 
+#undef	ARM_VARIANT
+#define	ARM_VARIANT    & arm_ext_pan
+#undef	THUMB_VARIANT
+#define	THUMB_VARIANT  & arm_ext_pan
+
+ TUF("setpan",	1100000, b610, 1, (I7), setpan, t_setpan),
+
 #undef  ARM_VARIANT
 #define ARM_VARIANT    & arm_ext_v6t2
 #undef  THUMB_VARIANT
@@ -24662,6 +24688,9 @@ static const struct arm_option_extension_value_table arm_extensions[] =
   ARM_EXT_OPT ("os",	ARM_FEATURE_CORE_LOW (ARM_EXT_OS),
 			ARM_FEATURE_CORE_LOW (ARM_EXT_OS),
 				   ARM_FEATURE_CORE_LOW (ARM_EXT_V6M)),
+  ARM_EXT_OPT ("pan",	ARM_FEATURE_CORE_HIGH (ARM_EXT2_PAN),
+			ARM_FEATURE (ARM_EXT_V8, ARM_EXT2_PAN, 0),
+			ARM_FEATURE_CORE_LOW (ARM_EXT_V8)),
   ARM_EXT_OPT ("sec",	ARM_FEATURE_CORE_LOW (ARM_EXT_SEC),
 			ARM_FEATURE_CORE_LOW (ARM_EXT_SEC),
 				   ARM_FEATURE_CORE_LOW (ARM_EXT_V6K | ARM_EXT_V7A)),
diff --git a/gas/doc/c-arm.texi b/gas/doc/c-arm.texi
index d31ba02..85ff20d 100644
--- a/gas/doc/c-arm.texi
+++ b/gas/doc/c-arm.texi
@@ -179,6 +179,7 @@ architectures),
 @code{simd} (Advanced SIMD Extensions for v8-A architecture, implies @code{fp}),
 @code{virt} (Virtualization Extensions for v7-A architecture, implies
 @code{idiv}),
+@code{pan} (Priviliged Access Never Extensions for v8-A architecture)
 and
 @code{xscale}.
 
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index 2e45237..60d9126 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,20 +1,25 @@
 2015-06-02  Matthew Wahab  <matthew.wahab@arm.com>
 
-	* rdma-directive.d: New.
-	* rdma.d: New.
-	* rdma.s: New.
+	* gas/arm/armv8-a+pan.d: New.
+	* gas/arm/armv8-a+pan.s: New.
 
 2015-06-02  Matthew Wahab  <matthew.wahab@arm.com>
 
-	* lor-directive.d: New.
-	* lor.d: New.
-	* lor.s: New
+	* gas/aarch64/rdma-directive.d: New.
+	* gas/aarch64/rdma.d: New.
+	* gas/aarch64/rdma.s: New.
+
+2015-06-02  Matthew Wahab  <matthew.wahab@arm.com>
+
+	* gas/aarch64/lor-directive.d: New.
+	* gas/aarch64/lor.d: New.
+	* gas/aarch64/lor.s: New
 
 2015-06-01  Matthew Wahab  <matthew.wahab@arm.com>
 
-	* pan-directive.d: New.
-	* pan.d: New.
-	* pan.s: New
+	* gas/aarch64/pan-directive.d: New.
+	* gas/aarch64/pan.d: New.
+	* gas/aarch64/pan.s: New
 
 2015-06-01  Jiong Wang  <jiong.wang@arm.com>
 
diff --git a/gas/testsuite/gas/arm/armv8-a+pan.d b/gas/testsuite/gas/arm/armv8-a+pan.d
new file mode 100644
index 0000000..2005260
--- /dev/null
+++ b/gas/testsuite/gas/arm/armv8-a+pan.d
@@ -0,0 +1,11 @@
+#name: Valid v8-a+pan
+#objdump: -dr --prefix-addresses --show-raw-insn
+
+.*: +file format .*arm.*
+
+
+Disassembly of section .text:
+0[0-9a-f]+ <.*> f1100000 	setpan	#0
+0[0-9a-f]+ <.*> f1100200 	setpan	#1
+0[0-9a-f]+ <.*> b610      	setpan	#0
+0[0-9a-f]+ <.*> b618      	setpan	#1
\ No newline at end of file
diff --git a/gas/testsuite/gas/arm/armv8-a+pan.s b/gas/testsuite/gas/arm/armv8-a+pan.s
new file mode 100644
index 0000000..f2ed60b
--- /dev/null
+++ b/gas/testsuite/gas/arm/armv8-a+pan.s
@@ -0,0 +1,14 @@
+	.syntax unified
+	.arch armv8-a
+	.arch_extension pan
+
+A1:     
+	.arm
+        setpan #0
+        setpan #1
+
+T1:     
+        .thumb
+        setpan #0
+        setpan #1
+
diff --git a/include/opcode/ChangeLog b/include/opcode/ChangeLog
index 5b9eb5d..969ac70 100644
--- a/include/opcode/ChangeLog
+++ b/include/opcode/ChangeLog
@@ -1,5 +1,10 @@
 2015-06-02  Matthew Wahab  <matthew.wahab@arm.com>
 
+	* arm.h (ARM_EXT2_PAN): New.
+	(ARM_FEATURE_CORE_HIGH): New.
+
+2015-06-02  Matthew Wahab  <matthew.wahab@arm.com>
+
 	* arm.h (ARM_FEATURE_ALL): New.
 
 2015-06-02  Matthew Wahab  <matthew.wahab@arm.com>
diff --git a/include/opcode/arm.h b/include/opcode/arm.h
index cbe9e7d..9736943 100644
--- a/include/opcode/arm.h
+++ b/include/opcode/arm.h
@@ -57,6 +57,8 @@
 					   state.  */
 #define ARM_EXT_VIRT	 0x80000000	/* Virtualization extensions.  */
 
+#define ARM_EXT2_PAN	 0x00000001     /* PAN extension.  */
+
 /* Co-processor space extensions.  */
 #define ARM_CEXT_XSCALE   0x00000001	/* Allow MIA etc.          */
 #define ARM_CEXT_MAVERICK 0x00000002	/* Use Cirrus/DSP coprocessor.  */
@@ -321,5 +323,6 @@ typedef struct
 
 #define ARM_FEATURE_LOW(core, coproc) {{(core), 0}, (coproc)}
 #define ARM_FEATURE_CORE_LOW(core) {{(core), 0}, 0}
+#define ARM_FEATURE_CORE_HIGH(core) {{0, (core)}, 0}
 #define ARM_FEATURE_COPROC(coproc) {{0, 0}, (coproc)}
 #define ARM_FEATURE(core1, core2, coproc) {{(core1), (core2)}, (coproc)}
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index 05fc116..417e05d 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,5 +1,10 @@
 2015-06-02  Matthew Wahab  <matthew.wahab@arm.com>
 
+	* arm-dis.c (arm_opcodes): Add "setpan".
+	(thumb_opcodes): Add "setpan".
+
+2015-06-02  Matthew Wahab  <matthew.wahab@arm.com>
+
 	* arm-dis.c (select_arm_features): Rework to avoid used of redefined
 	macros.
 
diff --git a/opcodes/arm-dis.c b/opcodes/arm-dis.c
index 9c2665d..3e1315f 100644
--- a/opcodes/arm-dis.c
+++ b/opcodes/arm-dis.c
@@ -1602,6 +1602,10 @@ static const struct opcode32 arm_opcodes[] =
   {ARM_FEATURE_COPROC (CRC_EXT_ARMV8),
     0xe1400240, 0xfff00ff0, "crc32cw\t%12-15R, %16-19R, %0-3R"},
 
+  /* Privileged Access Never extension instructions.  */
+  {ARM_FEATURE_CORE_HIGH (ARM_EXT2_PAN),
+    0xf1100000, 0xfffffdff, "setpan\t#%9-9d"},
+
   /* Virtualization Extension instructions.  */
   {ARM_FEATURE_CORE_LOW (ARM_EXT_VIRT), 0x0160006e, 0x0fffffff, "eret%c"},
   {ARM_FEATURE_CORE_LOW (ARM_EXT_VIRT), 0x01400070, 0x0ff000f0, "hvc%c\t%e"},
@@ -2293,6 +2297,7 @@ static const struct opcode16 thumb_opcodes[] =
   /* ARM V8 instructions.  */
   {ARM_FEATURE_CORE_LOW (ARM_EXT_V8),  0xbf50, 0xffff, "sevl%c"},
   {ARM_FEATURE_CORE_LOW (ARM_EXT_V8),  0xba80, 0xffc0, "hlt\t%0-5x"},
+  {ARM_FEATURE_CORE_HIGH (ARM_EXT2_PAN),  0xb610, 0xfff7, "setpan\t#%3-3d"},
 
   /* ARM V6K no-argument instructions.  */
   {ARM_FEATURE_CORE_LOW (ARM_EXT_V6K), 0xbf00, 0xffff, "nop%c"},


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]