xref: /qemu/target/arm/tcg/a64.decode (revision 68df8c8dba57f539d24f1a92a8699a179d9bb6fb)
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_hs         22:1 !function=plus_1
25%esz_hsd        22:2 !function=xor_2
26%hl             11:1 21:1
27%hlm            11:1 20:2
28
29&r              rn
30&rrr            rd rn rm
31&ri             rd imm
32&rr             rd rn
33&rr_sf          rd rn sf
34&rri_sf         rd rn imm sf
35&rrr_sf         rd rn rm sf
36&i              imm
37&rr_e           rd rn esz
38&rri_e          rd rn imm esz
39&rrr_e          rd rn rm esz
40&rrx_e          rd rn rm idx esz
41&rrrr_e         rd rn rm ra esz
42&qrr_e          q rd rn esz
43&qrri_e         q rd rn imm esz
44&qrrr_e         q rd rn rm esz
45&qrrx_e         q rd rn rm idx esz
46&qrrrr_e        q rd rn rm ra esz
47
48@rr_h           ........ ... ..... ...... rn:5 rd:5     &rr_e esz=1
49@rr_s           ........ ... ..... ...... rn:5 rd:5     &rr_e esz=2
50@rr_d           ........ ... ..... ...... rn:5 rd:5     &rr_e esz=3
51@rr_e           ........ esz:2 . ..... ...... rn:5 rd:5 &rr_e
52@rr_sd          ........ ... ..... ...... rn:5 rd:5     &rr_e esz=%esz_sd
53@rr_hsd         ........ ... ..... ...... rn:5 rd:5     &rr_e esz=%esz_hsd
54
55@rrr_b          ........ ... rm:5 ...... rn:5 rd:5      &rrr_e esz=0
56@rrr_h          ........ ... rm:5 ...... rn:5 rd:5      &rrr_e esz=1
57@rrr_s          ........ ... rm:5 ...... rn:5 rd:5      &rrr_e esz=2
58@rrr_d          ........ ... rm:5 ...... rn:5 rd:5      &rrr_e esz=3
59@rrr_sd         ........ ... rm:5 ...... rn:5 rd:5      &rrr_e esz=%esz_sd
60@rrr_hsd        ........ ... rm:5 ...... rn:5 rd:5      &rrr_e esz=%esz_hsd
61@rrr_e          ........ esz:2 . rm:5 ...... rn:5 rd:5  &rrr_e
62@r2r_e          ........ esz:2 . ..... ...... rm:5 rd:5 &rrr_e rn=%rd
63
64@rrx_h          ........ .. .. rm:4 .... . . rn:5 rd:5  &rrx_e esz=1 idx=%hlm
65@rrx_s          ........ .. . rm:5  .... . . rn:5 rd:5  &rrx_e esz=2 idx=%hl
66@rrx_d          ........ .. . rm:5  .... idx:1 . rn:5 rd:5  &rrx_e esz=3
67
68@rr_q1e0        ........ ........ ...... rn:5 rd:5      &qrr_e q=1 esz=0
69@rr_q1e2        ........ ........ ...... rn:5 rd:5      &qrr_e q=1 esz=2
70@r2r_q1e0       ........ ........ ...... rm:5 rd:5      &qrrr_e rn=%rd q=1 esz=0
71@rrr_q1e0       ........ ... rm:5 ...... rn:5 rd:5      &qrrr_e q=1 esz=0
72@rrr_q1e3       ........ ... rm:5 ...... rn:5 rd:5      &qrrr_e q=1 esz=3
73@rrrr_q1e3      ........ ... rm:5 . ra:5 rn:5 rd:5      &qrrrr_e q=1 esz=3
74
75@qrr_b          . q:1 ...... .. ...... ...... rn:5 rd:5  &qrr_e esz=0
76@qrr_h          . q:1 ...... .. ...... ...... rn:5 rd:5  &qrr_e esz=1
77@qrr_s          . q:1 ...... .. ...... ...... rn:5 rd:5  &qrr_e esz=2
78@qrr_bh         . q:1 ...... . esz:1 ...... ...... rn:5 rd:5  &qrr_e
79@qrr_hs         . q:1 ...... .. ...... ...... rn:5 rd:5  &qrr_e esz=%esz_hs
80@qrr_sd         . q:1 ...... .. ...... ...... rn:5 rd:5  &qrr_e esz=%esz_sd
81@qrr_e          . q:1 ...... esz:2 ...... ...... rn:5 rd:5  &qrr_e
82
83@qrrr_b         . q:1 ...... ... rm:5 ...... rn:5 rd:5  &qrrr_e esz=0
84@qrrr_h         . q:1 ...... ... rm:5 ...... rn:5 rd:5  &qrrr_e esz=1
85@qrrr_s         . q:1 ...... ... rm:5 ...... rn:5 rd:5  &qrrr_e esz=2
86@qrrr_sd        . q:1 ...... ... rm:5 ...... rn:5 rd:5  &qrrr_e esz=%esz_sd
87@qrrr_e         . q:1 ...... esz:2 . rm:5 ...... rn:5 rd:5  &qrrr_e
88@qr2r_e         . q:1 ...... esz:2 . ..... ...... rm:5 rd:5 &qrrr_e rn=%rd
89
90@qrrx_h         . q:1 .. .... .. .. rm:4 .... . . rn:5 rd:5 \
91                &qrrx_e esz=1 idx=%hlm
92@qrrx_s         . q:1 .. .... .. . rm:5  .... . . rn:5 rd:5 \
93                &qrrx_e esz=2 idx=%hl
94@qrrx_d         . q:1 .. .... .. . rm:5  .... idx:1 . rn:5 rd:5 \
95                &qrrx_e esz=3
96
97### Data Processing - Immediate
98
99# PC-rel addressing
100
101%imm_pcrel      5:s19 29:2
102@pcrel          . .. ..... ................... rd:5     &ri imm=%imm_pcrel
103
104ADR             0 .. 10000 ................... .....    @pcrel
105ADRP            1 .. 10000 ................... .....    @pcrel
106
107# Add/subtract (immediate)
108
109%imm12_sh12     10:12 !function=shl_12
110@addsub_imm     sf:1 .. ...... . imm:12 rn:5 rd:5
111@addsub_imm12   sf:1 .. ...... . ............ rn:5 rd:5 imm=%imm12_sh12
112
113ADD_i           . 00 100010 0 ............ ..... .....  @addsub_imm
114ADD_i           . 00 100010 1 ............ ..... .....  @addsub_imm12
115ADDS_i          . 01 100010 0 ............ ..... .....  @addsub_imm
116ADDS_i          . 01 100010 1 ............ ..... .....  @addsub_imm12
117
118SUB_i           . 10 100010 0 ............ ..... .....  @addsub_imm
119SUB_i           . 10 100010 1 ............ ..... .....  @addsub_imm12
120SUBS_i          . 11 100010 0 ............ ..... .....  @addsub_imm
121SUBS_i          . 11 100010 1 ............ ..... .....  @addsub_imm12
122
123# Add/subtract (immediate with tags)
124
125&rri_tag        rd rn uimm6 uimm4
126@addsub_imm_tag . .. ...... . uimm6:6 .. uimm4:4 rn:5 rd:5 &rri_tag
127
128ADDG_i          1 00 100011 0 ...... 00 .... ..... ..... @addsub_imm_tag
129SUBG_i          1 10 100011 0 ...... 00 .... ..... ..... @addsub_imm_tag
130
131# Logical (immediate)
132
133&rri_log        rd rn sf dbm
134@logic_imm_64   1 .. ...... dbm:13 rn:5 rd:5            &rri_log sf=1
135@logic_imm_32   0 .. ...... 0 dbm:12 rn:5 rd:5          &rri_log sf=0
136
137AND_i           . 00 100100 . ...... ...... ..... ..... @logic_imm_64
138AND_i           . 00 100100 . ...... ...... ..... ..... @logic_imm_32
139ORR_i           . 01 100100 . ...... ...... ..... ..... @logic_imm_64
140ORR_i           . 01 100100 . ...... ...... ..... ..... @logic_imm_32
141EOR_i           . 10 100100 . ...... ...... ..... ..... @logic_imm_64
142EOR_i           . 10 100100 . ...... ...... ..... ..... @logic_imm_32
143ANDS_i          . 11 100100 . ...... ...... ..... ..... @logic_imm_64
144ANDS_i          . 11 100100 . ...... ...... ..... ..... @logic_imm_32
145
146# Move wide (immediate)
147
148&movw           rd sf imm hw
149@movw_64        1 .. ...... hw:2   imm:16 rd:5          &movw sf=1
150@movw_32        0 .. ...... 0 hw:1 imm:16 rd:5          &movw sf=0
151
152MOVN            . 00 100101 .. ................ .....   @movw_64
153MOVN            . 00 100101 .. ................ .....   @movw_32
154MOVZ            . 10 100101 .. ................ .....   @movw_64
155MOVZ            . 10 100101 .. ................ .....   @movw_32
156MOVK            . 11 100101 .. ................ .....   @movw_64
157MOVK            . 11 100101 .. ................ .....   @movw_32
158
159# Bitfield
160
161&bitfield       rd rn sf immr imms
162@bitfield_64    1 .. ...... 1 immr:6 imms:6 rn:5 rd:5      &bitfield sf=1
163@bitfield_32    0 .. ...... 0 0 immr:5 0 imms:5 rn:5 rd:5  &bitfield sf=0
164
165SBFM            . 00 100110 . ...... ...... ..... ..... @bitfield_64
166SBFM            . 00 100110 . ...... ...... ..... ..... @bitfield_32
167BFM             . 01 100110 . ...... ...... ..... ..... @bitfield_64
168BFM             . 01 100110 . ...... ...... ..... ..... @bitfield_32
169UBFM            . 10 100110 . ...... ...... ..... ..... @bitfield_64
170UBFM            . 10 100110 . ...... ...... ..... ..... @bitfield_32
171
172# Extract
173
174&extract        rd rn rm imm sf
175
176EXTR            1 00 100111 1 0 rm:5 imm:6 rn:5 rd:5     &extract sf=1
177EXTR            0 00 100111 0 0 rm:5 0 imm:5 rn:5 rd:5   &extract sf=0
178
179### Branches
180
181%imm26   0:s26 !function=times_4
182@branch         . ..... .......................... &i imm=%imm26
183
184B               0 00101 .......................... @branch
185BL              1 00101 .......................... @branch
186
187%imm19   5:s19 !function=times_4
188&cbz     rt imm sf nz
189
190CBZ             sf:1 011010 nz:1 ................... rt:5 &cbz imm=%imm19
191
192%imm14     5:s14 !function=times_4
193%imm31_19  31:1 19:5
194&tbz       rt imm nz bitpos
195
196TBZ             . 011011 nz:1 ..... .............. rt:5 &tbz  imm=%imm14 bitpos=%imm31_19
197
198# B.cond and BC.cond
199B_cond          0101010 0 ................... c:1 cond:4 imm=%imm19
200
201BR              1101011 0000 11111 000000 rn:5 00000 &r
202BLR             1101011 0001 11111 000000 rn:5 00000 &r
203RET             1101011 0010 11111 000000 rn:5 00000 &r
204
205&braz       rn m
206BRAZ            1101011 0000 11111 00001 m:1 rn:5 11111 &braz   # BRAAZ, BRABZ
207BLRAZ           1101011 0001 11111 00001 m:1 rn:5 11111 &braz   # BLRAAZ, BLRABZ
208
209&reta       m
210RETA            1101011 0010 11111 00001 m:1 11111 11111 &reta  # RETAA, RETAB
211
212&bra        rn rm m
213BRA             1101011 1000 11111 00001 m:1 rn:5 rm:5 &bra # BRAA, BRAB
214BLRA            1101011 1001 11111 00001 m:1 rn:5 rm:5 &bra # BLRAA, BLRAB
215
216ERET            1101011 0100 11111 000000 11111 00000
217ERETA           1101011 0100 11111 00001 m:1 11111 11111 &reta  # ERETAA, ERETAB
218
219# We don't need to decode DRPS because it always UNDEFs except when
220# the processor is in halting debug state (which we don't implement).
221# The pattern is listed here as documentation.
222# DRPS            1101011 0101 11111 000000 11111 00000
223
224# Hint instruction group
225{
226  [
227    YIELD       1101 0101 0000 0011 0010 0000 001 11111
228    WFE         1101 0101 0000 0011 0010 0000 010 11111
229    WFI         1101 0101 0000 0011 0010 0000 011 11111
230    # We implement WFE to never block, so our SEV/SEVL are NOPs
231    # SEV       1101 0101 0000 0011 0010 0000 100 11111
232    # SEVL      1101 0101 0000 0011 0010 0000 101 11111
233    # Our DGL is a NOP because we don't merge memory accesses anyway.
234    # DGL       1101 0101 0000 0011 0010 0000 110 11111
235    XPACLRI     1101 0101 0000 0011 0010 0000 111 11111
236    PACIA1716   1101 0101 0000 0011 0010 0001 000 11111
237    PACIB1716   1101 0101 0000 0011 0010 0001 010 11111
238    AUTIA1716   1101 0101 0000 0011 0010 0001 100 11111
239    AUTIB1716   1101 0101 0000 0011 0010 0001 110 11111
240    ESB         1101 0101 0000 0011 0010 0010 000 11111
241    PACIAZ      1101 0101 0000 0011 0010 0011 000 11111
242    PACIASP     1101 0101 0000 0011 0010 0011 001 11111
243    PACIBZ      1101 0101 0000 0011 0010 0011 010 11111
244    PACIBSP     1101 0101 0000 0011 0010 0011 011 11111
245    AUTIAZ      1101 0101 0000 0011 0010 0011 100 11111
246    AUTIASP     1101 0101 0000 0011 0010 0011 101 11111
247    AUTIBZ      1101 0101 0000 0011 0010 0011 110 11111
248    AUTIBSP     1101 0101 0000 0011 0010 0011 111 11111
249  ]
250  # The canonical NOP has CRm == op2 == 0, but all of the space
251  # that isn't specifically allocated to an instruction must NOP
252  NOP           1101 0101 0000 0011 0010 ---- --- 11111
253}
254
255# System instructions with register argument
256WFET            1101 0101 0000 0011 0001 0000 000 rd:5
257WFIT            1101 0101 0000 0011 0001 0000 001 rd:5
258
259# Barriers
260
261CLREX           1101 0101 0000 0011 0011 ---- 010 11111
262DSB_DMB         1101 0101 0000 0011 0011 domain:2 types:2 10- 11111
263# For the DSB nXS variant, types always equals MBReqTypes_All and we ignore the
264# domain bits.
265DSB_nXS         1101 0101 0000 0011 0011 -- 10 001 11111
266ISB             1101 0101 0000 0011 0011 ---- 110 11111
267SB              1101 0101 0000 0011 0011 0000 111 11111
268
269# PSTATE
270
271CFINV           1101 0101 0000 0 000 0100 0000 000 11111
272XAFLAG          1101 0101 0000 0 000 0100 0000 001 11111
273AXFLAG          1101 0101 0000 0 000 0100 0000 010 11111
274
275# These are architecturally all "MSR (immediate)"; we decode the destination
276# register too because there is no commonality in our implementation.
277@msr_i          .... .... .... . ... .... imm:4 ... .....
278MSR_i_UAO       1101 0101 0000 0 000 0100 .... 011 11111 @msr_i
279MSR_i_PAN       1101 0101 0000 0 000 0100 .... 100 11111 @msr_i
280MSR_i_SPSEL     1101 0101 0000 0 000 0100 .... 101 11111 @msr_i
281MSR_i_SBSS      1101 0101 0000 0 011 0100 .... 001 11111 @msr_i
282MSR_i_DIT       1101 0101 0000 0 011 0100 .... 010 11111 @msr_i
283MSR_i_TCO       1101 0101 0000 0 011 0100 .... 100 11111 @msr_i
284MSR_i_DAIFSET   1101 0101 0000 0 011 0100 .... 110 11111 @msr_i
285MSR_i_DAIFCLEAR 1101 0101 0000 0 011 0100 .... 111 11111 @msr_i
286MSR_i_ALLINT    1101 0101 0000 0 001 0100 000 imm:1 000 11111
287MSR_i_SVCR      1101 0101 0000 0 011 0100 0 mask:2 imm:1 011 11111
288
289# MRS, MSR (register), SYS, SYSL. These are all essentially the
290# same instruction as far as QEMU is concerned.
291# NB: op0 is bits [20:19], but op0=0b00 is other insns, so we have
292# to hand-decode it.
293SYS             1101 0101 00 l:1 01 op1:3 crn:4 crm:4 op2:3 rt:5 op0=1
294SYS             1101 0101 00 l:1 10 op1:3 crn:4 crm:4 op2:3 rt:5 op0=2
295SYS             1101 0101 00 l:1 11 op1:3 crn:4 crm:4 op2:3 rt:5 op0=3
296
297# Exception generation
298
299@i16            .... .... ... imm:16           ... .. &i
300SVC             1101 0100 000 ................ 000 01 @i16
301HVC             1101 0100 000 ................ 000 10 @i16
302SMC             1101 0100 000 ................ 000 11 @i16
303BRK             1101 0100 001 ................ 000 00 @i16
304HLT             1101 0100 010 ................ 000 00 @i16
305# These insns always UNDEF unless in halting debug state, which
306# we don't implement. So we don't need to decode them. The patterns
307# are listed here as documentation.
308# DCPS1         1101 0100 101 ................ 000 01 @i16
309# DCPS2         1101 0100 101 ................ 000 10 @i16
310# DCPS3         1101 0100 101 ................ 000 11 @i16
311
312### Loads and stores
313
314&stxr           rn rt rt2 rs sz lasr
315&stlr           rn rt sz lasr
316@stxr           sz:2 ...... ... rs:5 lasr:1 rt2:5 rn:5 rt:5 &stxr
317@stlr           sz:2 ...... ... ..... lasr:1 ..... rn:5 rt:5 &stlr
318%imm1_30_p2 30:1 !function=plus_2
319@stxp           .. ...... ... rs:5 lasr:1 rt2:5 rn:5 rt:5 &stxr sz=%imm1_30_p2
320STXR            .. 001000 000 ..... . ..... ..... ..... @stxr  # inc STLXR
321LDXR            .. 001000 010 ..... . ..... ..... ..... @stxr  # inc LDAXR
322STLR            .. 001000 100 11111 . 11111 ..... ..... @stlr  # inc STLLR
323LDAR            .. 001000 110 11111 . 11111 ..... ..... @stlr  # inc LDLAR
324
325STXP            1 . 001000 001 ..... . ..... ..... ..... @stxp # inc STLXP
326LDXP            1 . 001000 011 ..... . ..... ..... ..... @stxp # inc LDAXP
327
328# CASP, CASPA, CASPAL, CASPL (we don't decode the bits that determine
329# acquire/release semantics because QEMU's cmpxchg always has those)
330CASP            0 . 001000 0 - 1 rs:5 - 11111 rn:5 rt:5 sz=%imm1_30_p2
331# CAS, CASA, CASAL, CASL
332CAS             sz:2 001000 1 - 1 rs:5 - 11111 rn:5 rt:5
333
334&ldlit          rt imm sz sign
335@ldlit          .. ... . .. ................... rt:5 &ldlit imm=%imm19
336
337LD_lit          00 011 0 00 ................... ..... @ldlit sz=2 sign=0
338LD_lit          01 011 0 00 ................... ..... @ldlit sz=3 sign=0
339LD_lit          10 011 0 00 ................... ..... @ldlit sz=2 sign=1
340LD_lit_v        00 011 1 00 ................... ..... @ldlit sz=2 sign=0
341LD_lit_v        01 011 1 00 ................... ..... @ldlit sz=3 sign=0
342LD_lit_v        10 011 1 00 ................... ..... @ldlit sz=4 sign=0
343
344# PRFM
345NOP             11 011 0 00 ------------------- -----
346
347&ldstpair       rt2 rt rn imm sz sign w p
348@ldstpair       .. ... . ... . imm:s7 rt2:5 rn:5 rt:5 &ldstpair
349
350# STNP, LDNP: Signed offset, non-temporal hint. We don't emulate caches
351# so we ignore hints about data access patterns, and handle these like
352# plain signed offset.
353STP             00 101 0 000 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0
354LDP             00 101 0 000 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0
355STP             10 101 0 000 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0
356LDP             10 101 0 000 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0
357STP_v           00 101 1 000 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0
358LDP_v           00 101 1 000 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0
359STP_v           01 101 1 000 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0
360LDP_v           01 101 1 000 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0
361STP_v           10 101 1 000 0 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=0
362LDP_v           10 101 1 000 1 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=0
363
364# STP and LDP: post-indexed
365STP             00 101 0 001 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=1 w=1
366LDP             00 101 0 001 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=1 w=1
367LDP             01 101 0 001 1 ....... ..... ..... ..... @ldstpair sz=2 sign=1 p=1 w=1
368STP             10 101 0 001 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1
369LDP             10 101 0 001 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1
370STP_v           00 101 1 001 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=1 w=1
371LDP_v           00 101 1 001 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=1 w=1
372STP_v           01 101 1 001 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1
373LDP_v           01 101 1 001 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1
374STP_v           10 101 1 001 0 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=1 w=1
375LDP_v           10 101 1 001 1 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=1 w=1
376
377# STP and LDP: offset
378STP             00 101 0 010 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0
379LDP             00 101 0 010 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0
380LDP             01 101 0 010 1 ....... ..... ..... ..... @ldstpair sz=2 sign=1 p=0 w=0
381STP             10 101 0 010 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0
382LDP             10 101 0 010 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0
383STP_v           00 101 1 010 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0
384LDP_v           00 101 1 010 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=0
385STP_v           01 101 1 010 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0
386LDP_v           01 101 1 010 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0
387STP_v           10 101 1 010 0 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=0
388LDP_v           10 101 1 010 1 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=0
389
390# STP and LDP: pre-indexed
391STP             00 101 0 011 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=1
392LDP             00 101 0 011 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=1
393LDP             01 101 0 011 1 ....... ..... ..... ..... @ldstpair sz=2 sign=1 p=0 w=1
394STP             10 101 0 011 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1
395LDP             10 101 0 011 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1
396STP_v           00 101 1 011 0 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=1
397LDP_v           00 101 1 011 1 ....... ..... ..... ..... @ldstpair sz=2 sign=0 p=0 w=1
398STP_v           01 101 1 011 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1
399LDP_v           01 101 1 011 1 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1
400STP_v           10 101 1 011 0 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=1
401LDP_v           10 101 1 011 1 ....... ..... ..... ..... @ldstpair sz=4 sign=0 p=0 w=1
402
403# STGP: store tag and pair
404STGP            01 101 0 001 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=1 w=1
405STGP            01 101 0 010 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=0
406STGP            01 101 0 011 0 ....... ..... ..... ..... @ldstpair sz=3 sign=0 p=0 w=1
407
408# Load/store register (unscaled immediate)
409&ldst_imm       rt rn imm sz sign w p unpriv ext
410@ldst_imm       .. ... . .. .. . imm:s9 .. rn:5 rt:5 &ldst_imm unpriv=0 p=0 w=0
411@ldst_imm_pre   .. ... . .. .. . imm:s9 .. rn:5 rt:5 &ldst_imm unpriv=0 p=0 w=1
412@ldst_imm_post  .. ... . .. .. . imm:s9 .. rn:5 rt:5 &ldst_imm unpriv=0 p=1 w=1
413@ldst_imm_user  .. ... . .. .. . imm:s9 .. rn:5 rt:5 &ldst_imm unpriv=1 p=0 w=0
414
415STR_i           sz:2 111 0 00 00 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0
416LDR_i           00 111 0 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=1 sz=0
417LDR_i           01 111 0 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=1 sz=1
418LDR_i           10 111 0 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=1 sz=2
419LDR_i           11 111 0 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 sz=3
420LDR_i           00 111 0 00 10 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=0 sz=0
421LDR_i           01 111 0 00 10 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=0 sz=1
422LDR_i           10 111 0 00 10 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=0 sz=2
423LDR_i           00 111 0 00 11 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=1 sz=0
424LDR_i           01 111 0 00 11 0 ......... 00 ..... ..... @ldst_imm sign=1 ext=1 sz=1
425
426STR_i           sz:2 111 0 00 00 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0
427LDR_i           00 111 0 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=1 sz=0
428LDR_i           01 111 0 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=1 sz=1
429LDR_i           10 111 0 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=1 sz=2
430LDR_i           11 111 0 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 sz=3
431LDR_i           00 111 0 00 10 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=0 sz=0
432LDR_i           01 111 0 00 10 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=0 sz=1
433LDR_i           10 111 0 00 10 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=0 sz=2
434LDR_i           00 111 0 00 11 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=1 sz=0
435LDR_i           01 111 0 00 11 0 ......... 01 ..... ..... @ldst_imm_post sign=1 ext=1 sz=1
436
437STR_i           sz:2 111 0 00 00 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=0
438LDR_i           00 111 0 00 01 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=1 sz=0
439LDR_i           01 111 0 00 01 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=1 sz=1
440LDR_i           10 111 0 00 01 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=1 sz=2
441LDR_i           11 111 0 00 01 0 ......... 10 ..... ..... @ldst_imm_user sign=0 ext=0 sz=3
442LDR_i           00 111 0 00 10 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=0 sz=0
443LDR_i           01 111 0 00 10 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=0 sz=1
444LDR_i           10 111 0 00 10 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=0 sz=2
445LDR_i           00 111 0 00 11 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=1 sz=0
446LDR_i           01 111 0 00 11 0 ......... 10 ..... ..... @ldst_imm_user sign=1 ext=1 sz=1
447
448STR_i           sz:2 111 0 00 00 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0
449LDR_i           00 111 0 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=1 sz=0
450LDR_i           01 111 0 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=1 sz=1
451LDR_i           10 111 0 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=1 sz=2
452LDR_i           11 111 0 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 sz=3
453LDR_i           00 111 0 00 10 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=0 sz=0
454LDR_i           01 111 0 00 10 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=0 sz=1
455LDR_i           10 111 0 00 10 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=0 sz=2
456LDR_i           00 111 0 00 11 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=1 sz=0
457LDR_i           01 111 0 00 11 0 ......... 11 ..... ..... @ldst_imm_pre sign=1 ext=1 sz=1
458
459# PRFM : prefetch memory: a no-op for QEMU
460NOP             11 111 0 00 10 0 --------- 00 ----- -----
461
462STR_v_i         sz:2 111 1 00 00 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0
463STR_v_i         00 111 1 00 10 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 sz=4
464LDR_v_i         sz:2 111 1 00 01 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0
465LDR_v_i         00 111 1 00 11 0 ......... 00 ..... ..... @ldst_imm sign=0 ext=0 sz=4
466
467STR_v_i         sz:2 111 1 00 00 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0
468STR_v_i         00 111 1 00 10 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 sz=4
469LDR_v_i         sz:2 111 1 00 01 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0
470LDR_v_i         00 111 1 00 11 0 ......... 01 ..... ..... @ldst_imm_post sign=0 ext=0 sz=4
471
472STR_v_i         sz:2 111 1 00 00 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0
473STR_v_i         00 111 1 00 10 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 sz=4
474LDR_v_i         sz:2 111 1 00 01 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0
475LDR_v_i         00 111 1 00 11 0 ......... 11 ..... ..... @ldst_imm_pre sign=0 ext=0 sz=4
476
477# Load/store with an unsigned 12 bit immediate, which is scaled by the
478# element size. The function gets the sz:imm and returns the scaled immediate.
479%uimm_scaled   10:12 sz:3 !function=uimm_scaled
480
481@ldst_uimm      .. ... . .. .. ............ rn:5 rt:5 &ldst_imm unpriv=0 p=0 w=0 imm=%uimm_scaled
482
483STR_i           sz:2 111 0 01 00 ............ ..... ..... @ldst_uimm sign=0 ext=0
484LDR_i           00 111 0 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=1 sz=0
485LDR_i           01 111 0 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=1 sz=1
486LDR_i           10 111 0 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=1 sz=2
487LDR_i           11 111 0 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=0 sz=3
488LDR_i           00 111 0 01 10 ............ ..... ..... @ldst_uimm sign=1 ext=0 sz=0
489LDR_i           01 111 0 01 10 ............ ..... ..... @ldst_uimm sign=1 ext=0 sz=1
490LDR_i           10 111 0 01 10 ............ ..... ..... @ldst_uimm sign=1 ext=0 sz=2
491LDR_i           00 111 0 01 11 ............ ..... ..... @ldst_uimm sign=1 ext=1 sz=0
492LDR_i           01 111 0 01 11 ............ ..... ..... @ldst_uimm sign=1 ext=1 sz=1
493
494# PRFM
495NOP             11 111 0 01 10 ------------ ----- -----
496
497STR_v_i         sz:2 111 1 01 00 ............ ..... ..... @ldst_uimm sign=0 ext=0
498STR_v_i         00 111 1 01 10 ............ ..... ..... @ldst_uimm sign=0 ext=0 sz=4
499LDR_v_i         sz:2 111 1 01 01 ............ ..... ..... @ldst_uimm sign=0 ext=0
500LDR_v_i         00 111 1 01 11 ............ ..... ..... @ldst_uimm sign=0 ext=0 sz=4
501
502# Load/store with register offset
503&ldst rm rn rt sign ext sz opt s
504@ldst           .. ... . .. .. . rm:5 opt:3 s:1 .. rn:5 rt:5 &ldst
505STR             sz:2 111 0 00 00 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0
506LDR             00 111 0 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=1 sz=0
507LDR             01 111 0 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=1 sz=1
508LDR             10 111 0 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=1 sz=2
509LDR             11 111 0 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 sz=3
510LDR             00 111 0 00 10 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=0 sz=0
511LDR             01 111 0 00 10 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=0 sz=1
512LDR             10 111 0 00 10 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=0 sz=2
513LDR             00 111 0 00 11 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=1 sz=0
514LDR             01 111 0 00 11 1 ..... ... . 10 ..... ..... @ldst sign=1 ext=1 sz=1
515
516# PRFM
517NOP             11 111 0 00 10 1 ----- -1- - 10 ----- -----
518
519STR_v           sz:2 111 1 00 00 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0
520STR_v           00 111 1 00 10 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 sz=4
521LDR_v           sz:2 111 1 00 01 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0
522LDR_v           00 111 1 00 11 1 ..... ... . 10 ..... ..... @ldst sign=0 ext=0 sz=4
523
524# Atomic memory operations
525&atomic         rs rn rt a r sz
526@atomic         sz:2 ... . .. a:1 r:1 . rs:5 . ... .. rn:5 rt:5 &atomic
527LDADD           .. 111 0 00 . . 1 ..... 0000 00 ..... ..... @atomic
528LDCLR           .. 111 0 00 . . 1 ..... 0001 00 ..... ..... @atomic
529LDEOR           .. 111 0 00 . . 1 ..... 0010 00 ..... ..... @atomic
530LDSET           .. 111 0 00 . . 1 ..... 0011 00 ..... ..... @atomic
531LDSMAX          .. 111 0 00 . . 1 ..... 0100 00 ..... ..... @atomic
532LDSMIN          .. 111 0 00 . . 1 ..... 0101 00 ..... ..... @atomic
533LDUMAX          .. 111 0 00 . . 1 ..... 0110 00 ..... ..... @atomic
534LDUMIN          .. 111 0 00 . . 1 ..... 0111 00 ..... ..... @atomic
535SWP             .. 111 0 00 . . 1 ..... 1000 00 ..... ..... @atomic
536
537LDAPR           sz:2 111 0 00 1 0 1 11111 1100 00 rn:5 rt:5
538
539# Load/store register (pointer authentication)
540
541# LDRA immediate is 10 bits signed and scaled, but the bits aren't all contiguous
542%ldra_imm       22:s1 12:9 !function=times_8
543
544LDRA            11 111 0 00 m:1 . 1 ......... w:1 1 rn:5 rt:5 imm=%ldra_imm
545
546&ldapr_stlr_i   rn rt imm sz sign ext
547@ldapr_stlr_i   .. ...... .. . imm:s9 .. rn:5 rt:5 &ldapr_stlr_i
548STLR_i          sz:2 011001 00 0 ......... 00 ..... ..... @ldapr_stlr_i sign=0 ext=0
549LDAPR_i         sz:2 011001 01 0 ......... 00 ..... ..... @ldapr_stlr_i sign=0 ext=0
550LDAPR_i         00 011001 10 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=0 sz=0
551LDAPR_i         01 011001 10 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=0 sz=1
552LDAPR_i         10 011001 10 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=0 sz=2
553LDAPR_i         00 011001 11 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=1 sz=0
554LDAPR_i         01 011001 11 0 ......... 00 ..... ..... @ldapr_stlr_i sign=1 ext=1 sz=1
555
556# Load/store multiple structures
557# The 4-bit opcode in [15:12] encodes repeat count and structure elements
558&ldst_mult      rm rn rt sz q p rpt selem
559@ldst_mult      . q:1 ...... p:1 . . rm:5 .... sz:2 rn:5 rt:5 &ldst_mult
560ST_mult         0 . 001100 . 0 0 ..... 0000 .. ..... ..... @ldst_mult rpt=1 selem=4
561ST_mult         0 . 001100 . 0 0 ..... 0010 .. ..... ..... @ldst_mult rpt=4 selem=1
562ST_mult         0 . 001100 . 0 0 ..... 0100 .. ..... ..... @ldst_mult rpt=1 selem=3
563ST_mult         0 . 001100 . 0 0 ..... 0110 .. ..... ..... @ldst_mult rpt=3 selem=1
564ST_mult         0 . 001100 . 0 0 ..... 0111 .. ..... ..... @ldst_mult rpt=1 selem=1
565ST_mult         0 . 001100 . 0 0 ..... 1000 .. ..... ..... @ldst_mult rpt=1 selem=2
566ST_mult         0 . 001100 . 0 0 ..... 1010 .. ..... ..... @ldst_mult rpt=2 selem=1
567
568LD_mult         0 . 001100 . 1 0 ..... 0000 .. ..... ..... @ldst_mult rpt=1 selem=4
569LD_mult         0 . 001100 . 1 0 ..... 0010 .. ..... ..... @ldst_mult rpt=4 selem=1
570LD_mult         0 . 001100 . 1 0 ..... 0100 .. ..... ..... @ldst_mult rpt=1 selem=3
571LD_mult         0 . 001100 . 1 0 ..... 0110 .. ..... ..... @ldst_mult rpt=3 selem=1
572LD_mult         0 . 001100 . 1 0 ..... 0111 .. ..... ..... @ldst_mult rpt=1 selem=1
573LD_mult         0 . 001100 . 1 0 ..... 1000 .. ..... ..... @ldst_mult rpt=1 selem=2
574LD_mult         0 . 001100 . 1 0 ..... 1010 .. ..... ..... @ldst_mult rpt=2 selem=1
575
576# Load/store single structure
577&ldst_single    rm rn rt p selem index scale
578
579%ldst_single_selem 13:1 21:1 !function=plus_1
580
581%ldst_single_index_b  30:1 10:3
582%ldst_single_index_h  30:1 11:2
583%ldst_single_index_s  30:1 12:1
584
585@ldst_single_b     .. ...... p:1 .. rm:5 ...... rn:5 rt:5 \
586                   &ldst_single scale=0 selem=%ldst_single_selem \
587                   index=%ldst_single_index_b
588@ldst_single_h     .. ...... p:1 .. rm:5 ...... rn:5 rt:5 \
589                   &ldst_single scale=1 selem=%ldst_single_selem \
590                   index=%ldst_single_index_h
591@ldst_single_s     .. ...... p:1 .. rm:5 ...... rn:5 rt:5 \
592                   &ldst_single scale=2 selem=%ldst_single_selem \
593                   index=%ldst_single_index_s
594@ldst_single_d     . index:1 ...... p:1 .. rm:5 ...... rn:5 rt:5 \
595                   &ldst_single scale=3 selem=%ldst_single_selem
596
597ST_single          0 . 001101 . 0 . ..... 00 . ... ..... .....  @ldst_single_b
598ST_single          0 . 001101 . 0 . ..... 01 . ..0 ..... .....  @ldst_single_h
599ST_single          0 . 001101 . 0 . ..... 10 . .00 ..... .....  @ldst_single_s
600ST_single          0 . 001101 . 0 . ..... 10 . 001 ..... .....  @ldst_single_d
601
602LD_single          0 . 001101 . 1 . ..... 00 . ... ..... .....  @ldst_single_b
603LD_single          0 . 001101 . 1 . ..... 01 . ..0 ..... .....  @ldst_single_h
604LD_single          0 . 001101 . 1 . ..... 10 . .00 ..... .....  @ldst_single_s
605LD_single          0 . 001101 . 1 . ..... 10 . 001 ..... .....  @ldst_single_d
606
607# Replicating load case
608LD_single_repl  0 q:1 001101 p:1 1 . rm:5 11 . 0 scale:2 rn:5 rt:5 selem=%ldst_single_selem
609
610%tag_offset     12:s9 !function=scale_by_log2_tag_granule
611&ldst_tag       rn rt imm p w
612@ldst_tag       ........ .. . ......... .. rn:5 rt:5 &ldst_tag imm=%tag_offset
613@ldst_tag_mult  ........ .. . 000000000 .. rn:5 rt:5 &ldst_tag imm=0
614
615STZGM           11011001 00 1 ......... 00 ..... ..... @ldst_tag_mult p=0 w=0
616STG             11011001 00 1 ......... 01 ..... ..... @ldst_tag p=1 w=1
617STG             11011001 00 1 ......... 10 ..... ..... @ldst_tag p=0 w=0
618STG             11011001 00 1 ......... 11 ..... ..... @ldst_tag p=0 w=1
619
620LDG             11011001 01 1 ......... 00 ..... ..... @ldst_tag p=0 w=0
621STZG            11011001 01 1 ......... 01 ..... ..... @ldst_tag p=1 w=1
622STZG            11011001 01 1 ......... 10 ..... ..... @ldst_tag p=0 w=0
623STZG            11011001 01 1 ......... 11 ..... ..... @ldst_tag p=0 w=1
624
625STGM            11011001 10 1 ......... 00 ..... ..... @ldst_tag_mult p=0 w=0
626ST2G            11011001 10 1 ......... 01 ..... ..... @ldst_tag p=1 w=1
627ST2G            11011001 10 1 ......... 10 ..... ..... @ldst_tag p=0 w=0
628ST2G            11011001 10 1 ......... 11 ..... ..... @ldst_tag p=0 w=1
629
630LDGM            11011001 11 1 ......... 00 ..... ..... @ldst_tag_mult p=0 w=0
631STZ2G           11011001 11 1 ......... 01 ..... ..... @ldst_tag p=1 w=1
632STZ2G           11011001 11 1 ......... 10 ..... ..... @ldst_tag p=0 w=0
633STZ2G           11011001 11 1 ......... 11 ..... ..... @ldst_tag p=0 w=1
634
635# Memory operations (memset, memcpy, memmove)
636# Each of these comes in a set of three, eg SETP (prologue), SETM (main),
637# SETE (epilogue), and each of those has different flavours to
638# indicate whether memory accesses should be unpriv or non-temporal.
639# We don't distinguish temporal and non-temporal accesses, but we
640# do need to report it in syndrome register values.
641
642# Memset
643&set rs rn rd unpriv nontemp
644# op2 bit 1 is nontemporal bit
645@set         .. ......... rs:5 .. nontemp:1 unpriv:1 .. rn:5 rd:5 &set
646
647SETP            00 011001110 ..... 00 . . 01 ..... ..... @set
648SETM            00 011001110 ..... 01 . . 01 ..... ..... @set
649SETE            00 011001110 ..... 10 . . 01 ..... ..... @set
650
651# Like SET, but also setting MTE tags
652SETGP           00 011101110 ..... 00 . . 01 ..... ..... @set
653SETGM           00 011101110 ..... 01 . . 01 ..... ..... @set
654SETGE           00 011101110 ..... 10 . . 01 ..... ..... @set
655
656# Memmove/Memcopy: the CPY insns allow overlapping src/dest and
657# copy in the correct direction; the CPYF insns always copy forwards.
658#
659# options has the nontemporal and unpriv bits for src and dest
660&cpy rs rn rd options
661@cpy            .. ... . ..... rs:5 options:4 .. rn:5 rd:5 &cpy
662
663CPYFP           00 011 0 01000 ..... .... 01 ..... ..... @cpy
664CPYFM           00 011 0 01010 ..... .... 01 ..... ..... @cpy
665CPYFE           00 011 0 01100 ..... .... 01 ..... ..... @cpy
666CPYP            00 011 1 01000 ..... .... 01 ..... ..... @cpy
667CPYM            00 011 1 01010 ..... .... 01 ..... ..... @cpy
668CPYE            00 011 1 01100 ..... .... 01 ..... ..... @cpy
669
670### Data Processing (register)
671
672# Data Processing (2-source)
673
674@rrr            . .......... rm:5 ...... rn:5 rd:5      &rrr
675@rrr_sf         sf:1 .......... rm:5 ...... rn:5 rd:5   &rrr_sf
676
677UDIV            . 00 11010110 ..... 00001 0 ..... ..... @rrr_sf
678SDIV            . 00 11010110 ..... 00001 1 ..... ..... @rrr_sf
679LSLV            . 00 11010110 ..... 00100 0 ..... ..... @rrr_sf
680LSRV            . 00 11010110 ..... 00100 1 ..... ..... @rrr_sf
681ASRV            . 00 11010110 ..... 00101 0 ..... ..... @rrr_sf
682RORV            . 00 11010110 ..... 00101 1 ..... ..... @rrr_sf
683
684CRC32           0 00 11010110 ..... 0100 00 ..... ..... @rrr_b
685CRC32           0 00 11010110 ..... 0100 01 ..... ..... @rrr_h
686CRC32           0 00 11010110 ..... 0100 10 ..... ..... @rrr_s
687CRC32           1 00 11010110 ..... 0100 11 ..... ..... @rrr_d
688
689CRC32C          0 00 11010110 ..... 0101 00 ..... ..... @rrr_b
690CRC32C          0 00 11010110 ..... 0101 01 ..... ..... @rrr_h
691CRC32C          0 00 11010110 ..... 0101 10 ..... ..... @rrr_s
692CRC32C          1 00 11010110 ..... 0101 11 ..... ..... @rrr_d
693
694SUBP            1 00 11010110 ..... 000000 ..... .....  @rrr
695SUBPS           1 01 11010110 ..... 000000 ..... .....  @rrr
696IRG             1 00 11010110 ..... 000100 ..... .....  @rrr
697GMI             1 00 11010110 ..... 000101 ..... .....  @rrr
698
699PACGA           1 00 11010110 ..... 001100 ..... .....  @rrr
700
701# Data Processing (1-source)
702
703@rr             . .......... ..... ...... rn:5 rd:5     &rr
704@rr_sf          sf:1 .......... ..... ...... rn:5 rd:5  &rr_sf
705
706RBIT            . 10 11010110 00000 000000 ..... .....  @rr_sf
707REV16           . 10 11010110 00000 000001 ..... .....  @rr_sf
708REV32           . 10 11010110 00000 000010 ..... .....  @rr_sf
709REV64           1 10 11010110 00000 000011 ..... .....  @rr
710
711CLZ             . 10 11010110 00000 000100 ..... .....  @rr_sf
712CLS             . 10 11010110 00000 000101 ..... .....  @rr_sf
713
714&pacaut         rd rn z
715@pacaut         . .. ........ ..... .. z:1 ... rn:5 rd:5  &pacaut
716
717PACIA           1 10 11010110 00001 00.000 ..... .....  @pacaut
718PACIB           1 10 11010110 00001 00.001 ..... .....  @pacaut
719PACDA           1 10 11010110 00001 00.010 ..... .....  @pacaut
720PACDB           1 10 11010110 00001 00.011 ..... .....  @pacaut
721
722AUTIA           1 10 11010110 00001 00.100 ..... .....  @pacaut
723AUTIB           1 10 11010110 00001 00.101 ..... .....  @pacaut
724AUTDA           1 10 11010110 00001 00.110 ..... .....  @pacaut
725AUTDB           1 10 11010110 00001 00.111 ..... .....  @pacaut
726
727XPACI           1 10 11010110 00001 010000 11111 rd:5
728XPACD           1 10 11010110 00001 010001 11111 rd:5
729
730# Logical (shifted reg)
731
732&logic_shift    rd rn rm sf sa st n
733@logic_shift    sf:1 .. ..... st:2 n:1 rm:5 sa:6 rn:5 rd:5  &logic_shift
734
735AND_r           . 00 01010 .. . ..... ...... ..... .....    @logic_shift
736ORR_r           . 01 01010 .. . ..... ...... ..... .....    @logic_shift
737EOR_r           . 10 01010 .. . ..... ...... ..... .....    @logic_shift
738ANDS_r          . 11 01010 .. . ..... ...... ..... .....    @logic_shift
739
740# Add/subtract (shifted reg)
741
742&addsub_shift    rd rn rm sf sa st
743@addsub_shift    sf:1 .. ..... st:2 . rm:5 sa:6 rn:5 rd:5   &addsub_shift
744
745ADD_r           . 00 01011 .. 0 ..... ...... ..... .....    @addsub_shift
746SUB_r           . 10 01011 .. 0 ..... ...... ..... .....    @addsub_shift
747ADDS_r          . 01 01011 .. 0 ..... ...... ..... .....    @addsub_shift
748SUBS_r          . 11 01011 .. 0 ..... ...... ..... .....    @addsub_shift
749
750# Add/subtract (extended reg)
751
752&addsub_ext     rd rn rm sf sa st
753@addsub_ext     sf:1 .. ........ rm:5 st:3 sa:3 rn:5 rd:5   &addsub_ext
754
755ADD_ext         . 00 01011001 ..... ... ... ..... .....     @addsub_ext
756SUB_ext         . 10 01011001 ..... ... ... ..... .....     @addsub_ext
757ADDS_ext        . 01 01011001 ..... ... ... ..... .....     @addsub_ext
758SUBS_ext        . 11 01011001 ..... ... ... ..... .....     @addsub_ext
759
760# Add/subtract (carry)
761
762ADC             . 00 11010000 ..... 000000 ..... .....  @rrr_sf
763ADCS            . 01 11010000 ..... 000000 ..... .....  @rrr_sf
764SBC             . 10 11010000 ..... 000000 ..... .....  @rrr_sf
765SBCS            . 11 11010000 ..... 000000 ..... .....  @rrr_sf
766
767# Rotate right into flags
768
769RMIF            1 01 11010000 imm:6 00001 rn:5 0 mask:4
770
771# Evaluate into flags
772
773SETF8           0 01 11010000 00000 000010 rn:5 01101
774SETF16          0 01 11010000 00000 010010 rn:5 01101
775
776# Conditional compare
777
778CCMP            sf:1 op:1 1 11010010 y:5 cond:4 imm:1 0 rn:5 0 nzcv:4
779
780# Conditional select
781
782CSEL            sf:1 else_inv:1 011010100 rm:5 cond:4 0 else_inc:1 rn:5 rd:5
783
784# Data Processing (3-source)
785
786&rrrr           rd rn rm ra
787@rrrr           . .. ........ rm:5 . ra:5 rn:5 rd:5     &rrrr
788
789MADD_w          0 00 11011000 ..... 0 ..... ..... ..... @rrrr
790MSUB_w          0 00 11011000 ..... 1 ..... ..... ..... @rrrr
791MADD_x          1 00 11011000 ..... 0 ..... ..... ..... @rrrr
792MSUB_x          1 00 11011000 ..... 1 ..... ..... ..... @rrrr
793
794SMADDL          1 00 11011001 ..... 0 ..... ..... ..... @rrrr
795SMSUBL          1 00 11011001 ..... 1 ..... ..... ..... @rrrr
796UMADDL          1 00 11011101 ..... 0 ..... ..... ..... @rrrr
797UMSUBL          1 00 11011101 ..... 1 ..... ..... ..... @rrrr
798
799SMULH           1 00 11011010 ..... 0 11111 ..... ..... @rrr
800UMULH           1 00 11011110 ..... 0 11111 ..... ..... @rrr
801
802### Cryptographic AES
803
804AESE            01001110 00 10100 00100 10 ..... .....  @r2r_q1e0
805AESD            01001110 00 10100 00101 10 ..... .....  @r2r_q1e0
806AESMC           01001110 00 10100 00110 10 ..... .....  @rr_q1e0
807AESIMC          01001110 00 10100 00111 10 ..... .....  @rr_q1e0
808
809### Cryptographic three-register SHA
810
811SHA1C           0101 1110 000 ..... 000000 ..... .....  @rrr_q1e0
812SHA1P           0101 1110 000 ..... 000100 ..... .....  @rrr_q1e0
813SHA1M           0101 1110 000 ..... 001000 ..... .....  @rrr_q1e0
814SHA1SU0         0101 1110 000 ..... 001100 ..... .....  @rrr_q1e0
815SHA256H         0101 1110 000 ..... 010000 ..... .....  @rrr_q1e0
816SHA256H2        0101 1110 000 ..... 010100 ..... .....  @rrr_q1e0
817SHA256SU1       0101 1110 000 ..... 011000 ..... .....  @rrr_q1e0
818
819### Cryptographic two-register SHA
820
821SHA1H           0101 1110 0010 1000 0000 10 ..... ..... @rr_q1e0
822SHA1SU1         0101 1110 0010 1000 0001 10 ..... ..... @rr_q1e0
823SHA256SU0       0101 1110 0010 1000 0010 10 ..... ..... @rr_q1e0
824
825### Cryptographic three-register SHA512
826
827SHA512H         1100 1110 011 ..... 100000 ..... .....  @rrr_q1e0
828SHA512H2        1100 1110 011 ..... 100001 ..... .....  @rrr_q1e0
829SHA512SU1       1100 1110 011 ..... 100010 ..... .....  @rrr_q1e0
830RAX1            1100 1110 011 ..... 100011 ..... .....  @rrr_q1e3
831SM3PARTW1       1100 1110 011 ..... 110000 ..... .....  @rrr_q1e0
832SM3PARTW2       1100 1110 011 ..... 110001 ..... .....  @rrr_q1e0
833SM4EKEY         1100 1110 011 ..... 110010 ..... .....  @rrr_q1e0
834
835### Cryptographic two-register SHA512
836
837SHA512SU0       1100 1110 110 00000 100000 ..... .....  @rr_q1e0
838SM4E            1100 1110 110 00000 100001 ..... .....  @r2r_q1e0
839
840### Cryptographic four-register
841
842EOR3            1100 1110 000 ..... 0 ..... ..... ..... @rrrr_q1e3
843BCAX            1100 1110 001 ..... 0 ..... ..... ..... @rrrr_q1e3
844SM3SS1          1100 1110 010 ..... 0 ..... ..... ..... @rrrr_q1e3
845
846### Cryptographic three-register, imm2
847
848&crypto3i       rd rn rm imm
849@crypto3i       ........ ... rm:5 .. imm:2 .. rn:5 rd:5 &crypto3i
850
851SM3TT1A         11001110 010 ..... 10 .. 00 ..... ..... @crypto3i
852SM3TT1B         11001110 010 ..... 10 .. 01 ..... ..... @crypto3i
853SM3TT2A         11001110 010 ..... 10 .. 10 ..... ..... @crypto3i
854SM3TT2B         11001110 010 ..... 10 .. 11 ..... ..... @crypto3i
855
856### Cryptographic XAR
857
858XAR             1100 1110 100 rm:5 imm:6 rn:5 rd:5
859
860### Advanced SIMD scalar copy
861
862DUP_element_s   0101 1110 000 imm:5 0 0000 1 rn:5 rd:5
863
864### Advanced SIMD copy
865
866DUP_element_v   0 q:1 00 1110 000 imm:5 0 0000 1 rn:5 rd:5
867DUP_general     0 q:1 00 1110 000 imm:5 0 0001 1 rn:5 rd:5
868INS_general     0 1   00 1110 000 imm:5 0 0011 1 rn:5 rd:5
869SMOV            0 q:1 00 1110 000 imm:5 0 0101 1 rn:5 rd:5
870UMOV            0 q:1 00 1110 000 imm:5 0 0111 1 rn:5 rd:5
871INS_element     0 1   10 1110 000 di:5  0 si:4 1 rn:5 rd:5
872
873### Advanced SIMD scalar three same
874
875FADD_s          0001 1110 ..1 ..... 0010 10 ..... ..... @rrr_hsd
876FSUB_s          0001 1110 ..1 ..... 0011 10 ..... ..... @rrr_hsd
877FDIV_s          0001 1110 ..1 ..... 0001 10 ..... ..... @rrr_hsd
878FMUL_s          0001 1110 ..1 ..... 0000 10 ..... ..... @rrr_hsd
879FNMUL_s         0001 1110 ..1 ..... 1000 10 ..... ..... @rrr_hsd
880
881FMAX_s          0001 1110 ..1 ..... 0100 10 ..... ..... @rrr_hsd
882FMIN_s          0001 1110 ..1 ..... 0101 10 ..... ..... @rrr_hsd
883FMAXNM_s        0001 1110 ..1 ..... 0110 10 ..... ..... @rrr_hsd
884FMINNM_s        0001 1110 ..1 ..... 0111 10 ..... ..... @rrr_hsd
885
886FMULX_s         0101 1110 010 ..... 00011 1 ..... ..... @rrr_h
887FMULX_s         0101 1110 0.1 ..... 11011 1 ..... ..... @rrr_sd
888
889FCMEQ_s         0101 1110 010 ..... 00100 1 ..... ..... @rrr_h
890FCMEQ_s         0101 1110 0.1 ..... 11100 1 ..... ..... @rrr_sd
891
892FCMGE_s         0111 1110 010 ..... 00100 1 ..... ..... @rrr_h
893FCMGE_s         0111 1110 0.1 ..... 11100 1 ..... ..... @rrr_sd
894
895FCMGT_s         0111 1110 110 ..... 00100 1 ..... ..... @rrr_h
896FCMGT_s         0111 1110 1.1 ..... 11100 1 ..... ..... @rrr_sd
897
898FACGE_s         0111 1110 010 ..... 00101 1 ..... ..... @rrr_h
899FACGE_s         0111 1110 0.1 ..... 11101 1 ..... ..... @rrr_sd
900
901FACGT_s         0111 1110 110 ..... 00101 1 ..... ..... @rrr_h
902FACGT_s         0111 1110 1.1 ..... 11101 1 ..... ..... @rrr_sd
903
904FABD_s          0111 1110 110 ..... 00010 1 ..... ..... @rrr_h
905FABD_s          0111 1110 1.1 ..... 11010 1 ..... ..... @rrr_sd
906
907FRECPS_s        0101 1110 010 ..... 00111 1 ..... ..... @rrr_h
908FRECPS_s        0101 1110 0.1 ..... 11111 1 ..... ..... @rrr_sd
909
910FRSQRTS_s       0101 1110 110 ..... 00111 1 ..... ..... @rrr_h
911FRSQRTS_s       0101 1110 1.1 ..... 11111 1 ..... ..... @rrr_sd
912
913SQADD_s         0101 1110 ..1 ..... 00001 1 ..... ..... @rrr_e
914UQADD_s         0111 1110 ..1 ..... 00001 1 ..... ..... @rrr_e
915SQSUB_s         0101 1110 ..1 ..... 00101 1 ..... ..... @rrr_e
916UQSUB_s         0111 1110 ..1 ..... 00101 1 ..... ..... @rrr_e
917
918SUQADD_s        0101 1110 ..1 00000 00111 0 ..... ..... @r2r_e
919USQADD_s        0111 1110 ..1 00000 00111 0 ..... ..... @r2r_e
920
921SSHL_s          0101 1110 111 ..... 01000 1 ..... ..... @rrr_d
922USHL_s          0111 1110 111 ..... 01000 1 ..... ..... @rrr_d
923SRSHL_s         0101 1110 111 ..... 01010 1 ..... ..... @rrr_d
924URSHL_s         0111 1110 111 ..... 01010 1 ..... ..... @rrr_d
925SQSHL_s         0101 1110 ..1 ..... 01001 1 ..... ..... @rrr_e
926UQSHL_s         0111 1110 ..1 ..... 01001 1 ..... ..... @rrr_e
927SQRSHL_s        0101 1110 ..1 ..... 01011 1 ..... ..... @rrr_e
928UQRSHL_s        0111 1110 ..1 ..... 01011 1 ..... ..... @rrr_e
929
930ADD_s           0101 1110 111 ..... 10000 1 ..... ..... @rrr_d
931SUB_s           0111 1110 111 ..... 10000 1 ..... ..... @rrr_d
932CMGT_s          0101 1110 111 ..... 00110 1 ..... ..... @rrr_d
933CMHI_s          0111 1110 111 ..... 00110 1 ..... ..... @rrr_d
934CMGE_s          0101 1110 111 ..... 00111 1 ..... ..... @rrr_d
935CMHS_s          0111 1110 111 ..... 00111 1 ..... ..... @rrr_d
936CMTST_s         0101 1110 111 ..... 10001 1 ..... ..... @rrr_d
937CMEQ_s          0111 1110 111 ..... 10001 1 ..... ..... @rrr_d
938
939SQDMULH_s       0101 1110 ..1 ..... 10110 1 ..... ..... @rrr_e
940SQRDMULH_s      0111 1110 ..1 ..... 10110 1 ..... ..... @rrr_e
941SQRDMLAH_s      0111 1110 ..0 ..... 10000 1 ..... ..... @rrr_e
942SQRDMLSH_s      0111 1110 ..0 ..... 10001 1 ..... ..... @rrr_e
943
944# Decode scalar x scalar as scalar x indexed, with index 0.
945SQDMULL_si      0101 1110 011 rm:5  11010 0 rn:5  rd:5  &rrx_e idx=0 esz=1
946SQDMULL_si      0101 1110 101 rm:5  11010 0 rn:5  rd:5  &rrx_e idx=0 esz=2
947SQDMLAL_si      0101 1110 011 rm:5  10010 0 rn:5  rd:5  &rrx_e idx=0 esz=1
948SQDMLAL_si      0101 1110 101 rm:5  10010 0 rn:5  rd:5  &rrx_e idx=0 esz=2
949SQDMLSL_si      0101 1110 011 rm:5  10110 0 rn:5  rd:5  &rrx_e idx=0 esz=1
950SQDMLSL_si      0101 1110 101 rm:5  10110 0 rn:5  rd:5  &rrx_e idx=0 esz=2
951
952### Advanced SIMD scalar pairwise
953
954FADDP_s         0101 1110 0011 0000 1101 10 ..... ..... @rr_h
955FADDP_s         0111 1110 0.11 0000 1101 10 ..... ..... @rr_sd
956
957FMAXP_s         0101 1110 0011 0000 1111 10 ..... ..... @rr_h
958FMAXP_s         0111 1110 0.11 0000 1111 10 ..... ..... @rr_sd
959
960FMINP_s         0101 1110 1011 0000 1111 10 ..... ..... @rr_h
961FMINP_s         0111 1110 1.11 0000 1111 10 ..... ..... @rr_sd
962
963FMAXNMP_s       0101 1110 0011 0000 1100 10 ..... ..... @rr_h
964FMAXNMP_s       0111 1110 0.11 0000 1100 10 ..... ..... @rr_sd
965
966FMINNMP_s       0101 1110 1011 0000 1100 10 ..... ..... @rr_h
967FMINNMP_s       0111 1110 1.11 0000 1100 10 ..... ..... @rr_sd
968
969ADDP_s          0101 1110 1111 0001 1011 10 ..... ..... @rr_d
970
971### Advanced SIMD three same
972
973FADD_v          0.00 1110 010 ..... 00010 1 ..... ..... @qrrr_h
974FADD_v          0.00 1110 0.1 ..... 11010 1 ..... ..... @qrrr_sd
975
976FSUB_v          0.00 1110 110 ..... 00010 1 ..... ..... @qrrr_h
977FSUB_v          0.00 1110 1.1 ..... 11010 1 ..... ..... @qrrr_sd
978
979FDIV_v          0.10 1110 010 ..... 00111 1 ..... ..... @qrrr_h
980FDIV_v          0.10 1110 0.1 ..... 11111 1 ..... ..... @qrrr_sd
981
982FMUL_v          0.10 1110 010 ..... 00011 1 ..... ..... @qrrr_h
983FMUL_v          0.10 1110 0.1 ..... 11011 1 ..... ..... @qrrr_sd
984
985FMAX_v          0.00 1110 010 ..... 00110 1 ..... ..... @qrrr_h
986FMAX_v          0.00 1110 0.1 ..... 11110 1 ..... ..... @qrrr_sd
987
988FMIN_v          0.00 1110 110 ..... 00110 1 ..... ..... @qrrr_h
989FMIN_v          0.00 1110 1.1 ..... 11110 1 ..... ..... @qrrr_sd
990
991FMAXNM_v        0.00 1110 010 ..... 00000 1 ..... ..... @qrrr_h
992FMAXNM_v        0.00 1110 0.1 ..... 11000 1 ..... ..... @qrrr_sd
993
994FMINNM_v        0.00 1110 110 ..... 00000 1 ..... ..... @qrrr_h
995FMINNM_v        0.00 1110 1.1 ..... 11000 1 ..... ..... @qrrr_sd
996
997FMULX_v         0.00 1110 010 ..... 00011 1 ..... ..... @qrrr_h
998FMULX_v         0.00 1110 0.1 ..... 11011 1 ..... ..... @qrrr_sd
999
1000FMLA_v          0.00 1110 010 ..... 00001 1 ..... ..... @qrrr_h
1001FMLA_v          0.00 1110 0.1 ..... 11001 1 ..... ..... @qrrr_sd
1002
1003FMLS_v          0.00 1110 110 ..... 00001 1 ..... ..... @qrrr_h
1004FMLS_v          0.00 1110 1.1 ..... 11001 1 ..... ..... @qrrr_sd
1005
1006FMLAL_v         0.00 1110 001 ..... 11101 1 ..... ..... @qrrr_h
1007FMLSL_v         0.00 1110 101 ..... 11101 1 ..... ..... @qrrr_h
1008FMLAL2_v        0.10 1110 001 ..... 11001 1 ..... ..... @qrrr_h
1009FMLSL2_v        0.10 1110 101 ..... 11001 1 ..... ..... @qrrr_h
1010
1011FCMEQ_v         0.00 1110 010 ..... 00100 1 ..... ..... @qrrr_h
1012FCMEQ_v         0.00 1110 0.1 ..... 11100 1 ..... ..... @qrrr_sd
1013
1014FCMGE_v         0.10 1110 010 ..... 00100 1 ..... ..... @qrrr_h
1015FCMGE_v         0.10 1110 0.1 ..... 11100 1 ..... ..... @qrrr_sd
1016
1017FCMGT_v         0.10 1110 110 ..... 00100 1 ..... ..... @qrrr_h
1018FCMGT_v         0.10 1110 1.1 ..... 11100 1 ..... ..... @qrrr_sd
1019
1020FACGE_v         0.10 1110 010 ..... 00101 1 ..... ..... @qrrr_h
1021FACGE_v         0.10 1110 0.1 ..... 11101 1 ..... ..... @qrrr_sd
1022
1023FACGT_v         0.10 1110 110 ..... 00101 1 ..... ..... @qrrr_h
1024FACGT_v         0.10 1110 1.1 ..... 11101 1 ..... ..... @qrrr_sd
1025
1026FABD_v          0.10 1110 110 ..... 00010 1 ..... ..... @qrrr_h
1027FABD_v          0.10 1110 1.1 ..... 11010 1 ..... ..... @qrrr_sd
1028
1029FRECPS_v        0.00 1110 010 ..... 00111 1 ..... ..... @qrrr_h
1030FRECPS_v        0.00 1110 0.1 ..... 11111 1 ..... ..... @qrrr_sd
1031
1032FRSQRTS_v       0.00 1110 110 ..... 00111 1 ..... ..... @qrrr_h
1033FRSQRTS_v       0.00 1110 1.1 ..... 11111 1 ..... ..... @qrrr_sd
1034
1035FADDP_v         0.10 1110 010 ..... 00010 1 ..... ..... @qrrr_h
1036FADDP_v         0.10 1110 0.1 ..... 11010 1 ..... ..... @qrrr_sd
1037
1038FMAXP_v         0.10 1110 010 ..... 00110 1 ..... ..... @qrrr_h
1039FMAXP_v         0.10 1110 0.1 ..... 11110 1 ..... ..... @qrrr_sd
1040
1041FMINP_v         0.10 1110 110 ..... 00110 1 ..... ..... @qrrr_h
1042FMINP_v         0.10 1110 1.1 ..... 11110 1 ..... ..... @qrrr_sd
1043
1044FMAXNMP_v       0.10 1110 010 ..... 00000 1 ..... ..... @qrrr_h
1045FMAXNMP_v       0.10 1110 0.1 ..... 11000 1 ..... ..... @qrrr_sd
1046
1047FMINNMP_v       0.10 1110 110 ..... 00000 1 ..... ..... @qrrr_h
1048FMINNMP_v       0.10 1110 1.1 ..... 11000 1 ..... ..... @qrrr_sd
1049
1050ADDP_v          0.00 1110 ..1 ..... 10111 1 ..... ..... @qrrr_e
1051SMAXP_v         0.00 1110 ..1 ..... 10100 1 ..... ..... @qrrr_e
1052SMINP_v         0.00 1110 ..1 ..... 10101 1 ..... ..... @qrrr_e
1053UMAXP_v         0.10 1110 ..1 ..... 10100 1 ..... ..... @qrrr_e
1054UMINP_v         0.10 1110 ..1 ..... 10101 1 ..... ..... @qrrr_e
1055
1056AND_v           0.00 1110 001 ..... 00011 1 ..... ..... @qrrr_b
1057BIC_v           0.00 1110 011 ..... 00011 1 ..... ..... @qrrr_b
1058ORR_v           0.00 1110 101 ..... 00011 1 ..... ..... @qrrr_b
1059ORN_v           0.00 1110 111 ..... 00011 1 ..... ..... @qrrr_b
1060EOR_v           0.10 1110 001 ..... 00011 1 ..... ..... @qrrr_b
1061BSL_v           0.10 1110 011 ..... 00011 1 ..... ..... @qrrr_b
1062BIT_v           0.10 1110 101 ..... 00011 1 ..... ..... @qrrr_b
1063BIF_v           0.10 1110 111 ..... 00011 1 ..... ..... @qrrr_b
1064
1065SQADD_v         0.00 1110 ..1 ..... 00001 1 ..... ..... @qrrr_e
1066UQADD_v         0.10 1110 ..1 ..... 00001 1 ..... ..... @qrrr_e
1067SQSUB_v         0.00 1110 ..1 ..... 00101 1 ..... ..... @qrrr_e
1068UQSUB_v         0.10 1110 ..1 ..... 00101 1 ..... ..... @qrrr_e
1069
1070SUQADD_v        0.00 1110 ..1 00000 00111 0 ..... ..... @qr2r_e
1071USQADD_v        0.10 1110 ..1 00000 00111 0 ..... ..... @qr2r_e
1072
1073SSHL_v          0.00 1110 ..1 ..... 01000 1 ..... ..... @qrrr_e
1074USHL_v          0.10 1110 ..1 ..... 01000 1 ..... ..... @qrrr_e
1075SRSHL_v         0.00 1110 ..1 ..... 01010 1 ..... ..... @qrrr_e
1076URSHL_v         0.10 1110 ..1 ..... 01010 1 ..... ..... @qrrr_e
1077SQSHL_v         0.00 1110 ..1 ..... 01001 1 ..... ..... @qrrr_e
1078UQSHL_v         0.10 1110 ..1 ..... 01001 1 ..... ..... @qrrr_e
1079SQRSHL_v        0.00 1110 ..1 ..... 01011 1 ..... ..... @qrrr_e
1080UQRSHL_v        0.10 1110 ..1 ..... 01011 1 ..... ..... @qrrr_e
1081
1082ADD_v           0.00 1110 ..1 ..... 10000 1 ..... ..... @qrrr_e
1083SUB_v           0.10 1110 ..1 ..... 10000 1 ..... ..... @qrrr_e
1084CMGT_v          0.00 1110 ..1 ..... 00110 1 ..... ..... @qrrr_e
1085CMHI_v          0.10 1110 ..1 ..... 00110 1 ..... ..... @qrrr_e
1086CMGE_v          0.00 1110 ..1 ..... 00111 1 ..... ..... @qrrr_e
1087CMHS_v          0.10 1110 ..1 ..... 00111 1 ..... ..... @qrrr_e
1088CMTST_v         0.00 1110 ..1 ..... 10001 1 ..... ..... @qrrr_e
1089CMEQ_v          0.10 1110 ..1 ..... 10001 1 ..... ..... @qrrr_e
1090SHADD_v         0.00 1110 ..1 ..... 00000 1 ..... ..... @qrrr_e
1091UHADD_v         0.10 1110 ..1 ..... 00000 1 ..... ..... @qrrr_e
1092SHSUB_v         0.00 1110 ..1 ..... 00100 1 ..... ..... @qrrr_e
1093UHSUB_v         0.10 1110 ..1 ..... 00100 1 ..... ..... @qrrr_e
1094SRHADD_v        0.00 1110 ..1 ..... 00010 1 ..... ..... @qrrr_e
1095URHADD_v        0.10 1110 ..1 ..... 00010 1 ..... ..... @qrrr_e
1096SMAX_v          0.00 1110 ..1 ..... 01100 1 ..... ..... @qrrr_e
1097UMAX_v          0.10 1110 ..1 ..... 01100 1 ..... ..... @qrrr_e
1098SMIN_v          0.00 1110 ..1 ..... 01101 1 ..... ..... @qrrr_e
1099UMIN_v          0.10 1110 ..1 ..... 01101 1 ..... ..... @qrrr_e
1100SABD_v          0.00 1110 ..1 ..... 01110 1 ..... ..... @qrrr_e
1101UABD_v          0.10 1110 ..1 ..... 01110 1 ..... ..... @qrrr_e
1102SABA_v          0.00 1110 ..1 ..... 01111 1 ..... ..... @qrrr_e
1103UABA_v          0.10 1110 ..1 ..... 01111 1 ..... ..... @qrrr_e
1104MUL_v           0.00 1110 ..1 ..... 10011 1 ..... ..... @qrrr_e
1105PMUL_v          0.10 1110 001 ..... 10011 1 ..... ..... @qrrr_b
1106MLA_v           0.00 1110 ..1 ..... 10010 1 ..... ..... @qrrr_e
1107MLS_v           0.10 1110 ..1 ..... 10010 1 ..... ..... @qrrr_e
1108
1109SQDMULH_v       0.00 1110 ..1 ..... 10110 1 ..... ..... @qrrr_e
1110SQRDMULH_v      0.10 1110 ..1 ..... 10110 1 ..... ..... @qrrr_e
1111SQRDMLAH_v      0.10 1110 ..0 ..... 10000 1 ..... ..... @qrrr_e
1112SQRDMLSH_v      0.10 1110 ..0 ..... 10001 1 ..... ..... @qrrr_e
1113
1114SDOT_v          0.00 1110 100 ..... 10010 1 ..... ..... @qrrr_s
1115UDOT_v          0.10 1110 100 ..... 10010 1 ..... ..... @qrrr_s
1116USDOT_v         0.00 1110 100 ..... 10011 1 ..... ..... @qrrr_s
1117BFDOT_v         0.10 1110 010 ..... 11111 1 ..... ..... @qrrr_s
1118BFMLAL_v        0.10 1110 110 ..... 11111 1 ..... ..... @qrrr_h
1119BFMMLA          0110 1110 010 ..... 11101 1 ..... ..... @rrr_q1e0
1120SMMLA           0100 1110 100 ..... 10100 1 ..... ..... @rrr_q1e0
1121UMMLA           0110 1110 100 ..... 10100 1 ..... ..... @rrr_q1e0
1122USMMLA          0100 1110 100 ..... 10101 1 ..... ..... @rrr_q1e0
1123
1124FCADD_90        0.10 1110 ..0 ..... 11100 1 ..... ..... @qrrr_e
1125FCADD_270       0.10 1110 ..0 ..... 11110 1 ..... ..... @qrrr_e
1126
1127FCMLA_v         0 q:1 10 1110 esz:2 0 rm:5 110 rot:2 1 rn:5 rd:5
1128
1129SMULL_v         0.00 1110 ..1 ..... 11000 0 ..... ..... @qrrr_e
1130UMULL_v         0.10 1110 ..1 ..... 11000 0 ..... ..... @qrrr_e
1131SMLAL_v         0.00 1110 ..1 ..... 10000 0 ..... ..... @qrrr_e
1132UMLAL_v         0.10 1110 ..1 ..... 10000 0 ..... ..... @qrrr_e
1133SMLSL_v         0.00 1110 ..1 ..... 10100 0 ..... ..... @qrrr_e
1134UMLSL_v         0.10 1110 ..1 ..... 10100 0 ..... ..... @qrrr_e
1135
1136SADDL_v         0.00 1110 ..1 ..... 00000 0 ..... ..... @qrrr_e
1137UADDL_v         0.10 1110 ..1 ..... 00000 0 ..... ..... @qrrr_e
1138SSUBL_v         0.00 1110 ..1 ..... 00100 0 ..... ..... @qrrr_e
1139USUBL_v         0.10 1110 ..1 ..... 00100 0 ..... ..... @qrrr_e
1140SABAL_v         0.00 1110 ..1 ..... 01010 0 ..... ..... @qrrr_e
1141UABAL_v         0.10 1110 ..1 ..... 01010 0 ..... ..... @qrrr_e
1142SABDL_v         0.00 1110 ..1 ..... 01110 0 ..... ..... @qrrr_e
1143UABDL_v         0.10 1110 ..1 ..... 01110 0 ..... ..... @qrrr_e
1144
1145SQDMULL_v       0.00 1110 011 ..... 11010 0 ..... ..... @qrrr_h
1146SQDMULL_v       0.00 1110 101 ..... 11010 0 ..... ..... @qrrr_s
1147SQDMLAL_v       0.00 1110 011 ..... 10010 0 ..... ..... @qrrr_h
1148SQDMLAL_v       0.00 1110 101 ..... 10010 0 ..... ..... @qrrr_s
1149SQDMLSL_v       0.00 1110 011 ..... 10110 0 ..... ..... @qrrr_h
1150SQDMLSL_v       0.00 1110 101 ..... 10110 0 ..... ..... @qrrr_s
1151
1152SADDW           0.00 1110 ..1 ..... 00010 0 ..... ..... @qrrr_e
1153UADDW           0.10 1110 ..1 ..... 00010 0 ..... ..... @qrrr_e
1154SSUBW           0.00 1110 ..1 ..... 00110 0 ..... ..... @qrrr_e
1155USUBW           0.10 1110 ..1 ..... 00110 0 ..... ..... @qrrr_e
1156
1157ADDHN           0.00 1110 ..1 ..... 01000 0 ..... ..... @qrrr_e
1158RADDHN          0.10 1110 ..1 ..... 01000 0 ..... ..... @qrrr_e
1159SUBHN           0.00 1110 ..1 ..... 01100 0 ..... ..... @qrrr_e
1160RSUBHN          0.10 1110 ..1 ..... 01100 0 ..... ..... @qrrr_e
1161
1162PMULL_p8        0.00 1110 001 ..... 11100 0 ..... ..... @qrrr_b
1163PMULL_p64       0.00 1110 111 ..... 11100 0 ..... ..... @qrrr_b
1164
1165### Advanced SIMD scalar x indexed element
1166
1167FMUL_si         0101 1111 00 .. .... 1001 . 0 ..... .....   @rrx_h
1168FMUL_si         0101 1111 10 . ..... 1001 . 0 ..... .....   @rrx_s
1169FMUL_si         0101 1111 11 0 ..... 1001 . 0 ..... .....   @rrx_d
1170
1171FMLA_si         0101 1111 00 .. .... 0001 . 0 ..... .....   @rrx_h
1172FMLA_si         0101 1111 10 .. .... 0001 . 0 ..... .....   @rrx_s
1173FMLA_si         0101 1111 11 0. .... 0001 . 0 ..... .....   @rrx_d
1174
1175FMLS_si         0101 1111 00 .. .... 0101 . 0 ..... .....   @rrx_h
1176FMLS_si         0101 1111 10 .. .... 0101 . 0 ..... .....   @rrx_s
1177FMLS_si         0101 1111 11 0. .... 0101 . 0 ..... .....   @rrx_d
1178
1179FMULX_si        0111 1111 00 .. .... 1001 . 0 ..... .....   @rrx_h
1180FMULX_si        0111 1111 10 . ..... 1001 . 0 ..... .....   @rrx_s
1181FMULX_si        0111 1111 11 0 ..... 1001 . 0 ..... .....   @rrx_d
1182
1183SQDMULH_si      0101 1111 01 .. .... 1100 . 0 ..... .....   @rrx_h
1184SQDMULH_si      0101 1111 10 .. .... 1100 . 0 ..... .....   @rrx_s
1185
1186SQRDMULH_si     0101 1111 01 .. .... 1101 . 0 ..... .....   @rrx_h
1187SQRDMULH_si     0101 1111 10 . ..... 1101 . 0 ..... .....   @rrx_s
1188
1189SQRDMLAH_si     0111 1111 01 .. .... 1101 . 0 ..... .....   @rrx_h
1190SQRDMLAH_si     0111 1111 10 .. .... 1101 . 0 ..... .....   @rrx_s
1191
1192SQRDMLSH_si     0111 1111 01 .. .... 1111 . 0 ..... .....   @rrx_h
1193SQRDMLSH_si     0111 1111 10 .. .... 1111 . 0 ..... .....   @rrx_s
1194
1195SQDMULL_si      0101 1111 01 .. .... 1011 . 0 ..... .....   @rrx_h
1196SQDMULL_si      0101 1111 10 . ..... 1011 . 0 ..... .....   @rrx_s
1197
1198SQDMLAL_si      0101 1111 01 .. .... 0011 . 0 ..... .....   @rrx_h
1199SQDMLAL_si      0101 1111 10 . ..... 0011 . 0 ..... .....   @rrx_s
1200
1201SQDMLSL_si      0101 1111 01 .. .... 0111 . 0 ..... .....   @rrx_h
1202SQDMLSL_si      0101 1111 10 . ..... 0111 . 0 ..... .....   @rrx_s
1203
1204### Advanced SIMD vector x indexed element
1205
1206FMUL_vi         0.00 1111 00 .. .... 1001 . 0 ..... .....   @qrrx_h
1207FMUL_vi         0.00 1111 10 . ..... 1001 . 0 ..... .....   @qrrx_s
1208FMUL_vi         0.00 1111 11 0 ..... 1001 . 0 ..... .....   @qrrx_d
1209
1210FMLA_vi         0.00 1111 00 .. .... 0001 . 0 ..... .....   @qrrx_h
1211FMLA_vi         0.00 1111 10 . ..... 0001 . 0 ..... .....   @qrrx_s
1212FMLA_vi         0.00 1111 11 0 ..... 0001 . 0 ..... .....   @qrrx_d
1213
1214FMLS_vi         0.00 1111 00 .. .... 0101 . 0 ..... .....   @qrrx_h
1215FMLS_vi         0.00 1111 10 . ..... 0101 . 0 ..... .....   @qrrx_s
1216FMLS_vi         0.00 1111 11 0 ..... 0101 . 0 ..... .....   @qrrx_d
1217
1218FMULX_vi        0.10 1111 00 .. .... 1001 . 0 ..... .....   @qrrx_h
1219FMULX_vi        0.10 1111 10 . ..... 1001 . 0 ..... .....   @qrrx_s
1220FMULX_vi        0.10 1111 11 0 ..... 1001 . 0 ..... .....   @qrrx_d
1221
1222FMLAL_vi        0.00 1111 10 .. .... 0000 . 0 ..... .....   @qrrx_h
1223FMLSL_vi        0.00 1111 10 .. .... 0100 . 0 ..... .....   @qrrx_h
1224FMLAL2_vi       0.10 1111 10 .. .... 1000 . 0 ..... .....   @qrrx_h
1225FMLSL2_vi       0.10 1111 10 .. .... 1100 . 0 ..... .....   @qrrx_h
1226
1227MUL_vi          0.00 1111 01 .. .... 1000 . 0 ..... .....   @qrrx_h
1228MUL_vi          0.00 1111 10 . ..... 1000 . 0 ..... .....   @qrrx_s
1229
1230MLA_vi          0.10 1111 01 .. .... 0000 . 0 ..... .....   @qrrx_h
1231MLA_vi          0.10 1111 10 . ..... 0000 . 0 ..... .....   @qrrx_s
1232
1233MLS_vi          0.10 1111 01 .. .... 0100 . 0 ..... .....   @qrrx_h
1234MLS_vi          0.10 1111 10 . ..... 0100 . 0 ..... .....   @qrrx_s
1235
1236SQDMULH_vi      0.00 1111 01 .. .... 1100 . 0 ..... .....   @qrrx_h
1237SQDMULH_vi      0.00 1111 10 . ..... 1100 . 0 ..... .....   @qrrx_s
1238
1239SQRDMULH_vi     0.00 1111 01 .. .... 1101 . 0 ..... .....   @qrrx_h
1240SQRDMULH_vi     0.00 1111 10 . ..... 1101 . 0 ..... .....   @qrrx_s
1241
1242SQRDMLAH_vi     0.10 1111 01 .. .... 1101 . 0 ..... .....   @qrrx_h
1243SQRDMLAH_vi     0.10 1111 10 .. .... 1101 . 0 ..... .....   @qrrx_s
1244
1245SQRDMLSH_vi     0.10 1111 01 .. .... 1111 . 0 ..... .....   @qrrx_h
1246SQRDMLSH_vi     0.10 1111 10 .. .... 1111 . 0 ..... .....   @qrrx_s
1247
1248SDOT_vi         0.00 1111 10 .. .... 1110 . 0 ..... .....   @qrrx_s
1249UDOT_vi         0.10 1111 10 .. .... 1110 . 0 ..... .....   @qrrx_s
1250SUDOT_vi        0.00 1111 00 .. .... 1111 . 0 ..... .....   @qrrx_s
1251USDOT_vi        0.00 1111 10 .. .... 1111 . 0 ..... .....   @qrrx_s
1252BFDOT_vi        0.00 1111 01 .. .... 1111 . 0 ..... .....   @qrrx_s
1253BFMLAL_vi       0.00 1111 11 .. .... 1111 . 0 ..... .....   @qrrx_h
1254
1255FCMLA_vi        0 0 10 1111 01 idx:1 rm:5 0 rot:2 1 0 0 rn:5 rd:5 esz=1 q=0
1256FCMLA_vi        0 1 10 1111 01 . rm:5 0 rot:2 1 . 0 rn:5 rd:5 esz=1 idx=%hl q=1
1257FCMLA_vi        0 1 10 1111 10 0 rm:5 0 rot:2 1 idx:1 0 rn:5 rd:5 esz=2 q=1
1258
1259SMULL_vi        0.00 1111 01 .. .... 1010 . 0 ..... .....   @qrrx_h
1260SMULL_vi        0.00 1111 10 . ..... 1010 . 0 ..... .....   @qrrx_s
1261UMULL_vi        0.10 1111 01 .. .... 1010 . 0 ..... .....   @qrrx_h
1262UMULL_vi        0.10 1111 10 . ..... 1010 . 0 ..... .....   @qrrx_s
1263
1264SMLAL_vi        0.00 1111 01 .. .... 0010 . 0 ..... .....   @qrrx_h
1265SMLAL_vi        0.00 1111 10 . ..... 0010 . 0 ..... .....   @qrrx_s
1266UMLAL_vi        0.10 1111 01 .. .... 0010 . 0 ..... .....   @qrrx_h
1267UMLAL_vi        0.10 1111 10 . ..... 0010 . 0 ..... .....   @qrrx_s
1268
1269SMLSL_vi        0.00 1111 01 .. .... 0110 . 0 ..... .....   @qrrx_h
1270SMLSL_vi        0.00 1111 10 . ..... 0110 . 0 ..... .....   @qrrx_s
1271UMLSL_vi        0.10 1111 01 .. .... 0110 . 0 ..... .....   @qrrx_h
1272UMLSL_vi        0.10 1111 10 . ..... 0110 . 0 ..... .....   @qrrx_s
1273
1274SQDMULL_vi      0.00 1111 01 .. .... 1011 . 0 ..... .....   @qrrx_h
1275SQDMULL_vi      0.00 1111 10 . ..... 1011 . 0 ..... .....   @qrrx_s
1276
1277SQDMLAL_vi      0.00 1111 01 .. .... 0011 . 0 ..... .....   @qrrx_h
1278SQDMLAL_vi      0.00 1111 10 . ..... 0011 . 0 ..... .....   @qrrx_s
1279
1280SQDMLSL_vi      0.00 1111 01 .. .... 0111 . 0 ..... .....   @qrrx_h
1281SQDMLSL_vi      0.00 1111 10 . ..... 0111 . 0 ..... .....   @qrrx_s
1282
1283# Floating-point conditional select
1284
1285FCSEL           0001 1110 .. 1 rm:5 cond:4 11 rn:5 rd:5     esz=%esz_hsd
1286
1287# Floating-point data-processing (3 source)
1288
1289@rrrr_hsd       .... .... .. . rm:5  . ra:5  rn:5  rd:5     &rrrr_e esz=%esz_hsd
1290
1291FMADD           0001 1111 .. 0 ..... 0 ..... ..... .....    @rrrr_hsd
1292FMSUB           0001 1111 .. 0 ..... 1 ..... ..... .....    @rrrr_hsd
1293FNMADD          0001 1111 .. 1 ..... 0 ..... ..... .....    @rrrr_hsd
1294FNMSUB          0001 1111 .. 1 ..... 1 ..... ..... .....    @rrrr_hsd
1295
1296# Advanced SIMD Extract
1297
1298EXT_d           0010 1110 00 0 rm:5 00 imm:3 0 rn:5 rd:5
1299EXT_q           0110 1110 00 0 rm:5 0  imm:4 0 rn:5 rd:5
1300
1301# Advanced SIMD Table Lookup
1302
1303TBL_TBX         0 q:1 00 1110 000 rm:5 0 len:2 tbx:1 00 rn:5 rd:5
1304
1305# Advanced SIMD Permute
1306
1307UZP1            0.00 1110 .. 0 ..... 0 001 10 ..... .....   @qrrr_e
1308UZP2            0.00 1110 .. 0 ..... 0 101 10 ..... .....   @qrrr_e
1309TRN1            0.00 1110 .. 0 ..... 0 010 10 ..... .....   @qrrr_e
1310TRN2            0.00 1110 .. 0 ..... 0 110 10 ..... .....   @qrrr_e
1311ZIP1            0.00 1110 .. 0 ..... 0 011 10 ..... .....   @qrrr_e
1312ZIP2            0.00 1110 .. 0 ..... 0 111 10 ..... .....   @qrrr_e
1313
1314# Advanced SIMD Across Lanes
1315
1316ADDV            0.00 1110 .. 11000 11011 10 ..... .....     @qrr_e
1317SADDLV          0.00 1110 .. 11000 00011 10 ..... .....     @qrr_e
1318UADDLV          0.10 1110 .. 11000 00011 10 ..... .....     @qrr_e
1319SMAXV           0.00 1110 .. 11000 01010 10 ..... .....     @qrr_e
1320UMAXV           0.10 1110 .. 11000 01010 10 ..... .....     @qrr_e
1321SMINV           0.00 1110 .. 11000 11010 10 ..... .....     @qrr_e
1322UMINV           0.10 1110 .. 11000 11010 10 ..... .....     @qrr_e
1323
1324FMAXNMV_h       0.00 1110 00 11000 01100 10 ..... .....     @qrr_h
1325FMAXNMV_s       0110 1110 00 11000 01100 10 ..... .....     @rr_q1e2
1326
1327FMINNMV_h       0.00 1110 10 11000 01100 10 ..... .....     @qrr_h
1328FMINNMV_s       0110 1110 10 11000 01100 10 ..... .....     @rr_q1e2
1329
1330FMAXV_h         0.00 1110 00 11000 01111 10 ..... .....     @qrr_h
1331FMAXV_s         0110 1110 00 11000 01111 10 ..... .....     @rr_q1e2
1332
1333FMINV_h         0.00 1110 10 11000 01111 10 ..... .....     @qrr_h
1334FMINV_s         0110 1110 10 11000 01111 10 ..... .....     @rr_q1e2
1335
1336# Conversion between floating-point and fixed-point (general register)
1337
1338&fcvt           rd rn esz sf shift
1339%fcvt_shift32   10:5 !function=rsub_32
1340%fcvt_shift64   10:6 !function=rsub_64
1341
1342@fcvt32         0 ....... .. ...... 1..... rn:5 rd:5    \
1343                &fcvt sf=0 esz=%esz_hsd shift=%fcvt_shift32
1344@fcvt64         1 ....... .. ...... ...... rn:5 rd:5    \
1345                &fcvt sf=1 esz=%esz_hsd shift=%fcvt_shift64
1346
1347SCVTF_g         . 0011110 .. 000010 ...... ..... .....  @fcvt32
1348SCVTF_g         . 0011110 .. 000010 ...... ..... .....  @fcvt64
1349UCVTF_g         . 0011110 .. 000011 ...... ..... .....  @fcvt32
1350UCVTF_g         . 0011110 .. 000011 ...... ..... .....  @fcvt64
1351
1352FCVTZS_g        . 0011110 .. 011000 ...... ..... .....  @fcvt32
1353FCVTZS_g        . 0011110 .. 011000 ...... ..... .....  @fcvt64
1354FCVTZU_g        . 0011110 .. 011001 ...... ..... .....  @fcvt32
1355FCVTZU_g        . 0011110 .. 011001 ...... ..... .....  @fcvt64
1356
1357# Conversion between floating-point and integer (general register)
1358
1359@icvt           sf:1 ....... .. ...... ...... rn:5 rd:5 \
1360                &fcvt esz=%esz_hsd shift=0
1361
1362SCVTF_g         . 0011110 .. 100010 000000 ..... .....  @icvt
1363UCVTF_g         . 0011110 .. 100011 000000 ..... .....  @icvt
1364
1365FCVTNS_g        . 0011110 .. 100000 000000 ..... .....  @icvt
1366FCVTNU_g        . 0011110 .. 100001 000000 ..... .....  @icvt
1367FCVTPS_g        . 0011110 .. 101000 000000 ..... .....  @icvt
1368FCVTPU_g        . 0011110 .. 101001 000000 ..... .....  @icvt
1369FCVTMS_g        . 0011110 .. 110000 000000 ..... .....  @icvt
1370FCVTMU_g        . 0011110 .. 110001 000000 ..... .....  @icvt
1371FCVTZS_g        . 0011110 .. 111000 000000 ..... .....  @icvt
1372FCVTZU_g        . 0011110 .. 111001 000000 ..... .....  @icvt
1373FCVTAS_g        . 0011110 .. 100100 000000 ..... .....  @icvt
1374FCVTAU_g        . 0011110 .. 100101 000000 ..... .....  @icvt
1375
1376FJCVTZS         0 0011110 01 111110 000000 ..... .....  @rr
1377
1378FMOV_ws         0 0011110 00 100110 000000 ..... .....  @rr
1379FMOV_sw         0 0011110 00 100111 000000 ..... .....  @rr
1380
1381FMOV_xd         1 0011110 01 100110 000000 ..... .....  @rr
1382FMOV_dx         1 0011110 01 100111 000000 ..... .....  @rr
1383
1384# Move to/from upper half of 128-bit
1385FMOV_xu         1 0011110 10 101110 000000 ..... .....  @rr
1386FMOV_ux         1 0011110 10 101111 000000 ..... .....  @rr
1387
1388# Half-precision allows both sf=0 and sf=1 with identical results
1389FMOV_xh         - 0011110 11 100110 000000 ..... .....  @rr
1390FMOV_hx         - 0011110 11 100111 000000 ..... .....  @rr
1391
1392# Floating-point data processing (1 source)
1393
1394FMOV_s          00011110 .. 1 000000 10000 ..... .....      @rr_hsd
1395FABS_s          00011110 .. 1 000001 10000 ..... .....      @rr_hsd
1396FNEG_s          00011110 .. 1 000010 10000 ..... .....      @rr_hsd
1397FSQRT_s         00011110 .. 1 000011 10000 ..... .....      @rr_hsd
1398
1399FRINTN_s        00011110 .. 1 001000 10000 ..... .....      @rr_hsd
1400FRINTP_s        00011110 .. 1 001001 10000 ..... .....      @rr_hsd
1401FRINTM_s        00011110 .. 1 001010 10000 ..... .....      @rr_hsd
1402FRINTZ_s        00011110 .. 1 001011 10000 ..... .....      @rr_hsd
1403FRINTA_s        00011110 .. 1 001100 10000 ..... .....      @rr_hsd
1404FRINTX_s        00011110 .. 1 001110 10000 ..... .....      @rr_hsd
1405FRINTI_s        00011110 .. 1 001111 10000 ..... .....      @rr_hsd
1406
1407BFCVT_s         00011110 01 1 000110 10000 ..... .....      @rr_s
1408
1409FRINT32Z_s      00011110 0. 1 010000 10000 ..... .....      @rr_sd
1410FRINT32X_s      00011110 0. 1 010001 10000 ..... .....      @rr_sd
1411FRINT64Z_s      00011110 0. 1 010010 10000 ..... .....      @rr_sd
1412FRINT64X_s      00011110 0. 1 010011 10000 ..... .....      @rr_sd
1413
1414FCVT_s_ds       00011110 00 1 000101 10000 ..... .....      @rr
1415FCVT_s_hs       00011110 00 1 000111 10000 ..... .....      @rr
1416FCVT_s_sd       00011110 01 1 000100 10000 ..... .....      @rr
1417FCVT_s_hd       00011110 01 1 000111 10000 ..... .....      @rr
1418FCVT_s_sh       00011110 11 1 000100 10000 ..... .....      @rr
1419FCVT_s_dh       00011110 11 1 000101 10000 ..... .....      @rr
1420
1421# Floating-point Immediate
1422
1423FMOVI_s         0001 1110 .. 1 imm:8 100 00000 rd:5         esz=%esz_hsd
1424
1425# Floating-point Compare
1426
1427FCMP            00011110 .. 1 rm:5 001000 rn:5 e:1 z:1 000  esz=%esz_hsd
1428
1429# Floating-point Conditional Compare
1430
1431FCCMP           00011110 .. 1 rm:5 cond:4 01 rn:5 e:1 nzcv:4  esz=%esz_hsd
1432
1433# Advanced SIMD Modified Immediate / Shift by Immediate
1434
1435%abcdefgh       16:3 5:5
1436
1437# Right shifts are encoded as N - shift, where N is the element size in bits.
1438%neon_rshift_i6 16:6 !function=rsub_64
1439%neon_rshift_i5 16:5 !function=rsub_32
1440%neon_rshift_i4 16:4 !function=rsub_16
1441%neon_rshift_i3 16:3 !function=rsub_8
1442
1443@q_shri_b       . q:1 .. ..... 0001 ... ..... . rn:5 rd:5   \
1444                &qrri_e esz=0 imm=%neon_rshift_i3
1445@q_shri_h       . q:1 .. ..... 001 .... ..... . rn:5 rd:5   \
1446                &qrri_e esz=1 imm=%neon_rshift_i4
1447@q_shri_s       . q:1 .. ..... 01 ..... ..... . rn:5 rd:5   \
1448                &qrri_e esz=2 imm=%neon_rshift_i5
1449@q_shri_d       . 1 .. ..... 1 ...... ..... . rn:5 rd:5     \
1450                &qrri_e esz=3 imm=%neon_rshift_i6 q=1
1451
1452@q_shli_b       . q:1 .. ..... 0001 imm:3 ..... . rn:5 rd:5 &qrri_e esz=0
1453@q_shli_h       . q:1 .. ..... 001  imm:4 ..... . rn:5 rd:5 &qrri_e esz=1
1454@q_shli_s       . q:1 .. ..... 01   imm:5 ..... . rn:5 rd:5 &qrri_e esz=2
1455@q_shli_d       . 1   .. ..... 1    imm:6 ..... . rn:5 rd:5 &qrri_e esz=3 q=1
1456
1457FMOVI_v_h       0 q:1 00 1111 00000 ... 1111 11 ..... rd:5  %abcdefgh
1458
1459# MOVI, MVNI, ORR, BIC, FMOV are all intermixed via cmode.
1460Vimm            0 q:1 op:1 0 1111 00000 ... cmode:4 01 ..... rd:5 %abcdefgh
1461
1462SSHR_v          0.00 11110 .... ... 00000 1 ..... .....     @q_shri_b
1463SSHR_v          0.00 11110 .... ... 00000 1 ..... .....     @q_shri_h
1464SSHR_v          0.00 11110 .... ... 00000 1 ..... .....     @q_shri_s
1465SSHR_v          0.00 11110 .... ... 00000 1 ..... .....     @q_shri_d
1466
1467USHR_v          0.10 11110 .... ... 00000 1 ..... .....     @q_shri_b
1468USHR_v          0.10 11110 .... ... 00000 1 ..... .....     @q_shri_h
1469USHR_v          0.10 11110 .... ... 00000 1 ..... .....     @q_shri_s
1470USHR_v          0.10 11110 .... ... 00000 1 ..... .....     @q_shri_d
1471
1472SSRA_v          0.00 11110 .... ... 00010 1 ..... .....     @q_shri_b
1473SSRA_v          0.00 11110 .... ... 00010 1 ..... .....     @q_shri_h
1474SSRA_v          0.00 11110 .... ... 00010 1 ..... .....     @q_shri_s
1475SSRA_v          0.00 11110 .... ... 00010 1 ..... .....     @q_shri_d
1476
1477USRA_v          0.10 11110 .... ... 00010 1 ..... .....     @q_shri_b
1478USRA_v          0.10 11110 .... ... 00010 1 ..... .....     @q_shri_h
1479USRA_v          0.10 11110 .... ... 00010 1 ..... .....     @q_shri_s
1480USRA_v          0.10 11110 .... ... 00010 1 ..... .....     @q_shri_d
1481
1482SRSHR_v         0.00 11110 .... ... 00100 1 ..... .....     @q_shri_b
1483SRSHR_v         0.00 11110 .... ... 00100 1 ..... .....     @q_shri_h
1484SRSHR_v         0.00 11110 .... ... 00100 1 ..... .....     @q_shri_s
1485SRSHR_v         0.00 11110 .... ... 00100 1 ..... .....     @q_shri_d
1486
1487URSHR_v         0.10 11110 .... ... 00100 1 ..... .....     @q_shri_b
1488URSHR_v         0.10 11110 .... ... 00100 1 ..... .....     @q_shri_h
1489URSHR_v         0.10 11110 .... ... 00100 1 ..... .....     @q_shri_s
1490URSHR_v         0.10 11110 .... ... 00100 1 ..... .....     @q_shri_d
1491
1492SRSRA_v         0.00 11110 .... ... 00110 1 ..... .....     @q_shri_b
1493SRSRA_v         0.00 11110 .... ... 00110 1 ..... .....     @q_shri_h
1494SRSRA_v         0.00 11110 .... ... 00110 1 ..... .....     @q_shri_s
1495SRSRA_v         0.00 11110 .... ... 00110 1 ..... .....     @q_shri_d
1496
1497URSRA_v         0.10 11110 .... ... 00110 1 ..... .....     @q_shri_b
1498URSRA_v         0.10 11110 .... ... 00110 1 ..... .....     @q_shri_h
1499URSRA_v         0.10 11110 .... ... 00110 1 ..... .....     @q_shri_s
1500URSRA_v         0.10 11110 .... ... 00110 1 ..... .....     @q_shri_d
1501
1502SRI_v           0.10 11110 .... ... 01000 1 ..... .....     @q_shri_b
1503SRI_v           0.10 11110 .... ... 01000 1 ..... .....     @q_shri_h
1504SRI_v           0.10 11110 .... ... 01000 1 ..... .....     @q_shri_s
1505SRI_v           0.10 11110 .... ... 01000 1 ..... .....     @q_shri_d
1506
1507SHL_v           0.00 11110 .... ... 01010 1 ..... .....     @q_shli_b
1508SHL_v           0.00 11110 .... ... 01010 1 ..... .....     @q_shli_h
1509SHL_v           0.00 11110 .... ... 01010 1 ..... .....     @q_shli_s
1510SHL_v           0.00 11110 .... ... 01010 1 ..... .....     @q_shli_d
1511
1512SLI_v           0.10 11110 .... ... 01010 1 ..... .....     @q_shli_b
1513SLI_v           0.10 11110 .... ... 01010 1 ..... .....     @q_shli_h
1514SLI_v           0.10 11110 .... ... 01010 1 ..... .....     @q_shli_s
1515SLI_v           0.10 11110 .... ... 01010 1 ..... .....     @q_shli_d
1516
1517SSHLL_v         0.00 11110 .... ... 10100 1 ..... .....     @q_shli_b
1518SSHLL_v         0.00 11110 .... ... 10100 1 ..... .....     @q_shli_h
1519SSHLL_v         0.00 11110 .... ... 10100 1 ..... .....     @q_shli_s
1520
1521USHLL_v         0.10 11110 .... ... 10100 1 ..... .....     @q_shli_b
1522USHLL_v         0.10 11110 .... ... 10100 1 ..... .....     @q_shli_h
1523USHLL_v         0.10 11110 .... ... 10100 1 ..... .....     @q_shli_s
1524
1525SHRN_v          0.00 11110 .... ... 10000 1 ..... .....     @q_shri_b
1526SHRN_v          0.00 11110 .... ... 10000 1 ..... .....     @q_shri_h
1527SHRN_v          0.00 11110 .... ... 10000 1 ..... .....     @q_shri_s
1528
1529RSHRN_v         0.00 11110 .... ... 10001 1 ..... .....     @q_shri_b
1530RSHRN_v         0.00 11110 .... ... 10001 1 ..... .....     @q_shri_h
1531RSHRN_v         0.00 11110 .... ... 10001 1 ..... .....     @q_shri_s
1532
1533SQSHL_vi        0.00 11110 .... ... 01110 1 ..... .....     @q_shli_b
1534SQSHL_vi        0.00 11110 .... ... 01110 1 ..... .....     @q_shli_h
1535SQSHL_vi        0.00 11110 .... ... 01110 1 ..... .....     @q_shli_s
1536SQSHL_vi        0.00 11110 .... ... 01110 1 ..... .....     @q_shli_d
1537
1538UQSHL_vi        0.10 11110 .... ... 01110 1 ..... .....     @q_shli_b
1539UQSHL_vi        0.10 11110 .... ... 01110 1 ..... .....     @q_shli_h
1540UQSHL_vi        0.10 11110 .... ... 01110 1 ..... .....     @q_shli_s
1541UQSHL_vi        0.10 11110 .... ... 01110 1 ..... .....     @q_shli_d
1542
1543SQSHLU_vi       0.10 11110 .... ... 01100 1 ..... .....     @q_shli_b
1544SQSHLU_vi       0.10 11110 .... ... 01100 1 ..... .....     @q_shli_h
1545SQSHLU_vi       0.10 11110 .... ... 01100 1 ..... .....     @q_shli_s
1546SQSHLU_vi       0.10 11110 .... ... 01100 1 ..... .....     @q_shli_d
1547
1548SQSHRN_v        0.00 11110 .... ... 10010 1 ..... .....     @q_shri_b
1549SQSHRN_v        0.00 11110 .... ... 10010 1 ..... .....     @q_shri_h
1550SQSHRN_v        0.00 11110 .... ... 10010 1 ..... .....     @q_shri_s
1551
1552UQSHRN_v        0.10 11110 .... ... 10010 1 ..... .....     @q_shri_b
1553UQSHRN_v        0.10 11110 .... ... 10010 1 ..... .....     @q_shri_h
1554UQSHRN_v        0.10 11110 .... ... 10010 1 ..... .....     @q_shri_s
1555
1556SQSHRUN_v       0.10 11110 .... ... 10000 1 ..... .....     @q_shri_b
1557SQSHRUN_v       0.10 11110 .... ... 10000 1 ..... .....     @q_shri_h
1558SQSHRUN_v       0.10 11110 .... ... 10000 1 ..... .....     @q_shri_s
1559
1560SQRSHRN_v       0.00 11110 .... ... 10011 1 ..... .....     @q_shri_b
1561SQRSHRN_v       0.00 11110 .... ... 10011 1 ..... .....     @q_shri_h
1562SQRSHRN_v       0.00 11110 .... ... 10011 1 ..... .....     @q_shri_s
1563
1564UQRSHRN_v       0.10 11110 .... ... 10011 1 ..... .....     @q_shri_b
1565UQRSHRN_v       0.10 11110 .... ... 10011 1 ..... .....     @q_shri_h
1566UQRSHRN_v       0.10 11110 .... ... 10011 1 ..... .....     @q_shri_s
1567
1568SQRSHRUN_v      0.10 11110 .... ... 10001 1 ..... .....     @q_shri_b
1569SQRSHRUN_v      0.10 11110 .... ... 10001 1 ..... .....     @q_shri_h
1570SQRSHRUN_v      0.10 11110 .... ... 10001 1 ..... .....     @q_shri_s
1571
1572# Advanced SIMD scalar shift by immediate
1573
1574@shri_b         .... ..... 0001 ... ..... . rn:5 rd:5   \
1575                &rri_e esz=0 imm=%neon_rshift_i3
1576@shri_h         .... ..... 001 .... ..... . rn:5 rd:5   \
1577                &rri_e esz=1 imm=%neon_rshift_i4
1578@shri_s         .... ..... 01 ..... ..... . rn:5 rd:5   \
1579                &rri_e esz=2 imm=%neon_rshift_i5
1580@shri_d         .... ..... 1 ...... ..... . rn:5 rd:5   \
1581                &rri_e esz=3 imm=%neon_rshift_i6
1582
1583@shli_b         .... ..... 0001 imm:3  ..... . rn:5 rd:5    &rri_e esz=0
1584@shli_h         .... ..... 001  imm:4  ..... . rn:5 rd:5    &rri_e esz=1
1585@shli_s         .... ..... 01   imm:5  ..... . rn:5 rd:5    &rri_e esz=2
1586@shli_d         .... ..... 1    imm:6  ..... . rn:5 rd:5    &rri_e esz=3
1587
1588SSHR_s          0101 11110 .... ... 00000 1 ..... .....     @shri_d
1589USHR_s          0111 11110 .... ... 00000 1 ..... .....     @shri_d
1590SSRA_s          0101 11110 .... ... 00010 1 ..... .....     @shri_d
1591USRA_s          0111 11110 .... ... 00010 1 ..... .....     @shri_d
1592SRSHR_s         0101 11110 .... ... 00100 1 ..... .....     @shri_d
1593URSHR_s         0111 11110 .... ... 00100 1 ..... .....     @shri_d
1594SRSRA_s         0101 11110 .... ... 00110 1 ..... .....     @shri_d
1595URSRA_s         0111 11110 .... ... 00110 1 ..... .....     @shri_d
1596SRI_s           0111 11110 .... ... 01000 1 ..... .....     @shri_d
1597
1598SHL_s           0101 11110 .... ... 01010 1 ..... .....     @shli_d
1599SLI_s           0111 11110 .... ... 01010 1 ..... .....     @shli_d
1600
1601SQSHL_si        0101 11110 .... ... 01110 1 ..... .....     @shli_b
1602SQSHL_si        0101 11110 .... ... 01110 1 ..... .....     @shli_h
1603SQSHL_si        0101 11110 .... ... 01110 1 ..... .....     @shli_s
1604SQSHL_si        0101 11110 .... ... 01110 1 ..... .....     @shli_d
1605
1606UQSHL_si        0111 11110 .... ... 01110 1 ..... .....     @shli_b
1607UQSHL_si        0111 11110 .... ... 01110 1 ..... .....     @shli_h
1608UQSHL_si        0111 11110 .... ... 01110 1 ..... .....     @shli_s
1609UQSHL_si        0111 11110 .... ... 01110 1 ..... .....     @shli_d
1610
1611SQSHLU_si       0111 11110 .... ... 01100 1 ..... .....     @shli_b
1612SQSHLU_si       0111 11110 .... ... 01100 1 ..... .....     @shli_h
1613SQSHLU_si       0111 11110 .... ... 01100 1 ..... .....     @shli_s
1614SQSHLU_si       0111 11110 .... ... 01100 1 ..... .....     @shli_d
1615
1616SQSHRN_si       0101 11110 .... ... 10010 1 ..... .....     @shri_b
1617SQSHRN_si       0101 11110 .... ... 10010 1 ..... .....     @shri_h
1618SQSHRN_si       0101 11110 .... ... 10010 1 ..... .....     @shri_s
1619
1620UQSHRN_si       0111 11110 .... ... 10010 1 ..... .....     @shri_b
1621UQSHRN_si       0111 11110 .... ... 10010 1 ..... .....     @shri_h
1622UQSHRN_si       0111 11110 .... ... 10010 1 ..... .....     @shri_s
1623
1624SQSHRUN_si      0111 11110 .... ... 10000 1 ..... .....     @shri_b
1625SQSHRUN_si      0111 11110 .... ... 10000 1 ..... .....     @shri_h
1626SQSHRUN_si      0111 11110 .... ... 10000 1 ..... .....     @shri_s
1627
1628SQRSHRN_si      0101 11110 .... ... 10011 1 ..... .....     @shri_b
1629SQRSHRN_si      0101 11110 .... ... 10011 1 ..... .....     @shri_h
1630SQRSHRN_si      0101 11110 .... ... 10011 1 ..... .....     @shri_s
1631
1632UQRSHRN_si      0111 11110 .... ... 10011 1 ..... .....     @shri_b
1633UQRSHRN_si      0111 11110 .... ... 10011 1 ..... .....     @shri_h
1634UQRSHRN_si      0111 11110 .... ... 10011 1 ..... .....     @shri_s
1635
1636SQRSHRUN_si     0111 11110 .... ... 10001 1 ..... .....     @shri_b
1637SQRSHRUN_si     0111 11110 .... ... 10001 1 ..... .....     @shri_h
1638SQRSHRUN_si     0111 11110 .... ... 10001 1 ..... .....     @shri_s
1639
1640# Advanced SIMD scalar two-register miscellaneous
1641
1642SQABS_s         0101 1110 ..1 00000 01111 0 ..... .....     @rr_e
1643SQNEG_s         0111 1110 ..1 00000 01111 0 ..... .....     @rr_e
1644ABS_s           0101 1110 111 00000 10111 0 ..... .....     @rr
1645NEG_s           0111 1110 111 00000 10111 0 ..... .....     @rr
1646CMGT0_s         0101 1110 111 00000 10001 0 ..... .....     @rr
1647CMGE0_s         0111 1110 111 00000 10001 0 ..... .....     @rr
1648CMEQ0_s         0101 1110 111 00000 10011 0 ..... .....     @rr
1649CMLE0_s         0111 1110 111 00000 10011 0 ..... .....     @rr
1650CMLT0_s         0101 1110 111 00000 10101 0 ..... .....     @rr
1651
1652SQXTUN_s        0111 1110 ..1 00001 00101 0 ..... .....     @rr_e
1653SQXTN_s         0101 1110 ..1 00001 01001 0 ..... .....     @rr_e
1654UQXTN_s         0111 1110 ..1 00001 01001 0 ..... .....     @rr_e
1655
1656FCVTXN_s        0111 1110 011 00001 01101 0 ..... .....     @rr_s
1657
1658FCMGT0_s        0101 1110 111 11000 11001 0 ..... .....     @rr_h
1659FCMGT0_s        0101 1110 1.1 00000 11001 0 ..... .....     @rr_sd
1660
1661FCMGE0_s        0111 1110 111 11000 11001 0 ..... .....     @rr_h
1662FCMGE0_s        0111 1110 1.1 00000 11001 0 ..... .....     @rr_sd
1663
1664FCMEQ0_s        0101 1110 111 11000 11011 0 ..... .....     @rr_h
1665FCMEQ0_s        0101 1110 1.1 00000 11011 0 ..... .....     @rr_sd
1666
1667FCMLE0_s        0111 1110 111 11000 11011 0 ..... .....     @rr_h
1668FCMLE0_s        0111 1110 1.1 00000 11011 0 ..... .....     @rr_sd
1669
1670FCMLT0_s        0101 1110 111 11000 11101 0 ..... .....     @rr_h
1671FCMLT0_s        0101 1110 1.1 00000 11101 0 ..... .....     @rr_sd
1672
1673FRECPE_s        0101 1110 111 11001 11011 0 ..... .....     @rr_h
1674FRECPE_s        0101 1110 1.1 00001 11011 0 ..... .....     @rr_sd
1675
1676FRECPX_s        0101 1110 111 11001 11111 0 ..... .....     @rr_h
1677FRECPX_s        0101 1110 1.1 00001 11111 0 ..... .....     @rr_sd
1678
1679FRSQRTE_s       0111 1110 111 11001 11011 0 ..... .....     @rr_h
1680FRSQRTE_s       0111 1110 1.1 00001 11011 0 ..... .....     @rr_sd
1681
1682@icvt_h         . ....... .. ...... ...... rn:5 rd:5 \
1683                &fcvt sf=0 esz=1 shift=0
1684@icvt_sd        . ....... .. ...... ...... rn:5 rd:5 \
1685                &fcvt sf=0 esz=%esz_sd shift=0
1686
1687SCVTF_f         0101 1110 011 11001 11011 0 ..... .....     @icvt_h
1688SCVTF_f         0101 1110 0.1 00001 11011 0 ..... .....     @icvt_sd
1689
1690UCVTF_f         0111 1110 011 11001 11011 0 ..... .....     @icvt_h
1691UCVTF_f         0111 1110 0.1 00001 11011 0 ..... .....     @icvt_sd
1692
1693FCVTNS_f        0101 1110 011 11001 10101 0 ..... .....     @icvt_h
1694FCVTNS_f        0101 1110 0.1 00001 10101 0 ..... .....     @icvt_sd
1695FCVTNU_f        0111 1110 011 11001 10101 0 ..... .....     @icvt_h
1696FCVTNU_f        0111 1110 0.1 00001 10101 0 ..... .....     @icvt_sd
1697
1698FCVTPS_f        0101 1110 111 11001 10101 0 ..... .....     @icvt_h
1699FCVTPS_f        0101 1110 1.1 00001 10101 0 ..... .....     @icvt_sd
1700FCVTPU_f        0111 1110 111 11001 10101 0 ..... .....     @icvt_h
1701FCVTPU_f        0111 1110 1.1 00001 10101 0 ..... .....     @icvt_sd
1702
1703FCVTMS_f        0101 1110 011 11001 10111 0 ..... .....     @icvt_h
1704FCVTMS_f        0101 1110 0.1 00001 10111 0 ..... .....     @icvt_sd
1705FCVTMU_f        0111 1110 011 11001 10111 0 ..... .....     @icvt_h
1706FCVTMU_f        0111 1110 0.1 00001 10111 0 ..... .....     @icvt_sd
1707
1708FCVTZS_f        0101 1110 111 11001 10111 0 ..... .....     @icvt_h
1709FCVTZS_f        0101 1110 1.1 00001 10111 0 ..... .....     @icvt_sd
1710FCVTZU_f        0111 1110 111 11001 10111 0 ..... .....     @icvt_h
1711FCVTZU_f        0111 1110 1.1 00001 10111 0 ..... .....     @icvt_sd
1712
1713FCVTAS_f        0101 1110 011 11001 11001 0 ..... .....     @icvt_h
1714FCVTAS_f        0101 1110 0.1 00001 11001 0 ..... .....     @icvt_sd
1715FCVTAU_f        0111 1110 011 11001 11001 0 ..... .....     @icvt_h
1716FCVTAU_f        0111 1110 0.1 00001 11001 0 ..... .....     @icvt_sd
1717
1718%fcvt_f_sh_h    16:4 !function=rsub_16
1719%fcvt_f_sh_s    16:5 !function=rsub_32
1720%fcvt_f_sh_d    16:6 !function=rsub_64
1721
1722@fcvt_fixed_h   .... .... . 001 .... ...... rn:5 rd:5       \
1723                &fcvt sf=0 esz=1 shift=%fcvt_f_sh_h
1724@fcvt_fixed_s   .... .... . 01 ..... ...... rn:5 rd:5       \
1725                &fcvt sf=0 esz=2 shift=%fcvt_f_sh_s
1726@fcvt_fixed_d   .... .... . 1 ...... ...... rn:5 rd:5       \
1727                &fcvt sf=0 esz=3 shift=%fcvt_f_sh_d
1728
1729SCVTF_f         0101 1111 0 ....... 111001 ..... .....      @fcvt_fixed_h
1730SCVTF_f         0101 1111 0 ....... 111001 ..... .....      @fcvt_fixed_s
1731SCVTF_f         0101 1111 0 ....... 111001 ..... .....      @fcvt_fixed_d
1732
1733UCVTF_f         0111 1111 0 ....... 111001 ..... .....      @fcvt_fixed_h
1734UCVTF_f         0111 1111 0 ....... 111001 ..... .....      @fcvt_fixed_s
1735UCVTF_f         0111 1111 0 ....... 111001 ..... .....      @fcvt_fixed_d
1736
1737FCVTZS_f        0101 1111 0 ....... 111111 ..... .....      @fcvt_fixed_h
1738FCVTZS_f        0101 1111 0 ....... 111111 ..... .....      @fcvt_fixed_s
1739FCVTZS_f        0101 1111 0 ....... 111111 ..... .....      @fcvt_fixed_d
1740
1741FCVTZU_f        0111 1111 0 ....... 111111 ..... .....      @fcvt_fixed_h
1742FCVTZU_f        0111 1111 0 ....... 111111 ..... .....      @fcvt_fixed_s
1743FCVTZU_f        0111 1111 0 ....... 111111 ..... .....      @fcvt_fixed_d
1744
1745# Advanced SIMD two-register miscellaneous
1746
1747SQABS_v         0.00 1110 ..1 00000 01111 0 ..... .....     @qrr_e
1748SQNEG_v         0.10 1110 ..1 00000 01111 0 ..... .....     @qrr_e
1749ABS_v           0.00 1110 ..1 00000 10111 0 ..... .....     @qrr_e
1750NEG_v           0.10 1110 ..1 00000 10111 0 ..... .....     @qrr_e
1751CLS_v           0.00 1110 ..1 00000 01001 0 ..... .....     @qrr_e
1752CLZ_v           0.10 1110 ..1 00000 01001 0 ..... .....     @qrr_e
1753CNT_v           0.00 1110 001 00000 01011 0 ..... .....     @qrr_b
1754NOT_v           0.10 1110 001 00000 01011 0 ..... .....     @qrr_b
1755RBIT_v          0.10 1110 011 00000 01011 0 ..... .....     @qrr_b
1756CMGT0_v         0.00 1110 ..1 00000 10001 0 ..... .....     @qrr_e
1757CMGE0_v         0.10 1110 ..1 00000 10001 0 ..... .....     @qrr_e
1758CMEQ0_v         0.00 1110 ..1 00000 10011 0 ..... .....     @qrr_e
1759CMLE0_v         0.10 1110 ..1 00000 10011 0 ..... .....     @qrr_e
1760CMLT0_v         0.00 1110 ..1 00000 10101 0 ..... .....     @qrr_e
1761
1762REV16_v         0.00 1110 001 00000 00011 0 ..... .....     @qrr_b
1763REV32_v         0.10 1110 0.1 00000 00001 0 ..... .....     @qrr_bh
1764REV64_v         0.00 1110 ..1 00000 00001 0 ..... .....     @qrr_e
1765
1766SADDLP_v        0.00 1110 ..1 00000 00101 0 ..... .....     @qrr_e
1767UADDLP_v        0.10 1110 ..1 00000 00101 0 ..... .....     @qrr_e
1768SADALP_v        0.00 1110 ..1 00000 01101 0 ..... .....     @qrr_e
1769UADALP_v        0.10 1110 ..1 00000 01101 0 ..... .....     @qrr_e
1770
1771XTN             0.00 1110 ..1 00001 00101 0 ..... .....     @qrr_e
1772SQXTUN_v        0.10 1110 ..1 00001 00101 0 ..... .....     @qrr_e
1773SQXTN_v         0.00 1110 ..1 00001 01001 0 ..... .....     @qrr_e
1774UQXTN_v         0.10 1110 ..1 00001 01001 0 ..... .....     @qrr_e
1775
1776FCVTN_v         0.00 1110 0.1 00001 01101 0 ..... .....     @qrr_hs
1777FCVTXN_v        0.10 1110 011 00001 01101 0 ..... .....     @qrr_s
1778BFCVTN_v        0.00 1110 101 00001 01101 0 ..... .....     @qrr_h
1779
1780SHLL_v          0.10 1110 ..1 00001 00111 0 ..... .....     @qrr_e
1781
1782FABS_v          0.00 1110 111 11000 11111 0 ..... .....     @qrr_h
1783FABS_v          0.00 1110 1.1 00000 11111 0 ..... .....     @qrr_sd
1784
1785FNEG_v          0.10 1110 111 11000 11111 0 ..... .....     @qrr_h
1786FNEG_v          0.10 1110 1.1 00000 11111 0 ..... .....     @qrr_sd
1787
1788FSQRT_v         0.10 1110 111 11001 11111 0 ..... .....     @qrr_h
1789FSQRT_v         0.10 1110 1.1 00001 11111 0 ..... .....     @qrr_sd
1790
1791FRINTN_v        0.00 1110 011 11001 10001 0 ..... .....     @qrr_h
1792FRINTN_v        0.00 1110 0.1 00001 10001 0 ..... .....     @qrr_sd
1793
1794FRINTM_v        0.00 1110 011 11001 10011 0 ..... .....     @qrr_h
1795FRINTM_v        0.00 1110 0.1 00001 10011 0 ..... .....     @qrr_sd
1796
1797FRINTP_v        0.00 1110 111 11001 10001 0 ..... .....     @qrr_h
1798FRINTP_v        0.00 1110 1.1 00001 10001 0 ..... .....     @qrr_sd
1799
1800FRINTZ_v        0.00 1110 111 11001 10011 0 ..... .....     @qrr_h
1801FRINTZ_v        0.00 1110 1.1 00001 10011 0 ..... .....     @qrr_sd
1802
1803FRINTA_v        0.10 1110 011 11001 10001 0 ..... .....     @qrr_h
1804FRINTA_v        0.10 1110 0.1 00001 10001 0 ..... .....     @qrr_sd
1805
1806FRINTX_v        0.10 1110 011 11001 10011 0 ..... .....     @qrr_h
1807FRINTX_v        0.10 1110 0.1 00001 10011 0 ..... .....     @qrr_sd
1808
1809FRINTI_v        0.10 1110 111 11001 10011 0 ..... .....     @qrr_h
1810FRINTI_v        0.10 1110 1.1 00001 10011 0 ..... .....     @qrr_sd
1811
1812FRINT32Z_v      0.00 1110 0.1 00001 11101 0 ..... .....     @qrr_sd
1813FRINT32X_v      0.10 1110 0.1 00001 11101 0 ..... .....     @qrr_sd
1814FRINT64Z_v      0.00 1110 0.1 00001 11111 0 ..... .....     @qrr_sd
1815FRINT64X_v      0.10 1110 0.1 00001 11111 0 ..... .....     @qrr_sd
1816
1817SCVTF_vi        0.00 1110 011 11001 11011 0 ..... .....     @qrr_h
1818SCVTF_vi        0.00 1110 0.1 00001 11011 0 ..... .....     @qrr_sd
1819
1820UCVTF_vi        0.10 1110 011 11001 11011 0 ..... .....     @qrr_h
1821UCVTF_vi        0.10 1110 0.1 00001 11011 0 ..... .....     @qrr_sd
1822
1823FCVTNS_vi       0.00 1110 011 11001 10101 0 ..... .....     @qrr_h
1824FCVTNS_vi       0.00 1110 0.1 00001 10101 0 ..... .....     @qrr_sd
1825FCVTNU_vi       0.10 1110 011 11001 10101 0 ..... .....     @qrr_h
1826FCVTNU_vi       0.10 1110 0.1 00001 10101 0 ..... .....     @qrr_sd
1827
1828FCVTPS_vi       0.00 1110 111 11001 10101 0 ..... .....     @qrr_h
1829FCVTPS_vi       0.00 1110 1.1 00001 10101 0 ..... .....     @qrr_sd
1830FCVTPU_vi       0.10 1110 111 11001 10101 0 ..... .....     @qrr_h
1831FCVTPU_vi       0.10 1110 1.1 00001 10101 0 ..... .....     @qrr_sd
1832
1833FCVTMS_vi       0.00 1110 011 11001 10111 0 ..... .....     @qrr_h
1834FCVTMS_vi       0.00 1110 0.1 00001 10111 0 ..... .....     @qrr_sd
1835FCVTMU_vi       0.10 1110 011 11001 10111 0 ..... .....     @qrr_h
1836FCVTMU_vi       0.10 1110 0.1 00001 10111 0 ..... .....     @qrr_sd
1837
1838FCVTZS_vi       0.00 1110 111 11001 10111 0 ..... .....     @qrr_h
1839FCVTZS_vi       0.00 1110 1.1 00001 10111 0 ..... .....     @qrr_sd
1840FCVTZU_vi       0.10 1110 111 11001 10111 0 ..... .....     @qrr_h
1841FCVTZU_vi       0.10 1110 1.1 00001 10111 0 ..... .....     @qrr_sd
1842
1843FCVTAS_vi       0.00 1110 011 11001 11001 0 ..... .....     @qrr_h
1844FCVTAS_vi       0.00 1110 0.1 00001 11001 0 ..... .....     @qrr_sd
1845FCVTAU_vi       0.10 1110 011 11001 11001 0 ..... .....     @qrr_h
1846FCVTAU_vi       0.10 1110 0.1 00001 11001 0 ..... .....     @qrr_sd
1847
1848FCMGT0_v        0.00 1110 111 11000 11001 0 ..... .....     @qrr_h
1849FCMGT0_v        0.00 1110 1.1 00000 11001 0 ..... .....     @qrr_sd
1850
1851FCMGE0_v        0.10 1110 111 11000 11001 0 ..... .....     @qrr_h
1852FCMGE0_v        0.10 1110 1.1 00000 11001 0 ..... .....     @qrr_sd
1853
1854FCMEQ0_v        0.00 1110 111 11000 11011 0 ..... .....     @qrr_h
1855FCMEQ0_v        0.00 1110 1.1 00000 11011 0 ..... .....     @qrr_sd
1856
1857FCMLE0_v        0.10 1110 111 11000 11011 0 ..... .....     @qrr_h
1858FCMLE0_v        0.10 1110 1.1 00000 11011 0 ..... .....     @qrr_sd
1859
1860FCMLT0_v        0.00 1110 111 11000 11101 0 ..... .....     @qrr_h
1861FCMLT0_v        0.00 1110 1.1 00000 11101 0 ..... .....     @qrr_sd
1862
1863FRECPE_v        0.00 1110 111 11001 11011 0 ..... .....     @qrr_h
1864FRECPE_v        0.00 1110 1.1 00001 11011 0 ..... .....     @qrr_sd
1865
1866FRSQRTE_v       0.10 1110 111 11001 11011 0 ..... .....     @qrr_h
1867FRSQRTE_v       0.10 1110 1.1 00001 11011 0 ..... .....     @qrr_sd
1868
1869URECPE_v        0.00 1110 101 00001 11001 0 ..... .....     @qrr_s
1870URSQRTE_v       0.10 1110 101 00001 11001 0 ..... .....     @qrr_s
1871
1872FCVTL_v         0.00 1110 0.1 00001 01111 0 ..... .....     @qrr_sd
1873
1874&fcvt_q         rd rn esz q shift
1875@fcvtq_h        . q:1 . ...... 001 .... ...... rn:5 rd:5    \
1876                &fcvt_q esz=1 shift=%fcvt_f_sh_h
1877@fcvtq_s        . q:1 . ...... 01 ..... ...... rn:5 rd:5    \
1878                &fcvt_q esz=2 shift=%fcvt_f_sh_s
1879@fcvtq_d        . q:1 . ...... 1 ...... ...... rn:5 rd:5    \
1880                &fcvt_q esz=3 shift=%fcvt_f_sh_d
1881
1882SCVTF_vf        0.00 11110 ....... 111001 ..... .....       @fcvtq_h
1883SCVTF_vf        0.00 11110 ....... 111001 ..... .....       @fcvtq_s
1884SCVTF_vf        0.00 11110 ....... 111001 ..... .....       @fcvtq_d
1885
1886UCVTF_vf        0.10 11110 ....... 111001 ..... .....       @fcvtq_h
1887UCVTF_vf        0.10 11110 ....... 111001 ..... .....       @fcvtq_s
1888UCVTF_vf        0.10 11110 ....... 111001 ..... .....       @fcvtq_d
1889
1890FCVTZS_vf       0.00 11110 ....... 111111 ..... .....       @fcvtq_h
1891FCVTZS_vf       0.00 11110 ....... 111111 ..... .....       @fcvtq_s
1892FCVTZS_vf       0.00 11110 ....... 111111 ..... .....       @fcvtq_d
1893
1894FCVTZU_vf       0.10 11110 ....... 111111 ..... .....       @fcvtq_h
1895FCVTZU_vf       0.10 11110 ....... 111111 ..... .....       @fcvtq_s
1896FCVTZU_vf       0.10 11110 ....... 111111 ..... .....       @fcvtq_d
1897