diff options
| author | Chris Lattner <sabre@nondot.org> | 2009-10-20 01:11:37 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2009-10-20 01:11:37 +0000 |
| commit | 484d2e9491d736a9a5f21b9a8a26d2a8bdadcd28 (patch) | |
| tree | 0aa97fea65314e11095d1e2b76154edda7cb215e /llvm/lib/Target | |
| parent | 43c5589a7ea55a1f33447173460db92cab8f93a7 (diff) | |
| download | bcm5719-llvm-484d2e9491d736a9a5f21b9a8a26d2a8bdadcd28.tar.gz bcm5719-llvm-484d2e9491d736a9a5f21b9a8a26d2a8bdadcd28.zip | |
lower ARM::MOVi32imm properly.
llvm-svn: 84583
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp | 38 |
1 files changed, 36 insertions, 2 deletions
diff --git a/llvm/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp b/llvm/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp index af2706a5451..66cc6f36745 100644 --- a/llvm/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp +++ b/llvm/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp @@ -1413,9 +1413,43 @@ void ARMAsmPrinter::printInstructionThroughMCStreamer(const MachineInstr *MI) { } return; } - // FIXME: Also MOVi32imm. - + case ARM::MOVi32imm: { // FIXME: Remove asmstring from td file. + // This is a hack that lowers as a two instruction sequence. + unsigned DstReg = MI->getOperand(0).getReg(); + unsigned ImmVal = (unsigned)MI->getOperand(1).getImm(); + + { + MCInst TmpInst; + TmpInst.setOpcode(ARM::MOVi16); + TmpInst.addOperand(MCOperand::CreateReg(DstReg)); // dstreg + TmpInst.addOperand(MCOperand::CreateImm(ImmVal & 65535)); // lower16(imm) + + // Predicate. + TmpInst.addOperand(MCOperand::CreateImm(MI->getOperand(2).getImm())); + TmpInst.addOperand(MCOperand::CreateReg(MI->getOperand(3).getReg())); + + printMCInst(&TmpInst); + O << '\n'; + } + + { + MCInst TmpInst; + TmpInst.setOpcode(ARM::MOVTi16); + TmpInst.addOperand(MCOperand::CreateReg(DstReg)); // dstreg + TmpInst.addOperand(MCOperand::CreateReg(DstReg)); // srcreg + TmpInst.addOperand(MCOperand::CreateImm(ImmVal >> 16)); // upper16(imm) + + // Predicate. + TmpInst.addOperand(MCOperand::CreateImm(MI->getOperand(2).getImm())); + TmpInst.addOperand(MCOperand::CreateReg(MI->getOperand(3).getReg())); + + printMCInst(&TmpInst); + } + + return; + } + // FIXME: Handle t2MOVi32imm also. } MCInst TmpInst; |

