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