mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-23 01:24:30 +00:00
Fix issue with disassembler decoding CBZ/CBNZ immediates as negatives when the upper bit is set.
They should always be zero-extended, not sign extended. Added test case. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@178275 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -3049,9 +3049,9 @@ static DecodeStatus DecodeT2BROperand(MCInst &Inst, unsigned Val,
|
|||||||
|
|
||||||
static DecodeStatus DecodeThumbCmpBROperand(MCInst &Inst, unsigned Val,
|
static DecodeStatus DecodeThumbCmpBROperand(MCInst &Inst, unsigned Val,
|
||||||
uint64_t Address, const void *Decoder) {
|
uint64_t Address, const void *Decoder) {
|
||||||
if (!tryAddingSymbolicOperand(Address, Address + SignExtend32<7>(Val<<1) + 4,
|
if (!tryAddingSymbolicOperand(Address, Address + (Val<<1) + 4,
|
||||||
true, 2, Inst, Decoder))
|
true, 2, Inst, Decoder))
|
||||||
Inst.addOperand(MCOperand::CreateImm(SignExtend32<7>(Val << 1)));
|
Inst.addOperand(MCOperand::CreateImm(Val << 1));
|
||||||
return MCDisassembler::Success;
|
return MCDisassembler::Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -254,9 +254,12 @@
|
|||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
# CHECK: cbnz r7, #6
|
# CHECK: cbnz r7, #6
|
||||||
# CHECK: cbnz r7, #12
|
# CHECK: cbnz r7, #12
|
||||||
|
# CHECK: cbz r4, #64
|
||||||
|
|
||||||
0x1f 0xb9
|
0x1f 0xb9
|
||||||
0x37 0xb9
|
0x37 0xb9
|
||||||
|
0x04 0xb3
|
||||||
|
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
# CDP/CDP2
|
# CDP/CDP2
|
||||||
|
Reference in New Issue
Block a user