17 #ifdef CAPSTONE_HAS_ARM64
19 #include <capstone/platform.h>
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
37 #define GET_INSTRINFO_ENUM
41 static const char *getRegisterName(
unsigned RegNo,
int AltIdx);
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";
128 if (Is64Bit && IsSigned)
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
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;
343 LSB = (BitWidth - ImmR) % BitWidth;
355 #ifndef CAPSTONE_DIET
364 #ifndef CAPSTONE_DIET
372 #ifndef CAPSTONE_DIET
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
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);
450 case AArch64_UMOVvi64:
453 case AArch64_UMOVvi32:
458 printInstruction(MI,
O, Info);
467 const char *Asm =
NULL;
478 unsigned op_ic = 0, op_dc = 0, op_at = 0, op_tlbi = 0;
487 if (Op1Val == 0 && Op2Val == 0) {
494 if (Op1Val == 0 && Op2Val == 0) {
498 }
else if (Op1Val == 3 && Op2Val == 1) {
507 if (Op1Val == 3 && Op2Val == 1) {
514 if (Op1Val == 0 && Op2Val == 1) {
519 if (Op1Val == 0 && Op2Val == 2) {
526 if (Op1Val == 3 && Op2Val == 1) {
530 }
else if (Op1Val == 0 && Op2Val == 2) {
537 if (Op1Val == 3 && Op2Val == 1) {
544 if (Op1Val == 3 && Op2Val == 1) {
548 }
else if (Op1Val == 0 && Op2Val == 2) {
593 }
else if (CnVal == 8) {
709 #ifndef CAPSTONE_DIET
716 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].sys = op_ic + op_dc + op_at + op_tlbi;
720 if (!strstr(Asm,
"all")) {
724 #ifndef CAPSTONE_DIET
756 #ifndef CAPSTONE_DIET
770 if (MI->
Opcode == AArch64_ADR) {
787 #ifndef CAPSTONE_DIET
806 #ifndef CAPSTONE_DIET
818 static void printPostIncOperand(
MCInst *MI,
unsigned OpNo,
825 if (
Reg == AArch64_XZR) {
828 #ifndef CAPSTONE_DIET
835 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].imm = Imm;
841 #ifndef CAPSTONE_DIET
856 static void printPostIncOperand2(
MCInst *MI,
unsigned OpNo,
SStream *
O,
int Amount)
858 printPostIncOperand(MI, OpNo, Amount,
O);
861 static void printVRegOperand(
MCInst *MI,
unsigned OpNo,
SStream *
O)
868 #ifndef CAPSTONE_DIET
880 static void printSysCROperand(
MCInst *MI,
unsigned OpNo,
SStream *
O)
886 #ifndef CAPSTONE_DIET
898 static void printAddSubImm(
MCInst *MI,
unsigned OpNum,
SStream *
O)
909 #ifndef CAPSTONE_DIET
916 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].imm = Val;
921 printShifter(MI, OpNum + 1,
O);
925 static void printLogicalImm32(
MCInst *MI,
unsigned OpNum,
SStream *
O)
933 #ifndef CAPSTONE_DIET
940 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].imm = Val;
945 static void printLogicalImm64(
MCInst *MI,
unsigned OpNum,
SStream *
O)
967 #ifndef CAPSTONE_DIET
1011 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count - 1].shift.type = shifter;
1016 static void printShiftedRegister(
MCInst *MI,
unsigned OpNum,
SStream *
O)
1020 #ifndef CAPSTONE_DIET
1028 MI->
flat_insn->detail->arm64.op_count++;
1030 printShifter(MI, OpNum + 1,
O);
1033 static void printArithExtend(
MCInst *MI,
unsigned OpNum,
SStream *
O)
1045 if ( ((Dest == AArch64_SP || Src1 == AArch64_SP) &&
1047 ((Dest == AArch64_WSP || Src1 == AArch64_WSP) &&
1049 if (ShiftVal != 0) {
1054 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count - 1].shift.value = ShiftVal;
1096 if (ShiftVal != 0) {
1101 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count - 1].shift.value = ShiftVal;
1106 static void printExtendedRegister(
MCInst *MI,
unsigned OpNum,
SStream *
O)
1112 #ifndef CAPSTONE_DIET
1120 MI->
flat_insn->detail->arm64.op_count++;
1123 printArithExtend(MI, OpNum + 1,
O);
1126 static void printMemExtend(
MCInst *MI,
unsigned OpNum,
SStream *
O,
char SrcRegKind,
unsigned Width)
1132 bool IsLSL = !SignExtend && SrcRegKind ==
'x';
1142 switch(SrcRegKind) {
1155 switch(SrcRegKind) {
1174 if (DoShift || IsLSL) {
1183 static void printCondCode(
MCInst *MI,
unsigned OpNum,
SStream *
O)
1192 static void printInverseCondCode(
MCInst *MI,
unsigned OpNum,
SStream *
O)
1202 static void printImmScale(
MCInst *MI,
unsigned OpNum,
SStream *
O,
int Scale)
1212 #ifndef CAPSTONE_DIET
1220 MI->
flat_insn->detail->arm64.op_count++;
1225 static void printUImm12Offset(
MCInst *MI,
unsigned OpNum,
unsigned Scale,
SStream *
O)
1236 #ifndef CAPSTONE_DIET
1244 MI->
flat_insn->detail->arm64.op_count++;
1250 static void printUImm12Offset2(
MCInst *MI,
unsigned OpNum,
SStream *
O,
int Scale)
1252 printUImm12Offset(MI, OpNum, Scale,
O);
1255 static void printPrefetchOp(
MCInst *MI,
unsigned OpNum,
SStream *
O)
1266 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].prefetch = prfop + 1;
1267 MI->
flat_insn->detail->arm64.op_count++;
1272 #ifndef CAPSTONE_DIET
1279 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].imm = prfop;
1280 MI->
flat_insn->detail->arm64.op_count++;
1285 static void printFPImmOperand(
MCInst *MI,
unsigned OpNum,
SStream *
O)
1291 #if defined(_KERNEL_MODE)
1298 #ifndef CAPSTONE_DIET
1305 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].fp = FPImm;
1306 MI->
flat_insn->detail->arm64.op_count++;
1311 static unsigned getNextVectorRegister(
unsigned Reg,
unsigned Stride)
1317 case AArch64_Q0:
Reg = AArch64_Q1;
break;
1318 case AArch64_Q1:
Reg = AArch64_Q2;
break;
1319 case AArch64_Q2:
Reg = AArch64_Q3;
break;
1320 case AArch64_Q3:
Reg = AArch64_Q4;
break;
1321 case AArch64_Q4:
Reg = AArch64_Q5;
break;
1322 case AArch64_Q5:
Reg = AArch64_Q6;
break;
1323 case AArch64_Q6:
Reg = AArch64_Q7;
break;
1324 case AArch64_Q7:
Reg = AArch64_Q8;
break;
1325 case AArch64_Q8:
Reg = AArch64_Q9;
break;
1326 case AArch64_Q9:
Reg = AArch64_Q10;
break;
1327 case AArch64_Q10:
Reg = AArch64_Q11;
break;
1328 case AArch64_Q11:
Reg = AArch64_Q12;
break;
1329 case AArch64_Q12:
Reg = AArch64_Q13;
break;
1330 case AArch64_Q13:
Reg = AArch64_Q14;
break;
1331 case AArch64_Q14:
Reg = AArch64_Q15;
break;
1332 case AArch64_Q15:
Reg = AArch64_Q16;
break;
1333 case AArch64_Q16:
Reg = AArch64_Q17;
break;
1334 case AArch64_Q17:
Reg = AArch64_Q18;
break;
1335 case AArch64_Q18:
Reg = AArch64_Q19;
break;
1336 case AArch64_Q19:
Reg = AArch64_Q20;
break;
1337 case AArch64_Q20:
Reg = AArch64_Q21;
break;
1338 case AArch64_Q21:
Reg = AArch64_Q22;
break;
1339 case AArch64_Q22:
Reg = AArch64_Q23;
break;
1340 case AArch64_Q23:
Reg = AArch64_Q24;
break;
1341 case AArch64_Q24:
Reg = AArch64_Q25;
break;
1342 case AArch64_Q25:
Reg = AArch64_Q26;
break;
1343 case AArch64_Q26:
Reg = AArch64_Q27;
break;
1344 case AArch64_Q27:
Reg = AArch64_Q28;
break;
1345 case AArch64_Q28:
Reg = AArch64_Q29;
break;
1346 case AArch64_Q29:
Reg = AArch64_Q30;
break;
1347 case AArch64_Q30:
Reg = AArch64_Q31;
break;
1349 case AArch64_Q31:
Reg = AArch64_Q0;
break;
1358 #define GETREGCLASS_CONTAIN0(_class, _reg) MCRegisterClass_contains(MCRegisterInfo_getRegClass(MRI, _class), _reg)
1361 unsigned NumRegs = 1, FirstReg,
i;
1367 if (GETREGCLASS_CONTAIN0(AArch64_DDRegClassID ,
Reg) ||
1368 GETREGCLASS_CONTAIN0(AArch64_QQRegClassID,
Reg))
1370 else if (GETREGCLASS_CONTAIN0(AArch64_DDDRegClassID,
Reg) ||
1371 GETREGCLASS_CONTAIN0(AArch64_QQQRegClassID,
Reg))
1373 else if (GETREGCLASS_CONTAIN0(AArch64_DDDDRegClassID,
Reg) ||
1374 GETREGCLASS_CONTAIN0(AArch64_QQQQRegClassID,
Reg))
1385 if (GETREGCLASS_CONTAIN0(AArch64_FPR64RegClassID,
Reg)) {
1390 for (
i = 0;
i < NumRegs; ++
i,
Reg = getNextVectorRegister(
Reg, 1)) {
1392 if (
i + 1 != NumRegs)
1395 #ifndef CAPSTONE_DIET
1403 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].vas = vas;
1404 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].vess = vess;
1405 MI->
flat_insn->detail->arm64.op_count++;
1419 cs_snprintf(Suffix,
sizeof(Suffix),
".%u%c", NumLanes, LaneKind);
1476 cs_snprintf(Suffix,
sizeof(Suffix),
".%c", LaneKind);
1494 printVectorList(MI, OpNum,
O, Suffix, MRI, vas, vess);
1497 static void printVectorIndex(
MCInst *MI,
unsigned OpNum,
SStream *
O)
1507 static void printAlignedLabel(
MCInst *MI,
unsigned OpNum,
SStream *
O)
1517 #ifndef CAPSTONE_DIET
1525 MI->
flat_insn->detail->arm64.op_count++;
1531 static void printAdrpLabel(
MCInst *MI,
unsigned OpNum,
SStream *
O)
1542 #ifndef CAPSTONE_DIET
1550 MI->
flat_insn->detail->arm64.op_count++;
1556 static void printBarrierOption(
MCInst *MI,
unsigned OpNo,
SStream *
O)
1563 if (
Opcode == AArch64_ISB)
1571 #ifndef CAPSTONE_DIET
1578 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].barrier = Val;
1579 MI->
flat_insn->detail->arm64.op_count++;
1584 #ifndef CAPSTONE_DIET
1591 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].imm = Val;
1592 MI->
flat_insn->detail->arm64.op_count++;
1597 static void printMRSSystemRegister(
MCInst *MI,
unsigned OpNo,
SStream *
O)
1606 #ifndef CAPSTONE_DIET
1613 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].reg = Val;
1614 MI->
flat_insn->detail->arm64.op_count++;
1618 static void printMSRSystemRegister(
MCInst *MI,
unsigned OpNo,
SStream *
O)
1627 #ifndef CAPSTONE_DIET
1634 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].reg = Val;
1635 MI->
flat_insn->detail->arm64.op_count++;
1639 static void printSystemPStateField(
MCInst *MI,
unsigned OpNo,
SStream *
O)
1649 #ifndef CAPSTONE_DIET
1656 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].pstate = Val;
1657 MI->
flat_insn->detail->arm64.op_count++;
1660 #ifndef CAPSTONE_DIET
1664 #ifndef CAPSTONE_DIET
1670 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].imm = Val;
1671 MI->
flat_insn->detail->arm64.op_count++;
1675 static void printSIMDType10Operand(
MCInst *MI,
unsigned OpNo,
SStream *
O)
1681 #ifndef CAPSTONE_DIET
1688 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count].imm = Val;
1689 MI->
flat_insn->detail->arm64.op_count++;
1694 #define PRINT_ALIAS_INSTR
1707 case AArch64_LD1Fourv16b_POST:
1708 case AArch64_LD1Fourv1d_POST:
1709 case AArch64_LD1Fourv2d_POST:
1710 case AArch64_LD1Fourv2s_POST:
1711 case AArch64_LD1Fourv4h_POST:
1712 case AArch64_LD1Fourv4s_POST:
1713 case AArch64_LD1Fourv8b_POST:
1714 case AArch64_LD1Fourv8h_POST:
1715 case AArch64_LD1Onev16b_POST:
1716 case AArch64_LD1Onev1d_POST:
1717 case AArch64_LD1Onev2d_POST:
1718 case AArch64_LD1Onev2s_POST:
1719 case AArch64_LD1Onev4h_POST:
1720 case AArch64_LD1Onev4s_POST:
1721 case AArch64_LD1Onev8b_POST:
1722 case AArch64_LD1Onev8h_POST:
1723 case AArch64_LD1Rv16b_POST:
1724 case AArch64_LD1Rv1d_POST:
1725 case AArch64_LD1Rv2d_POST:
1726 case AArch64_LD1Rv2s_POST:
1727 case AArch64_LD1Rv4h_POST:
1728 case AArch64_LD1Rv4s_POST:
1729 case AArch64_LD1Rv8b_POST:
1730 case AArch64_LD1Rv8h_POST:
1731 case AArch64_LD1Threev16b_POST:
1732 case AArch64_LD1Threev1d_POST:
1733 case AArch64_LD1Threev2d_POST:
1734 case AArch64_LD1Threev2s_POST:
1735 case AArch64_LD1Threev4h_POST:
1736 case AArch64_LD1Threev4s_POST:
1737 case AArch64_LD1Threev8b_POST:
1738 case AArch64_LD1Threev8h_POST:
1739 case AArch64_LD1Twov16b_POST:
1740 case AArch64_LD1Twov1d_POST:
1741 case AArch64_LD1Twov2d_POST:
1742 case AArch64_LD1Twov2s_POST:
1743 case AArch64_LD1Twov4h_POST:
1744 case AArch64_LD1Twov4s_POST:
1745 case AArch64_LD1Twov8b_POST:
1746 case AArch64_LD1Twov8h_POST:
1747 case AArch64_LD1i16_POST:
1748 case AArch64_LD1i32_POST:
1749 case AArch64_LD1i64_POST:
1750 case AArch64_LD1i8_POST:
1751 case AArch64_LD2Rv16b_POST:
1752 case AArch64_LD2Rv1d_POST:
1753 case AArch64_LD2Rv2d_POST:
1754 case AArch64_LD2Rv2s_POST:
1755 case AArch64_LD2Rv4h_POST:
1756 case AArch64_LD2Rv4s_POST:
1757 case AArch64_LD2Rv8b_POST:
1758 case AArch64_LD2Rv8h_POST:
1759 case AArch64_LD2Twov16b_POST:
1760 case AArch64_LD2Twov2d_POST:
1761 case AArch64_LD2Twov2s_POST:
1762 case AArch64_LD2Twov4h_POST:
1763 case AArch64_LD2Twov4s_POST:
1764 case AArch64_LD2Twov8b_POST:
1765 case AArch64_LD2Twov8h_POST:
1766 case AArch64_LD2i16_POST:
1767 case AArch64_LD2i32_POST:
1768 case AArch64_LD2i64_POST:
1769 case AArch64_LD2i8_POST:
1770 case AArch64_LD3Rv16b_POST:
1771 case AArch64_LD3Rv1d_POST:
1772 case AArch64_LD3Rv2d_POST:
1773 case AArch64_LD3Rv2s_POST:
1774 case AArch64_LD3Rv4h_POST:
1775 case AArch64_LD3Rv4s_POST:
1776 case AArch64_LD3Rv8b_POST:
1777 case AArch64_LD3Rv8h_POST:
1778 case AArch64_LD3Threev16b_POST:
1779 case AArch64_LD3Threev2d_POST:
1780 case AArch64_LD3Threev2s_POST:
1781 case AArch64_LD3Threev4h_POST:
1782 case AArch64_LD3Threev4s_POST:
1783 case AArch64_LD3Threev8b_POST:
1784 case AArch64_LD3Threev8h_POST:
1785 case AArch64_LD3i16_POST:
1786 case AArch64_LD3i32_POST:
1787 case AArch64_LD3i64_POST:
1788 case AArch64_LD3i8_POST:
1789 case AArch64_LD4Fourv16b_POST:
1790 case AArch64_LD4Fourv2d_POST:
1791 case AArch64_LD4Fourv2s_POST:
1792 case AArch64_LD4Fourv4h_POST:
1793 case AArch64_LD4Fourv4s_POST:
1794 case AArch64_LD4Fourv8b_POST:
1795 case AArch64_LD4Fourv8h_POST:
1796 case AArch64_LD4Rv16b_POST:
1797 case AArch64_LD4Rv1d_POST:
1798 case AArch64_LD4Rv2d_POST:
1799 case AArch64_LD4Rv2s_POST:
1800 case AArch64_LD4Rv4h_POST:
1801 case AArch64_LD4Rv4s_POST:
1802 case AArch64_LD4Rv8b_POST:
1803 case AArch64_LD4Rv8h_POST:
1804 case AArch64_LD4i16_POST:
1805 case AArch64_LD4i32_POST:
1806 case AArch64_LD4i64_POST:
1807 case AArch64_LD4i8_POST:
1808 case AArch64_LDPDpost:
1809 case AArch64_LDPDpre:
1810 case AArch64_LDPQpost:
1811 case AArch64_LDPQpre:
1812 case AArch64_LDPSWpost:
1813 case AArch64_LDPSWpre:
1814 case AArch64_LDPSpost:
1815 case AArch64_LDPSpre:
1816 case AArch64_LDPWpost:
1817 case AArch64_LDPWpre:
1818 case AArch64_LDPXpost:
1819 case AArch64_LDPXpre:
1820 case AArch64_LDRBBpost:
1821 case AArch64_LDRBBpre:
1822 case AArch64_LDRBpost:
1823 case AArch64_LDRBpre:
1824 case AArch64_LDRDpost:
1825 case AArch64_LDRDpre:
1826 case AArch64_LDRHHpost:
1827 case AArch64_LDRHHpre:
1828 case AArch64_LDRHpost:
1829 case AArch64_LDRHpre:
1830 case AArch64_LDRQpost:
1831 case AArch64_LDRQpre:
1832 case AArch64_LDRSBWpost:
1833 case AArch64_LDRSBWpre:
1834 case AArch64_LDRSBXpost:
1835 case AArch64_LDRSBXpre:
1836 case AArch64_LDRSHWpost:
1837 case AArch64_LDRSHWpre:
1838 case AArch64_LDRSHXpost:
1839 case AArch64_LDRSHXpre:
1840 case AArch64_LDRSWpost:
1841 case AArch64_LDRSWpre:
1842 case AArch64_LDRSpost:
1843 case AArch64_LDRSpre:
1844 case AArch64_LDRWpost:
1845 case AArch64_LDRWpre:
1846 case AArch64_LDRXpost:
1847 case AArch64_LDRXpre:
1848 case AArch64_ST1Fourv16b_POST:
1849 case AArch64_ST1Fourv1d_POST:
1850 case AArch64_ST1Fourv2d_POST:
1851 case AArch64_ST1Fourv2s_POST:
1852 case AArch64_ST1Fourv4h_POST:
1853 case AArch64_ST1Fourv4s_POST:
1854 case AArch64_ST1Fourv8b_POST:
1855 case AArch64_ST1Fourv8h_POST:
1856 case AArch64_ST1Onev16b_POST:
1857 case AArch64_ST1Onev1d_POST:
1858 case AArch64_ST1Onev2d_POST:
1859 case AArch64_ST1Onev2s_POST:
1860 case AArch64_ST1Onev4h_POST:
1861 case AArch64_ST1Onev4s_POST:
1862 case AArch64_ST1Onev8b_POST:
1863 case AArch64_ST1Onev8h_POST:
1864 case AArch64_ST1Threev16b_POST:
1865 case AArch64_ST1Threev1d_POST:
1866 case AArch64_ST1Threev2d_POST:
1867 case AArch64_ST1Threev2s_POST:
1868 case AArch64_ST1Threev4h_POST:
1869 case AArch64_ST1Threev4s_POST:
1870 case AArch64_ST1Threev8b_POST:
1871 case AArch64_ST1Threev8h_POST:
1872 case AArch64_ST1Twov16b_POST:
1873 case AArch64_ST1Twov1d_POST:
1874 case AArch64_ST1Twov2d_POST:
1875 case AArch64_ST1Twov2s_POST:
1876 case AArch64_ST1Twov4h_POST:
1877 case AArch64_ST1Twov4s_POST:
1878 case AArch64_ST1Twov8b_POST:
1879 case AArch64_ST1Twov8h_POST:
1880 case AArch64_ST1i16_POST:
1881 case AArch64_ST1i32_POST:
1882 case AArch64_ST1i64_POST:
1883 case AArch64_ST1i8_POST:
1884 case AArch64_ST2Twov16b_POST:
1885 case AArch64_ST2Twov2d_POST:
1886 case AArch64_ST2Twov2s_POST:
1887 case AArch64_ST2Twov4h_POST:
1888 case AArch64_ST2Twov4s_POST:
1889 case AArch64_ST2Twov8b_POST:
1890 case AArch64_ST2Twov8h_POST:
1891 case AArch64_ST2i16_POST:
1892 case AArch64_ST2i32_POST:
1893 case AArch64_ST2i64_POST:
1894 case AArch64_ST2i8_POST:
1895 case AArch64_ST3Threev16b_POST:
1896 case AArch64_ST3Threev2d_POST:
1897 case AArch64_ST3Threev2s_POST:
1898 case AArch64_ST3Threev4h_POST:
1899 case AArch64_ST3Threev4s_POST:
1900 case AArch64_ST3Threev8b_POST:
1901 case AArch64_ST3Threev8h_POST:
1902 case AArch64_ST3i16_POST:
1903 case AArch64_ST3i32_POST:
1904 case AArch64_ST3i64_POST:
1905 case AArch64_ST3i8_POST:
1906 case AArch64_ST4Fourv16b_POST:
1907 case AArch64_ST4Fourv2d_POST:
1908 case AArch64_ST4Fourv2s_POST:
1909 case AArch64_ST4Fourv4h_POST:
1910 case AArch64_ST4Fourv4s_POST:
1911 case AArch64_ST4Fourv8b_POST:
1912 case AArch64_ST4Fourv8h_POST:
1913 case AArch64_ST4i16_POST:
1914 case AArch64_ST4i32_POST:
1915 case AArch64_ST4i64_POST:
1916 case AArch64_ST4i8_POST:
1917 case AArch64_STPDpost:
1918 case AArch64_STPDpre:
1919 case AArch64_STPQpost:
1920 case AArch64_STPQpre:
1921 case AArch64_STPSpost:
1922 case AArch64_STPSpre:
1923 case AArch64_STPWpost:
1924 case AArch64_STPWpre:
1925 case AArch64_STPXpost:
1926 case AArch64_STPXpre:
1927 case AArch64_STRBBpost:
1928 case AArch64_STRBBpre:
1929 case AArch64_STRBpost:
1930 case AArch64_STRBpre:
1931 case AArch64_STRDpost:
1932 case AArch64_STRDpre:
1933 case AArch64_STRHHpost:
1934 case AArch64_STRHHpre:
1935 case AArch64_STRHpost:
1936 case AArch64_STRHpre:
1937 case AArch64_STRQpost:
1938 case AArch64_STRQpre:
1939 case AArch64_STRSpost:
1940 case AArch64_STRSpre:
1941 case AArch64_STRWpost:
1942 case AArch64_STRWpre:
1943 case AArch64_STRXpost:
1944 case AArch64_STRXpre:
1945 flat_insn->detail->arm64.writeback =
true;
static unsigned AArch64_AM_getShiftValue(unsigned Imm)
getShiftValue - Extract the shift value.
static const char * AArch64_AM_getShiftExtendName(AArch64_AM_ShiftExtendType ST)
getShiftName - Get the string encoding for the shift type.
static uint64_t AArch64_AM_decodeLogicalImmediate(uint64_t val, unsigned regSize)
static uint64_t AArch64_AM_decodeAdvSIMDModImmType10(uint8_t Imm)
AArch64_AM_ShiftExtendType
AArch64_AM - AArch64 Addressing Mode Stuff.
static AArch64_AM_ShiftExtendType AArch64_AM_getShiftType(unsigned Imm)
getShiftType - Extract the shift type.
static AArch64_AM_ShiftExtendType AArch64_AM_getArithExtendType(unsigned Imm)
static unsigned AArch64_AM_getArithShiftValue(unsigned Imm)
getArithShiftValue - get the arithmetic shift value.
static float AArch64_AM_getFPImmFloat(unsigned Imm)
const A64NamedImmMapper A64PState_PStateMapper
static A64CC_CondCode getInvertedCondCode(A64CC_CondCode Code)
const A64NamedImmMapper A64ISB_ISBMapper
const A64SysRegMapper AArch64_MRSMapper
static const char * getCondCodeName(A64CC_CondCode CC)
static unsigned getWRegFromXReg(unsigned Reg)
void A64SysRegMapper_toString(const A64SysRegMapper *S, uint32_t Bits, char *result)
const A64NamedImmMapper A64DB_DBarrierMapper
const A64SysRegMapper AArch64_MSRMapper
const A64NamedImmMapper A64PRFM_PRFMMapper
const char * A64NamedImmMapper_toString(const A64NamedImmMapper *N, uint32_t Value, bool *Valid)
void AArch64_printInst(MCInst *MI, SStream *O, void *)
void AArch64_post_printer(csh handle, cs_insn *pub_insn, char *insn_asm, MCInst *mci)
uint8_t * AArch64_get_op_access(cs_struct *h, unsigned int id)
arm64_reg AArch64_map_insn(const char *name)
void arm64_op_addVectorElementSizeSpecifier(MCInst *MI, int sp)
arm64_reg AArch64_map_vregister(unsigned int r)
double MCOperand_getFPImm(const MCOperand *op)
unsigned MCInst_getOpcode(const MCInst *inst)
MCOperand * MCInst_getOperand(MCInst *inst, unsigned i)
bool MCOperand_isReg(const MCOperand *op)
void MCInst_setOpcodePub(MCInst *inst, unsigned Op)
int64_t MCOperand_getImm(MCOperand *op)
unsigned MCOperand_getReg(const MCOperand *op)
getReg - Returns the register number.
bool MCOperand_isFPImm(const MCOperand *op)
bool MCOperand_isImm(const MCOperand *op)
unsigned MCRegisterInfo_getMatchingSuperReg(const MCRegisterInfo *RI, unsigned Reg, unsigned SubIdx, const MCRegisterClass *RC)
const MCRegisterClass * MCRegisterInfo_getRegClass(const MCRegisterInfo *RI, unsigned i)
unsigned MCRegisterInfo_getSubReg(const MCRegisterInfo *RI, unsigned Reg, unsigned Idx)
void printUInt32Bang(SStream *O, uint32_t val)
void printUInt64Bang(SStream *O, uint64_t val)
void SStream_concat(SStream *ss, const char *fmt,...)
void printInt32Bang(SStream *O, int32_t val)
void printInt32BangDec(SStream *O, int32_t val)
void SStream_concat0(SStream *ss, const char *s)
void printInt64Bang(SStream *O, int64_t val)
void printInt32(SStream *O, int32_t val)
static RZ_NULLABLE RzILOpBitVector * shift(RzILOpBitVector *val, RZ_NULLABLE RzILOpBool **carry_out, arm_shifter type, RZ_OWN RzILOpBitVector *dist)
static mcore_handle handle
RzBinInfo * info(RzBinFile *bf)
arm64_vess
Vector element size specifier.
@ ARM64_OP_FP
= CS_OP_FP (Floating-Point operand).
@ ARM64_OP_PSTATE
PState operand.
@ ARM64_OP_BARRIER
Memory barrier operand (ISB/DMB/DSB instructions).
@ ARM64_OP_REG
= CS_OP_REG (Register operand).
@ ARM64_OP_PREFETCH
Prefetch operand (PRFM).
@ ARM64_OP_MEM
= CS_OP_MEM (Memory operand).
@ ARM64_OP_SYS
SYS operand for IC/DC/AT/TLBI instructions.
@ ARM64_OP_REG_MRS
MRS register operand.
@ ARM64_OP_CIMM
C-Immediate.
@ ARM64_OP_IMM
= CS_OP_IMM (Immediate operand).
@ ARM64_OP_REG_MSR
MSR register operand.
arm64_vas
Vector arrangement specifier (for FloatingPoint/Advanced SIMD insn)
arm64_shifter
ARM64 shift type.
arm64_extender
ARM64 extender type.
@ ARM64_TLBI_VMALLS12E1IS
arm64_cc
ARM64 condition code.
@ CS_OPT_ON
Turn ON an option (CS_OPT_DETAIL, CS_OPT_SKIPDATA).
static static fork const void static count static fd const char static mode const char static pathname const char static path const char static dev const char static group static getpid static getuid void void static data static pause access
static const char struct stat static buf struct stat static buf static vhangup int status
static void struct sockaddr socklen_t static fromlen static backlog static fork char char char static envp int struct rusage static rusage struct utsname static buf struct sembuf unsigned
cs_opt_value imm_unsigned
int cs_snprintf(char *buffer, size_t size, const char *fmt,...)