arm: correct the alias instruction id for MOVsi instructions. bug reported by @joelpx
This commit is contained in:
parent
98a0b20df6
commit
91a1cb4b03
|
@ -6072,6 +6072,7 @@ static void printInstruction(MCInst *MI, SStream *O, MCRegisterInfo *MRI)
|
|||
};
|
||||
#endif
|
||||
|
||||
// printf(">>> opcode: %u\n", MCInst_getOpcode(MI));
|
||||
// Emit the opcode for the instruction.
|
||||
uint64_t Bits1 = OpInfo[MCInst_getOpcode(MI)];
|
||||
uint64_t Bits2 = OpInfo2[MCInst_getOpcode(MI)];
|
||||
|
|
|
@ -431,6 +431,7 @@ void ARM_printInst(MCInst *MI, SStream *O, void *Info)
|
|||
unsigned Opcode = MCInst_getOpcode(MI), tmp, i, pubOpcode;
|
||||
|
||||
|
||||
// printf(">>> Opcode 0: %u\n", MCInst_getOpcode(MI));
|
||||
switch(Opcode) {
|
||||
// Check for HINT instructions w/ canonical names.
|
||||
case ARM_HINT:
|
||||
|
@ -507,11 +508,32 @@ void ARM_printInst(MCInst *MI, SStream *O, void *Info)
|
|||
|
||||
case ARM_MOVsi: {
|
||||
// FIXME: Thumb variants?
|
||||
unsigned int opc;
|
||||
MCOperand *Dst = MCInst_getOperand(MI, 0);
|
||||
MCOperand *MO1 = MCInst_getOperand(MI, 1);
|
||||
MCOperand *MO2 = MCInst_getOperand(MI, 2);
|
||||
|
||||
SStream_concat0(O, ARM_AM_getShiftOpcStr(ARM_AM_getSORegShOp((unsigned int)MCOperand_getImm(MO2))));
|
||||
opc = ARM_AM_getSORegShOp((unsigned int)MCOperand_getImm(MO2));
|
||||
SStream_concat0(O, ARM_AM_getShiftOpcStr(opc));
|
||||
switch(opc) {
|
||||
default:
|
||||
break;
|
||||
case ARM_AM_asr:
|
||||
MCInst_setOpcodePub(MI, ARM_INS_ASR);
|
||||
break;
|
||||
case ARM_AM_lsl:
|
||||
MCInst_setOpcodePub(MI, ARM_INS_LSL);
|
||||
break;
|
||||
case ARM_AM_lsr:
|
||||
MCInst_setOpcodePub(MI, ARM_INS_LSR);
|
||||
break;
|
||||
case ARM_AM_ror:
|
||||
MCInst_setOpcodePub(MI, ARM_INS_ROR);
|
||||
break;
|
||||
case ARM_AM_rrx:
|
||||
MCInst_setOpcodePub(MI, ARM_INS_RRX);
|
||||
break;
|
||||
}
|
||||
printSBitModifierOperand(MI, 5, O);
|
||||
printPredicateOperand(MI, 3, O);
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ all_tests = (
|
|||
|
||||
def print_insn_detail(insn):
|
||||
# print address, mnemonic and operands
|
||||
print("0x%x:\t%s\t%s" % (insn.address, insn.mnemonic, insn.op_str))
|
||||
print("0x%x:\t%s\t%s" % (insn.id, insn.address, insn.mnemonic, insn.op_str))
|
||||
|
||||
# "data" instruction generated by SKIPDATA option has no detail
|
||||
if insn.id == 0:
|
||||
|
|
Loading…
Reference in New Issue