xref: /openbmc/qemu/target/arm/tcg/a64.decode (revision 2e1cacfb)
1# AArch64 A64 allowed instruction decoding
2#
3#  Copyright (c) 2023 Linaro, Ltd
4#
5# This library is free software; you can redistribute it and/or
6# modify it under the terms of the GNU Lesser General Public
7# License as published by the Free Software Foundation; either
8# version 2.1 of the License, or (at your option) any later version.
9#
10# This library is distributed in the hope that it will be useful,
11# but WITHOUT ANY WARRANTY; without even the implied warranty of
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13# Lesser General Public License for more details.
14#
15# You should have received a copy of the GNU Lesser General Public
16# License along with this library; if not, see <http://www.gnu.org/licenses/>.
17
18#
19# This file is processed by scripts/decodetree.py
20#
21
22%rd             0:5
23%esz_sd         22:1 !function=plus_2
24%esz_hsd        22:2 !function=xor_2
25%hl             11:1 21:1
26%hlm            11:1 20:2
27
28&r              rn
29&ri             rd imm
30&rri_sf         rd rn imm sf
31&i              imm
32&rr_e           rd rn esz
33&rri_e          rd rn imm esz
34&rrr_e          rd rn rm esz
35&rrx_e          rd rn rm idx esz
36&rrrr_e         rd rn rm ra esz
37&qrr_e          q rd rn esz
38&qrri_e         q rd rn imm esz
39&qrrr_e         q rd rn rm esz
40&qrrx_e         q rd rn rm idx esz
41&qrrrr_e        q rd rn rm ra esz
42
43@rr_h           ........ ... ..... ...... rn:5 rd:5     &rr_e esz=1
44@rr_d           ........ ... ..... ...... rn:5 rd:5     &rr_e esz=3
45@rr_sd          ........ ... ..... ...... rn:5 rd:5     &rr_e esz=%esz_sd
46
47@rrr_h          ........ ... rm:5 ...... rn:5 rd:5      &rrr_e esz=1
48@rrr_d          ........ ... rm:5 ...... rn:5 rd:5      &rrr_e esz=3
49@rrr_sd         ........ ... rm:5 ...... rn:5 rd:5      &rrr_e esz=%esz_sd
50@rrr_hsd        ........ ... rm:5 ...... rn:5 rd:5      &rrr_e esz=%esz_hsd
51@rrr_e          ........ esz:2 . rm:5 ...... rn:5 rd:5  &rrr_e
52@r2r_e          ........ esz:2 . ..... ...... rm:5 rd:5 &rrr_e rn=%rd
53
54@rrx_h          ........ .. .. rm:4 .... . . rn:5 rd:5  &rrx_e esz=1 idx=%hlm
55@rrx_s          ........ .. . rm:5  .... . . rn:5 rd:5  &rrx_e esz=2 idx=%hl
56@rrx_d          ........ .. . rm:5  .... idx:1 . rn:5 rd:5  &rrx_e esz=3
57
58@rr_q1e0        ........ ........ ...... rn:5 rd:5      &qrr_e q=1 esz=0
59@rr_q1e2        ........ ........ ...... rn:5 rd:5      &qrr_e q=1 esz=2
60@r2r_q1e0       ........ ........ ...... rm:5 rd:5      &qrrr_e rn=%rd q=1 esz=0
61@rrr_q1e0       ........ ... rm:5 ...... rn:5 rd:5      &qrrr_e q=1 esz=0
62@rrr_q1e3       ........ ... rm:5 ...... rn:5 rd:5      &qrrr_e q=1 esz=3
63@rrrr_q1e3      ........ ... rm:5 . ra:5 rn:5 rd:5      &qrrrr_e q=1 esz=3
64
65@qrr_h          . q:1 ...... .. ...... ...... rn:5 rd:5  &qrr_e esz=1
66@qrr_e          . q:1 ...... esz:2 ...... ...... rn:5 rd:5  &qrr_e
67
68@qrrr_b         . q:1 ...... ... rm:5 ...... rn:5 rd:5  &qrrr_e esz=0
69@qrrr_h         . q:1 ...... ... rm:5 ...... rn:5 rd:5  &qrrr_e esz=1
70@qrrr_s         . q:1 ...... ... rm:5 ...... rn:5 rd:5  &qrrr_e esz=2
71@qrrr_sd        . q:1 ...... ... rm:5 ...... rn:5 rd:5  &qrrr_e esz=%esz_sd
72@qrrr_e         . q:1 ...... esz:2 . rm:5 ...... rn:5 rd:5  &qrrr_e
73@qr2r_e         . q:1 ...... esz:2 . ..... ...... rm:5 rd:5 &qrrr_e rn=%rd
74
75@qrrx_h         . q:1 .. .... .. .. rm:4 .... . . rn:5 rd:5 \
76                &qrrx_e esz=1 idx=%hlm
77@qrrx_s         . q:1 .. .... .. . rm:5  .... . . rn:5 rd:5 \
78                &qrrx_e esz=2 idx=%hl
79@qrrx_d         . q:1 .. .... .. . rm:5  .... idx:1 . rn:5 rd:5 \
80                &qrrx_e esz=3
81
82### Data Processing - Immediate
83
84# PC-rel addressing
85
86%imm_pcrel      5:s19 29:2
87@pcrel          . .. ..... ................... rd:5     &ri imm=%imm_pcrel
88
89ADR             0 .. 10000 ................... .....    @pcrel
90ADRP            1 .. 10000 ................... .....    @pcrel
91
92# Add/subtract (immediate)
93
94%imm12_sh12     10:12 !function=shl_12
95@addsub_imm     sf:1 .. ...... . imm:12 rn:5 rd:5
96@addsub_imm12   sf:1 .. ...... . ............ rn:5 rd:5 imm=%imm12_sh12
97
98ADD_i           . 00 100010 0 ............ ..... .....  @addsub_imm
99ADD_i           . 00 100010 1 ............ ..... .....  @addsub_imm12
100ADDS_i          . 01 100010 0 ............ ..... .....  @addsub_imm
101ADDS_i          . 01 100010 1 ............ ..... .....  @addsub_imm12
102
103SUB_i           . 10 100010 0 ............ ..... .....  @addsub_imm
104SUB_i           . 10 100010 1 ............ ..... .....  @addsub_imm12
105SUBS_i          . 11 100010 0 ............ ..... .....  @addsub_imm
106SUBS_i          . 11 100010 1 ............ ..... .....  @addsub_imm12
107
108# Add/subtract (immediate with tags)
109
110&rri_tag        rd rn uimm6 uimm4
111@addsub_imm_tag . .. ...... . uimm6:6 .. uimm4:4 rn:5 rd:5 &rri_tag
112
113ADDG_i          1 00 100011 0 ...... 00 .... ..... ..... @addsub_imm_tag
114SUBG_i          1 10 100011 0 ...... 00 .... ..... ..... @addsub_imm_tag
115
116# Logical (immediate)
117
118&rri_log        rd rn sf dbm
119@logic_imm_64   1 .. ...... dbm:13 rn:5 rd:5            &rri_log sf=1
120@logic_imm_32   0 .. ...... 0 dbm:12 rn:5 rd:5          &rri_log sf=0
121
122AND_i           . 00 100100 . ...... ...... ..... ..... @logic_imm_64
123AND_i           . 00 100100 . ...... ...... ..... ..... @logic_imm_32
124ORR_i           . 01 100100 . ...... ...... ..... ..... @logic_imm_64
125ORR_i           . 01 100100 . ...... ...... ..... ..... @logic_imm_32
126EOR_i           . 10 100100 . ...... ...... ..... ..... @logic_imm_64
127EOR_i           . 10 100100 . ...... ...... ..... ..... @logic_imm_32
128ANDS_i          . 11 100100 . ...... ...... ..... ..... @logic_imm_64
129ANDS_i          . 11 100100 . ...... ...... ..... ..... @logic_imm_32
130
131# Move wide (immediate)
132
133&movw           rd sf imm hw
134@movw_64        1 .. ...... hw:2   imm:16 rd:5          &movw sf=1
135@movw_32        0 .. ...... 0 hw:1 imm:16 rd:5          &movw sf=0
136
137MOVN            . 00 100101 .. ................ .....   @movw_64
138MOVN            . 00 100101 .. ................ .....   @movw_32
139MOVZ            . 10 100101 .. ................ .....   @movw_64
140MOVZ            . 10 100101 .. ................ .....   @movw_32
141MOVK            . 11 100101 .. ................ .....   @movw_64
142MOVK            . 11 100101 .. ................ .....   @movw_32
143
144# Bitfield
145
146&bitfield       rd rn sf immr imms
147@bitfield_64    1 .. ...... 1 immr:6 imms:6 rn:5 rd:5      &bitfield sf=1
148@bitfield_32    0 .. ...... 0 0 immr:5 0 imms:5 rn:5 rd:5  &bitfield sf=0
149
150SBFM            . 00 100110 . ...... ...... ..... ..... @bitfield_64
151SBFM            . 00 100110 . ...... ...... ..... ..... @bitfield_32
152BFM             . 01 100110 . ...... ...... ..... ..... @bitfield_64
153BFM             . 01 100110 . ...... ...... ..... ..... @bitfield_32
154UBFM            . 10 100110 . ...... ...... ..... ..... @bitfield_64
155UBFM            . 10 100110 . ...... ...... ..... ..... @bitfield_32
156
157# Extract
158
159&extract        rd rn rm imm sf
160
161EXTR            1 00 100111 1 0 rm:5 imm:6 rn:5 rd:5     &extract sf=1
162EXTR            0 00 100111 0 0 rm:5 0 imm:5 rn:5 rd:5   &extract sf=0
163
164# Branches
165
166%imm26   0:s26 !function=times_4
167@branch         . ..... .......................... &i imm=%imm26
168
169B               0 00101 .......................... @branch
170BL              1 00101 .......................... @branch
171
172%imm19   5:s19 !function=times_4
173&cbz     rt imm sf nz
174
175CBZ             sf:1 011010 nz:1 ................... rt:5 &cbz imm=%imm19
176
177%imm14     5:s14 !function=times_4
178%imm31_19  31:1 19:5
179&tbz       rt imm nz bitpos
180
181TBZ             . 011011 nz:1 ..... .............. rt:5 &tbz  imm=%imm14 bitpos=%imm31_19
182
183# B.cond and BC.cond
184B_cond          0101010 0 ................... c:1 cond:4 imm=%imm19
185
186BR              1101011 0000 11111 000000 rn:5 00000 &r
187BLR             1101011 0001 11111 000000 rn:5 00000 &r
188RET             1101011 0010 11111 000000 rn:5 00000 &r
189
190&braz       rn m
191BRAZ            1101011 0000 11111 00001 m:1 rn:5 11111 &braz   # BRAAZ, BRABZ
192BLRAZ           1101011 0001 11111 00001 m:1 rn:5 11111 &braz   # BLRAAZ, BLRABZ
193
194&reta       m
195RETA            1101011 0010 11111 00001 m:1 11111 11111 &reta  # RETAA, RETAB
196
197&bra        rn rm m
198BRA             1101011 1000 11111 00001 m:1 rn:5 rm:5 &bra # BRAA, BRAB
199BLRA            1101011 1001 11111 00001 m:1 rn:5 rm:5 &bra # BLRAA, BLRAB
200
201ERET            1101011 0100 11111 000000 11111 00000
202ERETA           1101011 0100 11111 00001 m:1 11111 11111 &reta  # ERETAA, ERETAB
203
204# We don't need to decode DRPS because it always UNDEFs except when
205# the processor is in halting debug state (which we don't implement).
206# The pattern is listed here as documentation.
207# DRPS            1101011 0101 11111 000000 11111 00000
208
209# Hint instruction group
210{
211  [
212    YIELD       1101 0101 0000 0011 0010 0000 001 11111
213    WFE         1101 0101 0000 0011 0010 0000 010 11111
214    WFI         1101 0101 0000 0011 0010 0000 011 11111
215    # We implement WFE to never block, so our SEV/SEVL are NOPs
216    # SEV       1101 0101 0000 0011 0010 0000 100 11111
217    # SEVL      1101 0101 0000 0011 0010 0000 101 11111
218    # Our DGL is a NOP because we don't merge memory accesses anyway.
219    # DGL       1101 0101 0000 0011 0010 0000 110 11111
220    XPACLRI     1101 0101 0000 0011 0010 0000 111 11111
221    PACIA1716   1101 0101 0000 0011 0010 0001 000 11111
222    PACIB1716   1101 0101 0000 0011 0010 0001 010 11111
223    AUTIA1716   1101 0101 0000 0011 0010 0001 100 11111
224    AUTIB1716   1101 0101 0000 0011 0010 0001 110 11111
225    ESB         1101 0101 0000 0011 0010 0010 000 11111
226    PACIAZ      1101 0101 0000 0011 0010 0011 000 11111
227    PACIASP     1101 0101 0000 0011 0010 0011 001 11111
228    PACIBZ      1101 0101 0000 0011 0010 0011 010 11111
229    PACIBSP     1101 0101 0000 0011 0010 0011 011 11111
230    AUTIAZ      1101 0101 0000 0011 0010 0011 100 11111
231    AUTIASP     1101 0101 0000 0011 0010 0011 101 11111
232    AUTIBZ      1101 0101 0000 0011 0010 0011 110 11111
233    AUTIBSP     1101 0101 0000 0011 0010 0011 111 11111
234  ]
235  # The canonical NOP has CRm == op2 == 0, but all of the space
236  # that isn't specifically allocated to an instruction must NOP
237  NOP           1101 0101 0000 0011 0010 ---- --- 11111
238}
239
240# System instructions with register argument
241WFET            1101 0101 0000 0011 0001 0000 000 rd:5
242WFIT            1101 0101 0000 0011 0001 0000 001 rd:5
243
244# Barriers
245
246CLREX           1101 0101 0000 0011 0011 ---- 010 11111
247DSB_DMB         1101 0101 0000 0011 0011 domain:2 types:2 10- 11111
248ISB             1101 0101 0000 0011 0011 ---- 110 11111
249SB              1101 0101 0000 0011 0011 0000 111 11111
250
251# PSTATE
252
253CFINV           1101 0101 0000 0 000 0100 0000 000 11111
254XAFLAG          1101 0101 0000 0 000 0100 0000 001 11111
255AXFLAG          1101 0101 0000 0 000 0100 0000 010 11111
256
257# These are architecturally all "MSR (immediate)"; we decode the destination
258# register too because there is no commonality in our implementation.
259@msr_i          .... .... .... . ... .... imm:4 ... .....
260MSR_i_UAO       1101 0101 0000 0 000 0100 .... 011 11111 @msr_i
261MSR_i_PAN       1101 0101 0000 0 000 0100 .... 100 11111 @msr_i
262MSR_i_SPSEL     1101 0101 0000 0 000 0100 .... 101 11111 @msr_i
263MSR_i_SBSS      1101 0101 0000 0 011 0100 .... 001 11111 @msr_i
264MSR_i_DIT       1101 0101 0000 0 011 0100 .... 010 11111 @msr_i
265MSR_i_TCO       1101 0101 0000 0 011 0100 .... 100 11111 @msr_i
266MSR_i_DAIFSET   1101 0101 0000 0 011 0100 .... 110 11111 @msr_i
267MSR_i_DAIFCLEAR 1101 0101 0000 0 011 0100 .... 111 11111 @msr_i
268MSR_i_ALLINT    1101 0101 0000 0 001 0100 000 imm:1 000 11111
269MSR_i_SVCR      1101 0101 0000 0 011 0100 0 mask:2 imm:1 011 11111
270
271# MRS, MSR (register), SYS, SYSL. These are all essentially the
272# same instruction as far as QEMU is concerned.
273# NB: op0 is bits [20:19], but op0=0b00 is other insns, so we have
274# to hand-decode it.
275SYS             1101 0101 00 l:1 01 op1:3 crn:4 crm:4 op2:3 rt:5 op0=1
276SYS             1101 0101 00 l:1 10 op1:3 crn:4 crm:4 op2:3 rt:5 op0=2
277SYS             1101 0101 00 l:1 11 op1:3 crn:4 crm:4 op2:3 rt:5 op0=3
278
279# Exception generation
280
281@i16            .... .... ... imm:16           ... .. &i
282SVC             1101 0100 000 ................ 000 01 @i16
283HVC             1101 0100 000 ................ 000 10 @i16
284SMC             1101 0100 000 ................ 000 11 @i16
285BRK             1101 0100 001 ................ 000 00 @i16
286HLT             1101 0100 010 ................ 000 00 @i16
287# These insns always UNDEF unless in halting debug state, which
288# we don't implement. So we don't need to decode them. The patterns
289# are listed here as documentation.
290# DCPS1         1101 0100 101 ................ 000 01 @i16
291# DCPS2         1101 0100 101 ................ 000 10 @i16
292# DCPS3         1101 0100 101 ................ 000 11 @i16
293
294# Loads and stores
295
296&stxr           rn rt rt2 rs sz lasr
297&stlr           rn rt sz lasr
298@stxr           sz:2 ...... ... rs:5 lasr:1 rt2:5 rn:5 rt:5 &stxr
299@stlr           sz:2 ...... ... ..... lasr:1 ..... rn:5 rt:5 &stlr
300%imm1_30_p2 30:1 !function=plus_2
301@stxp           .. ...... ... rs:5 lasr:1 rt2:5 rn:5 rt:5 &stxr sz=%imm1_30_p2
302STXR            .. 001000 000 ..... . ..... ..... ..... @stxr  # inc STLXR
303LDXR            .. 001000 010 ..... . ..... ..... ..... @stxr  # inc LDAXR
304STLR            .. 001000 100 11111 . 11111 ..... ..... @stlr  # inc STLLR
305LDAR            .. 001000 110 11111 . 11111 ..... ..... @stlr  # inc LDLAR
306
307STXP            1 . 001000 001 ..... . ..... ..... ..... @stxp # inc STLXP
308LDXP            1 . 001000 011 ..... . ..... ..... ..... @stxp # inc LDAXP
309
310# CASP, CASPA, CASPAL, CASPL (we don't decode the bits that determine
311# acquire/release semantics because QEMU's cmpxchg always has those)
312CASP            0 . 001000 0 - 1 rs:5 - 11111 rn:5 rt:5 sz=%imm1_30_p2
313# CAS, CASA, CASAL, CASL
314CAS             sz:2 001000 1 - 1 rs:5 - 11111 rn:5 rt:5
315
316&ldlit          rt imm sz sign
317@ldlit          .. ... . .. ................... rt:5 &ldlit imm=%imm19
318
319LD_lit          00 011 0 00 ................... ..... @ldlit sz=2 sign=0
320LD_lit          01 011 0 00 ................... ..... @ldlit sz=3 sign=0
321LD_lit          10 011 0 00 ................... ..... @ldlit sz=2 sign=1
322LD_lit_v        00 011 1 00 ................... ..... @ldlit sz=2 sign=0
323LD_lit_v        01 011 1 00 ................... ..... @ldlit sz=3 sign=0
324LD_lit_v        10 011 1 00 ................... ..... @ldlit sz=4 sign=0
325
326# PRFM
327NOP             11 011 0 00 ------------------- -----
328
329&ldstpair       rt2 rt rn imm sz sign w p
330@ldstpair       .. ... . ... . imm:s7 rt2:5 rn:5 rt:5 &ldstpair
331
332# STNP, LDNP: Signed offset, non-temporal hint. We don't emulate caches
333# so we ignore hints about data access patterns, and handle these like
334# plain signed offset.
335STP             00 101 0 000 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0
336LDP             00 101 0 000 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0
337STP             10 101 0 000 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0
338LDP             10 101 0 000 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0
339STP_v           00 101 1 000 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0
340LDP_v           00 101 1 000 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0
341STP_v           01 101 1 000 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0
342LDP_v           01 101 1 000 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0
343STP_v           10 101 1 000 0 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=0
344LDP_v           10 101 1 000 1 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=0
345
346# STP and LDP: post-indexed
347STP             00 101 0 001 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=1 w=1
348LDP             00 101 0 001 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=1 w=1
349LDP             01 101 0 001 1 ....... ..... ..... ..... @ldstpair sz=2 sign=1 p=1 w=1
350STP             10 101 0 001 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1
351LDP             10 101 0 001 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1
352STP_v           00 101 1 001 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=1 w=1
353LDP_v           00 101 1 001 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=1 w=1
354STP_v           01 101 1 001 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1
355LDP_v           01 101 1 001 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1
356STP_v           10 101 1 001 0 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=1 w=1
357LDP_v           10 101 1 001 1 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=1 w=1
358
359# STP and LDP: offset
360STP             00 101 0 010 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0
361LDP             00 101 0 010 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0
362LDP             01 101 0 010 1 ....... ..... ..... ..... @ldstpair sz=2 sign=1 p=0 w=0
363STP             10 101 0 010 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0
364LDP             10 101 0 010 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0
365STP_v           00 101 1 010 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0
366LDP_v           00 101 1 010 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0
367STP_v           01 101 1 010 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0
368LDP_v           01 101 1 010 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0
369STP_v           10 101 1 010 0 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=0
370LDP_v           10 101 1 010 1 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=0
371
372# STP and LDP: pre-indexed
373STP             00 101 0 011 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=1
374LDP             00 101 0 011 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=1
375LDP             01 101 0 011 1 ....... ..... ..... ..... @ldstpair sz=2 sign=1 p=0 w=1
376STP             10 101 0 011 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1
377LDP             10 101 0 011 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1
378STP_v           00 101 1 011 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=1
379LDP_v           00 101 1 011 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=1
380STP_v           01 101 1 011 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1
381LDP_v           01 101 1 011 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1
382STP_v           10 101 1 011 0 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=1
383LDP_v           10 101 1 011 1 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=1
384
385# STGP: store tag and pair
386STGP            01 101 0 001 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1
387STGP            01 101 0 010 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0
388STGP            01 101 0 011 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1
389
390# Load/store register (unscaled immediate)
391&ldst_imm       rt rn imm sz sign w p unpriv ext
392@ldst_imm       .. ... . .. .. . imm:s9 .. rn:5 rt:5 &ldst_imm unpriv=0 p=0 w=0
393@ldst_imm_pre   .. ... . .. .. . imm:s9 .. rn:5 rt:5 &ldst_imm unpriv=0 p=0 w=1
394@ldst_imm_post  .. ... . .. .. . imm:s9 .. rn:5 rt:5 &ldst_imm unpriv=0 p=1 w=1
395@ldst_imm_user  .. ... . .. .. . imm:s9 .. rn:5 rt:5 &ldst_imm unpriv=1 p=0 w=0
396
397STR_i           sz:2 111 0 00 00 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0
398LDR_i           00 111 0 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=1 sz=0
399LDR_i           01 111 0 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=1 sz=1
400LDR_i           10 111 0 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=1 sz=2
401LDR_i           11 111 0 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 sz=3
402LDR_i           00 111 0 00 10 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=0 sz=0
403LDR_i           01 111 0 00 10 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=0 sz=1
404LDR_i           10 111 0 00 10 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=0 sz=2
405LDR_i           00 111 0 00 11 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=1 sz=0
406LDR_i           01 111 0 00 11 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=1 sz=1
407
408STR_i           sz:2 111 0 00 00 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0
409LDR_i           00 111 0 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=1 sz=0
410LDR_i           01 111 0 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=1 sz=1
411LDR_i           10 111 0 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=1 sz=2
412LDR_i           11 111 0 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 sz=3
413LDR_i           00 111 0 00 10 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=0 sz=0
414LDR_i           01 111 0 00 10 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=0 sz=1
415LDR_i           10 111 0 00 10 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=0 sz=2
416LDR_i           00 111 0 00 11 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=1 sz=0
417LDR_i           01 111 0 00 11 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=1 sz=1
418
419STR_i           sz:2 111 0 00 00 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=0
420LDR_i           00 111 0 00 01 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=1 sz=0
421LDR_i           01 111 0 00 01 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=1 sz=1
422LDR_i           10 111 0 00 01 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=1 sz=2
423LDR_i           11 111 0 00 01 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=0 sz=3
424LDR_i           00 111 0 00 10 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=0 sz=0
425LDR_i           01 111 0 00 10 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=0 sz=1
426LDR_i           10 111 0 00 10 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=0 sz=2
427LDR_i           00 111 0 00 11 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=1 sz=0
428LDR_i           01 111 0 00 11 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=1 sz=1
429
430STR_i           sz:2 111 0 00 00 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0
431LDR_i           00 111 0 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=1 sz=0
432LDR_i           01 111 0 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=1 sz=1
433LDR_i           10 111 0 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=1 sz=2
434LDR_i           11 111 0 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 sz=3
435LDR_i           00 111 0 00 10 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=0 sz=0
436LDR_i           01 111 0 00 10 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=0 sz=1
437LDR_i           10 111 0 00 10 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=0 sz=2
438LDR_i           00 111 0 00 11 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=1 sz=0
439LDR_i           01 111 0 00 11 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=1 sz=1
440
441# PRFM : prefetch memory: a no-op for QEMU
442NOP             11 111 0 00 10 0 --------- 00 ----- -----
443
444STR_v_i         sz:2 111 1 00 00 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0
445STR_v_i         00 111 1 00 10 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 sz=4
446LDR_v_i         sz:2 111 1 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0
447LDR_v_i         00 111 1 00 11 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 sz=4
448
449STR_v_i         sz:2 111 1 00 00 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0
450STR_v_i         00 111 1 00 10 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 sz=4
451LDR_v_i         sz:2 111 1 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0
452LDR_v_i         00 111 1 00 11 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 sz=4
453
454STR_v_i         sz:2 111 1 00 00 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0
455STR_v_i         00 111 1 00 10 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 sz=4
456LDR_v_i         sz:2 111 1 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0
457LDR_v_i         00 111 1 00 11 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 sz=4
458
459# Load/store with an unsigned 12 bit immediate, which is scaled by the
460# element size. The function gets the sz:imm and returns the scaled immediate.
461%uimm_scaled   10:12 sz:3 !function=uimm_scaled
462
463@ldst_uimm      .. ... . .. .. ............ rn:5 rt:5 &ldst_imm unpriv=0 p=0 w=0 imm=%uimm_scaled
464
465STR_i           sz:2 111 0 01 00 ............ ..... ..... @ldst_uimm sign=0 ext=0
466LDR_i           00 111 0 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=1 sz=0
467LDR_i           01 111 0 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=1 sz=1
468LDR_i           10 111 0 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=1 sz=2
469LDR_i           11 111 0 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=0 sz=3
470LDR_i           00 111 0 01 10 ............ ..... ..... @ldst_uimm sign=1 ext=0 sz=0
471LDR_i           01 111 0 01 10 ............ ..... ..... @ldst_uimm sign=1 ext=0 sz=1
472LDR_i           10 111 0 01 10 ............ ..... ..... @ldst_uimm sign=1 ext=0 sz=2
473LDR_i           00 111 0 01 11 ............ ..... ..... @ldst_uimm sign=1 ext=1 sz=0
474LDR_i           01 111 0 01 11 ............ ..... ..... @ldst_uimm sign=1 ext=1 sz=1
475
476# PRFM
477NOP             11 111 0 01 10 ------------ ----- -----
478
479STR_v_i         sz:2 111 1 01 00 ............ ..... ..... @ldst_uimm sign=0 ext=0
480STR_v_i         00 111 1 01 10 ............ ..... ..... @ldst_uimm sign=0 ext=0 sz=4
481LDR_v_i         sz:2 111 1 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=0
482LDR_v_i         00 111 1 01 11 ............ ..... ..... @ldst_uimm sign=0 ext=0 sz=4
483
484# Load/store with register offset
485&ldst rm rn rt sign ext sz opt s
486@ldst           .. ... . .. .. . rm:5 opt:3 s:1 .. rn:5 rt:5 &ldst
487STR             sz:2 111 0 00 00 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0
488LDR             00 111 0 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=1 sz=0
489LDR             01 111 0 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=1 sz=1
490LDR             10 111 0 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=1 sz=2
491LDR             11 111 0 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 sz=3
492LDR             00 111 0 00 10 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=0 sz=0
493LDR             01 111 0 00 10 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=0 sz=1
494LDR             10 111 0 00 10 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=0 sz=2
495LDR             00 111 0 00 11 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=1 sz=0
496LDR             01 111 0 00 11 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=1 sz=1
497
498# PRFM
499NOP             11 111 0 00 10 1 ----- -1- - 10 ----- -----
500
501STR_v           sz:2 111 1 00 00 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0
502STR_v           00 111 1 00 10 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 sz=4
503LDR_v           sz:2 111 1 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0
504LDR_v           00 111 1 00 11 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 sz=4
505
506# Atomic memory operations
507&atomic         rs rn rt a r sz
508@atomic         sz:2 ... . .. a:1 r:1 . rs:5 . ... .. rn:5 rt:5 &atomic
509LDADD           .. 111 0 00 . . 1 ..... 0000 00 ..... ..... @atomic
510LDCLR           .. 111 0 00 . . 1 ..... 0001 00 ..... ..... @atomic
511LDEOR           .. 111 0 00 . . 1 ..... 0010 00 ..... ..... @atomic
512LDSET           .. 111 0 00 . . 1 ..... 0011 00 ..... ..... @atomic
513LDSMAX          .. 111 0 00 . . 1 ..... 0100 00 ..... ..... @atomic
514LDSMIN          .. 111 0 00 . . 1 ..... 0101 00 ..... ..... @atomic
515LDUMAX          .. 111 0 00 . . 1 ..... 0110 00 ..... ..... @atomic
516LDUMIN          .. 111 0 00 . . 1 ..... 0111 00 ..... ..... @atomic
517SWP             .. 111 0 00 . . 1 ..... 1000 00 ..... ..... @atomic
518
519LDAPR           sz:2 111 0 00 1 0 1 11111 1100 00 rn:5 rt:5
520
521# Load/store register (pointer authentication)
522
523# LDRA immediate is 10 bits signed and scaled, but the bits aren't all contiguous
524%ldra_imm       22:s1 12:9 !function=times_8
525
526LDRA            11 111 0 00 m:1 . 1 ......... w:1 1 rn:5 rt:5 imm=%ldra_imm
527
528&ldapr_stlr_i   rn rt imm sz sign ext
529@ldapr_stlr_i   .. ...... .. . imm:s9 .. rn:5 rt:5 &ldapr_stlr_i
530STLR_i          sz:2 011001 00 0 ......... 00 ..... ..... @ldapr_stlr_i sign=0 ext=0
531LDAPR_i         sz:2 011001 01 0 ......... 00 ..... ..... @ldapr_stlr_i sign=0 ext=0
532LDAPR_i         00 011001 10 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=0 sz=0
533LDAPR_i         01 011001 10 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=0 sz=1
534LDAPR_i         10 011001 10 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=0 sz=2
535LDAPR_i         00 011001 11 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=1 sz=0
536LDAPR_i         01 011001 11 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=1 sz=1
537
538# Load/store multiple structures
539# The 4-bit opcode in [15:12] encodes repeat count and structure elements
540&ldst_mult      rm rn rt sz q p rpt selem
541@ldst_mult      . q:1 ...... p:1 . . rm:5 .... sz:2 rn:5 rt:5 &ldst_mult
542ST_mult         0 . 001100 . 0 0 ..... 0000 .. ..... ..... @ldst_mult rpt=1 selem=4
543ST_mult         0 . 001100 . 0 0 ..... 0010 .. ..... ..... @ldst_mult rpt=4 selem=1
544ST_mult         0 . 001100 . 0 0 ..... 0100 .. ..... ..... @ldst_mult rpt=1 selem=3
545ST_mult         0 . 001100 . 0 0 ..... 0110 .. ..... ..... @ldst_mult rpt=3 selem=1
546ST_mult         0 . 001100 . 0 0 ..... 0111 .. ..... ..... @ldst_mult rpt=1 selem=1
547ST_mult         0 . 001100 . 0 0 ..... 1000 .. ..... ..... @ldst_mult rpt=1 selem=2
548ST_mult         0 . 001100 . 0 0 ..... 1010 .. ..... ..... @ldst_mult rpt=2 selem=1
549
550LD_mult         0 . 001100 . 1 0 ..... 0000 .. ..... ..... @ldst_mult rpt=1 selem=4
551LD_mult         0 . 001100 . 1 0 ..... 0010 .. ..... ..... @ldst_mult rpt=4 selem=1
552LD_mult         0 . 001100 . 1 0 ..... 0100 .. ..... ..... @ldst_mult rpt=1 selem=3
553LD_mult         0 . 001100 . 1 0 ..... 0110 .. ..... ..... @ldst_mult rpt=3 selem=1
554LD_mult         0 . 001100 . 1 0 ..... 0111 .. ..... ..... @ldst_mult rpt=1 selem=1
555LD_mult         0 . 001100 . 1 0 ..... 1000 .. ..... ..... @ldst_mult rpt=1 selem=2
556LD_mult         0 . 001100 . 1 0 ..... 1010 .. ..... ..... @ldst_mult rpt=2 selem=1
557
558# Load/store single structure
559&ldst_single    rm rn rt p selem index scale
560
561%ldst_single_selem 13:1 21:1 !function=plus_1
562
563%ldst_single_index_b  30:1 10:3
564%ldst_single_index_h  30:1 11:2
565%ldst_single_index_s  30:1 12:1
566
567@ldst_single_b     .. ...... p:1 .. rm:5 ...... rn:5 rt:5 \
568                   &ldst_single scale=0 selem=%ldst_single_selem \
569                   index=%ldst_single_index_b
570@ldst_single_h     .. ...... p:1 .. rm:5 ...... rn:5 rt:5 \
571                   &ldst_single scale=1 selem=%ldst_single_selem \
572                   index=%ldst_single_index_h
573@ldst_single_s     .. ...... p:1 .. rm:5 ...... rn:5 rt:5 \
574                   &ldst_single scale=2 selem=%ldst_single_selem \
575                   index=%ldst_single_index_s
576@ldst_single_d     . index:1 ...... p:1 .. rm:5 ...... rn:5 rt:5 \
577                   &ldst_single scale=3 selem=%ldst_single_selem
578
579ST_single          0 . 001101 . 0 . ..... 00 . ... ..... .....  @ldst_single_b
580ST_single          0 . 001101 . 0 . ..... 01 . ..0 ..... .....  @ldst_single_h
581ST_single          0 . 001101 . 0 . ..... 10 . .00 ..... .....  @ldst_single_s
582ST_single          0 . 001101 . 0 . ..... 10 . 001 ..... .....  @ldst_single_d
583
584LD_single          0 . 001101 . 1 . ..... 00 . ... ..... .....  @ldst_single_b
585LD_single          0 . 001101 . 1 . ..... 01 . ..0 ..... .....  @ldst_single_h
586LD_single          0 . 001101 . 1 . ..... 10 . .00 ..... .....  @ldst_single_s
587LD_single          0 . 001101 . 1 . ..... 10 . 001 ..... .....  @ldst_single_d
588
589# Replicating load case
590LD_single_repl  0 q:1 001101 p:1 1 . rm:5 11 . 0 scale:2 rn:5 rt:5 selem=%ldst_single_selem
591
592%tag_offset     12:s9 !function=scale_by_log2_tag_granule
593&ldst_tag       rn rt imm p w
594@ldst_tag       ........ .. . ......... .. rn:5 rt:5 &ldst_tag imm=%tag_offset
595@ldst_tag_mult  ........ .. . 000000000 .. rn:5 rt:5 &ldst_tag imm=0
596
597STZGM           11011001 00 1 ......... 00 ..... ..... @ldst_tag_mult p=0 w=0
598STG             11011001 00 1 ......... 01 ..... ..... @ldst_tag p=1 w=1
599STG             11011001 00 1 ......... 10 ..... ..... @ldst_tag p=0 w=0
600STG             11011001 00 1 ......... 11 ..... ..... @ldst_tag p=0 w=1
601
602LDG             11011001 01 1 ......... 00 ..... ..... @ldst_tag p=0 w=0
603STZG            11011001 01 1 ......... 01 ..... ..... @ldst_tag p=1 w=1
604STZG            11011001 01 1 ......... 10 ..... ..... @ldst_tag p=0 w=0
605STZG            11011001 01 1 ......... 11 ..... ..... @ldst_tag p=0 w=1
606
607STGM            11011001 10 1 ......... 00 ..... ..... @ldst_tag_mult p=0 w=0
608ST2G            11011001 10 1 ......... 01 ..... ..... @ldst_tag p=1 w=1
609ST2G            11011001 10 1 ......... 10 ..... ..... @ldst_tag p=0 w=0
610ST2G            11011001 10 1 ......... 11 ..... ..... @ldst_tag p=0 w=1
611
612LDGM            11011001 11 1 ......... 00 ..... ..... @ldst_tag_mult p=0 w=0
613STZ2G           11011001 11 1 ......... 01 ..... ..... @ldst_tag p=1 w=1
614STZ2G           11011001 11 1 ......... 10 ..... ..... @ldst_tag p=0 w=0
615STZ2G           11011001 11 1 ......... 11 ..... ..... @ldst_tag p=0 w=1
616
617# Memory operations (memset, memcpy, memmove)
618# Each of these comes in a set of three, eg SETP (prologue), SETM (main),
619# SETE (epilogue), and each of those has different flavours to
620# indicate whether memory accesses should be unpriv or non-temporal.
621# We don't distinguish temporal and non-temporal accesses, but we
622# do need to report it in syndrome register values.
623
624# Memset
625&set rs rn rd unpriv nontemp
626# op2 bit 1 is nontemporal bit
627@set         .. ......... rs:5 .. nontemp:1 unpriv:1 .. rn:5 rd:5 &set
628
629SETP            00 011001110 ..... 00 . . 01 ..... ..... @set
630SETM            00 011001110 ..... 01 . . 01 ..... ..... @set
631SETE            00 011001110 ..... 10 . . 01 ..... ..... @set
632
633# Like SET, but also setting MTE tags
634SETGP           00 011101110 ..... 00 . . 01 ..... ..... @set
635SETGM           00 011101110 ..... 01 . . 01 ..... ..... @set
636SETGE           00 011101110 ..... 10 . . 01 ..... ..... @set
637
638# Memmove/Memcopy: the CPY insns allow overlapping src/dest and
639# copy in the correct direction; the CPYF insns always copy forwards.
640#
641# options has the nontemporal and unpriv bits for src and dest
642&cpy rs rn rd options
643@cpy            .. ... . ..... rs:5 options:4 .. rn:5 rd:5 &cpy
644
645CPYFP           00 011 0 01000 ..... .... 01 ..... ..... @cpy
646CPYFM           00 011 0 01010 ..... .... 01 ..... ..... @cpy
647CPYFE           00 011 0 01100 ..... .... 01 ..... ..... @cpy
648CPYP            00 011 1 01000 ..... .... 01 ..... ..... @cpy
649CPYM            00 011 1 01010 ..... .... 01 ..... ..... @cpy
650CPYE            00 011 1 01100 ..... .... 01 ..... ..... @cpy
651
652### Cryptographic AES
653
654AESE            01001110 00 10100 00100 10 ..... .....  @r2r_q1e0
655AESD            01001110 00 10100 00101 10 ..... .....  @r2r_q1e0
656AESMC           01001110 00 10100 00110 10 ..... .....  @rr_q1e0
657AESIMC          01001110 00 10100 00111 10 ..... .....  @rr_q1e0
658
659### Cryptographic three-register SHA
660
661SHA1C           0101 1110 000 ..... 000000 ..... .....  @rrr_q1e0
662SHA1P           0101 1110 000 ..... 000100 ..... .....  @rrr_q1e0
663SHA1M           0101 1110 000 ..... 001000 ..... .....  @rrr_q1e0
664SHA1SU0         0101 1110 000 ..... 001100 ..... .....  @rrr_q1e0
665SHA256H         0101 1110 000 ..... 010000 ..... .....  @rrr_q1e0
666SHA256H2        0101 1110 000 ..... 010100 ..... .....  @rrr_q1e0
667SHA256SU1       0101 1110 000 ..... 011000 ..... .....  @rrr_q1e0
668
669### Cryptographic two-register SHA
670
671SHA1H           0101 1110 0010 1000 0000 10 ..... ..... @rr_q1e0
672SHA1SU1         0101 1110 0010 1000 0001 10 ..... ..... @rr_q1e0
673SHA256SU0       0101 1110 0010 1000 0010 10 ..... ..... @rr_q1e0
674
675### Cryptographic three-register SHA512
676
677SHA512H         1100 1110 011 ..... 100000 ..... .....  @rrr_q1e0
678SHA512H2        1100 1110 011 ..... 100001 ..... .....  @rrr_q1e0
679SHA512SU1       1100 1110 011 ..... 100010 ..... .....  @rrr_q1e0
680RAX1            1100 1110 011 ..... 100011 ..... .....  @rrr_q1e3
681SM3PARTW1       1100 1110 011 ..... 110000 ..... .....  @rrr_q1e0
682SM3PARTW2       1100 1110 011 ..... 110001 ..... .....  @rrr_q1e0
683SM4EKEY         1100 1110 011 ..... 110010 ..... .....  @rrr_q1e0
684
685### Cryptographic two-register SHA512
686
687SHA512SU0       1100 1110 110 00000 100000 ..... .....  @rr_q1e0
688SM4E            1100 1110 110 00000 100001 ..... .....  @r2r_q1e0
689
690### Cryptographic four-register
691
692EOR3            1100 1110 000 ..... 0 ..... ..... ..... @rrrr_q1e3
693BCAX            1100 1110 001 ..... 0 ..... ..... ..... @rrrr_q1e3
694SM3SS1          1100 1110 010 ..... 0 ..... ..... ..... @rrrr_q1e3
695
696### Cryptographic three-register, imm2
697
698&crypto3i       rd rn rm imm
699@crypto3i       ........ ... rm:5 .. imm:2 .. rn:5 rd:5 &crypto3i
700
701SM3TT1A         11001110 010 ..... 10 .. 00 ..... ..... @crypto3i
702SM3TT1B         11001110 010 ..... 10 .. 01 ..... ..... @crypto3i
703SM3TT2A         11001110 010 ..... 10 .. 10 ..... ..... @crypto3i
704SM3TT2B         11001110 010 ..... 10 .. 11 ..... ..... @crypto3i
705
706### Cryptographic XAR
707
708XAR             1100 1110 100 rm:5 imm:6 rn:5 rd:5
709
710### Advanced SIMD scalar copy
711
712DUP_element_s   0101 1110 000 imm:5 0 0000 1 rn:5 rd:5
713
714### Advanced SIMD copy
715
716DUP_element_v   0 q:1 00 1110 000 imm:5 0 0000 1 rn:5 rd:5
717DUP_general     0 q:1 00 1110 000 imm:5 0 0001 1 rn:5 rd:5
718INS_general     0 1   00 1110 000 imm:5 0 0011 1 rn:5 rd:5
719SMOV            0 q:1 00 1110 000 imm:5 0 0101 1 rn:5 rd:5
720UMOV            0 q:1 00 1110 000 imm:5 0 0111 1 rn:5 rd:5
721INS_element     0 1   10 1110 000 di:5  0 si:4 1 rn:5 rd:5
722
723### Advanced SIMD scalar three same
724
725FADD_s          0001 1110 ..1 ..... 0010 10 ..... ..... @rrr_hsd
726FSUB_s          0001 1110 ..1 ..... 0011 10 ..... ..... @rrr_hsd
727FDIV_s          0001 1110 ..1 ..... 0001 10 ..... ..... @rrr_hsd
728FMUL_s          0001 1110 ..1 ..... 0000 10 ..... ..... @rrr_hsd
729FNMUL_s         0001 1110 ..1 ..... 1000 10 ..... ..... @rrr_hsd
730
731FMAX_s          0001 1110 ..1 ..... 0100 10 ..... ..... @rrr_hsd
732FMIN_s          0001 1110 ..1 ..... 0101 10 ..... ..... @rrr_hsd
733FMAXNM_s        0001 1110 ..1 ..... 0110 10 ..... ..... @rrr_hsd
734FMINNM_s        0001 1110 ..1 ..... 0111 10 ..... ..... @rrr_hsd
735
736FMULX_s         0101 1110 010 ..... 00011 1 ..... ..... @rrr_h
737FMULX_s         0101 1110 0.1 ..... 11011 1 ..... ..... @rrr_sd
738
739FCMEQ_s         0101 1110 010 ..... 00100 1 ..... ..... @rrr_h
740FCMEQ_s         0101 1110 0.1 ..... 11100 1 ..... ..... @rrr_sd
741
742FCMGE_s         0111 1110 010 ..... 00100 1 ..... ..... @rrr_h
743FCMGE_s         0111 1110 0.1 ..... 11100 1 ..... ..... @rrr_sd
744
745FCMGT_s         0111 1110 110 ..... 00100 1 ..... ..... @rrr_h
746FCMGT_s         0111 1110 1.1 ..... 11100 1 ..... ..... @rrr_sd
747
748FACGE_s         0111 1110 010 ..... 00101 1 ..... ..... @rrr_h
749FACGE_s         0111 1110 0.1 ..... 11101 1 ..... ..... @rrr_sd
750
751FACGT_s         0111 1110 110 ..... 00101 1 ..... ..... @rrr_h
752FACGT_s         0111 1110 1.1 ..... 11101 1 ..... ..... @rrr_sd
753
754FABD_s          0111 1110 110 ..... 00010 1 ..... ..... @rrr_h
755FABD_s          0111 1110 1.1 ..... 11010 1 ..... ..... @rrr_sd
756
757FRECPS_s        0101 1110 010 ..... 00111 1 ..... ..... @rrr_h
758FRECPS_s        0101 1110 0.1 ..... 11111 1 ..... ..... @rrr_sd
759
760FRSQRTS_s       0101 1110 110 ..... 00111 1 ..... ..... @rrr_h
761FRSQRTS_s       0101 1110 1.1 ..... 11111 1 ..... ..... @rrr_sd
762
763SQADD_s         0101 1110 ..1 ..... 00001 1 ..... ..... @rrr_e
764UQADD_s         0111 1110 ..1 ..... 00001 1 ..... ..... @rrr_e
765SQSUB_s         0101 1110 ..1 ..... 00101 1 ..... ..... @rrr_e
766UQSUB_s         0111 1110 ..1 ..... 00101 1 ..... ..... @rrr_e
767
768SUQADD_s        0101 1110 ..1 00000 00111 0 ..... ..... @r2r_e
769USQADD_s        0111 1110 ..1 00000 00111 0 ..... ..... @r2r_e
770
771SSHL_s          0101 1110 111 ..... 01000 1 ..... ..... @rrr_d
772USHL_s          0111 1110 111 ..... 01000 1 ..... ..... @rrr_d
773SRSHL_s         0101 1110 111 ..... 01010 1 ..... ..... @rrr_d
774URSHL_s         0111 1110 111 ..... 01010 1 ..... ..... @rrr_d
775SQSHL_s         0101 1110 ..1 ..... 01001 1 ..... ..... @rrr_e
776UQSHL_s         0111 1110 ..1 ..... 01001 1 ..... ..... @rrr_e
777SQRSHL_s        0101 1110 ..1 ..... 01011 1 ..... ..... @rrr_e
778UQRSHL_s        0111 1110 ..1 ..... 01011 1 ..... ..... @rrr_e
779
780ADD_s           0101 1110 111 ..... 10000 1 ..... ..... @rrr_d
781SUB_s           0111 1110 111 ..... 10000 1 ..... ..... @rrr_d
782CMGT_s          0101 1110 111 ..... 00110 1 ..... ..... @rrr_d
783CMHI_s          0111 1110 111 ..... 00110 1 ..... ..... @rrr_d
784CMGE_s          0101 1110 111 ..... 00111 1 ..... ..... @rrr_d
785CMHS_s          0111 1110 111 ..... 00111 1 ..... ..... @rrr_d
786CMTST_s         0101 1110 111 ..... 10001 1 ..... ..... @rrr_d
787CMEQ_s          0111 1110 111 ..... 10001 1 ..... ..... @rrr_d
788
789SQDMULH_s       0101 1110 ..1 ..... 10110 1 ..... ..... @rrr_e
790SQRDMULH_s      0111 1110 ..1 ..... 10110 1 ..... ..... @rrr_e
791SQRDMLAH_s      0111 1110 ..0 ..... 10000 1 ..... ..... @rrr_e
792SQRDMLSH_s      0111 1110 ..0 ..... 10001 1 ..... ..... @rrr_e
793
794# Decode scalar x scalar as scalar x indexed, with index 0.
795SQDMULL_si      0101 1110 011 rm:5  11010 0 rn:5  rd:5  &rrx_e idx=0 esz=1
796SQDMULL_si      0101 1110 101 rm:5  11010 0 rn:5  rd:5  &rrx_e idx=0 esz=2
797SQDMLAL_si      0101 1110 011 rm:5  10010 0 rn:5  rd:5  &rrx_e idx=0 esz=1
798SQDMLAL_si      0101 1110 101 rm:5  10010 0 rn:5  rd:5  &rrx_e idx=0 esz=2
799SQDMLSL_si      0101 1110 011 rm:5  10110 0 rn:5  rd:5  &rrx_e idx=0 esz=1
800SQDMLSL_si      0101 1110 101 rm:5  10110 0 rn:5  rd:5  &rrx_e idx=0 esz=2
801
802### Advanced SIMD scalar pairwise
803
804FADDP_s         0101 1110 0011 0000 1101 10 ..... ..... @rr_h
805FADDP_s         0111 1110 0.11 0000 1101 10 ..... ..... @rr_sd
806
807FMAXP_s         0101 1110 0011 0000 1111 10 ..... ..... @rr_h
808FMAXP_s         0111 1110 0.11 0000 1111 10 ..... ..... @rr_sd
809
810FMINP_s         0101 1110 1011 0000 1111 10 ..... ..... @rr_h
811FMINP_s         0111 1110 1.11 0000 1111 10 ..... ..... @rr_sd
812
813FMAXNMP_s       0101 1110 0011 0000 1100 10 ..... ..... @rr_h
814FMAXNMP_s       0111 1110 0.11 0000 1100 10 ..... ..... @rr_sd
815
816FMINNMP_s       0101 1110 1011 0000 1100 10 ..... ..... @rr_h
817FMINNMP_s       0111 1110 1.11 0000 1100 10 ..... ..... @rr_sd
818
819ADDP_s          0101 1110 1111 0001 1011 10 ..... ..... @rr_d
820
821### Advanced SIMD three same
822
823FADD_v          0.00 1110 010 ..... 00010 1 ..... ..... @qrrr_h
824FADD_v          0.00 1110 0.1 ..... 11010 1 ..... ..... @qrrr_sd
825
826FSUB_v          0.00 1110 110 ..... 00010 1 ..... ..... @qrrr_h
827FSUB_v          0.00 1110 1.1 ..... 11010 1 ..... ..... @qrrr_sd
828
829FDIV_v          0.10 1110 010 ..... 00111 1 ..... ..... @qrrr_h
830FDIV_v          0.10 1110 0.1 ..... 11111 1 ..... ..... @qrrr_sd
831
832FMUL_v          0.10 1110 010 ..... 00011 1 ..... ..... @qrrr_h
833FMUL_v          0.10 1110 0.1 ..... 11011 1 ..... ..... @qrrr_sd
834
835FMAX_v          0.00 1110 010 ..... 00110 1 ..... ..... @qrrr_h
836FMAX_v          0.00 1110 0.1 ..... 11110 1 ..... ..... @qrrr_sd
837
838FMIN_v          0.00 1110 110 ..... 00110 1 ..... ..... @qrrr_h
839FMIN_v          0.00 1110 1.1 ..... 11110 1 ..... ..... @qrrr_sd
840
841FMAXNM_v        0.00 1110 010 ..... 00000 1 ..... ..... @qrrr_h
842FMAXNM_v        0.00 1110 0.1 ..... 11000 1 ..... ..... @qrrr_sd
843
844FMINNM_v        0.00 1110 110 ..... 00000 1 ..... ..... @qrrr_h
845FMINNM_v        0.00 1110 1.1 ..... 11000 1 ..... ..... @qrrr_sd
846
847FMULX_v         0.00 1110 010 ..... 00011 1 ..... ..... @qrrr_h
848FMULX_v         0.00 1110 0.1 ..... 11011 1 ..... ..... @qrrr_sd
849
850FMLA_v          0.00 1110 010 ..... 00001 1 ..... ..... @qrrr_h
851FMLA_v          0.00 1110 0.1 ..... 11001 1 ..... ..... @qrrr_sd
852
853FMLS_v          0.00 1110 110 ..... 00001 1 ..... ..... @qrrr_h
854FMLS_v          0.00 1110 1.1 ..... 11001 1 ..... ..... @qrrr_sd
855
856FMLAL_v         0.00 1110 001 ..... 11101 1 ..... ..... @qrrr_h
857FMLSL_v         0.00 1110 101 ..... 11101 1 ..... ..... @qrrr_h
858FMLAL2_v        0.10 1110 001 ..... 11001 1 ..... ..... @qrrr_h
859FMLSL2_v        0.10 1110 101 ..... 11001 1 ..... ..... @qrrr_h
860
861FCMEQ_v         0.00 1110 010 ..... 00100 1 ..... ..... @qrrr_h
862FCMEQ_v         0.00 1110 0.1 ..... 11100 1 ..... ..... @qrrr_sd
863
864FCMGE_v         0.10 1110 010 ..... 00100 1 ..... ..... @qrrr_h
865FCMGE_v         0.10 1110 0.1 ..... 11100 1 ..... ..... @qrrr_sd
866
867FCMGT_v         0.10 1110 110 ..... 00100 1 ..... ..... @qrrr_h
868FCMGT_v         0.10 1110 1.1 ..... 11100 1 ..... ..... @qrrr_sd
869
870FACGE_v         0.10 1110 010 ..... 00101 1 ..... ..... @qrrr_h
871FACGE_v         0.10 1110 0.1 ..... 11101 1 ..... ..... @qrrr_sd
872
873FACGT_v         0.10 1110 110 ..... 00101 1 ..... ..... @qrrr_h
874FACGT_v         0.10 1110 1.1 ..... 11101 1 ..... ..... @qrrr_sd
875
876FABD_v          0.10 1110 110 ..... 00010 1 ..... ..... @qrrr_h
877FABD_v          0.10 1110 1.1 ..... 11010 1 ..... ..... @qrrr_sd
878
879FRECPS_v        0.00 1110 010 ..... 00111 1 ..... ..... @qrrr_h
880FRECPS_v        0.00 1110 0.1 ..... 11111 1 ..... ..... @qrrr_sd
881
882FRSQRTS_v       0.00 1110 110 ..... 00111 1 ..... ..... @qrrr_h
883FRSQRTS_v       0.00 1110 1.1 ..... 11111 1 ..... ..... @qrrr_sd
884
885FADDP_v         0.10 1110 010 ..... 00010 1 ..... ..... @qrrr_h
886FADDP_v         0.10 1110 0.1 ..... 11010 1 ..... ..... @qrrr_sd
887
888FMAXP_v         0.10 1110 010 ..... 00110 1 ..... ..... @qrrr_h
889FMAXP_v         0.10 1110 0.1 ..... 11110 1 ..... ..... @qrrr_sd
890
891FMINP_v         0.10 1110 110 ..... 00110 1 ..... ..... @qrrr_h
892FMINP_v         0.10 1110 1.1 ..... 11110 1 ..... ..... @qrrr_sd
893
894FMAXNMP_v       0.10 1110 010 ..... 00000 1 ..... ..... @qrrr_h
895FMAXNMP_v       0.10 1110 0.1 ..... 11000 1 ..... ..... @qrrr_sd
896
897FMINNMP_v       0.10 1110 110 ..... 00000 1 ..... ..... @qrrr_h
898FMINNMP_v       0.10 1110 1.1 ..... 11000 1 ..... ..... @qrrr_sd
899
900ADDP_v          0.00 1110 ..1 ..... 10111 1 ..... ..... @qrrr_e
901SMAXP_v         0.00 1110 ..1 ..... 10100 1 ..... ..... @qrrr_e
902SMINP_v         0.00 1110 ..1 ..... 10101 1 ..... ..... @qrrr_e
903UMAXP_v         0.10 1110 ..1 ..... 10100 1 ..... ..... @qrrr_e
904UMINP_v         0.10 1110 ..1 ..... 10101 1 ..... ..... @qrrr_e
905
906AND_v           0.00 1110 001 ..... 00011 1 ..... ..... @qrrr_b
907BIC_v           0.00 1110 011 ..... 00011 1 ..... ..... @qrrr_b
908ORR_v           0.00 1110 101 ..... 00011 1 ..... ..... @qrrr_b
909ORN_v           0.00 1110 111 ..... 00011 1 ..... ..... @qrrr_b
910EOR_v           0.10 1110 001 ..... 00011 1 ..... ..... @qrrr_b
911BSL_v           0.10 1110 011 ..... 00011 1 ..... ..... @qrrr_b
912BIT_v           0.10 1110 101 ..... 00011 1 ..... ..... @qrrr_b
913BIF_v           0.10 1110 111 ..... 00011 1 ..... ..... @qrrr_b
914
915SQADD_v         0.00 1110 ..1 ..... 00001 1 ..... ..... @qrrr_e
916UQADD_v         0.10 1110 ..1 ..... 00001 1 ..... ..... @qrrr_e
917SQSUB_v         0.00 1110 ..1 ..... 00101 1 ..... ..... @qrrr_e
918UQSUB_v         0.10 1110 ..1 ..... 00101 1 ..... ..... @qrrr_e
919
920SUQADD_v        0.00 1110 ..1 00000 00111 0 ..... ..... @qr2r_e
921USQADD_v        0.10 1110 ..1 00000 00111 0 ..... ..... @qr2r_e
922
923SSHL_v          0.00 1110 ..1 ..... 01000 1 ..... ..... @qrrr_e
924USHL_v          0.10 1110 ..1 ..... 01000 1 ..... ..... @qrrr_e
925SRSHL_v         0.00 1110 ..1 ..... 01010 1 ..... ..... @qrrr_e
926URSHL_v         0.10 1110 ..1 ..... 01010 1 ..... ..... @qrrr_e
927SQSHL_v         0.00 1110 ..1 ..... 01001 1 ..... ..... @qrrr_e
928UQSHL_v         0.10 1110 ..1 ..... 01001 1 ..... ..... @qrrr_e
929SQRSHL_v        0.00 1110 ..1 ..... 01011 1 ..... ..... @qrrr_e
930UQRSHL_v        0.10 1110 ..1 ..... 01011 1 ..... ..... @qrrr_e
931
932ADD_v           0.00 1110 ..1 ..... 10000 1 ..... ..... @qrrr_e
933SUB_v           0.10 1110 ..1 ..... 10000 1 ..... ..... @qrrr_e
934CMGT_v          0.00 1110 ..1 ..... 00110 1 ..... ..... @qrrr_e
935CMHI_v          0.10 1110 ..1 ..... 00110 1 ..... ..... @qrrr_e
936CMGE_v          0.00 1110 ..1 ..... 00111 1 ..... ..... @qrrr_e
937CMHS_v          0.10 1110 ..1 ..... 00111 1 ..... ..... @qrrr_e
938CMTST_v         0.00 1110 ..1 ..... 10001 1 ..... ..... @qrrr_e
939CMEQ_v          0.10 1110 ..1 ..... 10001 1 ..... ..... @qrrr_e
940SHADD_v         0.00 1110 ..1 ..... 00000 1 ..... ..... @qrrr_e
941UHADD_v         0.10 1110 ..1 ..... 00000 1 ..... ..... @qrrr_e
942SHSUB_v         0.00 1110 ..1 ..... 00100 1 ..... ..... @qrrr_e
943UHSUB_v         0.10 1110 ..1 ..... 00100 1 ..... ..... @qrrr_e
944SRHADD_v        0.00 1110 ..1 ..... 00010 1 ..... ..... @qrrr_e
945URHADD_v        0.10 1110 ..1 ..... 00010 1 ..... ..... @qrrr_e
946SMAX_v          0.00 1110 ..1 ..... 01100 1 ..... ..... @qrrr_e
947UMAX_v          0.10 1110 ..1 ..... 01100 1 ..... ..... @qrrr_e
948SMIN_v          0.00 1110 ..1 ..... 01101 1 ..... ..... @qrrr_e
949UMIN_v          0.10 1110 ..1 ..... 01101 1 ..... ..... @qrrr_e
950SABD_v          0.00 1110 ..1 ..... 01110 1 ..... ..... @qrrr_e
951UABD_v          0.10 1110 ..1 ..... 01110 1 ..... ..... @qrrr_e
952SABA_v          0.00 1110 ..1 ..... 01111 1 ..... ..... @qrrr_e
953UABA_v          0.10 1110 ..1 ..... 01111 1 ..... ..... @qrrr_e
954MUL_v           0.00 1110 ..1 ..... 10011 1 ..... ..... @qrrr_e
955PMUL_v          0.10 1110 001 ..... 10011 1 ..... ..... @qrrr_b
956MLA_v           0.00 1110 ..1 ..... 10010 1 ..... ..... @qrrr_e
957MLS_v           0.10 1110 ..1 ..... 10010 1 ..... ..... @qrrr_e
958
959SQDMULH_v       0.00 1110 ..1 ..... 10110 1 ..... ..... @qrrr_e
960SQRDMULH_v      0.10 1110 ..1 ..... 10110 1 ..... ..... @qrrr_e
961SQRDMLAH_v      0.10 1110 ..0 ..... 10000 1 ..... ..... @qrrr_e
962SQRDMLSH_v      0.10 1110 ..0 ..... 10001 1 ..... ..... @qrrr_e
963
964SDOT_v          0.00 1110 100 ..... 10010 1 ..... ..... @qrrr_s
965UDOT_v          0.10 1110 100 ..... 10010 1 ..... ..... @qrrr_s
966USDOT_v         0.00 1110 100 ..... 10011 1 ..... ..... @qrrr_s
967BFDOT_v         0.10 1110 010 ..... 11111 1 ..... ..... @qrrr_s
968BFMLAL_v        0.10 1110 110 ..... 11111 1 ..... ..... @qrrr_h
969BFMMLA          0110 1110 010 ..... 11101 1 ..... ..... @rrr_q1e0
970SMMLA           0100 1110 100 ..... 10100 1 ..... ..... @rrr_q1e0
971UMMLA           0110 1110 100 ..... 10100 1 ..... ..... @rrr_q1e0
972USMMLA          0100 1110 100 ..... 10101 1 ..... ..... @rrr_q1e0
973
974FCADD_90        0.10 1110 ..0 ..... 11100 1 ..... ..... @qrrr_e
975FCADD_270       0.10 1110 ..0 ..... 11110 1 ..... ..... @qrrr_e
976
977FCMLA_v         0 q:1 10 1110 esz:2 0 rm:5 110 rot:2 1 rn:5 rd:5
978
979SMULL_v         0.00 1110 ..1 ..... 11000 0 ..... ..... @qrrr_e
980UMULL_v         0.10 1110 ..1 ..... 11000 0 ..... ..... @qrrr_e
981SMLAL_v         0.00 1110 ..1 ..... 10000 0 ..... ..... @qrrr_e
982UMLAL_v         0.10 1110 ..1 ..... 10000 0 ..... ..... @qrrr_e
983SMLSL_v         0.00 1110 ..1 ..... 10100 0 ..... ..... @qrrr_e
984UMLSL_v         0.10 1110 ..1 ..... 10100 0 ..... ..... @qrrr_e
985
986SADDL_v         0.00 1110 ..1 ..... 00000 0 ..... ..... @qrrr_e
987UADDL_v         0.10 1110 ..1 ..... 00000 0 ..... ..... @qrrr_e
988SSUBL_v         0.00 1110 ..1 ..... 00100 0 ..... ..... @qrrr_e
989USUBL_v         0.10 1110 ..1 ..... 00100 0 ..... ..... @qrrr_e
990SABAL_v         0.00 1110 ..1 ..... 01010 0 ..... ..... @qrrr_e
991UABAL_v         0.10 1110 ..1 ..... 01010 0 ..... ..... @qrrr_e
992SABDL_v         0.00 1110 ..1 ..... 01110 0 ..... ..... @qrrr_e
993UABDL_v         0.10 1110 ..1 ..... 01110 0 ..... ..... @qrrr_e
994
995SQDMULL_v       0.00 1110 011 ..... 11010 0 ..... ..... @qrrr_h
996SQDMULL_v       0.00 1110 101 ..... 11010 0 ..... ..... @qrrr_s
997SQDMLAL_v       0.00 1110 011 ..... 10010 0 ..... ..... @qrrr_h
998SQDMLAL_v       0.00 1110 101 ..... 10010 0 ..... ..... @qrrr_s
999SQDMLSL_v       0.00 1110 011 ..... 10110 0 ..... ..... @qrrr_h
1000SQDMLSL_v       0.00 1110 101 ..... 10110 0 ..... ..... @qrrr_s
1001
1002SADDW           0.00 1110 ..1 ..... 00010 0 ..... ..... @qrrr_e
1003UADDW           0.10 1110 ..1 ..... 00010 0 ..... ..... @qrrr_e
1004SSUBW           0.00 1110 ..1 ..... 00110 0 ..... ..... @qrrr_e
1005USUBW           0.10 1110 ..1 ..... 00110 0 ..... ..... @qrrr_e
1006
1007ADDHN           0.00 1110 ..1 ..... 01000 0 ..... ..... @qrrr_e
1008RADDHN          0.10 1110 ..1 ..... 01000 0 ..... ..... @qrrr_e
1009SUBHN           0.00 1110 ..1 ..... 01100 0 ..... ..... @qrrr_e
1010RSUBHN          0.10 1110 ..1 ..... 01100 0 ..... ..... @qrrr_e
1011
1012PMULL_p8        0.00 1110 001 ..... 11100 0 ..... ..... @qrrr_b
1013PMULL_p64       0.00 1110 111 ..... 11100 0 ..... ..... @qrrr_b
1014
1015### Advanced SIMD scalar x indexed element
1016
1017FMUL_si         0101 1111 00 .. .... 1001 . 0 ..... .....   @rrx_h
1018FMUL_si         0101 1111 10 . ..... 1001 . 0 ..... .....   @rrx_s
1019FMUL_si         0101 1111 11 0 ..... 1001 . 0 ..... .....   @rrx_d
1020
1021FMLA_si         0101 1111 00 .. .... 0001 . 0 ..... .....   @rrx_h
1022FMLA_si         0101 1111 10 .. .... 0001 . 0 ..... .....   @rrx_s
1023FMLA_si         0101 1111 11 0. .... 0001 . 0 ..... .....   @rrx_d
1024
1025FMLS_si         0101 1111 00 .. .... 0101 . 0 ..... .....   @rrx_h
1026FMLS_si         0101 1111 10 .. .... 0101 . 0 ..... .....   @rrx_s
1027FMLS_si         0101 1111 11 0. .... 0101 . 0 ..... .....   @rrx_d
1028
1029FMULX_si        0111 1111 00 .. .... 1001 . 0 ..... .....   @rrx_h
1030FMULX_si        0111 1111 10 . ..... 1001 . 0 ..... .....   @rrx_s
1031FMULX_si        0111 1111 11 0 ..... 1001 . 0 ..... .....   @rrx_d
1032
1033SQDMULH_si      0101 1111 01 .. .... 1100 . 0 ..... .....   @rrx_h
1034SQDMULH_si      0101 1111 10 .. .... 1100 . 0 ..... .....   @rrx_s
1035
1036SQRDMULH_si     0101 1111 01 .. .... 1101 . 0 ..... .....   @rrx_h
1037SQRDMULH_si     0101 1111 10 . ..... 1101 . 0 ..... .....   @rrx_s
1038
1039SQRDMLAH_si     0111 1111 01 .. .... 1101 . 0 ..... .....   @rrx_h
1040SQRDMLAH_si     0111 1111 10 .. .... 1101 . 0 ..... .....   @rrx_s
1041
1042SQRDMLSH_si     0111 1111 01 .. .... 1111 . 0 ..... .....   @rrx_h
1043SQRDMLSH_si     0111 1111 10 .. .... 1111 . 0 ..... .....   @rrx_s
1044
1045SQDMULL_si      0101 1111 01 .. .... 1011 . 0 ..... .....   @rrx_h
1046SQDMULL_si      0101 1111 10 . ..... 1011 . 0 ..... .....   @rrx_s
1047
1048SQDMLAL_si      0101 1111 01 .. .... 0011 . 0 ..... .....   @rrx_h
1049SQDMLAL_si      0101 1111 10 . ..... 0011 . 0 ..... .....   @rrx_s
1050
1051SQDMLSL_si      0101 1111 01 .. .... 0111 . 0 ..... .....   @rrx_h
1052SQDMLSL_si      0101 1111 10 . ..... 0111 . 0 ..... .....   @rrx_s
1053
1054### Advanced SIMD vector x indexed element
1055
1056FMUL_vi         0.00 1111 00 .. .... 1001 . 0 ..... .....   @qrrx_h
1057FMUL_vi         0.00 1111 10 . ..... 1001 . 0 ..... .....   @qrrx_s
1058FMUL_vi         0.00 1111 11 0 ..... 1001 . 0 ..... .....   @qrrx_d
1059
1060FMLA_vi         0.00 1111 00 .. .... 0001 . 0 ..... .....   @qrrx_h
1061FMLA_vi         0.00 1111 10 . ..... 0001 . 0 ..... .....   @qrrx_s
1062FMLA_vi         0.00 1111 11 0 ..... 0001 . 0 ..... .....   @qrrx_d
1063
1064FMLS_vi         0.00 1111 00 .. .... 0101 . 0 ..... .....   @qrrx_h
1065FMLS_vi         0.00 1111 10 . ..... 0101 . 0 ..... .....   @qrrx_s
1066FMLS_vi         0.00 1111 11 0 ..... 0101 . 0 ..... .....   @qrrx_d
1067
1068FMULX_vi        0.10 1111 00 .. .... 1001 . 0 ..... .....   @qrrx_h
1069FMULX_vi        0.10 1111 10 . ..... 1001 . 0 ..... .....   @qrrx_s
1070FMULX_vi        0.10 1111 11 0 ..... 1001 . 0 ..... .....   @qrrx_d
1071
1072FMLAL_vi        0.00 1111 10 .. .... 0000 . 0 ..... .....   @qrrx_h
1073FMLSL_vi        0.00 1111 10 .. .... 0100 . 0 ..... .....   @qrrx_h
1074FMLAL2_vi       0.10 1111 10 .. .... 1000 . 0 ..... .....   @qrrx_h
1075FMLSL2_vi       0.10 1111 10 .. .... 1100 . 0 ..... .....   @qrrx_h
1076
1077MUL_vi          0.00 1111 01 .. .... 1000 . 0 ..... .....   @qrrx_h
1078MUL_vi          0.00 1111 10 . ..... 1000 . 0 ..... .....   @qrrx_s
1079
1080MLA_vi          0.10 1111 01 .. .... 0000 . 0 ..... .....   @qrrx_h
1081MLA_vi          0.10 1111 10 . ..... 0000 . 0 ..... .....   @qrrx_s
1082
1083MLS_vi          0.10 1111 01 .. .... 0100 . 0 ..... .....   @qrrx_h
1084MLS_vi          0.10 1111 10 . ..... 0100 . 0 ..... .....   @qrrx_s
1085
1086SQDMULH_vi      0.00 1111 01 .. .... 1100 . 0 ..... .....   @qrrx_h
1087SQDMULH_vi      0.00 1111 10 . ..... 1100 . 0 ..... .....   @qrrx_s
1088
1089SQRDMULH_vi     0.00 1111 01 .. .... 1101 . 0 ..... .....   @qrrx_h
1090SQRDMULH_vi     0.00 1111 10 . ..... 1101 . 0 ..... .....   @qrrx_s
1091
1092SQRDMLAH_vi     0.10 1111 01 .. .... 1101 . 0 ..... .....   @qrrx_h
1093SQRDMLAH_vi     0.10 1111 10 .. .... 1101 . 0 ..... .....   @qrrx_s
1094
1095SQRDMLSH_vi     0.10 1111 01 .. .... 1111 . 0 ..... .....   @qrrx_h
1096SQRDMLSH_vi     0.10 1111 10 .. .... 1111 . 0 ..... .....   @qrrx_s
1097
1098SDOT_vi         0.00 1111 10 .. .... 1110 . 0 ..... .....   @qrrx_s
1099UDOT_vi         0.10 1111 10 .. .... 1110 . 0 ..... .....   @qrrx_s
1100SUDOT_vi        0.00 1111 00 .. .... 1111 . 0 ..... .....   @qrrx_s
1101USDOT_vi        0.00 1111 10 .. .... 1111 . 0 ..... .....   @qrrx_s
1102BFDOT_vi        0.00 1111 01 .. .... 1111 . 0 ..... .....   @qrrx_s
1103BFMLAL_vi       0.00 1111 11 .. .... 1111 . 0 ..... .....   @qrrx_h
1104
1105FCMLA_vi        0 0 10 1111 01 idx:1 rm:5 0 rot:2 1 0 0 rn:5 rd:5 esz=1 q=0
1106FCMLA_vi        0 1 10 1111 01 . rm:5 0 rot:2 1 . 0 rn:5 rd:5 esz=1 idx=%hl q=1
1107FCMLA_vi        0 1 10 1111 10 0 rm:5 0 rot:2 1 idx:1 0 rn:5 rd:5 esz=2 q=1
1108
1109SMULL_vi        0.00 1111 01 .. .... 1010 . 0 ..... .....   @qrrx_h
1110SMULL_vi        0.00 1111 10 . ..... 1010 . 0 ..... .....   @qrrx_s
1111UMULL_vi        0.10 1111 01 .. .... 1010 . 0 ..... .....   @qrrx_h
1112UMULL_vi        0.10 1111 10 . ..... 1010 . 0 ..... .....   @qrrx_s
1113
1114SMLAL_vi        0.00 1111 01 .. .... 0010 . 0 ..... .....   @qrrx_h
1115SMLAL_vi        0.00 1111 10 . ..... 0010 . 0 ..... .....   @qrrx_s
1116UMLAL_vi        0.10 1111 01 .. .... 0010 . 0 ..... .....   @qrrx_h
1117UMLAL_vi        0.10 1111 10 . ..... 0010 . 0 ..... .....   @qrrx_s
1118
1119SMLSL_vi        0.00 1111 01 .. .... 0110 . 0 ..... .....   @qrrx_h
1120SMLSL_vi        0.00 1111 10 . ..... 0110 . 0 ..... .....   @qrrx_s
1121UMLSL_vi        0.10 1111 01 .. .... 0110 . 0 ..... .....   @qrrx_h
1122UMLSL_vi        0.10 1111 10 . ..... 0110 . 0 ..... .....   @qrrx_s
1123
1124SQDMULL_vi      0.00 1111 01 .. .... 1011 . 0 ..... .....   @qrrx_h
1125SQDMULL_vi      0.00 1111 10 . ..... 1011 . 0 ..... .....   @qrrx_s
1126
1127SQDMLAL_vi      0.00 1111 01 .. .... 0011 . 0 ..... .....   @qrrx_h
1128SQDMLAL_vi      0.00 1111 10 . ..... 0011 . 0 ..... .....   @qrrx_s
1129
1130SQDMLSL_vi      0.00 1111 01 .. .... 0111 . 0 ..... .....   @qrrx_h
1131SQDMLSL_vi      0.00 1111 10 . ..... 0111 . 0 ..... .....   @qrrx_s
1132
1133# Floating-point conditional select
1134
1135FCSEL           0001 1110 .. 1 rm:5 cond:4 11 rn:5 rd:5     esz=%esz_hsd
1136
1137# Floating-point data-processing (3 source)
1138
1139@rrrr_hsd       .... .... .. . rm:5  . ra:5  rn:5  rd:5     &rrrr_e esz=%esz_hsd
1140
1141FMADD           0001 1111 .. 0 ..... 0 ..... ..... .....    @rrrr_hsd
1142FMSUB           0001 1111 .. 0 ..... 1 ..... ..... .....    @rrrr_hsd
1143FNMADD          0001 1111 .. 1 ..... 0 ..... ..... .....    @rrrr_hsd
1144FNMSUB          0001 1111 .. 1 ..... 1 ..... ..... .....    @rrrr_hsd
1145
1146# Advanced SIMD Extract
1147
1148EXT_d           0010 1110 00 0 rm:5 00 imm:3 0 rn:5 rd:5
1149EXT_q           0110 1110 00 0 rm:5 0  imm:4 0 rn:5 rd:5
1150
1151# Advanced SIMD Table Lookup
1152
1153TBL_TBX         0 q:1 00 1110 000 rm:5 0 len:2 tbx:1 00 rn:5 rd:5
1154
1155# Advanced SIMD Permute
1156
1157UZP1            0.00 1110 .. 0 ..... 0 001 10 ..... .....   @qrrr_e
1158UZP2            0.00 1110 .. 0 ..... 0 101 10 ..... .....   @qrrr_e
1159TRN1            0.00 1110 .. 0 ..... 0 010 10 ..... .....   @qrrr_e
1160TRN2            0.00 1110 .. 0 ..... 0 110 10 ..... .....   @qrrr_e
1161ZIP1            0.00 1110 .. 0 ..... 0 011 10 ..... .....   @qrrr_e
1162ZIP2            0.00 1110 .. 0 ..... 0 111 10 ..... .....   @qrrr_e
1163
1164# Advanced SIMD Across Lanes
1165
1166ADDV            0.00 1110 .. 11000 11011 10 ..... .....     @qrr_e
1167SADDLV          0.00 1110 .. 11000 00011 10 ..... .....     @qrr_e
1168UADDLV          0.10 1110 .. 11000 00011 10 ..... .....     @qrr_e
1169SMAXV           0.00 1110 .. 11000 01010 10 ..... .....     @qrr_e
1170UMAXV           0.10 1110 .. 11000 01010 10 ..... .....     @qrr_e
1171SMINV           0.00 1110 .. 11000 11010 10 ..... .....     @qrr_e
1172UMINV           0.10 1110 .. 11000 11010 10 ..... .....     @qrr_e
1173
1174FMAXNMV_h       0.00 1110 00 11000 01100 10 ..... .....     @qrr_h
1175FMAXNMV_s       0110 1110 00 11000 01100 10 ..... .....     @rr_q1e2
1176
1177FMINNMV_h       0.00 1110 10 11000 01100 10 ..... .....     @qrr_h
1178FMINNMV_s       0110 1110 10 11000 01100 10 ..... .....     @rr_q1e2
1179
1180FMAXV_h         0.00 1110 00 11000 01111 10 ..... .....     @qrr_h
1181FMAXV_s         0110 1110 00 11000 01111 10 ..... .....     @rr_q1e2
1182
1183FMINV_h         0.00 1110 10 11000 01111 10 ..... .....     @qrr_h
1184FMINV_s         0110 1110 10 11000 01111 10 ..... .....     @rr_q1e2
1185
1186# Floating-point Immediate
1187
1188FMOVI_s         0001 1110 .. 1 imm:8 100 00000 rd:5         esz=%esz_hsd
1189
1190# Advanced SIMD Modified Immediate / Shift by Immediate
1191
1192%abcdefgh       16:3 5:5
1193
1194# Right shifts are encoded as N - shift, where N is the element size in bits.
1195%neon_rshift_i6 16:6 !function=rsub_64
1196%neon_rshift_i5 16:5 !function=rsub_32
1197%neon_rshift_i4 16:4 !function=rsub_16
1198%neon_rshift_i3 16:3 !function=rsub_8
1199
1200@q_shri_b       . q:1 .. ..... 0001 ... ..... . rn:5 rd:5   \
1201                &qrri_e esz=0 imm=%neon_rshift_i3
1202@q_shri_h       . q:1 .. ..... 001 .... ..... . rn:5 rd:5   \
1203                &qrri_e esz=1 imm=%neon_rshift_i4
1204@q_shri_s       . q:1 .. ..... 01 ..... ..... . rn:5 rd:5   \
1205                &qrri_e esz=2 imm=%neon_rshift_i5
1206@q_shri_d       . 1 .. ..... 1 ...... ..... . rn:5 rd:5     \
1207                &qrri_e esz=3 imm=%neon_rshift_i6 q=1
1208
1209@q_shli_b       . q:1 .. ..... 0001 imm:3 ..... . rn:5 rd:5 &qrri_e esz=0
1210@q_shli_h       . q:1 .. ..... 001  imm:4 ..... . rn:5 rd:5 &qrri_e esz=1
1211@q_shli_s       . q:1 .. ..... 01   imm:5 ..... . rn:5 rd:5 &qrri_e esz=2
1212@q_shli_d       . 1   .. ..... 1    imm:6 ..... . rn:5 rd:5 &qrri_e esz=3 q=1
1213
1214FMOVI_v_h       0 q:1 00 1111 00000 ... 1111 11 ..... rd:5  %abcdefgh
1215
1216# MOVI, MVNI, ORR, BIC, FMOV are all intermixed via cmode.
1217Vimm            0 q:1 op:1 0 1111 00000 ... cmode:4 01 ..... rd:5 %abcdefgh
1218
1219SSHR_v          0.00 11110 .... ... 00000 1 ..... .....     @q_shri_b
1220SSHR_v          0.00 11110 .... ... 00000 1 ..... .....     @q_shri_h
1221SSHR_v          0.00 11110 .... ... 00000 1 ..... .....     @q_shri_s
1222SSHR_v          0.00 11110 .... ... 00000 1 ..... .....     @q_shri_d
1223
1224USHR_v          0.10 11110 .... ... 00000 1 ..... .....     @q_shri_b
1225USHR_v          0.10 11110 .... ... 00000 1 ..... .....     @q_shri_h
1226USHR_v          0.10 11110 .... ... 00000 1 ..... .....     @q_shri_s
1227USHR_v          0.10 11110 .... ... 00000 1 ..... .....     @q_shri_d
1228
1229SSRA_v          0.00 11110 .... ... 00010 1 ..... .....     @q_shri_b
1230SSRA_v          0.00 11110 .... ... 00010 1 ..... .....     @q_shri_h
1231SSRA_v          0.00 11110 .... ... 00010 1 ..... .....     @q_shri_s
1232SSRA_v          0.00 11110 .... ... 00010 1 ..... .....     @q_shri_d
1233
1234USRA_v          0.10 11110 .... ... 00010 1 ..... .....     @q_shri_b
1235USRA_v          0.10 11110 .... ... 00010 1 ..... .....     @q_shri_h
1236USRA_v          0.10 11110 .... ... 00010 1 ..... .....     @q_shri_s
1237USRA_v          0.10 11110 .... ... 00010 1 ..... .....     @q_shri_d
1238
1239SRSHR_v         0.00 11110 .... ... 00100 1 ..... .....     @q_shri_b
1240SRSHR_v         0.00 11110 .... ... 00100 1 ..... .....     @q_shri_h
1241SRSHR_v         0.00 11110 .... ... 00100 1 ..... .....     @q_shri_s
1242SRSHR_v         0.00 11110 .... ... 00100 1 ..... .....     @q_shri_d
1243
1244URSHR_v         0.10 11110 .... ... 00100 1 ..... .....     @q_shri_b
1245URSHR_v         0.10 11110 .... ... 00100 1 ..... .....     @q_shri_h
1246URSHR_v         0.10 11110 .... ... 00100 1 ..... .....     @q_shri_s
1247URSHR_v         0.10 11110 .... ... 00100 1 ..... .....     @q_shri_d
1248
1249SRSRA_v         0.00 11110 .... ... 00110 1 ..... .....     @q_shri_b
1250SRSRA_v         0.00 11110 .... ... 00110 1 ..... .....     @q_shri_h
1251SRSRA_v         0.00 11110 .... ... 00110 1 ..... .....     @q_shri_s
1252SRSRA_v         0.00 11110 .... ... 00110 1 ..... .....     @q_shri_d
1253
1254URSRA_v         0.10 11110 .... ... 00110 1 ..... .....     @q_shri_b
1255URSRA_v         0.10 11110 .... ... 00110 1 ..... .....     @q_shri_h
1256URSRA_v         0.10 11110 .... ... 00110 1 ..... .....     @q_shri_s
1257URSRA_v         0.10 11110 .... ... 00110 1 ..... .....     @q_shri_d
1258
1259SRI_v           0.10 11110 .... ... 01000 1 ..... .....     @q_shri_b
1260SRI_v           0.10 11110 .... ... 01000 1 ..... .....     @q_shri_h
1261SRI_v           0.10 11110 .... ... 01000 1 ..... .....     @q_shri_s
1262SRI_v           0.10 11110 .... ... 01000 1 ..... .....     @q_shri_d
1263
1264SHL_v           0.00 11110 .... ... 01010 1 ..... .....     @q_shli_b
1265SHL_v           0.00 11110 .... ... 01010 1 ..... .....     @q_shli_h
1266SHL_v           0.00 11110 .... ... 01010 1 ..... .....     @q_shli_s
1267SHL_v           0.00 11110 .... ... 01010 1 ..... .....     @q_shli_d
1268
1269SLI_v           0.10 11110 .... ... 01010 1 ..... .....     @q_shli_b
1270SLI_v           0.10 11110 .... ... 01010 1 ..... .....     @q_shli_h
1271SLI_v           0.10 11110 .... ... 01010 1 ..... .....     @q_shli_s
1272SLI_v           0.10 11110 .... ... 01010 1 ..... .....     @q_shli_d
1273
1274SSHLL_v         0.00 11110 .... ... 10100 1 ..... .....     @q_shli_b
1275SSHLL_v         0.00 11110 .... ... 10100 1 ..... .....     @q_shli_h
1276SSHLL_v         0.00 11110 .... ... 10100 1 ..... .....     @q_shli_s
1277
1278USHLL_v         0.10 11110 .... ... 10100 1 ..... .....     @q_shli_b
1279USHLL_v         0.10 11110 .... ... 10100 1 ..... .....     @q_shli_h
1280USHLL_v         0.10 11110 .... ... 10100 1 ..... .....     @q_shli_s
1281
1282SHRN_v          0.00 11110 .... ... 10000 1 ..... .....     @q_shri_b
1283SHRN_v          0.00 11110 .... ... 10000 1 ..... .....     @q_shri_h
1284SHRN_v          0.00 11110 .... ... 10000 1 ..... .....     @q_shri_s
1285
1286RSHRN_v         0.00 11110 .... ... 10001 1 ..... .....     @q_shri_b
1287RSHRN_v         0.00 11110 .... ... 10001 1 ..... .....     @q_shri_h
1288RSHRN_v         0.00 11110 .... ... 10001 1 ..... .....     @q_shri_s
1289
1290SQSHL_vi        0.00 11110 .... ... 01110 1 ..... .....     @q_shli_b
1291SQSHL_vi        0.00 11110 .... ... 01110 1 ..... .....     @q_shli_h
1292SQSHL_vi        0.00 11110 .... ... 01110 1 ..... .....     @q_shli_s
1293SQSHL_vi        0.00 11110 .... ... 01110 1 ..... .....     @q_shli_d
1294
1295UQSHL_vi        0.10 11110 .... ... 01110 1 ..... .....     @q_shli_b
1296UQSHL_vi        0.10 11110 .... ... 01110 1 ..... .....     @q_shli_h
1297UQSHL_vi        0.10 11110 .... ... 01110 1 ..... .....     @q_shli_s
1298UQSHL_vi        0.10 11110 .... ... 01110 1 ..... .....     @q_shli_d
1299
1300SQSHLU_vi       0.10 11110 .... ... 01100 1 ..... .....     @q_shli_b
1301SQSHLU_vi       0.10 11110 .... ... 01100 1 ..... .....     @q_shli_h
1302SQSHLU_vi       0.10 11110 .... ... 01100 1 ..... .....     @q_shli_s
1303SQSHLU_vi       0.10 11110 .... ... 01100 1 ..... .....     @q_shli_d
1304
1305SQSHRN_v        0.00 11110 .... ... 10010 1 ..... .....     @q_shri_b
1306SQSHRN_v        0.00 11110 .... ... 10010 1 ..... .....     @q_shri_h
1307SQSHRN_v        0.00 11110 .... ... 10010 1 ..... .....     @q_shri_s
1308
1309UQSHRN_v        0.10 11110 .... ... 10010 1 ..... .....     @q_shri_b
1310UQSHRN_v        0.10 11110 .... ... 10010 1 ..... .....     @q_shri_h
1311UQSHRN_v        0.10 11110 .... ... 10010 1 ..... .....     @q_shri_s
1312
1313SQSHRUN_v       0.10 11110 .... ... 10000 1 ..... .....     @q_shri_b
1314SQSHRUN_v       0.10 11110 .... ... 10000 1 ..... .....     @q_shri_h
1315SQSHRUN_v       0.10 11110 .... ... 10000 1 ..... .....     @q_shri_s
1316
1317SQRSHRN_v       0.00 11110 .... ... 10011 1 ..... .....     @q_shri_b
1318SQRSHRN_v       0.00 11110 .... ... 10011 1 ..... .....     @q_shri_h
1319SQRSHRN_v       0.00 11110 .... ... 10011 1 ..... .....     @q_shri_s
1320
1321UQRSHRN_v       0.10 11110 .... ... 10011 1 ..... .....     @q_shri_b
1322UQRSHRN_v       0.10 11110 .... ... 10011 1 ..... .....     @q_shri_h
1323UQRSHRN_v       0.10 11110 .... ... 10011 1 ..... .....     @q_shri_s
1324
1325SQRSHRUN_v      0.10 11110 .... ... 10001 1 ..... .....     @q_shri_b
1326SQRSHRUN_v      0.10 11110 .... ... 10001 1 ..... .....     @q_shri_h
1327SQRSHRUN_v      0.10 11110 .... ... 10001 1 ..... .....     @q_shri_s
1328
1329# Advanced SIMD scalar shift by immediate
1330
1331@shri_b         .... ..... 0001 ... ..... . rn:5 rd:5   \
1332                &rri_e esz=0 imm=%neon_rshift_i3
1333@shri_h         .... ..... 001 .... ..... . rn:5 rd:5   \
1334                &rri_e esz=1 imm=%neon_rshift_i4
1335@shri_s         .... ..... 01 ..... ..... . rn:5 rd:5   \
1336                &rri_e esz=2 imm=%neon_rshift_i5
1337@shri_d         .... ..... 1 ...... ..... . rn:5 rd:5   \
1338                &rri_e esz=3 imm=%neon_rshift_i6
1339
1340@shli_b         .... ..... 0001 imm:3  ..... . rn:5 rd:5    &rri_e esz=0
1341@shli_h         .... ..... 001  imm:4  ..... . rn:5 rd:5    &rri_e esz=1
1342@shli_s         .... ..... 01   imm:5  ..... . rn:5 rd:5    &rri_e esz=2
1343@shli_d         .... ..... 1    imm:6  ..... . rn:5 rd:5    &rri_e esz=3
1344
1345SSHR_s          0101 11110 .... ... 00000 1 ..... .....     @shri_d
1346USHR_s          0111 11110 .... ... 00000 1 ..... .....     @shri_d
1347SSRA_s          0101 11110 .... ... 00010 1 ..... .....     @shri_d
1348USRA_s          0111 11110 .... ... 00010 1 ..... .....     @shri_d
1349SRSHR_s         0101 11110 .... ... 00100 1 ..... .....     @shri_d
1350URSHR_s         0111 11110 .... ... 00100 1 ..... .....     @shri_d
1351SRSRA_s         0101 11110 .... ... 00110 1 ..... .....     @shri_d
1352URSRA_s         0111 11110 .... ... 00110 1 ..... .....     @shri_d
1353SRI_s           0111 11110 .... ... 01000 1 ..... .....     @shri_d
1354
1355SHL_s           0101 11110 .... ... 01010 1 ..... .....     @shli_d
1356SLI_s           0111 11110 .... ... 01010 1 ..... .....     @shli_d
1357
1358SQSHL_si        0101 11110 .... ... 01110 1 ..... .....     @shli_b
1359SQSHL_si        0101 11110 .... ... 01110 1 ..... .....     @shli_h
1360SQSHL_si        0101 11110 .... ... 01110 1 ..... .....     @shli_s
1361SQSHL_si        0101 11110 .... ... 01110 1 ..... .....     @shli_d
1362
1363UQSHL_si        0111 11110 .... ... 01110 1 ..... .....     @shli_b
1364UQSHL_si        0111 11110 .... ... 01110 1 ..... .....     @shli_h
1365UQSHL_si        0111 11110 .... ... 01110 1 ..... .....     @shli_s
1366UQSHL_si        0111 11110 .... ... 01110 1 ..... .....     @shli_d
1367
1368SQSHLU_si       0111 11110 .... ... 01100 1 ..... .....     @shli_b
1369SQSHLU_si       0111 11110 .... ... 01100 1 ..... .....     @shli_h
1370SQSHLU_si       0111 11110 .... ... 01100 1 ..... .....     @shli_s
1371SQSHLU_si       0111 11110 .... ... 01100 1 ..... .....     @shli_d
1372
1373SQSHRN_si       0101 11110 .... ... 10010 1 ..... .....     @shri_b
1374SQSHRN_si       0101 11110 .... ... 10010 1 ..... .....     @shri_h
1375SQSHRN_si       0101 11110 .... ... 10010 1 ..... .....     @shri_s
1376
1377UQSHRN_si       0111 11110 .... ... 10010 1 ..... .....     @shri_b
1378UQSHRN_si       0111 11110 .... ... 10010 1 ..... .....     @shri_h
1379UQSHRN_si       0111 11110 .... ... 10010 1 ..... .....     @shri_s
1380
1381SQSHRUN_si      0111 11110 .... ... 10000 1 ..... .....     @shri_b
1382SQSHRUN_si      0111 11110 .... ... 10000 1 ..... .....     @shri_h
1383SQSHRUN_si      0111 11110 .... ... 10000 1 ..... .....     @shri_s
1384
1385SQRSHRN_si      0101 11110 .... ... 10011 1 ..... .....     @shri_b
1386SQRSHRN_si      0101 11110 .... ... 10011 1 ..... .....     @shri_h
1387SQRSHRN_si      0101 11110 .... ... 10011 1 ..... .....     @shri_s
1388
1389UQRSHRN_si      0111 11110 .... ... 10011 1 ..... .....     @shri_b
1390UQRSHRN_si      0111 11110 .... ... 10011 1 ..... .....     @shri_h
1391UQRSHRN_si      0111 11110 .... ... 10011 1 ..... .....     @shri_s
1392
1393SQRSHRUN_si     0111 11110 .... ... 10001 1 ..... .....     @shri_b
1394SQRSHRUN_si     0111 11110 .... ... 10001 1 ..... .....     @shri_h
1395SQRSHRUN_si     0111 11110 .... ... 10001 1 ..... .....     @shri_s
1396