| 3685 | } |
| 3686 | |
| 3687 | static 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; |
nothing calls this directly
no test coverage detected
searching dependent graphs…