aboutsummaryrefslogtreecommitdiff
path: root/gas/testsuite
diff options
context:
space:
mode:
authorPrzemyslaw Wirkus <przemyslaw.wirkus@arm.com>2020-10-28 14:01:36 +0000
committerPrzemyslaw Wirkus <przemyslaw.wirkus@arm.com>2020-10-28 14:05:05 +0000
commitfd195909ce14c7e852319613e7ec6a9a6e7b99ea (patch)
tree86eccb865095b59d49fa9db53ce498befff6cbc1 /gas/testsuite
parent8926e54e3af88740e3872099115e0460ed573d21 (diff)
downloadgdb-fd195909ce14c7e852319613e7ec6a9a6e7b99ea.zip
gdb-fd195909ce14c7e852319613e7ec6a9a6e7b99ea.tar.gz
gdb-fd195909ce14c7e852319613e7ec6a9a6e7b99ea.tar.bz2
aarch64: Add DSB instruction Armv8.7-a variant
This patch adds new variant (nXS) of DSB memory barrier instruction available in Armv8.7-a. New nXS variant has different encoding in comparison with pre Armv8.7-a DSB memory barrier variant thus new instruction and new operand was added. DSB memory nXS barrier variant specifies the limitation on the barrier operation. Allowed values are: DSB SYnXS|#28 DSB ISHnXS|#24 DSB NSHnXS|#20 DSB OSHnXS|#16 Please note that till now, for barriers, barrier operation was encoded in 4-bit unsigned immediate CRm field (in the range 0 to 15). For DSB memory nXS barrier variant, barrier operation is a 5-bit unsigned assembly instruction immediate, encoded in instruction in two bits CRm<3:2>: CRm<3:2> #imm 00 16 01 20 10 24 11 28 This patch extends current AArch64 barrier instructions with above mapping. Notable patch changes include: + New DSB memory barrier variant encoding for Armv8.7-a. + New operand BARRIER_DSB_NXS for above instruction in order to distinguish between existing and new DSB instruction flavour. + New set of DSB nXS barrier options. + New instruction inserter and extractor map between instruction immediate 5-bit value and 2-bit CRm field of the instruction itself (see FLD_CRm_dsb_nxs). + Regeneration of aarch64-[asm|dis|opc]-2.c files. + Test cases to cover new instruction assembling and disassembling. For more details regarding DSB memory barrier instruction and its Armv8.7-a flavour please refer to Arm A64 Instruction set documentation for Armv8-A architecture profile, see document pages 132-133 of [0]. [0]: https://developer.arm.com/docs/ddi0596/i gas/ChangeLog: 2020-10-23 Przemyslaw Wirkus <przemyslaw.wirkus@arm.com> * NEWS: Docs update. * config/tc-aarch64.c (parse_operands): Add AARCH64_OPND_BARRIER_DSB_NXS handler. (md_begin): Add content of aarch64_barrier_dsb_nxs_options to aarch64_barrier_opt_hsh hash. * testsuite/gas/aarch64/system-4-invalid.d: New test. * testsuite/gas/aarch64/system-4-invalid.l: New test. * testsuite/gas/aarch64/system-4-invalid.s: New test. * testsuite/gas/aarch64/system-4.d: New test. * testsuite/gas/aarch64/system-4.s: New test. include/ChangeLog: 2020-10-23 Przemyslaw Wirkus <przemyslaw.wirkus@arm.com> * opcode/aarch64.h (enum aarch64_opnd): New operand AARCH64_OPND_BARRIER_DSB_NXS. (aarch64_barrier_dsb_nxs_options): Declare DSB nXS options. opcodes/ChangeLog: 2020-10-23 Przemyslaw Wirkus <przemyslaw.wirkus@arm.com> * aarch64-asm.c (aarch64_ins_barrier_dsb_nxs): New inserter. * aarch64-asm.h (AARCH64_DECL_OPD_INSERTER): New inserter ins_barrier_dsb_nx. * aarch64-dis.c (aarch64_ext_barrier_dsb_nxs): New extractor. * aarch64-dis.h (AARCH64_DECL_OPD_EXTRACTOR): New extractor ext_barrier_dsb_nx. * aarch64-opc.c (aarch64_print_operand): New options table aarch64_barrier_dsb_nxs_options. * aarch64-opc.h (enum aarch64_field_kind): New field name FLD_CRm_dsb_nxs. * aarch64-tbl.h (struct aarch64_opcode): Define DSB nXS barrier Armv8.7-a instruction. * aarch64-asm-2.c: Regenerated. * aarch64-dis-2.c: Regenerated. * aarch64-opc-2.c: Regenerated.
Diffstat (limited to 'gas/testsuite')
-rw-r--r--gas/testsuite/gas/aarch64/system-4-invalid.d3
-rw-r--r--gas/testsuite/gas/aarch64/system-4-invalid.l11
-rw-r--r--gas/testsuite/gas/aarch64/system-4-invalid.s16
-rw-r--r--gas/testsuite/gas/aarch64/system-4.d16
-rw-r--r--gas/testsuite/gas/aarch64/system-4.s12
5 files changed, 58 insertions, 0 deletions
diff --git a/gas/testsuite/gas/aarch64/system-4-invalid.d b/gas/testsuite/gas/aarch64/system-4-invalid.d
new file mode 100644
index 0000000..62d38eb
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/system-4-invalid.d
@@ -0,0 +1,3 @@
+#name: Invalid DSB memory nXS barrier variant
+#source: system-4-invalid.s
+#error_output: system-4-invalid.l
diff --git a/gas/testsuite/gas/aarch64/system-4-invalid.l b/gas/testsuite/gas/aarch64/system-4-invalid.l
new file mode 100644
index 0000000..5a01e39
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/system-4-invalid.l
@@ -0,0 +1,11 @@
+.*: Assembler messages:
+.*: Error: immediate value out of range 0 to 15 at operand 1 -- `dsb #17'
+.*: Error: immediate value out of range 0 to 15 at operand 1 -- `dsb #18'
+.*: Error: immediate value out of range 0 to 15 at operand 1 -- `dsb #19'
+.*: Error: immediate value out of range 0 to 15 at operand 1 -- `dsb #21'
+.*: Error: immediate value out of range 0 to 15 at operand 1 -- `dsb #22'
+.*: Error: immediate value out of range 0 to 15 at operand 1 -- `dsb #23'
+.*: Error: immediate value out of range 0 to 15 at operand 1 -- `dsb #25'
+.*: Error: immediate value out of range 0 to 15 at operand 1 -- `dsb #26'
+.*: Error: immediate value out of range 0 to 15 at operand 1 -- `dsb #27'
+.*: Error: immediate value out of range 0 to 15 at operand 1 -- `dsb #29'
diff --git a/gas/testsuite/gas/aarch64/system-4-invalid.s b/gas/testsuite/gas/aarch64/system-4-invalid.s
new file mode 100644
index 0000000..cadad58
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/system-4-invalid.s
@@ -0,0 +1,16 @@
+/* Armv8.7-a DSB memory nXS barrier variant. */
+.arch armv8.7-a
+
+ dsb #17
+ dsb #18
+ dsb #19
+
+ dsb #21
+ dsb #22
+ dsb #23
+
+ dsb #25
+ dsb #26
+ dsb #27
+
+ dsb #29
diff --git a/gas/testsuite/gas/aarch64/system-4.d b/gas/testsuite/gas/aarch64/system-4.d
new file mode 100644
index 0000000..0f600f8
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/system-4.d
@@ -0,0 +1,16 @@
+#name: DSB memory nXS barrier variant
+#objdump: -dr
+
+.*: file format .*
+
+Disassembly of section \.text:
+
+0+ <.*>:
+.*: d503323f dsb oshnxs
+.*: d503363f dsb nshnxs
+.*: d5033a3f dsb ishnxs
+.*: d5033e3f dsb synxs
+.*: d503323f dsb oshnxs
+.*: d503363f dsb nshnxs
+.*: d5033a3f dsb ishnxs
+.*: d5033e3f dsb synxs
diff --git a/gas/testsuite/gas/aarch64/system-4.s b/gas/testsuite/gas/aarch64/system-4.s
new file mode 100644
index 0000000..f95eb35
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/system-4.s
@@ -0,0 +1,12 @@
+/* Armv8.7-a DSB memory nXS barrier variant. */
+.arch armv8.7-a
+
+ dsb #16
+ dsb #20
+ dsb #24
+ dsb #28
+
+ dsb oshnxs
+ dsb nshnxs
+ dsb ishnxs
+ dsb synxs