MCPcopy Create free account
hub / github.com/capstone-engine/capstone / DecodeT2LdStPre

Function DecodeT2LdStPre

arch/ARM/ARMDisassembler.c:4051–4112  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4049}
4050
4051static DecodeStatus DecodeT2LdStPre(MCInst *Inst, unsigned Insn,
4052 uint64_t Address, const void *Decoder)
4053{
4054 DecodeStatus S = MCDisassembler_Success;
4055 unsigned load;
4056 unsigned Rt = fieldFromInstruction_4(Insn, 12, 4);
4057 unsigned Rn = fieldFromInstruction_4(Insn, 16, 4);
4058 unsigned addr = fieldFromInstruction_4(Insn, 0, 8);
4059 addr |= fieldFromInstruction_4(Insn, 9, 1) << 8;
4060 addr |= Rn << 9;
4061 load = fieldFromInstruction_4(Insn, 20, 1);
4062
4063 if (Rn == 15) {
4064 switch (MCInst_getOpcode(Inst)) {
4065 case ARM_t2LDR_PRE:
4066 case ARM_t2LDR_POST:
4067 MCInst_setOpcode(Inst, ARM_t2LDRpci);
4068 break;
4069 case ARM_t2LDRB_PRE:
4070 case ARM_t2LDRB_POST:
4071 MCInst_setOpcode(Inst, ARM_t2LDRBpci);
4072 break;
4073 case ARM_t2LDRH_PRE:
4074 case ARM_t2LDRH_POST:
4075 MCInst_setOpcode(Inst, ARM_t2LDRHpci);
4076 break;
4077 case ARM_t2LDRSB_PRE:
4078 case ARM_t2LDRSB_POST:
4079 if (Rt == 15)
4080 MCInst_setOpcode(Inst, ARM_t2PLIpci);
4081 else
4082 MCInst_setOpcode(Inst, ARM_t2LDRSBpci);
4083 break;
4084 case ARM_t2LDRSH_PRE:
4085 case ARM_t2LDRSH_POST:
4086 MCInst_setOpcode(Inst, ARM_t2LDRSHpci);
4087 break;
4088 default:
4089 return MCDisassembler_Fail;
4090 }
4091
4092 return DecodeT2LoadLabel(Inst, Insn, Address, Decoder);
4093 }
4094
4095 if (!load) {
4096 if (!Check(&S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
4097 return MCDisassembler_Fail;
4098 }
4099
4100 if (!Check(&S, DecodeGPRRegisterClass(Inst, Rt, Address, Decoder)))
4101 return MCDisassembler_Fail;
4102
4103 if (load) {
4104 if (!Check(&S, DecodeGPRRegisterClass(Inst, Rn, Address, Decoder)))
4105 return MCDisassembler_Fail;
4106 }
4107
4108 if (!Check(&S, DecodeT2AddrModeImm8(Inst, addr, Address, Decoder)))

Callers

nothing calls this directly

Calls 6

MCInst_getOpcodeFunction · 0.85
MCInst_setOpcodeFunction · 0.85
DecodeT2LoadLabelFunction · 0.85
DecodeT2AddrModeImm8Function · 0.85
CheckFunction · 0.70
DecodeGPRRegisterClassFunction · 0.70

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…