blob: ca1d2035cb0fd3bf21d7b0f9e644aa6943c4a8b3 [file] [log] [blame]
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +08001#ifndef __CS_ARM64_H__
2#define __CS_ARM64_H__
3
4/* Capstone Disassembler Engine */
5/* By Nguyen Anh Quynh <aquynh@gmail.com>, 2013> */
6
7#ifdef __cplusplus
8extern "C" {
9#endif
10
11#include <stdint.h>
12#include <stdbool.h>
13
Nguyen Anh Quynha2f825f2013-12-04 23:56:24 +080014//> ARM64 shift type
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +080015typedef enum arm64_shifter {
16 ARM64_SFT_INVALID = 0,
17 ARM64_SFT_LSL = 1,
18 ARM64_SFT_MSL = 2,
19 ARM64_SFT_LSR = 3,
20 ARM64_SFT_ASR = 4,
Nguyen Anh Quynhf8db76a2013-12-04 12:37:55 +080021 ARM64_SFT_ROR = 5,
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +080022} arm64_shifter;
23
Nguyen Anh Quynha2f825f2013-12-04 23:56:24 +080024//> ARM64 extender type
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +080025typedef enum arm64_extender {
26 ARM64_EXT_INVALID = 0,
27 ARM64_EXT_UXTB = 1,
28 ARM64_EXT_UXTH = 2,
29 ARM64_EXT_UXTW = 3,
30 ARM64_EXT_UXTX = 4,
31 ARM64_EXT_SXTB = 5,
32 ARM64_EXT_SXTH = 6,
33 ARM64_EXT_SXTW = 7,
34 ARM64_EXT_SXTX = 8,
35} arm64_extender;
36
Nguyen Anh Quynha2f825f2013-12-04 23:56:24 +080037//> ARM64 condition code
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +080038typedef enum arm64_cc {
39 ARM64_CC_INVALID = 0,
40 ARM64_CC_EQ = 1, // Equal
41 ARM64_CC_NE = 2, // Not equal: Not equal, or unordered
42 ARM64_CC_HS = 3, // Unsigned higher or same: >, ==, or unordered
43 ARM64_CC_LO = 4, // Unsigned lower or same: Less than
44 ARM64_CC_MI = 5, // Minus, negative: Less than
45 ARM64_CC_PL = 6, // Plus, positive or zero: >, ==, or unordered
46 ARM64_CC_VS = 7, // Overflow: Unordered
47 ARM64_CC_VC = 8, // No overflow: Ordered
48 ARM64_CC_HI = 9, // Unsigned higher: Greater than, or unordered
49 ARM64_CC_LS = 10, // Unsigned lower or same: Less than or equal
50 ARM64_CC_GE = 11, // Greater than or equal: Greater than or equal
51 ARM64_CC_LT = 12, // Less than: Less than, or unordered
52 ARM64_CC_GT = 13, // Signed greater than: Greater than
53 ARM64_CC_LE = 14, // Signed less than or equal: <, ==, or unordered
54 ARM64_CC_AL = 15, // Always (unconditional): Always (unconditional)
55 ARM64_CC_NV = 16, // Always (unconditional): Always (unconditional)
56 // Note the NV exists purely to disassemble 0b1111. Execution
57 // is "always".
58} arm64_cc;
59
Nguyen Anh Quynha2f825f2013-12-04 23:56:24 +080060//> Operand type for instruction's operands
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +080061typedef enum arm64_op_type {
62 ARM64_OP_INVALID = 0, // Uninitialized.
63 ARM64_OP_REG, // Register operand.
64 ARM64_OP_CIMM, // C-Immediate
65 ARM64_OP_IMM, // Immediate operand.
66 ARM64_OP_FP, // Floating-Point immediate operand.
67 ARM64_OP_MEM, // Memory operand
68} arm64_op_type;
69
70// Instruction's operand referring to memory
71// This is associated with ARM64_OP_MEM operand type above
72typedef struct arm64_op_mem {
73 unsigned int base; // base register
74 unsigned int index; // index register
Nguyen Anh Quynh90acea32013-11-29 17:54:17 +080075 int32_t disp; // displacement/offset value
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +080076} arm64_op_mem;
77
78// Instruction operand
79typedef struct cs_arm64_op {
80 struct {
81 arm64_shifter type; // shifter type of this operand
82 unsigned int value; // shifter value of this operand
83 } shift;
84 arm64_extender ext; // extender type of this operand
85 arm64_op_type type; // operand type
86 union {
87 unsigned int reg; // register value for REG operand
Nguyen Anh Quynh90acea32013-11-29 17:54:17 +080088 int32_t imm; // immediate value, or index for C-IMM or IMM operand
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +080089 double fp; // floating point value for FP operand
90 arm64_op_mem mem; // base/index/scale/disp value for MEM operand
91 };
92} cs_arm64_op;
93
94// Instruction structure
95typedef struct cs_arm64 {
96 arm64_cc cc; // conditional code for this insn
97 bool update_flags; // does this insn update flags?
98 bool writeback; // does this insn request writeback? 'True' means 'yes'
99
100 // Number of operands of this instruction,
101 // or 0 when instruction has no operand.
102 uint8_t op_count;
103
Nguyen Anh Quynhf1656de2013-11-29 20:26:34 +0800104 cs_arm64_op operands[8]; // operands for this instruction.
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +0800105} cs_arm64;
106
Nguyen Anh Quynha2f825f2013-12-04 23:56:24 +0800107//> ARM64 registers
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +0800108typedef enum arm64_reg {
109 ARM64_REG_INVALID = 0,
110 ARM64_REG_NZCV = 1,
111 ARM64_REG_WSP = 2,
112 ARM64_REG_WZR = 3,
113 ARM64_REG_SP = 4,
114 ARM64_REG_XZR = 5,
115 ARM64_REG_B0 = 6,
116 ARM64_REG_B1 = 7,
117 ARM64_REG_B2 = 8,
118 ARM64_REG_B3 = 9,
119 ARM64_REG_B4 = 10,
120 ARM64_REG_B5 = 11,
121 ARM64_REG_B6 = 12,
122 ARM64_REG_B7 = 13,
123 ARM64_REG_B8 = 14,
124 ARM64_REG_B9 = 15,
125 ARM64_REG_B10 = 16,
126 ARM64_REG_B11 = 17,
127 ARM64_REG_B12 = 18,
128 ARM64_REG_B13 = 19,
129 ARM64_REG_B14 = 20,
130 ARM64_REG_B15 = 21,
131 ARM64_REG_B16 = 22,
132 ARM64_REG_B17 = 23,
133 ARM64_REG_B18 = 24,
134 ARM64_REG_B19 = 25,
135 ARM64_REG_B20 = 26,
136 ARM64_REG_B21 = 27,
137 ARM64_REG_B22 = 28,
138 ARM64_REG_B23 = 29,
139 ARM64_REG_B24 = 30,
140 ARM64_REG_B25 = 31,
141 ARM64_REG_B26 = 32,
142 ARM64_REG_B27 = 33,
143 ARM64_REG_B28 = 34,
144 ARM64_REG_B29 = 35,
145 ARM64_REG_B30 = 36,
146 ARM64_REG_B31 = 37,
147 ARM64_REG_D0 = 38,
148 ARM64_REG_D1 = 39,
149 ARM64_REG_D2 = 40,
150 ARM64_REG_D3 = 41,
151 ARM64_REG_D4 = 42,
152 ARM64_REG_D5 = 43,
153 ARM64_REG_D6 = 44,
154 ARM64_REG_D7 = 45,
155 ARM64_REG_D8 = 46,
156 ARM64_REG_D9 = 47,
157 ARM64_REG_D10 = 48,
158 ARM64_REG_D11 = 49,
159 ARM64_REG_D12 = 50,
160 ARM64_REG_D13 = 51,
161 ARM64_REG_D14 = 52,
162 ARM64_REG_D15 = 53,
163 ARM64_REG_D16 = 54,
164 ARM64_REG_D17 = 55,
165 ARM64_REG_D18 = 56,
166 ARM64_REG_D19 = 57,
167 ARM64_REG_D20 = 58,
168 ARM64_REG_D21 = 59,
169 ARM64_REG_D22 = 60,
170 ARM64_REG_D23 = 61,
171 ARM64_REG_D24 = 62,
172 ARM64_REG_D25 = 63,
173 ARM64_REG_D26 = 64,
174 ARM64_REG_D27 = 65,
175 ARM64_REG_D28 = 66,
176 ARM64_REG_D29 = 67,
177 ARM64_REG_D30 = 68,
178 ARM64_REG_D31 = 69,
179 ARM64_REG_H0 = 70,
180 ARM64_REG_H1 = 71,
181 ARM64_REG_H2 = 72,
182 ARM64_REG_H3 = 73,
183 ARM64_REG_H4 = 74,
184 ARM64_REG_H5 = 75,
185 ARM64_REG_H6 = 76,
186 ARM64_REG_H7 = 77,
187 ARM64_REG_H8 = 78,
188 ARM64_REG_H9 = 79,
189 ARM64_REG_H10 = 80,
190 ARM64_REG_H11 = 81,
191 ARM64_REG_H12 = 82,
192 ARM64_REG_H13 = 83,
193 ARM64_REG_H14 = 84,
194 ARM64_REG_H15 = 85,
195 ARM64_REG_H16 = 86,
196 ARM64_REG_H17 = 87,
197 ARM64_REG_H18 = 88,
198 ARM64_REG_H19 = 89,
199 ARM64_REG_H20 = 90,
200 ARM64_REG_H21 = 91,
201 ARM64_REG_H22 = 92,
202 ARM64_REG_H23 = 93,
203 ARM64_REG_H24 = 94,
204 ARM64_REG_H25 = 95,
205 ARM64_REG_H26 = 96,
206 ARM64_REG_H27 = 97,
207 ARM64_REG_H28 = 98,
208 ARM64_REG_H29 = 99,
209 ARM64_REG_H30 = 100,
210 ARM64_REG_H31 = 101,
211 ARM64_REG_Q0 = 102,
212 ARM64_REG_Q1 = 103,
213 ARM64_REG_Q2 = 104,
214 ARM64_REG_Q3 = 105,
215 ARM64_REG_Q4 = 106,
216 ARM64_REG_Q5 = 107,
217 ARM64_REG_Q6 = 108,
218 ARM64_REG_Q7 = 109,
219 ARM64_REG_Q8 = 110,
220 ARM64_REG_Q9 = 111,
221 ARM64_REG_Q10 = 112,
222 ARM64_REG_Q11 = 113,
223 ARM64_REG_Q12 = 114,
224 ARM64_REG_Q13 = 115,
225 ARM64_REG_Q14 = 116,
226 ARM64_REG_Q15 = 117,
227 ARM64_REG_Q16 = 118,
228 ARM64_REG_Q17 = 119,
229 ARM64_REG_Q18 = 120,
230 ARM64_REG_Q19 = 121,
231 ARM64_REG_Q20 = 122,
232 ARM64_REG_Q21 = 123,
233 ARM64_REG_Q22 = 124,
234 ARM64_REG_Q23 = 125,
235 ARM64_REG_Q24 = 126,
236 ARM64_REG_Q25 = 127,
237 ARM64_REG_Q26 = 128,
238 ARM64_REG_Q27 = 129,
239 ARM64_REG_Q28 = 130,
240 ARM64_REG_Q29 = 131,
241 ARM64_REG_Q30 = 132,
242 ARM64_REG_Q31 = 133,
243 ARM64_REG_S0 = 134,
244 ARM64_REG_S1 = 135,
245 ARM64_REG_S2 = 136,
246 ARM64_REG_S3 = 137,
247 ARM64_REG_S4 = 138,
248 ARM64_REG_S5 = 139,
249 ARM64_REG_S6 = 140,
250 ARM64_REG_S7 = 141,
251 ARM64_REG_S8 = 142,
252 ARM64_REG_S9 = 143,
253 ARM64_REG_S10 = 144,
254 ARM64_REG_S11 = 145,
255 ARM64_REG_S12 = 146,
256 ARM64_REG_S13 = 147,
257 ARM64_REG_S14 = 148,
258 ARM64_REG_S15 = 149,
259 ARM64_REG_S16 = 150,
260 ARM64_REG_S17 = 151,
261 ARM64_REG_S18 = 152,
262 ARM64_REG_S19 = 153,
263 ARM64_REG_S20 = 154,
264 ARM64_REG_S21 = 155,
265 ARM64_REG_S22 = 156,
266 ARM64_REG_S23 = 157,
267 ARM64_REG_S24 = 158,
268 ARM64_REG_S25 = 159,
269 ARM64_REG_S26 = 160,
270 ARM64_REG_S27 = 161,
271 ARM64_REG_S28 = 162,
272 ARM64_REG_S29 = 163,
273 ARM64_REG_S30 = 164,
274 ARM64_REG_S31 = 165,
275 ARM64_REG_W0 = 166,
276 ARM64_REG_W1 = 167,
277 ARM64_REG_W2 = 168,
278 ARM64_REG_W3 = 169,
279 ARM64_REG_W4 = 170,
280 ARM64_REG_W5 = 171,
281 ARM64_REG_W6 = 172,
282 ARM64_REG_W7 = 173,
283 ARM64_REG_W8 = 174,
284 ARM64_REG_W9 = 175,
285 ARM64_REG_W10 = 176,
286 ARM64_REG_W11 = 177,
287 ARM64_REG_W12 = 178,
288 ARM64_REG_W13 = 179,
289 ARM64_REG_W14 = 180,
290 ARM64_REG_W15 = 181,
291 ARM64_REG_W16 = 182,
292 ARM64_REG_W17 = 183,
293 ARM64_REG_W18 = 184,
294 ARM64_REG_W19 = 185,
295 ARM64_REG_W20 = 186,
296 ARM64_REG_W21 = 187,
297 ARM64_REG_W22 = 188,
298 ARM64_REG_W23 = 189,
299 ARM64_REG_W24 = 190,
300 ARM64_REG_W25 = 191,
301 ARM64_REG_W26 = 192,
302 ARM64_REG_W27 = 193,
303 ARM64_REG_W28 = 194,
304 ARM64_REG_W29 = 195,
305 ARM64_REG_W30 = 196,
306 ARM64_REG_X0 = 197,
307 ARM64_REG_X1 = 198,
308 ARM64_REG_X2 = 199,
309 ARM64_REG_X3 = 200,
310 ARM64_REG_X4 = 201,
311 ARM64_REG_X5 = 202,
312 ARM64_REG_X6 = 203,
313 ARM64_REG_X7 = 204,
314 ARM64_REG_X8 = 205,
315 ARM64_REG_X9 = 206,
316 ARM64_REG_X10 = 207,
317 ARM64_REG_X11 = 208,
318 ARM64_REG_X12 = 209,
319 ARM64_REG_X13 = 210,
320 ARM64_REG_X14 = 211,
321 ARM64_REG_X15 = 212,
322 ARM64_REG_X16 = 213,
323 ARM64_REG_X17 = 214,
324 ARM64_REG_X18 = 215,
325 ARM64_REG_X19 = 216,
326 ARM64_REG_X20 = 217,
327 ARM64_REG_X21 = 218,
328 ARM64_REG_X22 = 219,
329 ARM64_REG_X23 = 220,
330 ARM64_REG_X24 = 221,
331 ARM64_REG_X25 = 222,
332 ARM64_REG_X26 = 223,
333 ARM64_REG_X27 = 224,
334 ARM64_REG_X28 = 225,
335 ARM64_REG_X29 = 226,
336 ARM64_REG_X30 = 227,
Nguyen Anh Quynhea5b79d2013-12-04 12:10:47 +0800337
338 ARM64_REG_MAX = 228, // <-- mark the end of the list of registers
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +0800339} arm64_reg;
340
Nguyen Anh Quynha2f825f2013-12-04 23:56:24 +0800341//> ARM64 instruction
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +0800342typedef enum arm64_insn {
343 ARM64_INS_INVALID = 0,
344 ARM64_INS_ADC,
345 ARM64_INS_ADDHN2,
346 ARM64_INS_ADDHN,
347 ARM64_INS_ADDP,
348 ARM64_INS_ADD,
349 ARM64_INS_CMN,
350 ARM64_INS_ADRP,
351 ARM64_INS_ADR,
352 ARM64_INS_AND,
353 ARM64_INS_ASR,
354 ARM64_INS_AT,
355 ARM64_INS_BFI,
356 ARM64_INS_BFM,
357 ARM64_INS_BFXIL,
358 ARM64_INS_BIC,
359 ARM64_INS_BIF,
360 ARM64_INS_BIT,
361 ARM64_INS_BLR,
362 ARM64_INS_BL,
363 ARM64_INS_BRK,
364 ARM64_INS_BR,
365 ARM64_INS_BSL,
366 ARM64_INS_B,
367 ARM64_INS_CBNZ,
368 ARM64_INS_CBZ,
369 ARM64_INS_CCMN,
370 ARM64_INS_CCMP,
371 ARM64_INS_CLREX,
372 ARM64_INS_CLS,
373 ARM64_INS_CLZ,
374 ARM64_INS_CMEQ,
375 ARM64_INS_CMGE,
376 ARM64_INS_CMGT,
377 ARM64_INS_CMHI,
378 ARM64_INS_CMHS,
379 ARM64_INS_CMLE,
380 ARM64_INS_CMLT,
381 ARM64_INS_CMP,
382 ARM64_INS_CMTST,
383 ARM64_INS_CRC32B,
384 ARM64_INS_CRC32CB,
385 ARM64_INS_CRC32CH,
386 ARM64_INS_CRC32CW,
387 ARM64_INS_CRC32CX,
388 ARM64_INS_CRC32H,
389 ARM64_INS_CRC32W,
390 ARM64_INS_CRC32X,
391 ARM64_INS_CSEL,
392 ARM64_INS_CSINC,
393 ARM64_INS_CSINV,
394 ARM64_INS_CSNEG,
395 ARM64_INS_DCPS1,
396 ARM64_INS_DCPS2,
397 ARM64_INS_DCPS3,
398 ARM64_INS_DC,
399 ARM64_INS_DMB,
400 ARM64_INS_DRPS,
401 ARM64_INS_DSB,
402 ARM64_INS_EON,
403 ARM64_INS_EOR,
404 ARM64_INS_ERET,
405 ARM64_INS_EXTR,
406 ARM64_INS_FABD,
407 ARM64_INS_FABS,
408 ARM64_INS_FACGE,
409 ARM64_INS_FACGT,
410 ARM64_INS_FADDP,
411 ARM64_INS_FADD,
412 ARM64_INS_FCCMPE,
413 ARM64_INS_FCCMP,
414 ARM64_INS_FCMEQ,
415 ARM64_INS_FCMGE,
416 ARM64_INS_FCMGT,
417 ARM64_INS_FCMLE,
418 ARM64_INS_FCMLT,
419 ARM64_INS_FCMP,
420 ARM64_INS_FCMPE,
421 ARM64_INS_FCSEL,
422 ARM64_INS_FCVTAS,
423 ARM64_INS_FCVTAU,
424 ARM64_INS_FCVTMS,
425 ARM64_INS_FCVTMU,
426 ARM64_INS_FCVTNS,
427 ARM64_INS_FCVTNU,
428 ARM64_INS_FCVTPS,
429 ARM64_INS_FCVTPU,
430 ARM64_INS_FCVTZS,
431 ARM64_INS_FCVTZU,
432 ARM64_INS_FCVT,
433 ARM64_INS_FDIV,
434 ARM64_INS_FMADD,
435 ARM64_INS_FMAXNMP,
436 ARM64_INS_FMAXNM,
437 ARM64_INS_FMAXP,
438 ARM64_INS_FMAX,
439 ARM64_INS_FMINNMP,
440 ARM64_INS_FMINNM,
441 ARM64_INS_FMINP,
442 ARM64_INS_FMIN,
443 ARM64_INS_FMLA,
444 ARM64_INS_FMLS,
445 ARM64_INS_FMOV,
446 ARM64_INS_FMSUB,
447 ARM64_INS_FMULX,
448 ARM64_INS_FMUL,
449 ARM64_INS_FNEG,
450 ARM64_INS_FNMADD,
451 ARM64_INS_FNMSUB,
452 ARM64_INS_FNMUL,
453 ARM64_INS_FRECPS,
454 ARM64_INS_FRINTA,
455 ARM64_INS_FRINTI,
456 ARM64_INS_FRINTM,
457 ARM64_INS_FRINTN,
458 ARM64_INS_FRINTP,
459 ARM64_INS_FRINTX,
460 ARM64_INS_FRINTZ,
461 ARM64_INS_FRSQRTS,
462 ARM64_INS_FSQRT,
463 ARM64_INS_FSUB,
464 ARM64_INS_HINT,
465 ARM64_INS_HLT,
466 ARM64_INS_HVC,
467 ARM64_INS_IC,
468 ARM64_INS_INS,
469 ARM64_INS_ISB,
470 ARM64_INS_LDARB,
471 ARM64_INS_LDAR,
472 ARM64_INS_LDARH,
473 ARM64_INS_LDAXP,
474 ARM64_INS_LDAXRB,
475 ARM64_INS_LDAXR,
476 ARM64_INS_LDAXRH,
477 ARM64_INS_LDPSW,
478 ARM64_INS_LDRSB,
479 ARM64_INS_LDURSB,
480 ARM64_INS_LDRSH,
481 ARM64_INS_LDURSH,
482 ARM64_INS_LDRSW,
483 ARM64_INS_LDR,
484 ARM64_INS_LDTRSB,
485 ARM64_INS_LDTRSH,
486 ARM64_INS_LDTRSW,
487 ARM64_INS_LDURSW,
488 ARM64_INS_LDXP,
489 ARM64_INS_LDXRB,
490 ARM64_INS_LDXR,
491 ARM64_INS_LDXRH,
492 ARM64_INS_LDRH,
493 ARM64_INS_LDURH,
494 ARM64_INS_STRH,
495 ARM64_INS_STURH,
496 ARM64_INS_LDTRH,
497 ARM64_INS_STTRH,
498 ARM64_INS_LDUR,
499 ARM64_INS_STR,
500 ARM64_INS_STUR,
501 ARM64_INS_LDTR,
502 ARM64_INS_STTR,
503 ARM64_INS_LDRB,
504 ARM64_INS_LDURB,
505 ARM64_INS_STRB,
506 ARM64_INS_STURB,
507 ARM64_INS_LDTRB,
508 ARM64_INS_STTRB,
509 ARM64_INS_LDP,
510 ARM64_INS_LDNP,
511 ARM64_INS_STNP,
512 ARM64_INS_STP,
513 ARM64_INS_LSL,
514 ARM64_INS_LSR,
515 ARM64_INS_MADD,
516 ARM64_INS_MLA,
517 ARM64_INS_MLS,
518 ARM64_INS_MOVI,
519 ARM64_INS_MOVK,
520 ARM64_INS_MOVN,
521 ARM64_INS_MOVZ,
522 ARM64_INS_MRS,
523 ARM64_INS_MSR,
524 ARM64_INS_MSUB,
525 ARM64_INS_MUL,
526 ARM64_INS_MVNI,
527 ARM64_INS_MVN,
528 ARM64_INS_ORN,
529 ARM64_INS_ORR,
530 ARM64_INS_PMULL2,
531 ARM64_INS_PMULL,
532 ARM64_INS_PMUL,
533 ARM64_INS_PRFM,
534 ARM64_INS_PRFUM,
535 ARM64_INS_SQRSHRUN2,
536 ARM64_INS_SQRSHRUN,
537 ARM64_INS_SQSHRUN2,
538 ARM64_INS_SQSHRUN,
539 ARM64_INS_RADDHN2,
540 ARM64_INS_RADDHN,
541 ARM64_INS_RBIT,
542 ARM64_INS_RET,
543 ARM64_INS_REV16,
544 ARM64_INS_REV32,
545 ARM64_INS_REV,
546 ARM64_INS_ROR,
547 ARM64_INS_RSHRN2,
548 ARM64_INS_RSHRN,
549 ARM64_INS_RSUBHN2,
550 ARM64_INS_RSUBHN,
551 ARM64_INS_SABAL2,
552 ARM64_INS_SABAL,
553 ARM64_INS_SABA,
554 ARM64_INS_SABDL2,
555 ARM64_INS_SABDL,
556 ARM64_INS_SABD,
557 ARM64_INS_SADDL2,
558 ARM64_INS_SADDL,
559 ARM64_INS_SADDW2,
560 ARM64_INS_SADDW,
561 ARM64_INS_SBC,
562 ARM64_INS_SBFIZ,
563 ARM64_INS_SBFM,
564 ARM64_INS_SBFX,
565 ARM64_INS_SCVTF,
566 ARM64_INS_SDIV,
567 ARM64_INS_SHADD,
568 ARM64_INS_SHL,
569 ARM64_INS_SHRN2,
570 ARM64_INS_SHRN,
571 ARM64_INS_SHSUB,
572 ARM64_INS_SLI,
573 ARM64_INS_SMADDL,
574 ARM64_INS_SMAXP,
575 ARM64_INS_SMAX,
576 ARM64_INS_SMC,
577 ARM64_INS_SMINP,
578 ARM64_INS_SMIN,
579 ARM64_INS_SMLAL2,
580 ARM64_INS_SMLAL,
581 ARM64_INS_SMLSL2,
582 ARM64_INS_SMLSL,
583 ARM64_INS_SMOV,
584 ARM64_INS_SMSUBL,
585 ARM64_INS_SMULH,
586 ARM64_INS_SMULL2,
587 ARM64_INS_SMULL,
588 ARM64_INS_SQADD,
589 ARM64_INS_SQDMLAL2,
590 ARM64_INS_SQDMLAL,
591 ARM64_INS_SQDMLSL2,
592 ARM64_INS_SQDMLSL,
593 ARM64_INS_SQDMULH,
594 ARM64_INS_SQDMULL2,
595 ARM64_INS_SQDMULL,
596 ARM64_INS_SQRDMULH,
597 ARM64_INS_SQRSHL,
598 ARM64_INS_SQRSHRN2,
599 ARM64_INS_SQRSHRN,
600 ARM64_INS_SQSHLU,
601 ARM64_INS_SQSHL,
602 ARM64_INS_SQSHRN2,
603 ARM64_INS_SQSHRN,
604 ARM64_INS_SQSUB,
605 ARM64_INS_SRHADD,
606 ARM64_INS_SRI,
607 ARM64_INS_SRSHL,
608 ARM64_INS_SRSHR,
609 ARM64_INS_SRSRA,
610 ARM64_INS_SSHLL2,
611 ARM64_INS_SSHLL,
612 ARM64_INS_SSHL,
613 ARM64_INS_SSHR,
614 ARM64_INS_SSRA,
615 ARM64_INS_SSUBL2,
616 ARM64_INS_SSUBL,
617 ARM64_INS_SSUBW2,
618 ARM64_INS_SSUBW,
619 ARM64_INS_STLRB,
620 ARM64_INS_STLR,
621 ARM64_INS_STLRH,
622 ARM64_INS_STLXP,
623 ARM64_INS_STLXRB,
624 ARM64_INS_STLXR,
625 ARM64_INS_STLXRH,
626 ARM64_INS_STXP,
627 ARM64_INS_STXRB,
628 ARM64_INS_STXR,
629 ARM64_INS_STXRH,
630 ARM64_INS_SUBHN2,
631 ARM64_INS_SUBHN,
632 ARM64_INS_SUB,
633 ARM64_INS_SVC,
634 ARM64_INS_SXTB,
635 ARM64_INS_SXTH,
636 ARM64_INS_SXTW,
637 ARM64_INS_SYSL,
638 ARM64_INS_SYS,
639 ARM64_INS_TBNZ,
640 ARM64_INS_TBZ,
641 ARM64_INS_TLBI,
642 ARM64_INS_TST,
643 ARM64_INS_UABAL2,
644 ARM64_INS_UABAL,
645 ARM64_INS_UABA,
646 ARM64_INS_UABDL2,
647 ARM64_INS_UABDL,
648 ARM64_INS_UABD,
649 ARM64_INS_UADDL2,
650 ARM64_INS_UADDL,
651 ARM64_INS_UADDW2,
652 ARM64_INS_UADDW,
653 ARM64_INS_UBFIZ,
654 ARM64_INS_UBFM,
655 ARM64_INS_UBFX,
656 ARM64_INS_UCVTF,
657 ARM64_INS_UDIV,
658 ARM64_INS_UHADD,
659 ARM64_INS_UHSUB,
660 ARM64_INS_UMADDL,
661 ARM64_INS_UMAXP,
662 ARM64_INS_UMAX,
663 ARM64_INS_UMINP,
664 ARM64_INS_UMIN,
665 ARM64_INS_UMLAL2,
666 ARM64_INS_UMLAL,
667 ARM64_INS_UMLSL2,
668 ARM64_INS_UMLSL,
669 ARM64_INS_UMOV,
670 ARM64_INS_UMSUBL,
671 ARM64_INS_UMULH,
672 ARM64_INS_UMULL2,
673 ARM64_INS_UMULL,
674 ARM64_INS_UQADD,
675 ARM64_INS_UQRSHL,
676 ARM64_INS_UQRSHRN2,
677 ARM64_INS_UQRSHRN,
678 ARM64_INS_UQSHL,
679 ARM64_INS_UQSHRN2,
680 ARM64_INS_UQSHRN,
681 ARM64_INS_UQSUB,
682 ARM64_INS_URHADD,
683 ARM64_INS_URSHL,
684 ARM64_INS_URSHR,
685 ARM64_INS_URSRA,
686 ARM64_INS_USHLL2,
687 ARM64_INS_USHLL,
688 ARM64_INS_USHL,
689 ARM64_INS_USHR,
690 ARM64_INS_USRA,
691 ARM64_INS_USUBL2,
692 ARM64_INS_USUBL,
693 ARM64_INS_USUBW2,
694 ARM64_INS_USUBW,
695 ARM64_INS_UXTB,
696 ARM64_INS_UXTH,
Nguyen Anh Quynh6b7abe32013-11-30 00:54:24 +0800697
698 // alias insn
699 ARM64_INS_MNEG,
Nguyen Anh Quynh6b9b6642013-11-30 12:28:56 +0800700 ARM64_INS_UMNEGL,
701 ARM64_INS_SMNEGL,
702 ARM64_INS_MOV,
703 ARM64_INS_NOP,
704 ARM64_INS_YIELD,
705 ARM64_INS_WFE,
706 ARM64_INS_WFI,
707 ARM64_INS_SEV,
708 ARM64_INS_SEVL,
709 ARM64_INS_NGC,
710 ARM64_INS_NEG,
Nguyen Anh Quynh6b7abe32013-11-30 00:54:24 +0800711
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +0800712 ARM64_INS_MAX,
713} arm64_insn;
714
Nguyen Anh Quynha2f825f2013-12-04 23:56:24 +0800715//> Group of ARM64 instructions
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +0800716typedef enum arm64_insn_group {
717 ARM64_GRP_INVALID = 0,
718 ARM64_GRP_NEON,
Nguyen Anh Quynh3582bc12013-12-03 09:43:27 +0800719
720 ARM64_GRP_JUMP, // all jump instructions (conditional+direct+indirect jumps)
721
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +0800722 ARM64_GRP_MAX,
723} arm64_insn_group;
724
725#ifdef __cplusplus
726}
727#endif
728
729#endif