diff options
| author | Misha Brukman <brukman+llvm@gmail.com> | 2004-07-27 18:40:39 +0000 |
|---|---|---|
| committer | Misha Brukman <brukman+llvm@gmail.com> | 2004-07-27 18:40:39 +0000 |
| commit | a594740016e0901acdf1dbad62b246b5660f1cbd (patch) | |
| tree | 425cd2c65ac505a9544c0c37cdbadc94b312768a | |
| parent | 09396bf1586702d316e2c64424fb92013809fd56 (diff) | |
| download | bcm5719-llvm-a594740016e0901acdf1dbad62b246b5660f1cbd.tar.gz bcm5719-llvm-a594740016e0901acdf1dbad62b246b5660f1cbd.zip | |
Correctly print out long branches, assert on finding pseudo instr COND_BRANCH
Patch by Nate Begeman.
llvm-svn: 15286
| -rw-r--r-- | llvm/lib/Target/PowerPC/PPC32AsmPrinter.cpp | 13 | ||||
| -rw-r--r-- | llvm/lib/Target/PowerPC/PowerPCAsmPrinter.cpp | 13 |
2 files changed, 24 insertions, 2 deletions
diff --git a/llvm/lib/Target/PowerPC/PPC32AsmPrinter.cpp b/llvm/lib/Target/PowerPC/PPC32AsmPrinter.cpp index 5412e0faac0..2da7a521c09 100644 --- a/llvm/lib/Target/PowerPC/PPC32AsmPrinter.cpp +++ b/llvm/lib/Target/PowerPC/PPC32AsmPrinter.cpp @@ -507,7 +507,10 @@ void Printer::printMachineInstruction(const MachineInstr *MI) { // 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) { + if (Opcode == PPC32::COND_BRANCH) { + std::cerr << "Error: untranslated conditional branch psuedo instruction!\n"; + abort(); + } else if (Opcode == PPC32::IMPLICIT_DEF) { O << "; IMPLICIT DEF "; printOp(MI->getOperand(0)); O << "\n"; @@ -569,10 +572,18 @@ void Printer::printMachineInstruction(const MachineInstr *MI) { O << ")\n"; } else { for (i = 0; i < ArgCount; ++i) { + // addi and friends if (i == 1 && ArgCount == 3 && ArgType[2] == PPC32II::Simm16 && MI->getOperand(1).hasAllocatedReg() && MI->getOperand(1).getReg() == PPC32::R0) { O << "0"; + // for long branch support, bc $+8 + } else if (i == 1 && ArgCount == 2 && MI->getOperand(1).isImmediate() && + TII.isBranch(MI->getOpcode())) { + O << "$+8"; + assert(8 == MI->getOperand(i).getImmedValue() + && "branch off PC not to pc+8?"); + //printOp(MI->getOperand(i)); } else { printOp(MI->getOperand(i)); } diff --git a/llvm/lib/Target/PowerPC/PowerPCAsmPrinter.cpp b/llvm/lib/Target/PowerPC/PowerPCAsmPrinter.cpp index 5412e0faac0..2da7a521c09 100644 --- a/llvm/lib/Target/PowerPC/PowerPCAsmPrinter.cpp +++ b/llvm/lib/Target/PowerPC/PowerPCAsmPrinter.cpp @@ -507,7 +507,10 @@ void Printer::printMachineInstruction(const MachineInstr *MI) { // 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) { + if (Opcode == PPC32::COND_BRANCH) { + std::cerr << "Error: untranslated conditional branch psuedo instruction!\n"; + abort(); + } else if (Opcode == PPC32::IMPLICIT_DEF) { O << "; IMPLICIT DEF "; printOp(MI->getOperand(0)); O << "\n"; @@ -569,10 +572,18 @@ void Printer::printMachineInstruction(const MachineInstr *MI) { O << ")\n"; } else { for (i = 0; i < ArgCount; ++i) { + // addi and friends if (i == 1 && ArgCount == 3 && ArgType[2] == PPC32II::Simm16 && MI->getOperand(1).hasAllocatedReg() && MI->getOperand(1).getReg() == PPC32::R0) { O << "0"; + // for long branch support, bc $+8 + } else if (i == 1 && ArgCount == 2 && MI->getOperand(1).isImmediate() && + TII.isBranch(MI->getOpcode())) { + O << "$+8"; + assert(8 == MI->getOperand(i).getImmedValue() + && "branch off PC not to pc+8?"); + //printOp(MI->getOperand(i)); } else { printOp(MI->getOperand(i)); } |

