diff options
author | Chris Lattner <sabre@nondot.org> | 2002-12-28 20:20:24 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2002-12-28 20:20:24 +0000 |
commit | da62ac6fe2d57f75972cabcdd6e0fe3b456643e7 (patch) | |
tree | 46bd794bd1169c6cccd7fd7b7f38746d760f7cb7 | |
parent | ea45d7ba3fd4540eb3fd0b868e6a67244f502563 (diff) |
* Rename MachineFrameInfo to TargetFrameInfo
* Move some sparc specific code here from Target files
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5176 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Target/SparcV9/SparcV9Internals.h | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/lib/Target/SparcV9/SparcV9Internals.h b/lib/Target/SparcV9/SparcV9Internals.h index 31ec6a25b2..2266eaab84 100644 --- a/lib/Target/SparcV9/SparcV9Internals.h +++ b/lib/Target/SparcV9/SparcV9Internals.h @@ -528,9 +528,11 @@ protected: // a multiple of getStackFrameSizeAlignment(). //--------------------------------------------------------------------------- -class UltraSparcFrameInfo: public MachineFrameInfo { +class UltraSparcFrameInfo: public TargetFrameInfo { + const TargetMachine ⌖ public: - UltraSparcFrameInfo(const TargetMachine &tgt) : MachineFrameInfo(tgt) {} + UltraSparcFrameInfo(const TargetMachine &TM) + : TargetFrameInfo(StackGrowsDown, StackFrameSizeAlignment, 0), target(TM) {} public: // These methods provide constant parameters of the frame layout. @@ -603,6 +605,28 @@ public: virtual int getDynamicAreaBaseRegNum() const { return (int) target.getRegInfo().getStackPointer(); } + + virtual int 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); + return growUp ? firstArg + relativeOffset : firstArg - relativeOffset; + } + + virtual int getOutgoingArgOffset(MachineFunction& mcInfo, + unsigned argNum) const { + assert(argsOnStackHaveFixedSize()); + //assert(((int) argNum - this->getNumFixedOutgoingArgs()) + // <= (int) mcInfo.getInfo()->getMaxOptionalNumArgs()); + + unsigned relativeOffset = argNum * getSizeOfEachArgOnStack(); + bool growUp; // do args grow up or down + int firstArg = getFirstOutgoingArgOffset(mcInfo, growUp); + return growUp ? firstArg + relativeOffset : firstArg - relativeOffset; + } private: /*---------------------------------------------------------------------- @@ -612,7 +636,7 @@ private: by us. The rest conform to the Sparc V9 ABI. All stack addresses are offset by OFFSET = 0x7ff (2047). - Alignment assumpteions and other invariants: + Alignment assumptions and other invariants: (1) %sp+OFFSET and %fp+OFFSET are always aligned on 16-byte boundary (2) Variables in automatic, spill, temporary, or dynamic regions are aligned according to their size as in all memory accesses. @@ -714,7 +738,7 @@ public: virtual const MachineInstrInfo &getInstrInfo() const { return instrInfo; } virtual const MachineSchedInfo &getSchedInfo() const { return schedInfo; } virtual const MachineRegInfo &getRegInfo() const { return regInfo; } - virtual const MachineFrameInfo &getFrameInfo() const { return frameInfo; } + virtual const TargetFrameInfo &getFrameInfo() const { return frameInfo; } virtual const MachineCacheInfo &getCacheInfo() const { return cacheInfo; } virtual const MachineOptInfo &getOptInfo() const { return optInfo; } |