diff options
Diffstat (limited to 'lib/Target/PowerPC/PPCFrameLowering.h')
-rw-r--r-- | lib/Target/PowerPC/PPCFrameLowering.h | 48 |
1 files changed, 10 insertions, 38 deletions
diff --git a/lib/Target/PowerPC/PPCFrameLowering.h b/lib/Target/PowerPC/PPCFrameLowering.h index c482588..dddabb8 100644 --- a/lib/Target/PowerPC/PPCFrameLowering.h +++ b/lib/Target/PowerPC/PPCFrameLowering.h @@ -23,6 +23,11 @@ class PPCSubtarget; class PPCFrameLowering: public TargetFrameLowering { const PPCSubtarget &Subtarget; + const unsigned ReturnSaveOffset; + const unsigned TOCSaveOffset; + const unsigned FramePointerSaveOffset; + const unsigned LinkageSize; + const unsigned BasePointerSaveOffset; public: PPCFrameLowering(const PPCSubtarget &STI); @@ -67,56 +72,23 @@ public: /// getReturnSaveOffset - Return the previous frame offset to save the /// return address. - static unsigned getReturnSaveOffset(bool isPPC64, bool isDarwinABI) { - if (isDarwinABI) - return isPPC64 ? 16 : 8; - // SVR4 ABI: - return isPPC64 ? 16 : 4; - } + unsigned getReturnSaveOffset() const { return ReturnSaveOffset; } /// getTOCSaveOffset - Return the previous frame offset to save the /// TOC register -- 64-bit SVR4 ABI only. - static unsigned getTOCSaveOffset(bool isELFv2ABI) { - return isELFv2ABI ? 24 : 40; - } + unsigned getTOCSaveOffset() const { return TOCSaveOffset; } /// getFramePointerSaveOffset - Return the previous frame offset to save the /// frame pointer. - static unsigned getFramePointerSaveOffset(bool isPPC64, bool isDarwinABI) { - // For the Darwin ABI: - // We cannot use the TOC save slot (offset +20) in the PowerPC linkage area - // for saving the frame pointer (if needed.) While the published ABI has - // not used this slot since at least MacOSX 10.2, there is older code - // around that does use it, and that needs to continue to work. - if (isDarwinABI) - return isPPC64 ? -8U : -4U; - - // SVR4 ABI: First slot in the general register save area. - return isPPC64 ? -8U : -4U; - } + unsigned getFramePointerSaveOffset() const { return FramePointerSaveOffset; } /// getBasePointerSaveOffset - Return the previous frame offset to save the /// base pointer. - static unsigned getBasePointerSaveOffset(bool isPPC64, - bool isDarwinABI, - bool isPIC) { - if (isDarwinABI) - return isPPC64 ? -16U : -8U; - - // SVR4 ABI: First slot in the general register save area. - return isPPC64 ? -16U : isPIC ? -12U : -8U; - } + unsigned getBasePointerSaveOffset() const { return BasePointerSaveOffset; } /// getLinkageSize - Return the size of the PowerPC ABI linkage area. /// - static unsigned getLinkageSize(bool isPPC64, bool isDarwinABI, - bool isELFv2ABI) { - if (isDarwinABI || isPPC64) - return (isELFv2ABI ? 4 : 6) * (isPPC64 ? 8 : 4); - - // SVR4 ABI: - return 8; - } + unsigned getLinkageSize() const { return LinkageSize; } const SpillSlot * getCalleeSavedSpillSlots(unsigned &NumEntries) const override; |