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