diff options
author | Nate Begeman <natebegeman@mac.com> | 2004-08-19 05:20:54 +0000 |
---|---|---|
committer | Nate Begeman <natebegeman@mac.com> | 2004-08-19 05:20:54 +0000 |
commit | e4e6d92d1d7fc91bc285d2c0727c46e1ffec62fc (patch) | |
tree | e438d2166b5f56e6d05710026ce470c6d12ef153 /llvm/lib/Target/PowerPC/PPC32AsmPrinter.cpp | |
parent | dc20389b5cea0d20c4a939a532cda929bec4d348 (diff) | |
download | bcm5719-llvm-e4e6d92d1d7fc91bc285d2c0727c46e1ffec62fc.tar.gz bcm5719-llvm-e4e6d92d1d7fc91bc285d2c0727c46e1ffec62fc.zip |
Clean up floating point instruction selection.
Change int->float cast code to put conversion constants in constant pool.
Shorten code sequence for constant pool fp loads.
Remove LOADLoDirect/LOADLoIndirect psuedo instructions and tweak asmwriter
llvm-svn: 15913
Diffstat (limited to 'llvm/lib/Target/PowerPC/PPC32AsmPrinter.cpp')
-rw-r--r-- | llvm/lib/Target/PowerPC/PPC32AsmPrinter.cpp | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/llvm/lib/Target/PowerPC/PPC32AsmPrinter.cpp b/llvm/lib/Target/PowerPC/PPC32AsmPrinter.cpp index 07aaa49be59..1d31e3b1302 100644 --- a/llvm/lib/Target/PowerPC/PPC32AsmPrinter.cpp +++ b/llvm/lib/Target/PowerPC/PPC32AsmPrinter.cpp @@ -289,6 +289,7 @@ void PPC32AsmPrinter::printMachineInstruction(const MachineInstr *MI) { std::cerr << "Error: untranslated conditional branch psuedo instruction!\n"; abort(); } else if (Opcode == PPC::IMPLICIT_DEF) { + --EmittedInsts; // Not an actual machine instruction O << "; IMPLICIT DEF "; printOp(MI->getOperand(0)); O << "\n"; @@ -306,6 +307,7 @@ void PPC32AsmPrinter::printMachineInstruction(const MachineInstr *MI) { O << "\n"; return; } else if (Opcode == PPC::MovePCtoLR) { + ++EmittedInsts; // Actually two machine instructions // FIXME: should probably be converted to cout.width and cout.fill O << "bl \"L0000" << LabelNumber << "$pb\"\n"; O << "\"L0000" << LabelNumber << "$pb\":\n"; @@ -316,27 +318,28 @@ void PPC32AsmPrinter::printMachineInstruction(const MachineInstr *MI) { } O << TII.getName(Opcode) << " "; - if (Opcode == PPC::LOADLoDirect || Opcode == PPC::LOADLoIndirect) { + if (Opcode == PPC::LOADHiAddr) { printOp(MI->getOperand(0)); - O << ", lo16("; - printOp(MI->getOperand(2), true /* LoadAddrOp */); - O << "-\"L0000" << LabelNumber << "$pb\")"; - O << "("; + O << ", "; if (MI->getOperand(1).getReg() == PPC::R0) O << "0"; else printOp(MI->getOperand(1)); - O << ")\n"; - } else if (Opcode == PPC::LOADHiAddr) { + O << ", ha16(" ; + printOp(MI->getOperand(2), true /* LoadAddrOp */); + O << "-\"L0000" << LabelNumber << "$pb\")\n"; + } else if (ArgCount == 3 && (MI->getOperand(2).isConstantPoolIndex() + || MI->getOperand(2).isGlobalAddress())) { printOp(MI->getOperand(0)); - O << ", "; + O << ", lo16("; + printOp(MI->getOperand(2), true /* LoadAddrOp */); + O << "-\"L0000" << LabelNumber << "$pb\")"; + O << "("; if (MI->getOperand(1).getReg() == PPC::R0) O << "0"; else printOp(MI->getOperand(1)); - O << ", ha16(" ; - printOp(MI->getOperand(2), true /* LoadAddrOp */); - O << "-\"L0000" << LabelNumber << "$pb\")\n"; + O << ")\n"; } else if (ArgCount == 3 && ArgType[1] == PPCII::Disimm16) { printOp(MI->getOperand(0)); O << ", "; |