mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-20 19:42:54 +02:00
* Fn args passed in registers are now recorded as used by the call instruction
`-> asm printer updated to not print out those registers with the call instr All of Shootout tests now work. Great thanks to Nate Begeman for the patch! llvm-svn: 15015
This commit is contained in:
parent
fdc633a29b
commit
bec77933fa
@ -492,14 +492,29 @@ void Printer::printMachineInstruction(const MachineInstr *MI) {
|
||||
"Instruction requires 64 bit support");
|
||||
++EmittedInsts;
|
||||
|
||||
// CALLpcrel and CALLindirect are handled specially here to print only the
|
||||
// appropriate number of args that the assembler expects. This is because
|
||||
// may have many arguments appended to record the uses of registers that are
|
||||
// holding arguments to the called function.
|
||||
if (Opcode == PPC32::IMPLICIT_DEF) {
|
||||
O << "; IMPLICIT DEF ";
|
||||
printOp(MI->getOperand(0));
|
||||
O << "\n";
|
||||
return;
|
||||
}
|
||||
} else if (Opcode == PPC32::CALLpcrel) {
|
||||
O << TII.getName(MI->getOpcode()) << " ";
|
||||
printOp(MI->getOperand(0));
|
||||
O << "\n";
|
||||
return;
|
||||
} else if (Opcode == PPC32::CALLindirect) {
|
||||
O << TII.getName(MI->getOpcode()) << " ";
|
||||
printOp(MI->getOperand(0));
|
||||
O << ", ";
|
||||
printOp(MI->getOperand(1));
|
||||
O << "\n";
|
||||
return;
|
||||
} else if (Opcode == PPC32::MovePCtoLR) {
|
||||
// FIXME: should probably be converted to cout.width and cout.fill
|
||||
if (Opcode == PPC32::MovePCtoLR) {
|
||||
O << "bl \"L0000" << labelNumber << "$pb\"\n";
|
||||
O << "\"L0000" << labelNumber << "$pb\":\n";
|
||||
O << "\tmflr ";
|
||||
@ -509,9 +524,6 @@ void Printer::printMachineInstruction(const MachineInstr *MI) {
|
||||
}
|
||||
|
||||
O << TII.getName(MI->getOpcode()) << " ";
|
||||
DEBUG(std::cerr << TII.getName(MI->getOpcode()) << " expects "
|
||||
<< ArgCount << " args\n");
|
||||
|
||||
if (Opcode == PPC32::LOADLoAddr) {
|
||||
printOp(MI->getOperand(0));
|
||||
O << ", lo16(";
|
||||
|
@ -492,14 +492,29 @@ void Printer::printMachineInstruction(const MachineInstr *MI) {
|
||||
"Instruction requires 64 bit support");
|
||||
++EmittedInsts;
|
||||
|
||||
// CALLpcrel and CALLindirect are handled specially here to print only the
|
||||
// appropriate number of args that the assembler expects. This is because
|
||||
// may have many arguments appended to record the uses of registers that are
|
||||
// holding arguments to the called function.
|
||||
if (Opcode == PPC32::IMPLICIT_DEF) {
|
||||
O << "; IMPLICIT DEF ";
|
||||
printOp(MI->getOperand(0));
|
||||
O << "\n";
|
||||
return;
|
||||
}
|
||||
} else if (Opcode == PPC32::CALLpcrel) {
|
||||
O << TII.getName(MI->getOpcode()) << " ";
|
||||
printOp(MI->getOperand(0));
|
||||
O << "\n";
|
||||
return;
|
||||
} else if (Opcode == PPC32::CALLindirect) {
|
||||
O << TII.getName(MI->getOpcode()) << " ";
|
||||
printOp(MI->getOperand(0));
|
||||
O << ", ";
|
||||
printOp(MI->getOperand(1));
|
||||
O << "\n";
|
||||
return;
|
||||
} else if (Opcode == PPC32::MovePCtoLR) {
|
||||
// FIXME: should probably be converted to cout.width and cout.fill
|
||||
if (Opcode == PPC32::MovePCtoLR) {
|
||||
O << "bl \"L0000" << labelNumber << "$pb\"\n";
|
||||
O << "\"L0000" << labelNumber << "$pb\":\n";
|
||||
O << "\tmflr ";
|
||||
@ -509,9 +524,6 @@ void Printer::printMachineInstruction(const MachineInstr *MI) {
|
||||
}
|
||||
|
||||
O << TII.getName(MI->getOpcode()) << " ";
|
||||
DEBUG(std::cerr << TII.getName(MI->getOpcode()) << " expects "
|
||||
<< ArgCount << " args\n");
|
||||
|
||||
if (Opcode == PPC32::LOADLoAddr) {
|
||||
printOp(MI->getOperand(0));
|
||||
O << ", lo16(";
|
||||
|
Loading…
Reference in New Issue
Block a user