[PATCH v3] aarch64: Support for FEAT_LSUI

Ezra.Sitorus@arm.com Ezra.Sitorus@arm.com
Tue Jul 8 10:11:13 GMT 2025


From: Ezra Sitorus <ezra.sitorus@arm.com>

FEAT_LSUI introduces unprivileged variants of load and store instructions so
that clearing PSTATE.PAN is never required in privileged software.
---
v2->v3:
* iclasses removed. This changes aarch64-asm and aarch64-dis.
* aarch64-tbl.h: use the already existing iclasses, and adding +fp for
instructions which need it. These fp instructions also use Fd/Fa, so
that the ins/ext functions don't need to change.
* Tests have been fixed up. In the previous iteration, they came from
the wrong mask being used and LLVM objdump, which doesn't seem to
display the preferred disassembly.

Regression tested on aarch64-none-linux-gnu.

Ezra

 gas/config/tc-aarch64.c              |   1 +
 gas/doc/c-aarch64.texi               |   2 +
 gas/testsuite/gas/aarch64/lsui-bad.d |   4 +
 gas/testsuite/gas/aarch64/lsui-bad.l |  21 +
 gas/testsuite/gas/aarch64/lsui-bad.s |  32 ++
 gas/testsuite/gas/aarch64/lsui.d     | 798 ++++++++++++++++++++++++++
 gas/testsuite/gas/aarch64/lsui.s     | 803 +++++++++++++++++++++++++++
 include/opcode/aarch64.h             |   2 +
 opcodes/aarch64-asm.c                |   1 +
 opcodes/aarch64-tbl.h                |  71 +++
 10 files changed, 1735 insertions(+)
 create mode 100644 gas/testsuite/gas/aarch64/lsui-bad.d
 create mode 100644 gas/testsuite/gas/aarch64/lsui-bad.l
 create mode 100644 gas/testsuite/gas/aarch64/lsui-bad.s
 create mode 100644 gas/testsuite/gas/aarch64/lsui.d
 create mode 100644 gas/testsuite/gas/aarch64/lsui.s

diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c
index acb56044fb5..2b1cd76368d 100644
--- a/gas/config/tc-aarch64.c
+++ b/gas/config/tc-aarch64.c
@@ -10642,6 +10642,7 @@ static const struct aarch64_option_cpu_value_table aarch64_features[] = {
   {"fp",		AARCH64_FEATURE (FP), AARCH64_NO_FEATURES},
   {"lse",		AARCH64_FEATURE (LSE), AARCH64_NO_FEATURES},
   {"lse128",		AARCH64_FEATURE (LSE128), AARCH64_FEATURE (LSE)},
+  {"lsui",		AARCH64_FEATURE (LSUI), AARCH64_NO_FEATURES},
   {"simd",		AARCH64_FEATURE (SIMD), AARCH64_FEATURE (FP)},
   {"pan",		AARCH64_FEATURE (PAN), AARCH64_NO_FEATURES},
   {"lor",		AARCH64_FEATURE (LOR), AARCH64_NO_FEATURES},
diff --git a/gas/doc/c-aarch64.texi b/gas/doc/c-aarch64.texi
index 10888d1e78f..dba1044fab1 100644
--- a/gas/doc/c-aarch64.texi
+++ b/gas/doc/c-aarch64.texi
@@ -225,6 +225,8 @@ automatically cause those extensions to be disabled.
  @tab Enable Large System extensions.
 @item @code{lse128} @tab @code{lse}
  @tab Enable the 128-bit Atomic Instructions extension.
+@item @code{lsui} @tab
+ @tab Enable Unprivileged Load/Store instructions.
 @item @code{lut} @tab
  @tab Enable the Lookup Table (LUT) extension.
 @item @code{memtag} @tab
diff --git a/gas/testsuite/gas/aarch64/lsui-bad.d b/gas/testsuite/gas/aarch64/lsui-bad.d
new file mode 100644
index 00000000000..6a50e2124bc
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/lsui-bad.d
@@ -0,0 +1,4 @@
+#name: Bad FEAT_LSUI instructions
+#source: lsui-bad.s
+#as:-march=armv9-a+lsui
+#error_output: lsui-bad.l
diff --git a/gas/testsuite/gas/aarch64/lsui-bad.l b/gas/testsuite/gas/aarch64/lsui-bad.l
new file mode 100644
index 00000000000..3bf7b085ff5
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/lsui-bad.l
@@ -0,0 +1,21 @@
+.*: Assembler messages:
+.*: Warning: unpredictable: identical base and status registers --`sttxr w0,w1,\[x0\]'
+.*: Warning: unpredictable: identical transfer and status registers --`sttxr w0,w0,\[x1\]'
+.*: Warning: unpredictable: identical base and status registers --`sttxr w0,x1,\[x0\]'
+.*: Warning: unpredictable: identical transfer and status registers --`sttxr w0,x0,\[x1\]'
+.*: Warning: unpredictable: identical base and status registers --`stltxr w0,w1,\[x0\]'
+.*: Warning: unpredictable: identical transfer and status registers --`stltxr w0,w0,\[x1\]'
+.*: Warning: unpredictable: identical base and status registers --`stltxr w0,x1,\[x0\]'
+.*: Warning: unpredictable: identical transfer and status registers --`stltxr w0,x0,\[x1\]'
+.*: Error: reg pair must be contiguous at operand 2 -- `caspt x0,x0,x2,x3,\[x0\]'
+.*: Error: reg pair must start from even reg at operand 3 -- `caspt x0,x1,x3,x4,\[x0\]'
+.*: Error: operand 5 must be an address with base register \(no offset\) -- `caspt x0,x1,x2,x3,\[x0,#0x8\]'
+.*: Warning: unpredictable load of register pair -- `ldtnp x0,x0,\[x0\]'
+.*: Error: immediate offset out of range -512 to 504 at operand 3 -- `ldtnp x0,x1,\[x0,#508\]'
+.*: Error: unexpected address writeback at operand 3 -- `ldtnp x0,x1,\[x0,#504\]!'
+.*: Warning: unpredictable load of register pair -- `ldtp x0,x0,\[x1\]'
+.*: Warning: unpredictable transfer with writeback -- `ldtp x0,x1,\[x0,#504\]!'
+.*: Warning: unpredictable transfer with writeback -- `ldtp x0,x1,\[x0\],#504'
+.*: Warning: unpredictable load of register pair -- `ldtp q0,q0,\[x1\]'
+.*: Warning: unpredictable transfer with writeback -- `sttp x0,x1,\[x0,#504\]!'
+.*: Warning: unpredictable transfer with writeback -- `sttp x0,x1,\[x0\],#504'
diff --git a/gas/testsuite/gas/aarch64/lsui-bad.s b/gas/testsuite/gas/aarch64/lsui-bad.s
new file mode 100644
index 00000000000..aed14cdf255
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/lsui-bad.s
@@ -0,0 +1,32 @@
+sttxr:
+	sttxr	w0, w1, [x0]
+	sttxr	w0, w0, [x1]
+	sttxr	w0, x1, [x0]
+	sttxr	w0, x0, [x1]
+
+stltxr:
+	stltxr	w0, w1, [x0]
+	stltxr	w0, w0, [x1]
+	stltxr	w0, x1, [x0]
+	stltxr	w0, x0, [x1]
+
+caspt:
+	caspt	x0, x0, x2, x3, [x0]
+	caspt	x0, x1, x3, x4, [x0]
+	caspt	x0, x1, x2, x3, [x0, #0x8]
+
+ldtnp:
+	ldtnp	x0, x0, [x0]
+	ldtnp	q0, q1, [x0]
+	ldtnp	x0, x1, [x0, #508]
+	ldtnp	x0, x1, [x0, #504]!
+
+ldtp:
+	ldtp	x0, x0, [x1]
+	ldtp	x0, x1, [x0, #504]!
+	ldtp	x0, x1, [x0], #504
+	ldtp	q0, q0, [x1]
+
+sttp:
+	sttp	x0, x1, [x0, #504]!
+	sttp	x0, x1, [x0], #504
diff --git a/gas/testsuite/gas/aarch64/lsui.d b/gas/testsuite/gas/aarch64/lsui.d
new file mode 100644
index 00000000000..c0f54ac6438
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/lsui.d
@@ -0,0 +1,798 @@
+#name: FEAT_LSUI Test
+#objdump: -dr
+#as:-march=armv9-a+lsui+fp
+
+.*:     file format .*
+
+Disassembly of section \.text:
+
+.* <ldtxr>:
+.*:	895f7c00 	ldtxr	w0, \[x0\]
+.*:	895f7fe0 	ldtxr	w0, \[sp\]
+.*:	895f7c1f 	ldtxr	wzr, \[x0\]
+.*:	c95f7c00 	ldtxr	x0, \[x0\]
+.*:	c95f7fe0 	ldtxr	x0, \[sp\]
+.*:	c95f7c1f 	ldtxr	xzr, \[x0\]
+
+.* <ldatxr>:
+.*:	895ffc00 	ldatxr	w0, \[x0\]
+.*:	895fffe0 	ldatxr	w0, \[sp\]
+.*:	895ffc1f 	ldatxr	wzr, \[x0\]
+.*:	c95ffc00 	ldatxr	x0, \[x0\]
+.*:	c95fffe0 	ldatxr	x0, \[sp\]
+.*:	c95ffc1f 	ldatxr	xzr, \[x0\]
+
+.* <sttxr>:
+.*:	89007c44 	sttxr	w0, w4, \[x2\]
+.*:	89007fe4 	sttxr	w0, w4, \[sp\]
+.*:	89007c5f 	sttxr	w0, wzr, \[x2\]
+.*:	89007fff 	sttxr	w0, wzr, \[sp\]
+.*:	891d7c04 	sttxr	w29, w4, \[x0\]
+.*:	891d7fe4 	sttxr	w29, w4, \[sp\]
+.*:	891d7c1f 	sttxr	w29, wzr, \[x0\]
+.*:	891d7fff 	sttxr	w29, wzr, \[sp\]
+.*:	c9007c44 	sttxr	w0, x4, \[x2\]
+.*:	c9007fe4 	sttxr	w0, x4, \[sp\]
+.*:	c9007c5f 	sttxr	w0, xzr, \[x2\]
+.*:	c9007fff 	sttxr	w0, xzr, \[sp\]
+.*:	c91d7c04 	sttxr	w29, x4, \[x0\]
+.*:	c91d7fe4 	sttxr	w29, x4, \[sp\]
+.*:	c91d7c1f 	sttxr	w29, xzr, \[x0\]
+.*:	c91d7fff 	sttxr	w29, xzr, \[sp\]
+
+.* <stltxr>:
+.*:	8900fc44 	stltxr	w0, w4, \[x2\]
+.*:	8900ffe4 	stltxr	w0, w4, \[sp\]
+.*:	8900fc5f 	stltxr	w0, wzr, \[x2\]
+.*:	8900ffff 	stltxr	w0, wzr, \[sp\]
+.*:	891dfc04 	stltxr	w29, w4, \[x0\]
+.*:	891dffe4 	stltxr	w29, w4, \[sp\]
+.*:	891dfc1f 	stltxr	w29, wzr, \[x0\]
+.*:	891dffff 	stltxr	w29, wzr, \[sp\]
+.*:	c900fc44 	stltxr	w0, x4, \[x2\]
+.*:	c900ffe4 	stltxr	w0, x4, \[sp\]
+.*:	c900fc5f 	stltxr	w0, xzr, \[x2\]
+.*:	c900ffff 	stltxr	w0, xzr, \[sp\]
+.*:	c91dfc04 	stltxr	w29, x4, \[x0\]
+.*:	c91dffe4 	stltxr	w29, x4, \[sp\]
+.*:	c91dfc1f 	stltxr	w29, xzr, \[x0\]
+.*:	c91dffff 	stltxr	w29, xzr, \[sp\]
+
+.* <cast>:
+.*:	c9807c00 	cast	x0, x0, \[x0\]
+.*:	c9807fe0 	cast	x0, x0, \[sp\]
+.*:	c9807c1f 	cast	x0, xzr, \[x0\]
+.*:	c9807fff 	cast	x0, xzr, \[sp\]
+.*:	c99f7c00 	cast	xzr, x0, \[x0\]
+.*:	c99f7fe0 	cast	xzr, x0, \[sp\]
+.*:	c99f7c1f 	cast	xzr, xzr, \[x0\]
+.*:	c99f7fff 	cast	xzr, xzr, \[sp\]
+
+.* <casat>:
+.*:	c9c07c00 	casat	x0, x0, \[x0\]
+.*:	c9c07fe0 	casat	x0, x0, \[sp\]
+.*:	c9c07c1f 	casat	x0, xzr, \[x0\]
+.*:	c9c07fff 	casat	x0, xzr, \[sp\]
+.*:	c9df7c00 	casat	xzr, x0, \[x0\]
+.*:	c9df7fe0 	casat	xzr, x0, \[sp\]
+.*:	c9df7c1f 	casat	xzr, xzr, \[x0\]
+.*:	c9df7fff 	casat	xzr, xzr, \[sp\]
+
+.* <casalt>:
+.*:	c9c0fc00 	casalt	x0, x0, \[x0\]
+.*:	c9c0ffe0 	casalt	x0, x0, \[sp\]
+.*:	c9c0fc1f 	casalt	x0, xzr, \[x0\]
+.*:	c9c0ffff 	casalt	x0, xzr, \[sp\]
+.*:	c9dffc00 	casalt	xzr, x0, \[x0\]
+.*:	c9dfffe0 	casalt	xzr, x0, \[sp\]
+.*:	c9dffc1f 	casalt	xzr, xzr, \[x0\]
+.*:	c9dfffff 	casalt	xzr, xzr, \[sp\]
+
+.* <caslt>:
+.*:	c980fc00 	caslt	x0, x0, \[x0\]
+.*:	c980ffe0 	caslt	x0, x0, \[sp\]
+.*:	c980fc1f 	caslt	x0, xzr, \[x0\]
+.*:	c980ffff 	caslt	x0, xzr, \[sp\]
+.*:	c99ffc00 	caslt	xzr, x0, \[x0\]
+.*:	c99fffe0 	caslt	xzr, x0, \[sp\]
+.*:	c99ffc1f 	caslt	xzr, xzr, \[x0\]
+.*:	c99fffff 	caslt	xzr, xzr, \[sp\]
+
+.* <caspt>:
+.*:	49807c00 	caspt	x0, x1, x0, x1, \[x0\]
+.*:	49807fe0 	caspt	x0, x1, x0, x1, \[sp\]
+.*:	49807c1c 	caspt	x0, x1, x28, x29, \[x0\]
+.*:	49807ffc 	caspt	x0, x1, x28, x29, \[sp\]
+.*:	499c7c00 	caspt	x28, x29, x0, x1, \[x0\]
+.*:	499c7fe0 	caspt	x28, x29, x0, x1, \[sp\]
+.*:	499c7c1c 	caspt	x28, x29, x28, x29, \[x0\]
+.*:	499c7ffc 	caspt	x28, x29, x28, x29, \[sp\]
+
+.* <caspat>:
+.*:	49c07c00 	caspat	x0, x1, x0, x1, \[x0\]
+.*:	49c07fe0 	caspat	x0, x1, x0, x1, \[sp\]
+.*:	49c07c1c 	caspat	x0, x1, x28, x29, \[x0\]
+.*:	49c07ffc 	caspat	x0, x1, x28, x29, \[sp\]
+.*:	49dc7c00 	caspat	x28, x29, x0, x1, \[x0\]
+.*:	49dc7fe0 	caspat	x28, x29, x0, x1, \[sp\]
+.*:	49dc7c1c 	caspat	x28, x29, x28, x29, \[x0\]
+.*:	49dc7ffc 	caspat	x28, x29, x28, x29, \[sp\]
+
+.* <caspalt>:
+.*:	49c0fc00 	caspalt	x0, x1, x0, x1, \[x0\]
+.*:	49c0ffe0 	caspalt	x0, x1, x0, x1, \[sp\]
+.*:	49c0fc1c 	caspalt	x0, x1, x28, x29, \[x0\]
+.*:	49c0fffc 	caspalt	x0, x1, x28, x29, \[sp\]
+.*:	49dcfc00 	caspalt	x28, x29, x0, x1, \[x0\]
+.*:	49dcffe0 	caspalt	x28, x29, x0, x1, \[sp\]
+.*:	49dcfc1c 	caspalt	x28, x29, x28, x29, \[x0\]
+.*:	49dcfffc 	caspalt	x28, x29, x28, x29, \[sp\]
+
+.* <casplt>:
+.*:	4980fc00 	casplt	x0, x1, x0, x1, \[x0\]
+.*:	4980ffe0 	casplt	x0, x1, x0, x1, \[sp\]
+.*:	4980fc1c 	casplt	x0, x1, x28, x29, \[x0\]
+.*:	4980fffc 	casplt	x0, x1, x28, x29, \[sp\]
+.*:	499cfc00 	casplt	x28, x29, x0, x1, \[x0\]
+.*:	499cffe0 	casplt	x28, x29, x0, x1, \[sp\]
+.*:	499cfc1c 	casplt	x28, x29, x28, x29, \[x0\]
+.*:	499cfffc 	casplt	x28, x29, x28, x29, \[sp\]
+
+.* <ldtp>:
+.*:	e9400800 	ldtp	x0, x2, \[x0\]
+.*:	e97f8800 	ldtp	x0, x2, \[x0, #-8\]
+.*:	e9400be0 	ldtp	x0, x2, \[sp\]
+.*:	e97f8be0 	ldtp	x0, x2, \[sp, #-8\]
+.*:	e9407c00 	ldtp	x0, xzr, \[x0\]
+.*:	e97ffc00 	ldtp	x0, xzr, \[x0, #-8\]
+.*:	e9407fe0 	ldtp	x0, xzr, \[sp\]
+.*:	e97fffe0 	ldtp	x0, xzr, \[sp, #-8\]
+.*:	e940081f 	ldtp	xzr, x2, \[x0\]
+.*:	e97f881f 	ldtp	xzr, x2, \[x0, #-8\]
+.*:	e9400bff 	ldtp	xzr, x2, \[sp\]
+.*:	e97f8bff 	ldtp	xzr, x2, \[sp, #-8\]
+.*:	e940741f 	ldtp	xzr, x29, \[x0\]
+.*:	e97ff41f 	ldtp	xzr, x29, \[x0, #-8\]
+.*:	e94077ff 	ldtp	xzr, x29, \[sp\]
+.*:	e97ff7ff 	ldtp	xzr, x29, \[sp, #-8\]
+.*:	e9c11040 	ldtp	x0, x4, \[x2, #16\]!
+.*:	e9ff9040 	ldtp	x0, x4, \[x2, #-8\]!
+.*:	e9c113e0 	ldtp	x0, x4, \[sp, #16\]!
+.*:	e9ff93e0 	ldtp	x0, x4, \[sp, #-8\]!
+.*:	e9c17c40 	ldtp	x0, xzr, \[x2, #16\]!
+.*:	e9fffc40 	ldtp	x0, xzr, \[x2, #-8\]!
+.*:	e9c17fe0 	ldtp	x0, xzr, \[sp, #16\]!
+.*:	e9ffffe0 	ldtp	x0, xzr, \[sp, #-8\]!
+.*:	e9c1005f 	ldtp	xzr, x0, \[x2, #16\]!
+.*:	e9ff805f 	ldtp	xzr, x0, \[x2, #-8\]!
+.*:	e9c103ff 	ldtp	xzr, x0, \[sp, #16\]!
+.*:	e9ff83ff 	ldtp	xzr, x0, \[sp, #-8\]!
+.*:	e9c1745f 	ldtp	xzr, x29, \[x2, #16\]!
+.*:	e9fff45f 	ldtp	xzr, x29, \[x2, #-8\]!
+.*:	e9c177ff 	ldtp	xzr, x29, \[sp, #16\]!
+.*:	e9fff7ff 	ldtp	xzr, x29, \[sp, #-8\]!
+.*:	e8c11040 	ldtp	x0, x4, \[x2\], #16
+.*:	e8ff9040 	ldtp	x0, x4, \[x2\], #-8
+.*:	e8c113e0 	ldtp	x0, x4, \[sp\], #16
+.*:	e8ff93e0 	ldtp	x0, x4, \[sp\], #-8
+.*:	e8c17c40 	ldtp	x0, xzr, \[x2\], #16
+.*:	e8fffc40 	ldtp	x0, xzr, \[x2\], #-8
+.*:	e8c17fe0 	ldtp	x0, xzr, \[sp\], #16
+.*:	e8ffffe0 	ldtp	x0, xzr, \[sp\], #-8
+.*:	e8c1005f 	ldtp	xzr, x0, \[x2\], #16
+.*:	e8ff805f 	ldtp	xzr, x0, \[x2\], #-8
+.*:	e8c103ff 	ldtp	xzr, x0, \[sp\], #16
+.*:	e8ff83ff 	ldtp	xzr, x0, \[sp\], #-8
+.*:	e8c1745f 	ldtp	xzr, x29, \[x2\], #16
+.*:	e8fff45f 	ldtp	xzr, x29, \[x2\], #-8
+.*:	e8c177ff 	ldtp	xzr, x29, \[sp\], #16
+.*:	e8fff7ff 	ldtp	xzr, x29, \[sp\], #-8
+.*:	ed400800 	ldtp	q0, q2, \[x0\]
+.*:	ed7f8800 	ldtp	q0, q2, \[x0, #-16\]
+.*:	ed400be0 	ldtp	q0, q2, \[sp\]
+.*:	ed7f8be0 	ldtp	q0, q2, \[sp, #-16\]
+.*:	ed407c00 	ldtp	q0, q31, \[x0\]
+.*:	ed7ffc00 	ldtp	q0, q31, \[x0, #-16\]
+.*:	ed407fe0 	ldtp	q0, q31, \[sp\]
+.*:	ed7fffe0 	ldtp	q0, q31, \[sp, #-16\]
+.*:	ed40001f 	ldtp	q31, q0, \[x0\]
+.*:	ed7f801f 	ldtp	q31, q0, \[x0, #-16\]
+.*:	ed4003ff 	ldtp	q31, q0, \[sp\]
+.*:	ed7f83ff 	ldtp	q31, q0, \[sp, #-16\]
+.*:	ed40741f 	ldtp	q31, q29, \[x0\]
+.*:	ed7ff41f 	ldtp	q31, q29, \[x0, #-16\]
+.*:	ed4077ff 	ldtp	q31, q29, \[sp\]
+.*:	ed7ff7ff 	ldtp	q31, q29, \[sp, #-16\]
+.*:	edc10800 	ldtp	q0, q2, \[x0, #32\]!
+.*:	edff8800 	ldtp	q0, q2, \[x0, #-16\]!
+.*:	edc10be0 	ldtp	q0, q2, \[sp, #32\]!
+.*:	edff8be0 	ldtp	q0, q2, \[sp, #-16\]!
+.*:	edc17c00 	ldtp	q0, q31, \[x0, #32\]!
+.*:	edfffc00 	ldtp	q0, q31, \[x0, #-16\]!
+.*:	edc17fe0 	ldtp	q0, q31, \[sp, #32\]!
+.*:	edffffe0 	ldtp	q0, q31, \[sp, #-16\]!
+.*:	edc1081f 	ldtp	q31, q2, \[x0, #32\]!
+.*:	edff881f 	ldtp	q31, q2, \[x0, #-16\]!
+.*:	edc10bff 	ldtp	q31, q2, \[sp, #32\]!
+.*:	edff8bff 	ldtp	q31, q2, \[sp, #-16\]!
+.*:	edc1741f 	ldtp	q31, q29, \[x0, #32\]!
+.*:	edfff41f 	ldtp	q31, q29, \[x0, #-16\]!
+.*:	edc177ff 	ldtp	q31, q29, \[sp, #32\]!
+.*:	edfff7ff 	ldtp	q31, q29, \[sp, #-16\]!
+.*:	ecc10800 	ldtp	q0, q2, \[x0\], #32
+.*:	ecff8800 	ldtp	q0, q2, \[x0\], #-16
+.*:	ecc10be0 	ldtp	q0, q2, \[sp\], #32
+.*:	ecff8be0 	ldtp	q0, q2, \[sp\], #-16
+.*:	ecc17c00 	ldtp	q0, q31, \[x0\], #32
+.*:	ecfffc00 	ldtp	q0, q31, \[x0\], #-16
+.*:	ecc17fe0 	ldtp	q0, q31, \[sp\], #32
+.*:	ecffffe0 	ldtp	q0, q31, \[sp\], #-16
+.*:	ecc1081f 	ldtp	q31, q2, \[x0\], #32
+.*:	ecff881f 	ldtp	q31, q2, \[x0\], #-16
+.*:	ecc10bff 	ldtp	q31, q2, \[sp\], #32
+.*:	ecff8bff 	ldtp	q31, q2, \[sp\], #-16
+.*:	ecc1741f 	ldtp	q31, q29, \[x0\], #32
+.*:	ecfff41f 	ldtp	q31, q29, \[x0\], #-16
+.*:	ecc177ff 	ldtp	q31, q29, \[sp\], #32
+.*:	ecfff7ff 	ldtp	q31, q29, \[sp\], #-16
+
+.* <sttp>:
+.*:	e9000800 	sttp	x0, x2, \[x0\]
+.*:	e93f8800 	sttp	x0, x2, \[x0, #-8\]
+.*:	e9000be0 	sttp	x0, x2, \[sp\]
+.*:	e93f8be0 	sttp	x0, x2, \[sp, #-8\]
+.*:	e9007c00 	sttp	x0, xzr, \[x0\]
+.*:	e93ffc00 	sttp	x0, xzr, \[x0, #-8\]
+.*:	e9007fe0 	sttp	x0, xzr, \[sp\]
+.*:	e93fffe0 	sttp	x0, xzr, \[sp, #-8\]
+.*:	e900081f 	sttp	xzr, x2, \[x0\]
+.*:	e93f881f 	sttp	xzr, x2, \[x0, #-8\]
+.*:	e9000bff 	sttp	xzr, x2, \[sp\]
+.*:	e93f8bff 	sttp	xzr, x2, \[sp, #-8\]
+.*:	e900741f 	sttp	xzr, x29, \[x0\]
+.*:	e93ff41f 	sttp	xzr, x29, \[x0, #-8\]
+.*:	e90077ff 	sttp	xzr, x29, \[sp\]
+.*:	e93ff7ff 	sttp	xzr, x29, \[sp, #-8\]
+.*:	e9811040 	sttp	x0, x4, \[x2, #16\]!
+.*:	e9bf9040 	sttp	x0, x4, \[x2, #-8\]!
+.*:	e98113e0 	sttp	x0, x4, \[sp, #16\]!
+.*:	e9bf93e0 	sttp	x0, x4, \[sp, #-8\]!
+.*:	e9817c40 	sttp	x0, xzr, \[x2, #16\]!
+.*:	e9bffc40 	sttp	x0, xzr, \[x2, #-8\]!
+.*:	e9817fe0 	sttp	x0, xzr, \[sp, #16\]!
+.*:	e9bfffe0 	sttp	x0, xzr, \[sp, #-8\]!
+.*:	e981005f 	sttp	xzr, x0, \[x2, #16\]!
+.*:	e9bf805f 	sttp	xzr, x0, \[x2, #-8\]!
+.*:	e98103ff 	sttp	xzr, x0, \[sp, #16\]!
+.*:	e9bf83ff 	sttp	xzr, x0, \[sp, #-8\]!
+.*:	e981745f 	sttp	xzr, x29, \[x2, #16\]!
+.*:	e9bff45f 	sttp	xzr, x29, \[x2, #-8\]!
+.*:	e98177ff 	sttp	xzr, x29, \[sp, #16\]!
+.*:	e9bff7ff 	sttp	xzr, x29, \[sp, #-8\]!
+.*:	e8811040 	sttp	x0, x4, \[x2\], #16
+.*:	e8bf9040 	sttp	x0, x4, \[x2\], #-8
+.*:	e88113e0 	sttp	x0, x4, \[sp\], #16
+.*:	e8bf93e0 	sttp	x0, x4, \[sp\], #-8
+.*:	e8817c40 	sttp	x0, xzr, \[x2\], #16
+.*:	e8bffc40 	sttp	x0, xzr, \[x2\], #-8
+.*:	e8817fe0 	sttp	x0, xzr, \[sp\], #16
+.*:	e8bfffe0 	sttp	x0, xzr, \[sp\], #-8
+.*:	e881005f 	sttp	xzr, x0, \[x2\], #16
+.*:	e8bf805f 	sttp	xzr, x0, \[x2\], #-8
+.*:	e88103ff 	sttp	xzr, x0, \[sp\], #16
+.*:	e8bf83ff 	sttp	xzr, x0, \[sp\], #-8
+.*:	e881745f 	sttp	xzr, x29, \[x2\], #16
+.*:	e8bff45f 	sttp	xzr, x29, \[x2\], #-8
+.*:	e88177ff 	sttp	xzr, x29, \[sp\], #16
+.*:	e8bff7ff 	sttp	xzr, x29, \[sp\], #-8
+.*:	ed000800 	sttp	q0, q2, \[x0\]
+.*:	ed3f8800 	sttp	q0, q2, \[x0, #-16\]
+.*:	ed000be0 	sttp	q0, q2, \[sp\]
+.*:	ed3f8be0 	sttp	q0, q2, \[sp, #-16\]
+.*:	ed007c00 	sttp	q0, q31, \[x0\]
+.*:	ed3ffc00 	sttp	q0, q31, \[x0, #-16\]
+.*:	ed007fe0 	sttp	q0, q31, \[sp\]
+.*:	ed3fffe0 	sttp	q0, q31, \[sp, #-16\]
+.*:	ed00001f 	sttp	q31, q0, \[x0\]
+.*:	ed3f801f 	sttp	q31, q0, \[x0, #-16\]
+.*:	ed0003ff 	sttp	q31, q0, \[sp\]
+.*:	ed3f83ff 	sttp	q31, q0, \[sp, #-16\]
+.*:	ed00741f 	sttp	q31, q29, \[x0\]
+.*:	ed3ff41f 	sttp	q31, q29, \[x0, #-16\]
+.*:	ed0077ff 	sttp	q31, q29, \[sp\]
+.*:	ed3ff7ff 	sttp	q31, q29, \[sp, #-16\]
+.*:	ed810800 	sttp	q0, q2, \[x0, #32\]!
+.*:	edbf8800 	sttp	q0, q2, \[x0, #-16\]!
+.*:	ed810be0 	sttp	q0, q2, \[sp, #32\]!
+.*:	edbf8be0 	sttp	q0, q2, \[sp, #-16\]!
+.*:	ed817c00 	sttp	q0, q31, \[x0, #32\]!
+.*:	edbffc00 	sttp	q0, q31, \[x0, #-16\]!
+.*:	ed817fe0 	sttp	q0, q31, \[sp, #32\]!
+.*:	edbfffe0 	sttp	q0, q31, \[sp, #-16\]!
+.*:	ed81081f 	sttp	q31, q2, \[x0, #32\]!
+.*:	edbf881f 	sttp	q31, q2, \[x0, #-16\]!
+.*:	ed810bff 	sttp	q31, q2, \[sp, #32\]!
+.*:	edbf8bff 	sttp	q31, q2, \[sp, #-16\]!
+.*:	ed81741f 	sttp	q31, q29, \[x0, #32\]!
+.*:	edbff41f 	sttp	q31, q29, \[x0, #-16\]!
+.*:	ed8177ff 	sttp	q31, q29, \[sp, #32\]!
+.*:	edbff7ff 	sttp	q31, q29, \[sp, #-16\]!
+.*:	ec810800 	sttp	q0, q2, \[x0\], #32
+.*:	ecbf8800 	sttp	q0, q2, \[x0\], #-16
+.*:	ec810be0 	sttp	q0, q2, \[sp\], #32
+.*:	ecbf8be0 	sttp	q0, q2, \[sp\], #-16
+.*:	ec817c00 	sttp	q0, q31, \[x0\], #32
+.*:	ecbffc00 	sttp	q0, q31, \[x0\], #-16
+.*:	ec817fe0 	sttp	q0, q31, \[sp\], #32
+.*:	ecbfffe0 	sttp	q0, q31, \[sp\], #-16
+.*:	ec81081f 	sttp	q31, q2, \[x0\], #32
+.*:	ecbf881f 	sttp	q31, q2, \[x0\], #-16
+.*:	ec810bff 	sttp	q31, q2, \[sp\], #32
+.*:	ecbf8bff 	sttp	q31, q2, \[sp\], #-16
+.*:	ec81741f 	sttp	q31, q29, \[x0\], #32
+.*:	ecbff41f 	sttp	q31, q29, \[x0\], #-16
+.*:	ec8177ff 	sttp	q31, q29, \[sp\], #32
+.*:	ecbff7ff 	sttp	q31, q29, \[sp\], #-16
+
+.* <swpt>:
+.*:	19208400 	swpt	w0, w0, \[x0\]
+.*:	192087e0 	swpt	w0, w0, \[sp\]
+.*:	1920841f 	swpt	w0, wzr, \[x0\]
+.*:	192087ff 	swpt	w0, wzr, \[sp\]
+.*:	193f8400 	swpt	wzr, w0, \[x0\]
+.*:	193f87e0 	swpt	wzr, w0, \[sp\]
+.*:	193f841f 	swpt	wzr, wzr, \[x0\]
+.*:	193f87ff 	swpt	wzr, wzr, \[sp\]
+.*:	59208400 	swpt	x0, x0, \[x0\]
+.*:	592087e0 	swpt	x0, x0, \[sp\]
+.*:	5920841f 	swpt	x0, xzr, \[x0\]
+.*:	592087ff 	swpt	x0, xzr, \[sp\]
+.*:	593f8400 	swpt	xzr, x0, \[x0\]
+.*:	593f87e0 	swpt	xzr, x0, \[sp\]
+.*:	593f841f 	swpt	xzr, xzr, \[x0\]
+.*:	593f87ff 	swpt	xzr, xzr, \[sp\]
+
+.* <swpta>:
+.*:	19a08400 	swpta	w0, w0, \[x0\]
+.*:	19a087e0 	swpta	w0, w0, \[sp\]
+.*:	19a0841f 	swpta	w0, wzr, \[x0\]
+.*:	19a087ff 	swpta	w0, wzr, \[sp\]
+.*:	19bf8400 	swpta	wzr, w0, \[x0\]
+.*:	19bf87e0 	swpta	wzr, w0, \[sp\]
+.*:	19bf841f 	swpta	wzr, wzr, \[x0\]
+.*:	19bf87ff 	swpta	wzr, wzr, \[sp\]
+.*:	59a08400 	swpta	x0, x0, \[x0\]
+.*:	59a087e0 	swpta	x0, x0, \[sp\]
+.*:	59a0841f 	swpta	x0, xzr, \[x0\]
+.*:	59a087ff 	swpta	x0, xzr, \[sp\]
+.*:	59bf8400 	swpta	xzr, x0, \[x0\]
+.*:	59bf87e0 	swpta	xzr, x0, \[sp\]
+.*:	59bf841f 	swpta	xzr, xzr, \[x0\]
+.*:	59bf87ff 	swpta	xzr, xzr, \[sp\]
+
+.* <swptal>:
+.*:	19e08400 	swptal	w0, w0, \[x0\]
+.*:	19e087e0 	swptal	w0, w0, \[sp\]
+.*:	19e0841f 	swptal	w0, wzr, \[x0\]
+.*:	19e087ff 	swptal	w0, wzr, \[sp\]
+.*:	19ff8400 	swptal	wzr, w0, \[x0\]
+.*:	19ff87e0 	swptal	wzr, w0, \[sp\]
+.*:	19ff841f 	swptal	wzr, wzr, \[x0\]
+.*:	19ff87ff 	swptal	wzr, wzr, \[sp\]
+.*:	59e08400 	swptal	x0, x0, \[x0\]
+.*:	59e087e0 	swptal	x0, x0, \[sp\]
+.*:	59e0841f 	swptal	x0, xzr, \[x0\]
+.*:	59e087ff 	swptal	x0, xzr, \[sp\]
+.*:	59ff8400 	swptal	xzr, x0, \[x0\]
+.*:	59ff87e0 	swptal	xzr, x0, \[sp\]
+.*:	59ff841f 	swptal	xzr, xzr, \[x0\]
+.*:	59ff87ff 	swptal	xzr, xzr, \[sp\]
+
+.* <swptl>:
+.*:	19608400 	swptl	w0, w0, \[x0\]
+.*:	196087e0 	swptl	w0, w0, \[sp\]
+.*:	1960841f 	swptl	w0, wzr, \[x0\]
+.*:	196087ff 	swptl	w0, wzr, \[sp\]
+.*:	197f8400 	swptl	wzr, w0, \[x0\]
+.*:	197f87e0 	swptl	wzr, w0, \[sp\]
+.*:	197f841f 	swptl	wzr, wzr, \[x0\]
+.*:	197f87ff 	swptl	wzr, wzr, \[sp\]
+.*:	59608400 	swptl	x0, x0, \[x0\]
+.*:	596087e0 	swptl	x0, x0, \[sp\]
+.*:	5960841f 	swptl	x0, xzr, \[x0\]
+.*:	596087ff 	swptl	x0, xzr, \[sp\]
+.*:	597f8400 	swptl	xzr, x0, \[x0\]
+.*:	597f87e0 	swptl	xzr, x0, \[sp\]
+.*:	597f841f 	swptl	xzr, xzr, \[x0\]
+.*:	597f87ff 	swptl	xzr, xzr, \[sp\]
+
+.* <ldtadd>:
+.*:	19200400 	ldtadd	w0, w0, \[x0\]
+.*:	192007e0 	ldtadd	w0, w0, \[sp\]
+.*:	1920041f 	sttadd	w0, \[x0\]
+.*:	192007ff 	sttadd	w0, \[sp\]
+.*:	193f0400 	ldtadd	wzr, w0, \[x0\]
+.*:	193f07e0 	ldtadd	wzr, w0, \[sp\]
+.*:	193f041f 	sttadd	wzr, \[x0\]
+.*:	193f07ff 	sttadd	wzr, \[sp\]
+.*:	1920041d 	ldtadd	w0, w29, \[x0\]
+.*:	192007fd 	ldtadd	w0, w29, \[sp\]
+.*:	193f041d 	ldtadd	wzr, w29, \[x0\]
+.*:	193f07fd 	ldtadd	wzr, w29, \[sp\]
+.*:	59200400 	ldtadd	x0, x0, \[x0\]
+.*:	592007e0 	ldtadd	x0, x0, \[sp\]
+.*:	5920041f 	sttadd	x0, \[x0\]
+.*:	592007ff 	sttadd	x0, \[sp\]
+.*:	593f0400 	ldtadd	xzr, x0, \[x0\]
+.*:	593f07e0 	ldtadd	xzr, x0, \[sp\]
+.*:	593f041f 	sttadd	xzr, \[x0\]
+.*:	593f07ff 	sttadd	xzr, \[sp\]
+.*:	5920041d 	ldtadd	x0, x29, \[x0\]
+.*:	592007fd 	ldtadd	x0, x29, \[sp\]
+.*:	593f041d 	ldtadd	xzr, x29, \[x0\]
+.*:	593f07fd 	ldtadd	xzr, x29, \[sp\]
+
+.* <sttadd>:
+.*:	1920041f 	sttadd	w0, \[x0\]
+.*:	192007ff 	sttadd	w0, \[sp\]
+.*:	193f041f 	sttadd	wzr, \[x0\]
+.*:	193f07ff 	sttadd	wzr, \[sp\]
+.*:	5920041f 	sttadd	x0, \[x0\]
+.*:	592007ff 	sttadd	x0, \[sp\]
+.*:	593f041f 	sttadd	xzr, \[x0\]
+.*:	593f07ff 	sttadd	xzr, \[sp\]
+
+.* <ldtadda>:
+.*:	19a00400 	ldtadda	w0, w0, \[x0\]
+.*:	19a007e0 	ldtadda	w0, w0, \[sp\]
+.*:	19a0041f 	ldtadda	w0, wzr, \[x0\]
+.*:	19a007ff 	ldtadda	w0, wzr, \[sp\]
+.*:	19bf0400 	ldtadda	wzr, w0, \[x0\]
+.*:	19bf07e0 	ldtadda	wzr, w0, \[sp\]
+.*:	19bf041f 	ldtadda	wzr, wzr, \[x0\]
+.*:	19bf07ff 	ldtadda	wzr, wzr, \[sp\]
+.*:	59a00400 	ldtadda	x0, x0, \[x0\]
+.*:	59a007e0 	ldtadda	x0, x0, \[sp\]
+.*:	59a0041f 	ldtadda	x0, xzr, \[x0\]
+.*:	59a007ff 	ldtadda	x0, xzr, \[sp\]
+.*:	59bf0400 	ldtadda	xzr, x0, \[x0\]
+.*:	59bf07e0 	ldtadda	xzr, x0, \[sp\]
+.*:	59bf041f 	ldtadda	xzr, xzr, \[x0\]
+.*:	59bf07ff 	ldtadda	xzr, xzr, \[sp\]
+
+.* <ldtaddal>:
+.*:	19e00400 	ldtaddal	w0, w0, \[x0\]
+.*:	19e007e0 	ldtaddal	w0, w0, \[sp\]
+.*:	19e0041f 	ldtaddal	w0, wzr, \[x0\]
+.*:	19e007ff 	ldtaddal	w0, wzr, \[sp\]
+.*:	19ff0400 	ldtaddal	wzr, w0, \[x0\]
+.*:	19ff07e0 	ldtaddal	wzr, w0, \[sp\]
+.*:	19ff041f 	ldtaddal	wzr, wzr, \[x0\]
+.*:	19ff07ff 	ldtaddal	wzr, wzr, \[sp\]
+.*:	59e00400 	ldtaddal	x0, x0, \[x0\]
+.*:	59e007e0 	ldtaddal	x0, x0, \[sp\]
+.*:	59e0041f 	ldtaddal	x0, xzr, \[x0\]
+.*:	59e007ff 	ldtaddal	x0, xzr, \[sp\]
+.*:	59ff0400 	ldtaddal	xzr, x0, \[x0\]
+.*:	59ff07e0 	ldtaddal	xzr, x0, \[sp\]
+.*:	59ff041f 	ldtaddal	xzr, xzr, \[x0\]
+.*:	59ff07ff 	ldtaddal	xzr, xzr, \[sp\]
+
+.* <ldtaddl>:
+.*:	19600400 	ldtaddl	w0, w0, \[x0\]
+.*:	196007e0 	ldtaddl	w0, w0, \[sp\]
+.*:	1960041f 	sttaddl	w0, \[x0\]
+.*:	196007ff 	sttaddl	w0, \[sp\]
+.*:	197f0400 	ldtaddl	wzr, w0, \[x0\]
+.*:	197f07e0 	ldtaddl	wzr, w0, \[sp\]
+.*:	197f041f 	sttaddl	wzr, \[x0\]
+.*:	197f07ff 	sttaddl	wzr, \[sp\]
+.*:	1960041d 	ldtaddl	w0, w29, \[x0\]
+.*:	196007fd 	ldtaddl	w0, w29, \[sp\]
+.*:	197f041d 	ldtaddl	wzr, w29, \[x0\]
+.*:	197f07fd 	ldtaddl	wzr, w29, \[sp\]
+.*:	59600400 	ldtaddl	x0, x0, \[x0\]
+.*:	596007e0 	ldtaddl	x0, x0, \[sp\]
+.*:	5960041f 	sttaddl	x0, \[x0\]
+.*:	596007ff 	sttaddl	x0, \[sp\]
+.*:	597f0400 	ldtaddl	xzr, x0, \[x0\]
+.*:	597f07e0 	ldtaddl	xzr, x0, \[sp\]
+.*:	597f041f 	sttaddl	xzr, \[x0\]
+.*:	597f07ff 	sttaddl	xzr, \[sp\]
+.*:	5960041d 	ldtaddl	x0, x29, \[x0\]
+.*:	596007fd 	ldtaddl	x0, x29, \[sp\]
+.*:	597f041d 	ldtaddl	xzr, x29, \[x0\]
+.*:	597f07fd 	ldtaddl	xzr, x29, \[sp\]
+
+.* <sttaddl>:
+.*:	1960041f 	sttaddl	w0, \[x0\]
+.*:	196007ff 	sttaddl	w0, \[sp\]
+.*:	197f041f 	sttaddl	wzr, \[x0\]
+.*:	197f07ff 	sttaddl	wzr, \[sp\]
+.*:	5960041f 	sttaddl	x0, \[x0\]
+.*:	596007ff 	sttaddl	x0, \[sp\]
+.*:	597f041f 	sttaddl	xzr, \[x0\]
+.*:	597f07ff 	sttaddl	xzr, \[sp\]
+
+.* <ldtclr>:
+.*:	19201400 	ldtclr	w0, w0, \[x0\]
+.*:	192017e0 	ldtclr	w0, w0, \[sp\]
+.*:	1920141f 	sttclr	w0, \[x0\]
+.*:	192017ff 	sttclr	w0, \[sp\]
+.*:	193f1400 	ldtclr	wzr, w0, \[x0\]
+.*:	193f17e0 	ldtclr	wzr, w0, \[sp\]
+.*:	193f141f 	sttclr	wzr, \[x0\]
+.*:	193f17ff 	sttclr	wzr, \[sp\]
+.*:	1920141d 	ldtclr	w0, w29, \[x0\]
+.*:	192017fd 	ldtclr	w0, w29, \[sp\]
+.*:	193f141d 	ldtclr	wzr, w29, \[x0\]
+.*:	193f17fd 	ldtclr	wzr, w29, \[sp\]
+.*:	59201400 	ldtclr	x0, x0, \[x0\]
+.*:	592017e0 	ldtclr	x0, x0, \[sp\]
+.*:	5920141f 	sttclr	x0, \[x0\]
+.*:	592017ff 	sttclr	x0, \[sp\]
+.*:	593f1400 	ldtclr	xzr, x0, \[x0\]
+.*:	593f17e0 	ldtclr	xzr, x0, \[sp\]
+.*:	593f141f 	sttclr	xzr, \[x0\]
+.*:	593f17ff 	sttclr	xzr, \[sp\]
+.*:	5920141d 	ldtclr	x0, x29, \[x0\]
+.*:	592017fd 	ldtclr	x0, x29, \[sp\]
+.*:	593f141d 	ldtclr	xzr, x29, \[x0\]
+.*:	593f17fd 	ldtclr	xzr, x29, \[sp\]
+
+.* <sttclr>:
+.*:	1920141f 	sttclr	w0, \[x0\]
+.*:	192017ff 	sttclr	w0, \[sp\]
+.*:	193f141f 	sttclr	wzr, \[x0\]
+.*:	193f17ff 	sttclr	wzr, \[sp\]
+.*:	5920141f 	sttclr	x0, \[x0\]
+.*:	592017ff 	sttclr	x0, \[sp\]
+.*:	593f141f 	sttclr	xzr, \[x0\]
+.*:	593f17ff 	sttclr	xzr, \[sp\]
+
+.* <ldtclra>:
+.*:	19a01400 	ldtclra	w0, w0, \[x0\]
+.*:	19a017e0 	ldtclra	w0, w0, \[sp\]
+.*:	19a0141f 	ldtclra	w0, wzr, \[x0\]
+.*:	19a017ff 	ldtclra	w0, wzr, \[sp\]
+.*:	19bf1400 	ldtclra	wzr, w0, \[x0\]
+.*:	19bf17e0 	ldtclra	wzr, w0, \[sp\]
+.*:	19bf141f 	ldtclra	wzr, wzr, \[x0\]
+.*:	19bf17ff 	ldtclra	wzr, wzr, \[sp\]
+.*:	59a01400 	ldtclra	x0, x0, \[x0\]
+.*:	59a017e0 	ldtclra	x0, x0, \[sp\]
+.*:	59a0141f 	ldtclra	x0, xzr, \[x0\]
+.*:	59a017ff 	ldtclra	x0, xzr, \[sp\]
+.*:	59bf1400 	ldtclra	xzr, x0, \[x0\]
+.*:	59bf17e0 	ldtclra	xzr, x0, \[sp\]
+.*:	59bf141f 	ldtclra	xzr, xzr, \[x0\]
+.*:	59bf17ff 	ldtclra	xzr, xzr, \[sp\]
+
+.* <ldtclral>:
+.*:	19e01400 	ldtclral	w0, w0, \[x0\]
+.*:	19e017e0 	ldtclral	w0, w0, \[sp\]
+.*:	19e0141f 	ldtclral	w0, wzr, \[x0\]
+.*:	19e017ff 	ldtclral	w0, wzr, \[sp\]
+.*:	19ff1400 	ldtclral	wzr, w0, \[x0\]
+.*:	19ff17e0 	ldtclral	wzr, w0, \[sp\]
+.*:	19ff141f 	ldtclral	wzr, wzr, \[x0\]
+.*:	19ff17ff 	ldtclral	wzr, wzr, \[sp\]
+.*:	59e01400 	ldtclral	x0, x0, \[x0\]
+.*:	59e017e0 	ldtclral	x0, x0, \[sp\]
+.*:	59e0141f 	ldtclral	x0, xzr, \[x0\]
+.*:	59e017ff 	ldtclral	x0, xzr, \[sp\]
+.*:	59ff1400 	ldtclral	xzr, x0, \[x0\]
+.*:	59ff17e0 	ldtclral	xzr, x0, \[sp\]
+.*:	59ff141f 	ldtclral	xzr, xzr, \[x0\]
+.*:	59ff17ff 	ldtclral	xzr, xzr, \[sp\]
+
+.* <ldtclrl>:
+.*:	19601400 	ldtclrl	w0, w0, \[x0\]
+.*:	196017e0 	ldtclrl	w0, w0, \[sp\]
+.*:	1960141f 	sttclrl	w0, \[x0\]
+.*:	196017ff 	sttclrl	w0, \[sp\]
+.*:	197f1400 	ldtclrl	wzr, w0, \[x0\]
+.*:	197f17e0 	ldtclrl	wzr, w0, \[sp\]
+.*:	197f141f 	sttclrl	wzr, \[x0\]
+.*:	197f17ff 	sttclrl	wzr, \[sp\]
+.*:	1960141d 	ldtclrl	w0, w29, \[x0\]
+.*:	196017fd 	ldtclrl	w0, w29, \[sp\]
+.*:	197f141d 	ldtclrl	wzr, w29, \[x0\]
+.*:	197f17fd 	ldtclrl	wzr, w29, \[sp\]
+.*:	59601400 	ldtclrl	x0, x0, \[x0\]
+.*:	596017e0 	ldtclrl	x0, x0, \[sp\]
+.*:	5960141f 	sttclrl	x0, \[x0\]
+.*:	596017ff 	sttclrl	x0, \[sp\]
+.*:	597f1400 	ldtclrl	xzr, x0, \[x0\]
+.*:	597f17e0 	ldtclrl	xzr, x0, \[sp\]
+.*:	597f141f 	sttclrl	xzr, \[x0\]
+.*:	597f17ff 	sttclrl	xzr, \[sp\]
+.*:	5960141d 	ldtclrl	x0, x29, \[x0\]
+.*:	596017fd 	ldtclrl	x0, x29, \[sp\]
+.*:	597f141d 	ldtclrl	xzr, x29, \[x0\]
+.*:	597f17fd 	ldtclrl	xzr, x29, \[sp\]
+
+.* <sttclrl>:
+.*:	1960141f 	sttclrl	w0, \[x0\]
+.*:	196017ff 	sttclrl	w0, \[sp\]
+.*:	197f141f 	sttclrl	wzr, \[x0\]
+.*:	197f17ff 	sttclrl	wzr, \[sp\]
+.*:	5960141f 	sttclrl	x0, \[x0\]
+.*:	596017ff 	sttclrl	x0, \[sp\]
+.*:	597f141f 	sttclrl	xzr, \[x0\]
+.*:	597f17ff 	sttclrl	xzr, \[sp\]
+
+.* <ldtset>:
+.*:	19203400 	ldtset	w0, w0, \[x0\]
+.*:	192037e0 	ldtset	w0, w0, \[sp\]
+.*:	1920341f 	sttset	w0, \[x0\]
+.*:	192037ff 	sttset	w0, \[sp\]
+.*:	193f3400 	ldtset	wzr, w0, \[x0\]
+.*:	193f37e0 	ldtset	wzr, w0, \[sp\]
+.*:	193f341f 	sttset	wzr, \[x0\]
+.*:	193f37ff 	sttset	wzr, \[sp\]
+.*:	1920341d 	ldtset	w0, w29, \[x0\]
+.*:	192037fd 	ldtset	w0, w29, \[sp\]
+.*:	193f341d 	ldtset	wzr, w29, \[x0\]
+.*:	193f37fd 	ldtset	wzr, w29, \[sp\]
+.*:	59203400 	ldtset	x0, x0, \[x0\]
+.*:	592037e0 	ldtset	x0, x0, \[sp\]
+.*:	5920341f 	sttset	x0, \[x0\]
+.*:	592037ff 	sttset	x0, \[sp\]
+.*:	593f3400 	ldtset	xzr, x0, \[x0\]
+.*:	593f37e0 	ldtset	xzr, x0, \[sp\]
+.*:	593f341f 	sttset	xzr, \[x0\]
+.*:	593f37ff 	sttset	xzr, \[sp\]
+.*:	5920341d 	ldtset	x0, x29, \[x0\]
+.*:	592037fd 	ldtset	x0, x29, \[sp\]
+.*:	593f341d 	ldtset	xzr, x29, \[x0\]
+.*:	593f37fd 	ldtset	xzr, x29, \[sp\]
+
+.* <sttset>:
+.*:	1920341f 	sttset	w0, \[x0\]
+.*:	192037ff 	sttset	w0, \[sp\]
+.*:	193f341f 	sttset	wzr, \[x0\]
+.*:	193f37ff 	sttset	wzr, \[sp\]
+.*:	5920341f 	sttset	x0, \[x0\]
+.*:	592037ff 	sttset	x0, \[sp\]
+.*:	593f341f 	sttset	xzr, \[x0\]
+.*:	593f37ff 	sttset	xzr, \[sp\]
+
+.* <ldtseta>:
+.*:	19a03400 	ldtseta	w0, w0, \[x0\]
+.*:	19a037e0 	ldtseta	w0, w0, \[sp\]
+.*:	19a0341f 	ldtseta	w0, wzr, \[x0\]
+.*:	19a037ff 	ldtseta	w0, wzr, \[sp\]
+.*:	19bf3400 	ldtseta	wzr, w0, \[x0\]
+.*:	19bf37e0 	ldtseta	wzr, w0, \[sp\]
+.*:	19bf341f 	ldtseta	wzr, wzr, \[x0\]
+.*:	19bf37ff 	ldtseta	wzr, wzr, \[sp\]
+.*:	59a03400 	ldtseta	x0, x0, \[x0\]
+.*:	59a037e0 	ldtseta	x0, x0, \[sp\]
+.*:	59a0341f 	ldtseta	x0, xzr, \[x0\]
+.*:	59a037ff 	ldtseta	x0, xzr, \[sp\]
+.*:	59bf3400 	ldtseta	xzr, x0, \[x0\]
+.*:	59bf37e0 	ldtseta	xzr, x0, \[sp\]
+.*:	59bf341f 	ldtseta	xzr, xzr, \[x0\]
+.*:	59bf37ff 	ldtseta	xzr, xzr, \[sp\]
+
+.* <ldtsetal>:
+.*:	19e03400 	ldtsetal	w0, w0, \[x0\]
+.*:	19e037e0 	ldtsetal	w0, w0, \[sp\]
+.*:	19e0341f 	ldtsetal	w0, wzr, \[x0\]
+.*:	19e037ff 	ldtsetal	w0, wzr, \[sp\]
+.*:	19ff3400 	ldtsetal	wzr, w0, \[x0\]
+.*:	19ff37e0 	ldtsetal	wzr, w0, \[sp\]
+.*:	19ff341f 	ldtsetal	wzr, wzr, \[x0\]
+.*:	19ff37ff 	ldtsetal	wzr, wzr, \[sp\]
+.*:	59e03400 	ldtsetal	x0, x0, \[x0\]
+.*:	59e037e0 	ldtsetal	x0, x0, \[sp\]
+.*:	59e0341f 	ldtsetal	x0, xzr, \[x0\]
+.*:	59e037ff 	ldtsetal	x0, xzr, \[sp\]
+.*:	59ff3400 	ldtsetal	xzr, x0, \[x0\]
+.*:	59ff37e0 	ldtsetal	xzr, x0, \[sp\]
+.*:	59ff341f 	ldtsetal	xzr, xzr, \[x0\]
+.*:	59ff37ff 	ldtsetal	xzr, xzr, \[sp\]
+
+.* <ldtsetl>:
+.*:	19603400 	ldtsetl	w0, w0, \[x0\]
+.*:	196037e0 	ldtsetl	w0, w0, \[sp\]
+.*:	1960341f 	sttsetl	w0, \[x0\]
+.*:	196037ff 	sttsetl	w0, \[sp\]
+.*:	197f3400 	ldtsetl	wzr, w0, \[x0\]
+.*:	197f37e0 	ldtsetl	wzr, w0, \[sp\]
+.*:	197f341f 	sttsetl	wzr, \[x0\]
+.*:	197f37ff 	sttsetl	wzr, \[sp\]
+.*:	1960341d 	ldtsetl	w0, w29, \[x0\]
+.*:	196037fd 	ldtsetl	w0, w29, \[sp\]
+.*:	197f341d 	ldtsetl	wzr, w29, \[x0\]
+.*:	197f37fd 	ldtsetl	wzr, w29, \[sp\]
+.*:	59603400 	ldtsetl	x0, x0, \[x0\]
+.*:	596037e0 	ldtsetl	x0, x0, \[sp\]
+.*:	5960341f 	sttsetl	x0, \[x0\]
+.*:	596037ff 	sttsetl	x0, \[sp\]
+.*:	597f3400 	ldtsetl	xzr, x0, \[x0\]
+.*:	597f37e0 	ldtsetl	xzr, x0, \[sp\]
+.*:	597f341f 	sttsetl	xzr, \[x0\]
+.*:	597f37ff 	sttsetl	xzr, \[sp\]
+.*:	5960341d 	ldtsetl	x0, x29, \[x0\]
+.*:	596037fd 	ldtsetl	x0, x29, \[sp\]
+.*:	597f341d 	ldtsetl	xzr, x29, \[x0\]
+.*:	597f37fd 	ldtsetl	xzr, x29, \[sp\]
+.* <sttsetl>:
+.*:	1960341f 	sttsetl	w0, \[x0\]
+.*:	196037ff 	sttsetl	w0, \[sp\]
+.*:	197f341f 	sttsetl	wzr, \[x0\]
+.*:	197f37ff 	sttsetl	wzr, \[sp\]
+.*:	5960341f 	sttsetl	x0, \[x0\]
+.*:	596037ff 	sttsetl	x0, \[sp\]
+.*:	597f341f 	sttsetl	xzr, \[x0\]
+.*:	597f37ff 	sttsetl	xzr, \[sp\]
+
+.* <ldtnp>:
+.*:	e8400800 	ldtnp	x0, x2, \[x0\]
+.*:	e87f8800 	ldtnp	x0, x2, \[x0, #-8\]
+.*:	e8400be0 	ldtnp	x0, x2, \[sp\]
+.*:	e87f8be0 	ldtnp	x0, x2, \[sp, #-8\]
+.*:	e8407c00 	ldtnp	x0, xzr, \[x0\]
+.*:	e87ffc00 	ldtnp	x0, xzr, \[x0, #-8\]
+.*:	e8407fe0 	ldtnp	x0, xzr, \[sp\]
+.*:	e87fffe0 	ldtnp	x0, xzr, \[sp, #-8\]
+.*:	e840081f 	ldtnp	xzr, x2, \[x0\]
+.*:	e87f881f 	ldtnp	xzr, x2, \[x0, #-8\]
+.*:	e8400bff 	ldtnp	xzr, x2, \[sp\]
+.*:	e87f8bff 	ldtnp	xzr, x2, \[sp, #-8\]
+.*:	e840741f 	ldtnp	xzr, x29, \[x0\]
+.*:	e87ff41f 	ldtnp	xzr, x29, \[x0, #-8\]
+.*:	e84077ff 	ldtnp	xzr, x29, \[sp\]
+.*:	e87ff7ff 	ldtnp	xzr, x29, \[sp, #-8\]
+.*:	ec400800 	ldtnp	q0, q2, \[x0\]
+.*:	ec7f8800 	ldtnp	q0, q2, \[x0, #-16\]
+.*:	ec400be0 	ldtnp	q0, q2, \[sp\]
+.*:	ec7f8be0 	ldtnp	q0, q2, \[sp, #-16\]
+.*:	ec407c00 	ldtnp	q0, q31, \[x0\]
+.*:	ec7ffc00 	ldtnp	q0, q31, \[x0, #-16\]
+.*:	ec407fe0 	ldtnp	q0, q31, \[sp\]
+.*:	ec7fffe0 	ldtnp	q0, q31, \[sp, #-16\]
+.*:	ec40001f 	ldtnp	q31, q0, \[x0\]
+.*:	ec7f801f 	ldtnp	q31, q0, \[x0, #-16\]
+.*:	ec4003ff 	ldtnp	q31, q0, \[sp\]
+.*:	ec7f83ff 	ldtnp	q31, q0, \[sp, #-16\]
+.*:	ec40741f 	ldtnp	q31, q29, \[x0\]
+.*:	ec7ff41f 	ldtnp	q31, q29, \[x0, #-16\]
+.*:	ec4077ff 	ldtnp	q31, q29, \[sp\]
+.*:	ec7ff7ff 	ldtnp	q31, q29, \[sp, #-16\]
+
+.* <sttnp>:
+.*:	e8000800 	sttnp	x0, x2, \[x0\]
+.*:	e83f8800 	sttnp	x0, x2, \[x0, #-8\]
+.*:	e8000be0 	sttnp	x0, x2, \[sp\]
+.*:	e83f8be0 	sttnp	x0, x2, \[sp, #-8\]
+.*:	e8007c00 	sttnp	x0, xzr, \[x0\]
+.*:	e83ffc00 	sttnp	x0, xzr, \[x0, #-8\]
+.*:	e8007fe0 	sttnp	x0, xzr, \[sp\]
+.*:	e83fffe0 	sttnp	x0, xzr, \[sp, #-8\]
+.*:	e800081f 	sttnp	xzr, x2, \[x0\]
+.*:	e83f881f 	sttnp	xzr, x2, \[x0, #-8\]
+.*:	e8000bff 	sttnp	xzr, x2, \[sp\]
+.*:	e83f8bff 	sttnp	xzr, x2, \[sp, #-8\]
+.*:	e800741f 	sttnp	xzr, x29, \[x0\]
+.*:	e83ff41f 	sttnp	xzr, x29, \[x0, #-8\]
+.*:	e80077ff 	sttnp	xzr, x29, \[sp\]
+.*:	e83ff7ff 	sttnp	xzr, x29, \[sp, #-8\]
+.*:	ec000800 	sttnp	q0, q2, \[x0\]
+.*:	ec3f8800 	sttnp	q0, q2, \[x0, #-16\]
+.*:	ec000be0 	sttnp	q0, q2, \[sp\]
+.*:	ec3f8be0 	sttnp	q0, q2, \[sp, #-16\]
+.*:	ec007c00 	sttnp	q0, q31, \[x0\]
+.*:	ec3ffc00 	sttnp	q0, q31, \[x0, #-16\]
+.*:	ec007fe0 	sttnp	q0, q31, \[sp\]
+.*:	ec3fffe0 	sttnp	q0, q31, \[sp, #-16\]
+.*:	ec00001f 	sttnp	q31, q0, \[x0\]
+.*:	ec3f801f 	sttnp	q31, q0, \[x0, #-16\]
+.*:	ec0003ff 	sttnp	q31, q0, \[sp\]
+.*:	ec3f83ff 	sttnp	q31, q0, \[sp, #-16\]
+.*:	ec00741f 	sttnp	q31, q29, \[x0\]
+.*:	ec3ff41f 	sttnp	q31, q29, \[x0, #-16\]
+.*:	ec0077ff 	sttnp	q31, q29, \[sp\]
+.*:	ec3ff7ff 	sttnp	q31, q29, \[sp, #-16\]
diff --git a/gas/testsuite/gas/aarch64/lsui.s b/gas/testsuite/gas/aarch64/lsui.s
new file mode 100644
index 00000000000..90063c66500
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/lsui.s
@@ -0,0 +1,803 @@
+ldtxr:
+	ldtxr	w0, [x0]
+	ldtxr	w0, [sp]
+	ldtxr	wzr, [x0]
+	ldtxr	x0, [x0]
+	ldtxr	x0, [sp]
+	ldtxr	xzr, [x0]
+
+ldatxr:
+	ldatxr	w0, [x0]
+	ldatxr	w0, [sp]
+	ldatxr	wzr, [x0]
+	ldatxr	x0, [x0]
+	ldatxr	x0, [sp]
+	ldatxr	xzr, [x0]
+
+sttxr:
+	sttxr	w0, w4, [x2]
+	sttxr	w0, w4, [sp]
+	sttxr	w0, wzr, [x2]
+	sttxr	w0, wzr, [sp]
+	sttxr	w29, w4, [x0]
+	sttxr	w29, w4, [sp]
+	sttxr	w29, wzr, [x0]
+	sttxr	w29, wzr, [sp]
+	sttxr	w0, x4, [x2]
+	sttxr	w0, x4, [sp]
+	sttxr	w0, xzr, [x2]
+	sttxr	w0, xzr, [sp]
+	sttxr	w29, x4, [x0]
+	sttxr	w29, x4, [sp]
+	sttxr	w29, xzr, [x0]
+	sttxr	w29, xzr, [sp]
+
+stltxr:
+	stltxr	w0, w4, [x2]
+	stltxr	w0, w4, [sp]
+	stltxr	w0, wzr, [x2]
+	stltxr	w0, wzr, [sp]
+	stltxr	w29, w4, [x0]
+	stltxr	w29, w4, [sp]
+	stltxr	w29, wzr, [x0]
+	stltxr	w29, wzr, [sp]
+	stltxr	w0, x4, [x2]
+	stltxr	w0, x4, [sp]
+	stltxr	w0, xzr, [x2]
+	stltxr	w0, xzr, [sp]
+	stltxr	w29, x4, [x0]
+	stltxr	w29, x4, [sp]
+	stltxr	w29, xzr, [x0]
+	stltxr	w29, xzr, [sp]
+
+cast:
+	cast	x0, x0, [x0]
+	cast	x0, x0, [sp]
+	cast	x0, xzr, [x0]
+	cast	x0, xzr, [sp]
+	cast	xzr, x0, [x0]
+	cast	xzr, x0, [sp]
+	cast	xzr, xzr, [x0]
+	cast	xzr, xzr, [sp]
+
+casat:
+	casat	x0, x0, [x0]
+	casat	x0, x0, [sp]
+	casat	x0, xzr, [x0]
+	casat	x0, xzr, [sp]
+	casat	xzr, x0, [x0]
+	casat	xzr, x0, [sp]
+	casat	xzr, xzr, [x0]
+	casat	xzr, xzr, [sp]
+
+casalt:
+	casalt	x0, x0, [x0]
+	casalt	x0, x0, [sp]
+	casalt	x0, xzr, [x0]
+	casalt	x0, xzr, [sp]
+	casalt	xzr, x0, [x0]
+	casalt	xzr, x0, [sp]
+	casalt	xzr, xzr, [x0]
+	casalt	xzr, xzr, [sp]
+
+caslt:
+	caslt	x0, x0, [x0]
+	caslt	x0, x0, [sp]
+	caslt	x0, xzr, [x0]
+	caslt	x0, xzr, [sp]
+	caslt	xzr, x0, [x0]
+	caslt	xzr, x0, [sp]
+	caslt	xzr, xzr, [x0]
+	caslt	xzr, xzr, [sp]
+
+caspt:
+	caspt	x0, x1, x0, x1, [x0]
+	caspt	x0, x1, x0, x1, [sp]
+	caspt	x0, x1, x28, x29, [x0]
+	caspt	x0, x1, x28, x29, [sp]
+	caspt	x28, x29, x0, x1, [x0]
+	caspt	x28, x29, x0, x1, [sp]
+	caspt	x28, x29, x28, x29, [x0]
+	caspt	x28, x29, x28, x29, [sp]
+
+caspat:
+	caspat	x0, x1, x0, x1, [x0]
+	caspat	x0, x1, x0, x1, [sp]
+	caspat	x0, x1, x28, x29, [x0]
+	caspat	x0, x1, x28, x29, [sp]
+	caspat	x28, x29, x0, x1, [x0]
+	caspat	x28, x29, x0, x1, [sp]
+	caspat	x28, x29, x28, x29, [x0]
+	caspat	x28, x29, x28, x29, [sp]
+
+caspalt:
+	caspalt	x0, x1, x0, x1, [x0]
+	caspalt	x0, x1, x0, x1, [sp]
+	caspalt	x0, x1, x28, x29, [x0]
+	caspalt	x0, x1, x28, x29, [sp]
+	caspalt	x28, x29, x0, x1, [x0]
+	caspalt	x28, x29, x0, x1, [sp]
+	caspalt	x28, x29, x28, x29, [x0]
+	caspalt	x28, x29, x28, x29, [sp]
+
+casplt:
+	casplt	x0, x1, x0, x1, [x0]
+	casplt	x0, x1, x0, x1, [sp]
+	casplt	x0, x1, x28, x29, [x0]
+	casplt	x0, x1, x28, x29, [sp]
+	casplt	x28, x29, x0, x1, [x0]
+	casplt	x28, x29, x0, x1, [sp]
+	casplt	x28, x29, x28, x29, [x0]
+	casplt	x28, x29, x28, x29, [sp]
+
+ldtp:
+	ldtp	x0, x2, [x0]
+	ldtp	x0, x2, [x0, #-8]
+	ldtp	x0, x2, [sp]
+	ldtp	x0, x2, [sp, #-8]
+	ldtp	x0, xzr, [x0]
+	ldtp	x0, xzr, [x0, #-8]
+	ldtp	x0, xzr, [sp]
+	ldtp	x0, xzr, [sp, #-8]
+	ldtp	xzr, x2, [x0]
+	ldtp	xzr, x2, [x0, #-8]
+	ldtp	xzr, x2, [sp]
+	ldtp	xzr, x2, [sp, #-8]
+	ldtp	xzr, x29, [x0]
+	ldtp	xzr, x29, [x0, #-8]
+	ldtp	xzr, x29, [sp]
+	ldtp	xzr, x29, [sp, #-8]
+
+	ldtp	x0, x4, [x2, #16]!
+	ldtp	x0, x4, [x2, #-8]!
+	ldtp	x0, x4, [sp, #16]!
+	ldtp	x0, x4, [sp, #-8]!
+	ldtp	x0, xzr, [x2, #16]!
+	ldtp	x0, xzr, [x2, #-8]!
+	ldtp	x0, xzr, [sp, #16]!
+	ldtp	x0, xzr, [sp, #-8]!
+	ldtp	xzr, x0, [x2, #16]!
+	ldtp	xzr, x0, [x2, #-8]!
+	ldtp	xzr, x0, [sp, #16]!
+	ldtp	xzr, x0, [sp, #-8]!
+	ldtp	xzr, x29, [x2, #16]!
+	ldtp	xzr, x29, [x2, #-8]!
+	ldtp	xzr, x29, [sp, #16]!
+	ldtp	xzr, x29, [sp, #-8]!
+
+	ldtp	x0, x4, [x2], #16
+	ldtp	x0, x4, [x2], #-8
+	ldtp	x0, x4, [sp], #16
+	ldtp	x0, x4, [sp], #-8
+	ldtp	x0, xzr, [x2], #16
+	ldtp	x0, xzr, [x2], #-8
+	ldtp	x0, xzr, [sp], #16
+	ldtp	x0, xzr, [sp], #-8
+	ldtp	xzr, x0, [x2], #16
+	ldtp	xzr, x0, [x2], #-8
+	ldtp	xzr, x0, [sp], #16
+	ldtp	xzr, x0, [sp], #-8
+	ldtp	xzr, x29, [x2], #16
+	ldtp	xzr, x29, [x2], #-8
+	ldtp	xzr, x29, [sp], #16
+	ldtp	xzr, x29, [sp], #-8
+
+	ldtp	q0, q2, [x0]
+	ldtp	q0, q2, [x0, #-16]
+	ldtp	q0, q2, [sp]
+	ldtp	q0, q2, [sp, #-16]
+	ldtp	q0, q31, [x0]
+	ldtp	q0, q31, [x0, #-16]
+	ldtp	q0, q31, [sp]
+	ldtp	q0, q31, [sp, #-16]
+	ldtp	q31, q0, [x0]
+	ldtp	q31, q0, [x0, #-16]
+	ldtp	q31, q0, [sp]
+	ldtp	q31, q0, [sp, #-16]
+	ldtp	q31, q29, [x0]
+	ldtp	q31, q29, [x0, #-16]
+	ldtp	q31, q29, [sp]
+	ldtp	q31, q29, [sp, #-16]
+
+	ldtp	q0, q2, [x0, #32]!
+	ldtp	q0, q2, [x0, #-16]!
+	ldtp	q0, q2, [sp, #32]!
+	ldtp	q0, q2, [sp, #-16]!
+	ldtp	q0, q31, [x0, #32]!
+	ldtp	q0, q31, [x0, #-16]!
+	ldtp	q0, q31, [sp, #32]!
+	ldtp	q0, q31, [sp, #-16]!
+	ldtp	q31, q2, [x0, #32]!
+	ldtp	q31, q2, [x0, #-16]!
+	ldtp	q31, q2, [sp, #32]!
+	ldtp	q31, q2, [sp, #-16]!
+	ldtp	q31, q29, [x0, #32]!
+	ldtp	q31, q29, [x0, #-16]!
+	ldtp	q31, q29, [sp, #32]!
+	ldtp	q31, q29, [sp, #-16]!
+
+	ldtp	q0, q2, [x0], #32
+	ldtp	q0, q2, [x0], #-16
+	ldtp	q0, q2, [sp], #32
+	ldtp	q0, q2, [sp], #-16
+	ldtp	q0, q31, [x0], #32
+	ldtp	q0, q31, [x0], #-16
+	ldtp	q0, q31, [sp], #32
+	ldtp	q0, q31, [sp], #-16
+	ldtp	q31, q2, [x0], #32
+	ldtp	q31, q2, [x0], #-16
+	ldtp	q31, q2, [sp], #32
+	ldtp	q31, q2, [sp], #-16
+	ldtp	q31, q29, [x0], #32
+	ldtp	q31, q29, [x0], #-16
+	ldtp	q31, q29, [sp], #32
+	ldtp	q31, q29, [sp], #-16
+
+sttp:
+	sttp	x0, x2, [x0]
+	sttp	x0, x2, [x0, #-8]
+	sttp	x0, x2, [sp]
+	sttp	x0, x2, [sp, #-8]
+	sttp	x0, xzr, [x0]
+	sttp	x0, xzr, [x0, #-8]
+	sttp	x0, xzr, [sp]
+	sttp	x0, xzr, [sp, #-8]
+	sttp	xzr, x2, [x0]
+	sttp	xzr, x2, [x0, #-8]
+	sttp	xzr, x2, [sp]
+	sttp	xzr, x2, [sp, #-8]
+	sttp	xzr, x29, [x0]
+	sttp	xzr, x29, [x0, #-8]
+	sttp	xzr, x29, [sp]
+	sttp	xzr, x29, [sp, #-8]
+
+	sttp	x0, x4, [x2, #16]!
+	sttp	x0, x4, [x2, #-8]!
+	sttp	x0, x4, [sp, #16]!
+	sttp	x0, x4, [sp, #-8]!
+	sttp	x0, xzr, [x2, #16]!
+	sttp	x0, xzr, [x2, #-8]!
+	sttp	x0, xzr, [sp, #16]!
+	sttp	x0, xzr, [sp, #-8]!
+	sttp	xzr, x0, [x2, #16]!
+	sttp	xzr, x0, [x2, #-8]!
+	sttp	xzr, x0, [sp, #16]!
+	sttp	xzr, x0, [sp, #-8]!
+	sttp	xzr, x29, [x2, #16]!
+	sttp	xzr, x29, [x2, #-8]!
+	sttp	xzr, x29, [sp, #16]!
+	sttp	xzr, x29, [sp, #-8]!
+
+	sttp	x0, x4, [x2], #16
+	sttp	x0, x4, [x2], #-8
+	sttp	x0, x4, [sp], #16
+	sttp	x0, x4, [sp], #-8
+	sttp	x0, xzr, [x2], #16
+	sttp	x0, xzr, [x2], #-8
+	sttp	x0, xzr, [sp], #16
+	sttp	x0, xzr, [sp], #-8
+	sttp	xzr, x0, [x2], #16
+	sttp	xzr, x0, [x2], #-8
+	sttp	xzr, x0, [sp], #16
+	sttp	xzr, x0, [sp], #-8
+	sttp	xzr, x29, [x2], #16
+	sttp	xzr, x29, [x2], #-8
+	sttp	xzr, x29, [sp], #16
+	sttp	xzr, x29, [sp], #-8
+
+	sttp	q0, q2, [x0]
+	sttp	q0, q2, [x0, #-16]
+	sttp	q0, q2, [sp]
+	sttp	q0, q2, [sp, #-16]
+	sttp	q0, q31, [x0]
+	sttp	q0, q31, [x0, #-16]
+	sttp	q0, q31, [sp]
+	sttp	q0, q31, [sp, #-16]
+	sttp	q31, q0, [x0]
+	sttp	q31, q0, [x0, #-16]
+	sttp	q31, q0, [sp]
+	sttp	q31, q0, [sp, #-16]
+	sttp	q31, q29, [x0]
+	sttp	q31, q29, [x0, #-16]
+	sttp	q31, q29, [sp]
+	sttp	q31, q29, [sp, #-16]
+
+	sttp	q0, q2, [x0, #32]!
+	sttp	q0, q2, [x0, #-16]!
+	sttp	q0, q2, [sp, #32]!
+	sttp	q0, q2, [sp, #-16]!
+	sttp	q0, q31, [x0, #32]!
+	sttp	q0, q31, [x0, #-16]!
+	sttp	q0, q31, [sp, #32]!
+	sttp	q0, q31, [sp, #-16]!
+	sttp	q31, q2, [x0, #32]!
+	sttp	q31, q2, [x0, #-16]!
+	sttp	q31, q2, [sp, #32]!
+	sttp	q31, q2, [sp, #-16]!
+	sttp	q31, q29, [x0, #32]!
+	sttp	q31, q29, [x0, #-16]!
+	sttp	q31, q29, [sp, #32]!
+	sttp	q31, q29, [sp, #-16]!
+
+	sttp	q0, q2, [x0], #32
+	sttp	q0, q2, [x0], #-16
+	sttp	q0, q2, [sp], #32
+	sttp	q0, q2, [sp], #-16
+	sttp	q0, q31, [x0], #32
+	sttp	q0, q31, [x0], #-16
+	sttp	q0, q31, [sp], #32
+	sttp	q0, q31, [sp], #-16
+	sttp	q31, q2, [x0], #32
+	sttp	q31, q2, [x0], #-16
+	sttp	q31, q2, [sp], #32
+	sttp	q31, q2, [sp], #-16
+	sttp	q31, q29, [x0], #32
+	sttp	q31, q29, [x0], #-16
+	sttp	q31, q29, [sp], #32
+	sttp	q31, q29, [sp], #-16
+
+swpt:
+	swpt	w0, w0, [x0]
+	swpt	w0, w0, [sp]
+	swpt	w0, wzr, [x0]
+	swpt	w0, wzr, [sp]
+	swpt	wzr, w0, [x0]
+	swpt	wzr, w0, [sp]
+	swpt	wzr, wzr, [x0]
+	swpt	wzr, wzr, [sp]
+	swpt	x0, x0, [x0]
+	swpt	x0, x0, [sp]
+	swpt	x0, xzr, [x0]
+	swpt	x0, xzr, [sp]
+	swpt	xzr, x0, [x0]
+	swpt	xzr, x0, [sp]
+	swpt	xzr, xzr, [x0]
+	swpt	xzr, xzr, [sp]
+
+swpta:
+	swpta	w0, w0, [x0]
+	swpta	w0, w0, [sp]
+	swpta	w0, wzr, [x0]
+	swpta	w0, wzr, [sp]
+	swpta	wzr, w0, [x0]
+	swpta	wzr, w0, [sp]
+	swpta	wzr, wzr, [x0]
+	swpta	wzr, wzr, [sp]
+	swpta	x0, x0, [x0]
+	swpta	x0, x0, [sp]
+	swpta	x0, xzr, [x0]
+	swpta	x0, xzr, [sp]
+	swpta	xzr, x0, [x0]
+	swpta	xzr, x0, [sp]
+	swpta	xzr, xzr, [x0]
+	swpta	xzr, xzr, [sp]
+
+swptal:
+	swptal	w0, w0, [x0]
+	swptal	w0, w0, [sp]
+	swptal	w0, wzr, [x0]
+	swptal	w0, wzr, [sp]
+	swptal	wzr, w0, [x0]
+	swptal	wzr, w0, [sp]
+	swptal	wzr, wzr, [x0]
+	swptal	wzr, wzr, [sp]
+	swptal	x0, x0, [x0]
+	swptal	x0, x0, [sp]
+	swptal	x0, xzr, [x0]
+	swptal	x0, xzr, [sp]
+	swptal	xzr, x0, [x0]
+	swptal	xzr, x0, [sp]
+	swptal	xzr, xzr, [x0]
+	swptal	xzr, xzr, [sp]
+
+swptl:
+	swptl	w0, w0, [x0]
+	swptl	w0, w0, [sp]
+	swptl	w0, wzr, [x0]
+	swptl	w0, wzr, [sp]
+	swptl	wzr, w0, [x0]
+	swptl	wzr, w0, [sp]
+	swptl	wzr, wzr, [x0]
+	swptl	wzr, wzr, [sp]
+	swptl	x0, x0, [x0]
+	swptl	x0, x0, [sp]
+	swptl	x0, xzr, [x0]
+	swptl	x0, xzr, [sp]
+	swptl	xzr, x0, [x0]
+	swptl	xzr, x0, [sp]
+	swptl	xzr, xzr, [x0]
+	swptl	xzr, xzr, [sp]
+
+ldtadd:
+	ldtadd	w0, w0, [x0]
+	ldtadd	w0, w0, [sp]
+	ldtadd	w0, wzr, [x0]
+	ldtadd	w0, wzr, [sp]
+	ldtadd	wzr, w0, [x0]
+	ldtadd	wzr, w0, [sp]
+	ldtadd	wzr, wzr, [x0]
+	ldtadd	wzr, wzr, [sp]
+	ldtadd	w0, w29, [x0]
+	ldtadd	w0, w29, [sp]
+	ldtadd	wzr, w29, [x0]
+	ldtadd	wzr, w29, [sp]
+	ldtadd	x0, x0, [x0]
+	ldtadd	x0, x0, [sp]
+	ldtadd	x0, xzr, [x0]
+	ldtadd	x0, xzr, [sp]
+	ldtadd	xzr, x0, [x0]
+	ldtadd	xzr, x0, [sp]
+	ldtadd	xzr, xzr, [x0]
+	ldtadd	xzr, xzr, [sp]
+	ldtadd	x0, x29, [x0]
+	ldtadd	x0, x29, [sp]
+	ldtadd	xzr, x29, [x0]
+	ldtadd	xzr, x29, [sp]
+
+sttadd:
+	sttadd	w0, [x0]
+	sttadd	w0, [sp]
+	sttadd	wzr, [x0]
+	sttadd	wzr, [sp]
+	sttadd	x0, [x0]
+	sttadd	x0, [sp]
+	sttadd	xzr, [x0]
+	sttadd	xzr, [sp]
+
+ldtadda:
+	ldtadda	w0, w0, [x0]
+	ldtadda	w0, w0, [sp]
+	ldtadda	w0, wzr, [x0]
+	ldtadda	w0, wzr, [sp]
+	ldtadda	wzr, w0, [x0]
+	ldtadda	wzr, w0, [sp]
+	ldtadda	wzr, wzr, [x0]
+	ldtadda	wzr, wzr, [sp]
+	ldtadda	x0, x0, [x0]
+	ldtadda	x0, x0, [sp]
+	ldtadda	x0, xzr, [x0]
+	ldtadda	x0, xzr, [sp]
+	ldtadda	xzr, x0, [x0]
+	ldtadda	xzr, x0, [sp]
+	ldtadda	xzr, xzr, [x0]
+	ldtadda	xzr, xzr, [sp]
+
+ldtaddal:
+	ldtaddal	w0, w0, [x0]
+	ldtaddal	w0, w0, [sp]
+	ldtaddal	w0, wzr, [x0]
+	ldtaddal	w0, wzr, [sp]
+	ldtaddal	wzr, w0, [x0]
+	ldtaddal	wzr, w0, [sp]
+	ldtaddal	wzr, wzr, [x0]
+	ldtaddal	wzr, wzr, [sp]
+	ldtaddal	x0, x0, [x0]
+	ldtaddal	x0, x0, [sp]
+	ldtaddal	x0, xzr, [x0]
+	ldtaddal	x0, xzr, [sp]
+	ldtaddal	xzr, x0, [x0]
+	ldtaddal	xzr, x0, [sp]
+	ldtaddal	xzr, xzr, [x0]
+	ldtaddal	xzr, xzr, [sp]
+
+ldtaddl:
+	ldtaddl	w0, w0, [x0]
+	ldtaddl	w0, w0, [sp]
+	ldtaddl	w0, wzr, [x0]
+	ldtaddl	w0, wzr, [sp]
+	ldtaddl	wzr, w0, [x0]
+	ldtaddl	wzr, w0, [sp]
+	ldtaddl	wzr, wzr, [x0]
+	ldtaddl	wzr, wzr, [sp]
+	ldtaddl	w0, w29, [x0]
+	ldtaddl	w0, w29, [sp]
+	ldtaddl	wzr, w29, [x0]
+	ldtaddl	wzr, w29, [sp]
+	ldtaddl	x0, x0, [x0]
+	ldtaddl	x0, x0, [sp]
+	ldtaddl	x0, xzr, [x0]
+	ldtaddl	x0, xzr, [sp]
+	ldtaddl	xzr, x0, [x0]
+	ldtaddl	xzr, x0, [sp]
+	ldtaddl	xzr, xzr, [x0]
+	ldtaddl	xzr, xzr, [sp]
+	ldtaddl	x0, x29, [x0]
+	ldtaddl	x0, x29, [sp]
+	ldtaddl	xzr, x29, [x0]
+	ldtaddl	xzr, x29, [sp]
+
+sttaddl:
+	sttaddl	w0, [x0]
+	sttaddl	w0, [sp]
+	sttaddl	wzr, [x0]
+	sttaddl	wzr, [sp]
+	sttaddl	x0, [x0]
+	sttaddl	x0, [sp]
+	sttaddl	xzr, [x0]
+	sttaddl	xzr, [sp]
+
+ldtclr:
+	ldtclr	w0, w0, [x0]
+	ldtclr	w0, w0, [sp]
+	ldtclr	w0, wzr, [x0]
+	ldtclr	w0, wzr, [sp]
+	ldtclr	wzr, w0, [x0]
+	ldtclr	wzr, w0, [sp]
+	ldtclr	wzr, wzr, [x0]
+	ldtclr	wzr, wzr, [sp]
+	ldtclr	w0, w29, [x0]
+	ldtclr	w0, w29, [sp]
+	ldtclr	wzr, w29, [x0]
+	ldtclr	wzr, w29, [sp]
+	ldtclr	x0, x0, [x0]
+	ldtclr	x0, x0, [sp]
+	ldtclr	x0, xzr, [x0]
+	ldtclr	x0, xzr, [sp]
+	ldtclr	xzr, x0, [x0]
+	ldtclr	xzr, x0, [sp]
+	ldtclr	xzr, xzr, [x0]
+	ldtclr	xzr, xzr, [sp]
+	ldtclr	x0, x29, [x0]
+	ldtclr	x0, x29, [sp]
+	ldtclr	xzr, x29, [x0]
+	ldtclr	xzr, x29, [sp]
+
+sttclr:
+	sttclr	w0, [x0]
+	sttclr	w0, [sp]
+	sttclr	wzr, [x0]
+	sttclr	wzr, [sp]
+	sttclr	x0, [x0]
+	sttclr	x0, [sp]
+	sttclr	xzr, [x0]
+	sttclr	xzr, [sp]
+
+ldtclra:
+	ldtclra	w0, w0, [x0]
+	ldtclra	w0, w0, [sp]
+	ldtclra	w0, wzr, [x0]
+	ldtclra	w0, wzr, [sp]
+	ldtclra	wzr, w0, [x0]
+	ldtclra	wzr, w0, [sp]
+	ldtclra	wzr, wzr, [x0]
+	ldtclra	wzr, wzr, [sp]
+	ldtclra	x0, x0, [x0]
+	ldtclra	x0, x0, [sp]
+	ldtclra	x0, xzr, [x0]
+	ldtclra	x0, xzr, [sp]
+	ldtclra	xzr, x0, [x0]
+	ldtclra	xzr, x0, [sp]
+	ldtclra	xzr, xzr, [x0]
+	ldtclra	xzr, xzr, [sp]
+
+ldtclral:
+	ldtclral	w0, w0, [x0]
+	ldtclral	w0, w0, [sp]
+	ldtclral	w0, wzr, [x0]
+	ldtclral	w0, wzr, [sp]
+	ldtclral	wzr, w0, [x0]
+	ldtclral	wzr, w0, [sp]
+	ldtclral	wzr, wzr, [x0]
+	ldtclral	wzr, wzr, [sp]
+	ldtclral	x0, x0, [x0]
+	ldtclral	x0, x0, [sp]
+	ldtclral	x0, xzr, [x0]
+	ldtclral	x0, xzr, [sp]
+	ldtclral	xzr, x0, [x0]
+	ldtclral	xzr, x0, [sp]
+	ldtclral	xzr, xzr, [x0]
+	ldtclral	xzr, xzr, [sp]
+
+ldtclrl:
+	ldtclrl	w0, w0, [x0]
+	ldtclrl	w0, w0, [sp]
+	ldtclrl	w0, wzr, [x0]
+	ldtclrl	w0, wzr, [sp]
+	ldtclrl	wzr, w0, [x0]
+	ldtclrl	wzr, w0, [sp]
+	ldtclrl	wzr, wzr, [x0]
+	ldtclrl	wzr, wzr, [sp]
+	ldtclrl	w0, w29, [x0]
+	ldtclrl	w0, w29, [sp]
+	ldtclrl	wzr, w29, [x0]
+	ldtclrl	wzr, w29, [sp]
+	ldtclrl	x0, x0, [x0]
+	ldtclrl	x0, x0, [sp]
+	ldtclrl	x0, xzr, [x0]
+	ldtclrl	x0, xzr, [sp]
+	ldtclrl	xzr, x0, [x0]
+	ldtclrl	xzr, x0, [sp]
+	ldtclrl	xzr, xzr, [x0]
+	ldtclrl	xzr, xzr, [sp]
+	ldtclrl	x0, x29, [x0]
+	ldtclrl	x0, x29, [sp]
+	ldtclrl	xzr, x29, [x0]
+	ldtclrl	xzr, x29, [sp]
+
+sttclrl:
+	sttclrl	w0, [x0]
+	sttclrl	w0, [sp]
+	sttclrl	wzr, [x0]
+	sttclrl	wzr, [sp]
+	sttclrl	x0, [x0]
+	sttclrl	x0, [sp]
+	sttclrl	xzr, [x0]
+	sttclrl	xzr, [sp]
+
+ldtset:
+	ldtset	w0, w0, [x0]
+	ldtset	w0, w0, [sp]
+	ldtset	w0, wzr, [x0]
+	ldtset	w0, wzr, [sp]
+	ldtset	wzr, w0, [x0]
+	ldtset	wzr, w0, [sp]
+	ldtset	wzr, wzr, [x0]
+	ldtset	wzr, wzr, [sp]
+	ldtset	w0, w29, [x0]
+	ldtset	w0, w29, [sp]
+	ldtset	wzr, w29, [x0]
+	ldtset	wzr, w29, [sp]
+	ldtset	x0, x0, [x0]
+	ldtset	x0, x0, [sp]
+	ldtset	x0, xzr, [x0]
+	ldtset	x0, xzr, [sp]
+	ldtset	xzr, x0, [x0]
+	ldtset	xzr, x0, [sp]
+	ldtset	xzr, xzr, [x0]
+	ldtset	xzr, xzr, [sp]
+	ldtset	x0, x29, [x0]
+	ldtset	x0, x29, [sp]
+	ldtset	xzr, x29, [x0]
+	ldtset	xzr, x29, [sp]
+
+sttset:
+	sttset	w0, [x0]
+	sttset	w0, [sp]
+	sttset	wzr, [x0]
+	sttset	wzr, [sp]
+	sttset	x0, [x0]
+	sttset	x0, [sp]
+	sttset	xzr, [x0]
+	sttset	xzr, [sp]
+
+ldtseta:
+	ldtseta	w0, w0, [x0]
+	ldtseta	w0, w0, [sp]
+	ldtseta	w0, wzr, [x0]
+	ldtseta	w0, wzr, [sp]
+	ldtseta	wzr, w0, [x0]
+	ldtseta	wzr, w0, [sp]
+	ldtseta	wzr, wzr, [x0]
+	ldtseta	wzr, wzr, [sp]
+	ldtseta	x0, x0, [x0]
+	ldtseta	x0, x0, [sp]
+	ldtseta	x0, xzr, [x0]
+	ldtseta	x0, xzr, [sp]
+	ldtseta	xzr, x0, [x0]
+	ldtseta	xzr, x0, [sp]
+	ldtseta	xzr, xzr, [x0]
+	ldtseta	xzr, xzr, [sp]
+
+ldtsetal:
+	ldtsetal	w0, w0, [x0]
+	ldtsetal	w0, w0, [sp]
+	ldtsetal	w0, wzr, [x0]
+	ldtsetal	w0, wzr, [sp]
+	ldtsetal	wzr, w0, [x0]
+	ldtsetal	wzr, w0, [sp]
+	ldtsetal	wzr, wzr, [x0]
+	ldtsetal	wzr, wzr, [sp]
+	ldtsetal	x0, x0, [x0]
+	ldtsetal	x0, x0, [sp]
+	ldtsetal	x0, xzr, [x0]
+	ldtsetal	x0, xzr, [sp]
+	ldtsetal	xzr, x0, [x0]
+	ldtsetal	xzr, x0, [sp]
+	ldtsetal	xzr, xzr, [x0]
+	ldtsetal	xzr, xzr, [sp]
+
+ldtsetl:
+	ldtsetl	w0, w0, [x0]
+	ldtsetl	w0, w0, [sp]
+	ldtsetl	w0, wzr, [x0]
+	ldtsetl	w0, wzr, [sp]
+	ldtsetl	wzr, w0, [x0]
+	ldtsetl	wzr, w0, [sp]
+	ldtsetl	wzr, wzr, [x0]
+	ldtsetl	wzr, wzr, [sp]
+	ldtsetl	w0, w29, [x0]
+	ldtsetl	w0, w29, [sp]
+	ldtsetl	wzr, w29, [x0]
+	ldtsetl	wzr, w29, [sp]
+	ldtsetl	x0, x0, [x0]
+	ldtsetl	x0, x0, [sp]
+	ldtsetl	x0, xzr, [x0]
+	ldtsetl	x0, xzr, [sp]
+	ldtsetl	xzr, x0, [x0]
+	ldtsetl	xzr, x0, [sp]
+	ldtsetl	xzr, xzr, [x0]
+	ldtsetl	xzr, xzr, [sp]
+	ldtsetl	x0, x29, [x0]
+	ldtsetl	x0, x29, [sp]
+	ldtsetl	xzr, x29, [x0]
+	ldtsetl	xzr, x29, [sp]
+
+sttsetl:
+	sttsetl	w0, [x0]
+	sttsetl	w0, [sp]
+	sttsetl	wzr, [x0]
+	sttsetl	wzr, [sp]
+	sttsetl	x0, [x0]
+	sttsetl	x0, [sp]
+	sttsetl	xzr, [x0]
+	sttsetl	xzr, [sp]
+
+ldtnp:
+	ldtnp	x0, x2, [x0]
+	ldtnp	x0, x2, [x0, #-8]
+	ldtnp	x0, x2, [sp]
+	ldtnp	x0, x2, [sp, #-8]
+	ldtnp	x0, xzr, [x0]
+	ldtnp	x0, xzr, [x0, #-8]
+	ldtnp	x0, xzr, [sp]
+	ldtnp	x0, xzr, [sp, #-8]
+	ldtnp	xzr, x2, [x0]
+	ldtnp	xzr, x2, [x0, #-8]
+	ldtnp	xzr, x2, [sp]
+	ldtnp	xzr, x2, [sp, #-8]
+	ldtnp	xzr, x29, [x0]
+	ldtnp	xzr, x29, [x0, #-8]
+	ldtnp	xzr, x29, [sp]
+	ldtnp	xzr, x29, [sp, #-8]
+
+	ldtnp	q0, q2, [x0]
+	ldtnp	q0, q2, [x0, #-16]
+	ldtnp	q0, q2, [sp]
+	ldtnp	q0, q2, [sp, #-16]
+	ldtnp	q0, q31, [x0]
+	ldtnp	q0, q31, [x0, #-16]
+	ldtnp	q0, q31, [sp]
+	ldtnp	q0, q31, [sp, #-16]
+	ldtnp	q31, q0, [x0]
+	ldtnp	q31, q0, [x0, #-16]
+	ldtnp	q31, q0, [sp]
+	ldtnp	q31, q0, [sp, #-16]
+	ldtnp	q31, q29, [x0]
+	ldtnp	q31, q29, [x0, #-16]
+	ldtnp	q31, q29, [sp]
+	ldtnp	q31, q29, [sp, #-16]
+
+sttnp:
+	sttnp	x0, x2, [x0]
+	sttnp	x0, x2, [x0, #-8]
+	sttnp	x0, x2, [sp]
+	sttnp	x0, x2, [sp, #-8]
+	sttnp	x0, xzr, [x0]
+	sttnp	x0, xzr, [x0, #-8]
+	sttnp	x0, xzr, [sp]
+	sttnp	x0, xzr, [sp, #-8]
+	sttnp	xzr, x2, [x0]
+	sttnp	xzr, x2, [x0, #-8]
+	sttnp	xzr, x2, [sp]
+	sttnp	xzr, x2, [sp, #-8]
+	sttnp	xzr, x29, [x0]
+	sttnp	xzr, x29, [x0, #-8]
+	sttnp	xzr, x29, [sp]
+	sttnp	xzr, x29, [sp, #-8]
+
+	sttnp	q0, q2, [x0]
+	sttnp	q0, q2, [x0, #-16]
+	sttnp	q0, q2, [sp]
+	sttnp	q0, q2, [sp, #-16]
+	sttnp	q0, q31, [x0]
+	sttnp	q0, q31, [x0, #-16]
+	sttnp	q0, q31, [sp]
+	sttnp	q0, q31, [sp, #-16]
+	sttnp	q31, q0, [x0]
+	sttnp	q31, q0, [x0, #-16]
+	sttnp	q31, q0, [sp]
+	sttnp	q31, q0, [sp, #-16]
+	sttnp	q31, q29, [x0]
+	sttnp	q31, q29, [x0, #-16]
+	sttnp	q31, q29, [sp]
+	sttnp	q31, q29, [sp, #-16]
diff --git a/include/opcode/aarch64.h b/include/opcode/aarch64.h
index dfe3f05820a..1d83b47ec88 100644
--- a/include/opcode/aarch64.h
+++ b/include/opcode/aarch64.h
@@ -181,6 +181,8 @@ enum aarch64_feature_bit {
   AARCH64_FEATURE_THE,
   /* LSE128.  */
   AARCH64_FEATURE_LSE128,
+  /* LSUI - Unprivileged Load Store.  */
+  AARCH64_FEATURE_LSUI,
   /* ARMv8.9-A RAS Extensions.  */
   AARCH64_FEATURE_RASv2,
   /* Delegated SError exceptions for EL3. */
diff --git a/opcodes/aarch64-asm.c b/opcodes/aarch64-asm.c
index f20bdf6ae67..951d992f6b1 100644
--- a/opcodes/aarch64-asm.c
+++ b/opcodes/aarch64-asm.c
@@ -628,6 +628,7 @@ aarch64_ins_ft (const aarch64_operand *self, const aarch64_opnd_info *info,
 
   /* Rt */
   aarch64_ins_regno (self, info, code, inst, errors);
+
   if (inst->opcode->iclass == ldstpair_indexed
       || inst->opcode->iclass == ldstnapair_offs
       || inst->opcode->iclass == ldstpair_off
diff --git a/opcodes/aarch64-tbl.h b/opcodes/aarch64-tbl.h
index 8b64eb07067..e6fd6136809 100644
--- a/opcodes/aarch64-tbl.h
+++ b/opcodes/aarch64-tbl.h
@@ -1311,6 +1311,12 @@
   QLF3(X, X, S_D),		\
 }
 
+/* e.g. LDTP <Xt1>, <Xt2>, [<Xn|SP>, #<imm>]!.  */
+#define QL_LDST_PAIR_X		\
+{				\
+  QLF3(X, X, S_D),		\
+}
+
 /* e.g. STNP <Qt1>, <Qt2>, [<Xn|SP>{, #<imm>}].  */
 #define QL_LDST_PAIR_FP		\
 {				\
@@ -1319,6 +1325,12 @@
   QLF3(S_Q, S_Q, S_Q),		\
 }
 
+/* e.g. LDTP <Qt1>, <Qt2>, [<Xn|SP>{, #<imm>}].  */
+#define QL_LDST_PAIR_S_Q		\
+{				\
+  QLF3(S_Q, S_Q, S_Q),		\
+}
+
 /* e.g. LD3 {<Vt>.<T>, <Vt2>.<T>, <Vt3>.<T>}, [<Xn|SP>].  */
 #define QL_SIMD_LDST		\
 {				\
@@ -2695,6 +2707,10 @@ static const aarch64_feature_set aarch64_feature_lse =
   AARCH64_FEATURE (LSE);
 static const aarch64_feature_set aarch64_feature_lse128 =
   AARCH64_FEATURES (2, LSE, LSE128);
+static const aarch64_feature_set aarch64_feature_lsui =
+    AARCH64_FEATURE (LSUI);
+static const aarch64_feature_set aarch64_feature_lsui_fp =
+    AARCH64_FEATURES (2, LSUI, FP);
 static const aarch64_feature_set aarch64_feature_lor =
   AARCH64_FEATURE (LOR);
 static const aarch64_feature_set aarch64_feature_rdma =
@@ -2876,6 +2892,8 @@ static const aarch64_feature_set aarch64_feature_sve2p1_sme2p1 =
 #define CRC		&aarch64_feature_crc
 #define LSE		&aarch64_feature_lse
 #define LSE128		&aarch64_feature_lse128
+#define LSUI		&aarch64_feature_lsui
+#define LSUI_FP		&aarch64_feature_lsui_fp
 #define LOR		&aarch64_feature_lor
 #define RDMA		&aarch64_feature_rdma
 #define FP_F16		&aarch64_feature_fp_f16
@@ -2978,6 +2996,10 @@ static const aarch64_feature_set aarch64_feature_sve2p1_sme2p1 =
   { NAME, OPCODE, MASK, CLASS, 0, LSE, OPS, QUALS, FLAGS, 0, 0, NULL }
 #define _LSE128_INSN(NAME,OPCODE,MASK,CLASS,OPS,QUALS,FLAGS) \
   { NAME, OPCODE, MASK, CLASS, 0, LSE128, OPS, QUALS, FLAGS, 0, 0, NULL }
+#define _LSUI_INSN(NAME,OPCODE,MASK,CLASS,OPS,QUALS,FLAGS) \
+  { NAME, OPCODE, MASK, CLASS, 0, LSUI, OPS, QUALS, FLAGS, 0, 0, NULL }
+#define _LSUI_FP_INSN(NAME,OPCODE,MASK,CLASS,OPS,QUALS,FLAGS) \
+  { NAME, OPCODE, MASK, CLASS, 0, LSUI_FP, OPS, QUALS, FLAGS, 0, 0, NULL }
 #define _LOR_INSN(NAME,OPCODE,MASK,CLASS,OPS,QUALS,FLAGS) \
   { NAME, OPCODE, MASK, CLASS, 0, LOR, OPS, QUALS, FLAGS, 0, 0, NULL }
 #define RDMA_INSN(NAME,OPCODE,MASK,CLASS,OPS,QUALS,FLAGS) \
@@ -4545,6 +4567,55 @@ const struct aarch64_opcode aarch64_opcode_table[] =
   _LSE128_INSN ("swppa", 0x19a08000, 0xffe0fc00, lse128_atomic, OP3 (LSE128_Rt, LSE128_Rt2, ADDR_SIMPLE), QL_X2NIL, 0),
   _LSE128_INSN ("swppal", 0x19e08000, 0xffe0fc00, lse128_atomic, OP3 (LSE128_Rt, LSE128_Rt2, ADDR_SIMPLE), QL_X2NIL, 0),
   _LSE128_INSN ("swppl", 0x19608000, 0xffe0fc00, lse128_atomic, OP3 (LSE128_Rt, LSE128_Rt2, ADDR_SIMPLE), QL_X2NIL, 0),
+
+  /* LSUI extension */
+  _LSUI_INSN ("ldtxr", 0x895f7c00, 0xbffffc00, ldstexcl, OP2 (Rt, ADDR_SIMPLE), QL_R1NIL, F_GPRSIZE_IN_Q),
+  _LSUI_INSN ("ldatxr", 0x895ffc00, 0xbffffc00, ldstexcl, OP2 (Rt, ADDR_SIMPLE), QL_R1NIL, F_GPRSIZE_IN_Q),
+  _LSUI_INSN ("sttxr", 0x89007c00, 0xbfe0fc00, ldstexcl, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2_LDST_EXC, F_GPRSIZE_IN_Q),
+  _LSUI_INSN ("stltxr", 0x8900fc00, 0xbfe0fc00, ldstexcl, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2_LDST_EXC, F_GPRSIZE_IN_Q),
+  _LSUI_INSN ("cast", 0xc9807c00, 0xffe0fc00, lse_atomic, OP3 (Rs, Rt, ADDR_SIMPLE), QL_X2NIL, 0),
+  _LSUI_INSN ("casat", 0xc9c07c00, 0xffe0fc00, lse_atomic, OP3 (Rs, Rt, ADDR_SIMPLE), QL_X2NIL, 0),
+  _LSUI_INSN ("casalt", 0xc9c0fc00, 0xffe0fc00, lse_atomic, OP3 (Rs, Rt, ADDR_SIMPLE), QL_X2NIL, 0),
+  _LSUI_INSN ("caslt", 0xc980fc00, 0xffe0fc00, lse_atomic, OP3 (Rs, Rt, ADDR_SIMPLE), QL_X2NIL, 0),
+  _LSUI_INSN ("caspt", 0x49807c00, 0xffe0fc00, lse_atomic, OP5 (Rs, PAIRREG, Rt, PAIRREG, ADDR_SIMPLE), QL_X4NIL, 0),
+  _LSUI_INSN ("caspat", 0x49c07c00, 0xffe0fc00, lse_atomic, OP5 (Rs, PAIRREG, Rt, PAIRREG, ADDR_SIMPLE), QL_X4NIL, 0),
+  _LSUI_INSN ("caspalt", 0x49c0fc00, 0xffe0fc00, lse_atomic, OP5 (Rs, PAIRREG, Rt, PAIRREG, ADDR_SIMPLE), QL_X4NIL, 0),
+  _LSUI_INSN ("casplt", 0x4980fc00, 0xffe0fc00, lse_atomic, OP5 (Rs, PAIRREG, Rt, PAIRREG, ADDR_SIMPLE), QL_X4NIL, 0),
+  _LSUI_INSN ("swpt", 0x19208400, 0xbfe0fc00, lse_atomic, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ),
+  _LSUI_INSN ("swpta", 0x19a08400, 0xbfe0fc00, lse_atomic, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ),
+  _LSUI_INSN ("swptal", 0x19e08400, 0xbfe0fc00, lse_atomic, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ),
+  _LSUI_INSN ("swptl", 0x19608400, 0xbfe0fc00, lse_atomic, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ),
+  _LSUI_INSN ("ldtadd", 0x19200400, 0xbfe0fc00, lse_atomic, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ | F_HAS_ALIAS),
+  _LSUI_INSN ("sttadd", 0x1920041f, 0xbfe0fc1f, lse_atomic, OP2 (Rs, ADDR_SIMPLE), QL_R1NIL, F_LSE_SZ | F_ALIAS),
+  _LSUI_INSN ("ldtadda", 0x19a00400, 0xbfe0fc00, lse_atomic, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ | F_HAS_ALIAS),
+  _LSUI_INSN ("ldtaddal", 0x19e00400, 0xbfe0fc00, lse_atomic, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ | F_HAS_ALIAS),
+  _LSUI_INSN ("ldtaddl", 0x19600400, 0xbfe0fc00, lse_atomic, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ | F_HAS_ALIAS),
+  _LSUI_INSN ("sttaddl", 0x1960041f, 0xbfe0fc1f, lse_atomic, OP2 (Rs, ADDR_SIMPLE), QL_R1NIL, F_LSE_SZ | F_ALIAS),
+  _LSUI_INSN ("ldtclr", 0x19201400, 0xbfe0fc00, lse_atomic, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ | F_HAS_ALIAS),
+  _LSUI_INSN ("sttclr", 0x1920141f, 0xbfe0fc1f, lse_atomic, OP2 (Rs, ADDR_SIMPLE), QL_R1NIL, F_LSE_SZ | F_ALIAS),
+  _LSUI_INSN ("ldtclra", 0x19a01400, 0xbfe0fc00, lse_atomic, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ | F_HAS_ALIAS),
+  _LSUI_INSN ("ldtclral", 0x19e01400, 0xbfe0fc00, lse_atomic, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ | F_HAS_ALIAS),
+  _LSUI_INSN ("ldtclrl", 0x19601400, 0xbfe0fc00, lse_atomic, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ | F_HAS_ALIAS),
+  _LSUI_INSN ("sttclrl", 0x1960141f, 0xbfe0fc1f, lse_atomic, OP2 (Rs, ADDR_SIMPLE), QL_R1NIL, F_LSE_SZ | F_ALIAS),
+  _LSUI_INSN ("ldtset", 0x19203400, 0xbfe0fc00, lse_atomic, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ | F_HAS_ALIAS),
+  _LSUI_INSN ("sttset", 0x1920341f, 0xbfe0fc1f, lse_atomic, OP2 (Rs, ADDR_SIMPLE), QL_R1NIL, F_LSE_SZ | F_ALIAS),
+  _LSUI_INSN ("ldtseta", 0x19a03400, 0xbfe0fc00, lse_atomic, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ | F_HAS_ALIAS),
+  _LSUI_INSN ("ldtsetal", 0x19e03400, 0xbfe0fc00, lse_atomic, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ | F_HAS_ALIAS),
+  _LSUI_INSN ("ldtsetl", 0x19603400, 0xbfe0fc00, lse_atomic, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ | F_HAS_ALIAS),
+  _LSUI_INSN ("sttsetl", 0x1960341f, 0xbfe0fc1f, lse_atomic, OP2 (Rs, ADDR_SIMPLE), QL_R1NIL, F_LSE_SZ | F_ALIAS),
+  _LSUI_INSN ("ldtnp", 0xe8400000, 0xffc00000, ldstnapair_offs, OP3 (Rt, Rt2, ADDR_SIMM7), QL_LDST_PAIR_X, F_LDST_LOAD),
+  _LSUI_FP_INSN ("ldtnp", 0xec400000, 0xffc00000, ldstnapair_offs, OP3 (Fd, Fa, ADDR_SIMM7), QL_LDST_PAIR_S_Q, F_LDST_LOAD),
+  _LSUI_INSN ("sttnp", 0xe8000000, 0xffc00000, ldstnapair_offs, OP3 (Rt, Rt2, ADDR_SIMM7), QL_LDST_PAIR_X, F_LDST_STORE),
+  _LSUI_FP_INSN ("sttnp", 0xec000000, 0xffc00000, ldstnapair_offs, OP3 (Fd, Fa, ADDR_SIMM7), QL_LDST_PAIR_S_Q, F_LDST_STORE),
+  _LSUI_INSN ("ldtp", 0xe9400000, 0xfec00000, ldstpair_off, OP3 (Rt, Rt2, ADDR_SIMM7), QL_LDST_PAIR_X, F_LDST_LOAD),
+  _LSUI_FP_INSN ("ldtp", 0xed400000, 0xfec00000, ldstpair_off, OP3 (Fd, Fa, ADDR_SIMM7), QL_LDST_PAIR_S_Q, F_LDST_LOAD),
+  _LSUI_INSN ("sttp", 0xe9000000, 0xfec00000, ldstpair_off, OP3 (Rt, Rt2, ADDR_SIMM7), QL_LDST_PAIR_X, F_LDST_STORE),
+  _LSUI_FP_INSN ("sttp", 0xed000000, 0xfec00000, ldstpair_off, OP3 (Fd, Fa, ADDR_SIMM7), QL_LDST_PAIR_S_Q, F_LDST_STORE),
+  _LSUI_INSN ("ldtp", 0xe8c00000, 0xfec00000, ldstpair_indexed, OP3 (Rt, Rt2, ADDR_SIMM7), QL_LDST_PAIR_X, F_LDST_LOAD),
+  _LSUI_FP_INSN ("ldtp", 0xecc00000, 0xfec00000, ldstpair_indexed, OP3 (Fd, Fa, ADDR_SIMM7), QL_LDST_PAIR_S_Q, F_LDST_LOAD),
+  _LSUI_INSN ("sttp", 0xe8800000, 0xfec00000, ldstpair_indexed, OP3 (Rt, Rt2, ADDR_SIMM7), QL_LDST_PAIR_X, F_LDST_STORE),
+  _LSUI_FP_INSN ("sttp", 0xec800000, 0xfec00000, ldstpair_indexed, OP3 (Fd, Fa, ADDR_SIMM7), QL_LDST_PAIR_S_Q, F_LDST_STORE),
+
   /* RCPC3 extension.  */
   RCPC3_INSN ("ldiapp", 0x19400800, 0x3fe0ec00, rcpc3, OP3 (Rt, Rs, RCPC3_ADDR_OPT_POSTIND), QL_R2NIL, F_RCPC3_SIZE),
   RCPC3_INSN ("stilp",  0x19000800, 0x3fe0ec00, rcpc3, OP3 (Rt, Rs, RCPC3_ADDR_OPT_PREIND_WB), QL_R2NIL, F_RCPC3_SIZE),
-- 
2.45.2



More information about the Binutils mailing list