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 | |
| 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')
| -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; | 

