mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-07-19 03:29:22 +00:00
Fix PR1103 and Regression/CodeGen/X86/2007-01-13-StackPtrIndex.ll
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33189 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
65339307a5
commit
32c9a4527d
@ -382,10 +382,8 @@ void X86ATTAsmPrinter::printSSECC(const MachineInstr *MI, unsigned Op) {
|
||||
void X86ATTAsmPrinter::printMemReference(const MachineInstr *MI, unsigned Op,
|
||||
const char *Modifier){
|
||||
assert(isMem(MI, Op) && "Invalid memory reference!");
|
||||
|
||||
const MachineOperand &BaseReg = MI->getOperand(Op);
|
||||
int ScaleVal = MI->getOperand(Op+1).getImmedValue();
|
||||
const MachineOperand &IndexReg = MI->getOperand(Op+2);
|
||||
MachineOperand BaseReg = MI->getOperand(Op);
|
||||
MachineOperand IndexReg = MI->getOperand(Op+2);
|
||||
const MachineOperand &DispSpec = MI->getOperand(Op+3);
|
||||
|
||||
bool NotRIPRel = IndexReg.getReg() || BaseReg.getReg();
|
||||
@ -400,18 +398,28 @@ void X86ATTAsmPrinter::printMemReference(const MachineInstr *MI, unsigned Op,
|
||||
}
|
||||
|
||||
if (IndexReg.getReg() || BaseReg.getReg()) {
|
||||
O << "(";
|
||||
if (BaseReg.getReg()) {
|
||||
printOperand(MI, Op, Modifier);
|
||||
unsigned ScaleVal = MI->getOperand(Op+1).getImmedValue();
|
||||
unsigned BaseRegOperand = 0, IndexRegOperand = 2;
|
||||
|
||||
// There are cases where we can end up with ESP/RSP in the indexreg slot.
|
||||
// If this happens, swap the base/index register to support assemblers that
|
||||
// don't work when the index is *SP.
|
||||
if (IndexReg.getReg() == X86::ESP || IndexReg.getReg() == X86::RSP) {
|
||||
assert(ScaleVal == 1 && "Scale not supported for stack pointer!");
|
||||
std::swap(BaseReg, IndexReg);
|
||||
std::swap(BaseRegOperand, IndexRegOperand);
|
||||
}
|
||||
|
||||
O << "(";
|
||||
if (BaseReg.getReg())
|
||||
printOperand(MI, Op+BaseRegOperand, Modifier);
|
||||
|
||||
if (IndexReg.getReg()) {
|
||||
O << ",";
|
||||
printOperand(MI, Op+2, Modifier);
|
||||
printOperand(MI, Op+IndexRegOperand, Modifier);
|
||||
if (ScaleVal != 1)
|
||||
O << "," << ScaleVal;
|
||||
}
|
||||
|
||||
O << ")";
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user