diff options
author | Daniel Sanders <daniel.sanders@imgtec.com> | 2016-04-29 16:16:49 +0000 |
---|---|---|
committer | Daniel Sanders <daniel.sanders@imgtec.com> | 2016-04-29 16:16:49 +0000 |
commit | 7225cd52e70c02479ffc3bdc4dded02a688b8da4 (patch) | |
tree | e429cfa00eeb59979fb416781f7ba75235b8c18c /llvm/lib/Target/Mips/AsmParser | |
parent | 173fc57b5438e05b6e7da9b9baace624e7d84a59 (diff) | |
download | bcm5719-llvm-7225cd52e70c02479ffc3bdc4dded02a688b8da4.tar.gz bcm5719-llvm-7225cd52e70c02479ffc3bdc4dded02a688b8da4.zip |
[mips][ias] Move createCpRestoreMemOp to MipsTargetStreamer. NFC.
Summary:
This removes the temporary call to isIntegratedAssemblerRequired() which was
added recently. It's effect is now acheived directly in the MipsTargetStreamer
hierarchy.
Reviewers: sdardis
Subscribers: dsanders, sdardis, llvm-commits
Differential Revision: http://reviews.llvm.org/D19715
llvm-svn: 268058
Diffstat (limited to 'llvm/lib/Target/Mips/AsmParser')
-rw-r--r-- | llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp | 33 |
1 files changed, 14 insertions, 19 deletions
diff --git a/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp b/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp index 353e679391d..b4feea0e60a 100644 --- a/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp +++ b/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp @@ -1891,8 +1891,7 @@ bool MipsAsmParser::processInstruction(MCInst &Inst, SMLoc IDLoc, STI); // Load the $gp from the stack. - createCpRestoreMemOp(true /*IsLoad*/, CpRestoreOffset /*StackOffset*/, - IDLoc, Out, STI); + TOut.emitGPRestore(CpRestoreOffset, IDLoc, STI); } else Warning(IDLoc, "no .cprestore used in PIC mode"); } @@ -3593,19 +3592,18 @@ void MipsAsmParser::createCpRestoreMemOp(bool IsLoad, int StackOffset, const MCSubtargetInfo *STI) { MipsTargetStreamer &TOut = getTargetStreamer(); - // If the offset can not fit into 16 bits, we need to expand. - if (!isInt<16>(StackOffset)) { - MCInst MemInst; - MemInst.setOpcode(IsLoad ? Mips::LW : Mips::SW); - MemInst.addOperand(MCOperand::createReg(Mips::GP)); - MemInst.addOperand(MCOperand::createReg(Mips::SP)); - MemInst.addOperand(MCOperand::createImm(StackOffset)); - expandMemInst(MemInst, IDLoc, Out, STI, IsLoad, true /*HasImmOpnd*/); + if (IsLoad) { + TOut.emitLoadWithImmOffset(Mips::LW, Mips::GP, Mips::SP, StackOffset, + Mips::GP, IDLoc, STI); return; } - TOut.emitRRI(IsLoad ? Mips::LW : Mips::SW, Mips::GP, Mips::SP, StackOffset, - IDLoc, STI); + unsigned ATReg = getATReg(IDLoc); + if (!ATReg) + return; + + TOut.emitStoreWithImmOffset(Mips::SW, Mips::GP, Mips::SP, StackOffset, ATReg, + IDLoc, STI); } unsigned MipsAsmParser::checkTargetMatchPredicate(MCInst &Inst) { @@ -5472,14 +5470,11 @@ bool MipsAsmParser::parseDirectiveCpRestore(SMLoc Loc) { return false; } - // Store the $gp on the stack. - if (getStreamer().isIntegratedAssemblerRequired()) { - const MCSubtargetInfo &STI = getSTI(); - createCpRestoreMemOp(false /*IsLoad*/, CpRestoreOffset /*StackOffset*/, Loc, - getStreamer(), &STI); - } + unsigned ATReg = getATReg(Loc); + if (!ATReg) + return true; - getTargetStreamer().emitDirectiveCpRestore(CpRestoreOffset); + getTargetStreamer().emitDirectiveCpRestore(CpRestoreOffset, ATReg, Loc, STI); Parser.Lex(); // Consume the EndOfStatement. return false; } |