diff options
author | Reed Kotler <rkotler@mips.com> | 2012-10-31 05:21:10 +0000 |
---|---|---|
committer | Reed Kotler <rkotler@mips.com> | 2012-10-31 05:21:10 +0000 |
commit | 27a7229c475b45bac4928637d0ab5322ab00d3e2 (patch) | |
tree | 1cc52d9b34f1951d677f5c64cd9055f47aed5d32 /llvm/lib/Target/Mips/Mips16InstrInfo.cpp | |
parent | 8cd3b07a51764128c9ab584e540320c23905a259 (diff) | |
download | bcm5719-llvm-27a7229c475b45bac4928637d0ab5322ab00d3e2.tar.gz bcm5719-llvm-27a7229c475b45bac4928637d0ab5322ab00d3e2.zip |
Implement ADJCALLSTACKUP and ADJCALLSTACKDOWN
llvm-svn: 167107
Diffstat (limited to 'llvm/lib/Target/Mips/Mips16InstrInfo.cpp')
-rw-r--r-- | llvm/lib/Target/Mips/Mips16InstrInfo.cpp | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/llvm/lib/Target/Mips/Mips16InstrInfo.cpp b/llvm/lib/Target/Mips/Mips16InstrInfo.cpp index fa0876a4ebe..619646b3178 100644 --- a/llvm/lib/Target/Mips/Mips16InstrInfo.cpp +++ b/llvm/lib/Target/Mips/Mips16InstrInfo.cpp @@ -26,7 +26,7 @@ using namespace llvm; Mips16InstrInfo::Mips16InstrInfo(MipsTargetMachine &tm) : MipsInstrInfo(tm, Mips::BimmX16), - RI(*tm.getSubtargetImpl()) {} + RI(*tm.getSubtargetImpl(), *this) {} const MipsRegisterInfo &Mips16InstrInfo::getRegisterInfo() const { return RI; @@ -160,6 +160,22 @@ unsigned Mips16InstrInfo::GetOppositeBranchOpc(unsigned Opc) const { return 0; } +/// Adjust SP by Amount bytes. +void Mips16InstrInfo::adjustStackPtr(unsigned SP, int64_t Amount, + MachineBasicBlock &MBB, + MachineBasicBlock::iterator I) const { + DebugLoc DL = I != MBB.end() ? I->getDebugLoc() : DebugLoc(); + if (isInt<16>(Amount)) { + if (Amount < 0) + BuildMI(MBB, I, DL, get(Mips::SaveDecSpF16)). addImm(-Amount); + else if (Amount > 0) + BuildMI(MBB, I, DL, get(Mips::RestoreIncSpF16)).addImm(Amount); + } + else + // not implemented for large values yet + assert(false && "adjust stack pointer amount exceeded"); +} + unsigned Mips16InstrInfo::GetAnalyzableBrOpc(unsigned Opc) const { return (Opc == Mips::BeqzRxImmX16 || Opc == Mips::BimmX16 || Opc == Mips::BnezRxImmX16 || Opc == Mips::BteqzX16 || |