17 #ifdef CAPSTONE_HAS_ARM64
25 #include "../../utils.h"
26 #include "../../MCInst.h"
27 #include "../../SStream.h"
28 #include "../../MCRegisterInfo.h"
29 #include "../../MathExtras.h"
34 #define GET_REGINFO_ENUM
35 #include "AArch64GenRegisterInfo.inc"
37 #define GET_INSTRINFO_ENUM
38 #include "AArch64GenInstrInfo.inc"
41 static const char *getRegisterName(
unsigned RegNo,
int AltIdx);
42 static void printOperand(
MCInst *MI,
unsigned OpNo,
SStream *O);
46 static void printShifter(
MCInst *MI,
unsigned OpNum,
SStream *O);
79 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].mem.disp = 0;
94 if (Opcode == AArch64_SYSxt && printSysAlias(MI, O))
98 if (Opcode == AArch64_SBFMXri || Opcode == AArch64_SBFMWri ||
99 Opcode == AArch64_UBFMXri || Opcode == AArch64_UBFMWri) {
105 bool IsSigned = (Opcode == AArch64_SBFMXri || Opcode == AArch64_SBFMWri);
106 bool Is64Bit = (Opcode == AArch64_SBFMXri || Opcode == AArch64_UBFMXri);
109 const char *AsmMnemonic = NULL;
116 AsmMnemonic =
"sxtb";
118 AsmMnemonic =
"uxtb";
122 AsmMnemonic =
"sxth";
124 AsmMnemonic =
"uxth";
129 AsmMnemonic =
"sxtw";
139 #ifndef CAPSTONE_DIET
148 #ifndef CAPSTONE_DIET
168 const char *AsmMnemonic = NULL;
173 if (Opcode == AArch64_UBFMWri && imms != 0x1F && ((imms + 1) == immr)) {
176 }
else if (Opcode == AArch64_UBFMXri && imms != 0x3f &&
177 ((imms + 1 == immr))) {
180 }
else if (Opcode == AArch64_UBFMWri && imms == 0x1f) {
183 }
else if (Opcode == AArch64_UBFMXri && imms == 0x3f) {
186 }
else if (Opcode == AArch64_SBFMWri && imms == 0x1f) {
189 }
else if (Opcode == AArch64_SBFMXri && imms == 0x3f) {
204 #ifndef CAPSTONE_DIET
213 #ifndef CAPSTONE_DIET
221 #ifndef CAPSTONE_DIET
227 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].imm = shift;
247 #ifndef CAPSTONE_DIET
256 #ifndef CAPSTONE_DIET
264 #ifndef CAPSTONE_DIET
272 #ifndef CAPSTONE_DIET
296 #ifndef CAPSTONE_DIET
305 #ifndef CAPSTONE_DIET
313 #ifndef CAPSTONE_DIET
321 #ifndef CAPSTONE_DIET
334 if (Opcode == AArch64_BFMXri || Opcode == AArch64_BFMWri) {
342 int BitWidth = Opcode == AArch64_BFMXri ? 64 : 32;
355 #ifndef CAPSTONE_DIET
364 #ifndef CAPSTONE_DIET
372 #ifndef CAPSTONE_DIET
378 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].imm = LSB;
380 #ifndef CAPSTONE_DIET
386 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].imm = Width;
394 Width = ImmS - ImmR + 1;
405 #ifndef CAPSTONE_DIET
414 #ifndef CAPSTONE_DIET
422 #ifndef CAPSTONE_DIET
428 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].imm = LSB;
430 #ifndef CAPSTONE_DIET
436 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].imm = Width;
443 mnem = printAliasInstr(MI, O, Info);
448 printInstruction(MI, O, Info);
457 const char *Asm = NULL;
468 unsigned op_ic = 0, op_dc = 0, op_at = 0, op_tlbi = 0;
477 if (Op1Val == 0 && Op2Val == 0) {
484 if (Op1Val == 0 && Op2Val == 0) {
488 }
else if (Op1Val == 3 && Op2Val == 1) {
497 if (Op1Val == 3 && Op2Val == 1) {
504 if (Op1Val == 0 && Op2Val == 1) {
509 if (Op1Val == 0 && Op2Val == 2) {
516 if (Op1Val == 3 && Op2Val == 1) {
520 }
else if (Op1Val == 0 && Op2Val == 2) {
527 if (Op1Val == 3 && Op2Val == 1) {
534 if (Op1Val == 3 && Op2Val == 1) {
538 }
else if (Op1Val == 0 && Op2Val == 2) {
583 }
else if (CnVal == 8) {
699 #ifndef CAPSTONE_DIET
706 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].sys = op_ic + op_dc + op_at + op_tlbi;
710 if (!strstr(Asm,
"all")) {
714 #ifndef CAPSTONE_DIET
730 static void printOperand(
MCInst *MI,
unsigned OpNo,
SStream *O)
746 #ifndef CAPSTONE_DIET
760 if (MI->
Opcode == AArch64_ADR) {
778 #ifndef CAPSTONE_DIET
785 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].imm = imm;
792 static void printHexImm(
MCInst *MI,
unsigned OpNo,
SStream *O)
797 #ifndef CAPSTONE_DIET
809 static void printPostIncOperand(
MCInst *MI,
unsigned OpNo,
816 if (
Reg == AArch64_XZR) {
819 #ifndef CAPSTONE_DIET
826 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].imm = Imm;
832 #ifndef CAPSTONE_DIET
847 static void printPostIncOperand2(
MCInst *MI,
unsigned OpNo,
SStream *O,
int Amount)
849 printPostIncOperand(MI, OpNo, Amount, O);
852 static void printVRegOperand(
MCInst *MI,
unsigned OpNo,
SStream *O)
859 #ifndef CAPSTONE_DIET
871 static void printSysCROperand(
MCInst *MI,
unsigned OpNo,
SStream *O)
877 #ifndef CAPSTONE_DIET
889 static void printAddSubImm(
MCInst *MI,
unsigned OpNum,
SStream *O)
900 #ifndef CAPSTONE_DIET
907 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].imm = Val;
912 printShifter(MI, OpNum + 1, O);
916 static void printLogicalImm32(
MCInst *MI,
unsigned OpNum,
SStream *O)
924 #ifndef CAPSTONE_DIET
931 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].imm = Val;
936 static void printLogicalImm64(
MCInst *MI,
unsigned OpNum,
SStream *O)
958 #ifndef CAPSTONE_DIET
970 static void printShifter(
MCInst *MI,
unsigned OpNum,
SStream *O)
1002 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count - 1].shift.type = shifter;
1007 static void printShiftedRegister(
MCInst *MI,
unsigned OpNum,
SStream *O)
1011 #ifndef CAPSTONE_DIET
1019 MI->
flat_insn->detail->arm64.op_count++;
1021 printShifter(MI, OpNum + 1, O);
1024 static void printArithExtend(
MCInst *MI,
unsigned OpNum,
SStream *O)
1036 if ( ((Dest == AArch64_SP || Src1 == AArch64_SP) &&
1038 ((Dest == AArch64_WSP || Src1 == AArch64_WSP) &&
1040 if (ShiftVal != 0) {
1045 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count - 1].shift.value = ShiftVal;
1087 if (ShiftVal != 0) {
1092 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count - 1].shift.value = ShiftVal;
1097 static void printExtendedRegister(
MCInst *MI,
unsigned OpNum,
SStream *O)
1103 #ifndef CAPSTONE_DIET
1111 MI->
flat_insn->detail->arm64.op_count++;
1114 printArithExtend(MI, OpNum + 1, O);
1117 static void printMemExtend(
MCInst *MI,
unsigned OpNum,
SStream *O,
char SrcRegKind,
unsigned Width)
1123 bool IsLSL = !SignExtend && SrcRegKind ==
'x';
1130 SStream_concat(O,
"%cxt%c", (SignExtend ?
's' :
'u'), SrcRegKind);
1133 switch(SrcRegKind) {
1146 switch(SrcRegKind) {
1165 if (DoShift || IsLSL) {
1174 static void printCondCode(
MCInst *MI,
unsigned OpNum,
SStream *O)
1183 static void printInverseCondCode(
MCInst *MI,
unsigned OpNum,
SStream *O)
1193 static void printImmScale(
MCInst *MI,
unsigned OpNum,
SStream *O,
int Scale)
1203 #ifndef CAPSTONE_DIET
1210 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].imm = val;
1211 MI->
flat_insn->detail->arm64.op_count++;
1216 static void printUImm12Offset(
MCInst *MI,
unsigned OpNum,
unsigned Scale,
SStream *O)
1227 #ifndef CAPSTONE_DIET
1235 MI->
flat_insn->detail->arm64.op_count++;
1241 static void printUImm12Offset2(
MCInst *MI,
unsigned OpNum,
SStream *O,
int Scale)
1243 printUImm12Offset(MI, OpNum, Scale, O);
1246 static void printPrefetchOp(
MCInst *MI,
unsigned OpNum,
SStream *O)
1257 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].prefetch = prfop + 1;
1258 MI->
flat_insn->detail->arm64.op_count++;
1263 #ifndef CAPSTONE_DIET
1270 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].imm = prfop;
1271 MI->
flat_insn->detail->arm64.op_count++;
1276 static void printFPImmOperand(
MCInst *MI,
unsigned OpNum,
SStream *O)
1282 #if defined(_KERNEL_MODE)
1289 #ifndef CAPSTONE_DIET
1296 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].fp = FPImm;
1297 MI->
flat_insn->detail->arm64.op_count++;
1302 static unsigned getNextVectorRegister(
unsigned Reg,
unsigned Stride)
1308 case AArch64_Q0:
Reg = AArch64_Q1;
break;
1309 case AArch64_Q1:
Reg = AArch64_Q2;
break;
1310 case AArch64_Q2:
Reg = AArch64_Q3;
break;
1311 case AArch64_Q3:
Reg = AArch64_Q4;
break;
1312 case AArch64_Q4:
Reg = AArch64_Q5;
break;
1313 case AArch64_Q5:
Reg = AArch64_Q6;
break;
1314 case AArch64_Q6:
Reg = AArch64_Q7;
break;
1315 case AArch64_Q7:
Reg = AArch64_Q8;
break;
1316 case AArch64_Q8:
Reg = AArch64_Q9;
break;
1317 case AArch64_Q9:
Reg = AArch64_Q10;
break;
1318 case AArch64_Q10:
Reg = AArch64_Q11;
break;
1319 case AArch64_Q11:
Reg = AArch64_Q12;
break;
1320 case AArch64_Q12:
Reg = AArch64_Q13;
break;
1321 case AArch64_Q13:
Reg = AArch64_Q14;
break;
1322 case AArch64_Q14:
Reg = AArch64_Q15;
break;
1323 case AArch64_Q15:
Reg = AArch64_Q16;
break;
1324 case AArch64_Q16:
Reg = AArch64_Q17;
break;
1325 case AArch64_Q17:
Reg = AArch64_Q18;
break;
1326 case AArch64_Q18:
Reg = AArch64_Q19;
break;
1327 case AArch64_Q19:
Reg = AArch64_Q20;
break;
1328 case AArch64_Q20:
Reg = AArch64_Q21;
break;
1329 case AArch64_Q21:
Reg = AArch64_Q22;
break;
1330 case AArch64_Q22:
Reg = AArch64_Q23;
break;
1331 case AArch64_Q23:
Reg = AArch64_Q24;
break;
1332 case AArch64_Q24:
Reg = AArch64_Q25;
break;
1333 case AArch64_Q25:
Reg = AArch64_Q26;
break;
1334 case AArch64_Q26:
Reg = AArch64_Q27;
break;
1335 case AArch64_Q27:
Reg = AArch64_Q28;
break;
1336 case AArch64_Q28:
Reg = AArch64_Q29;
break;
1337 case AArch64_Q29:
Reg = AArch64_Q30;
break;
1338 case AArch64_Q30:
Reg = AArch64_Q31;
break;
1340 case AArch64_Q31:
Reg = AArch64_Q0;
break;
1349 #define GETREGCLASS_CONTAIN0(_class, _reg) MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, _class), _reg)
1352 unsigned NumRegs = 1, FirstReg,
i;
1358 if (GETREGCLASS_CONTAIN0(AArch64_DDRegClassID ,
Reg) ||
1359 GETREGCLASS_CONTAIN0(AArch64_QQRegClassID,
Reg))
1361 else if (GETREGCLASS_CONTAIN0(AArch64_DDDRegClassID,
Reg) ||
1362 GETREGCLASS_CONTAIN0(AArch64_QQQRegClassID,
Reg))
1364 else if (GETREGCLASS_CONTAIN0(AArch64_DDDDRegClassID,
Reg) ||
1365 GETREGCLASS_CONTAIN0(AArch64_QQQQRegClassID,
Reg))
1376 if (GETREGCLASS_CONTAIN0(AArch64_FPR64RegClassID,
Reg)) {
1381 for (
i = 0;
i < NumRegs; ++
i,
Reg = getNextVectorRegister(
Reg, 1)) {
1383 if (
i + 1 != NumRegs)
1386 #ifndef CAPSTONE_DIET
1394 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].vas = vas;
1395 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].vess = vess;
1396 MI->
flat_insn->detail->arm64.op_count++;
1410 cs_snprintf(Suffix,
sizeof(Suffix),
".%u%c", NumLanes, LaneKind);
1467 cs_snprintf(Suffix,
sizeof(Suffix),
".%c", LaneKind);
1485 printVectorList(MI, OpNum, O, Suffix, MRI, vas, vess);
1488 static void printVectorIndex(
MCInst *MI,
unsigned OpNum,
SStream *O)
1498 static void printAlignedLabel(
MCInst *MI,
unsigned OpNum,
SStream *O)
1508 #ifndef CAPSTONE_DIET
1515 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].imm = imm;
1516 MI->
flat_insn->detail->arm64.op_count++;
1522 static void printAdrpLabel(
MCInst *MI,
unsigned OpNum,
SStream *O)
1533 #ifndef CAPSTONE_DIET
1540 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].imm = imm;
1541 MI->
flat_insn->detail->arm64.op_count++;
1547 static void printBarrierOption(
MCInst *MI,
unsigned OpNo,
SStream *O)
1554 if (Opcode == AArch64_ISB)
1562 #ifndef CAPSTONE_DIET
1569 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].barrier = Val;
1570 MI->
flat_insn->detail->arm64.op_count++;
1575 #ifndef CAPSTONE_DIET
1582 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].imm = Val;
1583 MI->
flat_insn->detail->arm64.op_count++;
1588 static void printMRSSystemRegister(
MCInst *MI,
unsigned OpNo,
SStream *O)
1597 #ifndef CAPSTONE_DIET
1604 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].reg = Val;
1605 MI->
flat_insn->detail->arm64.op_count++;
1609 static void printMSRSystemRegister(
MCInst *MI,
unsigned OpNo,
SStream *O)
1618 #ifndef CAPSTONE_DIET
1625 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].reg = Val;
1626 MI->
flat_insn->detail->arm64.op_count++;
1630 static void printSystemPStateField(
MCInst *MI,
unsigned OpNo,
SStream *O)
1640 #ifndef CAPSTONE_DIET
1647 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].pstate = Val;
1648 MI->
flat_insn->detail->arm64.op_count++;
1651 #ifndef CAPSTONE_DIET
1655 #ifndef CAPSTONE_DIET
1661 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].imm = Val;
1662 MI->
flat_insn->detail->arm64.op_count++;
1666 static void printSIMDType10Operand(
MCInst *MI,
unsigned OpNo,
SStream *O)
1672 #ifndef CAPSTONE_DIET
1679 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].imm = Val;
1680 MI->
flat_insn->detail->arm64.op_count++;
1685 #define PRINT_ALIAS_INSTR
1686 #include "AArch64GenAsmWriter.inc"
1698 case AArch64_LD1Fourv16b_POST:
1699 case AArch64_LD1Fourv1d_POST:
1700 case AArch64_LD1Fourv2d_POST:
1701 case AArch64_LD1Fourv2s_POST:
1702 case AArch64_LD1Fourv4h_POST:
1703 case AArch64_LD1Fourv4s_POST:
1704 case AArch64_LD1Fourv8b_POST:
1705 case AArch64_LD1Fourv8h_POST:
1706 case AArch64_LD1Onev16b_POST:
1707 case AArch64_LD1Onev1d_POST:
1708 case AArch64_LD1Onev2d_POST:
1709 case AArch64_LD1Onev2s_POST:
1710 case AArch64_LD1Onev4h_POST:
1711 case AArch64_LD1Onev4s_POST:
1712 case AArch64_LD1Onev8b_POST:
1713 case AArch64_LD1Onev8h_POST:
1714 case AArch64_LD1Rv16b_POST:
1715 case AArch64_LD1Rv1d_POST:
1716 case AArch64_LD1Rv2d_POST:
1717 case AArch64_LD1Rv2s_POST:
1718 case AArch64_LD1Rv4h_POST:
1719 case AArch64_LD1Rv4s_POST:
1720 case AArch64_LD1Rv8b_POST:
1721 case AArch64_LD1Rv8h_POST:
1722 case AArch64_LD1Threev16b_POST:
1723 case AArch64_LD1Threev1d_POST:
1724 case AArch64_LD1Threev2d_POST:
1725 case AArch64_LD1Threev2s_POST:
1726 case AArch64_LD1Threev4h_POST:
1727 case AArch64_LD1Threev4s_POST:
1728 case AArch64_LD1Threev8b_POST:
1729 case AArch64_LD1Threev8h_POST:
1730 case AArch64_LD1Twov16b_POST:
1731 case AArch64_LD1Twov1d_POST:
1732 case AArch64_LD1Twov2d_POST:
1733 case AArch64_LD1Twov2s_POST:
1734 case AArch64_LD1Twov4h_POST:
1735 case AArch64_LD1Twov4s_POST:
1736 case AArch64_LD1Twov8b_POST:
1737 case AArch64_LD1Twov8h_POST:
1738 case AArch64_LD1i16_POST:
1739 case AArch64_LD1i32_POST:
1740 case AArch64_LD1i64_POST:
1741 case AArch64_LD1i8_POST:
1742 case AArch64_LD2Rv16b_POST:
1743 case AArch64_LD2Rv1d_POST:
1744 case AArch64_LD2Rv2d_POST:
1745 case AArch64_LD2Rv2s_POST:
1746 case AArch64_LD2Rv4h_POST:
1747 case AArch64_LD2Rv4s_POST:
1748 case AArch64_LD2Rv8b_POST:
1749 case AArch64_LD2Rv8h_POST:
1750 case AArch64_LD2Twov16b_POST:
1751 case AArch64_LD2Twov2d_POST:
1752 case AArch64_LD2Twov2s_POST:
1753 case AArch64_LD2Twov4h_POST:
1754 case AArch64_LD2Twov4s_POST:
1755 case AArch64_LD2Twov8b_POST:
1756 case AArch64_LD2Twov8h_POST:
1757 case AArch64_LD2i16_POST:
1758 case AArch64_LD2i32_POST:
1759 case AArch64_LD2i64_POST:
1760 case AArch64_LD2i8_POST:
1761 case AArch64_LD3Rv16b_POST:
1762 case AArch64_LD3Rv1d_POST:
1763 case AArch64_LD3Rv2d_POST:
1764 case AArch64_LD3Rv2s_POST:
1765 case AArch64_LD3Rv4h_POST:
1766 case AArch64_LD3Rv4s_POST:
1767 case AArch64_LD3Rv8b_POST:
1768 case AArch64_LD3Rv8h_POST:
1769 case AArch64_LD3Threev16b_POST:
1770 case AArch64_LD3Threev2d_POST:
1771 case AArch64_LD3Threev2s_POST:
1772 case AArch64_LD3Threev4h_POST:
1773 case AArch64_LD3Threev4s_POST:
1774 case AArch64_LD3Threev8b_POST:
1775 case AArch64_LD3Threev8h_POST:
1776 case AArch64_LD3i16_POST:
1777 case AArch64_LD3i32_POST:
1778 case AArch64_LD3i64_POST:
1779 case AArch64_LD3i8_POST:
1780 case AArch64_LD4Fourv16b_POST:
1781 case AArch64_LD4Fourv2d_POST:
1782 case AArch64_LD4Fourv2s_POST:
1783 case AArch64_LD4Fourv4h_POST:
1784 case AArch64_LD4Fourv4s_POST:
1785 case AArch64_LD4Fourv8b_POST:
1786 case AArch64_LD4Fourv8h_POST:
1787 case AArch64_LD4Rv16b_POST:
1788 case AArch64_LD4Rv1d_POST:
1789 case AArch64_LD4Rv2d_POST:
1790 case AArch64_LD4Rv2s_POST:
1791 case AArch64_LD4Rv4h_POST:
1792 case AArch64_LD4Rv4s_POST:
1793 case AArch64_LD4Rv8b_POST:
1794 case AArch64_LD4Rv8h_POST:
1795 case AArch64_LD4i16_POST:
1796 case AArch64_LD4i32_POST:
1797 case AArch64_LD4i64_POST:
1798 case AArch64_LD4i8_POST:
1799 case AArch64_LDPDpost:
1800 case AArch64_LDPDpre:
1801 case AArch64_LDPQpost:
1802 case AArch64_LDPQpre:
1803 case AArch64_LDPSWpost:
1804 case AArch64_LDPSWpre:
1805 case AArch64_LDPSpost:
1806 case AArch64_LDPSpre:
1807 case AArch64_LDPWpost:
1808 case AArch64_LDPWpre:
1809 case AArch64_LDPXpost:
1810 case AArch64_LDPXpre:
1811 case AArch64_LDRBBpost:
1812 case AArch64_LDRBBpre:
1813 case AArch64_LDRBpost:
1814 case AArch64_LDRBpre:
1815 case AArch64_LDRDpost:
1816 case AArch64_LDRDpre:
1817 case AArch64_LDRHHpost:
1818 case AArch64_LDRHHpre:
1819 case AArch64_LDRHpost:
1820 case AArch64_LDRHpre:
1821 case AArch64_LDRQpost:
1822 case AArch64_LDRQpre:
1823 case AArch64_LDRSBWpost:
1824 case AArch64_LDRSBWpre:
1825 case AArch64_LDRSBXpost:
1826 case AArch64_LDRSBXpre:
1827 case AArch64_LDRSHWpost:
1828 case AArch64_LDRSHWpre:
1829 case AArch64_LDRSHXpost:
1830 case AArch64_LDRSHXpre:
1831 case AArch64_LDRSWpost:
1832 case AArch64_LDRSWpre:
1833 case AArch64_LDRSpost:
1834 case AArch64_LDRSpre:
1835 case AArch64_LDRWpost:
1836 case AArch64_LDRWpre:
1837 case AArch64_LDRXpost:
1838 case AArch64_LDRXpre:
1839 case AArch64_ST1Fourv16b_POST:
1840 case AArch64_ST1Fourv1d_POST:
1841 case AArch64_ST1Fourv2d_POST:
1842 case AArch64_ST1Fourv2s_POST:
1843 case AArch64_ST1Fourv4h_POST:
1844 case AArch64_ST1Fourv4s_POST:
1845 case AArch64_ST1Fourv8b_POST:
1846 case AArch64_ST1Fourv8h_POST:
1847 case AArch64_ST1Onev16b_POST:
1848 case AArch64_ST1Onev1d_POST:
1849 case AArch64_ST1Onev2d_POST:
1850 case AArch64_ST1Onev2s_POST:
1851 case AArch64_ST1Onev4h_POST:
1852 case AArch64_ST1Onev4s_POST:
1853 case AArch64_ST1Onev8b_POST:
1854 case AArch64_ST1Onev8h_POST:
1855 case AArch64_ST1Threev16b_POST:
1856 case AArch64_ST1Threev1d_POST:
1857 case AArch64_ST1Threev2d_POST:
1858 case AArch64_ST1Threev2s_POST:
1859 case AArch64_ST1Threev4h_POST:
1860 case AArch64_ST1Threev4s_POST:
1861 case AArch64_ST1Threev8b_POST:
1862 case AArch64_ST1Threev8h_POST:
1863 case AArch64_ST1Twov16b_POST:
1864 case AArch64_ST1Twov1d_POST:
1865 case AArch64_ST1Twov2d_POST:
1866 case AArch64_ST1Twov2s_POST:
1867 case AArch64_ST1Twov4h_POST:
1868 case AArch64_ST1Twov4s_POST:
1869 case AArch64_ST1Twov8b_POST:
1870 case AArch64_ST1Twov8h_POST:
1871 case AArch64_ST1i16_POST:
1872 case AArch64_ST1i32_POST:
1873 case AArch64_ST1i64_POST:
1874 case AArch64_ST1i8_POST:
1875 case AArch64_ST2Twov16b_POST:
1876 case AArch64_ST2Twov2d_POST:
1877 case AArch64_ST2Twov2s_POST:
1878 case AArch64_ST2Twov4h_POST:
1879 case AArch64_ST2Twov4s_POST:
1880 case AArch64_ST2Twov8b_POST:
1881 case AArch64_ST2Twov8h_POST:
1882 case AArch64_ST2i16_POST:
1883 case AArch64_ST2i32_POST:
1884 case AArch64_ST2i64_POST:
1885 case AArch64_ST2i8_POST:
1886 case AArch64_ST3Threev16b_POST:
1887 case AArch64_ST3Threev2d_POST:
1888 case AArch64_ST3Threev2s_POST:
1889 case AArch64_ST3Threev4h_POST:
1890 case AArch64_ST3Threev4s_POST:
1891 case AArch64_ST3Threev8b_POST:
1892 case AArch64_ST3Threev8h_POST:
1893 case AArch64_ST3i16_POST:
1894 case AArch64_ST3i32_POST:
1895 case AArch64_ST3i64_POST:
1896 case AArch64_ST3i8_POST:
1897 case AArch64_ST4Fourv16b_POST:
1898 case AArch64_ST4Fourv2d_POST:
1899 case AArch64_ST4Fourv2s_POST:
1900 case AArch64_ST4Fourv4h_POST:
1901 case AArch64_ST4Fourv4s_POST:
1902 case AArch64_ST4Fourv8b_POST:
1903 case AArch64_ST4Fourv8h_POST:
1904 case AArch64_ST4i16_POST:
1905 case AArch64_ST4i32_POST:
1906 case AArch64_ST4i64_POST:
1907 case AArch64_ST4i8_POST:
1908 case AArch64_STPDpost:
1909 case AArch64_STPDpre:
1910 case AArch64_STPQpost:
1911 case AArch64_STPQpre:
1912 case AArch64_STPSpost:
1913 case AArch64_STPSpre:
1914 case AArch64_STPWpost:
1915 case AArch64_STPWpre:
1916 case AArch64_STPXpost:
1917 case AArch64_STPXpre:
1918 case AArch64_STRBBpost:
1919 case AArch64_STRBBpre:
1920 case AArch64_STRBpost:
1921 case AArch64_STRBpre:
1922 case AArch64_STRDpost:
1923 case AArch64_STRDpre:
1924 case AArch64_STRHHpost:
1925 case AArch64_STRHHpre:
1926 case AArch64_STRHpost:
1927 case AArch64_STRHpre:
1928 case AArch64_STRQpost:
1929 case AArch64_STRQpre:
1930 case AArch64_STRSpost:
1931 case AArch64_STRSpre:
1932 case AArch64_STRWpost:
1933 case AArch64_STRWpre:
1934 case AArch64_STRXpost:
1935 case AArch64_STRXpre:
1936 flat_insn->detail->arm64.writeback =
true;