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

Function DecodeT2LoadImm8

arch/ARM/ARMDisassembler.c:3687–3768  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3685}
3686
3687static DecodeStatus DecodeT2LoadImm8(MCInst *Inst, unsigned Insn,
3688 uint64_t Address, const void* Decoder)
3689{
3690 DecodeStatus S = MCDisassembler_Success;
3691 unsigned Rn = fieldFromInstruction_4(Insn, 16, 4);
3692 unsigned Rt = fieldFromInstruction_4(Insn, 12, 4);
3693 unsigned U = fieldFromInstruction_4(Insn, 9, 1);
3694 unsigned imm = fieldFromInstruction_4(Insn, 0, 8);
3695 unsigned add = fieldFromInstruction_4(Insn, 9, 1);
3696 bool hasMP = ARM_getFeatureBits(Inst->csh->mode, ARM_FeatureMP);
3697 bool hasV7Ops = ARM_getFeatureBits(Inst->csh->mode, ARM_HasV7Ops);
3698
3699 imm |= (U << 8);
3700 imm |= (Rn << 9);
3701
3702 if (Rn == 15) {
3703 switch (MCInst_getOpcode(Inst)) {
3704 case ARM_t2LDRi8:
3705 MCInst_setOpcode(Inst, ARM_t2LDRpci);
3706 break;
3707 case ARM_t2LDRBi8:
3708 MCInst_setOpcode(Inst, ARM_t2LDRBpci);
3709 break;
3710 case ARM_t2LDRSBi8:
3711 MCInst_setOpcode(Inst, ARM_t2LDRSBpci);
3712 break;
3713 case ARM_t2LDRHi8:
3714 MCInst_setOpcode(Inst, ARM_t2LDRHpci);
3715 break;
3716 case ARM_t2LDRSHi8:
3717 MCInst_setOpcode(Inst, ARM_t2LDRSHpci);
3718 break;
3719 case ARM_t2PLDi8:
3720 MCInst_setOpcode(Inst, ARM_t2PLDpci);
3721 break;
3722 case ARM_t2PLIi8:
3723 MCInst_setOpcode(Inst, ARM_t2PLIpci);
3724 break;
3725 default:
3726 return MCDisassembler_Fail;
3727 }
3728
3729 return DecodeT2LoadLabel(Inst, Insn, Address, Decoder);
3730 }
3731
3732 if (Rt == 15) {
3733 switch (MCInst_getOpcode(Inst)) {
3734 case ARM_t2LDRSHi8:
3735 return MCDisassembler_Fail;
3736 case ARM_t2LDRHi8:
3737 if (!add)
3738 MCInst_setOpcode(Inst, ARM_t2PLDWi8);
3739 break;
3740 case ARM_t2LDRSBi8:
3741 MCInst_setOpcode(Inst, ARM_t2PLIi8);
3742 break;
3743 default:
3744 break;

Callers

nothing calls this directly

Calls 7

ARM_getFeatureBitsFunction · 0.85
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…