13 #ifdef CAPSTONE_HAS_ARM
18 #include <capstone/platform.h>
22 #include "../../MCFixedLenDisassembler.h"
23 #include "../../MCInst.h"
24 #include "../../MCInstrDesc.h"
25 #include "../../MCRegisterInfo.h"
26 #include "../../LEB128.h"
27 #include "../../MCDisassembler.h"
28 #include "../../cs_priv.h"
29 #include "../../utils.h"
36 #define GET_SUBTARGETINFO_ENUM
39 #define GET_INSTRINFO_MC_DESC
42 #define GET_INSTRINFO_ENUM
61 return (it->
size > 0);
65 static bool ITStatus_instrLastInITBlock(
ARM_ITStatus *it)
67 return (it->
size == 1);
76 if (ITStatus_instrInITBlock(it))
92 static void ITStatus_setITState(
ARM_ITStatus *it,
char Firstcond,
char Mask)
95 unsigned CondBit0 = Firstcond & 1;
97 unsigned char CCBits = (
unsigned char)Firstcond & 0xf;
102 bool T = ((Mask >>
Pos) & 1) == (
int)CondBit0;
104 ITStatus_push_back(it, CCBits);
106 ITStatus_push_back(it, CCBits ^ 1);
108 ITStatus_push_back(it, CCBits);
133 uint64_t Address,
const void *Decoder);
135 unsigned RegNo,
uint64_t Address,
const void *Decoder);
137 unsigned RegNo,
uint64_t Address,
const void *Decoder);
139 uint64_t Address,
const void *Decoder);
141 uint64_t Address,
const void *Decoder);
143 uint64_t Address,
const void *Decoder);
145 uint64_t Address,
const void *Decoder);
147 uint64_t Address,
const void *Decoder);
149 uint64_t Address,
const void *Decoder);
151 uint64_t Address,
const void *Decoder);
153 unsigned RegNo,
uint64_t Address,
const void *Decoder);
155 uint64_t Address,
const void *Decoder);
157 uint64_t Address,
const void *Decoder);
159 unsigned RegNo,
uint64_t Address,
const void *Decoder);
161 uint64_t Address,
const void *Decoder);
163 uint64_t Address,
const void *Decoder);
165 uint64_t Address,
const void *Decoder);
167 uint64_t Address,
const void *Decoder);
169 uint64_t Address,
const void *Decoder);
171 uint64_t Address,
const void *Decoder);
173 uint64_t Address,
const void *Decoder);
175 unsigned Insn,
uint64_t Address,
const void *Decoder);
177 uint64_t Address,
const void *Decoder);
179 uint64_t Address,
const void *Decoder);
181 uint64_t Address,
const void *Decoder);
183 uint64_t Address,
const void *Decoder);
185 unsigned Insn,
uint64_t Adddress,
const void *Decoder);
187 uint64_t Address,
const void *Decoder);
189 uint64_t Address,
const void *Decoder);
191 uint64_t Address,
const void *Decoder);
193 uint64_t Address,
const void *Decoder);
195 uint64_t Address,
const void *Decoder);
197 uint64_t Address,
const void *Decoder);
199 uint64_t Address,
const void *Decoder);
201 uint64_t Address,
const void *Decoder);
203 uint64_t Address,
const void *Decoder);
205 uint64_t Address,
const void *Decoder);
207 uint64_t Address,
const void *Decoder);
209 uint64_t Address,
const void *Decoder);
211 uint64_t Address,
const void *Decoder);
213 uint64_t Address,
const void *Decoder);
215 uint64_t Address,
const void *Decoder);
217 uint64_t Address,
const void *Decoder);
219 uint64_t Address,
const void *Decoder);
221 uint64_t Address,
const void *Decoder);
223 uint64_t Address,
const void *Decoder);
225 uint64_t Address,
const void *Decoder);
227 uint64_t Address,
const void *Decoder);
229 uint64_t Address,
const void *Decoder);
231 uint64_t Address,
const void *Decoder);
233 uint64_t Address,
const void *Decoder);
235 uint64_t Address,
const void *Decoder);
237 uint64_t Address,
const void *Decoder);
239 uint64_t Address,
const void *Decoder);
241 uint64_t Address,
const void *Decoder);
243 uint64_t Address,
const void *Decoder);
245 uint64_t Address,
const void *Decoder);
247 uint64_t Address,
const void *Decoder);
249 uint64_t Address,
const void *Decoder);
251 uint64_t Address,
const void *Decoder);
253 uint64_t Address,
const void *Decoder);
255 uint64_t Address,
const void *Decoder);
257 uint64_t Address,
const void *Decoder);
259 uint64_t Address,
const void *Decoder);
261 uint64_t Address,
const void *Decoder);
263 uint64_t Address,
const void *Decoder);
265 uint64_t Address,
const void *Decoder);
267 uint64_t Address,
const void *Decoder);
269 uint64_t Address,
const void *Decoder);
271 uint64_t Address,
const void *Decoder);
273 uint64_t Address,
const void *Decoder);
275 uint64_t Address,
const void *Decoder);
277 uint64_t Address,
const void *Decoder);
279 uint64_t Address,
const void *Decoder);
281 uint64_t Address,
const void *Decoder);
283 uint64_t Address,
const void *Decoder);
285 uint64_t Address,
const void *Decoder);
287 uint64_t Address,
const void *Decoder);
289 uint64_t Address,
const void *Decoder);
291 uint64_t Address,
const void *Decoder);
293 uint64_t Address,
const void *Decoder);
295 uint64_t Address,
const void *Decoder);
297 uint64_t Address,
const void *Decoder);
299 uint64_t Address,
const void *Decoder);
301 uint64_t Address,
const void *Decoder);
303 uint64_t Address,
const void *Decoder);
305 uint64_t Address,
const void *Decoder);
307 uint64_t Address,
const void *Decoder);
309 uint64_t Address,
const void *Decoder);
311 uint64_t Address,
const void *Decoder);
313 uint64_t Address,
const void* Decoder);
315 uint64_t Address,
const void* Decoder);
317 uint64_t Address,
const void* Decoder);
319 uint64_t Address,
const void* Decoder);
321 uint64_t Address,
const void *Decoder);
323 uint64_t Address,
const void *Decoder);
325 uint64_t Address,
const void *Decoder);
327 uint64_t Address,
const void *Decoder);
329 uint64_t Address,
const void *Decoder);
331 uint64_t Address,
const void *Decoder);
333 uint64_t Address,
const void *Decoder);
335 uint64_t Address,
const void *Decoder);
337 uint64_t Address,
const void *Decoder);
339 uint64_t Address,
const void *Decoder);
341 uint64_t Address,
const void *Decoder);
343 uint64_t Address,
const void *Decoder);
345 uint64_t Address,
const void *Decoder);
347 uint64_t Address,
const void *Decoder);
349 uint64_t Address,
const void *Decoder);
351 uint64_t Address,
const void *Decoder);
353 uint64_t Address,
const void *Decoder);
355 uint64_t Address,
const void *Decoder);
357 uint64_t Address,
const void *Decoder);
359 uint64_t Address,
const void *Decoder);
361 uint64_t Address,
const void *Decoder);
363 uint64_t Address,
const void *Decoder);
366 uint64_t Address,
const void *Decoder);
368 uint64_t Address,
const void *Decoder);
376 Bits &= (~ARM_FeatureVFPOnlySP);
382 Bits &= ~ARM_HasV8Ops;
386 Bits &= (~ARM_FeatureMClass);
401 Bits &= ~ARM_ModeThumb;
402 Bits &= ~ARM_FeatureThumb2;
411 uint64_t Address,
const void *Decoder)
425 #define GET_REGINFO_MC_DESC
440 ARMMCRegisterClasses, 100,
441 0, 0, ARMRegDiffLists, 0,
442 ARMSubRegIdxLists, 57,
480 MI->
flat_insn->detail->arm.operands[
i].vector_index = -1;
481 MI->
flat_insn->detail->arm.operands[
i].neon_lane = -1;
486 insn = (
code[3] << 0) |
497 result = decodeInstruction_4(DecoderTableARM32, MI, insn, Address,
NULL, ud->
mode);
499 result = checkDecodedInstruction(MI, insn, result);
508 result = decodeInstruction_4(DecoderTableVFP32, MI, insn, Address,
NULL, ud->
mode);
515 result = decodeInstruction_4(DecoderTableVFPV832, MI, insn, Address,
NULL, ud->
mode);
522 result = decodeInstruction_4(DecoderTableNEONData32, MI, insn, Address,
NULL, ud->
mode);
527 if (!DecodePredicateOperand(MI, 0xE, Address,
NULL))
533 result = decodeInstruction_4(DecoderTableNEONLoadStore32, MI, insn, Address,
NULL, ud->
mode);
538 if (!DecodePredicateOperand(MI, 0xE, Address,
NULL))
544 result = decodeInstruction_4(DecoderTableNEONDup32, MI, insn, Address,
NULL, ud->
mode);
549 if (!DecodePredicateOperand(MI, 0xE, Address,
NULL))
555 result = decodeInstruction_4(DecoderTablev8NEON32, MI, insn, Address,
NULL, ud->
mode);
562 result = decodeInstruction_4(DecoderTablev8Crypto32, MI, insn, Address,
NULL, ud->
mode);
577 static void AddThumb1SBit(
MCInst *MI,
bool InITBlock)
583 for (
i = 0;
i < NumOps; ++
i) {
604 unsigned short NumOps;
623 if (ITStatus_instrInITBlock(&(ud->
ITBlock)))
635 if (ITStatus_instrInITBlock(&(ud->
ITBlock)) && !ITStatus_instrLastInITBlock(&(ud->
ITBlock)))
644 CC = ITStatus_getITCC(&(ud->
ITBlock));
647 if (ITStatus_instrInITBlock(&(ud->
ITBlock)))
648 ITStatus_advanceITState(&(ud->
ITBlock));
653 for (
i = 0;
i < NumOps; ++
i) {
682 unsigned short NumOps;
686 CC = ITStatus_getITCC(&(ud->
ITBlock));
687 if (ITStatus_instrInITBlock(&(ud->
ITBlock)))
688 ITStatus_advanceITState(&(ud->
ITBlock));
693 for (
i = 0;
i < NumOps; ++
i) {
711 unsigned Firstcond, Mask;
712 uint32_t NEONLdStInsn, insn32, NEONDataInsn, NEONCryptoInsn, NEONv8Insn;
723 MI->
flat_insn->detail->arm.operands[
i].vector_index = -1;
724 MI->
flat_insn->detail->arm.operands[
i].neon_lane = -1;
733 result = decodeInstruction_2(DecoderTableThumb16, MI, insn16, Address,
NULL, ud->
mode);
736 Check(&result, AddThumbPredicate(ud, MI));
741 result = decodeInstruction_2(DecoderTableThumbSBit16, MI, insn16, Address,
NULL, ud->
mode);
744 InITBlock = ITStatus_instrInITBlock(&(ud->
ITBlock));
745 Check(&result, AddThumbPredicate(ud, MI));
746 AddThumb1SBit(MI, InITBlock);
751 result = decodeInstruction_2(DecoderTableThumb216, MI, insn16, Address,
NULL, ud->
mode);
759 Check(&result, AddThumbPredicate(ud, MI));
768 ITStatus_setITState(&(ud->
ITBlock), (
char)Firstcond, (
char)Mask);
780 insn32 = (
code[3] << 0) |
785 insn32 = (
code[3] << 8) |
791 result = decodeInstruction_4(DecoderTableThumb32, MI, insn32, Address,
NULL, ud->
mode);
794 InITBlock = ITStatus_instrInITBlock(&(ud->
ITBlock));
795 Check(&result, AddThumbPredicate(ud, MI));
796 AddThumb1SBit(MI, InITBlock);
801 result = decodeInstruction_4(DecoderTableThumb232, MI, insn32, Address,
NULL, ud->
mode);
804 Check(&result, AddThumbPredicate(ud, MI));
808 if (fieldFromInstruction_4(insn32, 28, 4) == 0xE) {
810 result = decodeInstruction_4(DecoderTableVFP32, MI, insn32, Address,
NULL, ud->
mode);
813 UpdateThumbVFPPredicate(ud, MI);
819 result = decodeInstruction_4(DecoderTableVFPV832, MI, insn32, Address,
NULL, ud->
mode);
825 if (fieldFromInstruction_4(insn32, 28, 4) == 0xE) {
827 result = decodeInstruction_4(DecoderTableNEONDup32, MI, insn32, Address,
NULL, ud->
mode);
830 Check(&result, AddThumbPredicate(ud, MI));
835 if (fieldFromInstruction_4(insn32, 24, 8) == 0xF9) {
837 NEONLdStInsn = insn32;
838 NEONLdStInsn &= 0xF0FFFFFF;
839 NEONLdStInsn |= 0x04000000;
840 result = decodeInstruction_4(DecoderTableNEONLoadStore32, MI, NEONLdStInsn, Address,
NULL, ud->
mode);
843 Check(&result, AddThumbPredicate(ud, MI));
848 if (fieldFromInstruction_4(insn32, 24, 4) == 0xF) {
850 NEONDataInsn = insn32;
851 NEONDataInsn &= 0xF0FFFFFF;
852 NEONDataInsn |= (NEONDataInsn & 0x10000000) >> 4;
853 NEONDataInsn |= 0x12000000;
854 result = decodeInstruction_4(DecoderTableNEONData32, MI, NEONDataInsn, Address,
NULL, ud->
mode);
857 Check(&result, AddThumbPredicate(ud, MI));
863 NEONCryptoInsn = insn32;
864 NEONCryptoInsn &= 0xF0FFFFFF;
865 NEONCryptoInsn |= (NEONCryptoInsn & 0x10000000) >> 4;
866 NEONCryptoInsn |= 0x12000000;
867 result = decodeInstruction_4(DecoderTablev8Crypto32, MI, NEONCryptoInsn,
876 NEONv8Insn &= 0xF3FFFFFF;
877 result = decodeInstruction_4(DecoderTablev8NEON32, MI, NEONv8Insn, Address,
NULL, ud->
mode);
906 static const uint16_t GPRDecoderTable[] = {
907 ARM_R0, ARM_R1, ARM_R2, ARM_R3,
908 ARM_R4, ARM_R5, ARM_R6, ARM_R7,
909 ARM_R8, ARM_R9, ARM_R10, ARM_R11,
914 uint64_t Address,
const void *Decoder)
926 uint64_t Address,
const void *Decoder)
933 Check(&
S, DecodeGPRRegisterClass(Inst, RegNo, Address, Decoder));
939 uint64_t Address,
const void *Decoder)
948 Check(&
S, DecodeGPRRegisterClass(Inst, RegNo, Address, Decoder));
953 uint64_t Address,
const void *Decoder)
957 return DecodeGPRRegisterClass(Inst, RegNo, Address, Decoder);
960 static const uint16_t GPRPairDecoderTable[] = {
961 ARM_R0_R1, ARM_R2_R3, ARM_R4_R5, ARM_R6_R7,
962 ARM_R8_R9, ARM_R10_R11, ARM_R12_SP
966 uint64_t Address,
const void *Decoder)
968 unsigned RegisterPair;
974 if ((RegNo & 1) || RegNo == 0xe)
977 RegisterPair = GPRPairDecoderTable[RegNo/2];
983 uint64_t Address,
const void *Decoder)
1014 uint64_t Address,
const void *Decoder)
1017 if (RegNo == 13 || RegNo == 15)
1019 Check(&
S, DecodeGPRRegisterClass(Inst, RegNo, Address, Decoder));
1023 static const uint16_t SPRDecoderTable[] = {
1024 ARM_S0, ARM_S1, ARM_S2, ARM_S3,
1025 ARM_S4, ARM_S5, ARM_S6, ARM_S7,
1026 ARM_S8, ARM_S9, ARM_S10, ARM_S11,
1027 ARM_S12, ARM_S13, ARM_S14, ARM_S15,
1028 ARM_S16, ARM_S17, ARM_S18, ARM_S19,
1029 ARM_S20, ARM_S21, ARM_S22, ARM_S23,
1030 ARM_S24, ARM_S25, ARM_S26, ARM_S27,
1031 ARM_S28, ARM_S29, ARM_S30, ARM_S31
1035 uint64_t Address,
const void *Decoder)
1046 static const uint16_t DPRDecoderTable[] = {
1047 ARM_D0, ARM_D1, ARM_D2, ARM_D3,
1048 ARM_D4, ARM_D5, ARM_D6, ARM_D7,
1049 ARM_D8, ARM_D9, ARM_D10, ARM_D11,
1050 ARM_D12, ARM_D13, ARM_D14, ARM_D15,
1051 ARM_D16, ARM_D17, ARM_D18, ARM_D19,
1052 ARM_D20, ARM_D21, ARM_D22, ARM_D23,
1053 ARM_D24, ARM_D25, ARM_D26, ARM_D27,
1054 ARM_D28, ARM_D29, ARM_D30, ARM_D31
1058 uint64_t Address,
const void *Decoder)
1076 uint64_t Address,
const void *Decoder)
1080 return DecodeDPRRegisterClass(Inst, RegNo, Address, Decoder);
1084 DecodeDPR_VFP2RegisterClass(
MCInst *Inst,
unsigned RegNo,
1085 uint64_t Address,
const void *Decoder)
1089 return DecodeDPRRegisterClass(Inst, RegNo, Address, Decoder);
1092 static const uint16_t QPRDecoderTable[] = {
1093 ARM_Q0, ARM_Q1, ARM_Q2, ARM_Q3,
1094 ARM_Q4, ARM_Q5, ARM_Q6, ARM_Q7,
1095 ARM_Q8, ARM_Q9, ARM_Q10, ARM_Q11,
1096 ARM_Q12, ARM_Q13, ARM_Q14, ARM_Q15
1100 uint64_t Address,
const void *Decoder)
1103 if (RegNo > 31 || (RegNo & 1) != 0)
1112 static const uint16_t DPairDecoderTable[] = {
1113 ARM_Q0, ARM_D1_D2, ARM_Q1, ARM_D3_D4, ARM_Q2, ARM_D5_D6,
1114 ARM_Q3, ARM_D7_D8, ARM_Q4, ARM_D9_D10, ARM_Q5, ARM_D11_D12,
1115 ARM_Q6, ARM_D13_D14, ARM_Q7, ARM_D15_D16, ARM_Q8, ARM_D17_D18,
1116 ARM_Q9, ARM_D19_D20, ARM_Q10, ARM_D21_D22, ARM_Q11, ARM_D23_D24,
1117 ARM_Q12, ARM_D25_D26, ARM_Q13, ARM_D27_D28, ARM_Q14, ARM_D29_D30,
1122 uint64_t Address,
const void *Decoder)
1128 Register = DPairDecoderTable[RegNo];
1133 static const uint16_t DPairSpacedDecoderTable[] = {
1134 ARM_D0_D2, ARM_D1_D3, ARM_D2_D4, ARM_D3_D5,
1135 ARM_D4_D6, ARM_D5_D7, ARM_D6_D8, ARM_D7_D9,
1136 ARM_D8_D10, ARM_D9_D11, ARM_D10_D12, ARM_D11_D13,
1137 ARM_D12_D14, ARM_D13_D15, ARM_D14_D16, ARM_D15_D17,
1138 ARM_D16_D18, ARM_D17_D19, ARM_D18_D20, ARM_D19_D21,
1139 ARM_D20_D22, ARM_D21_D23, ARM_D22_D24, ARM_D23_D25,
1140 ARM_D24_D26, ARM_D25_D27, ARM_D26_D28, ARM_D27_D29,
1141 ARM_D28_D30, ARM_D29_D31
1145 unsigned RegNo,
uint64_t Address,
const void *Decoder)
1151 Register = DPairSpacedDecoderTable[RegNo];
1157 uint64_t Address,
const void *Decoder)
1167 uint64_t Address,
const void *Decoder)
1172 unsigned Rm = fieldFromInstruction_4(Val, 0, 4);
1173 unsigned type = fieldFromInstruction_4(Val, 5, 2);
1174 unsigned imm = fieldFromInstruction_4(Val, 7, 5);
1177 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder)))
1199 Op = Shift | (
imm << 3);
1206 uint64_t Address,
const void *Decoder)
1211 unsigned Rm = fieldFromInstruction_4(Val, 0, 4);
1212 unsigned type = fieldFromInstruction_4(Val, 5, 2);
1213 unsigned Rs = fieldFromInstruction_4(Val, 8, 4);
1216 if (!Check(&
S, DecodeGPRnopcRegisterClass(Inst, Rm, Address, Decoder)))
1218 if (!Check(&
S, DecodeGPRnopcRegisterClass(Inst, Rs, Address, Decoder)))
1243 uint64_t Address,
const void *Decoder)
1249 bool NeedDisjointWriteback =
false;
1250 unsigned WritebackReg = 0;
1260 case ARM_t2LDMIA_UPD:
1261 case ARM_t2LDMDB_UPD:
1262 case ARM_t2STMIA_UPD:
1263 case ARM_t2STMDB_UPD:
1264 NeedDisjointWriteback =
true;
1271 for (
i = 0;
i < 16; ++
i) {
1272 if (Val & (1 <<
i)) {
1273 if (!Check(&
S, DecodeGPRRegisterClass(Inst,
i, Address, Decoder)))
1281 if (opcode == ARM_t2LDMIA_UPD && WritebackReg ==
ARM_SP) {
1282 if (Val & (1 << 13) || ((Val & (1 << 15)) && (Val & (1 << 14)))) {
1293 uint64_t Address,
const void *Decoder)
1297 unsigned Vd = fieldFromInstruction_4(Val, 8, 5);
1298 unsigned regs = fieldFromInstruction_4(Val, 0, 8);
1301 if (
regs == 0 || (Vd +
regs) > 32) {
1307 if (!Check(&
S, DecodeSPRRegisterClass(Inst, Vd, Address, Decoder)))
1309 for (
i = 0;
i < (
regs - 1); ++
i) {
1310 if (!Check(&
S, DecodeSPRRegisterClass(Inst, ++Vd, Address, Decoder)))
1318 uint64_t Address,
const void *Decoder)
1322 unsigned Vd = fieldFromInstruction_4(Val, 8, 5);
1323 unsigned regs = fieldFromInstruction_4(Val, 1, 7);
1333 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Vd, Address, Decoder)))
1336 for (
i = 0;
i < (
regs - 1); ++
i) {
1337 if (!Check(&
S, DecodeDPRRegisterClass(Inst, ++Vd, Address, Decoder)))
1345 uint64_t Address,
const void *Decoder)
1352 unsigned msb = fieldFromInstruction_4(Val, 5, 5);
1353 unsigned lsb = fieldFromInstruction_4(Val, 0, 5);
1365 msb_mask = 0xFFFFFFFF;
1366 if (msb != 31) msb_mask = (1U << (msb+1)) - 1;
1367 lsb_mask = (1U << lsb) - 1;
1374 uint64_t Address,
const void *Decoder)
1378 unsigned pred = fieldFromInstruction_4(Insn, 28, 4);
1379 unsigned CRd = fieldFromInstruction_4(Insn, 12, 4);
1380 unsigned coproc = fieldFromInstruction_4(Insn, 8, 4);
1381 unsigned imm = fieldFromInstruction_4(Insn, 0, 8);
1382 unsigned Rn = fieldFromInstruction_4(Insn, 16, 4);
1383 unsigned U = fieldFromInstruction_4(Insn, 23, 1);
1386 case ARM_LDC_OFFSET:
1389 case ARM_LDC_OPTION:
1390 case ARM_LDCL_OFFSET:
1393 case ARM_LDCL_OPTION:
1394 case ARM_STC_OFFSET:
1397 case ARM_STC_OPTION:
1398 case ARM_STCL_OFFSET:
1401 case ARM_STCL_OPTION:
1402 case ARM_t2LDC_OFFSET:
1404 case ARM_t2LDC_POST:
1405 case ARM_t2LDC_OPTION:
1406 case ARM_t2LDCL_OFFSET:
1407 case ARM_t2LDCL_PRE:
1408 case ARM_t2LDCL_POST:
1409 case ARM_t2LDCL_OPTION:
1410 case ARM_t2STC_OFFSET:
1412 case ARM_t2STC_POST:
1413 case ARM_t2STC_OPTION:
1414 case ARM_t2STCL_OFFSET:
1415 case ARM_t2STCL_PRE:
1416 case ARM_t2STCL_POST:
1417 case ARM_t2STCL_OPTION:
1418 if (coproc == 0xA || coproc == 0xB)
1427 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
1431 case ARM_t2LDC2_OFFSET:
1432 case ARM_t2LDC2L_OFFSET:
1433 case ARM_t2LDC2_PRE:
1434 case ARM_t2LDC2L_PRE:
1435 case ARM_t2STC2_OFFSET:
1436 case ARM_t2STC2L_OFFSET:
1437 case ARM_t2STC2_PRE:
1438 case ARM_t2STC2L_PRE:
1439 case ARM_LDC2_OFFSET:
1440 case ARM_LDC2L_OFFSET:
1443 case ARM_STC2_OFFSET:
1444 case ARM_STC2L_OFFSET:
1447 case ARM_t2LDC_OFFSET:
1448 case ARM_t2LDCL_OFFSET:
1450 case ARM_t2LDCL_PRE:
1451 case ARM_t2STC_OFFSET:
1452 case ARM_t2STCL_OFFSET:
1454 case ARM_t2STCL_PRE:
1455 case ARM_LDC_OFFSET:
1456 case ARM_LDCL_OFFSET:
1459 case ARM_STC_OFFSET:
1460 case ARM_STCL_OFFSET:
1466 case ARM_t2LDC2_POST:
1467 case ARM_t2LDC2L_POST:
1468 case ARM_t2STC2_POST:
1469 case ARM_t2STC2L_POST:
1471 case ARM_LDC2L_POST:
1473 case ARM_STC2L_POST:
1474 case ARM_t2LDC_POST:
1475 case ARM_t2LDCL_POST:
1476 case ARM_t2STC_POST:
1477 case ARM_t2STCL_POST:
1492 case ARM_LDC_OFFSET:
1495 case ARM_LDC_OPTION:
1496 case ARM_LDCL_OFFSET:
1499 case ARM_LDCL_OPTION:
1500 case ARM_STC_OFFSET:
1503 case ARM_STC_OPTION:
1504 case ARM_STCL_OFFSET:
1507 case ARM_STCL_OPTION:
1508 if (!Check(&
S, DecodePredicateOperand(Inst, pred, Address, Decoder)))
1519 uint64_t Address,
const void *Decoder)
1525 unsigned Rn = fieldFromInstruction_4(Insn, 16, 4);
1526 unsigned Rt = fieldFromInstruction_4(Insn, 12, 4);
1527 unsigned Rm = fieldFromInstruction_4(Insn, 0, 4);
1528 unsigned imm = fieldFromInstruction_4(Insn, 0, 12);
1529 unsigned pred = fieldFromInstruction_4(Insn, 28, 4);
1530 unsigned reg = fieldFromInstruction_4(Insn, 25, 1);
1531 unsigned P = fieldFromInstruction_4(Insn, 24, 1);
1532 unsigned W = fieldFromInstruction_4(Insn, 21, 1);
1533 unsigned idx_mode = 0, amt,
tmp;
1537 case ARM_STR_POST_IMM:
1538 case ARM_STR_POST_REG:
1539 case ARM_STRB_POST_IMM:
1540 case ARM_STRB_POST_REG:
1541 case ARM_STRT_POST_REG:
1542 case ARM_STRT_POST_IMM:
1543 case ARM_STRBT_POST_REG:
1544 case ARM_STRBT_POST_IMM:
1545 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
1552 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rt, Address, Decoder)))
1557 case ARM_LDR_POST_IMM:
1558 case ARM_LDR_POST_REG:
1559 case ARM_LDRB_POST_IMM:
1560 case ARM_LDRB_POST_REG:
1561 case ARM_LDRBT_POST_REG:
1562 case ARM_LDRBT_POST_IMM:
1563 case ARM_LDRT_POST_REG:
1564 case ARM_LDRT_POST_IMM:
1565 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
1572 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
1576 if (!fieldFromInstruction_4(Insn, 23, 1))
1585 if (
writeback && (Rn == 15 || Rn == Rt))
1589 if (!Check(&
S, DecodeGPRnopcRegisterClass(Inst, Rm, Address, Decoder)))
1592 switch( fieldFromInstruction_4(Insn, 5, 2)) {
1608 amt = fieldFromInstruction_4(Insn, 7, 5);
1620 if (!Check(&
S, DecodePredicateOperand(Inst, pred, Address, Decoder)))
1627 uint64_t Address,
const void *Decoder)
1632 unsigned Rn = fieldFromInstruction_4(Val, 13, 4);
1633 unsigned Rm = fieldFromInstruction_4(Val, 0, 4);
1634 unsigned type = fieldFromInstruction_4(Val, 5, 2);
1635 unsigned imm = fieldFromInstruction_4(Val, 7, 5);
1636 unsigned U = fieldFromInstruction_4(Val, 12, 1);
1657 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
1659 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder)))
1671 uint64_t Address,
const void *Decoder)
1675 unsigned Rt = fieldFromInstruction_4(Insn, 12, 4);
1676 unsigned Rn = fieldFromInstruction_4(Insn, 16, 4);
1677 unsigned Rm = fieldFromInstruction_4(Insn, 0, 4);
1678 unsigned type = fieldFromInstruction_4(Insn, 22, 1);
1679 unsigned imm = fieldFromInstruction_4(Insn, 8, 4);
1680 unsigned U = ((~fieldFromInstruction_4(Insn, 23, 1)) & 1) << 8;
1681 unsigned pred = fieldFromInstruction_4(Insn, 28, 4);
1682 unsigned W = fieldFromInstruction_4(Insn, 21, 1);
1683 unsigned P = fieldFromInstruction_4(Insn, 24, 1);
1684 unsigned Rt2 = Rt + 1;
1705 if (
P == 0 &&
W == 1)
1708 if (
writeback && (Rn == 15 || Rn == Rt || Rn == Rt2))
1710 if (
type && Rm == 15)
1714 if (!
type && fieldFromInstruction_4(Insn, 8, 4))
1722 if (
writeback && (Rn == 15 || Rn == Rt))
1724 if (!
type && Rm == 15)
1730 if (
type && Rn == 15){
1735 if (
P == 0 &&
W == 1)
1737 if (!
type && (Rt2 == 15 || Rm == 15 || Rm == Rt || Rm == Rt2))
1741 if (
writeback && (Rn == Rt || Rn == Rt2))
1747 if (
type && Rn == 15){
1754 if (!
type && Rm == 15)
1761 case ARM_LDRSH_POST:
1764 case ARM_LDRSB_POST:
1765 if (
type && Rn == 15){
1772 if (!
type && (Rt == 15 || Rm == 15))
1796 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
1804 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rt, Address, Decoder)))
1813 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rt+1, Address, Decoder)))
1831 case ARM_LDRSH_POST:
1834 case ARM_LDRSB_POST:
1837 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
1845 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
1852 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder)))
1857 if (!Check(&
S, DecodePredicateOperand(Inst, pred, Address, Decoder)))
1864 uint64_t Address,
const void *Decoder)
1868 unsigned Rn = fieldFromInstruction_4(Insn, 16, 4);
1869 unsigned mode = fieldFromInstruction_4(Insn, 23, 2);
1887 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
1894 uint64_t Address,
const void *Decoder)
1898 unsigned Rd = fieldFromInstruction_4(Insn, 12, 4);
1899 unsigned Rm = fieldFromInstruction_4(Insn, 0, 4);
1900 unsigned Rn = fieldFromInstruction_4(Insn, 16, 4);
1901 unsigned pred = fieldFromInstruction_4(Insn, 28, 4);
1904 return DecodeCPSInstruction(Inst, Insn, Address, Decoder);
1906 if (!Check(&
S, DecodeGPRnopcRegisterClass(Inst, Rd, Address, Decoder)))
1908 if (!Check(&
S, DecodeGPRnopcRegisterClass(Inst, Rm, Address, Decoder)))
1910 if (!Check(&
S, DecodeGPRnopcRegisterClass(Inst, Rn, Address, Decoder)))
1912 if (!Check(&
S, DecodePredicateOperand(Inst, pred, Address, Decoder)))
1918 unsigned Insn,
uint64_t Address,
const void *Decoder)
1922 unsigned Rn = fieldFromInstruction_4(Insn, 16, 4);
1923 unsigned pred = fieldFromInstruction_4(Insn, 28, 4);
1924 unsigned reglist = fieldFromInstruction_4(Insn, 0, 16);
1982 if (fieldFromInstruction_4(Insn, 20, 1) == 0) {
1984 if (!(fieldFromInstruction_4(Insn, 22, 1) == 1 &&
1985 fieldFromInstruction_4(Insn, 20, 1) == 0))
1992 return DecodeRFEInstruction(Inst, Insn, Address, Decoder);
1995 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
1997 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
1999 if (!Check(&
S, DecodePredicateOperand(Inst, pred, Address, Decoder)))
2001 if (!Check(&
S, DecodeRegListOperand(Inst, reglist, Address, Decoder)))
2008 uint64_t Address,
const void *Decoder)
2010 unsigned imod = fieldFromInstruction_4(Insn, 18, 2);
2011 unsigned M = fieldFromInstruction_4(Insn, 17, 1);
2012 unsigned iflags = fieldFromInstruction_4(Insn, 6, 3);
2013 unsigned mode = fieldFromInstruction_4(Insn, 0, 5);
2019 if (fieldFromInstruction_4(Insn, 5, 1) != 0 ||
2020 fieldFromInstruction_4(Insn, 16, 1) != 0 ||
2021 fieldFromInstruction_4(Insn, 20, 8) != 0x10)
2036 }
else if (imod && !
M) {
2041 }
else if (!imod &&
M) {
2056 uint64_t Address,
const void *Decoder)
2058 unsigned imod = fieldFromInstruction_4(Insn, 9, 2);
2059 unsigned M = fieldFromInstruction_4(Insn, 8, 1);
2060 unsigned iflags = fieldFromInstruction_4(Insn, 5, 3);
2061 unsigned mode = fieldFromInstruction_4(Insn, 0, 5);
2077 }
else if (imod && !
M) {
2082 }
else if (!imod &&
M) {
2088 int imm = fieldFromInstruction_4(Insn, 0, 8);
2099 uint64_t Address,
const void *Decoder)
2103 unsigned Rd = fieldFromInstruction_4(Insn, 8, 4);
2106 imm |= (fieldFromInstruction_4(Insn, 0, 8) << 0);
2107 imm |= (fieldFromInstruction_4(Insn, 12, 3) << 8);
2108 imm |= (fieldFromInstruction_4(Insn, 16, 4) << 12);
2109 imm |= (fieldFromInstruction_4(Insn, 26, 1) << 11);
2112 if (!Check(&
S, DecoderGPRRegisterClass(Inst, Rd, Address, Decoder)))
2114 if (!Check(&
S, DecoderGPRRegisterClass(Inst, Rd, Address, Decoder)))
2123 uint64_t Address,
const void *Decoder)
2127 unsigned Rd = fieldFromInstruction_4(Insn, 12, 4);
2128 unsigned pred = fieldFromInstruction_4(Insn, 28, 4);
2131 imm |= (fieldFromInstruction_4(Insn, 0, 12) << 0);
2132 imm |= (fieldFromInstruction_4(Insn, 16, 4) << 12);
2135 if (!Check(&
S, DecodeGPRnopcRegisterClass(Inst, Rd, Address, Decoder)))
2138 if (!Check(&
S, DecodeGPRnopcRegisterClass(Inst, Rd, Address, Decoder)))
2143 if (!Check(&
S, DecodePredicateOperand(Inst, pred, Address, Decoder)))
2150 uint64_t Address,
const void *Decoder)
2154 unsigned Rd = fieldFromInstruction_4(Insn, 16, 4);
2155 unsigned Rn = fieldFromInstruction_4(Insn, 0, 4);
2156 unsigned Rm = fieldFromInstruction_4(Insn, 8, 4);
2157 unsigned Ra = fieldFromInstruction_4(Insn, 12, 4);
2158 unsigned pred = fieldFromInstruction_4(Insn, 28, 4);
2161 return DecodeCPSInstruction(Inst, Insn, Address, Decoder);
2163 if (!Check(&
S, DecodeGPRnopcRegisterClass(Inst, Rd, Address, Decoder)))
2165 if (!Check(&
S, DecodeGPRnopcRegisterClass(Inst, Rn, Address, Decoder)))
2167 if (!Check(&
S, DecodeGPRnopcRegisterClass(Inst, Rm, Address, Decoder)))
2169 if (!Check(&
S, DecodeGPRnopcRegisterClass(Inst, Ra, Address, Decoder)))
2172 if (!Check(&
S, DecodePredicateOperand(Inst, pred, Address, Decoder)))
2179 uint64_t Address,
const void *Decoder)
2183 unsigned add = fieldFromInstruction_4(Val, 12, 1);
2184 unsigned imm = fieldFromInstruction_4(Val, 0, 12);
2185 unsigned Rn = fieldFromInstruction_4(Val, 13, 4);
2187 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
2200 uint64_t Address,
const void *Decoder)
2204 unsigned Rn = fieldFromInstruction_4(Val, 9, 4);
2205 unsigned U = fieldFromInstruction_4(Val, 8, 1);
2206 unsigned imm = fieldFromInstruction_4(Val, 0, 8);
2208 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
2220 uint64_t Address,
const void *Decoder)
2222 return DecodeGPRRegisterClass(Inst, Val, Address, Decoder);
2226 uint64_t Address,
const void *Decoder)
2236 unsigned S = fieldFromInstruction_4(Insn, 26, 1);
2237 unsigned J1 = fieldFromInstruction_4(Insn, 13, 1);
2238 unsigned J2 = fieldFromInstruction_4(Insn, 11, 1);
2239 unsigned I1 = !(J1 ^
S);
2240 unsigned I2 = !(J2 ^
S);
2241 unsigned imm10 = fieldFromInstruction_4(Insn, 16, 10);
2242 unsigned imm11 = fieldFromInstruction_4(Insn, 0, 11);
2243 unsigned tmp = (
S << 23) | (
I1 << 22) | (
I2 << 21) | (imm10 << 11) | imm11;
2251 uint64_t Address,
const void *Decoder)
2255 unsigned pred = fieldFromInstruction_4(Insn, 28, 4);
2256 unsigned imm = fieldFromInstruction_4(Insn, 0, 24) << 2;
2260 imm |= fieldFromInstruction_4(Insn, 24, 1) << 1;
2266 if (!Check(&
S, DecodePredicateOperand(Inst, pred, Address, Decoder)))
2274 uint64_t Address,
const void *Decoder)
2278 unsigned Rm = fieldFromInstruction_4(Val, 0, 4);
2279 unsigned align = fieldFromInstruction_4(Val, 4, 2);
2281 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder)))
2292 uint64_t Address,
const void *Decoder)
2295 unsigned wb, Rn, Rm;
2296 unsigned Rd = fieldFromInstruction_4(Insn, 12, 4);
2297 Rd |= fieldFromInstruction_4(Insn, 22, 1) << 4;
2298 wb = fieldFromInstruction_4(Insn, 16, 4);
2299 Rn = fieldFromInstruction_4(Insn, 16, 4);
2300 Rn |= fieldFromInstruction_4(Insn, 4, 2) << 4;
2301 Rm = fieldFromInstruction_4(Insn, 0, 4);
2305 case ARM_VLD1q16:
case ARM_VLD1q32:
case ARM_VLD1q64:
case ARM_VLD1q8:
2306 case ARM_VLD1q16wb_fixed:
case ARM_VLD1q16wb_register:
2307 case ARM_VLD1q32wb_fixed:
case ARM_VLD1q32wb_register:
2308 case ARM_VLD1q64wb_fixed:
case ARM_VLD1q64wb_register:
2309 case ARM_VLD1q8wb_fixed:
case ARM_VLD1q8wb_register:
2310 case ARM_VLD2d16:
case ARM_VLD2d32:
case ARM_VLD2d8:
2311 case ARM_VLD2d16wb_fixed:
case ARM_VLD2d16wb_register:
2312 case ARM_VLD2d32wb_fixed:
case ARM_VLD2d32wb_register:
2313 case ARM_VLD2d8wb_fixed:
case ARM_VLD2d8wb_register:
2314 if (!Check(&
S, DecodeDPairRegisterClass(Inst, Rd, Address, Decoder)))
2320 case ARM_VLD2b16wb_fixed:
2321 case ARM_VLD2b16wb_register:
2322 case ARM_VLD2b32wb_fixed:
2323 case ARM_VLD2b32wb_register:
2324 case ARM_VLD2b8wb_fixed:
2325 case ARM_VLD2b8wb_register:
2326 if (!Check(&
S, DecodeDPairSpacedRegisterClass(Inst, Rd, Address, Decoder)))
2330 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder)))
2339 case ARM_VLD3d8_UPD:
2340 case ARM_VLD3d16_UPD:
2341 case ARM_VLD3d32_UPD:
2345 case ARM_VLD4d8_UPD:
2346 case ARM_VLD4d16_UPD:
2347 case ARM_VLD4d32_UPD:
2348 if (!Check(&
S, DecodeDPRRegisterClass(Inst, (Rd+1)%32, Address, Decoder)))
2354 case ARM_VLD3q8_UPD:
2355 case ARM_VLD3q16_UPD:
2356 case ARM_VLD3q32_UPD:
2360 case ARM_VLD4q8_UPD:
2361 case ARM_VLD4q16_UPD:
2362 case ARM_VLD4q32_UPD:
2363 if (!Check(&
S, DecodeDPRRegisterClass(Inst, (Rd+2)%32, Address, Decoder)))
2374 case ARM_VLD3d8_UPD:
2375 case ARM_VLD3d16_UPD:
2376 case ARM_VLD3d32_UPD:
2380 case ARM_VLD4d8_UPD:
2381 case ARM_VLD4d16_UPD:
2382 case ARM_VLD4d32_UPD:
2383 if (!Check(&
S, DecodeDPRRegisterClass(Inst, (Rd+2)%32, Address, Decoder)))
2389 case ARM_VLD3q8_UPD:
2390 case ARM_VLD3q16_UPD:
2391 case ARM_VLD3q32_UPD:
2395 case ARM_VLD4q8_UPD:
2396 case ARM_VLD4q16_UPD:
2397 case ARM_VLD4q32_UPD:
2398 if (!Check(&
S, DecodeDPRRegisterClass(Inst, (Rd+4)%32, Address, Decoder)))
2410 case ARM_VLD4d8_UPD:
2411 case ARM_VLD4d16_UPD:
2412 case ARM_VLD4d32_UPD:
2413 if (!Check(&
S, DecodeDPRRegisterClass(Inst, (Rd+3)%32, Address, Decoder)))
2419 case ARM_VLD4q8_UPD:
2420 case ARM_VLD4q16_UPD:
2421 case ARM_VLD4q32_UPD:
2422 if (!Check(&
S, DecodeDPRRegisterClass(Inst, (Rd+6)%32, Address, Decoder)))
2431 case ARM_VLD1d8wb_fixed:
2432 case ARM_VLD1d16wb_fixed:
2433 case ARM_VLD1d32wb_fixed:
2434 case ARM_VLD1d64wb_fixed:
2435 case ARM_VLD1d8wb_register:
2436 case ARM_VLD1d16wb_register:
2437 case ARM_VLD1d32wb_register:
2438 case ARM_VLD1d64wb_register:
2439 case ARM_VLD1q8wb_fixed:
2440 case ARM_VLD1q16wb_fixed:
2441 case ARM_VLD1q32wb_fixed:
2442 case ARM_VLD1q64wb_fixed:
2443 case ARM_VLD1q8wb_register:
2444 case ARM_VLD1q16wb_register:
2445 case ARM_VLD1q32wb_register:
2446 case ARM_VLD1q64wb_register:
2447 case ARM_VLD1d8Twb_fixed:
2448 case ARM_VLD1d8Twb_register:
2449 case ARM_VLD1d16Twb_fixed:
2450 case ARM_VLD1d16Twb_register:
2451 case ARM_VLD1d32Twb_fixed:
2452 case ARM_VLD1d32Twb_register:
2453 case ARM_VLD1d64Twb_fixed:
2454 case ARM_VLD1d64Twb_register:
2455 case ARM_VLD1d8Qwb_fixed:
2456 case ARM_VLD1d8Qwb_register:
2457 case ARM_VLD1d16Qwb_fixed:
2458 case ARM_VLD1d16Qwb_register:
2459 case ARM_VLD1d32Qwb_fixed:
2460 case ARM_VLD1d32Qwb_register:
2461 case ARM_VLD1d64Qwb_fixed:
2462 case ARM_VLD1d64Qwb_register:
2463 case ARM_VLD2d8wb_fixed:
2464 case ARM_VLD2d16wb_fixed:
2465 case ARM_VLD2d32wb_fixed:
2466 case ARM_VLD2q8wb_fixed:
2467 case ARM_VLD2q16wb_fixed:
2468 case ARM_VLD2q32wb_fixed:
2469 case ARM_VLD2d8wb_register:
2470 case ARM_VLD2d16wb_register:
2471 case ARM_VLD2d32wb_register:
2472 case ARM_VLD2q8wb_register:
2473 case ARM_VLD2q16wb_register:
2474 case ARM_VLD2q32wb_register:
2475 case ARM_VLD2b8wb_fixed:
2476 case ARM_VLD2b16wb_fixed:
2477 case ARM_VLD2b32wb_fixed:
2478 case ARM_VLD2b8wb_register:
2479 case ARM_VLD2b16wb_register:
2480 case ARM_VLD2b32wb_register:
2483 case ARM_VLD3d8_UPD:
2484 case ARM_VLD3d16_UPD:
2485 case ARM_VLD3d32_UPD:
2486 case ARM_VLD3q8_UPD:
2487 case ARM_VLD3q16_UPD:
2488 case ARM_VLD3q32_UPD:
2489 case ARM_VLD4d8_UPD:
2490 case ARM_VLD4d16_UPD:
2491 case ARM_VLD4d32_UPD:
2492 case ARM_VLD4q8_UPD:
2493 case ARM_VLD4q16_UPD:
2494 case ARM_VLD4q32_UPD:
2495 if (!Check(&
S, DecodeGPRRegisterClass(Inst, wb, Address, Decoder)))
2503 if (!Check(&
S, DecodeAddrMode6Operand(Inst, Rn, Address, Decoder)))
2520 case ARM_VLD1d8wb_fixed:
2521 case ARM_VLD1d16wb_fixed:
2522 case ARM_VLD1d32wb_fixed:
2523 case ARM_VLD1d64wb_fixed:
2524 case ARM_VLD1d8Twb_fixed:
2525 case ARM_VLD1d16Twb_fixed:
2526 case ARM_VLD1d32Twb_fixed:
2527 case ARM_VLD1d64Twb_fixed:
2528 case ARM_VLD1d8Qwb_fixed:
2529 case ARM_VLD1d16Qwb_fixed:
2530 case ARM_VLD1d32Qwb_fixed:
2531 case ARM_VLD1d64Qwb_fixed:
2532 case ARM_VLD1d8wb_register:
2533 case ARM_VLD1d16wb_register:
2534 case ARM_VLD1d32wb_register:
2535 case ARM_VLD1d64wb_register:
2536 case ARM_VLD1q8wb_fixed:
2537 case ARM_VLD1q16wb_fixed:
2538 case ARM_VLD1q32wb_fixed:
2539 case ARM_VLD1q64wb_fixed:
2540 case ARM_VLD1q8wb_register:
2541 case ARM_VLD1q16wb_register:
2542 case ARM_VLD1q32wb_register:
2543 case ARM_VLD1q64wb_register:
2547 if (Rm != 0xD && Rm != 0xF &&
2548 !Check(&
S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder)))
2551 case ARM_VLD2d8wb_fixed:
2552 case ARM_VLD2d16wb_fixed:
2553 case ARM_VLD2d32wb_fixed:
2554 case ARM_VLD2b8wb_fixed:
2555 case ARM_VLD2b16wb_fixed:
2556 case ARM_VLD2b32wb_fixed:
2557 case ARM_VLD2q8wb_fixed:
2558 case ARM_VLD2q16wb_fixed:
2559 case ARM_VLD2q32wb_fixed:
2567 uint64_t Address,
const void *Decoder)
2570 unsigned type = fieldFromInstruction_4(Insn, 8, 4);
2571 unsigned align = fieldFromInstruction_4(Insn, 4, 2);
2576 load = fieldFromInstruction_4(Insn, 21, 1);
2577 return load ? DecodeVLDInstruction(Inst, Insn, Address, Decoder)
2578 : DecodeVSTInstruction(Inst, Insn, Address, Decoder);
2582 uint64_t Address,
const void *Decoder)
2585 unsigned size = fieldFromInstruction_4(Insn, 6, 2);
2588 type = fieldFromInstruction_4(Insn, 8, 4);
2589 align = fieldFromInstruction_4(Insn, 4, 2);
2593 load = fieldFromInstruction_4(Insn, 21, 1);
2594 return load ? DecodeVLDInstruction(Inst, Insn, Address, Decoder)
2595 : DecodeVSTInstruction(Inst, Insn, Address, Decoder);
2599 uint64_t Address,
const void *Decoder)
2601 unsigned align,
load;
2602 unsigned size = fieldFromInstruction_4(Insn, 6, 2);
2605 align = fieldFromInstruction_4(Insn, 4, 2);
2608 load = fieldFromInstruction_4(Insn, 21, 1);
2609 return load ? DecodeVLDInstruction(Inst, Insn, Address, Decoder)
2610 : DecodeVSTInstruction(Inst, Insn, Address, Decoder);
2614 uint64_t Address,
const void *Decoder)
2617 unsigned size = fieldFromInstruction_4(Insn, 6, 2);
2620 load = fieldFromInstruction_4(Insn, 21, 1);
2621 return load ? DecodeVLDInstruction(Inst, Insn, Address, Decoder)
2622 : DecodeVSTInstruction(Inst, Insn, Address, Decoder);
2626 uint64_t Address,
const void *Decoder)
2629 unsigned wb, Rn, Rm;
2630 unsigned Rd = fieldFromInstruction_4(Insn, 12, 4);
2631 Rd |= fieldFromInstruction_4(Insn, 22, 1) << 4;
2632 wb = fieldFromInstruction_4(Insn, 16, 4);
2633 Rn = fieldFromInstruction_4(Insn, 16, 4);
2634 Rn |= fieldFromInstruction_4(Insn, 4, 2) << 4;
2635 Rm = fieldFromInstruction_4(Insn, 0, 4);
2639 case ARM_VST1d8wb_fixed:
2640 case ARM_VST1d16wb_fixed:
2641 case ARM_VST1d32wb_fixed:
2642 case ARM_VST1d64wb_fixed:
2643 case ARM_VST1d8wb_register:
2644 case ARM_VST1d16wb_register:
2645 case ARM_VST1d32wb_register:
2646 case ARM_VST1d64wb_register:
2647 case ARM_VST1q8wb_fixed:
2648 case ARM_VST1q16wb_fixed:
2649 case ARM_VST1q32wb_fixed:
2650 case ARM_VST1q64wb_fixed:
2651 case ARM_VST1q8wb_register:
2652 case ARM_VST1q16wb_register:
2653 case ARM_VST1q32wb_register:
2654 case ARM_VST1q64wb_register:
2655 case ARM_VST1d8Twb_fixed:
2656 case ARM_VST1d16Twb_fixed:
2657 case ARM_VST1d32Twb_fixed:
2658 case ARM_VST1d64Twb_fixed:
2659 case ARM_VST1d8Twb_register:
2660 case ARM_VST1d16Twb_register:
2661 case ARM_VST1d32Twb_register:
2662 case ARM_VST1d64Twb_register:
2663 case ARM_VST1d8Qwb_fixed:
2664 case ARM_VST1d16Qwb_fixed:
2665 case ARM_VST1d32Qwb_fixed:
2666 case ARM_VST1d64Qwb_fixed:
2667 case ARM_VST1d8Qwb_register:
2668 case ARM_VST1d16Qwb_register:
2669 case ARM_VST1d32Qwb_register:
2670 case ARM_VST1d64Qwb_register:
2671 case ARM_VST2d8wb_fixed:
2672 case ARM_VST2d16wb_fixed:
2673 case ARM_VST2d32wb_fixed:
2674 case ARM_VST2d8wb_register:
2675 case ARM_VST2d16wb_register:
2676 case ARM_VST2d32wb_register:
2677 case ARM_VST2q8wb_fixed:
2678 case ARM_VST2q16wb_fixed:
2679 case ARM_VST2q32wb_fixed:
2680 case ARM_VST2q8wb_register:
2681 case ARM_VST2q16wb_register:
2682 case ARM_VST2q32wb_register:
2683 case ARM_VST2b8wb_fixed:
2684 case ARM_VST2b16wb_fixed:
2685 case ARM_VST2b32wb_fixed:
2686 case ARM_VST2b8wb_register:
2687 case ARM_VST2b16wb_register:
2688 case ARM_VST2b32wb_register:
2693 case ARM_VST3d8_UPD:
2694 case ARM_VST3d16_UPD:
2695 case ARM_VST3d32_UPD:
2696 case ARM_VST3q8_UPD:
2697 case ARM_VST3q16_UPD:
2698 case ARM_VST3q32_UPD:
2699 case ARM_VST4d8_UPD:
2700 case ARM_VST4d16_UPD:
2701 case ARM_VST4d32_UPD:
2702 case ARM_VST4q8_UPD:
2703 case ARM_VST4q16_UPD:
2704 case ARM_VST4q32_UPD:
2705 if (!Check(&
S, DecodeGPRRegisterClass(Inst, wb, Address, Decoder)))
2713 if (!Check(&
S, DecodeAddrMode6Operand(Inst, Rn, Address, Decoder)))
2721 else if (Rm != 0xF) {
2722 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder)))
2726 case ARM_VST1d8wb_fixed:
2727 case ARM_VST1d16wb_fixed:
2728 case ARM_VST1d32wb_fixed:
2729 case ARM_VST1d64wb_fixed:
2730 case ARM_VST1q8wb_fixed:
2731 case ARM_VST1q16wb_fixed:
2732 case ARM_VST1q32wb_fixed:
2733 case ARM_VST1q64wb_fixed:
2734 case ARM_VST1d8Twb_fixed:
2735 case ARM_VST1d16Twb_fixed:
2736 case ARM_VST1d32Twb_fixed:
2737 case ARM_VST1d64Twb_fixed:
2738 case ARM_VST1d8Qwb_fixed:
2739 case ARM_VST1d16Qwb_fixed:
2740 case ARM_VST1d32Qwb_fixed:
2741 case ARM_VST1d64Qwb_fixed:
2742 case ARM_VST2d8wb_fixed:
2743 case ARM_VST2d16wb_fixed:
2744 case ARM_VST2d32wb_fixed:
2745 case ARM_VST2q8wb_fixed:
2746 case ARM_VST2q16wb_fixed:
2747 case ARM_VST2q32wb_fixed:
2748 case ARM_VST2b8wb_fixed:
2749 case ARM_VST2b16wb_fixed:
2750 case ARM_VST2b32wb_fixed:
2761 case ARM_VST1q16wb_fixed:
2762 case ARM_VST1q16wb_register:
2763 case ARM_VST1q32wb_fixed:
2764 case ARM_VST1q32wb_register:
2765 case ARM_VST1q64wb_fixed:
2766 case ARM_VST1q64wb_register:
2767 case ARM_VST1q8wb_fixed:
2768 case ARM_VST1q8wb_register:
2772 case ARM_VST2d16wb_fixed:
2773 case ARM_VST2d16wb_register:
2774 case ARM_VST2d32wb_fixed:
2775 case ARM_VST2d32wb_register:
2776 case ARM_VST2d8wb_fixed:
2777 case ARM_VST2d8wb_register:
2778 if (!Check(&
S, DecodeDPairRegisterClass(Inst, Rd, Address, Decoder)))
2784 case ARM_VST2b16wb_fixed:
2785 case ARM_VST2b16wb_register:
2786 case ARM_VST2b32wb_fixed:
2787 case ARM_VST2b32wb_register:
2788 case ARM_VST2b8wb_fixed:
2789 case ARM_VST2b8wb_register:
2790 if (!Check(&
S, DecodeDPairSpacedRegisterClass(Inst, Rd, Address, Decoder)))
2794 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder)))
2803 case ARM_VST3d8_UPD:
2804 case ARM_VST3d16_UPD:
2805 case ARM_VST3d32_UPD:
2809 case ARM_VST4d8_UPD:
2810 case ARM_VST4d16_UPD:
2811 case ARM_VST4d32_UPD:
2812 if (!Check(&
S, DecodeDPRRegisterClass(Inst, (Rd+1)%32, Address, Decoder)))
2818 case ARM_VST3q8_UPD:
2819 case ARM_VST3q16_UPD:
2820 case ARM_VST3q32_UPD:
2824 case ARM_VST4q8_UPD:
2825 case ARM_VST4q16_UPD:
2826 case ARM_VST4q32_UPD:
2827 if (!Check(&
S, DecodeDPRRegisterClass(Inst, (Rd+2)%32, Address, Decoder)))
2839 case ARM_VST3d8_UPD:
2840 case ARM_VST3d16_UPD:
2841 case ARM_VST3d32_UPD:
2845 case ARM_VST4d8_UPD:
2846 case ARM_VST4d16_UPD:
2847 case ARM_VST4d32_UPD:
2848 if (!Check(&
S, DecodeDPRRegisterClass(Inst, (Rd+2)%32, Address, Decoder)))
2854 case ARM_VST3q8_UPD:
2855 case ARM_VST3q16_UPD:
2856 case ARM_VST3q32_UPD:
2860 case ARM_VST4q8_UPD:
2861 case ARM_VST4q16_UPD:
2862 case ARM_VST4q32_UPD:
2863 if (!Check(&
S, DecodeDPRRegisterClass(Inst, (Rd+4)%32, Address, Decoder)))
2875 case ARM_VST4d8_UPD:
2876 case ARM_VST4d16_UPD:
2877 case ARM_VST4d32_UPD:
2878 if (!Check(&
S, DecodeDPRRegisterClass(Inst, (Rd+3)%32, Address, Decoder)))
2884 case ARM_VST4q8_UPD:
2885 case ARM_VST4q16_UPD:
2886 case ARM_VST4q32_UPD:
2887 if (!Check(&
S, DecodeDPRRegisterClass(Inst, (Rd+6)%32, Address, Decoder)))
2898 uint64_t Address,
const void *Decoder)
2901 unsigned Rn, Rm, align,
size;
2902 unsigned Rd = fieldFromInstruction_4(Insn, 12, 4);
2903 Rd |= fieldFromInstruction_4(Insn, 22, 1) << 4;
2904 Rn = fieldFromInstruction_4(Insn, 16, 4);
2905 Rm = fieldFromInstruction_4(Insn, 0, 4);
2906 align = fieldFromInstruction_4(Insn, 4, 1);
2907 size = fieldFromInstruction_4(Insn, 6, 2);
2909 if (
size == 0 && align == 1)
2911 align *= (1 <<
size);
2914 case ARM_VLD1DUPq16:
case ARM_VLD1DUPq32:
case ARM_VLD1DUPq8:
2915 case ARM_VLD1DUPq16wb_fixed:
case ARM_VLD1DUPq16wb_register:
2916 case ARM_VLD1DUPq32wb_fixed:
case ARM_VLD1DUPq32wb_register:
2917 case ARM_VLD1DUPq8wb_fixed:
case ARM_VLD1DUPq8wb_register:
2918 if (!Check(&
S, DecodeDPairRegisterClass(Inst, Rd, Address, Decoder)))
2922 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder)))
2927 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
2931 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
2938 if (Rm != 0xD && Rm != 0xF &&
2939 !Check(&
S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder)))
2946 uint64_t Address,
const void *Decoder)
2949 unsigned Rn, Rm, align,
size;
2950 unsigned Rd = fieldFromInstruction_4(Insn, 12, 4);
2951 Rd |= fieldFromInstruction_4(Insn, 22, 1) << 4;
2952 Rn = fieldFromInstruction_4(Insn, 16, 4);
2953 Rm = fieldFromInstruction_4(Insn, 0, 4);
2954 align = fieldFromInstruction_4(Insn, 4, 1);
2955 size = 1 << fieldFromInstruction_4(Insn, 6, 2);
2959 case ARM_VLD2DUPd16:
case ARM_VLD2DUPd32:
case ARM_VLD2DUPd8:
2960 case ARM_VLD2DUPd16wb_fixed:
case ARM_VLD2DUPd16wb_register:
2961 case ARM_VLD2DUPd32wb_fixed:
case ARM_VLD2DUPd32wb_register:
2962 case ARM_VLD2DUPd8wb_fixed:
case ARM_VLD2DUPd8wb_register:
2963 if (!Check(&
S, DecodeDPairRegisterClass(Inst, Rd, Address, Decoder)))
2966 case ARM_VLD2DUPd16x2:
case ARM_VLD2DUPd32x2:
case ARM_VLD2DUPd8x2:
2967 case ARM_VLD2DUPd16x2wb_fixed:
case ARM_VLD2DUPd16x2wb_register:
2968 case ARM_VLD2DUPd32x2wb_fixed:
case ARM_VLD2DUPd32x2wb_register:
2969 case ARM_VLD2DUPd8x2wb_fixed:
case ARM_VLD2DUPd8x2wb_register:
2970 if (!Check(&
S, DecodeDPairSpacedRegisterClass(Inst, Rd, Address, Decoder)))
2974 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder)))
2982 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
2986 if (Rm != 0xD && Rm != 0xF) {
2987 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder)))
2995 uint64_t Address,
const void *Decoder)
2998 unsigned Rn, Rm, inc;
2999 unsigned Rd = fieldFromInstruction_4(Insn, 12, 4);
3000 Rd |= fieldFromInstruction_4(Insn, 22, 1) << 4;
3001 Rn = fieldFromInstruction_4(Insn, 16, 4);
3002 Rm = fieldFromInstruction_4(Insn, 0, 4);
3003 inc = fieldFromInstruction_4(Insn, 5, 1) + 1;
3005 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder)))
3007 if (!Check(&
S, DecodeDPRRegisterClass(Inst, (Rd+inc)%32, Address, Decoder)))
3009 if (!Check(&
S, DecodeDPRRegisterClass(Inst, (Rd+2*inc)%32, Address, Decoder)))
3012 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
3016 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
3022 else if (Rm != 0xF) {
3023 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder)))
3031 uint64_t Address,
const void *Decoder)
3034 unsigned Rn, Rm,
size, inc, align;
3035 unsigned Rd = fieldFromInstruction_4(Insn, 12, 4);
3036 Rd |= fieldFromInstruction_4(Insn, 22, 1) << 4;
3037 Rn = fieldFromInstruction_4(Insn, 16, 4);
3038 Rm = fieldFromInstruction_4(Insn, 0, 4);
3039 size = fieldFromInstruction_4(Insn, 6, 2);
3040 inc = fieldFromInstruction_4(Insn, 5, 1) + 1;
3041 align = fieldFromInstruction_4(Insn, 4, 1);
3056 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder)))
3058 if (!Check(&
S, DecodeDPRRegisterClass(Inst, (Rd+inc)%32, Address, Decoder)))
3060 if (!Check(&
S, DecodeDPRRegisterClass(Inst, (Rd+2*inc)%32, Address, Decoder)))
3062 if (!Check(&
S, DecodeDPRRegisterClass(Inst, (Rd+3*inc)%32, Address, Decoder)))
3065 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
3069 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
3075 else if (Rm != 0xF) {
3076 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder)))
3084 uint64_t Address,
const void *Decoder)
3088 unsigned Rd = fieldFromInstruction_4(Insn, 12, 4);
3089 Rd |= fieldFromInstruction_4(Insn, 22, 1) << 4;
3090 imm = fieldFromInstruction_4(Insn, 0, 4);
3091 imm |= fieldFromInstruction_4(Insn, 16, 3) << 4;
3092 imm |= fieldFromInstruction_4(Insn, 24, 1) << 7;
3093 imm |= fieldFromInstruction_4(Insn, 8, 4) << 8;
3094 imm |= fieldFromInstruction_4(Insn, 5, 1) << 12;
3095 Q = fieldFromInstruction_4(Insn, 6, 1);
3098 if (!Check(&
S, DecodeQPRRegisterClass(Inst, Rd, Address, Decoder)))
3101 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder)))
3108 case ARM_VORRiv4i16:
3109 case ARM_VORRiv2i32:
3110 case ARM_VBICiv4i16:
3111 case ARM_VBICiv2i32:
3112 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder)))
3115 case ARM_VORRiv8i16:
3116 case ARM_VORRiv4i32:
3117 case ARM_VBICiv8i16:
3118 case ARM_VBICiv4i32:
3119 if (!Check(&
S, DecodeQPRRegisterClass(Inst, Rd, Address, Decoder)))
3130 uint64_t Address,
const void *Decoder)
3134 unsigned Rd = fieldFromInstruction_4(Insn, 12, 4);
3135 Rd |= fieldFromInstruction_4(Insn, 22, 1) << 4;
3136 Rm = fieldFromInstruction_4(Insn, 0, 4);
3137 Rm |= fieldFromInstruction_4(Insn, 5, 1) << 4;
3138 size = fieldFromInstruction_4(Insn, 18, 2);
3140 if (!Check(&
S, DecodeQPRRegisterClass(Inst, Rd, Address, Decoder)))
3142 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rm, Address, Decoder)))
3150 uint64_t Address,
const void *Decoder)
3157 uint64_t Address,
const void *Decoder)
3164 uint64_t Address,
const void *Decoder)
3171 uint64_t Address,
const void *Decoder)
3178 uint64_t Address,
const void *Decoder)
3181 unsigned Rn, Rm,
op;
3182 unsigned Rd = fieldFromInstruction_4(Insn, 12, 4);
3183 Rd |= fieldFromInstruction_4(Insn, 22, 1) << 4;
3184 Rn = fieldFromInstruction_4(Insn, 16, 4);
3185 Rn |= fieldFromInstruction_4(Insn, 7, 1) << 4;
3186 Rm = fieldFromInstruction_4(Insn, 0, 4);
3187 Rm |= fieldFromInstruction_4(Insn, 5, 1) << 4;
3188 op = fieldFromInstruction_4(Insn, 6, 1);
3190 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder)))
3193 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder)))
3200 if (!Check(&
S, DecodeDPairRegisterClass(Inst, Rn, Address, Decoder)))
3204 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rn, Address, Decoder)))
3208 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rm, Address, Decoder)))
3215 uint64_t Address,
const void *Decoder)
3219 unsigned dst = fieldFromInstruction_2(Insn, 8, 3);
3220 unsigned imm = fieldFromInstruction_2(Insn, 0, 8);
3222 if (!Check(&
S, DecodetGPRRegisterClass(Inst,
dst, Address, Decoder)))
3240 uint64_t Address,
const void *Decoder)
3247 uint64_t Address,
const void *Decoder)
3254 uint64_t Address,
const void *Decoder)
3261 uint64_t Address,
const void *Decoder)
3265 unsigned Rn = fieldFromInstruction_4(Val, 0, 3);
3266 unsigned Rm = fieldFromInstruction_4(Val, 3, 3);
3268 if (!Check(&
S, DecodetGPRRegisterClass(Inst, Rn, Address, Decoder)))
3270 if (!Check(&
S, DecodetGPRRegisterClass(Inst, Rm, Address, Decoder)))
3277 uint64_t Address,
const void *Decoder)
3281 unsigned Rn = fieldFromInstruction_4(Val, 0, 3);
3282 unsigned imm = fieldFromInstruction_4(Val, 3, 5);
3284 if (!Check(&
S, DecodetGPRRegisterClass(Inst, Rn, Address, Decoder)))
3292 uint64_t Address,
const void *Decoder)
3294 unsigned imm = Val << 2;
3303 uint64_t Address,
const void *Decoder)
3312 uint64_t Address,
const void *Decoder)
3316 unsigned Rn = fieldFromInstruction_4(Val, 6, 4);
3317 unsigned Rm = fieldFromInstruction_4(Val, 2, 4);
3318 unsigned imm = fieldFromInstruction_4(Val, 0, 2);
3331 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
3333 if (!Check(&
S, DecoderGPRRegisterClass(Inst, Rm, Address, Decoder)))
3341 uint64_t Address,
const void *Decoder)
3345 unsigned Rt = fieldFromInstruction_4(Insn, 12, 4);
3346 unsigned Rn = fieldFromInstruction_4(Insn, 16, 4);
3348 bool hasMP = ((featureBits & ARM_FeatureMP) != 0);
3349 bool hasV7Ops = ((featureBits & ARM_HasV7Ops) != 0);
3378 return DecodeT2LoadLabel(Inst, Insn, Address, Decoder);
3403 if (!hasV7Ops || !hasMP)
3407 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rt, Address, Decoder)))
3411 addrmode = fieldFromInstruction_4(Insn, 4, 2);
3412 addrmode |= fieldFromInstruction_4(Insn, 0, 4) << 2;
3413 addrmode |= fieldFromInstruction_4(Insn, 16, 4) << 6;
3414 if (!Check(&
S, DecodeT2AddrModeSOReg(Inst, addrmode, Address, Decoder)))
3421 uint64_t Address,
const void* Decoder)
3425 unsigned Rn = fieldFromInstruction_4(Insn, 16, 4);
3426 unsigned Rt = fieldFromInstruction_4(Insn, 12, 4);
3427 unsigned U = fieldFromInstruction_4(Insn, 9, 1);
3428 unsigned imm = fieldFromInstruction_4(Insn, 0, 8);
3429 unsigned add = fieldFromInstruction_4(Insn, 9, 1);
3432 bool hasMP = ((featureBits & ARM_FeatureMP) != 0);
3433 bool hasV7Ops = ((featureBits & ARM_HasV7Ops) != 0);
3463 return DecodeT2LoadLabel(Inst, Insn, Address, Decoder);
3490 if (!hasV7Ops || !hasMP)
3494 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rt, Address, Decoder)))
3498 if (!Check(&
S, DecodeT2AddrModeImm8(Inst,
imm, Address, Decoder)))
3504 uint64_t Address,
const void* Decoder)
3508 unsigned Rn = fieldFromInstruction_4(Insn, 16, 4);
3509 unsigned Rt = fieldFromInstruction_4(Insn, 12, 4);
3510 unsigned imm = fieldFromInstruction_4(Insn, 0, 12);
3512 bool hasMP = ((featureBits & ARM_FeatureMP) != 0);
3513 bool hasV7Ops = ((featureBits & ARM_HasV7Ops) != 0);
3525 case ARM_t2LDRSHi12:
3531 case ARM_t2LDRSBi12:
3543 return DecodeT2LoadLabel(Inst, Insn, Address, Decoder);
3548 case ARM_t2LDRSHi12:
3553 case ARM_t2LDRSBi12:
3569 if (!hasV7Ops || !hasMP)
3573 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rt, Address, Decoder)))
3577 if (!Check(&
S, DecodeT2AddrModeImm12(Inst,
imm, Address, Decoder)))
3583 uint64_t Address,
const void* Decoder)
3587 unsigned Rn = fieldFromInstruction_4(Insn, 16, 4);
3588 unsigned Rt = fieldFromInstruction_4(Insn, 12, 4);
3589 unsigned imm = fieldFromInstruction_4(Insn, 0, 8);
3612 return DecodeT2LoadLabel(Inst, Insn, Address, Decoder);
3615 if (!Check(&
S, DecoderGPRRegisterClass(Inst, Rt, Address, Decoder)))
3617 if (!Check(&
S, DecodeT2AddrModeImm8(Inst,
imm, Address, Decoder)))
3623 uint64_t Address,
const void* Decoder)
3627 unsigned Rt = fieldFromInstruction_4(Insn, 12, 4);
3628 unsigned U = fieldFromInstruction_4(Insn, 23, 1);
3629 int imm = fieldFromInstruction_4(Insn, 0, 12);
3631 bool hasV7Ops = ((featureBits & ARM_HasV7Ops) != 0);
3639 case ARM_t2LDRSBpci:
3642 case ARM_t2LDRSHpci:
3657 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rt, Address, Decoder)))
3674 uint64_t Address,
const void *Decoder)
3679 int imm = Val & 0xFF;
3681 if (!(Val & 0x100))
imm *= -1;
3689 uint64_t Address,
const void *Decoder)
3693 unsigned Rn = fieldFromInstruction_4(Val, 9, 4);
3694 unsigned imm = fieldFromInstruction_4(Val, 0, 9);
3696 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
3698 if (!Check(&
S, DecodeT2Imm8S4(Inst,
imm, Address, Decoder)))
3705 uint64_t Address,
const void *Decoder)
3709 unsigned Rn = fieldFromInstruction_4(Val, 8, 4);
3710 unsigned imm = fieldFromInstruction_4(Val, 0, 8);
3712 if (!Check(&
S, DecodeGPRnopcRegisterClass(Inst, Rn, Address, Decoder)))
3721 uint64_t Address,
const void *Decoder)
3723 int imm = Val & 0xFF;
3726 else if (!(Val & 0x100))
3734 uint64_t Address,
const void *Decoder)
3738 unsigned Rn = fieldFromInstruction_4(Val, 9, 4);
3739 unsigned imm = fieldFromInstruction_4(Val, 0, 9);
3772 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
3774 if (!Check(&
S, DecodeT2Imm8(Inst,
imm, Address, Decoder)))
3781 uint64_t Address,
const void *Decoder)
3785 unsigned Rt = fieldFromInstruction_4(Insn, 12, 4);
3786 unsigned Rn = fieldFromInstruction_4(Insn, 16, 4);
3787 unsigned addr = fieldFromInstruction_4(Insn, 0, 8);
3788 addr |= fieldFromInstruction_4(Insn, 9, 1) << 8;
3790 load = fieldFromInstruction_4(Insn, 20, 1);
3795 case ARM_t2LDR_POST:
3798 case ARM_t2LDRB_PRE:
3799 case ARM_t2LDRB_POST:
3802 case ARM_t2LDRH_PRE:
3803 case ARM_t2LDRH_POST:
3806 case ARM_t2LDRSB_PRE:
3807 case ARM_t2LDRSB_POST:
3813 case ARM_t2LDRSH_PRE:
3814 case ARM_t2LDRSH_POST:
3820 return DecodeT2LoadLabel(Inst, Insn, Address, Decoder);
3824 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
3828 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rt, Address, Decoder)))
3832 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
3836 if (!Check(&
S, DecodeT2AddrModeImm8(Inst,
addr, Address, Decoder)))
3843 uint64_t Address,
const void *Decoder)
3847 unsigned Rn = fieldFromInstruction_4(Val, 13, 4);
3848 unsigned imm = fieldFromInstruction_4(Val, 0, 12);
3861 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
3869 uint64_t Address,
const void *Decoder)
3871 unsigned imm = fieldFromInstruction_2(Insn, 0, 7);
3881 uint64_t Address,
const void *Decoder)
3886 unsigned Rdm = fieldFromInstruction_2(Insn, 0, 3);
3887 Rdm |= fieldFromInstruction_2(Insn, 7, 1) << 3;
3889 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rdm, Address, Decoder)))
3892 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rdm, Address, Decoder)))
3895 unsigned Rm = fieldFromInstruction_2(Insn, 3, 4);
3899 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder)))
3907 uint64_t Address,
const void *Decoder)
3909 unsigned imod = fieldFromInstruction_2(Insn, 4, 1) | 0x2;
3910 unsigned flags = fieldFromInstruction_2(Insn, 0, 3);
3919 uint64_t Address,
const void *Decoder)
3922 unsigned Rm = fieldFromInstruction_4(Insn, 0, 4);
3923 unsigned add = fieldFromInstruction_4(Insn, 4, 1);
3925 if (!Check(&
S, DecodeGPRnopcRegisterClass(Inst, Rm, Address, Decoder)))
3933 uint64_t Address,
const void *Decoder)
3942 unsigned S = (Val >> 23) & 1;
3943 unsigned J1 = (Val >> 22) & 1;
3944 unsigned J2 = (Val >> 21) & 1;
3945 unsigned I1 = !(J1 ^
S);
3946 unsigned I2 = !(J2 ^
S);
3947 unsigned tmp = (Val & ~0x600000) | (
I1 << 22) | (
I2 << 21);
3955 uint64_t Address,
const void *Decoder)
3957 if (Val == 0xA || Val == 0xB)
3965 uint64_t Address,
const void *Decoder)
3969 unsigned Rn = fieldFromInstruction_4(Insn, 16, 4);
3970 unsigned Rm = fieldFromInstruction_4(Insn, 0, 4);
3973 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
3975 if (!Check(&
S, DecoderGPRRegisterClass(Inst, Rm, Address, Decoder)))
3981 uint64_t Address,
const void *Decoder)
3985 unsigned pred = fieldFromInstruction_4(Insn, 22, 4);
3986 if (pred == 0xE || pred == 0xF) {
3988 unsigned opc = fieldFromInstruction_4(Insn, 4, 28);
4003 imm = fieldFromInstruction_4(Insn, 0, 4);
4004 return DecodeMemBarrierOption(Inst,
imm, Address, Decoder);
4007 brtarget = fieldFromInstruction_4(Insn, 0, 11) << 1;
4008 brtarget |= fieldFromInstruction_4(Insn, 11, 1) << 19;
4009 brtarget |= fieldFromInstruction_4(Insn, 13, 1) << 18;
4010 brtarget |= fieldFromInstruction_4(Insn, 16, 6) << 12;
4011 brtarget |= fieldFromInstruction_4(Insn, 26, 1) << 20;
4013 if (!Check(&
S, DecodeT2BROperand(Inst, brtarget, Address, Decoder)))
4015 if (!Check(&
S, DecodePredicateOperand(Inst, pred, Address, Decoder)))
4025 uint64_t Address,
const void *Decoder)
4027 unsigned ctrl = fieldFromInstruction_4(Val, 10, 2);
4029 unsigned byte = fieldFromInstruction_4(Val, 8, 2);
4030 unsigned imm = fieldFromInstruction_4(Val, 0, 8);
4046 unsigned unrot = fieldFromInstruction_4(Val, 0, 7) | 0x80;
4047 unsigned rot = fieldFromInstruction_4(Val, 7, 5);
4048 unsigned imm = (unrot >> rot) | (unrot << ((32-rot)&31));
4056 uint64_t Address,
const void *Decoder)
4063 uint64_t Address,
const void *Decoder)
4072 unsigned S = (Val >> 23) & 1;
4073 unsigned J1 = (Val >> 22) & 1;
4074 unsigned J2 = (Val >> 21) & 1;
4075 unsigned I1 = !(J1 ^
S);
4076 unsigned I2 = !(J2 ^
S);
4077 unsigned tmp = (Val & ~0x600000) | (
I1 << 22) | (
I2 << 21);
4085 uint64_t Address,
const void *Decoder)
4095 uint64_t Address,
const void *Decoder)
4105 uint64_t Address,
const void *Decoder)
4109 if (FeatureBits & ARM_FeatureMClass) {
4110 unsigned ValLow = Val & 0xff;
4129 if (!(FeatureBits & ARM_HasV7Ops))
4138 unsigned Mask = fieldFromInstruction_4(Val, 10, 2);
4139 if (!(FeatureBits & ARM_HasV7Ops)) {
4152 if (Mask == 0 || (Mask != 2 && ValLow > 3) ||
4153 (!(FeatureBits & ARM_FeatureDSPThumb2) && (Mask & 1)))
4168 uint64_t Address,
const void *Decoder)
4171 unsigned R = fieldFromInstruction_4(Val, 5, 1);
4172 unsigned SysM = fieldFromInstruction_4(Val, 0, 5);
4178 if (SysM == 0x7 || SysM == 0xf || SysM == 0x18 || SysM == 0x19 ||
4179 SysM == 0x1a || SysM == 0x1b)
4182 if (SysM != 0xe && SysM != 0x10 && SysM != 0x12 && SysM != 0x14 &&
4183 SysM != 0x16 && SysM != 0x1c && SysM != 0x1e)
4192 uint64_t Address,
const void *Decoder)
4196 unsigned Rt = fieldFromInstruction_4(Insn, 12, 4);
4197 unsigned Rn = fieldFromInstruction_4(Insn, 16, 4);
4198 unsigned pred = fieldFromInstruction_4(Insn, 28, 4);
4203 if (!Check(&
S, DecodeGPRPairRegisterClass(Inst, Rt, Address, Decoder)))
4205 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
4207 if (!Check(&
S, DecodePredicateOperand(Inst, pred, Address, Decoder)))
4214 uint64_t Address,
const void *Decoder)
4218 unsigned Rd = fieldFromInstruction_4(Insn, 12, 4);
4219 unsigned Rt = fieldFromInstruction_4(Insn, 0, 4);
4220 unsigned Rn = fieldFromInstruction_4(Insn, 16, 4);
4221 unsigned pred = fieldFromInstruction_4(Insn, 28, 4);
4223 if (!Check(&
S, DecodeGPRnopcRegisterClass(Inst, Rd, Address, Decoder)))
4226 if (Rn == 0xF || Rd == Rn || Rd == Rt || Rd == Rt+1)
4229 if (!Check(&
S, DecodeGPRPairRegisterClass(Inst, Rt, Address, Decoder)))
4231 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
4233 if (!Check(&
S, DecodePredicateOperand(Inst, pred, Address, Decoder)))
4240 uint64_t Address,
const void *Decoder)
4244 unsigned Rn = fieldFromInstruction_4(Insn, 16, 4);
4245 unsigned Rt = fieldFromInstruction_4(Insn, 12, 4);
4246 unsigned imm = fieldFromInstruction_4(Insn, 0, 12);
4247 imm |= fieldFromInstruction_4(Insn, 16, 4) << 13;
4248 imm |= fieldFromInstruction_4(Insn, 23, 1) << 12;
4249 pred = fieldFromInstruction_4(Insn, 28, 4);
4253 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rt, Address, Decoder)))
4255 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
4257 if (!Check(&
S, DecodeAddrModeImm12Operand(Inst,
imm, Address, Decoder)))
4259 if (!Check(&
S, DecodePredicateOperand(Inst, pred, Address, Decoder)))
4266 uint64_t Address,
const void *Decoder)
4270 unsigned Rn = fieldFromInstruction_4(Insn, 16, 4);
4271 unsigned Rt = fieldFromInstruction_4(Insn, 12, 4);
4272 unsigned imm = fieldFromInstruction_4(Insn, 0, 12);
4273 imm |= fieldFromInstruction_4(Insn, 16, 4) << 13;
4274 imm |= fieldFromInstruction_4(Insn, 23, 1) << 12;
4275 pred = fieldFromInstruction_4(Insn, 28, 4);
4276 Rm = fieldFromInstruction_4(Insn, 0, 4);
4281 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rt, Address, Decoder)))
4283 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
4285 if (!Check(&
S, DecodeSORegMemOperand(Inst,
imm, Address, Decoder)))
4287 if (!Check(&
S, DecodePredicateOperand(Inst, pred, Address, Decoder)))
4294 uint64_t Address,
const void *Decoder)
4298 unsigned Rn = fieldFromInstruction_4(Insn, 16, 4);
4299 unsigned Rt = fieldFromInstruction_4(Insn, 12, 4);
4300 unsigned imm = fieldFromInstruction_4(Insn, 0, 12);
4301 imm |= fieldFromInstruction_4(Insn, 16, 4) << 13;
4302 imm |= fieldFromInstruction_4(Insn, 23, 1) << 12;
4303 pred = fieldFromInstruction_4(Insn, 28, 4);
4307 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
4309 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rt, Address, Decoder)))
4311 if (!Check(&
S, DecodeAddrModeImm12Operand(Inst,
imm, Address, Decoder)))
4313 if (!Check(&
S, DecodePredicateOperand(Inst, pred, Address, Decoder)))
4320 uint64_t Address,
const void *Decoder)
4324 unsigned Rn = fieldFromInstruction_4(Insn, 16, 4);
4325 unsigned Rt = fieldFromInstruction_4(Insn, 12, 4);
4326 unsigned imm = fieldFromInstruction_4(Insn, 0, 12);
4327 imm |= fieldFromInstruction_4(Insn, 16, 4) << 13;
4328 imm |= fieldFromInstruction_4(Insn, 23, 1) << 12;
4329 pred = fieldFromInstruction_4(Insn, 28, 4);
4333 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
4335 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rt, Address, Decoder)))
4337 if (!Check(&
S, DecodeSORegMemOperand(Inst,
imm, Address, Decoder)))
4339 if (!Check(&
S, DecodePredicateOperand(Inst, pred, Address, Decoder)))
4346 uint64_t Address,
const void *Decoder)
4349 unsigned size, align = 0, index = 0;
4350 unsigned Rn = fieldFromInstruction_4(Insn, 16, 4);
4351 unsigned Rm = fieldFromInstruction_4(Insn, 0, 4);
4352 unsigned Rd = fieldFromInstruction_4(Insn, 12, 4);
4353 Rd |= fieldFromInstruction_4(Insn, 22, 1) << 4;
4354 size = fieldFromInstruction_4(Insn, 10, 2);
4360 if (fieldFromInstruction_4(Insn, 4, 1))
4362 index = fieldFromInstruction_4(Insn, 5, 3);
4365 if (fieldFromInstruction_4(Insn, 5, 1))
4367 index = fieldFromInstruction_4(Insn, 6, 2);
4368 if (fieldFromInstruction_4(Insn, 4, 1))
4372 if (fieldFromInstruction_4(Insn, 6, 1))
4374 index = fieldFromInstruction_4(Insn, 7, 1);
4376 switch (fieldFromInstruction_4(Insn, 4, 2)) {
4387 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder)))
4390 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
4393 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
4398 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder)))
4404 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder)))
4412 uint64_t Address,
const void *Decoder)
4415 unsigned size, align = 0, index = 0;
4416 unsigned Rn = fieldFromInstruction_4(Insn, 16, 4);
4417 unsigned Rm = fieldFromInstruction_4(Insn, 0, 4);
4418 unsigned Rd = fieldFromInstruction_4(Insn, 12, 4);
4419 Rd |= fieldFromInstruction_4(Insn, 22, 1) << 4;
4420 size = fieldFromInstruction_4(Insn, 10, 2);
4426 if (fieldFromInstruction_4(Insn, 4, 1))
4428 index = fieldFromInstruction_4(Insn, 5, 3);
4431 if (fieldFromInstruction_4(Insn, 5, 1))
4433 index = fieldFromInstruction_4(Insn, 6, 2);
4434 if (fieldFromInstruction_4(Insn, 4, 1))
4438 if (fieldFromInstruction_4(Insn, 6, 1))
4440 index = fieldFromInstruction_4(Insn, 7, 1);
4442 switch (fieldFromInstruction_4(Insn, 4, 2)) {
4454 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
4457 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
4462 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder)))
4468 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder)))
4476 uint64_t Address,
const void *Decoder)
4479 unsigned size, align = 0, index = 0, inc = 1;
4480 unsigned Rn = fieldFromInstruction_4(Insn, 16, 4);
4481 unsigned Rm = fieldFromInstruction_4(Insn, 0, 4);
4482 unsigned Rd = fieldFromInstruction_4(Insn, 12, 4);
4483 Rd |= fieldFromInstruction_4(Insn, 22, 1) << 4;
4484 size = fieldFromInstruction_4(Insn, 10, 2);
4490 index = fieldFromInstruction_4(Insn, 5, 3);
4491 if (fieldFromInstruction_4(Insn, 4, 1))
4495 index = fieldFromInstruction_4(Insn, 6, 2);
4496 if (fieldFromInstruction_4(Insn, 4, 1))
4498 if (fieldFromInstruction_4(Insn, 5, 1))
4502 if (fieldFromInstruction_4(Insn, 5, 1))
4504 index = fieldFromInstruction_4(Insn, 7, 1);
4505 if (fieldFromInstruction_4(Insn, 4, 1) != 0)
4507 if (fieldFromInstruction_4(Insn, 6, 1))
4512 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder)))
4514 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd+inc, Address, Decoder)))
4517 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
4520 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
4525 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder)))
4531 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder)))
4533 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd+inc, Address, Decoder)))
4541 uint64_t Address,
const void *Decoder)
4544 unsigned size, align = 0, index = 0, inc = 1;
4545 unsigned Rn = fieldFromInstruction_4(Insn, 16, 4);
4546 unsigned Rm = fieldFromInstruction_4(Insn, 0, 4);
4547 unsigned Rd = fieldFromInstruction_4(Insn, 12, 4);
4548 Rd |= fieldFromInstruction_4(Insn, 22, 1) << 4;
4549 size = fieldFromInstruction_4(Insn, 10, 2);
4555 index = fieldFromInstruction_4(Insn, 5, 3);
4556 if (fieldFromInstruction_4(Insn, 4, 1))
4560 index = fieldFromInstruction_4(Insn, 6, 2);
4561 if (fieldFromInstruction_4(Insn, 4, 1))
4563 if (fieldFromInstruction_4(Insn, 5, 1))
4567 if (fieldFromInstruction_4(Insn, 5, 1))
4569 index = fieldFromInstruction_4(Insn, 7, 1);
4570 if (fieldFromInstruction_4(Insn, 4, 1) != 0)
4572 if (fieldFromInstruction_4(Insn, 6, 1))
4578 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
4581 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
4586 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder)))
4592 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder)))
4594 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd+inc, Address, Decoder)))
4602 uint64_t Address,
const void *Decoder)
4605 unsigned size, align = 0, index = 0, inc = 1;
4606 unsigned Rn = fieldFromInstruction_4(Insn, 16, 4);
4607 unsigned Rm = fieldFromInstruction_4(Insn, 0, 4);
4608 unsigned Rd = fieldFromInstruction_4(Insn, 12, 4);
4609 Rd |= fieldFromInstruction_4(Insn, 22, 1) << 4;
4610 size = fieldFromInstruction_4(Insn, 10, 2);
4616 if (fieldFromInstruction_4(Insn, 4, 1))
4618 index = fieldFromInstruction_4(Insn, 5, 3);
4621 if (fieldFromInstruction_4(Insn, 4, 1))
4623 index = fieldFromInstruction_4(Insn, 6, 2);
4624 if (fieldFromInstruction_4(Insn, 5, 1))
4628 if (fieldFromInstruction_4(Insn, 4, 2))
4630 index = fieldFromInstruction_4(Insn, 7, 1);
4631 if (fieldFromInstruction_4(Insn, 6, 1))
4636 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder)))
4638 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd+inc, Address, Decoder)))
4640 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd+2*inc, Address, Decoder)))
4644 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
4647 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
4652 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder)))
4658 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder)))
4660 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd+inc, Address, Decoder)))
4662 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd+2*inc, Address, Decoder)))
4670 uint64_t Address,
const void *Decoder)
4673 unsigned size, align = 0, index = 0, inc = 1;
4674 unsigned Rn = fieldFromInstruction_4(Insn, 16, 4);
4675 unsigned Rm = fieldFromInstruction_4(Insn, 0, 4);
4676 unsigned Rd = fieldFromInstruction_4(Insn, 12, 4);
4677 Rd |= fieldFromInstruction_4(Insn, 22, 1) << 4;
4678 size = fieldFromInstruction_4(Insn, 10, 2);
4684 if (fieldFromInstruction_4(Insn, 4, 1))
4686 index = fieldFromInstruction_4(Insn, 5, 3);
4689 if (fieldFromInstruction_4(Insn, 4, 1))
4691 index = fieldFromInstruction_4(Insn, 6, 2);
4692 if (fieldFromInstruction_4(Insn, 5, 1))
4696 if (fieldFromInstruction_4(Insn, 4, 2))
4698 index = fieldFromInstruction_4(Insn, 7, 1);
4699 if (fieldFromInstruction_4(Insn, 6, 1))
4705 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
4708 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
4713 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder)))
4719 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder)))
4721 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd+inc, Address, Decoder)))
4723 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd+2*inc, Address, Decoder)))
4731 uint64_t Address,
const void *Decoder)
4734 unsigned size, align = 0, index = 0, inc = 1;
4735 unsigned Rn = fieldFromInstruction_4(Insn, 16, 4);
4736 unsigned Rm = fieldFromInstruction_4(Insn, 0, 4);
4737 unsigned Rd = fieldFromInstruction_4(Insn, 12, 4);
4738 Rd |= fieldFromInstruction_4(Insn, 22, 1) << 4;
4739 size = fieldFromInstruction_4(Insn, 10, 2);
4745 if (fieldFromInstruction_4(Insn, 4, 1))
4747 index = fieldFromInstruction_4(Insn, 5, 3);
4750 if (fieldFromInstruction_4(Insn, 4, 1))
4752 index = fieldFromInstruction_4(Insn, 6, 2);
4753 if (fieldFromInstruction_4(Insn, 5, 1))
4757 switch (fieldFromInstruction_4(Insn, 4, 2)) {
4763 align = 4 << fieldFromInstruction_4(Insn, 4, 2);
break;
4766 index = fieldFromInstruction_4(Insn, 7, 1);
4767 if (fieldFromInstruction_4(Insn, 6, 1))
4772 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder)))
4774 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd+inc, Address, Decoder)))
4776 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd+2*inc, Address, Decoder)))
4778 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd+3*inc, Address, Decoder)))
4782 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
4785 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
4790 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder)))
4796 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder)))
4798 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd+inc, Address, Decoder)))
4800 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd+2*inc, Address, Decoder)))
4802 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd+3*inc, Address, Decoder)))
4810 uint64_t Address,
const void *Decoder)
4813 unsigned size, align = 0, index = 0, inc = 1;
4814 unsigned Rn = fieldFromInstruction_4(Insn, 16, 4);
4815 unsigned Rm = fieldFromInstruction_4(Insn, 0, 4);
4816 unsigned Rd = fieldFromInstruction_4(Insn, 12, 4);
4817 Rd |= fieldFromInstruction_4(Insn, 22, 1) << 4;
4818 size = fieldFromInstruction_4(Insn, 10, 2);
4824 if (fieldFromInstruction_4(Insn, 4, 1))
4826 index = fieldFromInstruction_4(Insn, 5, 3);
4829 if (fieldFromInstruction_4(Insn, 4, 1))
4831 index = fieldFromInstruction_4(Insn, 6, 2);
4832 if (fieldFromInstruction_4(Insn, 5, 1))
4836 switch (fieldFromInstruction_4(Insn, 4, 2)) {
4842 align = 4 << fieldFromInstruction_4(Insn, 4, 2);
break;
4845 index = fieldFromInstruction_4(Insn, 7, 1);
4846 if (fieldFromInstruction_4(Insn, 6, 1))
4852 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
4855 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
4860 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rm, Address, Decoder)))
4866 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd, Address, Decoder)))
4868 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd+inc, Address, Decoder)))
4870 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd+2*inc, Address, Decoder)))
4872 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Rd+3*inc, Address, Decoder)))
4880 uint64_t Address,
const void *Decoder)
4883 unsigned Rt = fieldFromInstruction_4(Insn, 12, 4);
4884 unsigned Rt2 = fieldFromInstruction_4(Insn, 16, 4);
4885 unsigned Rm = fieldFromInstruction_4(Insn, 5, 1);
4886 unsigned pred = fieldFromInstruction_4(Insn, 28, 4);
4887 Rm |= fieldFromInstruction_4(Insn, 0, 4) << 1;
4889 if (Rt == 0xF || Rt2 == 0xF || Rm == 0x1F)
4892 if (!Check(&
S, DecodeSPRRegisterClass(Inst, Rm , Address, Decoder)))
4894 if (!Check(&
S, DecodeSPRRegisterClass(Inst, Rm+1, Address, Decoder)))
4896 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rt , Address, Decoder)))
4898 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rt2 , Address, Decoder)))
4900 if (!Check(&
S, DecodePredicateOperand(Inst, pred, Address, Decoder)))
4907 uint64_t Address,
const void *Decoder)
4910 unsigned Rt = fieldFromInstruction_4(Insn, 12, 4);
4911 unsigned Rt2 = fieldFromInstruction_4(Insn, 16, 4);
4912 unsigned Rm = fieldFromInstruction_4(Insn, 5, 1);
4913 unsigned pred = fieldFromInstruction_4(Insn, 28, 4);
4914 Rm |= fieldFromInstruction_4(Insn, 0, 4) << 1;
4916 if (Rt == 0xF || Rt2 == 0xF || Rm == 0x1F)
4919 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rt , Address, Decoder)))
4921 if (!Check(&
S, DecodeGPRRegisterClass(Inst, Rt2 , Address, Decoder)))
4923 if (!Check(&
S, DecodeSPRRegisterClass(Inst, Rm , Address, Decoder)))
4925 if (!Check(&
S, DecodeSPRRegisterClass(Inst, Rm+1, Address, Decoder)))
4927 if (!Check(&
S, DecodePredicateOperand(Inst, pred, Address, Decoder)))
4934 uint64_t Address,
const void *Decoder)
4937 unsigned pred = fieldFromInstruction_4(Insn, 4, 4);
4938 unsigned mask = fieldFromInstruction_4(Insn, 0, 4);
4954 uint64_t Address,
const void *Decoder)
4958 unsigned Rt = fieldFromInstruction_4(Insn, 12, 4);
4959 unsigned Rt2 = fieldFromInstruction_4(Insn, 8, 4);
4960 unsigned Rn = fieldFromInstruction_4(Insn, 16, 4);
4961 unsigned addr = fieldFromInstruction_4(Insn, 0, 8);
4962 unsigned W = fieldFromInstruction_4(Insn, 21, 1);
4963 unsigned U = fieldFromInstruction_4(Insn, 23, 1);
4964 unsigned P = fieldFromInstruction_4(Insn, 24, 1);
4967 addr |= (U << 8) | (Rn << 9);
4969 if (
writeback && (Rn == Rt || Rn == Rt2))
4975 if (!Check(&
S, DecoderGPRRegisterClass(Inst, Rt, Address, Decoder)))
4978 if (!Check(&
S, DecoderGPRRegisterClass(Inst, Rt2, Address, Decoder)))
4981 if (!Check(&
S, DecoderGPRRegisterClass(Inst, Rn, Address, Decoder)))
4984 if (!Check(&
S, DecodeT2AddrModeImm8s4(Inst,
addr, Address, Decoder)))
4991 uint64_t Address,
const void *Decoder)
4995 unsigned Rt = fieldFromInstruction_4(Insn, 12, 4);
4996 unsigned Rt2 = fieldFromInstruction_4(Insn, 8, 4);
4997 unsigned Rn = fieldFromInstruction_4(Insn, 16, 4);
4998 unsigned addr = fieldFromInstruction_4(Insn, 0, 8);
4999 unsigned W = fieldFromInstruction_4(Insn, 21, 1);
5000 unsigned U = fieldFromInstruction_4(Insn, 23, 1);
5001 unsigned P = fieldFromInstruction_4(Insn, 24, 1);
5004 addr |= (U << 8) | (Rn << 9);
5006 if (
writeback && (Rn == Rt || Rn == Rt2))
5010 if (!Check(&
S, DecoderGPRRegisterClass(Inst, Rn, Address, Decoder)))
5013 if (!Check(&
S, DecoderGPRRegisterClass(Inst, Rt, Address, Decoder)))
5016 if (!Check(&
S, DecoderGPRRegisterClass(Inst, Rt2, Address, Decoder)))
5019 if (!Check(&
S, DecodeT2AddrModeImm8s4(Inst,
addr, Address, Decoder)))
5026 uint64_t Address,
const void *Decoder)
5029 unsigned sign1 = fieldFromInstruction_4(Insn, 21, 1);
5030 unsigned sign2 = fieldFromInstruction_4(Insn, 23, 1);
5033 Val = fieldFromInstruction_4(Insn, 0, 8);
5034 Val |= fieldFromInstruction_4(Insn, 12, 3) << 8;
5035 Val |= fieldFromInstruction_4(Insn, 26, 1) << 11;
5043 uint64_t Address,
const void *Decoder)
5056 uint64_t Address,
const void *Decoder)
5060 unsigned Rt = fieldFromInstruction_4(Insn, 12, 4);
5061 unsigned Rt2 = fieldFromInstruction_4(Insn, 0, 4);
5062 unsigned Rn = fieldFromInstruction_4(Insn, 16, 4);
5063 unsigned pred = fieldFromInstruction_4(Insn, 28, 4);
5066 return DecodeCPSInstruction(Inst, Insn, Address, Decoder);
5070 if (Rt == Rn || Rn == Rt2)
5073 if (!Check(&
S, DecodeGPRnopcRegisterClass(Inst, Rt, Address, Decoder)))
5075 if (!Check(&
S, DecodeGPRnopcRegisterClass(Inst, Rt2, Address, Decoder)))
5077 if (!Check(&
S, DecodeGPRnopcRegisterClass(Inst, Rn, Address, Decoder)))
5079 if (!Check(&
S, DecodePredicateOperand(Inst, pred, Address, Decoder)))
5086 uint64_t Address,
const void *Decoder)
5089 unsigned Vm,
imm, cmode,
op;
5090 unsigned Vd = (fieldFromInstruction_4(Insn, 12, 4) << 0);
5091 Vd |= (fieldFromInstruction_4(Insn, 22, 1) << 4);
5092 Vm = (fieldFromInstruction_4(Insn, 0, 4) << 0);
5093 Vm |= (fieldFromInstruction_4(Insn, 5, 1) << 4);
5094 imm = fieldFromInstruction_4(Insn, 16, 6);
5095 cmode = fieldFromInstruction_4(Insn, 8, 4);
5096 op = fieldFromInstruction_4(Insn, 5, 1);
5099 if (!(
imm & 0x38) && cmode == 0xF) {
5102 return DecodeNEONModImmInstruction(Inst, Insn, Address, Decoder);
5107 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Vd, Address, Decoder)))
5109 if (!Check(&
S, DecodeDPRRegisterClass(Inst, Vm, Address, Decoder)))
5117 uint64_t Address,
const void *Decoder)
5120 unsigned Vm,
imm, cmode,
op;
5121 unsigned Vd = (fieldFromInstruction_4(Insn, 12, 4) << 0);
5122 Vd |= (fieldFromInstruction_4(Insn, 22, 1) << 4);
5123 Vm = (fieldFromInstruction_4(Insn, 0, 4) << 0);
5124 Vm |= (fieldFromInstruction_4(Insn, 5, 1) << 4);
5125 imm = fieldFromInstruction_4(Insn, 16, 6);
5126 cmode = fieldFromInstruction_4(Insn, 8, 4);
5127 op = fieldFromInstruction_4(Insn, 5, 1);
5130 if (!(
imm & 0x38) && cmode == 0xF) {
5133 return DecodeNEONModImmInstruction(Inst, Insn, Address, Decoder);
5138 if (!Check(&
S, DecodeQPRRegisterClass(Inst, Vd, Address, Decoder)))
5140 if (!Check(&
S, DecodeQPRRegisterClass(Inst, Vm, Address, Decoder)))
5148 uint64_t Address,
const void *Decoder)
5152 unsigned Rn = fieldFromInstruction_4(Val, 16, 4);
5153 unsigned Rt = fieldFromInstruction_4(Val, 12, 4);
5154 unsigned Rm = fieldFromInstruction_4(Val, 0, 4);
5155 Rm |= (fieldFromInstruction_4(Val, 23, 1) << 4);
5156 Cond = fieldFromInstruction_4(Val, 28, 4);
5158 if (fieldFromInstruction_4(Val, 8, 4) != 0 || Rn == Rt)
5161 if (!Check(&
S, DecodeGPRnopcRegisterClass(Inst, Rt, Address, Decoder)))
5163 if (!Check(&
S, DecodeGPRnopcRegisterClass(Inst, Rn, Address, Decoder)))
5165 if (!Check(&
S, DecodeAddrMode7Operand(Inst, Rn, Address, Decoder)))
5167 if (!Check(&
S, DecodePostIdxReg(Inst, Rm, Address, Decoder)))
5169 if (!Check(&
S, DecodePredicateOperand(Inst, Cond, Address, Decoder)))
5176 uint64_t Address,
const void *Decoder)
5181 unsigned CRm = fieldFromInstruction_4(Val, 0, 4);
5182 unsigned opc1 = fieldFromInstruction_4(Val, 4, 4);
5183 unsigned cop = fieldFromInstruction_4(Val, 8, 4);
5184 unsigned Rt = fieldFromInstruction_4(Val, 12, 4);
5185 unsigned Rt2 = fieldFromInstruction_4(Val, 16, 4);
5187 if ((cop & ~0x1) == 0xa)
5195 if (!Check(&
S, DecodeGPRnopcRegisterClass(Inst, Rt, Address, Decoder)))
5197 if (!Check(&
S, DecodeGPRnopcRegisterClass(Inst, Rt2, Address, Decoder)))
static unsigned ARM_AM_getAM5Opc(ARM_AM_AddrOpc Opc, unsigned char Offset)
getAM5Opc - This function encodes the addrmode5 opc field.
static unsigned ARM_AM_getAM2Opc(ARM_AM_AddrOpc Opc, unsigned Imm12, ARM_AM_ShiftOpc SO, unsigned IdxMode)
ARM_AM_ShiftOpc
ARM_AM - ARM Addressing Mode Stuff.
bool Thumb_getInstruction(csh handle, const uint8_t *code, size_t code_len, MCInst *instr, uint16_t *size, uint64_t address, void *info)
uint64_t ARM_getFeatureBits(unsigned int mode)
void ARM_init(MCRegisterInfo *MRI)
bool ARM_getInstruction(csh handle, const uint8_t *code, size_t code_len, MCInst *instr, uint16_t *size, uint64_t address, void *info)
@ MCDisassembler_SoftFail
MCOperand * MCOperand_CreateReg1(MCInst *mcInst, unsigned Reg)
unsigned MCInst_getOpcode(const MCInst *inst)
void MCInst_clear(MCInst *inst)
void MCOperand_setReg(MCOperand *op, unsigned Reg)
setReg - Set the register number.
unsigned MCInst_getNumOperands(const MCInst *inst)
MCOperand * MCInst_getOperand(MCInst *inst, unsigned i)
void MCOperand_setImm(MCOperand *op, int64_t Val)
void MCInst_insert0(MCInst *inst, int index, MCOperand *Op)
void MCOperand_CreateReg0(MCInst *mcInst, unsigned Reg)
int64_t MCOperand_getImm(MCOperand *op)
unsigned MCOperand_getReg(const MCOperand *op)
getReg - Returns the register number.
void MCInst_setOpcode(MCInst *inst, unsigned Op)
MCOperand * MCOperand_CreateImm1(MCInst *mcInst, int64_t Val)
void MCOperand_CreateImm0(MCInst *mcInst, int64_t Val)
bool MCOperandInfo_isOptionalDef(const MCOperandInfo *m)
bool MCOperandInfo_isPredicate(const MCOperandInfo *m)
void MCRegisterInfo_InitMCRegisterInfo(MCRegisterInfo *RI, const MCRegisterDesc *D, unsigned NR, unsigned RA, unsigned PC, const MCRegisterClass *C, unsigned NC, uint16_t(*RURoots)[2], unsigned NRU, const MCPhysReg *DL, const char *Strings, const uint16_t *SubIndices, unsigned NumIndices, const uint16_t *RET)
static RZ_NULLABLE RzILOpBitVector * shift(RzILOpBitVector *val, RZ_NULLABLE RzILOpBool **carry_out, arm_shifter type, RZ_OWN RzILOpBitVector *dist)
static RzILOpEffect * writeback(cs_insn *insn, size_t addr_op, RZ_BORROW RzILOpBitVector *addr)
RzBinInfo * info(RzBinFile *bf)
@ CS_MODE_MCLASS
ARM's Cortex-M series.
@ CS_MODE_V8
ARMv8 A32 encodings for ARM.
@ CS_MODE_THUMB
ARM's Thumb mode, including Thumb-2.
#define MODE_IS_BIG_ENDIAN(mode)
#define offsetof(type, member)
return memset(p, 0, total)
static const char struct stat static buf struct stat static buf static vhangup int status
void * load(const char *name, size_t *len)
static struct sockaddr static addrlen static backlog const void static flags void flags
unsigned char ITStates[8]