//===-- MachineFrameInfo.cpp-----------------------------------------------===// // // 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. // //===----------------------------------------------------------------------===// #include "llvm/Target/MachineFrameInfo.h" #include "llvm/CodeGen/MachineFunction.h" int MachineFrameInfo::getIncomingArgOffset(MachineFunction& 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(MachineFunction& 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; }