forked from OSchip/llvm-project
Fix a few more places in the ARM disassembler so that branches get
symbolic operands added when using the C disassembler API. llvm-svn: 154628
This commit is contained in:
parent
02eee4d4f7
commit
40d4e47003
|
@ -3197,6 +3197,7 @@ def t2B : T2I<(outs), (ins uncondbrtarget:$target), IIC_Br,
|
|||
let Inst{13} = target{17};
|
||||
let Inst{21-16} = target{16-11};
|
||||
let Inst{10-0} = target{10-0};
|
||||
let DecoderMethod = "DecodeT2BInstruction";
|
||||
}
|
||||
|
||||
let isNotDuplicable = 1, isIndirectBranch = 1 in {
|
||||
|
|
|
@ -181,6 +181,8 @@ static DecodeStatus DecodeAddrMode5Operand(MCInst &Inst, unsigned Val,
|
|||
uint64_t Address, const void *Decoder);
|
||||
static DecodeStatus DecodeAddrMode7Operand(MCInst &Inst, unsigned Val,
|
||||
uint64_t Address, const void *Decoder);
|
||||
static DecodeStatus DecodeT2BInstruction(MCInst &Inst, unsigned Insn,
|
||||
uint64_t Address, const void *Decoder);
|
||||
static DecodeStatus DecodeBranchImmInstruction(MCInst &Inst,unsigned Insn,
|
||||
uint64_t Address, const void *Decoder);
|
||||
static DecodeStatus DecodeAddrMode6Operand(MCInst &Inst, unsigned Val,
|
||||
|
@ -2029,6 +2031,21 @@ static DecodeStatus DecodeAddrMode7Operand(MCInst &Inst, unsigned Val,
|
|||
return DecodeGPRRegisterClass(Inst, Val, Address, Decoder);
|
||||
}
|
||||
|
||||
static DecodeStatus
|
||||
DecodeT2BInstruction(MCInst &Inst, unsigned Insn,
|
||||
uint64_t Address, const void *Decoder) {
|
||||
DecodeStatus S = MCDisassembler::Success;
|
||||
unsigned imm = (fieldFromInstruction32(Insn, 0, 11) << 0) |
|
||||
(fieldFromInstruction32(Insn, 11, 1) << 18) |
|
||||
(fieldFromInstruction32(Insn, 13, 1) << 17) |
|
||||
(fieldFromInstruction32(Insn, 16, 6) << 11) |
|
||||
(fieldFromInstruction32(Insn, 26, 1) << 19);
|
||||
if (!tryAddingSymbolicOperand(Address, Address + SignExtend32<20>(imm<<1) + 4,
|
||||
true, 4, Inst, Decoder))
|
||||
Inst.addOperand(MCOperand::CreateImm(SignExtend32<20>(imm << 1)));
|
||||
return S;
|
||||
}
|
||||
|
||||
static DecodeStatus
|
||||
DecodeBranchImmInstruction(MCInst &Inst, unsigned Insn,
|
||||
uint64_t Address, const void *Decoder) {
|
||||
|
@ -2955,19 +2972,25 @@ static DecodeStatus DecodeThumbAddSpecialReg(MCInst &Inst, uint16_t Insn,
|
|||
|
||||
static DecodeStatus DecodeThumbBROperand(MCInst &Inst, unsigned Val,
|
||||
uint64_t Address, const void *Decoder) {
|
||||
Inst.addOperand(MCOperand::CreateImm(SignExtend32<12>(Val << 1)));
|
||||
if (!tryAddingSymbolicOperand(Address, Address + SignExtend32<12>(Val<<1) + 4,
|
||||
true, 2, Inst, Decoder))
|
||||
Inst.addOperand(MCOperand::CreateImm(SignExtend32<12>(Val << 1)));
|
||||
return MCDisassembler::Success;
|
||||
}
|
||||
|
||||
static DecodeStatus DecodeT2BROperand(MCInst &Inst, unsigned Val,
|
||||
uint64_t Address, const void *Decoder) {
|
||||
Inst.addOperand(MCOperand::CreateImm(SignExtend32<21>(Val)));
|
||||
if (!tryAddingSymbolicOperand(Address, Address + SignExtend32<22>(Val<<1) + 4,
|
||||
true, 4, Inst, Decoder))
|
||||
Inst.addOperand(MCOperand::CreateImm(SignExtend32<21>(Val)));
|
||||
return MCDisassembler::Success;
|
||||
}
|
||||
|
||||
static DecodeStatus DecodeThumbCmpBROperand(MCInst &Inst, unsigned Val,
|
||||
uint64_t Address, const void *Decoder) {
|
||||
Inst.addOperand(MCOperand::CreateImm(SignExtend32<7>(Val << 1)));
|
||||
if (!tryAddingSymbolicOperand(Address, Address + SignExtend32<7>(Val<<1) + 4,
|
||||
true, 2, Inst, Decoder))
|
||||
Inst.addOperand(MCOperand::CreateImm(SignExtend32<7>(Val << 1)));
|
||||
return MCDisassembler::Success;
|
||||
}
|
||||
|
||||
|
@ -3389,7 +3412,9 @@ static DecodeStatus DecodeT2SOImm(MCInst &Inst, unsigned Val,
|
|||
static DecodeStatus
|
||||
DecodeThumbBCCTargetOperand(MCInst &Inst, unsigned Val,
|
||||
uint64_t Address, const void *Decoder){
|
||||
Inst.addOperand(MCOperand::CreateImm(Val << 1));
|
||||
if (!tryAddingSymbolicOperand(Address, Address + SignExtend32<8>(Val<<1) + 4,
|
||||
true, 2, Inst, Decoder))
|
||||
Inst.addOperand(MCOperand::CreateImm(SignExtend32<8>(Val << 1)));
|
||||
return MCDisassembler::Success;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue