mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-02 07:17:36 +00:00
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@161162 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1040,7 +1040,8 @@ public:
|
||||
// Immediate offset a multiple of 4 in range [-1020, 1020].
|
||||
if (!Memory.OffsetImm) return true;
|
||||
int64_t Val = Memory.OffsetImm->getValue();
|
||||
return Val >= -1020 && Val <= 1020 && (Val & 3) == 0;
|
||||
// Special case, #-0 is INT32_MIN.
|
||||
return (Val >= -1020 && Val <= 1020 && (Val & 3) == 0) || Val == INT32_MIN;
|
||||
}
|
||||
bool isMemImm0_1020s4Offset() const {
|
||||
if (!isMemory() || Memory.OffsetRegNum != 0 || Memory.Alignment != 0)
|
||||
|
||||
@@ -3151,9 +3151,14 @@ static DecodeStatus DecodeT2LoadShift(MCInst &Inst, unsigned Insn,
|
||||
|
||||
static DecodeStatus DecodeT2Imm8S4(MCInst &Inst, unsigned Val,
|
||||
uint64_t Address, const void *Decoder) {
|
||||
int imm = Val & 0xFF;
|
||||
if (!(Val & 0x100)) imm *= -1;
|
||||
Inst.addOperand(MCOperand::CreateImm(imm << 2));
|
||||
if (Val == 0)
|
||||
Inst.addOperand(MCOperand::CreateImm(INT32_MIN));
|
||||
else {
|
||||
int imm = Val & 0xFF;
|
||||
|
||||
if (!(Val & 0x100)) imm *= -1;
|
||||
Inst.addOperand(MCOperand::CreateImm(imm << 2));
|
||||
}
|
||||
|
||||
return MCDisassembler::Success;
|
||||
}
|
||||
|
||||
@@ -972,12 +972,17 @@ void ARMInstPrinter::printT2AddrModeImm8s4Operand(const MCInst *MI,
|
||||
|
||||
O << "[" << getRegisterName(MO1.getReg());
|
||||
|
||||
int32_t OffImm = (int32_t)MO2.getImm() / 4;
|
||||
int32_t OffImm = (int32_t)MO2.getImm();
|
||||
|
||||
assert(((OffImm & 0x3) == 0) && "Not a valid immediate!");
|
||||
|
||||
// Don't print +0.
|
||||
if (OffImm < 0)
|
||||
O << ", #-" << -OffImm * 4;
|
||||
if (OffImm == INT32_MIN)
|
||||
O << ", #-0";
|
||||
else if (OffImm < 0)
|
||||
O << ", #-" << -OffImm;
|
||||
else if (OffImm > 0)
|
||||
O << ", #" << OffImm * 4;
|
||||
O << ", #" << OffImm;
|
||||
O << "]";
|
||||
}
|
||||
|
||||
@@ -1009,15 +1014,17 @@ void ARMInstPrinter::printT2AddrModeImm8s4OffsetOperand(const MCInst *MI,
|
||||
unsigned OpNum,
|
||||
raw_ostream &O) {
|
||||
const MCOperand &MO1 = MI->getOperand(OpNum);
|
||||
int32_t OffImm = (int32_t)MO1.getImm() / 4;
|
||||
int32_t OffImm = (int32_t)MO1.getImm();
|
||||
|
||||
assert(((OffImm & 0x3) == 0) && "Not a valid immediate!");
|
||||
|
||||
// Don't print +0.
|
||||
if (OffImm != 0) {
|
||||
O << ", ";
|
||||
if (OffImm < 0)
|
||||
O << "#-" << -OffImm * 4;
|
||||
else if (OffImm > 0)
|
||||
O << "#" << OffImm * 4;
|
||||
}
|
||||
if (OffImm == INT32_MIN)
|
||||
O << ", #-0";
|
||||
else if (OffImm < 0)
|
||||
O << ", #-" << -OffImm;
|
||||
else if (OffImm > 0)
|
||||
O << ", #" << OffImm;
|
||||
}
|
||||
|
||||
void ARMInstPrinter::printT2AddrModeSoRegOperand(const MCInst *MI,
|
||||
|
||||
Reference in New Issue
Block a user