diff options
author | Evan Cheng <evan.cheng@apple.com> | 2006-02-26 08:28:12 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2006-02-26 08:28:12 +0000 |
commit | a09bd8190cf5ae29c720021738b370d93f404ac1 (patch) | |
tree | 84723c6dd4981fde8e4328d82cf89f4908d07f01 | |
parent | a3f332bdc3e8fd1ac78dd3dc868d871e9086c5fd (diff) |
Fixed ConstantPoolIndex operand asm print bug. This fixed 2005-07-17-INT-To-FP
and 2005-05-12-Int64ToFP.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26380 91177308-0d34-0410-b5e6-96231b3b80d8
-rwxr-xr-x | lib/Target/X86/X86ATTAsmPrinter.cpp | 24 | ||||
-rwxr-xr-x | lib/Target/X86/X86IntelAsmPrinter.cpp | 26 |
2 files changed, 31 insertions, 19 deletions
diff --git a/lib/Target/X86/X86ATTAsmPrinter.cpp b/lib/Target/X86/X86ATTAsmPrinter.cpp index f8f54d434a..e9da1855dd 100755 --- a/lib/Target/X86/X86ATTAsmPrinter.cpp +++ b/lib/Target/X86/X86ATTAsmPrinter.cpp @@ -115,6 +115,20 @@ void X86ATTAsmPrinter::printOperand(const MachineInstr *MI, unsigned OpNo, std::cerr << "Shouldn't use addPCDisp() when building X86 MachineInstrs"; abort (); return; + case MachineOperand::MO_ConstantPoolIndex: { + bool isMemOp = Modifier && !strcmp(Modifier, "mem"); + if (!isMemOp) O << '$'; + O << PrivateGlobalPrefix << "CPI" << getFunctionNumber() << "_" + << MO.getConstantPoolIndex(); + if (forDarwin && TM.getRelocationModel() == Reloc::PIC) + O << "-\"L" << getFunctionNumber() << "$pb\""; + int Offset = MO.getOffset(); + if (Offset > 0) + O << "+" << Offset; + else if (Offset < 0) + O << Offset; + return; + } case MachineOperand::MO_GlobalAddress: { bool isCallOp = Modifier && !strcmp(Modifier, "call"); bool isMemOp = Modifier && !strcmp(Modifier, "mem"); @@ -198,16 +212,8 @@ void X86ATTAsmPrinter::printMemReference(const MachineInstr *MI, unsigned Op){ return; } - if (DispSpec.isGlobalAddress()) { + if (DispSpec.isGlobalAddress() || DispSpec.isConstantPoolIndex()) { printOperand(MI, Op+3, "mem"); - } else if (DispSpec.isConstantPoolIndex()) { - O << PrivateGlobalPrefix << "CPI" << getFunctionNumber() << "_" - << DispSpec.getConstantPoolIndex(); - if (forDarwin && TM.getRelocationModel() == Reloc::PIC) - O << "-\"L" << getFunctionNumber() << "$pb\""; - if (DispSpec.getOffset()) - O << "+" << DispSpec.getOffset(); - return; } else { int DispVal = DispSpec.getImmedValue(); if (DispVal || (!IndexReg.getReg() && !BaseReg.getReg())) diff --git a/lib/Target/X86/X86IntelAsmPrinter.cpp b/lib/Target/X86/X86IntelAsmPrinter.cpp index 7f4592bb5b..ed673df9fe 100755 --- a/lib/Target/X86/X86IntelAsmPrinter.cpp +++ b/lib/Target/X86/X86IntelAsmPrinter.cpp @@ -109,6 +109,21 @@ void X86IntelAsmPrinter::printOp(const MachineOperand &MO, assert(0 && "Shouldn't use addPCDisp() when building X86 MachineInstrs"); abort (); return; + case MachineOperand::MO_ConstantPoolIndex: { + bool isMemOp = Modifier && !strcmp(Modifier, "mem"); + if (!isMemOp) O << "OFFSET "; + O << "[" << PrivateGlobalPrefix << "CPI" << getFunctionNumber() << "_" + << MO.getConstantPoolIndex(); + if (forDarwin && TM.getRelocationModel() == Reloc::PIC) + O << "-\"L" << getFunctionNumber() << "$pb\""; + int Offset = MO.getOffset(); + if (Offset > 0) + O << " + " << Offset; + else if (Offset < 0) + O << Offset; + O << "]"; + return; + } case MachineOperand::MO_GlobalAddress: { bool isCallOp = Modifier && !strcmp(Modifier, "call"); bool isMemOp = Modifier && !strcmp(Modifier, "mem"); @@ -192,19 +207,10 @@ void X86IntelAsmPrinter::printMemReference(const MachineInstr *MI, unsigned Op){ NeedPlus = true; } - if (DispSpec.isGlobalAddress()) { + if (DispSpec.isGlobalAddress() || DispSpec.isConstantPoolIndex()) { if (NeedPlus) O << " + "; printOp(DispSpec, "mem"); - } else if (DispSpec.isConstantPoolIndex()) { - O << "[" << PrivateGlobalPrefix << "CPI" << getFunctionNumber() << "_" - << DispSpec.getConstantPoolIndex(); - if (forDarwin && TM.getRelocationModel() == Reloc::PIC) - O << "-\"L" << getFunctionNumber() << "$pb\""; - if (DispSpec.getOffset()) - O << " + " << DispSpec.getOffset(); - O << "]"; - return; } else { int DispVal = DispSpec.getImmedValue(); if (DispVal || (!BaseReg.getReg() && !IndexReg.getReg())) { |