| 3768 | } |
| 3769 | |
| 3770 | static DecodeStatus DecodeT2LoadImm12(MCInst *Inst, unsigned Insn, |
| 3771 | uint64_t Address, const void* Decoder) |
| 3772 | { |
| 3773 | DecodeStatus S = MCDisassembler_Success; |
| 3774 | unsigned Rn = fieldFromInstruction_4(Insn, 16, 4); |
| 3775 | unsigned Rt = fieldFromInstruction_4(Insn, 12, 4); |
| 3776 | unsigned imm = fieldFromInstruction_4(Insn, 0, 12); |
| 3777 | bool hasMP = ARM_getFeatureBits(Inst->csh->mode, ARM_FeatureMP); |
| 3778 | bool hasV7Ops = ARM_getFeatureBits(Inst->csh->mode, ARM_HasV7Ops); |
| 3779 | |
| 3780 | imm |= (Rn << 13); |
| 3781 | |
| 3782 | if (Rn == 15) { |
| 3783 | switch (MCInst_getOpcode(Inst)) { |
| 3784 | case ARM_t2LDRi12: |
| 3785 | MCInst_setOpcode(Inst, ARM_t2LDRpci); |
| 3786 | break; |
| 3787 | case ARM_t2LDRHi12: |
| 3788 | MCInst_setOpcode(Inst, ARM_t2LDRHpci); |
| 3789 | break; |
| 3790 | case ARM_t2LDRSHi12: |
| 3791 | MCInst_setOpcode(Inst, ARM_t2LDRSHpci); |
| 3792 | break; |
| 3793 | case ARM_t2LDRBi12: |
| 3794 | MCInst_setOpcode(Inst, ARM_t2LDRBpci); |
| 3795 | break; |
| 3796 | case ARM_t2LDRSBi12: |
| 3797 | MCInst_setOpcode(Inst, ARM_t2LDRSBpci); |
| 3798 | break; |
| 3799 | case ARM_t2PLDi12: |
| 3800 | MCInst_setOpcode(Inst, ARM_t2PLDpci); |
| 3801 | break; |
| 3802 | case ARM_t2PLIi12: |
| 3803 | MCInst_setOpcode(Inst, ARM_t2PLIpci); |
| 3804 | break; |
| 3805 | default: |
| 3806 | return MCDisassembler_Fail; |
| 3807 | } |
| 3808 | return DecodeT2LoadLabel(Inst, Insn, Address, Decoder); |
| 3809 | } |
| 3810 | |
| 3811 | if (Rt == 15) { |
| 3812 | switch (MCInst_getOpcode(Inst)) { |
| 3813 | case ARM_t2LDRSHi12: |
| 3814 | return MCDisassembler_Fail; |
| 3815 | case ARM_t2LDRHi12: |
| 3816 | MCInst_setOpcode(Inst, ARM_t2PLDWi12); |
| 3817 | break; |
| 3818 | case ARM_t2LDRSBi12: |
| 3819 | MCInst_setOpcode(Inst, ARM_t2PLIi12); |
| 3820 | break; |
| 3821 | default: |
| 3822 | break; |
| 3823 | } |
| 3824 | } |
| 3825 | |
| 3826 | switch (MCInst_getOpcode(Inst)) { |
| 3827 | case ARM_t2PLDi12: |
nothing calls this directly
no test coverage detected
searching dependent graphs…