aboutsummaryrefslogtreecommitdiff
path: root/lib/Target/Sparc
diff options
context:
space:
mode:
authorBrian Gaeke <gaeke@uiuc.edu>2004-10-10 19:57:21 +0000
committerBrian Gaeke <gaeke@uiuc.edu>2004-10-10 19:57:21 +0000
commit85c08351cec796d541c18435c6e6c0edec343e93 (patch)
tree27d466656c17abe34061df001924145d0fdbec35 /lib/Target/Sparc
parent9f0cecd4385d778c20859ad18ee43389e1337b33 (diff)
Implement eliminateCallFramePseudoInstr().
Wrap a long comment line. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16883 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/Sparc')
-rw-r--r--lib/Target/Sparc/SparcRegisterInfo.cpp14
1 files changed, 8 insertions, 6 deletions
diff --git a/lib/Target/Sparc/SparcRegisterInfo.cpp b/lib/Target/Sparc/SparcRegisterInfo.cpp
index 9b3c68b8fe..f09b1aff96 100644
--- a/lib/Target/Sparc/SparcRegisterInfo.cpp
+++ b/lib/Target/Sparc/SparcRegisterInfo.cpp
@@ -77,10 +77,12 @@ void SparcV8RegisterInfo::copyRegToReg(MachineBasicBlock &MBB,
void SparcV8RegisterInfo::
eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB,
MachineBasicBlock::iterator I) const {
- std::cerr
- << "Sorry, I don't know how to eliminate call frame pseudo instrs yet, in\n"
- << __FUNCTION__ << " at " << __FILE__ << ":" << __LINE__ << "\n";
- abort();
+ MachineInstr &MI = *I;
+ int size = MI.getOperand (0).getImmedValue ();
+ if (MI.getOpcode () == V8::ADJCALLSTACKDOWN)
+ size = -size;
+ BuildMI (MBB, I, V8::ADDri, 2, V8::SP).addReg (V8::SP).addSImm (size);
+ MBB.erase (I);
}
void
@@ -115,8 +117,8 @@ void SparcV8RegisterInfo::emitPrologue(MachineFunction &MF) const {
// Get the number of bytes to allocate from the FrameInfo
int NumBytes = (int) MFI->getStackSize();
- // Emit the correct save instruction based on the number of bytes in the frame.
- // Minimum stack frame size according to V8 ABI is:
+ // Emit the correct save instruction based on the number of bytes in
+ // the frame. Minimum stack frame size according to V8 ABI is:
// 16 words for register window spill
// 1 word for address of returned aggregate-value
// + 6 words for passing parameters on the stack