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