| // $Id$ -*-c++-*- |
| //*************************************************************************** |
| // File: |
| // MachineFrameInfo.cpp |
| // |
| // Purpose: |
| // Interface to layout of stack frame on target machine. |
| // Most functions of class MachineFrameInfo have to be machine-specific |
| // so there is little code here. |
| // |
| // History: |
| // 4/17/02 - Vikram Adve - Created |
| //**************************************************************************/ |
| |
| |
| #include "llvm/Target/MachineFrameInfo.h" |
| #include "llvm/CodeGen/MachineCodeForMethod.h" |
| |
| |
| int |
| MachineFrameInfo::getIncomingArgOffset(MachineCodeForMethod& mcInfo, |
| unsigned argNum) const |
| { |
| assert(argsOnStackHaveFixedSize()); |
| |
| unsigned relativeOffset = argNum * getSizeOfEachArgOnStack(); |
| bool growUp; // do args grow up or down |
| int firstArg = getFirstIncomingArgOffset(mcInfo, growUp); |
| int offset = growUp? firstArg + relativeOffset |
| : firstArg - relativeOffset; |
| return offset; |
| } |
| |
| |
| int |
| MachineFrameInfo::getOutgoingArgOffset(MachineCodeForMethod& mcInfo, |
| unsigned argNum) const |
| { |
| assert(argsOnStackHaveFixedSize()); |
| assert(((int) argNum - this->getNumFixedOutgoingArgs()) |
| <= (int) mcInfo.getMaxOptionalNumArgs()); |
| |
| unsigned relativeOffset = argNum * getSizeOfEachArgOnStack(); |
| bool growUp; // do args grow up or down |
| int firstArg = getFirstOutgoingArgOffset(mcInfo, growUp); |
| int offset = growUp? firstArg + relativeOffset |
| : firstArg - relativeOffset; |
| |
| return offset; |
| } |