aarch64-tbl.h revision 1.5 1 1.1 christos /* aarch64-tbl.h -- AArch64 opcode description table and instruction
2 1.1 christos operand description table.
3 1.3 christos Copyright (C) 2012-2015 Free Software Foundation, Inc.
4 1.1 christos
5 1.1 christos This file is part of the GNU opcodes library.
6 1.1 christos
7 1.1 christos This library is free software; you can redistribute it and/or modify
8 1.1 christos it under the terms of the GNU General Public License as published by
9 1.1 christos the Free Software Foundation; either version 3, or (at your option)
10 1.1 christos any later version.
11 1.1 christos
12 1.1 christos It is distributed in the hope that it will be useful, but WITHOUT
13 1.1 christos ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 1.1 christos or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
15 1.1 christos License for more details.
16 1.1 christos
17 1.1 christos You should have received a copy of the GNU General Public License
18 1.1 christos along with this file; see the file COPYING. If not, write to the
19 1.1 christos Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
20 1.1 christos MA 02110-1301, USA. */
21 1.1 christos
22 1.1 christos #include "aarch64-opc.h"
23 1.1 christos
24 1.1 christos /* Operand type. */
25 1.1 christos
26 1.1 christos #define OPND(x) AARCH64_OPND_##x
27 1.1 christos #define OP0() {}
28 1.1 christos #define OP1(a) {OPND(a)}
29 1.1 christos #define OP2(a,b) {OPND(a), OPND(b)}
30 1.1 christos #define OP3(a,b,c) {OPND(a), OPND(b), OPND(c)}
31 1.1 christos #define OP4(a,b,c,d) {OPND(a), OPND(b), OPND(c), OPND(d)}
32 1.1 christos #define OP5(a,b,c,d,e) {OPND(a), OPND(b), OPND(c), OPND(d), OPND(e)}
33 1.1 christos
34 1.1 christos #define QLF(x) AARCH64_OPND_QLF_##x
35 1.1 christos #define QLF1(a) {QLF(a)}
36 1.1 christos #define QLF2(a,b) {QLF(a), QLF(b)}
37 1.1 christos #define QLF3(a,b,c) {QLF(a), QLF(b), QLF(c)}
38 1.1 christos #define QLF4(a,b,c,d) {QLF(a), QLF(b), QLF(c), QLF(d)}
39 1.1 christos #define QLF5(a,b,c,d,e) {QLF(a), QLF(b), QLF(c), QLF(d), QLF(e)}
40 1.1 christos
41 1.1 christos /* Qualifiers list. */
42 1.1 christos
43 1.1 christos /* e.g. MSR <systemreg>, <Xt>. */
44 1.1 christos #define QL_SRC_X \
45 1.1 christos { \
46 1.1 christos QLF2(NIL,X), \
47 1.1 christos }
48 1.1 christos
49 1.1 christos /* e.g. MRS <Xt>, <systemreg>. */
50 1.1 christos #define QL_DST_X \
51 1.1 christos { \
52 1.1 christos QLF2(X,NIL), \
53 1.1 christos }
54 1.1 christos
55 1.1 christos /* e.g. SYS #<op1>, <Cn>, <Cm>, #<op2>{, <Xt>}. */
56 1.1 christos #define QL_SYS \
57 1.1 christos { \
58 1.1 christos QLF5(NIL,NIL,NIL,NIL,X), \
59 1.1 christos }
60 1.1 christos
61 1.1 christos /* e.g. SYSL <Xt>, #<op1>, <Cn>, <Cm>, #<op2>. */
62 1.1 christos #define QL_SYSL \
63 1.1 christos { \
64 1.1 christos QLF5(X,NIL,NIL,NIL,NIL), \
65 1.1 christos }
66 1.1 christos
67 1.1 christos /* e.g. ADRP <Xd>, <label>. */
68 1.1 christos #define QL_ADRP \
69 1.1 christos { \
70 1.1 christos QLF2(X,NIL), \
71 1.1 christos }
72 1.1 christos
73 1.1 christos /* e.g. B.<cond> <label>. */
74 1.1 christos #define QL_PCREL_NIL \
75 1.1 christos { \
76 1.1 christos QLF1(NIL), \
77 1.1 christos }
78 1.1 christos
79 1.1 christos /* e.g. TBZ <Xt>, #<imm>, <label>. */
80 1.1 christos #define QL_PCREL_14 \
81 1.1 christos { \
82 1.1 christos QLF3(X,imm_0_63,NIL), \
83 1.1 christos }
84 1.1 christos
85 1.1 christos /* e.g. BL <label>. */
86 1.1 christos #define QL_PCREL_26 \
87 1.1 christos { \
88 1.1 christos QLF1(NIL), \
89 1.1 christos }
90 1.1 christos
91 1.1 christos /* e.g. LDRSW <Xt>, <label>. */
92 1.1 christos #define QL_X_PCREL \
93 1.1 christos { \
94 1.1 christos QLF2(X,NIL), \
95 1.1 christos }
96 1.1 christos
97 1.1 christos /* e.g. LDR <Wt>, <label>. */
98 1.1 christos #define QL_R_PCREL \
99 1.1 christos { \
100 1.1 christos QLF2(W,NIL), \
101 1.1 christos QLF2(X,NIL), \
102 1.1 christos }
103 1.1 christos
104 1.1 christos /* e.g. LDR <Dt>, <label>. */
105 1.1 christos #define QL_FP_PCREL \
106 1.1 christos { \
107 1.1 christos QLF2(S_S,NIL), \
108 1.1 christos QLF2(S_D,NIL), \
109 1.1 christos QLF2(S_Q,NIL), \
110 1.1 christos }
111 1.1 christos
112 1.1 christos /* e.g. PRFM <prfop>, <label>. */
113 1.1 christos #define QL_PRFM_PCREL \
114 1.1 christos { \
115 1.1 christos QLF2(NIL,NIL), \
116 1.1 christos }
117 1.1 christos
118 1.1 christos /* e.g. BR <Xn>. */
119 1.1 christos #define QL_I1X \
120 1.1 christos { \
121 1.1 christos QLF1(X), \
122 1.1 christos }
123 1.1 christos
124 1.1 christos /* e.g. RBIT <Wd>, <Wn>. */
125 1.1 christos #define QL_I2SAME \
126 1.1 christos { \
127 1.1 christos QLF2(W,W), \
128 1.1 christos QLF2(X,X), \
129 1.1 christos }
130 1.1 christos
131 1.1 christos /* e.g. CMN <Wn|WSP>, <Wm>{, <extend> {#<amount>}}. */
132 1.1 christos #define QL_I2_EXT \
133 1.1 christos { \
134 1.1 christos QLF2(W,W), \
135 1.1 christos QLF2(X,W), \
136 1.1 christos QLF2(X,X), \
137 1.1 christos }
138 1.1 christos
139 1.1 christos /* e.g. MOV <Wd|WSP>, <Wn|WSP>, at least one SP. */
140 1.1 christos #define QL_I2SP \
141 1.1 christos { \
142 1.1 christos QLF2(WSP,W), \
143 1.1 christos QLF2(W,WSP), \
144 1.1 christos QLF2(SP,X), \
145 1.1 christos QLF2(X,SP), \
146 1.1 christos }
147 1.1 christos
148 1.1 christos /* e.g. REV <Wd>, <Wn>. */
149 1.1 christos #define QL_I2SAMEW \
150 1.1 christos { \
151 1.1 christos QLF2(W,W), \
152 1.1 christos }
153 1.1 christos
154 1.1 christos /* e.g. REV32 <Xd>, <Xn>. */
155 1.1 christos #define QL_I2SAMEX \
156 1.1 christos { \
157 1.1 christos QLF2(X,X), \
158 1.1 christos }
159 1.1 christos
160 1.1 christos #define QL_I2SAMER \
161 1.1 christos { \
162 1.1 christos QLF2(W,W), \
163 1.1 christos QLF2(X,X), \
164 1.1 christos }
165 1.1 christos
166 1.1 christos /* e.g. CRC32B <Wd>, <Wn>, <Wm>. */
167 1.1 christos #define QL_I3SAMEW \
168 1.1 christos { \
169 1.1 christos QLF3(W,W,W), \
170 1.1 christos }
171 1.1 christos
172 1.1 christos /* e.g. SMULH <Xd>, <Xn>, <Xm>. */
173 1.1 christos #define QL_I3SAMEX \
174 1.1 christos { \
175 1.1 christos QLF3(X,X,X), \
176 1.1 christos }
177 1.1 christos
178 1.1 christos /* e.g. CRC32X <Wd>, <Wn>, <Xm>. */
179 1.1 christos #define QL_I3WWX \
180 1.1 christos { \
181 1.1 christos QLF3(W,W,X), \
182 1.1 christos }
183 1.1 christos
184 1.1 christos /* e.g. UDIV <Xd>, <Xn>, <Xm>. */
185 1.1 christos #define QL_I3SAMER \
186 1.1 christos { \
187 1.1 christos QLF3(W,W,W), \
188 1.1 christos QLF3(X,X,X), \
189 1.1 christos }
190 1.1 christos
191 1.1 christos /* e.g. ADDS <Xd>, <Xn|SP>, <R><m>{, <extend> {#<amount>}}. */
192 1.1 christos #define QL_I3_EXT \
193 1.1 christos { \
194 1.1 christos QLF3(W,W,W), \
195 1.1 christos QLF3(X,X,W), \
196 1.1 christos QLF3(X,X,X), \
197 1.1 christos }
198 1.1 christos
199 1.1 christos /* e.g. MADD <Xd>, <Xn>, <Xm>, <Xa>. */
200 1.1 christos #define QL_I4SAMER \
201 1.1 christos { \
202 1.1 christos QLF4(W,W,W,W), \
203 1.1 christos QLF4(X,X,X,X), \
204 1.1 christos }
205 1.1 christos
206 1.1 christos /* e.g. SMADDL <Xd>, <Wn>, <Wm>, <Xa>. */
207 1.1 christos #define QL_I3SAMEL \
208 1.1 christos { \
209 1.1 christos QLF3(X,W,W), \
210 1.1 christos }
211 1.1 christos
212 1.1 christos /* e.g. SMADDL <Xd>, <Wn>, <Wm>, <Xa>. */
213 1.1 christos #define QL_I4SAMEL \
214 1.1 christos { \
215 1.1 christos QLF4(X,W,W,X), \
216 1.1 christos }
217 1.1 christos
218 1.1 christos /* e.g. CSINC <Xd>, <Xn>, <Xm>, <cond>. */
219 1.1 christos #define QL_CSEL \
220 1.1 christos { \
221 1.1 christos QLF4(W, W, W, NIL), \
222 1.1 christos QLF4(X, X, X, NIL), \
223 1.1 christos }
224 1.1 christos
225 1.1 christos /* e.g. CSET <Wd>, <cond>. */
226 1.1 christos #define QL_DST_R \
227 1.1 christos { \
228 1.1 christos QLF2(W, NIL), \
229 1.1 christos QLF2(X, NIL), \
230 1.1 christos }
231 1.1 christos
232 1.1 christos /* e.g. BFM <Wd>, <Wn>, #<immr>, #<imms>. */
233 1.1 christos #define QL_BF \
234 1.1 christos { \
235 1.1 christos QLF4(W,W,imm_0_31,imm_0_31), \
236 1.1 christos QLF4(X,X,imm_0_63,imm_0_63), \
237 1.1 christos }
238 1.1 christos
239 1.1 christos /* e.g. UBFIZ <Wd>, <Wn>, #<lsb>, #<width>. */
240 1.1 christos #define QL_BF2 \
241 1.1 christos { \
242 1.1 christos QLF4(W,W,imm_0_31,imm_1_32), \
243 1.1 christos QLF4(X,X,imm_0_63,imm_1_64), \
244 1.1 christos }
245 1.1 christos
246 1.1 christos /* e.g. SCVTF <Sd>, <Xn>, #<fbits>. */
247 1.1 christos #define QL_FIX2FP \
248 1.1 christos { \
249 1.1 christos QLF3(S_D,W,imm_1_32), \
250 1.1 christos QLF3(S_S,W,imm_1_32), \
251 1.1 christos QLF3(S_D,X,imm_1_64), \
252 1.1 christos QLF3(S_S,X,imm_1_64), \
253 1.1 christos }
254 1.1 christos
255 1.1 christos /* e.g. FCVTZS <Wd>, <Dn>, #<fbits>. */
256 1.1 christos #define QL_FP2FIX \
257 1.1 christos { \
258 1.1 christos QLF3(W,S_D,imm_1_32), \
259 1.1 christos QLF3(W,S_S,imm_1_32), \
260 1.1 christos QLF3(X,S_D,imm_1_64), \
261 1.1 christos QLF3(X,S_S,imm_1_64), \
262 1.1 christos }
263 1.1 christos
264 1.1 christos /* e.g. SCVTF <Dd>, <Wn>. */
265 1.1 christos #define QL_INT2FP \
266 1.1 christos { \
267 1.1 christos QLF2(S_D,W), \
268 1.1 christos QLF2(S_S,W), \
269 1.1 christos QLF2(S_D,X), \
270 1.1 christos QLF2(S_S,X), \
271 1.1 christos }
272 1.1 christos
273 1.1 christos /* e.g. FCVTNS <Xd>, <Dn>. */
274 1.1 christos #define QL_FP2INT \
275 1.1 christos { \
276 1.1 christos QLF2(W,S_D), \
277 1.1 christos QLF2(W,S_S), \
278 1.1 christos QLF2(X,S_D), \
279 1.1 christos QLF2(X,S_S), \
280 1.1 christos }
281 1.1 christos
282 1.1 christos /* e.g. FMOV <Xd>, <Vn>.D[1]. */
283 1.1 christos #define QL_XVD1 \
284 1.1 christos { \
285 1.1 christos QLF2(X,S_D), \
286 1.1 christos }
287 1.1 christos
288 1.1 christos /* e.g. FMOV <Vd>.D[1], <Xn>. */
289 1.1 christos #define QL_VD1X \
290 1.1 christos { \
291 1.1 christos QLF2(S_D,X), \
292 1.1 christos }
293 1.1 christos
294 1.1 christos /* e.g. EXTR <Xd>, <Xn>, <Xm>, #<lsb>. */
295 1.1 christos #define QL_EXTR \
296 1.1 christos { \
297 1.1 christos QLF4(W,W,W,imm_0_31), \
298 1.1 christos QLF4(X,X,X,imm_0_63), \
299 1.1 christos }
300 1.1 christos
301 1.1 christos /* e.g. LSL <Wd>, <Wn>, #<uimm>. */
302 1.1 christos #define QL_SHIFT \
303 1.1 christos { \
304 1.1 christos QLF3(W,W,imm_0_31), \
305 1.1 christos QLF3(X,X,imm_0_63), \
306 1.1 christos }
307 1.1 christos
308 1.1 christos /* e.g. UXTH <Xd>, <Wn>. */
309 1.1 christos #define QL_EXT \
310 1.1 christos { \
311 1.1 christos QLF2(W,W), \
312 1.1 christos QLF2(X,W), \
313 1.1 christos }
314 1.1 christos
315 1.1 christos /* e.g. UXTW <Xd>, <Wn>. */
316 1.1 christos #define QL_EXT_W \
317 1.1 christos { \
318 1.1 christos QLF2(X,W), \
319 1.1 christos }
320 1.1 christos
321 1.1 christos /* e.g. SQSHL <V><d>, <V><n>, #<shift>. */
322 1.1 christos #define QL_SSHIFT \
323 1.1 christos { \
324 1.1 christos QLF3(S_B , S_B , S_B ), \
325 1.1 christos QLF3(S_H , S_H , S_H ), \
326 1.1 christos QLF3(S_S , S_S , S_S ), \
327 1.1 christos QLF3(S_D , S_D , S_D ) \
328 1.1 christos }
329 1.1 christos
330 1.1 christos /* e.g. SSHR <V><d>, <V><n>, #<shift>. */
331 1.1 christos #define QL_SSHIFT_D \
332 1.1 christos { \
333 1.1 christos QLF3(S_D , S_D , S_D ) \
334 1.1 christos }
335 1.1 christos
336 1.1 christos /* e.g. UCVTF <Vd>.<T>, <Vn>.<T>, #<fbits>. */
337 1.1 christos #define QL_SSHIFT_SD \
338 1.1 christos { \
339 1.1 christos QLF3(S_S , S_S , S_S ), \
340 1.1 christos QLF3(S_D , S_D , S_D ) \
341 1.1 christos }
342 1.1 christos
343 1.1 christos /* e.g. SQSHRUN <Vb><d>, <Va><n>, #<shift>. */
344 1.1 christos #define QL_SSHIFTN \
345 1.1 christos { \
346 1.1 christos QLF3(S_B , S_H , S_B ), \
347 1.1 christos QLF3(S_H , S_S , S_H ), \
348 1.1 christos QLF3(S_S , S_D , S_S ), \
349 1.1 christos }
350 1.1 christos
351 1.1 christos /* e.g. SSHR <Vd>.<T>, <Vn>.<T>, #<shift>.
352 1.1 christos The register operand variant qualifiers are deliberately used for the
353 1.1 christos immediate operand to ease the operand encoding/decoding and qualifier
354 1.1 christos sequence matching. */
355 1.1 christos #define QL_VSHIFT \
356 1.1 christos { \
357 1.1 christos QLF3(V_8B , V_8B , V_8B ), \
358 1.1 christos QLF3(V_16B, V_16B, V_16B), \
359 1.1 christos QLF3(V_4H , V_4H , V_4H ), \
360 1.1 christos QLF3(V_8H , V_8H , V_8H ), \
361 1.1 christos QLF3(V_2S , V_2S , V_2S ), \
362 1.1 christos QLF3(V_4S , V_4S , V_4S ), \
363 1.1 christos QLF3(V_2D , V_2D , V_2D ) \
364 1.1 christos }
365 1.1 christos
366 1.1 christos /* e.g. SCVTF <Vd>.<T>, <Vn>.<T>, #<fbits>. */
367 1.1 christos #define QL_VSHIFT_SD \
368 1.1 christos { \
369 1.1 christos QLF3(V_2S , V_2S , V_2S ), \
370 1.1 christos QLF3(V_4S , V_4S , V_4S ), \
371 1.1 christos QLF3(V_2D , V_2D , V_2D ) \
372 1.1 christos }
373 1.1 christos
374 1.1 christos /* e.g. SHRN<Q> <Vd>.<Tb>, <Vn>.<Ta>, #<shift>. */
375 1.1 christos #define QL_VSHIFTN \
376 1.1 christos { \
377 1.1 christos QLF3(V_8B , V_8H , V_8B ), \
378 1.1 christos QLF3(V_4H , V_4S , V_4H ), \
379 1.1 christos QLF3(V_2S , V_2D , V_2S ), \
380 1.1 christos }
381 1.1 christos
382 1.1 christos /* e.g. SHRN<Q> <Vd>.<Tb>, <Vn>.<Ta>, #<shift>. */
383 1.1 christos #define QL_VSHIFTN2 \
384 1.1 christos { \
385 1.1 christos QLF3(V_16B, V_8H, V_16B), \
386 1.1 christos QLF3(V_8H , V_4S , V_8H ), \
387 1.1 christos QLF3(V_4S , V_2D , V_4S ), \
388 1.1 christos }
389 1.1 christos
390 1.1 christos /* e.g. SSHLL<Q> <Vd>.<Ta>, <Vn>.<Tb>, #<shift>.
391 1.1 christos the 3rd qualifier is used to help the encoding. */
392 1.1 christos #define QL_VSHIFTL \
393 1.1 christos { \
394 1.1 christos QLF3(V_8H , V_8B , V_8B ), \
395 1.1 christos QLF3(V_4S , V_4H , V_4H ), \
396 1.1 christos QLF3(V_2D , V_2S , V_2S ), \
397 1.1 christos }
398 1.1 christos
399 1.1 christos /* e.g. SSHLL<Q> <Vd>.<Ta>, <Vn>.<Tb>, #<shift>. */
400 1.1 christos #define QL_VSHIFTL2 \
401 1.1 christos { \
402 1.1 christos QLF3(V_8H , V_16B, V_16B), \
403 1.1 christos QLF3(V_4S , V_8H , V_8H ), \
404 1.1 christos QLF3(V_2D , V_4S , V_4S ), \
405 1.1 christos }
406 1.1 christos
407 1.1 christos /* e.g. TBL. */
408 1.1 christos #define QL_TABLE \
409 1.1 christos { \
410 1.1 christos QLF3(V_8B , V_16B, V_8B ), \
411 1.1 christos QLF3(V_16B, V_16B, V_16B), \
412 1.1 christos }
413 1.1 christos
414 1.1 christos /* e.g. SHA1H. */
415 1.1 christos #define QL_2SAMES \
416 1.1 christos { \
417 1.1 christos QLF2(S_S, S_S), \
418 1.1 christos }
419 1.1 christos
420 1.1 christos /* e.g. ABS <V><d>, <V><n>. */
421 1.1 christos #define QL_2SAMED \
422 1.1 christos { \
423 1.1 christos QLF2(S_D, S_D), \
424 1.1 christos }
425 1.1 christos
426 1.1 christos /* e.g. CMGT <V><d>, <V><n>, #0. */
427 1.1 christos #define QL_SISD_CMP_0 \
428 1.1 christos { \
429 1.1 christos QLF3(S_D, S_D, NIL), \
430 1.1 christos }
431 1.1 christos
432 1.1 christos /* e.g. FCMEQ <V><d>, <V><n>, #0. */
433 1.1 christos #define QL_SISD_FCMP_0 \
434 1.1 christos { \
435 1.1 christos QLF3(S_S, S_S, NIL), \
436 1.1 christos QLF3(S_D, S_D, NIL), \
437 1.1 christos }
438 1.1 christos
439 1.1 christos /* e.g. FMAXNMP <V><d>, <Vn>.<T>. */
440 1.1 christos #define QL_SISD_PAIR \
441 1.1 christos { \
442 1.1 christos QLF2(S_S, V_2S), \
443 1.1 christos QLF2(S_D, V_2D), \
444 1.1 christos }
445 1.1 christos
446 1.1 christos /* e.g. ADDP <V><d>, <Vn>.<T>. */
447 1.1 christos #define QL_SISD_PAIR_D \
448 1.1 christos { \
449 1.1 christos QLF2(S_D, V_2D), \
450 1.1 christos }
451 1.1 christos
452 1.1 christos /* e.g. DUP <V><d>, <Vn>.<T>[<index>]. */
453 1.1 christos #define QL_S_2SAME \
454 1.1 christos { \
455 1.1 christos QLF2(S_B, S_B), \
456 1.1 christos QLF2(S_H, S_H), \
457 1.1 christos QLF2(S_S, S_S), \
458 1.1 christos QLF2(S_D, S_D), \
459 1.1 christos }
460 1.1 christos
461 1.1 christos /* e.g. FCVTNS <V><d>, <V><n>. */
462 1.1 christos #define QL_S_2SAMESD \
463 1.1 christos { \
464 1.1 christos QLF2(S_S, S_S), \
465 1.1 christos QLF2(S_D, S_D), \
466 1.1 christos }
467 1.1 christos
468 1.1 christos /* e.g. SQXTN <Vb><d>, <Va><n>. */
469 1.1 christos #define QL_SISD_NARROW \
470 1.1 christos { \
471 1.1 christos QLF2(S_B, S_H), \
472 1.1 christos QLF2(S_H, S_S), \
473 1.1 christos QLF2(S_S, S_D), \
474 1.1 christos }
475 1.1 christos
476 1.1 christos /* e.g. FCVTXN <Vb><d>, <Va><n>. */
477 1.1 christos #define QL_SISD_NARROW_S \
478 1.1 christos { \
479 1.1 christos QLF2(S_S, S_D), \
480 1.1 christos }
481 1.1 christos
482 1.1 christos /* e.g. FCVT. */
483 1.1 christos #define QL_FCVT \
484 1.1 christos { \
485 1.1 christos QLF2(S_S, S_H), \
486 1.1 christos QLF2(S_S, S_D), \
487 1.1 christos QLF2(S_D, S_H), \
488 1.1 christos QLF2(S_D, S_S), \
489 1.1 christos QLF2(S_H, S_S), \
490 1.1 christos QLF2(S_H, S_D), \
491 1.1 christos }
492 1.1 christos
493 1.1 christos /* FMOV <Dd>, <Dn>. */
494 1.1 christos #define QL_FP2 \
495 1.1 christos { \
496 1.1 christos QLF2(S_S, S_S), \
497 1.1 christos QLF2(S_D, S_D), \
498 1.1 christos }
499 1.1 christos
500 1.1 christos /* e.g. SQADD <V><d>, <V><n>, <V><m>. */
501 1.1 christos #define QL_S_3SAME \
502 1.1 christos { \
503 1.1 christos QLF3(S_B, S_B, S_B), \
504 1.1 christos QLF3(S_H, S_H, S_H), \
505 1.1 christos QLF3(S_S, S_S, S_S), \
506 1.1 christos QLF3(S_D, S_D, S_D), \
507 1.1 christos }
508 1.1 christos
509 1.1 christos /* e.g. CMGE <V><d>, <V><n>, <V><m>. */
510 1.1 christos #define QL_S_3SAMED \
511 1.1 christos { \
512 1.1 christos QLF3(S_D, S_D, S_D), \
513 1.1 christos }
514 1.1 christos
515 1.1 christos /* e.g. SQDMULH <V><d>, <V><n>, <V><m>. */
516 1.1 christos #define QL_SISD_HS \
517 1.1 christos { \
518 1.1 christos QLF3(S_H, S_H, S_H), \
519 1.1 christos QLF3(S_S, S_S, S_S), \
520 1.1 christos }
521 1.1 christos
522 1.1 christos /* e.g. SQDMLAL <Va><d>, <Vb><n>, <Vb><m>. */
523 1.1 christos #define QL_SISDL_HS \
524 1.1 christos { \
525 1.1 christos QLF3(S_S, S_H, S_H), \
526 1.1 christos QLF3(S_D, S_S, S_S), \
527 1.1 christos }
528 1.1 christos
529 1.1 christos /* FMUL <Sd>, <Sn>, <Sm>. */
530 1.1 christos #define QL_FP3 \
531 1.1 christos { \
532 1.1 christos QLF3(S_S, S_S, S_S), \
533 1.1 christos QLF3(S_D, S_D, S_D), \
534 1.1 christos }
535 1.1 christos
536 1.1 christos /* FMADD <Dd>, <Dn>, <Dm>, <Da>. */
537 1.1 christos #define QL_FP4 \
538 1.1 christos { \
539 1.1 christos QLF4(S_S, S_S, S_S, S_S), \
540 1.1 christos QLF4(S_D, S_D, S_D, S_D), \
541 1.1 christos }
542 1.1 christos
543 1.1 christos /* e.g. FCMP <Dn>, #0.0. */
544 1.1 christos #define QL_DST_SD \
545 1.1 christos { \
546 1.1 christos QLF2(S_S, NIL), \
547 1.1 christos QLF2(S_D, NIL), \
548 1.1 christos }
549 1.1 christos
550 1.1 christos /* FCSEL <Sd>, <Sn>, <Sm>, <cond>. */
551 1.1 christos #define QL_FP_COND \
552 1.1 christos { \
553 1.1 christos QLF4(S_S, S_S, S_S, NIL), \
554 1.1 christos QLF4(S_D, S_D, S_D, NIL), \
555 1.1 christos }
556 1.1 christos
557 1.1 christos /* e.g. CCMN <Xn>, <Xm>, #<nzcv>, <cond>. */
558 1.1 christos #define QL_CCMP \
559 1.1 christos { \
560 1.1 christos QLF4(W, W, NIL, NIL), \
561 1.1 christos QLF4(X, X, NIL, NIL), \
562 1.1 christos }
563 1.1 christos
564 1.1 christos /* e.g. CCMN <Xn>, #<imm>, #<nzcv>, <cond>, */
565 1.1 christos #define QL_CCMP_IMM \
566 1.1 christos { \
567 1.1 christos QLF4(W, NIL, NIL, NIL), \
568 1.1 christos QLF4(X, NIL, NIL, NIL), \
569 1.1 christos }
570 1.1 christos
571 1.1 christos /* e.g. FCCMP <Sn>, <Sm>, #<nzcv>, <cond>. */
572 1.1 christos #define QL_FCCMP \
573 1.1 christos { \
574 1.1 christos QLF4(S_S, S_S, NIL, NIL), \
575 1.1 christos QLF4(S_D, S_D, NIL, NIL), \
576 1.1 christos }
577 1.1 christos
578 1.1 christos /* e.g. DUP <Vd>.<T>, <Vn>.<Ts>[<index>]. */
579 1.1 christos #define QL_DUP_VX \
580 1.1 christos { \
581 1.1 christos QLF2(V_8B , S_B ), \
582 1.1 christos QLF2(V_16B, S_B ), \
583 1.1 christos QLF2(V_4H , S_H ), \
584 1.1 christos QLF2(V_8H , S_H ), \
585 1.1 christos QLF2(V_2S , S_S ), \
586 1.1 christos QLF2(V_4S , S_S ), \
587 1.1 christos QLF2(V_2D , S_D ), \
588 1.1 christos }
589 1.1 christos
590 1.1 christos /* e.g. DUP <Vd>.<T>, <Wn>. */
591 1.1 christos #define QL_DUP_VR \
592 1.1 christos { \
593 1.1 christos QLF2(V_8B , W ), \
594 1.1 christos QLF2(V_16B, W ), \
595 1.1 christos QLF2(V_4H , W ), \
596 1.1 christos QLF2(V_8H , W ), \
597 1.1 christos QLF2(V_2S , W ), \
598 1.1 christos QLF2(V_4S , W ), \
599 1.1 christos QLF2(V_2D , X ), \
600 1.1 christos }
601 1.1 christos
602 1.1 christos /* e.g. INS <Vd>.<Ts>[<index>], <Wn>. */
603 1.1 christos #define QL_INS_XR \
604 1.1 christos { \
605 1.1 christos QLF2(S_H , W ), \
606 1.1 christos QLF2(S_S , W ), \
607 1.1 christos QLF2(S_D , X ), \
608 1.1 christos QLF2(S_B , W ), \
609 1.1 christos }
610 1.1 christos
611 1.1 christos /* e.g. SMOV <Wd>, <Vn>.<Ts>[<index>]. */
612 1.1 christos #define QL_SMOV \
613 1.1 christos { \
614 1.1 christos QLF2(W , S_H), \
615 1.1 christos QLF2(X , S_H), \
616 1.1 christos QLF2(X , S_S), \
617 1.1 christos QLF2(W , S_B), \
618 1.1 christos QLF2(X , S_B), \
619 1.1 christos }
620 1.1 christos
621 1.1 christos /* e.g. UMOV <Wd>, <Vn>.<Ts>[<index>]. */
622 1.1 christos #define QL_UMOV \
623 1.1 christos { \
624 1.1 christos QLF2(W , S_H), \
625 1.1 christos QLF2(W , S_S), \
626 1.1 christos QLF2(X , S_D), \
627 1.1 christos QLF2(W , S_B), \
628 1.1 christos }
629 1.1 christos
630 1.1 christos /* e.g. MOV <Wd>, <Vn>.<Ts>[<index>]. */
631 1.1 christos #define QL_MOV \
632 1.1 christos { \
633 1.1 christos QLF2(W , S_S), \
634 1.1 christos QLF2(X , S_D), \
635 1.1 christos }
636 1.1 christos
637 1.1 christos /* e.g. SUQADD <Vd>.<T>, <Vn>.<T>. */
638 1.1 christos #define QL_V2SAME \
639 1.1 christos { \
640 1.1 christos QLF2(V_8B , V_8B ), \
641 1.1 christos QLF2(V_16B, V_16B), \
642 1.1 christos QLF2(V_4H , V_4H ), \
643 1.1 christos QLF2(V_8H , V_8H ), \
644 1.1 christos QLF2(V_2S , V_2S ), \
645 1.1 christos QLF2(V_4S , V_4S ), \
646 1.1 christos QLF2(V_2D , V_2D ), \
647 1.1 christos }
648 1.1 christos
649 1.1 christos /* e.g. URSQRTE <Vd>.<T>, <Vn>.<T>. */
650 1.1 christos #define QL_V2SAMES \
651 1.1 christos { \
652 1.1 christos QLF2(V_2S , V_2S ), \
653 1.1 christos QLF2(V_4S , V_4S ), \
654 1.1 christos }
655 1.1 christos
656 1.1 christos /* e.g. REV32 <Vd>.<T>, <Vn>.<T>. */
657 1.1 christos #define QL_V2SAMEBH \
658 1.1 christos { \
659 1.1 christos QLF2(V_8B , V_8B ), \
660 1.1 christos QLF2(V_16B, V_16B), \
661 1.1 christos QLF2(V_4H , V_4H ), \
662 1.1 christos QLF2(V_8H , V_8H ), \
663 1.1 christos }
664 1.1 christos
665 1.1 christos /* e.g. FRINTN <Vd>.<T>, <Vn>.<T>. */
666 1.1 christos #define QL_V2SAMESD \
667 1.1 christos { \
668 1.1 christos QLF2(V_2S , V_2S ), \
669 1.1 christos QLF2(V_4S , V_4S ), \
670 1.1 christos QLF2(V_2D , V_2D ), \
671 1.1 christos }
672 1.1 christos
673 1.1 christos /* e.g. REV64 <Vd>.<T>, <Vn>.<T>. */
674 1.1 christos #define QL_V2SAMEBHS \
675 1.1 christos { \
676 1.1 christos QLF2(V_8B , V_8B ), \
677 1.1 christos QLF2(V_16B, V_16B), \
678 1.1 christos QLF2(V_4H , V_4H ), \
679 1.1 christos QLF2(V_8H , V_8H ), \
680 1.1 christos QLF2(V_2S , V_2S ), \
681 1.1 christos QLF2(V_4S , V_4S ), \
682 1.1 christos }
683 1.1 christos
684 1.1 christos /* e.g. REV16 <Vd>.<T>, <Vn>.<T>. */
685 1.1 christos #define QL_V2SAMEB \
686 1.1 christos { \
687 1.1 christos QLF2(V_8B , V_8B ), \
688 1.1 christos QLF2(V_16B, V_16B), \
689 1.1 christos }
690 1.1 christos
691 1.1 christos /* e.g. SADDLP <Vd>.<Ta>, <Vn>.<Tb>. */
692 1.1 christos #define QL_V2PAIRWISELONGBHS \
693 1.1 christos { \
694 1.1 christos QLF2(V_4H , V_8B ), \
695 1.1 christos QLF2(V_8H , V_16B), \
696 1.1 christos QLF2(V_2S , V_4H ), \
697 1.1 christos QLF2(V_4S , V_8H ), \
698 1.1 christos QLF2(V_1D , V_2S ), \
699 1.1 christos QLF2(V_2D , V_4S ), \
700 1.1 christos }
701 1.1 christos
702 1.1 christos /* e.g. SHLL<Q> <Vd>.<Ta>, <Vn>.<Tb>, #<shift>. */
703 1.1 christos #define QL_V2LONGBHS \
704 1.1 christos { \
705 1.1 christos QLF2(V_8H , V_8B ), \
706 1.1 christos QLF2(V_4S , V_4H ), \
707 1.1 christos QLF2(V_2D , V_2S ), \
708 1.1 christos }
709 1.1 christos
710 1.1 christos /* e.g. SHLL<Q> <Vd>.<Ta>, <Vn>.<Tb>, #<shift>. */
711 1.1 christos #define QL_V2LONGBHS2 \
712 1.1 christos { \
713 1.1 christos QLF2(V_8H , V_16B), \
714 1.1 christos QLF2(V_4S , V_8H ), \
715 1.1 christos QLF2(V_2D , V_4S ), \
716 1.1 christos }
717 1.1 christos
718 1.1 christos /* */
719 1.1 christos #define QL_V3SAME \
720 1.1 christos { \
721 1.1 christos QLF3(V_8B , V_8B , V_8B ), \
722 1.1 christos QLF3(V_16B, V_16B, V_16B), \
723 1.1 christos QLF3(V_4H , V_4H , V_4H ), \
724 1.1 christos QLF3(V_8H , V_8H , V_8H ), \
725 1.1 christos QLF3(V_2S , V_2S , V_2S ), \
726 1.1 christos QLF3(V_4S , V_4S , V_4S ), \
727 1.1 christos QLF3(V_2D , V_2D , V_2D ) \
728 1.1 christos }
729 1.1 christos
730 1.1 christos /* e.g. SHADD. */
731 1.1 christos #define QL_V3SAMEBHS \
732 1.1 christos { \
733 1.1 christos QLF3(V_8B , V_8B , V_8B ), \
734 1.1 christos QLF3(V_16B, V_16B, V_16B), \
735 1.1 christos QLF3(V_4H , V_4H , V_4H ), \
736 1.1 christos QLF3(V_8H , V_8H , V_8H ), \
737 1.1 christos QLF3(V_2S , V_2S , V_2S ), \
738 1.1 christos QLF3(V_4S , V_4S , V_4S ), \
739 1.1 christos }
740 1.1 christos
741 1.1 christos /* e.g. FCVTXN<Q> <Vd>.<Tb>, <Vn>.<Ta>. */
742 1.1 christos #define QL_V2NARRS \
743 1.1 christos { \
744 1.1 christos QLF2(V_2S , V_2D ), \
745 1.1 christos }
746 1.1 christos
747 1.1 christos /* e.g. FCVTXN<Q> <Vd>.<Tb>, <Vn>.<Ta>. */
748 1.1 christos #define QL_V2NARRS2 \
749 1.1 christos { \
750 1.1 christos QLF2(V_4S , V_2D ), \
751 1.1 christos }
752 1.1 christos
753 1.1 christos /* e.g. FCVTN<Q> <Vd>.<Tb>, <Vn>.<Ta>. */
754 1.1 christos #define QL_V2NARRHS \
755 1.1 christos { \
756 1.1 christos QLF2(V_4H , V_4S ), \
757 1.1 christos QLF2(V_2S , V_2D ), \
758 1.1 christos }
759 1.1 christos
760 1.1 christos /* e.g. FCVTN<Q> <Vd>.<Tb>, <Vn>.<Ta>. */
761 1.1 christos #define QL_V2NARRHS2 \
762 1.1 christos { \
763 1.1 christos QLF2(V_8H , V_4S ), \
764 1.1 christos QLF2(V_4S , V_2D ), \
765 1.1 christos }
766 1.1 christos
767 1.1 christos /* e.g. FCVTL<Q> <Vd>.<Ta>, <Vn>.<Tb>. */
768 1.1 christos #define QL_V2LONGHS \
769 1.1 christos { \
770 1.1 christos QLF2(V_4S , V_4H ), \
771 1.1 christos QLF2(V_2D , V_2S ), \
772 1.1 christos }
773 1.1 christos
774 1.1 christos /* e.g. FCVTL<Q> <Vd>.<Ta>, <Vn>.<Tb>. */
775 1.1 christos #define QL_V2LONGHS2 \
776 1.1 christos { \
777 1.1 christos QLF2(V_4S , V_8H ), \
778 1.1 christos QLF2(V_2D , V_4S ), \
779 1.1 christos }
780 1.1 christos
781 1.1 christos /* e.g. XTN<Q> <Vd>.<Tb>, <Vn>.<Ta>. */
782 1.1 christos #define QL_V2NARRBHS \
783 1.1 christos { \
784 1.1 christos QLF2(V_8B , V_8H ), \
785 1.1 christos QLF2(V_4H , V_4S ), \
786 1.1 christos QLF2(V_2S , V_2D ), \
787 1.1 christos }
788 1.1 christos
789 1.1 christos /* e.g. XTN<Q> <Vd>.<Tb>, <Vn>.<Ta>. */
790 1.1 christos #define QL_V2NARRBHS2 \
791 1.1 christos { \
792 1.1 christos QLF2(V_16B, V_8H ), \
793 1.1 christos QLF2(V_8H , V_4S ), \
794 1.1 christos QLF2(V_4S , V_2D ), \
795 1.1 christos }
796 1.1 christos
797 1.1 christos /* e.g. ORR. */
798 1.1 christos #define QL_V2SAMEB \
799 1.1 christos { \
800 1.1 christos QLF2(V_8B , V_8B ), \
801 1.1 christos QLF2(V_16B, V_16B), \
802 1.1 christos }
803 1.1 christos
804 1.1 christos /* e.g. AESE. */
805 1.1 christos #define QL_V2SAME16B \
806 1.1 christos { \
807 1.1 christos QLF2(V_16B, V_16B), \
808 1.1 christos }
809 1.1 christos
810 1.1 christos /* e.g. SHA1SU1. */
811 1.1 christos #define QL_V2SAME4S \
812 1.1 christos { \
813 1.1 christos QLF2(V_4S, V_4S), \
814 1.1 christos }
815 1.1 christos
816 1.1 christos /* e.g. SHA1SU0. */
817 1.1 christos #define QL_V3SAME4S \
818 1.1 christos { \
819 1.1 christos QLF3(V_4S, V_4S, V_4S), \
820 1.1 christos }
821 1.1 christos
822 1.1 christos /* e.g. SHADD. */
823 1.1 christos #define QL_V3SAMEB \
824 1.1 christos { \
825 1.1 christos QLF3(V_8B , V_8B , V_8B ), \
826 1.1 christos QLF3(V_16B, V_16B, V_16B), \
827 1.1 christos }
828 1.1 christos
829 1.1 christos /* e.g. EXT <Vd>.<T>, <Vn>.<T>, <Vm>.<T>, #<index>. */
830 1.1 christos #define QL_VEXT \
831 1.1 christos { \
832 1.1 christos QLF4(V_8B , V_8B , V_8B , imm_0_7), \
833 1.1 christos QLF4(V_16B, V_16B, V_16B, imm_0_15), \
834 1.1 christos }
835 1.1 christos
836 1.1 christos /* e.g. . */
837 1.1 christos #define QL_V3SAMEHS \
838 1.1 christos { \
839 1.1 christos QLF3(V_4H , V_4H , V_4H ), \
840 1.1 christos QLF3(V_8H , V_8H , V_8H ), \
841 1.1 christos QLF3(V_2S , V_2S , V_2S ), \
842 1.1 christos QLF3(V_4S , V_4S , V_4S ), \
843 1.1 christos }
844 1.1 christos
845 1.1 christos /* */
846 1.1 christos #define QL_V3SAMESD \
847 1.1 christos { \
848 1.1 christos QLF3(V_2S , V_2S , V_2S ), \
849 1.1 christos QLF3(V_4S , V_4S , V_4S ), \
850 1.1 christos QLF3(V_2D , V_2D , V_2D ) \
851 1.1 christos }
852 1.1 christos
853 1.1 christos /* e.g. SQDMLAL<Q> <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>. */
854 1.1 christos #define QL_V3LONGHS \
855 1.1 christos { \
856 1.1 christos QLF3(V_4S , V_4H , V_4H ), \
857 1.1 christos QLF3(V_2D , V_2S , V_2S ), \
858 1.1 christos }
859 1.1 christos
860 1.1 christos /* e.g. SQDMLAL<Q> <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>. */
861 1.1 christos #define QL_V3LONGHS2 \
862 1.1 christos { \
863 1.1 christos QLF3(V_4S , V_8H , V_8H ), \
864 1.1 christos QLF3(V_2D , V_4S , V_4S ), \
865 1.1 christos }
866 1.1 christos
867 1.1 christos /* e.g. SADDL<Q> <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>. */
868 1.1 christos #define QL_V3LONGBHS \
869 1.1 christos { \
870 1.1 christos QLF3(V_8H , V_8B , V_8B ), \
871 1.1 christos QLF3(V_4S , V_4H , V_4H ), \
872 1.1 christos QLF3(V_2D , V_2S , V_2S ), \
873 1.1 christos }
874 1.1 christos
875 1.1 christos /* e.g. SADDL<Q> <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>. */
876 1.1 christos #define QL_V3LONGBHS2 \
877 1.1 christos { \
878 1.1 christos QLF3(V_8H , V_16B , V_16B ), \
879 1.1 christos QLF3(V_4S , V_8H , V_8H ), \
880 1.1 christos QLF3(V_2D , V_4S , V_4S ), \
881 1.1 christos }
882 1.1 christos
883 1.1 christos /* e.g. SADDW<Q> <Vd>.<Ta>, <Vn>.<Ta>, <Vm>.<Tb>. */
884 1.1 christos #define QL_V3WIDEBHS \
885 1.1 christos { \
886 1.1 christos QLF3(V_8H , V_8H , V_8B ), \
887 1.1 christos QLF3(V_4S , V_4S , V_4H ), \
888 1.1 christos QLF3(V_2D , V_2D , V_2S ), \
889 1.1 christos }
890 1.1 christos
891 1.1 christos /* e.g. SADDW<Q> <Vd>.<Ta>, <Vn>.<Ta>, <Vm>.<Tb>. */
892 1.1 christos #define QL_V3WIDEBHS2 \
893 1.1 christos { \
894 1.1 christos QLF3(V_8H , V_8H , V_16B ), \
895 1.1 christos QLF3(V_4S , V_4S , V_8H ), \
896 1.1 christos QLF3(V_2D , V_2D , V_4S ), \
897 1.1 christos }
898 1.1 christos
899 1.1 christos /* e.g. ADDHN<Q> <Vd>.<Tb>, <Vn>.<Ta>, <Vm>.<Ta>. */
900 1.1 christos #define QL_V3NARRBHS \
901 1.1 christos { \
902 1.1 christos QLF3(V_8B , V_8H , V_8H ), \
903 1.1 christos QLF3(V_4H , V_4S , V_4S ), \
904 1.1 christos QLF3(V_2S , V_2D , V_2D ), \
905 1.1 christos }
906 1.1 christos
907 1.1 christos /* e.g. ADDHN<Q> <Vd>.<Tb>, <Vn>.<Ta>, <Vm>.<Ta>. */
908 1.1 christos #define QL_V3NARRBHS2 \
909 1.1 christos { \
910 1.1 christos QLF3(V_16B , V_8H , V_8H ), \
911 1.1 christos QLF3(V_8H , V_4S , V_4S ), \
912 1.1 christos QLF3(V_4S , V_2D , V_2D ), \
913 1.1 christos }
914 1.1 christos
915 1.1 christos /* e.g. PMULL. */
916 1.1 christos #define QL_V3LONGB \
917 1.1 christos { \
918 1.1 christos QLF3(V_8H , V_8B , V_8B ), \
919 1.1 christos }
920 1.1 christos
921 1.1 christos /* e.g. PMULL crypto. */
922 1.1 christos #define QL_V3LONGD \
923 1.1 christos { \
924 1.1 christos QLF3(V_1Q , V_1D , V_1D ), \
925 1.1 christos }
926 1.1 christos
927 1.1 christos /* e.g. PMULL2. */
928 1.1 christos #define QL_V3LONGB2 \
929 1.1 christos { \
930 1.1 christos QLF3(V_8H , V_16B, V_16B), \
931 1.1 christos }
932 1.1 christos
933 1.1 christos /* e.g. PMULL2 crypto. */
934 1.1 christos #define QL_V3LONGD2 \
935 1.1 christos { \
936 1.1 christos QLF3(V_1Q , V_2D , V_2D ), \
937 1.1 christos }
938 1.1 christos
939 1.1 christos /* e.g. SHA1C. */
940 1.1 christos #define QL_SHAUPT \
941 1.1 christos { \
942 1.1 christos QLF3(S_Q, S_S, V_4S), \
943 1.1 christos }
944 1.1 christos
945 1.1 christos /* e.g. SHA256H2. */
946 1.1 christos #define QL_SHA256UPT \
947 1.1 christos { \
948 1.1 christos QLF3(S_Q, S_Q, V_4S), \
949 1.1 christos }
950 1.1 christos
951 1.1 christos /* e.g. LDXRB <Wt>, [<Xn|SP>{,#0}]. */
952 1.1 christos #define QL_W1_LDST_EXC \
953 1.1 christos { \
954 1.1 christos QLF2(W, NIL), \
955 1.1 christos }
956 1.1 christos
957 1.1 christos /* e.g. LDXR <Xt>, [<Xn|SP>{,#0}]. */
958 1.1 christos #define QL_R1NIL \
959 1.1 christos { \
960 1.1 christos QLF2(W, NIL), \
961 1.1 christos QLF2(X, NIL), \
962 1.1 christos }
963 1.1 christos
964 1.1 christos /* e.g. STXRB <Ws>, <Wt>, [<Xn|SP>{,#0}]. */
965 1.1 christos #define QL_W2_LDST_EXC \
966 1.1 christos { \
967 1.1 christos QLF3(W, W, NIL), \
968 1.1 christos }
969 1.1 christos
970 1.1 christos /* e.g. STXR <Ws>, <Xt>, [<Xn|SP>{,#0}]. */
971 1.1 christos #define QL_R2_LDST_EXC \
972 1.1 christos { \
973 1.1 christos QLF3(W, W, NIL), \
974 1.1 christos QLF3(W, X, NIL), \
975 1.1 christos }
976 1.1 christos
977 1.1 christos /* e.g. LDXP <Xt1>, <Xt2>, [<Xn|SP>{,#0}]. */
978 1.1 christos #define QL_R2NIL \
979 1.1 christos { \
980 1.1 christos QLF3(W, W, NIL), \
981 1.1 christos QLF3(X, X, NIL), \
982 1.1 christos }
983 1.1 christos
984 1.3 christos /* e.g. CASP <Xt1>, <Xt1+1>, <Xt2>, <Xt2+1>, [<Xn|SP>{,#0}]. */
985 1.3 christos #define QL_R4NIL \
986 1.3 christos { \
987 1.3 christos QLF5(W, W, W, W, NIL), \
988 1.3 christos QLF5(X, X, X, X, NIL), \
989 1.3 christos }
990 1.3 christos
991 1.1 christos /* e.g. STXP <Ws>, <Xt1>, <Xt2>, [<Xn|SP>{,#0}]. */
992 1.1 christos #define QL_R3_LDST_EXC \
993 1.1 christos { \
994 1.1 christos QLF4(W, W, W, NIL), \
995 1.1 christos QLF4(W, X, X, NIL), \
996 1.1 christos }
997 1.1 christos
998 1.1 christos /* e.g. STR <Qt>, [<Xn|SP>, <R><m>{, <extend> {<amount>}}]. */
999 1.1 christos #define QL_LDST_FP \
1000 1.1 christos { \
1001 1.1 christos QLF2(S_B, S_B), \
1002 1.1 christos QLF2(S_H, S_H), \
1003 1.1 christos QLF2(S_S, S_S), \
1004 1.1 christos QLF2(S_D, S_D), \
1005 1.1 christos QLF2(S_Q, S_Q), \
1006 1.1 christos }
1007 1.1 christos
1008 1.1 christos /* e.g. STR <Xt>, [<Xn|SP>, <R><m>{, <extend> {<amount>}}]. */
1009 1.1 christos #define QL_LDST_R \
1010 1.1 christos { \
1011 1.1 christos QLF2(W, S_S), \
1012 1.1 christos QLF2(X, S_D), \
1013 1.1 christos }
1014 1.1 christos
1015 1.1 christos /* e.g. STRB <Wt>, [<Xn|SP>, <R><m>{, <extend> {<amount>}}]. */
1016 1.1 christos #define QL_LDST_W8 \
1017 1.1 christos { \
1018 1.1 christos QLF2(W, S_B), \
1019 1.1 christos }
1020 1.1 christos
1021 1.1 christos /* e.g. LDRSB <Wt>, [<Xn|SP>, <R><m>{, <extend> {<amount>}}]. */
1022 1.1 christos #define QL_LDST_R8 \
1023 1.1 christos { \
1024 1.1 christos QLF2(W, S_B), \
1025 1.1 christos QLF2(X, S_B), \
1026 1.1 christos }
1027 1.1 christos
1028 1.1 christos /* e.g. STRH <Wt>, [<Xn|SP>, <R><m>{, <extend> {<amount>}}]. */
1029 1.1 christos #define QL_LDST_W16 \
1030 1.1 christos { \
1031 1.1 christos QLF2(W, S_H), \
1032 1.1 christos }
1033 1.1 christos
1034 1.1 christos /* e.g. LDRSW <Xt>, [<Xn|SP>, <R><m>{, <extend> {<amount>}}]. */
1035 1.1 christos #define QL_LDST_X32 \
1036 1.1 christos { \
1037 1.1 christos QLF2(X, S_S), \
1038 1.1 christos }
1039 1.1 christos
1040 1.1 christos /* e.g. LDRSH <Wt>, [<Xn|SP>, <R><m>{, <extend> {<amount>}}]. */
1041 1.1 christos #define QL_LDST_R16 \
1042 1.1 christos { \
1043 1.1 christos QLF2(W, S_H), \
1044 1.1 christos QLF2(X, S_H), \
1045 1.1 christos }
1046 1.1 christos
1047 1.1 christos /* e.g. PRFM <prfop>, [<Xn|SP>, <R><m>{, <extend> {<amount>}}]. */
1048 1.1 christos #define QL_LDST_PRFM \
1049 1.1 christos { \
1050 1.1 christos QLF2(NIL, S_D), \
1051 1.1 christos }
1052 1.1 christos
1053 1.1 christos /* e.g. LDPSW <Xt1>, <Xt2>, [<Xn|SP>{, #<imm>}]. */
1054 1.1 christos #define QL_LDST_PAIR_X32 \
1055 1.1 christos { \
1056 1.1 christos QLF3(X, X, S_S), \
1057 1.1 christos }
1058 1.1 christos
1059 1.1 christos /* e.g. STP <Wt1>, <Wt2>, [<Xn|SP>, #<imm>]!. */
1060 1.1 christos #define QL_LDST_PAIR_R \
1061 1.1 christos { \
1062 1.1 christos QLF3(W, W, S_S), \
1063 1.1 christos QLF3(X, X, S_D), \
1064 1.1 christos }
1065 1.1 christos
1066 1.1 christos /* e.g. STNP <Qt1>, <Qt2>, [<Xn|SP>{, #<imm>}]. */
1067 1.1 christos #define QL_LDST_PAIR_FP \
1068 1.1 christos { \
1069 1.1 christos QLF3(S_S, S_S, S_S), \
1070 1.1 christos QLF3(S_D, S_D, S_D), \
1071 1.1 christos QLF3(S_Q, S_Q, S_Q), \
1072 1.1 christos }
1073 1.1 christos
1074 1.1 christos /* e.g. LD3 {<Vt>.<T>, <Vt2>.<T>, <Vt3>.<T>}, [<Xn|SP>]. */
1075 1.1 christos #define QL_SIMD_LDST \
1076 1.1 christos { \
1077 1.1 christos QLF2(V_8B, NIL), \
1078 1.1 christos QLF2(V_16B, NIL), \
1079 1.1 christos QLF2(V_4H, NIL), \
1080 1.1 christos QLF2(V_8H, NIL), \
1081 1.1 christos QLF2(V_2S, NIL), \
1082 1.1 christos QLF2(V_4S, NIL), \
1083 1.1 christos QLF2(V_2D, NIL), \
1084 1.1 christos }
1085 1.1 christos
1086 1.1 christos /* e.g. LD1 {<Vt>.<T>, <Vt2>.<T>, <Vt3>.<T>}, [<Xn|SP>]. */
1087 1.1 christos #define QL_SIMD_LDST_ANY \
1088 1.1 christos { \
1089 1.1 christos QLF2(V_8B, NIL), \
1090 1.1 christos QLF2(V_16B, NIL), \
1091 1.1 christos QLF2(V_4H, NIL), \
1092 1.1 christos QLF2(V_8H, NIL), \
1093 1.1 christos QLF2(V_2S, NIL), \
1094 1.1 christos QLF2(V_4S, NIL), \
1095 1.1 christos QLF2(V_1D, NIL), \
1096 1.1 christos QLF2(V_2D, NIL), \
1097 1.1 christos }
1098 1.1 christos
1099 1.1 christos /* e.g. LD4 {<Vt>.<T>, <Vt2a>.<T>, <Vt3a>.<T>, <Vt4a>.<T>}[<index>], [<Xn|SP>]. */
1100 1.1 christos #define QL_SIMD_LDSTONE \
1101 1.1 christos { \
1102 1.1 christos QLF2(S_B, NIL), \
1103 1.1 christos QLF2(S_H, NIL), \
1104 1.1 christos QLF2(S_S, NIL), \
1105 1.1 christos QLF2(S_D, NIL), \
1106 1.1 christos }
1107 1.1 christos
1108 1.1 christos /* e.g. ADDV <V><d>, <Vn>.<T>. */
1109 1.1 christos #define QL_XLANES \
1110 1.1 christos { \
1111 1.1 christos QLF2(S_B, V_8B), \
1112 1.1 christos QLF2(S_B, V_16B), \
1113 1.1 christos QLF2(S_H, V_4H), \
1114 1.1 christos QLF2(S_H, V_8H), \
1115 1.1 christos QLF2(S_S, V_4S), \
1116 1.1 christos }
1117 1.1 christos
1118 1.1 christos /* e.g. FMINV <V><d>, <Vn>.<T>. */
1119 1.1 christos #define QL_XLANES_FP \
1120 1.1 christos { \
1121 1.1 christos QLF2(S_S, V_4S), \
1122 1.1 christos }
1123 1.1 christos
1124 1.1 christos /* e.g. SADDLV <V><d>, <Vn>.<T>. */
1125 1.1 christos #define QL_XLANES_L \
1126 1.1 christos { \
1127 1.1 christos QLF2(S_H, V_8B), \
1128 1.1 christos QLF2(S_H, V_16B), \
1129 1.1 christos QLF2(S_S, V_4H), \
1130 1.1 christos QLF2(S_S, V_8H), \
1131 1.1 christos QLF2(S_D, V_4S), \
1132 1.1 christos }
1133 1.1 christos
1134 1.1 christos /* e.g. MUL <Vd>.<T>, <Vn>.<T>, <Vm>.<Ts>[<index>]. */
1135 1.1 christos #define QL_ELEMENT \
1136 1.1 christos { \
1137 1.1 christos QLF3(V_4H, V_4H, S_H), \
1138 1.1 christos QLF3(V_8H, V_8H, S_H), \
1139 1.1 christos QLF3(V_2S, V_2S, S_S), \
1140 1.1 christos QLF3(V_4S, V_4S, S_S), \
1141 1.1 christos }
1142 1.1 christos
1143 1.1 christos /* e.g. SMLAL <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Ts>[<index>]. */
1144 1.1 christos #define QL_ELEMENT_L \
1145 1.1 christos { \
1146 1.1 christos QLF3(V_4S, V_4H, S_H), \
1147 1.1 christos QLF3(V_2D, V_2S, S_S), \
1148 1.1 christos }
1149 1.1 christos
1150 1.1 christos /* e.g. SMLAL2 <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Ts>[<index>]. */
1151 1.1 christos #define QL_ELEMENT_L2 \
1152 1.1 christos { \
1153 1.1 christos QLF3(V_4S, V_8H, S_H), \
1154 1.1 christos QLF3(V_2D, V_4S, S_S), \
1155 1.1 christos }
1156 1.1 christos
1157 1.1 christos /* e.g. FMLA <V><d>, <V><n>, <Vm>.<Ts>[<index>]. */
1158 1.1 christos #define QL_ELEMENT_FP \
1159 1.1 christos { \
1160 1.1 christos QLF3(V_2S, V_2S, S_S), \
1161 1.1 christos QLF3(V_4S, V_4S, S_S), \
1162 1.1 christos QLF3(V_2D, V_2D, S_D), \
1163 1.1 christos }
1164 1.1 christos
1165 1.1 christos /* e.g. MOVI <Vd>.4S, #<imm8> {, LSL #<amount>}. */
1166 1.1 christos #define QL_SIMD_IMM_S0W \
1167 1.1 christos { \
1168 1.1 christos QLF2(V_2S, LSL), \
1169 1.1 christos QLF2(V_4S, LSL), \
1170 1.1 christos }
1171 1.1 christos
1172 1.1 christos /* e.g. MOVI <Vd>.4S, #<imm8>, MSL #<amount>. */
1173 1.1 christos #define QL_SIMD_IMM_S1W \
1174 1.1 christos { \
1175 1.1 christos QLF2(V_2S, MSL), \
1176 1.1 christos QLF2(V_4S, MSL), \
1177 1.1 christos }
1178 1.1 christos
1179 1.1 christos /* e.g. MOVI <Vd>.4H, #<imm8> {, LSL #<amount>}. */
1180 1.1 christos #define QL_SIMD_IMM_S0H \
1181 1.1 christos { \
1182 1.1 christos QLF2(V_4H, LSL), \
1183 1.1 christos QLF2(V_8H, LSL), \
1184 1.1 christos }
1185 1.1 christos
1186 1.1 christos /* e.g. FMOV <Vd>.<T>, #<imm>. */
1187 1.1 christos #define QL_SIMD_IMM_S \
1188 1.1 christos { \
1189 1.1 christos QLF2(V_2S, NIL), \
1190 1.1 christos QLF2(V_4S, NIL), \
1191 1.1 christos }
1192 1.1 christos
1193 1.1 christos /* e.g. MOVI <Vd>.8B, #<imm8> {, LSL #<amount>}. */
1194 1.1 christos #define QL_SIMD_IMM_B \
1195 1.1 christos { \
1196 1.1 christos QLF2(V_8B, LSL), \
1197 1.1 christos QLF2(V_16B, LSL), \
1198 1.1 christos }
1199 1.1 christos /* e.g. MOVI <Dd>, #<imm>. */
1200 1.1 christos #define QL_SIMD_IMM_D \
1201 1.1 christos { \
1202 1.1 christos QLF2(S_D, NIL), \
1203 1.1 christos }
1204 1.1 christos
1205 1.1 christos /* e.g. MOVI <Vd>.2D, #<imm>. */
1206 1.1 christos #define QL_SIMD_IMM_V2D \
1207 1.1 christos { \
1208 1.1 christos QLF2(V_2D, NIL), \
1209 1.1 christos }
1210 1.1 christos
1211 1.1 christos /* Opcode table. */
1213 1.1 christos
1214 1.1 christos static const aarch64_feature_set aarch64_feature_v8 =
1215 1.1 christos AARCH64_FEATURE (AARCH64_FEATURE_V8, 0);
1216 1.1 christos static const aarch64_feature_set aarch64_feature_fp =
1217 1.1 christos AARCH64_FEATURE (AARCH64_FEATURE_FP, 0);
1218 1.1 christos static const aarch64_feature_set aarch64_feature_simd =
1219 1.1 christos AARCH64_FEATURE (AARCH64_FEATURE_SIMD, 0);
1220 1.1 christos static const aarch64_feature_set aarch64_feature_crypto =
1221 1.1 christos AARCH64_FEATURE (AARCH64_FEATURE_CRYPTO, 0);
1222 1.1 christos static const aarch64_feature_set aarch64_feature_crc =
1223 1.3 christos AARCH64_FEATURE (AARCH64_FEATURE_CRC, 0);
1224 1.3 christos static const aarch64_feature_set aarch64_feature_lse =
1225 1.5 christos AARCH64_FEATURE (AARCH64_FEATURE_LSE, 0);
1226 1.5 christos static const aarch64_feature_set aarch64_feature_lor =
1227 1.5 christos AARCH64_FEATURE (AARCH64_FEATURE_LOR, 0);
1228 1.5 christos static const aarch64_feature_set aarch64_feature_rdma =
1229 1.1 christos AARCH64_FEATURE (AARCH64_FEATURE_RDMA, 0);
1230 1.1 christos
1231 1.1 christos #define CORE &aarch64_feature_v8
1232 1.1 christos #define FP &aarch64_feature_fp
1233 1.1 christos #define SIMD &aarch64_feature_simd
1234 1.1 christos #define CRYPTO &aarch64_feature_crypto
1235 1.3 christos #define CRC &aarch64_feature_crc
1236 1.5 christos #define LSE &aarch64_feature_lse
1237 1.5 christos #define LOR &aarch64_feature_lor
1238 1.1 christos #define RDMA &aarch64_feature_rdma
1239 1.1 christos
1240 1.1 christos struct aarch64_opcode aarch64_opcode_table[] =
1241 1.1 christos {
1242 1.1 christos /* Add/subtract (with carry). */
1243 1.1 christos {"adc", 0x1a000000, 0x7fe0fc00, addsub_carry, 0, CORE, OP3 (Rd, Rn, Rm), QL_I3SAMER, F_SF},
1244 1.1 christos {"adcs", 0x3a000000, 0x7fe0fc00, addsub_carry, 0, CORE, OP3 (Rd, Rn, Rm), QL_I3SAMER, F_SF},
1245 1.1 christos {"sbc", 0x5a000000, 0x7fe0fc00, addsub_carry, 0, CORE, OP3 (Rd, Rn, Rm), QL_I3SAMER, F_HAS_ALIAS | F_SF},
1246 1.1 christos {"ngc", 0x5a0003e0, 0x7fe0ffe0, addsub_carry, 0, CORE, OP2 (Rd, Rm), QL_I2SAME, F_ALIAS | F_SF},
1247 1.1 christos {"sbcs", 0x7a000000, 0x7fe0fc00, addsub_carry, 0, CORE, OP3 (Rd, Rn, Rm), QL_I3SAMER, F_HAS_ALIAS | F_SF},
1248 1.1 christos {"ngcs", 0x7a0003e0, 0x7fe0ffe0, addsub_carry, 0, CORE, OP2 (Rd, Rm), QL_I2SAME, F_ALIAS | F_SF},
1249 1.1 christos /* Add/subtract (extended register). */
1250 1.1 christos {"add", 0x0b200000, 0x7fe00000, addsub_ext, 0, CORE, OP3 (Rd_SP, Rn_SP, Rm_EXT), QL_I3_EXT, F_SF},
1251 1.1 christos {"adds", 0x2b200000, 0x7fe00000, addsub_ext, 0, CORE, OP3 (Rd, Rn_SP, Rm_EXT), QL_I3_EXT, F_HAS_ALIAS | F_SF},
1252 1.1 christos {"cmn", 0x2b20001f, 0x7fe0001f, addsub_ext, 0, CORE, OP2 (Rn_SP, Rm_EXT), QL_I2_EXT, F_ALIAS | F_SF},
1253 1.1 christos {"sub", 0x4b200000, 0x7fe00000, addsub_ext, 0, CORE, OP3 (Rd_SP, Rn_SP, Rm_EXT), QL_I3_EXT, F_SF},
1254 1.1 christos {"subs", 0x6b200000, 0x7fe00000, addsub_ext, 0, CORE, OP3 (Rd, Rn_SP, Rm_EXT), QL_I3_EXT, F_HAS_ALIAS | F_SF},
1255 1.1 christos {"cmp", 0x6b20001f, 0x7fe0001f, addsub_ext, 0, CORE, OP2 (Rn_SP, Rm_EXT), QL_I2_EXT, F_ALIAS | F_SF},
1256 1.1 christos /* Add/subtract (immediate). */
1257 1.1 christos {"add", 0x11000000, 0x7f000000, addsub_imm, OP_ADD, CORE, OP3 (Rd_SP, Rn_SP, AIMM), QL_R2NIL, F_HAS_ALIAS | F_SF},
1258 1.1 christos {"mov", 0x11000000, 0x7ffffc00, addsub_imm, 0, CORE, OP2 (Rd_SP, Rn_SP), QL_I2SP, F_ALIAS | F_SF},
1259 1.1 christos {"adds", 0x31000000, 0x7f000000, addsub_imm, 0, CORE, OP3 (Rd, Rn_SP, AIMM), QL_R2NIL, F_HAS_ALIAS | F_SF},
1260 1.1 christos {"cmn", 0x3100001f, 0x7f00001f, addsub_imm, 0, CORE, OP2 (Rn_SP, AIMM), QL_R1NIL, F_ALIAS | F_SF},
1261 1.1 christos {"sub", 0x51000000, 0x7f000000, addsub_imm, 0, CORE, OP3 (Rd_SP, Rn_SP, AIMM), QL_R2NIL, F_SF},
1262 1.1 christos {"subs", 0x71000000, 0x7f000000, addsub_imm, 0, CORE, OP3 (Rd, Rn_SP, AIMM), QL_R2NIL, F_HAS_ALIAS | F_SF},
1263 1.1 christos {"cmp", 0x7100001f, 0x7f00001f, addsub_imm, 0, CORE, OP2 (Rn_SP, AIMM), QL_R1NIL, F_ALIAS | F_SF},
1264 1.1 christos /* Add/subtract (shifted register). */
1265 1.1 christos {"add", 0xb000000, 0x7f200000, addsub_shift, 0, CORE, OP3 (Rd, Rn, Rm_SFT), QL_I3SAMER, F_SF},
1266 1.1 christos {"adds", 0x2b000000, 0x7f200000, addsub_shift, 0, CORE, OP3 (Rd, Rn, Rm_SFT), QL_I3SAMER, F_HAS_ALIAS | F_SF},
1267 1.1 christos {"cmn", 0x2b00001f, 0x7f20001f, addsub_shift, 0, CORE, OP2 (Rn, Rm_SFT), QL_I2SAME, F_ALIAS | F_SF},
1268 1.1 christos {"sub", 0x4b000000, 0x7f200000, addsub_shift, 0, CORE, OP3 (Rd, Rn, Rm_SFT), QL_I3SAMER, F_HAS_ALIAS | F_SF},
1269 1.1 christos {"neg", 0x4b0003e0, 0x7f2003e0, addsub_shift, 0, CORE, OP2 (Rd, Rm_SFT), QL_I2SAME, F_ALIAS | F_SF},
1270 1.1 christos {"subs", 0x6b000000, 0x7f200000, addsub_shift, 0, CORE, OP3 (Rd, Rn, Rm_SFT), QL_I3SAMER, F_HAS_ALIAS | F_SF},
1271 1.1 christos {"cmp", 0x6b00001f, 0x7f20001f, addsub_shift, 0, CORE, OP2 (Rn, Rm_SFT), QL_I2SAME, F_ALIAS | F_SF},
1272 1.1 christos {"negs", 0x6b0003e0, 0x7f2003e0, addsub_shift, 0, CORE, OP2 (Rd, Rm_SFT), QL_I2SAME, F_ALIAS | F_SF},
1273 1.1 christos /* AdvSIMD across lanes. */
1274 1.1 christos {"saddlv", 0xe303800, 0xbf3ffc00, asimdall, 0, SIMD, OP2 (Fd, Vn), QL_XLANES_L, F_SIZEQ},
1275 1.1 christos {"smaxv", 0xe30a800, 0xbf3ffc00, asimdall, 0, SIMD, OP2 (Fd, Vn), QL_XLANES, F_SIZEQ},
1276 1.1 christos {"sminv", 0xe31a800, 0xbf3ffc00, asimdall, 0, SIMD, OP2 (Fd, Vn), QL_XLANES, F_SIZEQ},
1277 1.1 christos {"addv", 0xe31b800, 0xbf3ffc00, asimdall, 0, SIMD, OP2 (Fd, Vn), QL_XLANES, F_SIZEQ},
1278 1.1 christos {"uaddlv", 0x2e303800, 0xbf3ffc00, asimdall, 0, SIMD, OP2 (Fd, Vn), QL_XLANES_L, F_SIZEQ},
1279 1.1 christos {"umaxv", 0x2e30a800, 0xbf3ffc00, asimdall, 0, SIMD, OP2 (Fd, Vn), QL_XLANES, F_SIZEQ},
1280 1.1 christos {"uminv", 0x2e31a800, 0xbf3ffc00, asimdall, 0, SIMD, OP2 (Fd, Vn), QL_XLANES, F_SIZEQ},
1281 1.1 christos {"fmaxnmv", 0x2e30c800, 0xbfbffc00, asimdall, 0, SIMD, OP2 (Fd, Vn), QL_XLANES_FP, F_SIZEQ},
1282 1.1 christos {"fmaxv", 0x2e30f800, 0xbfbffc00, asimdall, 0, SIMD, OP2 (Fd, Vn), QL_XLANES_FP, F_SIZEQ},
1283 1.1 christos {"fminnmv", 0x2eb0c800, 0xbfbffc00, asimdall, 0, SIMD, OP2 (Fd, Vn), QL_XLANES_FP, F_SIZEQ},
1284 1.1 christos {"fminv", 0x2eb0f800, 0xbfbffc00, asimdall, 0, SIMD, OP2 (Fd, Vn), QL_XLANES_FP, F_SIZEQ},
1285 1.1 christos /* AdvSIMD three different. */
1286 1.1 christos {"saddl", 0x0e200000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGBHS, F_SIZEQ},
1287 1.1 christos {"saddl2", 0x4e200000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGBHS2, F_SIZEQ},
1288 1.1 christos {"saddw", 0x0e201000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3WIDEBHS, F_SIZEQ},
1289 1.1 christos {"saddw2", 0x4e201000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3WIDEBHS2, F_SIZEQ},
1290 1.1 christos {"ssubl", 0x0e202000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGBHS, F_SIZEQ},
1291 1.1 christos {"ssubl2", 0x4e202000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGBHS2, F_SIZEQ},
1292 1.1 christos {"ssubw", 0x0e203000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3WIDEBHS, F_SIZEQ},
1293 1.1 christos {"ssubw2", 0x4e203000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3WIDEBHS2, F_SIZEQ},
1294 1.1 christos {"addhn", 0x0e204000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3NARRBHS, F_SIZEQ},
1295 1.1 christos {"addhn2", 0x4e204000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3NARRBHS2, F_SIZEQ},
1296 1.1 christos {"sabal", 0x0e205000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGBHS, F_SIZEQ},
1297 1.1 christos {"sabal2", 0x4e205000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGBHS2, F_SIZEQ},
1298 1.1 christos {"subhn", 0x0e206000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3NARRBHS, F_SIZEQ},
1299 1.1 christos {"subhn2", 0x4e206000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3NARRBHS2, F_SIZEQ},
1300 1.1 christos {"sabdl", 0x0e207000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGBHS, F_SIZEQ},
1301 1.1 christos {"sabdl2", 0x4e207000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGBHS2, F_SIZEQ},
1302 1.1 christos {"smlal", 0x0e208000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGBHS, F_SIZEQ},
1303 1.1 christos {"smlal2", 0x4e208000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGBHS2, F_SIZEQ},
1304 1.1 christos {"sqdmlal", 0x0e209000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGHS, F_SIZEQ},
1305 1.1 christos {"sqdmlal2", 0x4e209000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGHS2, F_SIZEQ},
1306 1.1 christos {"smlsl", 0x0e20a000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGBHS, F_SIZEQ},
1307 1.1 christos {"smlsl2", 0x4e20a000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGBHS2, F_SIZEQ},
1308 1.1 christos {"sqdmlsl", 0x0e20b000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGHS, F_SIZEQ},
1309 1.1 christos {"sqdmlsl2", 0x4e20b000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGHS2, F_SIZEQ},
1310 1.1 christos {"smull", 0x0e20c000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGBHS, F_SIZEQ},
1311 1.1 christos {"smull2", 0x4e20c000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGBHS2, F_SIZEQ},
1312 1.1 christos {"sqdmull", 0x0e20d000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGHS, F_SIZEQ},
1313 1.1 christos {"sqdmull2", 0x4e20d000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGHS2, F_SIZEQ},
1314 1.1 christos {"pmull", 0x0e20e000, 0xffe0fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGB, 0},
1315 1.1 christos {"pmull", 0x0ee0e000, 0xffe0fc00, asimddiff, 0, CRYPTO, OP3 (Vd, Vn, Vm), QL_V3LONGD, 0},
1316 1.1 christos {"pmull2", 0x4e20e000, 0xffe0fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGB2, 0},
1317 1.1 christos {"pmull2", 0x4ee0e000, 0xffe0fc00, asimddiff, 0, CRYPTO, OP3 (Vd, Vn, Vm), QL_V3LONGD2, 0},
1318 1.1 christos {"uaddl", 0x2e200000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGBHS, F_SIZEQ},
1319 1.1 christos {"uaddl2", 0x6e200000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGBHS2, F_SIZEQ},
1320 1.1 christos {"uaddw", 0x2e201000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3WIDEBHS, F_SIZEQ},
1321 1.1 christos {"uaddw2", 0x6e201000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3WIDEBHS2, F_SIZEQ},
1322 1.1 christos {"usubl", 0x2e202000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGBHS, F_SIZEQ},
1323 1.1 christos {"usubl2", 0x6e202000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGBHS2, F_SIZEQ},
1324 1.1 christos {"usubw", 0x2e203000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3WIDEBHS, F_SIZEQ},
1325 1.1 christos {"usubw2", 0x6e203000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3WIDEBHS2, F_SIZEQ},
1326 1.1 christos {"raddhn", 0x2e204000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3NARRBHS, F_SIZEQ},
1327 1.1 christos {"raddhn2", 0x6e204000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3NARRBHS2, F_SIZEQ},
1328 1.1 christos {"uabal", 0x2e205000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGBHS, F_SIZEQ},
1329 1.1 christos {"uabal2", 0x6e205000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGBHS2, F_SIZEQ},
1330 1.1 christos {"rsubhn", 0x2e206000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3NARRBHS, F_SIZEQ},
1331 1.1 christos {"rsubhn2", 0x6e206000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3NARRBHS2, F_SIZEQ},
1332 1.1 christos {"uabdl", 0x2e207000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGBHS, F_SIZEQ},
1333 1.1 christos {"uabdl2", 0x6e207000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGBHS2, F_SIZEQ},
1334 1.1 christos {"umlal", 0x2e208000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGBHS, F_SIZEQ},
1335 1.1 christos {"umlal2", 0x6e208000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGBHS2, F_SIZEQ},
1336 1.1 christos {"umlsl", 0x2e20a000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGBHS, F_SIZEQ},
1337 1.1 christos {"umlsl2", 0x6e20a000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGBHS2, F_SIZEQ},
1338 1.1 christos {"umull", 0x2e20c000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGBHS, F_SIZEQ},
1339 1.1 christos {"umull2", 0x6e20c000, 0xff20fc00, asimddiff, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3LONGBHS2, F_SIZEQ},
1340 1.1 christos /* AdvSIMD vector x indexed element. */
1341 1.1 christos {"smlal", 0x0f002000, 0xff00f400, asimdelem, 0, SIMD, OP3 (Vd, Vn, Em), QL_ELEMENT_L, F_SIZEQ},
1342 1.1 christos {"smlal2", 0x4f002000, 0xff00f400, asimdelem, 0, SIMD, OP3 (Vd, Vn, Em), QL_ELEMENT_L2, F_SIZEQ},
1343 1.1 christos {"sqdmlal", 0x0f003000, 0xff00f400, asimdelem, 0, SIMD, OP3 (Vd, Vn, Em), QL_ELEMENT_L, F_SIZEQ},
1344 1.1 christos {"sqdmlal2", 0x4f003000, 0xff00f400, asimdelem, 0, SIMD, OP3 (Vd, Vn, Em), QL_ELEMENT_L2, F_SIZEQ},
1345 1.1 christos {"smlsl", 0x0f006000, 0xff00f400, asimdelem, 0, SIMD, OP3 (Vd, Vn, Em), QL_ELEMENT_L, F_SIZEQ},
1346 1.1 christos {"smlsl2", 0x4f006000, 0xff00f400, asimdelem, 0, SIMD, OP3 (Vd, Vn, Em), QL_ELEMENT_L2, F_SIZEQ},
1347 1.1 christos {"sqdmlsl", 0x0f007000, 0xff00f400, asimdelem, 0, SIMD, OP3 (Vd, Vn, Em), QL_ELEMENT_L, F_SIZEQ},
1348 1.1 christos {"sqdmlsl2", 0x4f007000, 0xff00f400, asimdelem, 0, SIMD, OP3 (Vd, Vn, Em), QL_ELEMENT_L2, F_SIZEQ},
1349 1.1 christos {"mul", 0xf008000, 0xbf00f400, asimdelem, 0, SIMD, OP3 (Vd, Vn, Em), QL_ELEMENT, F_SIZEQ},
1350 1.1 christos {"smull", 0x0f00a000, 0xff00f400, asimdelem, 0, SIMD, OP3 (Vd, Vn, Em), QL_ELEMENT_L, F_SIZEQ},
1351 1.1 christos {"smull2", 0x4f00a000, 0xff00f400, asimdelem, 0, SIMD, OP3 (Vd, Vn, Em), QL_ELEMENT_L2, F_SIZEQ},
1352 1.1 christos {"sqdmull", 0x0f00b000, 0xff00f400, asimdelem, 0, SIMD, OP3 (Vd, Vn, Em), QL_ELEMENT_L, F_SIZEQ},
1353 1.1 christos {"sqdmull2", 0x4f00b000, 0xff00f400, asimdelem, 0, SIMD, OP3 (Vd, Vn, Em), QL_ELEMENT_L2, F_SIZEQ},
1354 1.1 christos {"sqdmulh", 0xf00c000, 0xbf00f400, asimdelem, 0, SIMD, OP3 (Vd, Vn, Em), QL_ELEMENT, F_SIZEQ},
1355 1.1 christos {"sqrdmulh", 0xf00d000, 0xbf00f400, asimdelem, 0, SIMD, OP3 (Vd, Vn, Em), QL_ELEMENT, F_SIZEQ},
1356 1.1 christos {"fmla", 0xf801000, 0xbf80f400, asimdelem, 0, SIMD, OP3 (Vd, Vn, Em), QL_ELEMENT_FP, F_SIZEQ},
1357 1.1 christos {"fmls", 0xf805000, 0xbf80f400, asimdelem, 0, SIMD, OP3 (Vd, Vn, Em), QL_ELEMENT_FP, F_SIZEQ},
1358 1.1 christos {"fmul", 0xf809000, 0xbf80f400, asimdelem, 0, SIMD, OP3 (Vd, Vn, Em), QL_ELEMENT_FP, F_SIZEQ},
1359 1.1 christos {"mla", 0x2f000000, 0xbf00f400, asimdelem, 0, SIMD, OP3 (Vd, Vn, Em), QL_ELEMENT, F_SIZEQ},
1360 1.1 christos {"umlal", 0x2f002000, 0xff00f400, asimdelem, 0, SIMD, OP3 (Vd, Vn, Em), QL_ELEMENT_L, F_SIZEQ},
1361 1.1 christos {"umlal2", 0x6f002000, 0xff00f400, asimdelem, 0, SIMD, OP3 (Vd, Vn, Em), QL_ELEMENT_L2, F_SIZEQ},
1362 1.1 christos {"mls", 0x2f004000, 0xbf00f400, asimdelem, 0, SIMD, OP3 (Vd, Vn, Em), QL_ELEMENT, F_SIZEQ},
1363 1.1 christos {"umlsl", 0x2f006000, 0xff00f400, asimdelem, 0, SIMD, OP3 (Vd, Vn, Em), QL_ELEMENT_L, F_SIZEQ},
1364 1.1 christos {"umlsl2", 0x6f006000, 0xff00f400, asimdelem, 0, SIMD, OP3 (Vd, Vn, Em), QL_ELEMENT_L2, F_SIZEQ},
1365 1.1 christos {"umull", 0x2f00a000, 0xff00f400, asimdelem, 0, SIMD, OP3 (Vd, Vn, Em), QL_ELEMENT_L, F_SIZEQ},
1366 1.1 christos {"umull2", 0x6f00a000, 0xff00f400, asimdelem, 0, SIMD, OP3 (Vd, Vn, Em), QL_ELEMENT_L2, F_SIZEQ},
1367 1.5 christos {"fmulx", 0x2f809000, 0xbf80f400, asimdelem, 0, SIMD, OP3 (Vd, Vn, Em), QL_ELEMENT_FP, F_SIZEQ},
1368 1.5 christos {"sqrdmlah", 0x2f00d000, 0xbf00f400, asimdelem, 0, RDMA, OP3 (Vd, Vn, Em), QL_ELEMENT, F_SIZEQ},
1369 1.1 christos {"sqrdmlsh", 0x2f00f000, 0xbf00f400, asimdelem, 0, RDMA, OP3 (Vd, Vn, Em), QL_ELEMENT, F_SIZEQ},
1370 1.1 christos /* AdvSIMD EXT. */
1371 1.1 christos {"ext", 0x2e000000, 0xbfe0c400, asimdext, 0, SIMD, OP4 (Vd, Vn, Vm, IDX), QL_VEXT, F_SIZEQ},
1372 1.1 christos /* AdvSIMD modified immediate. */
1373 1.1 christos {"movi", 0xf000400, 0xbff89c00, asimdimm, 0, SIMD, OP2 (Vd, SIMD_IMM_SFT), QL_SIMD_IMM_S0W, F_SIZEQ},
1374 1.1 christos {"orr", 0xf001400, 0xbff89c00, asimdimm, 0, SIMD, OP2 (Vd, SIMD_IMM_SFT), QL_SIMD_IMM_S0W, F_SIZEQ},
1375 1.1 christos {"movi", 0xf008400, 0xbff8dc00, asimdimm, 0, SIMD, OP2 (Vd, SIMD_IMM_SFT), QL_SIMD_IMM_S0H, F_SIZEQ},
1376 1.1 christos {"orr", 0xf009400, 0xbff8dc00, asimdimm, 0, SIMD, OP2 (Vd, SIMD_IMM_SFT), QL_SIMD_IMM_S0H, F_SIZEQ},
1377 1.1 christos {"movi", 0xf00c400, 0xbff8ec00, asimdimm, 0, SIMD, OP2 (Vd, SIMD_IMM_SFT), QL_SIMD_IMM_S1W, F_SIZEQ},
1378 1.1 christos {"movi", 0xf00e400, 0xbff8fc00, asimdimm, 0, SIMD, OP2 (Vd, SIMD_IMM_SFT), QL_SIMD_IMM_B, F_SIZEQ},
1379 1.1 christos {"fmov", 0xf00f400, 0xbff8fc00, asimdimm, 0, SIMD, OP2 (Vd, SIMD_FPIMM), QL_SIMD_IMM_S, F_SIZEQ},
1380 1.1 christos {"mvni", 0x2f000400, 0xbff89c00, asimdimm, 0, SIMD, OP2 (Vd, SIMD_IMM_SFT), QL_SIMD_IMM_S0W, F_SIZEQ},
1381 1.1 christos {"bic", 0x2f001400, 0xbff89c00, asimdimm, 0, SIMD, OP2 (Vd, SIMD_IMM_SFT), QL_SIMD_IMM_S0W, F_SIZEQ},
1382 1.1 christos {"mvni", 0x2f008400, 0xbff8dc00, asimdimm, 0, SIMD, OP2 (Vd, SIMD_IMM_SFT), QL_SIMD_IMM_S0H, F_SIZEQ},
1383 1.1 christos {"bic", 0x2f009400, 0xbff8dc00, asimdimm, 0, SIMD, OP2 (Vd, SIMD_IMM_SFT), QL_SIMD_IMM_S0H, F_SIZEQ},
1384 1.1 christos {"mvni", 0x2f00c400, 0xbff8ec00, asimdimm, 0, SIMD, OP2 (Vd, SIMD_IMM_SFT), QL_SIMD_IMM_S1W, F_SIZEQ},
1385 1.1 christos {"movi", 0x2f00e400, 0xfff8fc00, asimdimm, 0, SIMD, OP2 (Sd, SIMD_IMM), QL_SIMD_IMM_D, F_SIZEQ},
1386 1.1 christos {"movi", 0x6f00e400, 0xfff8fc00, asimdimm, 0, SIMD, OP2 (Vd, SIMD_IMM), QL_SIMD_IMM_V2D, F_SIZEQ},
1387 1.1 christos {"fmov", 0x6f00f400, 0xfff8fc00, asimdimm, 0, SIMD, OP2 (Vd, SIMD_FPIMM), QL_SIMD_IMM_V2D, F_SIZEQ},
1388 1.1 christos /* AdvSIMD copy. */
1389 1.1 christos {"dup", 0xe000400, 0xbfe0fc00, asimdins, 0, SIMD, OP2 (Vd, En), QL_DUP_VX, F_T},
1390 1.1 christos {"dup", 0xe000c00, 0xbfe0fc00, asimdins, 0, SIMD, OP2 (Vd, Rn), QL_DUP_VR, F_T},
1391 1.1 christos {"smov", 0xe002c00, 0xbfe0fc00, asimdins, 0, SIMD, OP2 (Rd, En), QL_SMOV, F_GPRSIZE_IN_Q},
1392 1.1 christos {"umov", 0xe003c00, 0xbfe0fc00, asimdins, 0, SIMD, OP2 (Rd, En), QL_UMOV, F_HAS_ALIAS | F_GPRSIZE_IN_Q},
1393 1.1 christos {"mov", 0xe003c00, 0xbfe0fc00, asimdins, 0, SIMD, OP2 (Rd, En), QL_MOV, F_ALIAS | F_GPRSIZE_IN_Q},
1394 1.1 christos {"ins", 0x4e001c00, 0xffe0fc00, asimdins, 0, SIMD, OP2 (Ed, Rn), QL_INS_XR, F_HAS_ALIAS},
1395 1.1 christos {"mov", 0x4e001c00, 0xffe0fc00, asimdins, 0, SIMD, OP2 (Ed, Rn), QL_INS_XR, F_ALIAS},
1396 1.1 christos {"ins", 0x6e000400, 0xffe08400, asimdins, 0, SIMD, OP2 (Ed, En), QL_S_2SAME, F_HAS_ALIAS},
1397 1.1 christos {"mov", 0x6e000400, 0xffe08400, asimdins, 0, SIMD, OP2 (Ed, En), QL_S_2SAME, F_ALIAS},
1398 1.1 christos /* AdvSIMD two-reg misc. */
1399 1.1 christos {"rev64", 0xe200800, 0xbf3ffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAMEBHS, F_SIZEQ},
1400 1.1 christos {"rev16", 0xe201800, 0xbf3ffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAMEB, F_SIZEQ},
1401 1.1 christos {"saddlp", 0xe202800, 0xbf3ffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2PAIRWISELONGBHS, F_SIZEQ},
1402 1.1 christos {"suqadd", 0xe203800, 0xbf3ffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAME, F_SIZEQ},
1403 1.1 christos {"cls", 0xe204800, 0xbf3ffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAMEBHS, F_SIZEQ},
1404 1.1 christos {"cnt", 0xe205800, 0xbf3ffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAMEB, F_SIZEQ},
1405 1.1 christos {"sadalp", 0xe206800, 0xbf3ffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2PAIRWISELONGBHS, F_SIZEQ},
1406 1.1 christos {"sqabs", 0xe207800, 0xbf3ffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAME, F_SIZEQ},
1407 1.1 christos {"cmgt", 0xe208800, 0xbf3ffc00, asimdmisc, 0, SIMD, OP3 (Vd, Vn, IMM0), QL_V2SAME, F_SIZEQ},
1408 1.1 christos {"cmeq", 0xe209800, 0xbf3ffc00, asimdmisc, 0, SIMD, OP3 (Vd, Vn, IMM0), QL_V2SAME, F_SIZEQ},
1409 1.1 christos {"cmlt", 0xe20a800, 0xbf3ffc00, asimdmisc, 0, SIMD, OP3 (Vd, Vn, IMM0), QL_V2SAME, F_SIZEQ},
1410 1.1 christos {"abs", 0xe20b800, 0xbf3ffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAME, F_SIZEQ},
1411 1.1 christos {"xtn", 0xe212800, 0xff3ffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2NARRBHS, F_SIZEQ},
1412 1.1 christos {"xtn2", 0x4e212800, 0xff3ffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2NARRBHS2, F_SIZEQ},
1413 1.1 christos {"sqxtn", 0xe214800, 0xff3ffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2NARRBHS, F_SIZEQ},
1414 1.1 christos {"sqxtn2", 0x4e214800, 0xff3ffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2NARRBHS2, F_SIZEQ},
1415 1.1 christos {"fcvtn", 0xe216800, 0xffbffc00, asimdmisc, OP_FCVTN, SIMD, OP2 (Vd, Vn), QL_V2NARRHS, F_MISC},
1416 1.1 christos {"fcvtn2", 0x4e216800, 0xffbffc00, asimdmisc, OP_FCVTN2, SIMD, OP2 (Vd, Vn), QL_V2NARRHS2, F_MISC},
1417 1.1 christos {"fcvtl", 0xe217800, 0xffbffc00, asimdmisc, OP_FCVTL, SIMD, OP2 (Vd, Vn), QL_V2LONGHS, F_MISC},
1418 1.1 christos {"fcvtl2", 0x4e217800, 0xffbffc00, asimdmisc, OP_FCVTL2, SIMD, OP2 (Vd, Vn), QL_V2LONGHS2, F_MISC},
1419 1.1 christos {"frintn", 0xe218800, 0xbfbffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAMESD, F_SIZEQ},
1420 1.1 christos {"frintm", 0xe219800, 0xbfbffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAMESD, F_SIZEQ},
1421 1.1 christos {"fcvtns", 0xe21a800, 0xbfbffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAMESD, F_SIZEQ},
1422 1.1 christos {"fcvtms", 0xe21b800, 0xbfbffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAMESD, F_SIZEQ},
1423 1.1 christos {"fcvtas", 0xe21c800, 0xbfbffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAMESD, F_SIZEQ},
1424 1.3 christos {"scvtf", 0xe21d800, 0xbfbffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAMESD, F_SIZEQ},
1425 1.3 christos {"fcmgt", 0xea0c800, 0xbfbffc00, asimdmisc, 0, SIMD, OP3 (Vd, Vn, FPIMM0), QL_V2SAMESD, F_SIZEQ},
1426 1.3 christos {"fcmeq", 0xea0d800, 0xbfbffc00, asimdmisc, 0, SIMD, OP3 (Vd, Vn, FPIMM0), QL_V2SAMESD, F_SIZEQ},
1427 1.1 christos {"fcmlt", 0xea0e800, 0xbfbffc00, asimdmisc, 0, SIMD, OP3 (Vd, Vn, FPIMM0), QL_V2SAMESD, F_SIZEQ},
1428 1.1 christos {"fabs", 0xea0f800, 0xbfbffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAMESD, F_SIZEQ},
1429 1.1 christos {"frintp", 0xea18800, 0xbfbffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAMESD, F_SIZEQ},
1430 1.1 christos {"frintz", 0xea19800, 0xbfbffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAMESD, F_SIZEQ},
1431 1.1 christos {"fcvtps", 0xea1a800, 0xbfbffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAMESD, F_SIZEQ},
1432 1.1 christos {"fcvtzs", 0xea1b800, 0xbfbffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAMESD, F_SIZEQ},
1433 1.1 christos {"urecpe", 0xea1c800, 0xbfbffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAMES, F_SIZEQ},
1434 1.1 christos {"frecpe", 0xea1d800, 0xbfbffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAMESD, F_SIZEQ},
1435 1.1 christos {"rev32", 0x2e200800, 0xbf3ffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAMEBH, F_SIZEQ},
1436 1.1 christos {"uaddlp", 0x2e202800, 0xbf3ffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2PAIRWISELONGBHS, F_SIZEQ},
1437 1.1 christos {"usqadd", 0x2e203800, 0xbf3ffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAME, F_SIZEQ},
1438 1.1 christos {"clz", 0x2e204800, 0xbf3ffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAMEBHS, F_SIZEQ},
1439 1.1 christos {"uadalp", 0x2e206800, 0xbf3ffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2PAIRWISELONGBHS, F_SIZEQ},
1440 1.1 christos {"sqneg", 0x2e207800, 0xbf3ffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAME, F_SIZEQ},
1441 1.1 christos {"cmge", 0x2e208800, 0xbf3ffc00, asimdmisc, 0, SIMD, OP3 (Vd, Vn, IMM0), QL_V2SAME, F_SIZEQ},
1442 1.1 christos {"cmle", 0x2e209800, 0xbf3ffc00, asimdmisc, 0, SIMD, OP3 (Vd, Vn, IMM0), QL_V2SAME, F_SIZEQ},
1443 1.1 christos {"neg", 0x2e20b800, 0xbf3ffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAME, F_SIZEQ},
1444 1.1 christos {"sqxtun", 0x2e212800, 0xff3ffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2NARRBHS, F_SIZEQ},
1445 1.1 christos {"sqxtun2", 0x6e212800, 0xff3ffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2NARRBHS2, F_SIZEQ},
1446 1.1 christos {"shll", 0x2e213800, 0xff3ffc00, asimdmisc, 0, SIMD, OP3 (Vd, Vn, SHLL_IMM), QL_V2LONGBHS, F_SIZEQ},
1447 1.1 christos {"shll2", 0x6e213800, 0xff3ffc00, asimdmisc, 0, SIMD, OP3 (Vd, Vn, SHLL_IMM), QL_V2LONGBHS2, F_SIZEQ},
1448 1.1 christos {"uqxtn", 0x2e214800, 0xff3ffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2NARRBHS, F_SIZEQ},
1449 1.1 christos {"uqxtn2", 0x6e214800, 0xff3ffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2NARRBHS2, F_SIZEQ},
1450 1.1 christos {"fcvtxn", 0x2e616800, 0xfffffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2NARRS, 0},
1451 1.1 christos {"fcvtxn2", 0x6e616800, 0xfffffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2NARRS2, 0},
1452 1.1 christos {"frinta", 0x2e218800, 0xbfbffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAMESD, F_SIZEQ},
1453 1.1 christos {"frintx", 0x2e219800, 0xbfbffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAMESD, F_SIZEQ},
1454 1.1 christos {"fcvtnu", 0x2e21a800, 0xbfbffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAMESD, F_SIZEQ},
1455 1.1 christos {"fcvtmu", 0x2e21b800, 0xbfbffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAMESD, F_SIZEQ},
1456 1.1 christos {"fcvtau", 0x2e21c800, 0xbfbffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAMESD, F_SIZEQ},
1457 1.1 christos {"ucvtf", 0x2e21d800, 0xbfbffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAMESD, F_SIZEQ},
1458 1.1 christos {"not", 0x2e205800, 0xbffffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAMEB, F_SIZEQ | F_HAS_ALIAS},
1459 1.1 christos {"mvn", 0x2e205800, 0xbffffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAMEB, F_SIZEQ | F_ALIAS},
1460 1.3 christos {"rbit", 0x2e605800, 0xbffffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAMEB, F_SIZEQ},
1461 1.3 christos {"fcmge", 0x2ea0c800, 0xbfbffc00, asimdmisc, 0, SIMD, OP3 (Vd, Vn, FPIMM0), QL_V2SAMESD, F_SIZEQ},
1462 1.1 christos {"fcmle", 0x2ea0d800, 0xbfbffc00, asimdmisc, 0, SIMD, OP3 (Vd, Vn, FPIMM0), QL_V2SAMESD, F_SIZEQ},
1463 1.1 christos {"fneg", 0x2ea0f800, 0xbfbffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAMESD, F_SIZEQ},
1464 1.1 christos {"frinti", 0x2ea19800, 0xbfbffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAMESD, F_SIZEQ},
1465 1.1 christos {"fcvtpu", 0x2ea1a800, 0xbfbffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAMESD, F_SIZEQ},
1466 1.1 christos {"fcvtzu", 0x2ea1b800, 0xbfbffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAMESD, F_SIZEQ},
1467 1.1 christos {"ursqrte", 0x2ea1c800, 0xbfbffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAMES, F_SIZEQ},
1468 1.1 christos {"frsqrte", 0x2ea1d800, 0xbfbffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAMESD, F_SIZEQ},
1469 1.1 christos {"fsqrt", 0x2ea1f800, 0xbfbffc00, asimdmisc, 0, SIMD, OP2 (Vd, Vn), QL_V2SAMESD, F_SIZEQ},
1470 1.1 christos /* AdvSIMD ZIP/UZP/TRN. */
1471 1.1 christos {"uzp1", 0xe001800, 0xbf20fc00, asimdperm, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAME, F_SIZEQ},
1472 1.1 christos {"trn1", 0xe002800, 0xbf20fc00, asimdperm, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAME, F_SIZEQ},
1473 1.1 christos {"zip1", 0xe003800, 0xbf20fc00, asimdperm, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAME, F_SIZEQ},
1474 1.1 christos {"uzp2", 0xe005800, 0xbf20fc00, asimdperm, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAME, F_SIZEQ},
1475 1.1 christos {"trn2", 0xe006800, 0xbf20fc00, asimdperm, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAME, F_SIZEQ},
1476 1.1 christos {"zip2", 0xe007800, 0xbf20fc00, asimdperm, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAME, F_SIZEQ},
1477 1.1 christos /* AdvSIMD three same. */
1478 1.1 christos {"shadd", 0xe200400, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMEBHS, F_SIZEQ},
1479 1.1 christos {"sqadd", 0xe200c00, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAME, F_SIZEQ},
1480 1.1 christos {"srhadd", 0xe201400, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMEBHS, F_SIZEQ},
1481 1.1 christos {"shsub", 0xe202400, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMEBHS, F_SIZEQ},
1482 1.1 christos {"sqsub", 0xe202c00, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAME, F_SIZEQ},
1483 1.1 christos {"cmgt", 0xe203400, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAME, F_SIZEQ},
1484 1.1 christos {"cmge", 0xe203c00, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAME, F_SIZEQ},
1485 1.1 christos {"sshl", 0xe204400, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAME, F_SIZEQ},
1486 1.1 christos {"sqshl", 0xe204c00, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAME, F_SIZEQ},
1487 1.1 christos {"srshl", 0xe205400, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAME, F_SIZEQ},
1488 1.1 christos {"sqrshl", 0xe205c00, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAME, F_SIZEQ},
1489 1.1 christos {"smax", 0xe206400, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMEBHS, F_SIZEQ},
1490 1.1 christos {"smin", 0xe206c00, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMEBHS, F_SIZEQ},
1491 1.1 christos {"sabd", 0xe207400, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMEBHS, F_SIZEQ},
1492 1.1 christos {"saba", 0xe207c00, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMEBHS, F_SIZEQ},
1493 1.1 christos {"add", 0xe208400, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAME, F_SIZEQ},
1494 1.1 christos {"cmtst", 0xe208c00, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAME, F_SIZEQ},
1495 1.1 christos {"mla", 0xe209400, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMEBHS, F_SIZEQ},
1496 1.1 christos {"mul", 0xe209c00, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMEBHS, F_SIZEQ},
1497 1.1 christos {"smaxp", 0xe20a400, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMEBHS, F_SIZEQ},
1498 1.1 christos {"sminp", 0xe20ac00, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMEBHS, F_SIZEQ},
1499 1.1 christos {"sqdmulh", 0xe20b400, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMEHS, F_SIZEQ},
1500 1.1 christos {"addp", 0xe20bc00, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAME, F_SIZEQ},
1501 1.1 christos {"fmaxnm", 0xe20c400, 0xbfa0fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMESD, F_SIZEQ},
1502 1.1 christos {"fmla", 0xe20cc00, 0xbfa0fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMESD, F_SIZEQ},
1503 1.1 christos {"fadd", 0xe20d400, 0xbfa0fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMESD, F_SIZEQ},
1504 1.1 christos {"fmulx", 0xe20dc00, 0xbfa0fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMESD, F_SIZEQ},
1505 1.1 christos {"fcmeq", 0xe20e400, 0xbfa0fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMESD, F_SIZEQ},
1506 1.1 christos {"fmax", 0xe20f400, 0xbfa0fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMESD, F_SIZEQ},
1507 1.1 christos {"frecps", 0xe20fc00, 0xbfa0fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMESD, F_SIZEQ},
1508 1.1 christos {"and", 0xe201c00, 0xbfe0fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMEB, F_SIZEQ},
1509 1.1 christos {"bic", 0xe601c00, 0xbfe0fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMEB, F_SIZEQ},
1510 1.1 christos {"fminnm", 0xea0c400, 0xbfa0fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMESD, F_SIZEQ},
1511 1.1 christos {"fmls", 0xea0cc00, 0xbfa0fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMESD, F_SIZEQ},
1512 1.1 christos {"fsub", 0xea0d400, 0xbfa0fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMESD, F_SIZEQ},
1513 1.1 christos {"fmin", 0xea0f400, 0xbfa0fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMESD, F_SIZEQ},
1514 1.1 christos {"frsqrts", 0xea0fc00, 0xbfa0fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMESD, F_SIZEQ},
1515 1.1 christos {"orr", 0xea01c00, 0xbfe0fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMEB, F_HAS_ALIAS | F_SIZEQ},
1516 1.1 christos {"mov", 0xea01c00, 0xbfe0fc00, asimdsame, OP_MOV_V, SIMD, OP2 (Vd, Vn), QL_V2SAMEB, F_ALIAS | F_CONV},
1517 1.1 christos {"orn", 0xee01c00, 0xbfe0fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMEB, F_SIZEQ},
1518 1.1 christos {"uhadd", 0x2e200400, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMEBHS, F_SIZEQ},
1519 1.1 christos {"uqadd", 0x2e200c00, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAME, F_SIZEQ},
1520 1.1 christos {"urhadd", 0x2e201400, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMEBHS, F_SIZEQ},
1521 1.1 christos {"uhsub", 0x2e202400, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMEBHS, F_SIZEQ},
1522 1.1 christos {"uqsub", 0x2e202c00, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAME, F_SIZEQ},
1523 1.1 christos {"cmhi", 0x2e203400, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAME, F_SIZEQ},
1524 1.1 christos {"cmhs", 0x2e203c00, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAME, F_SIZEQ},
1525 1.1 christos {"ushl", 0x2e204400, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAME, F_SIZEQ},
1526 1.1 christos {"uqshl", 0x2e204c00, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAME, F_SIZEQ},
1527 1.1 christos {"urshl", 0x2e205400, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAME, F_SIZEQ},
1528 1.1 christos {"uqrshl", 0x2e205c00, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAME, F_SIZEQ},
1529 1.1 christos {"umax", 0x2e206400, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMEBHS, F_SIZEQ},
1530 1.1 christos {"umin", 0x2e206c00, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMEBHS, F_SIZEQ},
1531 1.1 christos {"uabd", 0x2e207400, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMEBHS, F_SIZEQ},
1532 1.1 christos {"uaba", 0x2e207c00, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMEBHS, F_SIZEQ},
1533 1.1 christos {"sub", 0x2e208400, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAME, F_SIZEQ},
1534 1.1 christos {"cmeq", 0x2e208c00, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAME, F_SIZEQ},
1535 1.1 christos {"mls", 0x2e209400, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMEBHS, F_SIZEQ},
1536 1.1 christos {"pmul", 0x2e209c00, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMEB, F_SIZEQ},
1537 1.1 christos {"umaxp", 0x2e20a400, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMEBHS, F_SIZEQ},
1538 1.1 christos {"uminp", 0x2e20ac00, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMEBHS, F_SIZEQ},
1539 1.1 christos {"sqrdmulh", 0x2e20b400, 0xbf20fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMEHS, F_SIZEQ},
1540 1.1 christos {"fmaxnmp", 0x2e20c400, 0xbfa0fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMESD, F_SIZEQ},
1541 1.1 christos {"faddp", 0x2e20d400, 0xbfa0fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMESD, F_SIZEQ},
1542 1.1 christos {"fmul", 0x2e20dc00, 0xbfa0fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMESD, F_SIZEQ},
1543 1.1 christos {"fcmge", 0x2e20e400, 0xbfa0fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMESD, F_SIZEQ},
1544 1.1 christos {"facge", 0x2e20ec00, 0xbfa0fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMESD, F_SIZEQ},
1545 1.1 christos {"fmaxp", 0x2e20f400, 0xbfa0fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMESD, F_SIZEQ},
1546 1.1 christos {"fdiv", 0x2e20fc00, 0xbfa0fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMESD, F_SIZEQ},
1547 1.1 christos {"eor", 0x2e201c00, 0xbfe0fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMEB, F_SIZEQ},
1548 1.1 christos {"bsl", 0x2e601c00, 0xbfe0fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMEB, F_SIZEQ},
1549 1.1 christos {"fminnmp", 0x2ea0c400, 0xbfa0fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMESD, F_SIZEQ},
1550 1.1 christos {"fabd", 0x2ea0d400, 0xbfa0fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMESD, F_SIZEQ},
1551 1.1 christos {"fcmgt", 0x2ea0e400, 0xbfa0fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMESD, F_SIZEQ},
1552 1.1 christos {"facgt", 0x2ea0ec00, 0xbfa0fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMESD, F_SIZEQ},
1553 1.1 christos {"fminp", 0x2ea0f400, 0xbfa0fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMESD, F_SIZEQ},
1554 1.1 christos {"bit", 0x2ea01c00, 0xbfe0fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMEB, F_SIZEQ},
1555 1.5 christos {"bif", 0x2ee01c00, 0xbfe0fc00, asimdsame, 0, SIMD, OP3 (Vd, Vn, Vm), QL_V3SAMEB, F_SIZEQ},
1556 1.5 christos /* AdvSIMD three same extension. */
1557 1.5 christos {"sqrdmlah", 0x2e008400, 0xbf20fe00, asimdsame, 0, RDMA, OP3 (Vd, Vn, Vm), QL_V3SAMEHS, F_SIZEQ},
1558 1.1 christos {"sqrdmlsh", 0x2e008c00, 0xbf20fe00, asimdsame, 0, RDMA, OP3 (Vd, Vn, Vm), QL_V3SAMEHS, F_SIZEQ},
1559 1.1 christos /* AdvSIMD shift by immediate. */
1560 1.1 christos {"sshr", 0xf000400, 0xbf80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFT, 0},
1561 1.1 christos {"ssra", 0xf001400, 0xbf80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFT, 0},
1562 1.1 christos {"srshr", 0xf002400, 0xbf80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFT, 0},
1563 1.1 christos {"srsra", 0xf003400, 0xbf80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFT, 0},
1564 1.1 christos {"shl", 0xf005400, 0xbf80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSL), QL_VSHIFT, 0},
1565 1.1 christos {"sqshl", 0xf007400, 0xbf80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSL), QL_VSHIFT, 0},
1566 1.1 christos {"shrn", 0xf008400, 0xff80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFTN, 0},
1567 1.1 christos {"shrn2", 0x4f008400, 0xff80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFTN2, 0},
1568 1.1 christos {"rshrn", 0xf008c00, 0xff80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFTN, 0},
1569 1.1 christos {"rshrn2", 0x4f008c00, 0xff80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFTN2, 0},
1570 1.1 christos {"sqshrn", 0xf009400, 0xff80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFTN, 0},
1571 1.1 christos {"sqshrn2", 0x4f009400, 0xff80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFTN2, 0},
1572 1.1 christos {"sqrshrn", 0xf009c00, 0xff80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFTN, 0},
1573 1.1 christos {"sqrshrn2", 0x4f009c00, 0xff80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFTN2, 0},
1574 1.1 christos {"sshll", 0xf00a400, 0xff80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSL), QL_VSHIFTL, F_HAS_ALIAS},
1575 1.1 christos {"sxtl", 0xf00a400, 0xff87fc00, asimdshf, OP_SXTL, SIMD, OP2 (Vd, Vn), QL_V2LONGBHS, F_ALIAS | F_CONV},
1576 1.1 christos {"sshll2", 0x4f00a400, 0xff80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSL), QL_VSHIFTL2, F_HAS_ALIAS},
1577 1.1 christos {"sxtl2", 0x4f00a400, 0xff87fc00, asimdshf, OP_SXTL2, SIMD, OP2 (Vd, Vn), QL_V2LONGBHS2, F_ALIAS | F_CONV},
1578 1.1 christos {"scvtf", 0xf00e400, 0xbf80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFT_SD, 0},
1579 1.1 christos {"fcvtzs", 0xf00fc00, 0xbf80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFT_SD, 0},
1580 1.1 christos {"ushr", 0x2f000400, 0xbf80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFT, 0},
1581 1.1 christos {"usra", 0x2f001400, 0xbf80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFT, 0},
1582 1.1 christos {"urshr", 0x2f002400, 0xbf80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFT, 0},
1583 1.1 christos {"ursra", 0x2f003400, 0xbf80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFT, 0},
1584 1.1 christos {"sri", 0x2f004400, 0xbf80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFT, 0},
1585 1.1 christos {"sli", 0x2f005400, 0xbf80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSL), QL_VSHIFT, 0},
1586 1.1 christos {"sqshlu", 0x2f006400, 0xbf80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSL), QL_VSHIFT, 0},
1587 1.1 christos {"uqshl", 0x2f007400, 0xbf80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSL), QL_VSHIFT, 0},
1588 1.1 christos {"sqshrun", 0x2f008400, 0xff80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFTN, 0},
1589 1.1 christos {"sqshrun2", 0x6f008400, 0xff80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFTN2, 0},
1590 1.1 christos {"sqrshrun", 0x2f008c00, 0xff80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFTN, 0},
1591 1.1 christos {"sqrshrun2", 0x6f008c00, 0xff80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFTN2, 0},
1592 1.1 christos {"uqshrn", 0x2f009400, 0xff80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFTN, 0},
1593 1.1 christos {"uqshrn2", 0x6f009400, 0xff80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFTN2, 0},
1594 1.1 christos {"uqrshrn", 0x2f009c00, 0xff80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFTN, 0},
1595 1.1 christos {"uqrshrn2", 0x6f009c00, 0xff80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFTN2, 0},
1596 1.1 christos {"ushll", 0x2f00a400, 0xff80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSL), QL_VSHIFTL, F_HAS_ALIAS},
1597 1.1 christos {"uxtl", 0x2f00a400, 0xff87fc00, asimdshf, OP_UXTL, SIMD, OP2 (Vd, Vn), QL_V2LONGBHS, F_ALIAS | F_CONV},
1598 1.1 christos {"ushll2", 0x6f00a400, 0xff80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSL), QL_VSHIFTL2, F_HAS_ALIAS},
1599 1.1 christos {"uxtl2", 0x6f00a400, 0xff87fc00, asimdshf, OP_UXTL2, SIMD, OP2 (Vd, Vn), QL_V2LONGBHS2, F_ALIAS | F_CONV},
1600 1.1 christos {"ucvtf", 0x2f00e400, 0xbf80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFT_SD, 0},
1601 1.1 christos {"fcvtzu", 0x2f00fc00, 0xbf80fc00, asimdshf, 0, SIMD, OP3 (Vd, Vn, IMM_VLSR), QL_VSHIFT_SD, 0},
1602 1.1 christos /* AdvSIMD TBL/TBX. */
1603 1.1 christos {"tbl", 0xe000000, 0xbfe09c00, asimdtbl, 0, SIMD, OP3 (Vd, LVn, Vm), QL_TABLE, F_SIZEQ},
1604 1.1 christos {"tbx", 0xe001000, 0xbfe09c00, asimdtbl, 0, SIMD, OP3 (Vd, LVn, Vm), QL_TABLE, F_SIZEQ},
1605 1.1 christos /* AdvSIMD scalar three different. */
1606 1.1 christos {"sqdmlal", 0x5e209000, 0xff20fc00, asisddiff, 0, SIMD, OP3 (Sd, Sn, Sm), QL_SISDL_HS, F_SSIZE},
1607 1.1 christos {"sqdmlsl", 0x5e20b000, 0xff20fc00, asisddiff, 0, SIMD, OP3 (Sd, Sn, Sm), QL_SISDL_HS, F_SSIZE},
1608 1.1 christos {"sqdmull", 0x5e20d000, 0xff20fc00, asisddiff, 0, SIMD, OP3 (Sd, Sn, Sm), QL_SISDL_HS, F_SSIZE},
1609 1.1 christos /* AdvSIMD scalar x indexed element. */
1610 1.1 christos {"sqdmlal", 0x5f003000, 0xff00f400, asisdelem, 0, SIMD, OP3 (Sd, Sn, Em), QL_SISDL_HS, F_SSIZE},
1611 1.1 christos {"sqdmlsl", 0x5f007000, 0xff00f400, asisdelem, 0, SIMD, OP3 (Sd, Sn, Em), QL_SISDL_HS, F_SSIZE},
1612 1.1 christos {"sqdmull", 0x5f00b000, 0xff00f400, asisdelem, 0, SIMD, OP3 (Sd, Sn, Em), QL_SISDL_HS, F_SSIZE},
1613 1.1 christos {"sqdmulh", 0x5f00c000, 0xff00f400, asisdelem, 0, SIMD, OP3 (Sd, Sn, Em), QL_SISD_HS, F_SSIZE},
1614 1.1 christos {"sqrdmulh", 0x5f00d000, 0xff00f400, asisdelem, 0, SIMD, OP3 (Sd, Sn, Em), QL_SISD_HS, F_SSIZE},
1615 1.1 christos {"fmla", 0x5f801000, 0xff80f400, asisdelem, 0, SIMD, OP3 (Sd, Sn, Em), QL_FP3, F_SSIZE},
1616 1.1 christos {"fmls", 0x5f805000, 0xff80f400, asisdelem, 0, SIMD, OP3 (Sd, Sn, Em), QL_FP3, F_SSIZE},
1617 1.1 christos {"fmul", 0x5f809000, 0xff80f400, asisdelem, 0, SIMD, OP3 (Sd, Sn, Em), QL_FP3, F_SSIZE},
1618 1.5 christos {"fmulx", 0x7f809000, 0xff80f400, asisdelem, 0, SIMD, OP3 (Sd, Sn, Em), QL_FP3, F_SSIZE},
1619 1.5 christos {"sqrdmlah", 0x7f00d000, 0xff00f400, asisdelem, 0, RDMA, OP3 (Sd, Sn, Em), QL_SISD_HS, F_SSIZE},
1620 1.1 christos {"sqrdmlsh", 0x7f00f000, 0xff00f400, asisdelem, 0, RDMA, OP3 (Sd, Sn, Em), QL_SISD_HS, F_SSIZE},
1621 1.1 christos /* AdvSIMD load/store multiple structures. */
1622 1.1 christos {"st4", 0xc000000, 0xbfff0000, asisdlse, 0, SIMD, OP2 (LVt, SIMD_ADDR_SIMPLE), QL_SIMD_LDST, F_SIZEQ | F_OD(4)},
1623 1.1 christos {"st1", 0xc000000, 0xbfff0000, asisdlse, 0, SIMD, OP2 (LVt, SIMD_ADDR_SIMPLE), QL_SIMD_LDST_ANY, F_SIZEQ | F_OD(1)},
1624 1.1 christos {"st2", 0xc000000, 0xbfff0000, asisdlse, 0, SIMD, OP2 (LVt, SIMD_ADDR_SIMPLE), QL_SIMD_LDST, F_SIZEQ | F_OD(2)},
1625 1.1 christos {"st3", 0xc000000, 0xbfff0000, asisdlse, 0, SIMD, OP2 (LVt, SIMD_ADDR_SIMPLE), QL_SIMD_LDST, F_SIZEQ | F_OD(3)},
1626 1.1 christos {"ld4", 0xc400000, 0xbfff0000, asisdlse, 0, SIMD, OP2 (LVt, SIMD_ADDR_SIMPLE), QL_SIMD_LDST, F_SIZEQ | F_OD(4)},
1627 1.1 christos {"ld1", 0xc400000, 0xbfff0000, asisdlse, 0, SIMD, OP2 (LVt, SIMD_ADDR_SIMPLE), QL_SIMD_LDST_ANY, F_SIZEQ | F_OD(1)},
1628 1.1 christos {"ld2", 0xc400000, 0xbfff0000, asisdlse, 0, SIMD, OP2 (LVt, SIMD_ADDR_SIMPLE), QL_SIMD_LDST, F_SIZEQ | F_OD(2)},
1629 1.1 christos {"ld3", 0xc400000, 0xbfff0000, asisdlse, 0, SIMD, OP2 (LVt, SIMD_ADDR_SIMPLE), QL_SIMD_LDST, F_SIZEQ | F_OD(3)},
1630 1.1 christos /* AdvSIMD load/store multiple structures (post-indexed). */
1631 1.1 christos {"st4", 0xc800000, 0xbfe00000, asisdlsep, 0, SIMD, OP2 (LVt, SIMD_ADDR_POST), QL_SIMD_LDST, F_SIZEQ | F_OD(4)},
1632 1.1 christos {"st1", 0xc800000, 0xbfe00000, asisdlsep, 0, SIMD, OP2 (LVt, SIMD_ADDR_POST), QL_SIMD_LDST_ANY, F_SIZEQ | F_OD(1)},
1633 1.1 christos {"st2", 0xc800000, 0xbfe00000, asisdlsep, 0, SIMD, OP2 (LVt, SIMD_ADDR_POST), QL_SIMD_LDST, F_SIZEQ | F_OD(2)},
1634 1.1 christos {"st3", 0xc800000, 0xbfe00000, asisdlsep, 0, SIMD, OP2 (LVt, SIMD_ADDR_POST), QL_SIMD_LDST, F_SIZEQ | F_OD(3)},
1635 1.1 christos {"ld4", 0xcc00000, 0xbfe00000, asisdlsep, 0, SIMD, OP2 (LVt, SIMD_ADDR_POST), QL_SIMD_LDST, F_SIZEQ | F_OD(4)},
1636 1.1 christos {"ld1", 0xcc00000, 0xbfe00000, asisdlsep, 0, SIMD, OP2 (LVt, SIMD_ADDR_POST), QL_SIMD_LDST_ANY, F_SIZEQ | F_OD(1)},
1637 1.1 christos {"ld2", 0xcc00000, 0xbfe00000, asisdlsep, 0, SIMD, OP2 (LVt, SIMD_ADDR_POST), QL_SIMD_LDST, F_SIZEQ | F_OD(2)},
1638 1.1 christos {"ld3", 0xcc00000, 0xbfe00000, asisdlsep, 0, SIMD, OP2 (LVt, SIMD_ADDR_POST), QL_SIMD_LDST, F_SIZEQ | F_OD(3)},
1639 1.1 christos /* AdvSIMD load/store single structure. */
1640 1.1 christos {"st1", 0xd000000, 0xbfff2000, asisdlso, 0, SIMD, OP2 (LEt, SIMD_ADDR_SIMPLE), QL_SIMD_LDSTONE, F_OD(1)},
1641 1.1 christos {"st3", 0xd002000, 0xbfff2000, asisdlso, 0, SIMD, OP2 (LEt, SIMD_ADDR_SIMPLE), QL_SIMD_LDSTONE, F_OD(3)},
1642 1.1 christos {"st2", 0xd200000, 0xbfff2000, asisdlso, 0, SIMD, OP2 (LEt, SIMD_ADDR_SIMPLE), QL_SIMD_LDSTONE, F_OD(2)},
1643 1.1 christos {"st4", 0xd202000, 0xbfff2000, asisdlso, 0, SIMD, OP2 (LEt, SIMD_ADDR_SIMPLE), QL_SIMD_LDSTONE, F_OD(4)},
1644 1.1 christos {"ld1", 0xd400000, 0xbfff2000, asisdlso, 0, SIMD, OP2 (LEt, SIMD_ADDR_SIMPLE), QL_SIMD_LDSTONE, F_OD(1)},
1645 1.1 christos {"ld3", 0xd402000, 0xbfff2000, asisdlso, 0, SIMD, OP2 (LEt, SIMD_ADDR_SIMPLE), QL_SIMD_LDSTONE, F_OD(3)},
1646 1.1 christos {"ld1r", 0xd40c000, 0xbfffe000, asisdlso, 0, SIMD, OP2 (LVt_AL, SIMD_ADDR_SIMPLE), QL_SIMD_LDST_ANY, F_SIZEQ | F_OD(1)},
1647 1.1 christos {"ld3r", 0xd40e000, 0xbfffe000, asisdlso, 0, SIMD, OP2 (LVt_AL, SIMD_ADDR_SIMPLE), QL_SIMD_LDST_ANY, F_SIZEQ | F_OD(3)},
1648 1.1 christos {"ld2", 0xd600000, 0xbfff2000, asisdlso, 0, SIMD, OP2 (LEt, SIMD_ADDR_SIMPLE), QL_SIMD_LDSTONE, F_OD(2)},
1649 1.1 christos {"ld4", 0xd602000, 0xbfff2000, asisdlso, 0, SIMD, OP2 (LEt, SIMD_ADDR_SIMPLE), QL_SIMD_LDSTONE, F_OD(4)},
1650 1.1 christos {"ld2r", 0xd60c000, 0xbfffe000, asisdlso, 0, SIMD, OP2 (LVt_AL, SIMD_ADDR_SIMPLE), QL_SIMD_LDST_ANY, F_SIZEQ | F_OD(2)},
1651 1.1 christos {"ld4r", 0xd60e000, 0xbfffe000, asisdlso, 0, SIMD, OP2 (LVt_AL, SIMD_ADDR_SIMPLE), QL_SIMD_LDST_ANY, F_SIZEQ | F_OD(4)},
1652 1.1 christos /* AdvSIMD load/store single structure (post-indexed). */
1653 1.1 christos {"st1", 0xd800000, 0xbfe02000, asisdlsop, 0, SIMD, OP2 (LEt, SIMD_ADDR_POST), QL_SIMD_LDSTONE, F_OD(1)},
1654 1.1 christos {"st3", 0xd802000, 0xbfe02000, asisdlsop, 0, SIMD, OP2 (LEt, SIMD_ADDR_POST), QL_SIMD_LDSTONE, F_OD(3)},
1655 1.1 christos {"st2", 0xda00000, 0xbfe02000, asisdlsop, 0, SIMD, OP2 (LEt, SIMD_ADDR_POST), QL_SIMD_LDSTONE, F_OD(2)},
1656 1.1 christos {"st4", 0xda02000, 0xbfe02000, asisdlsop, 0, SIMD, OP2 (LEt, SIMD_ADDR_POST), QL_SIMD_LDSTONE, F_OD(4)},
1657 1.1 christos {"ld1", 0xdc00000, 0xbfe02000, asisdlsop, 0, SIMD, OP2 (LEt, SIMD_ADDR_POST), QL_SIMD_LDSTONE, F_OD(1)},
1658 1.1 christos {"ld3", 0xdc02000, 0xbfe02000, asisdlsop, 0, SIMD, OP2 (LEt, SIMD_ADDR_POST), QL_SIMD_LDSTONE, F_OD(3)},
1659 1.1 christos {"ld1r", 0xdc0c000, 0xbfe0e000, asisdlsop, 0, SIMD, OP2 (LVt_AL, SIMD_ADDR_POST), QL_SIMD_LDST_ANY, F_SIZEQ | F_OD(1)},
1660 1.1 christos {"ld3r", 0xdc0e000, 0xbfe0e000, asisdlsop, 0, SIMD, OP2 (LVt_AL, SIMD_ADDR_POST), QL_SIMD_LDST_ANY, F_SIZEQ | F_OD(3)},
1661 1.1 christos {"ld2", 0xde00000, 0xbfe02000, asisdlsop, 0, SIMD, OP2 (LEt, SIMD_ADDR_POST), QL_SIMD_LDSTONE, F_OD(2)},
1662 1.1 christos {"ld4", 0xde02000, 0xbfe02000, asisdlsop, 0, SIMD, OP2 (LEt, SIMD_ADDR_POST), QL_SIMD_LDSTONE, F_OD(4)},
1663 1.1 christos {"ld2r", 0xde0c000, 0xbfe0e000, asisdlsop, 0, SIMD, OP2 (LVt_AL, SIMD_ADDR_POST), QL_SIMD_LDST_ANY, F_SIZEQ | F_OD(2)},
1664 1.1 christos {"ld4r", 0xde0e000, 0xbfe0e000, asisdlsop, 0, SIMD, OP2 (LVt_AL, SIMD_ADDR_POST), QL_SIMD_LDST_ANY, F_SIZEQ | F_OD(4)},
1665 1.1 christos /* AdvSIMD scalar two-reg misc. */
1666 1.1 christos {"suqadd", 0x5e203800, 0xff3ffc00, asisdmisc, 0, SIMD, OP2 (Sd, Sn), QL_S_2SAME, F_SSIZE},
1667 1.1 christos {"sqabs", 0x5e207800, 0xff3ffc00, asisdmisc, 0, SIMD, OP2 (Sd, Sn), QL_S_2SAME, F_SSIZE},
1668 1.1 christos {"cmgt", 0x5e208800, 0xff3ffc00, asisdmisc, 0, SIMD, OP3 (Sd, Sn, IMM0), QL_SISD_CMP_0, F_SSIZE},
1669 1.1 christos {"cmeq", 0x5e209800, 0xff3ffc00, asisdmisc, 0, SIMD, OP3 (Sd, Sn, IMM0), QL_SISD_CMP_0, F_SSIZE},
1670 1.1 christos {"cmlt", 0x5e20a800, 0xff3ffc00, asisdmisc, 0, SIMD, OP3 (Sd, Sn, IMM0), QL_SISD_CMP_0, F_SSIZE},
1671 1.1 christos {"abs", 0x5e20b800, 0xff3ffc00, asisdmisc, 0, SIMD, OP2 (Sd, Sn), QL_2SAMED, F_SSIZE},
1672 1.1 christos {"sqxtn", 0x5e214800, 0xff3ffc00, asisdmisc, 0, SIMD, OP2 (Sd, Sn), QL_SISD_NARROW, F_SSIZE},
1673 1.1 christos {"fcvtns", 0x5e21a800, 0xffbffc00, asisdmisc, 0, SIMD, OP2 (Sd, Sn), QL_S_2SAMESD, F_SSIZE},
1674 1.1 christos {"fcvtms", 0x5e21b800, 0xffbffc00, asisdmisc, 0, SIMD, OP2 (Sd, Sn), QL_S_2SAMESD, F_SSIZE},
1675 1.1 christos {"fcvtas", 0x5e21c800, 0xffbffc00, asisdmisc, 0, SIMD, OP2 (Sd, Sn), QL_S_2SAMESD, F_SSIZE},
1676 1.3 christos {"scvtf", 0x5e21d800, 0xffbffc00, asisdmisc, 0, SIMD, OP2 (Sd, Sn), QL_S_2SAMESD, F_SSIZE},
1677 1.3 christos {"fcmgt", 0x5ea0c800, 0xffbffc00, asisdmisc, 0, SIMD, OP3 (Sd, Sn, FPIMM0), QL_SISD_FCMP_0, F_SSIZE},
1678 1.3 christos {"fcmeq", 0x5ea0d800, 0xffbffc00, asisdmisc, 0, SIMD, OP3 (Sd, Sn, FPIMM0), QL_SISD_FCMP_0, F_SSIZE},
1679 1.1 christos {"fcmlt", 0x5ea0e800, 0xffbffc00, asisdmisc, 0, SIMD, OP3 (Sd, Sn, FPIMM0), QL_SISD_FCMP_0, F_SSIZE},
1680 1.1 christos {"fcvtps", 0x5ea1a800, 0xffbffc00, asisdmisc, 0, SIMD, OP2 (Sd, Sn), QL_S_2SAMESD, F_SSIZE},
1681 1.1 christos {"fcvtzs", 0x5ea1b800, 0xffbffc00, asisdmisc, 0, SIMD, OP2 (Sd, Sn), QL_S_2SAMESD, F_SSIZE},
1682 1.1 christos {"frecpe", 0x5ea1d800, 0xffbffc00, asisdmisc, 0, SIMD, OP2 (Sd, Sn), QL_S_2SAMESD, F_SSIZE},
1683 1.1 christos {"frecpx", 0x5ea1f800, 0xffbffc00, asisdmisc, 0, SIMD, OP2 (Sd, Sn), QL_S_2SAMESD, F_SSIZE},
1684 1.1 christos {"usqadd", 0x7e203800, 0xff3ffc00, asisdmisc, 0, SIMD, OP2 (Sd, Sn), QL_S_2SAME, F_SSIZE},
1685 1.1 christos {"sqneg", 0x7e207800, 0xff3ffc00, asisdmisc, 0, SIMD, OP2 (Sd, Sn), QL_S_2SAME, F_SSIZE},
1686 1.1 christos {"cmge", 0x7e208800, 0xff3ffc00, asisdmisc, 0, SIMD, OP3 (Sd, Sn, IMM0), QL_SISD_CMP_0, F_SSIZE},
1687 1.1 christos {"cmle", 0x7e209800, 0xff3ffc00, asisdmisc, 0, SIMD, OP3 (Sd, Sn, IMM0), QL_SISD_CMP_0, F_SSIZE},
1688 1.1 christos {"neg", 0x7e20b800, 0xff3ffc00, asisdmisc, 0, SIMD, OP2 (Sd, Sn), QL_2SAMED, F_SSIZE},
1689 1.1 christos {"sqxtun", 0x7e212800, 0xff3ffc00, asisdmisc, 0, SIMD, OP2 (Sd, Sn), QL_SISD_NARROW, F_SSIZE},
1690 1.1 christos {"uqxtn", 0x7e214800, 0xff3ffc00, asisdmisc, 0, SIMD, OP2 (Sd, Sn), QL_SISD_NARROW, F_SSIZE},
1691 1.1 christos {"fcvtxn", 0x7e216800, 0xffbffc00, asisdmisc, OP_FCVTXN_S, SIMD, OP2 (Sd, Sn), QL_SISD_NARROW_S, F_MISC},
1692 1.1 christos {"fcvtnu", 0x7e21a800, 0xffbffc00, asisdmisc, 0, SIMD, OP2 (Sd, Sn), QL_S_2SAMESD, F_SSIZE},
1693 1.1 christos {"fcvtmu", 0x7e21b800, 0xffbffc00, asisdmisc, 0, SIMD, OP2 (Sd, Sn), QL_S_2SAMESD, F_SSIZE},
1694 1.1 christos {"fcvtau", 0x7e21c800, 0xffbffc00, asisdmisc, 0, SIMD, OP2 (Sd, Sn), QL_S_2SAMESD, F_SSIZE},
1695 1.3 christos {"ucvtf", 0x7e21d800, 0xffbffc00, asisdmisc, 0, SIMD, OP2 (Sd, Sn), QL_S_2SAMESD, F_SSIZE},
1696 1.3 christos {"fcmge", 0x7ea0c800, 0xffbffc00, asisdmisc, 0, SIMD, OP3 (Sd, Sn, FPIMM0), QL_SISD_FCMP_0, F_SSIZE},
1697 1.1 christos {"fcmle", 0x7ea0d800, 0xffbffc00, asisdmisc, 0, SIMD, OP3 (Sd, Sn, FPIMM0), QL_SISD_FCMP_0, F_SSIZE},
1698 1.1 christos {"fcvtpu", 0x7ea1a800, 0xffbffc00, asisdmisc, 0, SIMD, OP2 (Sd, Sn), QL_S_2SAMESD, F_SSIZE},
1699 1.1 christos {"fcvtzu", 0x7ea1b800, 0xffbffc00, asisdmisc, 0, SIMD, OP2 (Sd, Sn), QL_S_2SAMESD, F_SSIZE},
1700 1.1 christos {"frsqrte", 0x7ea1d800, 0xffbffc00, asisdmisc, 0, SIMD, OP2 (Sd, Sn), QL_S_2SAMESD, F_SSIZE},
1701 1.1 christos /* AdvSIMD scalar copy. */
1702 1.1 christos {"dup", 0x5e000400, 0xffe0fc00, asisdone, 0, SIMD, OP2 (Sd, En), QL_S_2SAME, F_HAS_ALIAS},
1703 1.1 christos {"mov", 0x5e000400, 0xffe0fc00, asisdone, 0, SIMD, OP2 (Sd, En), QL_S_2SAME, F_ALIAS},
1704 1.1 christos /* AdvSIMD scalar pairwise. */
1705 1.1 christos {"addp", 0x5e31b800, 0xff3ffc00, asisdpair, 0, SIMD, OP2 (Sd, Vn), QL_SISD_PAIR_D, F_SIZEQ},
1706 1.1 christos {"fmaxnmp", 0x7e30c800, 0xffbffc00, asisdpair, 0, SIMD, OP2 (Sd, Vn), QL_SISD_PAIR, F_SIZEQ},
1707 1.1 christos {"faddp", 0x7e30d800, 0xffbffc00, asisdpair, 0, SIMD, OP2 (Sd, Vn), QL_SISD_PAIR, F_SIZEQ},
1708 1.1 christos {"fmaxp", 0x7e30f800, 0xffbffc00, asisdpair, 0, SIMD, OP2 (Sd, Vn), QL_SISD_PAIR, F_SIZEQ},
1709 1.1 christos {"fminnmp", 0x7eb0c800, 0xffbffc00, asisdpair, 0, SIMD, OP2 (Sd, Vn), QL_SISD_PAIR, F_SIZEQ},
1710 1.1 christos {"fminp", 0x7eb0f800, 0xffbffc00, asisdpair, 0, SIMD, OP2 (Sd, Vn), QL_SISD_PAIR, F_SIZEQ},
1711 1.1 christos /* AdvSIMD scalar three same. */
1712 1.1 christos {"sqadd", 0x5e200c00, 0xff20fc00, asisdsame, 0, SIMD, OP3 (Sd, Sn, Sm), QL_S_3SAME, F_SSIZE},
1713 1.1 christos {"sqsub", 0x5e202c00, 0xff20fc00, asisdsame, 0, SIMD, OP3 (Sd, Sn, Sm), QL_S_3SAME, F_SSIZE},
1714 1.1 christos {"sqshl", 0x5e204c00, 0xff20fc00, asisdsame, 0, SIMD, OP3 (Sd, Sn, Sm), QL_S_3SAME, F_SSIZE},
1715 1.1 christos {"sqrshl", 0x5e205c00, 0xff20fc00, asisdsame, 0, SIMD, OP3 (Sd, Sn, Sm), QL_S_3SAME, F_SSIZE},
1716 1.1 christos {"sqdmulh", 0x5e20b400, 0xff20fc00, asisdsame, 0, SIMD, OP3 (Sd, Sn, Sm), QL_SISD_HS, F_SSIZE},
1717 1.1 christos {"fmulx", 0x5e20dc00, 0xffa0fc00, asisdsame, 0, SIMD, OP3 (Sd, Sn, Sm), QL_FP3, F_SSIZE},
1718 1.1 christos {"fcmeq", 0x5e20e400, 0xffa0fc00, asisdsame, 0, SIMD, OP3 (Sd, Sn, Sm), QL_FP3, F_SSIZE},
1719 1.1 christos {"frecps", 0x5e20fc00, 0xffa0fc00, asisdsame, 0, SIMD, OP3 (Sd, Sn, Sm), QL_FP3, F_SSIZE},
1720 1.1 christos {"frsqrts", 0x5ea0fc00, 0xffa0fc00, asisdsame, 0, SIMD, OP3 (Sd, Sn, Sm), QL_FP3, F_SSIZE},
1721 1.1 christos {"cmgt", 0x5ee03400, 0xffe0fc00, asisdsame, 0, SIMD, OP3 (Sd, Sn, Sm), QL_S_3SAMED, F_SSIZE},
1722 1.1 christos {"cmge", 0x5ee03c00, 0xffe0fc00, asisdsame, 0, SIMD, OP3 (Sd, Sn, Sm), QL_S_3SAMED, F_SSIZE},
1723 1.1 christos {"sshl", 0x5ee04400, 0xffe0fc00, asisdsame, 0, SIMD, OP3 (Sd, Sn, Sm), QL_S_3SAMED, F_SSIZE},
1724 1.1 christos {"srshl", 0x5ee05400, 0xffe0fc00, asisdsame, 0, SIMD, OP3 (Sd, Sn, Sm), QL_S_3SAMED, F_SSIZE},
1725 1.1 christos {"add", 0x5ee08400, 0xffe0fc00, asisdsame, 0, SIMD, OP3 (Sd, Sn, Sm), QL_S_3SAMED, F_SSIZE},
1726 1.1 christos {"cmtst", 0x5ee08c00, 0xffe0fc00, asisdsame, 0, SIMD, OP3 (Sd, Sn, Sm), QL_S_3SAMED, F_SSIZE},
1727 1.1 christos {"uqadd", 0x7e200c00, 0xff20fc00, asisdsame, 0, SIMD, OP3 (Sd, Sn, Sm), QL_S_3SAME, F_SSIZE},
1728 1.1 christos {"uqsub", 0x7e202c00, 0xff20fc00, asisdsame, 0, SIMD, OP3 (Sd, Sn, Sm), QL_S_3SAME, F_SSIZE},
1729 1.1 christos {"uqshl", 0x7e204c00, 0xff20fc00, asisdsame, 0, SIMD, OP3 (Sd, Sn, Sm), QL_S_3SAME, F_SSIZE},
1730 1.1 christos {"uqrshl", 0x7e205c00, 0xff20fc00, asisdsame, 0, SIMD, OP3 (Sd, Sn, Sm), QL_S_3SAME, F_SSIZE},
1731 1.1 christos {"sqrdmulh", 0x7e20b400, 0xff20fc00, asisdsame, 0, SIMD, OP3 (Sd, Sn, Sm), QL_SISD_HS, F_SSIZE},
1732 1.1 christos {"fcmge", 0x7e20e400, 0xffa0fc00, asisdsame, 0, SIMD, OP3 (Sd, Sn, Sm), QL_FP3, F_SSIZE},
1733 1.1 christos {"facge", 0x7e20ec00, 0xffa0fc00, asisdsame, 0, SIMD, OP3 (Sd, Sn, Sm), QL_FP3, F_SSIZE},
1734 1.1 christos {"fabd", 0x7ea0d400, 0xffa0fc00, asisdsame, 0, SIMD, OP3 (Sd, Sn, Sm), QL_FP3, F_SSIZE},
1735 1.1 christos {"fcmgt", 0x7ea0e400, 0xffa0fc00, asisdsame, 0, SIMD, OP3 (Sd, Sn, Sm), QL_FP3, F_SSIZE},
1736 1.1 christos {"facgt", 0x7ea0ec00, 0xffa0fc00, asisdsame, 0, SIMD, OP3 (Sd, Sn, Sm), QL_FP3, F_SSIZE},
1737 1.1 christos {"cmhi", 0x7ee03400, 0xffe0fc00, asisdsame, 0, SIMD, OP3 (Sd, Sn, Sm), QL_S_3SAMED, F_SSIZE},
1738 1.1 christos {"cmhs", 0x7ee03c00, 0xffe0fc00, asisdsame, 0, SIMD, OP3 (Sd, Sn, Sm), QL_S_3SAMED, F_SSIZE},
1739 1.1 christos {"ushl", 0x7ee04400, 0xffe0fc00, asisdsame, 0, SIMD, OP3 (Sd, Sn, Sm), QL_S_3SAMED, F_SSIZE},
1740 1.1 christos {"urshl", 0x7ee05400, 0xffe0fc00, asisdsame, 0, SIMD, OP3 (Sd, Sn, Sm), QL_S_3SAMED, F_SSIZE},
1741 1.1 christos {"sub", 0x7ee08400, 0xffe0fc00, asisdsame, 0, SIMD, OP3 (Sd, Sn, Sm), QL_S_3SAMED, F_SSIZE},
1742 1.5 christos {"cmeq", 0x7ee08c00, 0xffe0fc00, asisdsame, 0, SIMD, OP3 (Sd, Sn, Sm), QL_S_3SAMED, F_SSIZE},
1743 1.5 christos /* AdvSIMDs scalar three same extension. */
1744 1.5 christos {"sqrdmlah", 0x7e008400, 0xff20fc00, asimdsame, 0, RDMA, OP3 (Sd, Sn, Sm), QL_SISD_HS, F_SSIZE},
1745 1.1 christos {"sqrdmlsh", 0x7e008c00, 0xff20fc00, asimdsame, 0, RDMA, OP3 (Sd, Sn, Sm), QL_SISD_HS, F_SSIZE},
1746 1.1 christos /* AdvSIMD scalar shift by immediate. */
1747 1.1 christos {"sshr", 0x5f000400, 0xff80fc00, asisdshf, 0, SIMD, OP3 (Sd, Sn, IMM_VLSR), QL_SSHIFT_D, 0},
1748 1.1 christos {"ssra", 0x5f001400, 0xff80fc00, asisdshf, 0, SIMD, OP3 (Sd, Sn, IMM_VLSR), QL_SSHIFT_D, 0},
1749 1.1 christos {"srshr", 0x5f002400, 0xff80fc00, asisdshf, 0, SIMD, OP3 (Sd, Sn, IMM_VLSR), QL_SSHIFT_D, 0},
1750 1.1 christos {"srsra", 0x5f003400, 0xff80fc00, asisdshf, 0, SIMD, OP3 (Sd, Sn, IMM_VLSR), QL_SSHIFT_D, 0},
1751 1.1 christos {"shl", 0x5f005400, 0xff80fc00, asisdshf, 0, SIMD, OP3 (Sd, Sn, IMM_VLSL), QL_SSHIFT_D, 0},
1752 1.1 christos {"sqshl", 0x5f007400, 0xff80fc00, asisdshf, 0, SIMD, OP3 (Sd, Sn, IMM_VLSL), QL_SSHIFT, 0},
1753 1.1 christos {"sqshrn", 0x5f009400, 0xff80fc00, asisdshf, 0, SIMD, OP3 (Sd, Sn, IMM_VLSR), QL_SSHIFTN, 0},
1754 1.1 christos {"sqrshrn", 0x5f009c00, 0xff80fc00, asisdshf, 0, SIMD, OP3 (Sd, Sn, IMM_VLSR), QL_SSHIFTN, 0},
1755 1.1 christos {"scvtf", 0x5f00e400, 0xff80fc00, asisdshf, 0, SIMD, OP3 (Sd, Sn, IMM_VLSR), QL_SSHIFT_SD, 0},
1756 1.1 christos {"fcvtzs", 0x5f00fc00, 0xff80fc00, asisdshf, 0, SIMD, OP3 (Sd, Sn, IMM_VLSR), QL_SSHIFT_SD, 0},
1757 1.1 christos {"ushr", 0x7f000400, 0xff80fc00, asisdshf, 0, SIMD, OP3 (Sd, Sn, IMM_VLSR), QL_SSHIFT_D, 0},
1758 1.1 christos {"usra", 0x7f001400, 0xff80fc00, asisdshf, 0, SIMD, OP3 (Sd, Sn, IMM_VLSR), QL_SSHIFT_D, 0},
1759 1.1 christos {"urshr", 0x7f002400, 0xff80fc00, asisdshf, 0, SIMD, OP3 (Sd, Sn, IMM_VLSR), QL_SSHIFT_D, 0},
1760 1.1 christos {"ursra", 0x7f003400, 0xff80fc00, asisdshf, 0, SIMD, OP3 (Sd, Sn, IMM_VLSR), QL_SSHIFT_D, 0},
1761 1.1 christos {"sri", 0x7f004400, 0xff80fc00, asisdshf, 0, SIMD, OP3 (Sd, Sn, IMM_VLSR), QL_SSHIFT_D, 0},
1762 1.1 christos {"sli", 0x7f005400, 0xff80fc00, asisdshf, 0, SIMD, OP3 (Sd, Sn, IMM_VLSL), QL_SSHIFT_D, 0},
1763 1.1 christos {"sqshlu", 0x7f006400, 0xff80fc00, asisdshf, 0, SIMD, OP3 (Sd, Sn, IMM_VLSL), QL_SSHIFT, 0},
1764 1.1 christos {"uqshl", 0x7f007400, 0xff80fc00, asisdshf, 0, SIMD, OP3 (Sd, Sn, IMM_VLSL), QL_SSHIFT, 0},
1765 1.1 christos {"sqshrun", 0x7f008400, 0xff80fc00, asisdshf, 0, SIMD, OP3 (Sd, Sn, IMM_VLSR), QL_SSHIFTN, 0},
1766 1.1 christos {"sqrshrun", 0x7f008c00, 0xff80fc00, asisdshf, 0, SIMD, OP3 (Sd, Sn, IMM_VLSR), QL_SSHIFTN, 0},
1767 1.1 christos {"uqshrn", 0x7f009400, 0xff80fc00, asisdshf, 0, SIMD, OP3 (Sd, Sn, IMM_VLSR), QL_SSHIFTN, 0},
1768 1.1 christos {"uqrshrn", 0x7f009c00, 0xff80fc00, asisdshf, 0, SIMD, OP3 (Sd, Sn, IMM_VLSR), QL_SSHIFTN, 0},
1769 1.1 christos {"ucvtf", 0x7f00e400, 0xff80fc00, asisdshf, 0, SIMD, OP3 (Sd, Sn, IMM_VLSR), QL_SSHIFT_SD, 0},
1770 1.1 christos {"fcvtzu", 0x7f00fc00, 0xff80fc00, asisdshf, 0, SIMD, OP3 (Sd, Sn, IMM_VLSR), QL_SSHIFT_SD, 0},
1771 1.1 christos /* Bitfield. */
1772 1.1 christos {"sbfm", 0x13000000, 0x7f800000, bitfield, 0, CORE, OP4 (Rd, Rn, IMMR, IMMS), QL_BF, F_HAS_ALIAS | F_SF | F_N},
1773 1.1 christos {"sbfiz", 0x13000000, 0x7f800000, bitfield, OP_SBFIZ, CORE, OP4 (Rd, Rn, IMM, WIDTH), QL_BF2, F_ALIAS | F_P1 | F_CONV},
1774 1.1 christos {"sbfx", 0x13000000, 0x7f800000, bitfield, OP_SBFX, CORE, OP4 (Rd, Rn, IMM, WIDTH), QL_BF2, F_ALIAS | F_P1 | F_CONV},
1775 1.1 christos {"sxtb", 0x13001c00, 0x7fbffc00, bitfield, 0, CORE, OP2 (Rd, Rn), QL_EXT, F_ALIAS | F_P3 | F_SF | F_N},
1776 1.1 christos {"sxth", 0x13003c00, 0x7fbffc00, bitfield, 0, CORE, OP2 (Rd, Rn), QL_EXT, F_ALIAS | F_P3 | F_SF | F_N},
1777 1.1 christos {"sxtw", 0x93407c00, 0xfffffc00, bitfield, 0, CORE, OP2 (Rd, Rn), QL_EXT_W, F_ALIAS | F_P3},
1778 1.1 christos {"asr", 0x13000000, 0x7f800000, bitfield, OP_ASR_IMM, CORE, OP3 (Rd, Rn, IMM), QL_SHIFT, F_ALIAS | F_P2 | F_CONV},
1779 1.1 christos {"bfm", 0x33000000, 0x7f800000, bitfield, 0, CORE, OP4 (Rd, Rn, IMMR, IMMS), QL_BF, F_HAS_ALIAS | F_SF | F_N},
1780 1.1 christos {"bfi", 0x33000000, 0x7f800000, bitfield, OP_BFI, CORE, OP4 (Rd, Rn, IMM, WIDTH), QL_BF2, F_ALIAS | F_P1 | F_CONV},
1781 1.1 christos {"bfxil", 0x33000000, 0x7f800000, bitfield, OP_BFXIL, CORE, OP4 (Rd, Rn, IMM, WIDTH), QL_BF2, F_ALIAS | F_P1 | F_CONV},
1782 1.1 christos {"ubfm", 0x53000000, 0x7f800000, bitfield, 0, CORE, OP4 (Rd, Rn, IMMR, IMMS), QL_BF, F_HAS_ALIAS | F_SF | F_N},
1783 1.1 christos {"ubfiz", 0x53000000, 0x7f800000, bitfield, OP_UBFIZ, CORE, OP4 (Rd, Rn, IMM, WIDTH), QL_BF2, F_ALIAS | F_P1 | F_CONV},
1784 1.1 christos {"ubfx", 0x53000000, 0x7f800000, bitfield, OP_UBFX, CORE, OP4 (Rd, Rn, IMM, WIDTH), QL_BF2, F_ALIAS | F_P1 | F_CONV},
1785 1.1 christos {"uxtb", 0x53001c00, 0xfffffc00, bitfield, OP_UXTB, CORE, OP2 (Rd, Rn), QL_I2SAMEW, F_ALIAS | F_P3},
1786 1.1 christos {"uxth", 0x53003c00, 0xfffffc00, bitfield, OP_UXTH, CORE, OP2 (Rd, Rn), QL_I2SAMEW, F_ALIAS | F_P3},
1787 1.1 christos {"lsl", 0x53000000, 0x7f800000, bitfield, OP_LSL_IMM, CORE, OP3 (Rd, Rn, IMM), QL_SHIFT, F_ALIAS | F_P2 | F_CONV},
1788 1.1 christos {"lsr", 0x53000000, 0x7f800000, bitfield, OP_LSR_IMM, CORE, OP3 (Rd, Rn, IMM), QL_SHIFT, F_ALIAS | F_P2 | F_CONV},
1789 1.1 christos /* Unconditional branch (immediate). */
1790 1.1 christos {"b", 0x14000000, 0xfc000000, branch_imm, OP_B, CORE, OP1 (ADDR_PCREL26), QL_PCREL_26, 0},
1791 1.1 christos {"bl", 0x94000000, 0xfc000000, branch_imm, OP_BL, CORE, OP1 (ADDR_PCREL26), QL_PCREL_26, 0},
1792 1.1 christos /* Unconditional branch (register). */
1793 1.1 christos {"br", 0xd61f0000, 0xfffffc1f, branch_reg, 0, CORE, OP1 (Rn), QL_I1X, 0},
1794 1.1 christos {"blr", 0xd63f0000, 0xfffffc1f, branch_reg, 0, CORE, OP1 (Rn), QL_I1X, 0},
1795 1.1 christos {"ret", 0xd65f0000, 0xfffffc1f, branch_reg, 0, CORE, OP1 (Rn), QL_I1X, F_OPD0_OPT | F_DEFAULT (30)},
1796 1.1 christos {"eret", 0xd69f03e0, 0xffffffff, branch_reg, 0, CORE, OP0 (), {}, 0},
1797 1.1 christos {"drps", 0xd6bf03e0, 0xffffffff, branch_reg, 0, CORE, OP0 (), {}, 0},
1798 1.1 christos /* Compare & branch (immediate). */
1799 1.1 christos {"cbz", 0x34000000, 0x7f000000, compbranch, 0, CORE, OP2 (Rt, ADDR_PCREL19), QL_R_PCREL, F_SF},
1800 1.1 christos {"cbnz", 0x35000000, 0x7f000000, compbranch, 0, CORE, OP2 (Rt, ADDR_PCREL19), QL_R_PCREL, F_SF},
1801 1.1 christos /* Conditional branch (immediate). */
1802 1.1 christos {"b.c", 0x54000000, 0xff000010, condbranch, 0, CORE, OP1 (ADDR_PCREL19), QL_PCREL_NIL, F_COND},
1803 1.1 christos /* Conditional compare (immediate). */
1804 1.1 christos {"ccmn", 0x3a400800, 0x7fe00c10, condcmp_imm, 0, CORE, OP4 (Rn, CCMP_IMM, NZCV, COND), QL_CCMP_IMM, F_SF},
1805 1.1 christos {"ccmp", 0x7a400800, 0x7fe00c10, condcmp_imm, 0, CORE, OP4 (Rn, CCMP_IMM, NZCV, COND), QL_CCMP_IMM, F_SF},
1806 1.1 christos /* Conditional compare (register). */
1807 1.1 christos {"ccmn", 0x3a400000, 0x7fe00c10, condcmp_reg, 0, CORE, OP4 (Rn, Rm, NZCV, COND), QL_CCMP, F_SF},
1808 1.1 christos {"ccmp", 0x7a400000, 0x7fe00c10, condcmp_reg, 0, CORE, OP4 (Rn, Rm, NZCV, COND), QL_CCMP, F_SF},
1809 1.1 christos /* Conditional select. */
1810 1.1 christos {"csel", 0x1a800000, 0x7fe00c00, condsel, 0, CORE, OP4 (Rd, Rn, Rm, COND), QL_CSEL, F_SF},
1811 1.1 christos {"csinc", 0x1a800400, 0x7fe00c00, condsel, 0, CORE, OP4 (Rd, Rn, Rm, COND), QL_CSEL, F_HAS_ALIAS | F_SF},
1812 1.1 christos {"cinc", 0x1a800400, 0x7fe00c00, condsel, OP_CINC, CORE, OP3 (Rd, Rn, COND1), QL_CSEL, F_ALIAS | F_SF | F_CONV},
1813 1.1 christos {"cset", 0x1a9f07e0, 0x7fff0fe0, condsel, OP_CSET, CORE, OP2 (Rd, COND1), QL_DST_R, F_ALIAS | F_P1 | F_SF | F_CONV},
1814 1.1 christos {"csinv", 0x5a800000, 0x7fe00c00, condsel, 0, CORE, OP4 (Rd, Rn, Rm, COND), QL_CSEL, F_HAS_ALIAS | F_SF},
1815 1.1 christos {"cinv", 0x5a800000, 0x7fe00c00, condsel, OP_CINV, CORE, OP3 (Rd, Rn, COND1), QL_CSEL, F_ALIAS | F_SF | F_CONV},
1816 1.1 christos {"csetm", 0x5a9f03e0, 0x7fff0fe0, condsel, OP_CSETM, CORE, OP2 (Rd, COND1), QL_DST_R, F_ALIAS | F_P1 | F_SF | F_CONV},
1817 1.1 christos {"csneg", 0x5a800400, 0x7fe00c00, condsel, 0, CORE, OP4 (Rd, Rn, Rm, COND), QL_CSEL, F_HAS_ALIAS | F_SF},
1818 1.1 christos {"cneg", 0x5a800400, 0x7fe00c00, condsel, OP_CNEG, CORE, OP3 (Rd, Rn, COND1), QL_CSEL, F_ALIAS | F_SF | F_CONV},
1819 1.1 christos /* Crypto AES. */
1820 1.1 christos {"aese", 0x4e284800, 0xfffffc00, cryptoaes, 0, CRYPTO, OP2 (Vd, Vn), QL_V2SAME16B, 0},
1821 1.1 christos {"aesd", 0x4e285800, 0xfffffc00, cryptoaes, 0, CRYPTO, OP2 (Vd, Vn), QL_V2SAME16B, 0},
1822 1.1 christos {"aesmc", 0x4e286800, 0xfffffc00, cryptoaes, 0, CRYPTO, OP2 (Vd, Vn), QL_V2SAME16B, 0},
1823 1.1 christos {"aesimc", 0x4e287800, 0xfffffc00, cryptoaes, 0, CRYPTO, OP2 (Vd, Vn), QL_V2SAME16B, 0},
1824 1.1 christos /* Crypto two-reg SHA. */
1825 1.1 christos {"sha1h", 0x5e280800, 0xfffffc00, cryptosha2, 0, CRYPTO, OP2 (Fd, Fn), QL_2SAMES, 0},
1826 1.1 christos {"sha1su1", 0x5e281800, 0xfffffc00, cryptosha2, 0, CRYPTO, OP2 (Vd, Vn), QL_V2SAME4S, 0},
1827 1.1 christos {"sha256su0", 0x5e282800, 0xfffffc00, cryptosha2, 0, CRYPTO, OP2 (Vd, Vn), QL_V2SAME4S, 0},
1828 1.1 christos /* Crypto three-reg SHA. */
1829 1.1 christos {"sha1c", 0x5e000000, 0xffe0fc00, cryptosha3, 0, CRYPTO, OP3 (Fd, Fn, Vm), QL_SHAUPT, 0},
1830 1.1 christos {"sha1p", 0x5e001000, 0xffe0fc00, cryptosha3, 0, CRYPTO, OP3 (Fd, Fn, Vm), QL_SHAUPT, 0},
1831 1.1 christos {"sha1m", 0x5e002000, 0xffe0fc00, cryptosha3, 0, CRYPTO, OP3 (Fd, Fn, Vm), QL_SHAUPT, 0},
1832 1.1 christos {"sha1su0", 0x5e003000, 0xffe0fc00, cryptosha3, 0, CRYPTO, OP3 (Vd, Vn, Vm), QL_V3SAME4S, 0},
1833 1.1 christos {"sha256h", 0x5e004000, 0xffe0fc00, cryptosha3, 0, CRYPTO, OP3 (Fd, Fn, Vm), QL_SHA256UPT, 0},
1834 1.1 christos {"sha256h2", 0x5e005000, 0xffe0fc00, cryptosha3, 0, CRYPTO, OP3 (Fd, Fn, Vm), QL_SHA256UPT, 0},
1835 1.1 christos {"sha256su1", 0x5e006000, 0xffe0fc00, cryptosha3, 0, CRYPTO, OP3 (Vd, Vn, Vm), QL_V3SAME4S, 0},
1836 1.1 christos /* Data-processing (1 source). */
1837 1.1 christos {"rbit", 0x5ac00000, 0x7ffffc00, dp_1src, 0, CORE, OP2 (Rd, Rn), QL_I2SAME, F_SF},
1838 1.1 christos {"rev16", 0x5ac00400, 0x7ffffc00, dp_1src, 0, CORE, OP2 (Rd, Rn), QL_I2SAME, F_SF},
1839 1.1 christos {"rev", 0x5ac00800, 0xfffffc00, dp_1src, 0, CORE, OP2 (Rd, Rn), QL_I2SAMEW, 0},
1840 1.1 christos {"rev", 0xdac00c00, 0x7ffffc00, dp_1src, 0, CORE, OP2 (Rd, Rn), QL_I2SAMEX, 0},
1841 1.1 christos {"clz", 0x5ac01000, 0x7ffffc00, dp_1src, 0, CORE, OP2 (Rd, Rn), QL_I2SAME, F_SF},
1842 1.1 christos {"cls", 0x5ac01400, 0x7ffffc00, dp_1src, 0, CORE, OP2 (Rd, Rn), QL_I2SAME, F_SF},
1843 1.1 christos {"rev32", 0xdac00800, 0xfffffc00, dp_1src, 0, CORE, OP2 (Rd, Rn), QL_I2SAMEX, 0},
1844 1.1 christos /* Data-processing (2 source). */
1845 1.1 christos {"udiv", 0x1ac00800, 0x7fe0fc00, dp_2src, 0, CORE, OP3 (Rd, Rn, Rm), QL_I3SAMER, F_SF},
1846 1.1 christos {"sdiv", 0x1ac00c00, 0x7fe0fc00, dp_2src, 0, CORE, OP3 (Rd, Rn, Rm), QL_I3SAMER, F_SF},
1847 1.1 christos {"lslv", 0x1ac02000, 0x7fe0fc00, dp_2src, 0, CORE, OP3 (Rd, Rn, Rm), QL_I3SAMER, F_SF | F_HAS_ALIAS},
1848 1.1 christos {"lsl", 0x1ac02000, 0x7fe0fc00, dp_2src, 0, CORE, OP3 (Rd, Rn, Rm), QL_I3SAMER, F_SF | F_ALIAS},
1849 1.1 christos {"lsrv", 0x1ac02400, 0x7fe0fc00, dp_2src, 0, CORE, OP3 (Rd, Rn, Rm), QL_I3SAMER, F_SF | F_HAS_ALIAS},
1850 1.1 christos {"lsr", 0x1ac02400, 0x7fe0fc00, dp_2src, 0, CORE, OP3 (Rd, Rn, Rm), QL_I3SAMER, F_SF | F_ALIAS},
1851 1.1 christos {"asrv", 0x1ac02800, 0x7fe0fc00, dp_2src, 0, CORE, OP3 (Rd, Rn, Rm), QL_I3SAMER, F_SF | F_HAS_ALIAS},
1852 1.1 christos {"asr", 0x1ac02800, 0x7fe0fc00, dp_2src, 0, CORE, OP3 (Rd, Rn, Rm), QL_I3SAMER, F_SF | F_ALIAS},
1853 1.1 christos {"rorv", 0x1ac02c00, 0x7fe0fc00, dp_2src, 0, CORE, OP3 (Rd, Rn, Rm), QL_I3SAMER, F_SF | F_HAS_ALIAS},
1854 1.1 christos {"ror", 0x1ac02c00, 0x7fe0fc00, dp_2src, 0, CORE, OP3 (Rd, Rn, Rm), QL_I3SAMER, F_SF | F_ALIAS},
1855 1.1 christos /* CRC instructions. */
1856 1.1 christos {"crc32b", 0x1ac04000, 0xffe0fc00, dp_2src, 0, CRC, OP3 (Rd, Rn, Rm), QL_I3SAMEW, 0},
1857 1.1 christos {"crc32h", 0x1ac04400, 0xffe0fc00, dp_2src, 0, CRC, OP3 (Rd, Rn, Rm), QL_I3SAMEW, 0},
1858 1.1 christos {"crc32w", 0x1ac04800, 0xffe0fc00, dp_2src, 0, CRC, OP3 (Rd, Rn, Rm), QL_I3SAMEW, 0},
1859 1.1 christos {"crc32x", 0x9ac04c00, 0xffe0fc00, dp_2src, 0, CRC, OP3 (Rd, Rn, Rm), QL_I3WWX, 0},
1860 1.1 christos {"crc32cb", 0x1ac05000, 0xffe0fc00, dp_2src, 0, CRC, OP3 (Rd, Rn, Rm), QL_I3SAMEW, 0},
1861 1.1 christos {"crc32ch", 0x1ac05400, 0xffe0fc00, dp_2src, 0, CRC, OP3 (Rd, Rn, Rm), QL_I3SAMEW, 0},
1862 1.1 christos {"crc32cw", 0x1ac05800, 0xffe0fc00, dp_2src, 0, CRC, OP3 (Rd, Rn, Rm), QL_I3SAMEW, 0},
1863 1.1 christos {"crc32cx", 0x9ac05c00, 0xffe0fc00, dp_2src, 0, CRC, OP3 (Rd, Rn, Rm), QL_I3WWX, 0},
1864 1.1 christos /* Data-processing (3 source). */
1865 1.1 christos {"madd", 0x1b000000, 0x7fe08000, dp_3src, 0, CORE, OP4 (Rd, Rn, Rm, Ra), QL_I4SAMER, F_HAS_ALIAS | F_SF},
1866 1.1 christos {"mul", 0x1b007c00, 0x7fe0fc00, dp_3src, 0, CORE, OP3 (Rd, Rn, Rm), QL_I3SAMER, F_ALIAS | F_SF},
1867 1.1 christos {"msub", 0x1b008000, 0x7fe08000, dp_3src, 0, CORE, OP4 (Rd, Rn, Rm, Ra), QL_I4SAMER, F_HAS_ALIAS | F_SF},
1868 1.1 christos {"mneg", 0x1b00fc00, 0x7fe0fc00, dp_3src, 0, CORE, OP3 (Rd, Rn, Rm), QL_I3SAMER, F_ALIAS | F_SF},
1869 1.1 christos {"smaddl", 0x9b200000, 0xffe08000, dp_3src, 0, CORE, OP4 (Rd, Rn, Rm, Ra), QL_I4SAMEL, F_HAS_ALIAS},
1870 1.1 christos {"smull", 0x9b207c00, 0xffe0fc00, dp_3src, 0, CORE, OP3 (Rd, Rn, Rm), QL_I3SAMEL, F_ALIAS},
1871 1.1 christos {"smsubl", 0x9b208000, 0xffe08000, dp_3src, 0, CORE, OP4 (Rd, Rn, Rm, Ra), QL_I4SAMEL, F_HAS_ALIAS},
1872 1.1 christos {"smnegl", 0x9b20fc00, 0xffe0fc00, dp_3src, 0, CORE, OP3 (Rd, Rn, Rm), QL_I3SAMEL, F_ALIAS},
1873 1.1 christos {"smulh", 0x9b407c00, 0xffe08000, dp_3src, 0, CORE, OP3 (Rd, Rn, Rm), QL_I3SAMEX, 0},
1874 1.1 christos {"umaddl", 0x9ba00000, 0xffe08000, dp_3src, 0, CORE, OP4 (Rd, Rn, Rm, Ra), QL_I4SAMEL, F_HAS_ALIAS},
1875 1.1 christos {"umull", 0x9ba07c00, 0xffe0fc00, dp_3src, 0, CORE, OP3 (Rd, Rn, Rm), QL_I3SAMEL, F_ALIAS},
1876 1.1 christos {"umsubl", 0x9ba08000, 0xffe08000, dp_3src, 0, CORE, OP4 (Rd, Rn, Rm, Ra), QL_I4SAMEL, F_HAS_ALIAS},
1877 1.1 christos {"umnegl", 0x9ba0fc00, 0xffe0fc00, dp_3src, 0, CORE, OP3 (Rd, Rn, Rm), QL_I3SAMEL, F_ALIAS},
1878 1.1 christos {"umulh", 0x9bc07c00, 0xffe08000, dp_3src, 0, CORE, OP3 (Rd, Rn, Rm), QL_I3SAMEX, 0},
1879 1.1 christos /* Excep'n generation. */
1880 1.1 christos {"svc", 0xd4000001, 0xffe0001f, exception, 0, CORE, OP1 (EXCEPTION), {}, 0},
1881 1.1 christos {"hvc", 0xd4000002, 0xffe0001f, exception, 0, CORE, OP1 (EXCEPTION), {}, 0},
1882 1.1 christos {"smc", 0xd4000003, 0xffe0001f, exception, 0, CORE, OP1 (EXCEPTION), {}, 0},
1883 1.1 christos {"brk", 0xd4200000, 0xffe0001f, exception, 0, CORE, OP1 (EXCEPTION), {}, 0},
1884 1.1 christos {"hlt", 0xd4400000, 0xffe0001f, exception, 0, CORE, OP1 (EXCEPTION), {}, 0},
1885 1.1 christos {"dcps1", 0xd4a00001, 0xffe0001f, exception, 0, CORE, OP1 (EXCEPTION), {}, F_OPD0_OPT | F_DEFAULT (0)},
1886 1.1 christos {"dcps2", 0xd4a00002, 0xffe0001f, exception, 0, CORE, OP1 (EXCEPTION), {}, F_OPD0_OPT | F_DEFAULT (0)},
1887 1.1 christos {"dcps3", 0xd4a00003, 0xffe0001f, exception, 0, CORE, OP1 (EXCEPTION), {}, F_OPD0_OPT | F_DEFAULT (0)},
1888 1.1 christos /* Extract. */
1889 1.1 christos {"extr", 0x13800000, 0x7fa00000, extract, 0, CORE, OP4 (Rd, Rn, Rm, IMMS), QL_EXTR, F_HAS_ALIAS | F_SF | F_N},
1890 1.1 christos {"ror", 0x13800000, 0x7fa00000, extract, OP_ROR_IMM, CORE, OP3 (Rd, Rm, IMMS), QL_SHIFT, F_ALIAS | F_CONV},
1891 1.1 christos /* Floating-point<->fixed-point conversions. */
1892 1.1 christos {"scvtf", 0x1e020000, 0x7f3f0000, float2fix, 0, FP, OP3 (Fd, Rn, FBITS), QL_FIX2FP, F_FPTYPE | F_SF},
1893 1.1 christos {"ucvtf", 0x1e030000, 0x7f3f0000, float2fix, 0, FP, OP3 (Fd, Rn, FBITS), QL_FIX2FP, F_FPTYPE | F_SF},
1894 1.1 christos {"fcvtzs", 0x1e180000, 0x7f3f0000, float2fix, 0, FP, OP3 (Rd, Fn, FBITS), QL_FP2FIX, F_FPTYPE | F_SF},
1895 1.1 christos {"fcvtzu", 0x1e190000, 0x7f3f0000, float2fix, 0, FP, OP3 (Rd, Fn, FBITS), QL_FP2FIX, F_FPTYPE | F_SF},
1896 1.1 christos /* Floating-point<->integer conversions. */
1897 1.1 christos {"fcvtns", 0x1e200000, 0x7f3ffc00, float2int, 0, FP, OP2 (Rd, Fn), QL_FP2INT, F_FPTYPE | F_SF},
1898 1.1 christos {"fcvtnu", 0x1e210000, 0x7f3ffc00, float2int, 0, FP, OP2 (Rd, Fn), QL_FP2INT, F_FPTYPE | F_SF},
1899 1.1 christos {"scvtf", 0x1e220000, 0x7f3ffc00, float2int, 0, FP, OP2 (Fd, Rn), QL_INT2FP, F_FPTYPE | F_SF},
1900 1.1 christos {"ucvtf", 0x1e230000, 0x7f3ffc00, float2int, 0, FP, OP2 (Fd, Rn), QL_INT2FP, F_FPTYPE | F_SF},
1901 1.1 christos {"fcvtas", 0x1e240000, 0x7f3ffc00, float2int, 0, FP, OP2 (Rd, Fn), QL_FP2INT, F_FPTYPE | F_SF},
1902 1.1 christos {"fcvtau", 0x1e250000, 0x7f3ffc00, float2int, 0, FP, OP2 (Rd, Fn), QL_FP2INT, F_FPTYPE | F_SF},
1903 1.1 christos {"fmov", 0x1e260000, 0x7f3ffc00, float2int, 0, FP, OP2 (Rd, Fn), QL_FP2INT, F_FPTYPE | F_SF},
1904 1.1 christos {"fmov", 0x1e270000, 0x7f3ffc00, float2int, 0, FP, OP2 (Fd, Rn), QL_INT2FP, F_FPTYPE | F_SF},
1905 1.1 christos {"fcvtps", 0x1e280000, 0x7f3ffc00, float2int, 0, FP, OP2 (Rd, Fn), QL_FP2INT, F_FPTYPE | F_SF},
1906 1.1 christos {"fcvtpu", 0x1e290000, 0x7f3ffc00, float2int, 0, FP, OP2 (Rd, Fn), QL_FP2INT, F_FPTYPE | F_SF},
1907 1.1 christos {"fcvtms", 0x1e300000, 0x7f3ffc00, float2int, 0, FP, OP2 (Rd, Fn), QL_FP2INT, F_FPTYPE | F_SF},
1908 1.1 christos {"fcvtmu", 0x1e310000, 0x7f3ffc00, float2int, 0, FP, OP2 (Rd, Fn), QL_FP2INT, F_FPTYPE | F_SF},
1909 1.1 christos {"fcvtzs", 0x1e380000, 0x7f3ffc00, float2int, 0, FP, OP2 (Rd, Fn), QL_FP2INT, F_FPTYPE | F_SF},
1910 1.1 christos {"fcvtzu", 0x1e390000, 0x7f3ffc00, float2int, 0, FP, OP2 (Rd, Fn), QL_FP2INT, F_FPTYPE | F_SF},
1911 1.1 christos {"fmov", 0x9eae0000, 0xfffffc00, float2int, 0, FP, OP2 (Rd, VnD1), QL_XVD1, 0},
1912 1.1 christos {"fmov", 0x9eaf0000, 0xfffffc00, float2int, 0, FP, OP2 (VdD1, Rn), QL_VD1X, 0},
1913 1.1 christos /* Floating-point conditional compare. */
1914 1.1 christos {"fccmp", 0x1e200400, 0xff200c10, floatccmp, 0, FP, OP4 (Fn, Fm, NZCV, COND), QL_FCCMP, F_FPTYPE},
1915 1.1 christos {"fccmpe", 0x1e200410, 0xff200c10, floatccmp, 0, FP, OP4 (Fn, Fm, NZCV, COND), QL_FCCMP, F_FPTYPE},
1916 1.1 christos /* Floating-point compare. */
1917 1.1 christos {"fcmp", 0x1e202000, 0xff20fc1f, floatcmp, 0, FP, OP2 (Fn, Fm), QL_FP2, F_FPTYPE},
1918 1.1 christos {"fcmpe", 0x1e202010, 0xff20fc1f, floatcmp, 0, FP, OP2 (Fn, Fm), QL_FP2, F_FPTYPE},
1919 1.1 christos {"fcmp", 0x1e202008, 0xff20fc1f, floatcmp, 0, FP, OP2 (Fn, FPIMM0), QL_DST_SD, F_FPTYPE},
1920 1.1 christos {"fcmpe", 0x1e202018, 0xff20fc1f, floatcmp, 0, FP, OP2 (Fn, FPIMM0), QL_DST_SD, F_FPTYPE},
1921 1.1 christos /* Floating-point data-processing (1 source). */
1922 1.1 christos {"fmov", 0x1e204000, 0xff3ffc00, floatdp1, 0, FP, OP2 (Fd, Fn), QL_FP2, F_FPTYPE},
1923 1.1 christos {"fabs", 0x1e20c000, 0xff3ffc00, floatdp1, 0, FP, OP2 (Fd, Fn), QL_FP2, F_FPTYPE},
1924 1.1 christos {"fneg", 0x1e214000, 0xff3ffc00, floatdp1, 0, FP, OP2 (Fd, Fn), QL_FP2, F_FPTYPE},
1925 1.1 christos {"fsqrt", 0x1e21c000, 0xff3ffc00, floatdp1, 0, FP, OP2 (Fd, Fn), QL_FP2, F_FPTYPE},
1926 1.1 christos {"fcvt", 0x1e224000, 0xff3e7c00, floatdp1, OP_FCVT, FP, OP2 (Fd, Fn), QL_FCVT, F_FPTYPE | F_MISC},
1927 1.1 christos {"frintn", 0x1e244000, 0xff3ffc00, floatdp1, 0, FP, OP2 (Fd, Fn), QL_FP2, F_FPTYPE},
1928 1.1 christos {"frintp", 0x1e24c000, 0xff3ffc00, floatdp1, 0, FP, OP2 (Fd, Fn), QL_FP2, F_FPTYPE},
1929 1.1 christos {"frintm", 0x1e254000, 0xff3ffc00, floatdp1, 0, FP, OP2 (Fd, Fn), QL_FP2, F_FPTYPE},
1930 1.1 christos {"frintz", 0x1e25c000, 0xff3ffc00, floatdp1, 0, FP, OP2 (Fd, Fn), QL_FP2, F_FPTYPE},
1931 1.1 christos {"frinta", 0x1e264000, 0xff3ffc00, floatdp1, 0, FP, OP2 (Fd, Fn), QL_FP2, F_FPTYPE},
1932 1.1 christos {"frintx", 0x1e274000, 0xff3ffc00, floatdp1, 0, FP, OP2 (Fd, Fn), QL_FP2, F_FPTYPE},
1933 1.1 christos {"frinti", 0x1e27c000, 0xff3ffc00, floatdp1, 0, FP, OP2 (Fd, Fn), QL_FP2, F_FPTYPE},
1934 1.1 christos /* Floating-point data-processing (2 source). */
1935 1.1 christos {"fmul", 0x1e200800, 0xff20fc00, floatdp2, 0, FP, OP3 (Fd, Fn, Fm), QL_FP3, F_FPTYPE},
1936 1.1 christos {"fdiv", 0x1e201800, 0xff20fc00, floatdp2, 0, FP, OP3 (Fd, Fn, Fm), QL_FP3, F_FPTYPE},
1937 1.1 christos {"fadd", 0x1e202800, 0xff20fc00, floatdp2, 0, FP, OP3 (Fd, Fn, Fm), QL_FP3, F_FPTYPE},
1938 1.1 christos {"fsub", 0x1e203800, 0xff20fc00, floatdp2, 0, FP, OP3 (Fd, Fn, Fm), QL_FP3, F_FPTYPE},
1939 1.1 christos {"fmax", 0x1e204800, 0xff20fc00, floatdp2, 0, FP, OP3 (Fd, Fn, Fm), QL_FP3, F_FPTYPE},
1940 1.1 christos {"fmin", 0x1e205800, 0xff20fc00, floatdp2, 0, FP, OP3 (Fd, Fn, Fm), QL_FP3, F_FPTYPE},
1941 1.1 christos {"fmaxnm", 0x1e206800, 0xff20fc00, floatdp2, 0, FP, OP3 (Fd, Fn, Fm), QL_FP3, F_FPTYPE},
1942 1.1 christos {"fminnm", 0x1e207800, 0xff20fc00, floatdp2, 0, FP, OP3 (Fd, Fn, Fm), QL_FP3, F_FPTYPE},
1943 1.1 christos {"fnmul", 0x1e208800, 0xff20fc00, floatdp2, 0, FP, OP3 (Fd, Fn, Fm), QL_FP3, F_FPTYPE},
1944 1.1 christos /* Floating-point data-processing (3 source). */
1945 1.1 christos {"fmadd", 0x1f000000, 0xff208000, floatdp3, 0, FP, OP4 (Fd, Fn, Fm, Fa), QL_FP4, F_FPTYPE},
1946 1.1 christos {"fmsub", 0x1f008000, 0xff208000, floatdp3, 0, FP, OP4 (Fd, Fn, Fm, Fa), QL_FP4, F_FPTYPE},
1947 1.1 christos {"fnmadd", 0x1f200000, 0xff208000, floatdp3, 0, FP, OP4 (Fd, Fn, Fm, Fa), QL_FP4, F_FPTYPE},
1948 1.1 christos {"fnmsub", 0x1f208000, 0xff208000, floatdp3, 0, FP, OP4 (Fd, Fn, Fm, Fa), QL_FP4, F_FPTYPE},
1949 1.1 christos /* Floating-point immediate. */
1950 1.1 christos {"fmov", 0x1e201000, 0xff201fe0, floatimm, 0, FP, OP2 (Fd, FPIMM), QL_DST_SD, F_FPTYPE},
1951 1.1 christos /* Floating-point conditional select. */
1952 1.1 christos {"fcsel", 0x1e200c00, 0xff200c00, floatsel, 0, FP, OP4 (Fd, Fn, Fm, COND), QL_FP_COND, F_FPTYPE},
1953 1.1 christos /* Load/store register (immediate indexed). */
1954 1.1 christos {"strb", 0x38000400, 0xffe00400, ldst_imm9, 0, CORE, OP2 (Rt, ADDR_SIMM9), QL_LDST_W8, 0},
1955 1.1 christos {"ldrb", 0x38400400, 0xffe00400, ldst_imm9, 0, CORE, OP2 (Rt, ADDR_SIMM9), QL_LDST_W8, 0},
1956 1.1 christos {"ldrsb", 0x38800400, 0xffa00400, ldst_imm9, 0, CORE, OP2 (Rt, ADDR_SIMM9), QL_LDST_R8, F_LDS_SIZE},
1957 1.1 christos {"str", 0x3c000400, 0x3f600400, ldst_imm9, 0, CORE, OP2 (Ft, ADDR_SIMM9), QL_LDST_FP, 0},
1958 1.1 christos {"ldr", 0x3c400400, 0x3f600400, ldst_imm9, 0, CORE, OP2 (Ft, ADDR_SIMM9), QL_LDST_FP, 0},
1959 1.1 christos {"strh", 0x78000400, 0xffe00400, ldst_imm9, 0, CORE, OP2 (Rt, ADDR_SIMM9), QL_LDST_W16, 0},
1960 1.1 christos {"ldrh", 0x78400400, 0xffe00400, ldst_imm9, 0, CORE, OP2 (Rt, ADDR_SIMM9), QL_LDST_W16, 0},
1961 1.1 christos {"ldrsh", 0x78800400, 0xffa00400, ldst_imm9, 0, CORE, OP2 (Rt, ADDR_SIMM9), QL_LDST_R16, F_LDS_SIZE},
1962 1.1 christos {"str", 0xb8000400, 0xbfe00400, ldst_imm9, 0, CORE, OP2 (Rt, ADDR_SIMM9), QL_LDST_R, F_GPRSIZE_IN_Q},
1963 1.1 christos {"ldr", 0xb8400400, 0xbfe00400, ldst_imm9, 0, CORE, OP2 (Rt, ADDR_SIMM9), QL_LDST_R, F_GPRSIZE_IN_Q},
1964 1.1 christos {"ldrsw", 0xb8800400, 0xffe00400, ldst_imm9, 0, CORE, OP2 (Rt, ADDR_SIMM9), QL_LDST_X32, 0},
1965 1.1 christos /* Load/store register (unsigned immediate). */
1966 1.1 christos {"strb", 0x39000000, 0xffc00000, ldst_pos, OP_STRB_POS, CORE, OP2 (Rt, ADDR_UIMM12), QL_LDST_W8, 0},
1967 1.1 christos {"ldrb", 0x39400000, 0xffc00000, ldst_pos, OP_LDRB_POS, CORE, OP2 (Rt, ADDR_UIMM12), QL_LDST_W8, 0},
1968 1.1 christos {"ldrsb", 0x39800000, 0xff800000, ldst_pos, OP_LDRSB_POS, CORE, OP2 (Rt, ADDR_UIMM12), QL_LDST_R8, F_LDS_SIZE},
1969 1.1 christos {"str", 0x3d000000, 0x3f400000, ldst_pos, OP_STRF_POS, CORE, OP2 (Ft, ADDR_UIMM12), QL_LDST_FP, 0},
1970 1.1 christos {"ldr", 0x3d400000, 0x3f400000, ldst_pos, OP_LDRF_POS, CORE, OP2 (Ft, ADDR_UIMM12), QL_LDST_FP, 0},
1971 1.1 christos {"strh", 0x79000000, 0xffc00000, ldst_pos, OP_STRH_POS, CORE, OP2 (Rt, ADDR_UIMM12), QL_LDST_W16, 0},
1972 1.1 christos {"ldrh", 0x79400000, 0xffc00000, ldst_pos, OP_LDRH_POS, CORE, OP2 (Rt, ADDR_UIMM12), QL_LDST_W16, 0},
1973 1.1 christos {"ldrsh", 0x79800000, 0xff800000, ldst_pos, OP_LDRSH_POS, CORE, OP2 (Rt, ADDR_UIMM12), QL_LDST_R16, F_LDS_SIZE},
1974 1.1 christos {"str", 0xb9000000, 0xbfc00000, ldst_pos, OP_STR_POS, CORE, OP2 (Rt, ADDR_UIMM12), QL_LDST_R, F_GPRSIZE_IN_Q},
1975 1.1 christos {"ldr", 0xb9400000, 0xbfc00000, ldst_pos, OP_LDR_POS, CORE, OP2 (Rt, ADDR_UIMM12), QL_LDST_R, F_GPRSIZE_IN_Q},
1976 1.1 christos {"ldrsw", 0xb9800000, 0xffc00000, ldst_pos, OP_LDRSW_POS, CORE, OP2 (Rt, ADDR_UIMM12), QL_LDST_X32, 0},
1977 1.1 christos {"prfm", 0xf9800000, 0xffc00000, ldst_pos, OP_PRFM_POS, CORE, OP2 (PRFOP, ADDR_UIMM12), QL_LDST_PRFM, 0},
1978 1.1 christos /* Load/store register (register offset). */
1979 1.1 christos {"strb", 0x38200800, 0xffe00c00, ldst_regoff, 0, CORE, OP2 (Rt, ADDR_REGOFF), QL_LDST_W8, 0},
1980 1.1 christos {"ldrb", 0x38600800, 0xffe00c00, ldst_regoff, 0, CORE, OP2 (Rt, ADDR_REGOFF), QL_LDST_W8, 0},
1981 1.1 christos {"ldrsb", 0x38a00800, 0xffa00c00, ldst_regoff, 0, CORE, OP2 (Rt, ADDR_REGOFF), QL_LDST_R8, F_LDS_SIZE},
1982 1.1 christos {"str", 0x3c200800, 0x3f600c00, ldst_regoff, 0, CORE, OP2 (Ft, ADDR_REGOFF), QL_LDST_FP, 0},
1983 1.1 christos {"ldr", 0x3c600800, 0x3f600c00, ldst_regoff, 0, CORE, OP2 (Ft, ADDR_REGOFF), QL_LDST_FP, 0},
1984 1.1 christos {"strh", 0x78200800, 0xffe00c00, ldst_regoff, 0, CORE, OP2 (Rt, ADDR_REGOFF), QL_LDST_W16, 0},
1985 1.1 christos {"ldrh", 0x78600800, 0xffe00c00, ldst_regoff, 0, CORE, OP2 (Rt, ADDR_REGOFF), QL_LDST_W16, 0},
1986 1.1 christos {"ldrsh", 0x78a00800, 0xffa00c00, ldst_regoff, 0, CORE, OP2 (Rt, ADDR_REGOFF), QL_LDST_R16, F_LDS_SIZE},
1987 1.1 christos {"str", 0xb8200800, 0xbfe00c00, ldst_regoff, 0, CORE, OP2 (Rt, ADDR_REGOFF), QL_LDST_R, F_GPRSIZE_IN_Q},
1988 1.1 christos {"ldr", 0xb8600800, 0xbfe00c00, ldst_regoff, 0, CORE, OP2 (Rt, ADDR_REGOFF), QL_LDST_R, F_GPRSIZE_IN_Q},
1989 1.1 christos {"ldrsw", 0xb8a00800, 0xffe00c00, ldst_regoff, 0, CORE, OP2 (Rt, ADDR_REGOFF), QL_LDST_X32, 0},
1990 1.1 christos {"prfm", 0xf8a00800, 0xffe00c00, ldst_regoff, 0, CORE, OP2 (PRFOP, ADDR_REGOFF), QL_LDST_PRFM, 0},
1991 1.1 christos /* Load/store register (unprivileged). */
1992 1.1 christos {"sttrb", 0x38000800, 0xffe00c00, ldst_unpriv, 0, CORE, OP2 (Rt, ADDR_SIMM9), QL_LDST_W8, 0},
1993 1.1 christos {"ldtrb", 0x38400800, 0xffe00c00, ldst_unpriv, 0, CORE, OP2 (Rt, ADDR_SIMM9), QL_LDST_W8, 0},
1994 1.1 christos {"ldtrsb", 0x38800800, 0xffa00c00, ldst_unpriv, 0, CORE, OP2 (Rt, ADDR_SIMM9), QL_LDST_R8, F_LDS_SIZE},
1995 1.1 christos {"sttrh", 0x78000800, 0xffe00c00, ldst_unpriv, 0, CORE, OP2 (Rt, ADDR_SIMM9), QL_LDST_W16, 0},
1996 1.1 christos {"ldtrh", 0x78400800, 0xffe00c00, ldst_unpriv, 0, CORE, OP2 (Rt, ADDR_SIMM9), QL_LDST_W16, 0},
1997 1.1 christos {"ldtrsh", 0x78800800, 0xffa00c00, ldst_unpriv, 0, CORE, OP2 (Rt, ADDR_SIMM9), QL_LDST_R16, F_LDS_SIZE},
1998 1.1 christos {"sttr", 0xb8000800, 0xbfe00c00, ldst_unpriv, 0, CORE, OP2 (Rt, ADDR_SIMM9), QL_LDST_R, F_GPRSIZE_IN_Q},
1999 1.1 christos {"ldtr", 0xb8400800, 0xbfe00c00, ldst_unpriv, 0, CORE, OP2 (Rt, ADDR_SIMM9), QL_LDST_R, F_GPRSIZE_IN_Q},
2000 1.1 christos {"ldtrsw", 0xb8800800, 0xffe00c00, ldst_unpriv, 0, CORE, OP2 (Rt, ADDR_SIMM9), QL_LDST_X32, 0},
2001 1.5 christos /* Load/store register (unscaled immediate). */
2002 1.5 christos {"sturb", 0x38000000, 0xffe00c00, ldst_unscaled, OP_STURB, CORE, OP2 (Rt, ADDR_SIMM9), QL_LDST_W8, 0},
2003 1.5 christos {"ldurb", 0x38400000, 0xffe00c00, ldst_unscaled, OP_LDURB, CORE, OP2 (Rt, ADDR_SIMM9), QL_LDST_W8, 0},
2004 1.5 christos {"ldursb", 0x38800000, 0xffa00c00, ldst_unscaled, OP_LDURSB, CORE, OP2 (Rt, ADDR_SIMM9), QL_LDST_R8, F_LDS_SIZE},
2005 1.5 christos {"stur", 0x3c000000, 0x3f600c00, ldst_unscaled, OP_STURV, CORE, OP2 (Ft, ADDR_SIMM9), QL_LDST_FP, 0},
2006 1.5 christos {"ldur", 0x3c400000, 0x3f600c00, ldst_unscaled, OP_LDURV, CORE, OP2 (Ft, ADDR_SIMM9), QL_LDST_FP, 0},
2007 1.5 christos {"sturh", 0x78000000, 0xffe00c00, ldst_unscaled, OP_STURH, CORE, OP2 (Rt, ADDR_SIMM9), QL_LDST_W16, 0},
2008 1.5 christos {"ldurh", 0x78400000, 0xffe00c00, ldst_unscaled, OP_LDURH, CORE, OP2 (Rt, ADDR_SIMM9), QL_LDST_W16, 0},
2009 1.5 christos {"ldursh", 0x78800000, 0xffa00c00, ldst_unscaled, OP_LDURSH, CORE, OP2 (Rt, ADDR_SIMM9), QL_LDST_R16, F_LDS_SIZE},
2010 1.5 christos {"stur", 0xb8000000, 0xbfe00c00, ldst_unscaled, OP_STUR, CORE, OP2 (Rt, ADDR_SIMM9), QL_LDST_R, F_GPRSIZE_IN_Q},
2011 1.5 christos {"ldur", 0xb8400000, 0xbfe00c00, ldst_unscaled, OP_LDUR, CORE, OP2 (Rt, ADDR_SIMM9), QL_LDST_R, F_GPRSIZE_IN_Q},
2012 1.5 christos {"ldursw", 0xb8800000, 0xffe00c00, ldst_unscaled, OP_LDURSW, CORE, OP2 (Rt, ADDR_SIMM9), QL_LDST_X32, 0},
2013 1.1 christos {"prfum", 0xf8800000, 0xffe00c00, ldst_unscaled, OP_PRFUM, CORE, OP2 (PRFOP, ADDR_SIMM9), QL_LDST_PRFM, 0},
2014 1.1 christos /* Load/store exclusive. */
2015 1.1 christos {"stxrb", 0x8007c00, 0xffe08000, ldstexcl, 0, CORE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2016 1.1 christos {"stlxrb", 0x800fc00, 0xffe08000, ldstexcl, 0, CORE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2017 1.1 christos {"ldxrb", 0x85f7c00, 0xffe08000, ldstexcl, 0, CORE, OP2 (Rt, ADDR_SIMPLE), QL_W1_LDST_EXC, 0},
2018 1.1 christos {"ldaxrb", 0x85ffc00, 0xffe08000, ldstexcl, 0, CORE, OP2 (Rt, ADDR_SIMPLE), QL_W1_LDST_EXC, 0},
2019 1.3 christos {"stlrb", 0x89ffc00, 0xffe08000, ldstexcl, 0, CORE, OP2 (Rt, ADDR_SIMPLE), QL_W1_LDST_EXC, 0},
2020 1.1 christos {"ldarb", 0x8dffc00, 0xffeffc00, ldstexcl, 0, CORE, OP2 (Rt, ADDR_SIMPLE), QL_W1_LDST_EXC, 0},
2021 1.1 christos {"stxrh", 0x48007c00, 0xffe08000, ldstexcl, 0, CORE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2022 1.1 christos {"stlxrh", 0x4800fc00, 0xffe08000, ldstexcl, 0, CORE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2023 1.1 christos {"ldxrh", 0x485f7c00, 0xffe08000, ldstexcl, 0, CORE, OP2 (Rt, ADDR_SIMPLE), QL_W1_LDST_EXC, 0},
2024 1.1 christos {"ldaxrh", 0x485ffc00, 0xffe08000, ldstexcl, 0, CORE, OP2 (Rt, ADDR_SIMPLE), QL_W1_LDST_EXC, 0},
2025 1.3 christos {"stlrh", 0x489ffc00, 0xffe08000, ldstexcl, 0, CORE, OP2 (Rt, ADDR_SIMPLE), QL_W1_LDST_EXC, 0},
2026 1.1 christos {"ldarh", 0x48dffc00, 0xffeffc00, ldstexcl, 0, CORE, OP2 (Rt, ADDR_SIMPLE), QL_W1_LDST_EXC, 0},
2027 1.1 christos {"stxr", 0x88007c00, 0xbfe08000, ldstexcl, 0, CORE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2_LDST_EXC, F_GPRSIZE_IN_Q},
2028 1.1 christos {"stlxr", 0x8800fc00, 0xbfe08000, ldstexcl, 0, CORE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2_LDST_EXC, F_GPRSIZE_IN_Q},
2029 1.1 christos {"stxp", 0x88200000, 0xbfe08000, ldstexcl, 0, CORE, OP4 (Rs, Rt, Rt2, ADDR_SIMPLE), QL_R3_LDST_EXC, F_GPRSIZE_IN_Q},
2030 1.1 christos {"stlxp", 0x88208000, 0xbfe08000, ldstexcl, 0, CORE, OP4 (Rs, Rt, Rt2, ADDR_SIMPLE), QL_R3_LDST_EXC, F_GPRSIZE_IN_Q},
2031 1.1 christos {"ldxr", 0x885f7c00, 0xbfe08000, ldstexcl, 0, CORE, OP2 (Rt, ADDR_SIMPLE), QL_R1NIL, F_GPRSIZE_IN_Q},
2032 1.1 christos {"ldaxr", 0x885ffc00, 0xbfe08000, ldstexcl, 0, CORE, OP2 (Rt, ADDR_SIMPLE), QL_R1NIL, F_GPRSIZE_IN_Q},
2033 1.1 christos {"ldxp", 0x887f0000, 0xbfe08000, ldstexcl, 0, CORE, OP3 (Rt, Rt2, ADDR_SIMPLE), QL_R2NIL, F_GPRSIZE_IN_Q},
2034 1.1 christos {"ldaxp", 0x887f8000, 0xbfe08000, ldstexcl, 0, CORE, OP3 (Rt, Rt2, ADDR_SIMPLE), QL_R2NIL, F_GPRSIZE_IN_Q},
2035 1.3 christos {"stlr", 0x889ffc00, 0xbfe08000, ldstexcl, 0, CORE, OP2 (Rt, ADDR_SIMPLE), QL_R1NIL, F_GPRSIZE_IN_Q},
2036 1.5 christos {"ldar", 0x88dffc00, 0xbfeffc00, ldstexcl, 0, CORE, OP2 (Rt, ADDR_SIMPLE), QL_R1NIL, F_GPRSIZE_IN_Q},
2037 1.5 christos /* Limited Ordering Regions load/store instructions. */
2038 1.5 christos {"ldlar", 0x88df7c00, 0xbfe08000, ldstexcl, 0, LOR, OP2 (Rt, ADDR_SIMPLE), QL_R1NIL, F_GPRSIZE_IN_Q},
2039 1.5 christos {"ldlarb", 0x08df7c00, 0xffe08000, ldstexcl, 0, LOR, OP2 (Rt, ADDR_SIMPLE), QL_W1_LDST_EXC, 0},
2040 1.5 christos {"ldlarh", 0x48df7c00, 0xffe08000, ldstexcl, 0, LOR, OP2 (Rt, ADDR_SIMPLE), QL_W1_LDST_EXC, 0},
2041 1.5 christos {"stllr", 0x889f7c00, 0xbfe08000, ldstexcl, 0, LOR, OP2 (Rt, ADDR_SIMPLE), QL_R1NIL, F_GPRSIZE_IN_Q},
2042 1.5 christos {"stllrb", 0x089f7c00, 0xffe08000, ldstexcl, 0, LOR, OP2 (Rt, ADDR_SIMPLE), QL_W1_LDST_EXC, 0},
2043 1.1 christos {"stllrh", 0x489f7c00, 0xbfe08000, ldstexcl, 0, LOR, OP2 (Rt, ADDR_SIMPLE), QL_W1_LDST_EXC, 0},
2044 1.1 christos /* Load/store no-allocate pair (offset). */
2045 1.1 christos {"stnp", 0x28000000, 0x7fc00000, ldstnapair_offs, 0, CORE, OP3 (Rt, Rt2, ADDR_SIMM7), QL_LDST_PAIR_R, F_SF},
2046 1.1 christos {"ldnp", 0x28400000, 0x7fc00000, ldstnapair_offs, 0, CORE, OP3 (Rt, Rt2, ADDR_SIMM7), QL_LDST_PAIR_R, F_SF},
2047 1.1 christos {"stnp", 0x2c000000, 0x3fc00000, ldstnapair_offs, 0, CORE, OP3 (Ft, Ft2, ADDR_SIMM7), QL_LDST_PAIR_FP, 0},
2048 1.1 christos {"ldnp", 0x2c400000, 0x3fc00000, ldstnapair_offs, 0, CORE, OP3 (Ft, Ft2, ADDR_SIMM7), QL_LDST_PAIR_FP, 0},
2049 1.1 christos /* Load/store register pair (offset). */
2050 1.1 christos {"stp", 0x29000000, 0x7ec00000, ldstpair_off, 0, CORE, OP3 (Rt, Rt2, ADDR_SIMM7), QL_LDST_PAIR_R, F_SF},
2051 1.1 christos {"ldp", 0x29400000, 0x7ec00000, ldstpair_off, 0, CORE, OP3 (Rt, Rt2, ADDR_SIMM7), QL_LDST_PAIR_R, F_SF},
2052 1.1 christos {"stp", 0x2d000000, 0x3fc00000, ldstpair_off, 0, CORE, OP3 (Ft, Ft2, ADDR_SIMM7), QL_LDST_PAIR_FP, 0},
2053 1.1 christos {"ldp", 0x2d400000, 0x3fc00000, ldstpair_off, 0, CORE, OP3 (Ft, Ft2, ADDR_SIMM7), QL_LDST_PAIR_FP, 0},
2054 1.1 christos {"ldpsw", 0x69400000, 0xffc00000, ldstpair_off, 0, CORE, OP3 (Rt, Rt2, ADDR_SIMM7), QL_LDST_PAIR_X32, 0},
2055 1.1 christos /* Load/store register pair (indexed). */
2056 1.1 christos {"stp", 0x28800000, 0x7ec00000, ldstpair_indexed, 0, CORE, OP3 (Rt, Rt2, ADDR_SIMM7), QL_LDST_PAIR_R, F_SF},
2057 1.1 christos {"ldp", 0x28c00000, 0x7ec00000, ldstpair_indexed, 0, CORE, OP3 (Rt, Rt2, ADDR_SIMM7), QL_LDST_PAIR_R, F_SF},
2058 1.1 christos {"stp", 0x2c800000, 0x3ec00000, ldstpair_indexed, 0, CORE, OP3 (Ft, Ft2, ADDR_SIMM7), QL_LDST_PAIR_FP, 0},
2059 1.1 christos {"ldp", 0x2cc00000, 0x3ec00000, ldstpair_indexed, 0, CORE, OP3 (Ft, Ft2, ADDR_SIMM7), QL_LDST_PAIR_FP, 0},
2060 1.1 christos {"ldpsw", 0x68c00000, 0xfec00000, ldstpair_indexed, 0, CORE, OP3 (Rt, Rt2, ADDR_SIMM7), QL_LDST_PAIR_X32, 0},
2061 1.1 christos /* Load register (literal). */
2062 1.1 christos {"ldr", 0x18000000, 0xbf000000, loadlit, OP_LDR_LIT, CORE, OP2 (Rt, ADDR_PCREL19), QL_R_PCREL, F_GPRSIZE_IN_Q},
2063 1.1 christos {"ldr", 0x1c000000, 0x3f000000, loadlit, OP_LDRV_LIT, CORE, OP2 (Ft, ADDR_PCREL19), QL_FP_PCREL, 0},
2064 1.1 christos {"ldrsw", 0x98000000, 0xff000000, loadlit, OP_LDRSW_LIT, CORE, OP2 (Rt, ADDR_PCREL19), QL_X_PCREL, 0},
2065 1.1 christos {"prfm", 0xd8000000, 0xff000000, loadlit, OP_PRFM_LIT, CORE, OP2 (PRFOP, ADDR_PCREL19), QL_PRFM_PCREL, 0},
2066 1.1 christos /* Logical (immediate). */
2067 1.1 christos {"and", 0x12000000, 0x7f800000, log_imm, 0, CORE, OP3 (Rd_SP, Rn, LIMM), QL_R2NIL, F_HAS_ALIAS | F_SF},
2068 1.1 christos {"bic", 0x12000000, 0x7f800000, log_imm, OP_BIC, CORE, OP3 (Rd_SP, Rn, LIMM), QL_R2NIL, F_ALIAS | F_PSEUDO | F_SF},
2069 1.1 christos {"orr", 0x32000000, 0x7f800000, log_imm, 0, CORE, OP3 (Rd_SP, Rn, LIMM), QL_R2NIL, F_HAS_ALIAS | F_SF},
2070 1.1 christos {"mov", 0x320003e0, 0x7f8003e0, log_imm, OP_MOV_IMM_LOG, CORE, OP2 (Rd_SP, IMM_MOV), QL_R1NIL, F_ALIAS | F_P1 | F_SF | F_CONV},
2071 1.1 christos {"eor", 0x52000000, 0x7f800000, log_imm, 0, CORE, OP3 (Rd_SP, Rn, LIMM), QL_R2NIL, F_SF},
2072 1.1 christos {"ands", 0x72000000, 0x7f800000, log_imm, 0, CORE, OP3 (Rd, Rn, LIMM), QL_R2NIL, F_HAS_ALIAS | F_SF},
2073 1.1 christos {"tst", 0x7200001f, 0x7f80001f, log_imm, 0, CORE, OP2 (Rn, LIMM), QL_R1NIL, F_ALIAS | F_SF},
2074 1.1 christos /* Logical (shifted register). */
2075 1.1 christos {"and", 0xa000000, 0x7f200000, log_shift, 0, CORE, OP3 (Rd, Rn, Rm_SFT), QL_I3SAMER, F_SF},
2076 1.1 christos {"bic", 0xa200000, 0x7f200000, log_shift, 0, CORE, OP3 (Rd, Rn, Rm_SFT), QL_I3SAMER, F_SF},
2077 1.1 christos {"orr", 0x2a000000, 0x7f200000, log_shift, 0, CORE, OP3 (Rd, Rn, Rm_SFT), QL_I3SAMER, F_HAS_ALIAS | F_SF},
2078 1.1 christos {"mov", 0x2a0003e0, 0x7f2003e0, log_shift, 0, CORE, OP2 (Rd, Rm), QL_I2SAMER, F_ALIAS | F_SF},
2079 1.1 christos {"uxtw", 0x2a0003e0, 0x7f2003e0, log_shift, OP_UXTW, CORE, OP2 (Rd, Rm), QL_I2SAMEW, F_ALIAS | F_PSEUDO},
2080 1.1 christos {"orn", 0x2a200000, 0x7f200000, log_shift, 0, CORE, OP3 (Rd, Rn, Rm_SFT), QL_I3SAMER, F_HAS_ALIAS | F_SF},
2081 1.1 christos {"mvn", 0x2a2003e0, 0x7f2003e0, log_shift, 0, CORE, OP2 (Rd, Rm_SFT), QL_I2SAMER, F_ALIAS | F_SF},
2082 1.1 christos {"eor", 0x4a000000, 0x7f200000, log_shift, 0, CORE, OP3 (Rd, Rn, Rm_SFT), QL_I3SAMER, F_SF},
2083 1.1 christos {"eon", 0x4a200000, 0x7f200000, log_shift, 0, CORE, OP3 (Rd, Rn, Rm_SFT), QL_I3SAMER, F_SF},
2084 1.1 christos {"ands", 0x6a000000, 0x7f200000, log_shift, 0, CORE, OP3 (Rd, Rn, Rm_SFT), QL_I3SAMER, F_HAS_ALIAS | F_SF},
2085 1.1 christos {"tst", 0x6a00001f, 0x7f20001f, log_shift, 0, CORE, OP2 (Rn, Rm_SFT), QL_I2SAMER, F_ALIAS | F_SF},
2086 1.3 christos {"bics", 0x6a200000, 0x7f200000, log_shift, 0, CORE, OP3 (Rd, Rn, Rm_SFT), QL_I3SAMER, F_SF},
2087 1.3 christos /* LSE extension (atomic). */
2088 1.3 christos {"casb", 0x8a07c00, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2089 1.3 christos {"cash", 0x48a07c00, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2090 1.3 christos {"cas", 0x88a07c00, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ},
2091 1.3 christos {"casab", 0x8e07c00, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2092 1.3 christos {"caslb", 0x8a0fc00, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2093 1.3 christos {"casalb", 0x8e0fc00, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2094 1.3 christos {"casah", 0x48e07c00, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2095 1.3 christos {"caslh", 0x48a0fc00, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2096 1.3 christos {"casalh", 0x48e0fc00, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2097 1.3 christos {"casa", 0x88e07c00, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ},
2098 1.3 christos {"casl", 0x88a0fc00, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ},
2099 1.3 christos {"casal", 0x88e0fc00, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ},
2100 1.3 christos {"casp", 0x8207c00, 0xbfe0fc00, lse_atomic, 0, LSE, OP5 (Rs, PAIRREG, Rt, PAIRREG, ADDR_SIMPLE), QL_R4NIL, F_LSE_SZ},
2101 1.3 christos {"caspa", 0x8607c00, 0xbfe0fc00, lse_atomic, 0, LSE, OP5 (Rs, PAIRREG, Rt, PAIRREG, ADDR_SIMPLE), QL_R4NIL, F_LSE_SZ},
2102 1.3 christos {"caspl", 0x820fc00, 0xbfe0fc00, lse_atomic, 0, LSE, OP5 (Rs, PAIRREG, Rt, PAIRREG, ADDR_SIMPLE), QL_R4NIL, F_LSE_SZ},
2103 1.3 christos {"caspal", 0x860fc00, 0xbfe0fc00, lse_atomic, 0, LSE, OP5 (Rs, PAIRREG, Rt, PAIRREG, ADDR_SIMPLE), QL_R4NIL, F_LSE_SZ},
2104 1.3 christos {"swpb", 0x38208000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2105 1.3 christos {"swph", 0x78208000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2106 1.3 christos {"swp", 0xb8208000, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ},
2107 1.3 christos {"swpab", 0x38a08000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2108 1.3 christos {"swplb", 0x38608000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2109 1.3 christos {"swpalb", 0x38e08000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2110 1.3 christos {"swpah", 0x78a08000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2111 1.3 christos {"swplh", 0x78608000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2112 1.3 christos {"swpalh", 0x78e08000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2113 1.3 christos {"swpa", 0xb8a08000, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ},
2114 1.3 christos {"swpl", 0xb8608000, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ},
2115 1.3 christos {"swpal", 0xb8e08000, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ},
2116 1.3 christos {"ldaddb", 0x38200000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, F_HAS_ALIAS},
2117 1.3 christos {"ldaddh", 0x78200000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, F_HAS_ALIAS},
2118 1.3 christos {"ldadd", 0xb8200000, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ | F_HAS_ALIAS},
2119 1.3 christos {"ldaddab", 0x38a00000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2120 1.3 christos {"ldaddlb", 0x38600000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, F_HAS_ALIAS},
2121 1.3 christos {"ldaddalb", 0x38e00000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2122 1.3 christos {"ldaddah", 0x78a00000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2123 1.3 christos {"ldaddlh", 0x78600000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, F_HAS_ALIAS},
2124 1.3 christos {"ldaddalh", 0x78e00000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2125 1.3 christos {"ldadda", 0xb8a00000, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ},
2126 1.3 christos {"ldaddl", 0xb8600000, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ | F_HAS_ALIAS},
2127 1.3 christos {"ldaddal", 0xb8e00000, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ},
2128 1.3 christos {"ldclrb", 0x38201000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, F_HAS_ALIAS},
2129 1.3 christos {"ldclrh", 0x78201000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, F_HAS_ALIAS},
2130 1.3 christos {"ldclr", 0xb8201000, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ | F_HAS_ALIAS},
2131 1.3 christos {"ldclrab", 0x38a01000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2132 1.3 christos {"ldclrlb", 0x38601000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, F_HAS_ALIAS},
2133 1.3 christos {"ldclralb", 0x38e01000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2134 1.3 christos {"ldclrah", 0x78a01000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2135 1.3 christos {"ldclrlh", 0x78601000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, F_HAS_ALIAS},
2136 1.3 christos {"ldclralh", 0x78e01000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2137 1.3 christos {"ldclra", 0xb8a01000, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ},
2138 1.3 christos {"ldclrl", 0xb8601000, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ | F_HAS_ALIAS},
2139 1.3 christos {"ldclral", 0xb8e01000, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ},
2140 1.3 christos {"ldeorb", 0x38202000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, F_HAS_ALIAS},
2141 1.3 christos {"ldeorh", 0x78202000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, F_HAS_ALIAS},
2142 1.3 christos {"ldeor", 0xb8202000, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ | F_HAS_ALIAS},
2143 1.3 christos {"ldeorab", 0x38a02000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2144 1.3 christos {"ldeorlb", 0x38602000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, F_HAS_ALIAS},
2145 1.3 christos {"ldeoralb", 0x38e02000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2146 1.3 christos {"ldeorah", 0x78a02000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2147 1.3 christos {"ldeorlh", 0x78602000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, F_HAS_ALIAS},
2148 1.3 christos {"ldeoralh", 0x78e02000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2149 1.3 christos {"ldeora", 0xb8a02000, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ},
2150 1.3 christos {"ldeorl", 0xb8602000, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ | F_HAS_ALIAS},
2151 1.3 christos {"ldeoral", 0xb8e02000, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ},
2152 1.3 christos {"ldsetb", 0x38203000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, F_HAS_ALIAS},
2153 1.3 christos {"ldseth", 0x78203000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, F_HAS_ALIAS},
2154 1.3 christos {"ldset", 0xb8203000, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ | F_HAS_ALIAS},
2155 1.3 christos {"ldsetab", 0x38a03000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2156 1.3 christos {"ldsetlb", 0x38603000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, F_HAS_ALIAS},
2157 1.3 christos {"ldsetalb", 0x38e03000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2158 1.3 christos {"ldsetah", 0x78a03000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2159 1.3 christos {"ldsetlh", 0x78603000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, F_HAS_ALIAS},
2160 1.3 christos {"ldsetalh", 0x78e03000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2161 1.3 christos {"ldseta", 0xb8a03000, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ},
2162 1.3 christos {"ldsetl", 0xb8603000, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ | F_HAS_ALIAS},
2163 1.3 christos {"ldsetal", 0xb8e03000, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ},
2164 1.3 christos {"ldsmaxb", 0x38204000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, F_HAS_ALIAS},
2165 1.3 christos {"ldsmaxh", 0x78204000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, F_HAS_ALIAS},
2166 1.3 christos {"ldsmax", 0xb8204000, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ | F_HAS_ALIAS},
2167 1.3 christos {"ldsmaxab", 0x38a04000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2168 1.3 christos {"ldsmaxlb", 0x38604000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, F_HAS_ALIAS},
2169 1.3 christos {"ldsmaxalb", 0x38e04000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2170 1.3 christos {"ldsmaxah", 0x78a04000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2171 1.3 christos {"ldsmaxlh", 0x78604000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, F_HAS_ALIAS},
2172 1.3 christos {"ldsmaxalh", 0x78e04000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2173 1.3 christos {"ldsmaxa", 0xb8a04000, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ},
2174 1.3 christos {"ldsmaxl", 0xb8604000, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ | F_HAS_ALIAS},
2175 1.3 christos {"ldsmaxal", 0xb8e04000, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ},
2176 1.3 christos {"ldsminb", 0x38205000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, F_HAS_ALIAS},
2177 1.3 christos {"ldsminh", 0x78205000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, F_HAS_ALIAS},
2178 1.3 christos {"ldsmin", 0xb8205000, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ | F_HAS_ALIAS},
2179 1.3 christos {"ldsminab", 0x38a05000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2180 1.3 christos {"ldsminlb", 0x38605000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, F_HAS_ALIAS},
2181 1.3 christos {"ldsminalb", 0x38e05000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2182 1.3 christos {"ldsminah", 0x78a05000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2183 1.3 christos {"ldsminlh", 0x78605000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, F_HAS_ALIAS},
2184 1.3 christos {"ldsminalh", 0x78e05000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2185 1.3 christos {"ldsmina", 0xb8a05000, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ},
2186 1.3 christos {"ldsminl", 0xb8605000, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ | F_HAS_ALIAS},
2187 1.3 christos {"ldsminal", 0xb8e05000, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ},
2188 1.3 christos {"ldumaxb", 0x38206000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, F_HAS_ALIAS},
2189 1.3 christos {"ldumaxh", 0x78206000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, F_HAS_ALIAS},
2190 1.3 christos {"ldumax", 0xb8206000, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ | F_HAS_ALIAS},
2191 1.3 christos {"ldumaxab", 0x38a06000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2192 1.3 christos {"ldumaxlb", 0x38606000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, F_HAS_ALIAS},
2193 1.3 christos {"ldumaxalb", 0x38e06000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2194 1.3 christos {"ldumaxah", 0x78a06000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2195 1.3 christos {"ldumaxlh", 0x78606000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, F_HAS_ALIAS},
2196 1.3 christos {"ldumaxalh", 0x78e06000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2197 1.3 christos {"ldumaxa", 0xb8a06000, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ},
2198 1.3 christos {"ldumaxl", 0xb8606000, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ | F_HAS_ALIAS},
2199 1.3 christos {"ldumaxal", 0xb8e06000, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ},
2200 1.3 christos {"lduminb", 0x38207000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, F_HAS_ALIAS},
2201 1.3 christos {"lduminh", 0x78207000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, F_HAS_ALIAS},
2202 1.3 christos {"ldumin", 0xb8207000, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ | F_HAS_ALIAS},
2203 1.3 christos {"lduminab", 0x38a07000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2204 1.3 christos {"lduminlb", 0x38607000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, F_HAS_ALIAS},
2205 1.3 christos {"lduminalb", 0x38e07000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2206 1.3 christos {"lduminah", 0x78a07000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2207 1.3 christos {"lduminlh", 0x78607000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, F_HAS_ALIAS},
2208 1.3 christos {"lduminalh", 0x78e07000, 0xffe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_W2_LDST_EXC, 0},
2209 1.3 christos {"ldumina", 0xb8a07000, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ},
2210 1.3 christos {"lduminl", 0xb8607000, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ | F_HAS_ALIAS},
2211 1.3 christos {"lduminal", 0xb8e07000, 0xbfe0fc00, lse_atomic, 0, LSE, OP3 (Rs, Rt, ADDR_SIMPLE), QL_R2NIL, F_LSE_SZ},
2212 1.3 christos {"staddb", 0x3820001f, 0xffe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_W1_LDST_EXC, F_ALIAS},
2213 1.3 christos {"staddh", 0x7820001f, 0xffe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_W1_LDST_EXC, F_ALIAS},
2214 1.3 christos {"stadd", 0xb820001f, 0xbfe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_R1NIL, F_LSE_SZ | F_ALIAS},
2215 1.3 christos {"staddlb", 0x3860001f, 0xffe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_W1_LDST_EXC, F_ALIAS},
2216 1.3 christos {"staddlh", 0x7860001f, 0xffe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_W1_LDST_EXC, F_ALIAS},
2217 1.3 christos {"staddl", 0xb860001f, 0xbfe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_R1NIL, F_LSE_SZ | F_ALIAS},
2218 1.3 christos {"stclrb", 0x3820101f, 0xffe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_W1_LDST_EXC, F_ALIAS},
2219 1.3 christos {"stclrh", 0x7820101f, 0xffe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_W1_LDST_EXC, F_ALIAS},
2220 1.3 christos {"stclr", 0xb820101f, 0xbfe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_R1NIL, F_LSE_SZ | F_ALIAS},
2221 1.3 christos {"stclrlb", 0x3860101f, 0xffe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_W1_LDST_EXC, F_ALIAS},
2222 1.3 christos {"stclrlh", 0x7860101f, 0xffe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_W1_LDST_EXC, F_ALIAS},
2223 1.3 christos {"stclrl", 0xb860101f, 0xbfe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_R1NIL, F_LSE_SZ | F_ALIAS},
2224 1.3 christos {"steorb", 0x3820201f, 0xffe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_W1_LDST_EXC, F_ALIAS},
2225 1.3 christos {"steorh", 0x7820201f, 0xffe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_W1_LDST_EXC, F_ALIAS},
2226 1.3 christos {"steor", 0xb820201f, 0xbfe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_R1NIL, F_LSE_SZ | F_ALIAS},
2227 1.3 christos {"steorlb", 0x3860201f, 0xffe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_W1_LDST_EXC, F_ALIAS},
2228 1.3 christos {"steorlh", 0x7860201f, 0xffe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_W1_LDST_EXC, F_ALIAS},
2229 1.3 christos {"steorl", 0xb860201f, 0xbfe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_R1NIL, F_LSE_SZ | F_ALIAS},
2230 1.3 christos {"stsetb", 0x3820301f, 0xffe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_W1_LDST_EXC, F_ALIAS},
2231 1.3 christos {"stseth", 0x7820301f, 0xffe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_W1_LDST_EXC, F_ALIAS},
2232 1.3 christos {"stset", 0xb820301f, 0xbfe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_R1NIL, F_LSE_SZ | F_ALIAS},
2233 1.3 christos {"stsetlb", 0x3860301f, 0xffe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_W1_LDST_EXC, F_ALIAS},
2234 1.3 christos {"stsetlh", 0x7860301f, 0xffe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_W1_LDST_EXC, F_ALIAS},
2235 1.3 christos {"stsetl", 0xb860301f, 0xbfe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_R1NIL, F_LSE_SZ | F_ALIAS},
2236 1.3 christos {"stsmaxb", 0x3820401f, 0xffe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_W1_LDST_EXC, F_ALIAS},
2237 1.3 christos {"stsmaxh", 0x7820401f, 0xffe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_W1_LDST_EXC, F_ALIAS},
2238 1.3 christos {"stsmax", 0xb820401f, 0xbfe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_R1NIL, F_LSE_SZ | F_ALIAS},
2239 1.3 christos {"stsmaxlb", 0x3860401f, 0xffe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_W1_LDST_EXC, F_ALIAS},
2240 1.3 christos {"stsmaxlh", 0x7860401f, 0xffe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_W1_LDST_EXC, F_ALIAS},
2241 1.3 christos {"stsmaxl", 0xb860401f, 0xbfe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_R1NIL, F_LSE_SZ | F_ALIAS},
2242 1.3 christos {"stsminb", 0x3820501f, 0xffe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_W1_LDST_EXC, F_ALIAS},
2243 1.3 christos {"stsminh", 0x7820501f, 0xffe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_W1_LDST_EXC, F_ALIAS},
2244 1.3 christos {"stsmin", 0xb820501f, 0xbfe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_R1NIL, F_LSE_SZ | F_ALIAS},
2245 1.3 christos {"stsminlb", 0x3860501f, 0xffe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_W1_LDST_EXC, F_ALIAS},
2246 1.3 christos {"stsminlh", 0x7860501f, 0xffe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_W1_LDST_EXC, F_ALIAS},
2247 1.3 christos {"stsminl", 0xb860501f, 0xbfe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_R1NIL, F_LSE_SZ | F_ALIAS},
2248 1.3 christos {"stumaxb", 0x3820601f, 0xffe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_W1_LDST_EXC, F_ALIAS},
2249 1.3 christos {"stumaxh", 0x7820601f, 0xffe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_W1_LDST_EXC, F_ALIAS},
2250 1.3 christos {"stumax", 0xb820601f, 0xbfe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_R1NIL, F_LSE_SZ | F_ALIAS},
2251 1.3 christos {"stumaxlb", 0x3860601f, 0xffe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_W1_LDST_EXC, F_ALIAS},
2252 1.3 christos {"stumaxlh", 0x7860601f, 0xffe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_W1_LDST_EXC, F_ALIAS},
2253 1.3 christos {"stumaxl", 0xb860601f, 0xbfe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_R1NIL, F_LSE_SZ | F_ALIAS},
2254 1.3 christos {"stuminb", 0x3820701f, 0xffe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_W1_LDST_EXC, F_ALIAS},
2255 1.3 christos {"stuminh", 0x7820701f, 0xffe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_W1_LDST_EXC, F_ALIAS},
2256 1.3 christos {"stumin", 0xb820701f, 0xbfe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_R1NIL, F_LSE_SZ | F_ALIAS},
2257 1.3 christos {"stuminlb", 0x3860701f, 0xffe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_W1_LDST_EXC, F_ALIAS},
2258 1.3 christos {"stuminlh", 0x7860701f, 0xffe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_W1_LDST_EXC, F_ALIAS},
2259 1.1 christos {"stuminl", 0xb860701f, 0xbfe0fc1f, lse_atomic, 0, LSE, OP2 (Rs, ADDR_SIMPLE), QL_R1NIL, F_LSE_SZ | F_ALIAS},
2260 1.1 christos /* Move wide (immediate). */
2261 1.1 christos {"movn", 0x12800000, 0x7f800000, movewide, OP_MOVN, CORE, OP2 (Rd, HALF), QL_DST_R, F_SF | F_HAS_ALIAS},
2262 1.1 christos {"mov", 0x12800000, 0x7f800000, movewide, OP_MOV_IMM_WIDEN, CORE, OP2 (Rd, IMM_MOV), QL_DST_R, F_SF | F_ALIAS | F_CONV},
2263 1.1 christos {"movz", 0x52800000, 0x7f800000, movewide, OP_MOVZ, CORE, OP2 (Rd, HALF), QL_DST_R, F_SF | F_HAS_ALIAS},
2264 1.1 christos {"mov", 0x52800000, 0x7f800000, movewide, OP_MOV_IMM_WIDE, CORE, OP2 (Rd, IMM_MOV), QL_DST_R, F_SF | F_ALIAS | F_CONV},
2265 1.1 christos {"movk", 0x72800000, 0x7f800000, movewide, OP_MOVK, CORE, OP2 (Rd, HALF), QL_DST_R, F_SF},
2266 1.1 christos /* PC-rel. addressing. */
2267 1.1 christos {"adr", 0x10000000, 0x9f000000, pcreladdr, 0, CORE, OP2 (Rd, ADDR_PCREL21), QL_ADRP, 0},
2268 1.1 christos {"adrp", 0x90000000, 0x9f000000, pcreladdr, 0, CORE, OP2 (Rd, ADDR_ADRP), QL_ADRP, 0},
2269 1.1 christos /* System. */
2270 1.1 christos {"msr", 0xd500401f, 0xfff8f01f, ic_system, 0, CORE, OP2 (PSTATEFIELD, UIMM4), {}, 0},
2271 1.1 christos {"hint", 0xd503201f, 0xfffff01f, ic_system, 0, CORE, OP1 (UIMM7), {}, F_HAS_ALIAS},
2272 1.1 christos {"nop", 0xd503201f, 0xffffffff, ic_system, 0, CORE, OP0 (), {}, F_ALIAS},
2273 1.1 christos {"yield", 0xd503203f, 0xffffffff, ic_system, 0, CORE, OP0 (), {}, F_ALIAS},
2274 1.1 christos {"wfe", 0xd503205f, 0xffffffff, ic_system, 0, CORE, OP0 (), {}, F_ALIAS},
2275 1.1 christos {"wfi", 0xd503207f, 0xffffffff, ic_system, 0, CORE, OP0 (), {}, F_ALIAS},
2276 1.1 christos {"sev", 0xd503209f, 0xffffffff, ic_system, 0, CORE, OP0 (), {}, F_ALIAS},
2277 1.1 christos {"sevl", 0xd50320bf, 0xffffffff, ic_system, 0, CORE, OP0 (), {}, F_ALIAS},
2278 1.1 christos {"clrex", 0xd503305f, 0xfffff0ff, ic_system, 0, CORE, OP1 (UIMM4), {}, F_OPD0_OPT | F_DEFAULT (0xF)},
2279 1.1 christos {"dsb", 0xd503309f, 0xfffff0ff, ic_system, 0, CORE, OP1 (BARRIER), {}, 0},
2280 1.1 christos {"dmb", 0xd50330bf, 0xfffff0ff, ic_system, 0, CORE, OP1 (BARRIER), {}, 0},
2281 1.1 christos {"isb", 0xd50330df, 0xfffff0ff, ic_system, 0, CORE, OP1 (BARRIER_ISB), {}, F_OPD0_OPT | F_DEFAULT (0xF)},
2282 1.1 christos {"sys", 0xd5080000, 0xfff80000, ic_system, 0, CORE, OP5 (UIMM3_OP1, Cn, Cm, UIMM3_OP2, Rt), QL_SYS, F_HAS_ALIAS | F_OPD4_OPT | F_DEFAULT (0x1F)},
2283 1.1 christos {"at", 0xd5080000, 0xfff80000, ic_system, 0, CORE, OP2 (SYSREG_AT, Rt), QL_SRC_X, F_ALIAS},
2284 1.1 christos {"dc", 0xd5080000, 0xfff80000, ic_system, 0, CORE, OP2 (SYSREG_DC, Rt), QL_SRC_X, F_ALIAS},
2285 1.1 christos {"ic", 0xd5080000, 0xfff80000, ic_system, 0, CORE, OP2 (SYSREG_IC, Rt_SYS), QL_SRC_X, F_ALIAS | F_OPD1_OPT | F_DEFAULT (0x1F)},
2286 1.3 christos {"tlbi", 0xd5080000, 0xfff80000, ic_system, 0, CORE, OP2 (SYSREG_TLBI, Rt_SYS), QL_SRC_X, F_ALIAS | F_OPD1_OPT | F_DEFAULT (0x1F)},
2287 1.1 christos {"msr", 0xd5000000, 0xffe00000, ic_system, 0, CORE, OP2 (SYSREG, Rt), QL_SRC_X, 0},
2288 1.3 christos {"sysl", 0xd5280000, 0xfff80000, ic_system, 0, CORE, OP5 (Rt, UIMM3_OP1, Cn, Cm, UIMM3_OP2), QL_SYSL, 0},
2289 1.1 christos {"mrs", 0xd5200000, 0xffe00000, ic_system, 0, CORE, OP2 (Rt, SYSREG), QL_DST_X, 0},
2290 1.1 christos /* Test & branch (immediate). */
2291 1.1 christos {"tbz", 0x36000000, 0x7f000000, testbranch, 0, CORE, OP3 (Rt, BIT_NUM, ADDR_PCREL14), QL_PCREL_14, 0},
2292 1.1 christos {"tbnz", 0x37000000, 0x7f000000, testbranch, 0, CORE, OP3 (Rt, BIT_NUM, ADDR_PCREL14), QL_PCREL_14, 0},
2293 1.1 christos /* The old UAL conditional branch mnemonics (to aid portability). */
2294 1.1 christos {"beq", 0x54000000, 0xff00001f, condbranch, 0, CORE, OP1 (ADDR_PCREL19), QL_PCREL_NIL, F_ALIAS | F_PSEUDO},
2295 1.1 christos {"bne", 0x54000001, 0xff00001f, condbranch, 0, CORE, OP1 (ADDR_PCREL19), QL_PCREL_NIL, F_ALIAS | F_PSEUDO},
2296 1.1 christos {"bcs", 0x54000002, 0xff00001f, condbranch, 0, CORE, OP1 (ADDR_PCREL19), QL_PCREL_NIL, F_ALIAS | F_PSEUDO},
2297 1.1 christos {"bhs", 0x54000002, 0xff00001f, condbranch, 0, CORE, OP1 (ADDR_PCREL19), QL_PCREL_NIL, F_ALIAS | F_PSEUDO},
2298 1.1 christos {"bcc", 0x54000003, 0xff00001f, condbranch, 0, CORE, OP1 (ADDR_PCREL19), QL_PCREL_NIL, F_ALIAS | F_PSEUDO},
2299 1.1 christos {"blo", 0x54000003, 0xff00001f, condbranch, 0, CORE, OP1 (ADDR_PCREL19), QL_PCREL_NIL, F_ALIAS | F_PSEUDO},
2300 1.1 christos {"bmi", 0x54000004, 0xff00001f, condbranch, 0, CORE, OP1 (ADDR_PCREL19), QL_PCREL_NIL, F_ALIAS | F_PSEUDO},
2301 1.1 christos {"bpl", 0x54000005, 0xff00001f, condbranch, 0, CORE, OP1 (ADDR_PCREL19), QL_PCREL_NIL, F_ALIAS | F_PSEUDO},
2302 1.1 christos {"bvs", 0x54000006, 0xff00001f, condbranch, 0, CORE, OP1 (ADDR_PCREL19), QL_PCREL_NIL, F_ALIAS | F_PSEUDO},
2303 1.1 christos {"bvc", 0x54000007, 0xff00001f, condbranch, 0, CORE, OP1 (ADDR_PCREL19), QL_PCREL_NIL, F_ALIAS | F_PSEUDO},
2304 1.1 christos {"bhi", 0x54000008, 0xff00001f, condbranch, 0, CORE, OP1 (ADDR_PCREL19), QL_PCREL_NIL, F_ALIAS | F_PSEUDO},
2305 1.1 christos {"bls", 0x54000009, 0xff00001f, condbranch, 0, CORE, OP1 (ADDR_PCREL19), QL_PCREL_NIL, F_ALIAS | F_PSEUDO},
2306 1.1 christos {"bge", 0x5400000a, 0xff00001f, condbranch, 0, CORE, OP1 (ADDR_PCREL19), QL_PCREL_NIL, F_ALIAS | F_PSEUDO},
2307 1.1 christos {"blt", 0x5400000b, 0xff00001f, condbranch, 0, CORE, OP1 (ADDR_PCREL19), QL_PCREL_NIL, F_ALIAS | F_PSEUDO},
2308 1.1 christos {"bgt", 0x5400000c, 0xff00001f, condbranch, 0, CORE, OP1 (ADDR_PCREL19), QL_PCREL_NIL, F_ALIAS | F_PSEUDO},
2309 1.1 christos {"ble", 0x5400000d, 0xff00001f, condbranch, 0, CORE, OP1 (ADDR_PCREL19), QL_PCREL_NIL, F_ALIAS | F_PSEUDO},
2310 1.1 christos
2311 1.1 christos {0, 0, 0, 0, 0, 0, {}, {}, 0},
2312 1.1 christos };
2313 1.1 christos
2314 1.1 christos #ifdef AARCH64_OPERANDS
2315 1.1 christos #undef AARCH64_OPERANDS
2316 1.1 christos #endif
2317 1.1 christos
2318 1.1 christos /* Macro-based operand decription; this will be fed into aarch64-gen for it
2319 1.1 christos to generate the structure aarch64_operands and the function
2320 1.1 christos aarch64_insert_operand and aarch64_extract_operand.
2321 1.1 christos
2322 1.1 christos These inserters and extracters in the description execute the conversion
2323 1.1 christos between the aarch64_opnd_info and value in the operand-related instruction
2324 1.1 christos field(s). */
2325 1.1 christos
2326 1.1 christos /* Y expects arguments (left to right) to be operand class, inserter/extractor
2327 1.1 christos name suffix, operand name, flags, related bitfield(s) and description.
2328 1.1 christos X only differs from Y by having the operand inserter and extractor names
2329 1.1 christos listed separately. */
2330 1.1 christos
2331 1.1 christos #define AARCH64_OPERANDS \
2332 1.1 christos Y(INT_REG, regno, "Rd", 0, F(FLD_Rd), "an integer register") \
2333 1.1 christos Y(INT_REG, regno, "Rn", 0, F(FLD_Rn), "an integer register") \
2334 1.1 christos Y(INT_REG, regno, "Rm", 0, F(FLD_Rm), "an integer register") \
2335 1.1 christos Y(INT_REG, regno, "Rt", 0, F(FLD_Rt), "an integer register") \
2336 1.1 christos Y(INT_REG, regno, "Rt2", 0, F(FLD_Rt2), "an integer register") \
2337 1.1 christos Y(INT_REG, regno, "Rs", 0, F(FLD_Rs), "an integer register") \
2338 1.1 christos Y(INT_REG, regno, "Ra", 0, F(FLD_Ra), "an integer register") \
2339 1.1 christos X(INT_REG, ins_regno, ext_regrt_sysins, "Rt_SYS", 0, F(FLD_Rt), \
2340 1.1 christos "an integer register") \
2341 1.1 christos Y(INT_REG, regno, "Rd_SP", OPD_F_MAYBE_SP, F(FLD_Rd), \
2342 1.1 christos "an integer or stack pointer register") \
2343 1.1 christos Y(INT_REG, regno, "Rn_SP", OPD_F_MAYBE_SP, F(FLD_Rn), \
2344 1.3 christos "an integer or stack pointer register") \
2345 1.3 christos X(INT_REG, 0, ext_regno_pair, "PAIRREG", 0, F(), \
2346 1.1 christos "the second reg of a pair") \
2347 1.1 christos Y(MODIFIED_REG, reg_extended, "Rm_EXT", 0, F(), \
2348 1.1 christos "an integer register with optional extension") \
2349 1.1 christos Y(MODIFIED_REG, reg_shifted, "Rm_SFT", 0, F(), \
2350 1.1 christos "an integer register with optional shift") \
2351 1.1 christos Y(FP_REG, regno, "Fd", 0, F(FLD_Rd), "a floating-point register") \
2352 1.1 christos Y(FP_REG, regno, "Fn", 0, F(FLD_Rn), "a floating-point register") \
2353 1.1 christos Y(FP_REG, regno, "Fm", 0, F(FLD_Rm), "a floating-point register") \
2354 1.1 christos Y(FP_REG, regno, "Fa", 0, F(FLD_Ra), "a floating-point register") \
2355 1.1 christos Y(FP_REG, ft, "Ft", 0, F(FLD_Rt), "a floating-point register") \
2356 1.1 christos Y(FP_REG, regno, "Ft2", 0, F(FLD_Rt2), "a floating-point register") \
2357 1.1 christos Y(SISD_REG, regno, "Sd", 0, F(FLD_Rd), "a SIMD scalar register") \
2358 1.1 christos Y(SISD_REG, regno, "Sn", 0, F(FLD_Rn), "a SIMD scalar register") \
2359 1.1 christos Y(SISD_REG, regno, "Sm", 0, F(FLD_Rm), "a SIMD scalar register") \
2360 1.1 christos Y(SIMD_REG, regno, "Vd", 0, F(FLD_Rd), "a SIMD vector register") \
2361 1.1 christos Y(SIMD_REG, regno, "Vn", 0, F(FLD_Rn), "a SIMD vector register") \
2362 1.1 christos Y(SIMD_REG, regno, "Vm", 0, F(FLD_Rm), "a SIMD vector register") \
2363 1.1 christos Y(FP_REG, regno, "VdD1", 0, F(FLD_Rd), \
2364 1.1 christos "the top half of a 128-bit FP/SIMD register") \
2365 1.1 christos Y(FP_REG, regno, "VnD1", 0, F(FLD_Rn), \
2366 1.1 christos "the top half of a 128-bit FP/SIMD register") \
2367 1.1 christos Y(SIMD_ELEMENT, reglane, "Ed", 0, F(FLD_Rd), \
2368 1.1 christos "a SIMD vector element") \
2369 1.1 christos Y(SIMD_ELEMENT, reglane, "En", 0, F(FLD_Rn), \
2370 1.1 christos "a SIMD vector element") \
2371 1.1 christos Y(SIMD_ELEMENT, reglane, "Em", 0, F(FLD_Rm), \
2372 1.1 christos "a SIMD vector element") \
2373 1.1 christos Y(SIMD_REGLIST, reglist, "LVn", 0, F(FLD_Rn), \
2374 1.1 christos "a SIMD vector register list") \
2375 1.1 christos Y(SIMD_REGLIST, ldst_reglist, "LVt", 0, F(), \
2376 1.1 christos "a SIMD vector register list") \
2377 1.1 christos Y(SIMD_REGLIST, ldst_reglist_r, "LVt_AL", 0, F(), \
2378 1.1 christos "a SIMD vector register list") \
2379 1.1 christos Y(SIMD_REGLIST, ldst_elemlist, "LEt", 0, F(), \
2380 1.1 christos "a SIMD vector element list") \
2381 1.1 christos Y(CP_REG, regno, "Cn", 0, F(FLD_CRn), \
2382 1.1 christos "a 4-bit opcode field named for historical reasons C0 - C15") \
2383 1.1 christos Y(CP_REG, regno, "Cm", 0, F(FLD_CRm), \
2384 1.1 christos "a 4-bit opcode field named for historical reasons C0 - C15") \
2385 1.1 christos Y(IMMEDIATE, imm, "IDX", 0, F(FLD_imm4), \
2386 1.1 christos "an immediate as the index of the least significant byte") \
2387 1.1 christos Y(IMMEDIATE, advsimd_imm_shift, "IMM_VLSL", 0, F(), \
2388 1.1 christos "a left shift amount for an AdvSIMD register") \
2389 1.1 christos Y(IMMEDIATE, advsimd_imm_shift, "IMM_VLSR", 0, F(), \
2390 1.1 christos "a right shift amount for an AdvSIMD register") \
2391 1.1 christos Y(IMMEDIATE, advsimd_imm_modified, "SIMD_IMM", 0, F(), \
2392 1.1 christos "an immediate") \
2393 1.1 christos Y(IMMEDIATE, advsimd_imm_modified, "SIMD_IMM_SFT", 0, F(), \
2394 1.1 christos "an 8-bit unsigned immediate with optional shift") \
2395 1.1 christos Y(IMMEDIATE, advsimd_imm_modified, "SIMD_FPIMM", 0, F(), \
2396 1.1 christos "an 8-bit floating-point constant") \
2397 1.1 christos X(IMMEDIATE, 0, ext_shll_imm, "SHLL_IMM", 0, F(), \
2398 1.1 christos "an immediate shift amount of 8, 16 or 32") \
2399 1.1 christos X(IMMEDIATE, 0, 0, "IMM0", 0, F(), "0") \
2400 1.1 christos X(IMMEDIATE, 0, 0, "FPIMM0", 0, F(), "0.0") \
2401 1.1 christos Y(IMMEDIATE, imm, "FPIMM", 0, F(FLD_imm8), \
2402 1.1 christos "an 8-bit floating-point constant") \
2403 1.1 christos Y(IMMEDIATE, imm, "IMMR", 0, F(FLD_immr), \
2404 1.1 christos "the right rotate amount") \
2405 1.1 christos Y(IMMEDIATE, imm, "IMMS", 0, F(FLD_imm6), \
2406 1.1 christos "the leftmost bit number to be moved from the source") \
2407 1.1 christos Y(IMMEDIATE, imm, "WIDTH", 0, F(FLD_imm6), \
2408 1.1 christos "the width of the bit-field") \
2409 1.1 christos Y(IMMEDIATE, imm, "IMM", 0, F(FLD_imm6), "an immediate") \
2410 1.1 christos Y(IMMEDIATE, imm, "UIMM3_OP1", 0, F(FLD_op1), \
2411 1.1 christos "a 3-bit unsigned immediate") \
2412 1.1 christos Y(IMMEDIATE, imm, "UIMM3_OP2", 0, F(FLD_op2), \
2413 1.1 christos "a 3-bit unsigned immediate") \
2414 1.1 christos Y(IMMEDIATE, imm, "UIMM4", 0, F(FLD_CRm), \
2415 1.1 christos "a 4-bit unsigned immediate") \
2416 1.1 christos Y(IMMEDIATE, imm, "UIMM7", 0, F(FLD_CRm, FLD_op2), \
2417 1.1 christos "a 7-bit unsigned immediate") \
2418 1.1 christos Y(IMMEDIATE, imm, "BIT_NUM", 0, F(FLD_b5, FLD_b40), \
2419 1.1 christos "the bit number to be tested") \
2420 1.1 christos Y(IMMEDIATE, imm, "EXCEPTION", 0, F(FLD_imm16), \
2421 1.1 christos "a 16-bit unsigned immediate") \
2422 1.1 christos Y(IMMEDIATE, imm, "CCMP_IMM", 0, F(FLD_imm5), \
2423 1.1 christos "a 5-bit unsigned immediate") \
2424 1.1 christos Y(IMMEDIATE, imm, "NZCV", 0, F(FLD_nzcv), \
2425 1.1 christos "a flag bit specifier giving an alternative value for each flag") \
2426 1.1 christos Y(IMMEDIATE, limm, "LIMM", 0, F(FLD_N,FLD_immr,FLD_imms), \
2427 1.1 christos "Logical immediate") \
2428 1.1 christos Y(IMMEDIATE, aimm, "AIMM", 0, F(FLD_shift,FLD_imm12), \
2429 1.1 christos "a 12-bit unsigned immediate with optional left shift of 12 bits")\
2430 1.1 christos Y(IMMEDIATE, imm_half, "HALF", 0, F(FLD_imm16), \
2431 1.1 christos "a 16-bit immediate with optional left shift") \
2432 1.1 christos Y(IMMEDIATE, fbits, "FBITS", 0, F(FLD_scale), \
2433 1.1 christos "the number of bits after the binary point in the fixed-point value")\
2434 1.1 christos X(IMMEDIATE, 0, 0, "IMM_MOV", 0, F(), "an immediate") \
2435 1.1 christos Y(COND, cond, "COND", 0, F(), "a condition") \
2436 1.1 christos Y(COND, cond, "COND1", 0, F(), \
2437 1.1 christos "one of the standard conditions, excluding AL and NV.") \
2438 1.1 christos X(ADDRESS, 0, ext_imm, "ADDR_ADRP", OPD_F_SEXT, F(FLD_immhi, FLD_immlo),\
2439 1.1 christos "21-bit PC-relative address of a 4KB page") \
2440 1.1 christos Y(ADDRESS, imm, "ADDR_PCREL14", OPD_F_SEXT | OPD_F_SHIFT_BY_2, \
2441 1.1 christos F(FLD_imm14), "14-bit PC-relative address") \
2442 1.1 christos Y(ADDRESS, imm, "ADDR_PCREL19", OPD_F_SEXT | OPD_F_SHIFT_BY_2, \
2443 1.1 christos F(FLD_imm19), "19-bit PC-relative address") \
2444 1.1 christos Y(ADDRESS, imm, "ADDR_PCREL21", OPD_F_SEXT, F(FLD_immhi,FLD_immlo), \
2445 1.1 christos "21-bit PC-relative address") \
2446 1.1 christos Y(ADDRESS, imm, "ADDR_PCREL26", OPD_F_SEXT | OPD_F_SHIFT_BY_2, \
2447 1.1 christos F(FLD_imm26), "26-bit PC-relative address") \
2448 1.1 christos Y(ADDRESS, addr_simple, "ADDR_SIMPLE", 0, F(), \
2449 1.1 christos "an address with base register (no offset)") \
2450 1.1 christos Y(ADDRESS, addr_regoff, "ADDR_REGOFF", 0, F(), \
2451 1.1 christos "an address with register offset") \
2452 1.1 christos Y(ADDRESS, addr_simm, "ADDR_SIMM7", 0, F(FLD_imm7,FLD_index2), \
2453 1.1 christos "an address with 7-bit signed immediate offset") \
2454 1.1 christos Y(ADDRESS, addr_simm, "ADDR_SIMM9", 0, F(FLD_imm9,FLD_index), \
2455 1.1 christos "an address with 9-bit signed immediate offset") \
2456 1.1 christos Y(ADDRESS, addr_simm, "ADDR_SIMM9_2", 0, F(FLD_imm9,FLD_index), \
2457 1.1 christos "an address with 9-bit negative or unaligned immediate offset") \
2458 1.1 christos Y(ADDRESS, addr_uimm12, "ADDR_UIMM12", 0, F(FLD_Rn,FLD_imm12), \
2459 1.1 christos "an address with scaled, unsigned immediate offset") \
2460 1.1 christos Y(ADDRESS, addr_simple, "SIMD_ADDR_SIMPLE", 0, F(), \
2461 1.1 christos "an address with base register (no offset)") \
2462 1.1 christos Y(ADDRESS, simd_addr_post, "SIMD_ADDR_POST", 0, F(), \
2463 1.1 christos "a post-indexed address with immediate or register increment") \
2464 1.1 christos Y(SYSTEM, sysreg, "SYSREG", 0, F(), "a system register") \
2465 1.1 christos Y(SYSTEM, pstatefield, "PSTATEFIELD", 0, F(), \
2466 1.1 christos "a PSTATE field name") \
2467 1.1 christos Y(SYSTEM, sysins_op, "SYSREG_AT", 0, F(), \
2468 1.1 christos "an address translation operation specifier") \
2469 1.1 christos Y(SYSTEM, sysins_op, "SYSREG_DC", 0, F(), \
2470 1.1 christos "a data cache maintenance operation specifier") \
2471 1.1 christos Y(SYSTEM, sysins_op, "SYSREG_IC", 0, F(), \
2472 1.1 christos "an instructin cache maintenance operation specifier") \
2473 1.1 christos Y(SYSTEM, sysins_op, "SYSREG_TLBI", 0, F(), \
2474 1.1 christos "a TBL invalidation operation specifier") \
2475 1.1 christos Y(SYSTEM, barrier, "BARRIER", 0, F(), \
2476 1.1 christos "a barrier option name") \
2477 1.1 christos Y(SYSTEM, barrier, "BARRIER_ISB", 0, F(), \
2478 1.1 christos "the ISB option name SY or an optional 4-bit unsigned immediate") \
2479 1.1 christos Y(SYSTEM, prfop, "PRFOP", 0, F(), \
2480 "an prefetch operation specifier")
2481