diff options
Diffstat (limited to 'lib/Target/Mips/MipsFrameLowering.cpp')
-rw-r--r-- | lib/Target/Mips/MipsFrameLowering.cpp | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/lib/Target/Mips/MipsFrameLowering.cpp b/lib/Target/Mips/MipsFrameLowering.cpp index ded6e850f7..21e3314a66 100644 --- a/lib/Target/Mips/MipsFrameLowering.cpp +++ b/lib/Target/Mips/MipsFrameLowering.cpp @@ -1,15 +1,15 @@ -//=======- MipsFrameLowering.cpp - Mips Frame Information -----*- C++ -*-====// +//=======- MipsFrameLowering.cpp - Mips Frame Information ------*- C++ -*-====// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // -//===---------------------------------------------------------------------===// +//===----------------------------------------------------------------------===// // // This file contains the Mips implementation of TargetFrameLowering class. // -//===---------------------------------------------------------------------===// +//===----------------------------------------------------------------------===// #include "MipsFrameLowering.h" #include "MipsInstrInfo.h" @@ -27,7 +27,7 @@ using namespace llvm; -//===---------------------------------------------------------------------===// +//===----------------------------------------------------------------------===// // // Stack Frame Processing methods // +----------------------------+ @@ -77,11 +77,11 @@ using namespace llvm; // possible to detect those references and the offsets are adjusted to // their real location. // -//===---------------------------------------------------------------------===// +//===----------------------------------------------------------------------===// // hasFP - Return true if the specified function should have a dedicated frame -// pointer register. This is true if the function has variable sized allocas -// or if frame pointer elimination is disabled. +// pointer register. This is true if the function has variable sized allocas or +// if frame pointer elimination is disabled. bool MipsFrameLowering::hasFP(const MachineFunction &MF) const { const MachineFrameInfo *MFI = MF.getFrameInfo(); return DisableFramePointerElim(MF) || MFI->hasVarSizedObjects(); @@ -203,6 +203,7 @@ void MipsFrameLowering::adjustMipsStackFrame(MachineFunction &MF) const { MipsFI->setFPUTopSavedRegOff(TopFPUSavedRegOff-StackOffset); } + // expand pair of register and immediate if the immediate doesn't fit in the // 16-bit offset field. // e.g. @@ -228,7 +229,7 @@ static bool expandRegLargeImmPair(unsigned OrigReg, int OrigImm, const TargetInstrInfo *TII = MF->getTarget().getInstrInfo(); DebugLoc DL = I->getDebugLoc(); int ImmLo = OrigImm & 0xffff; - int ImmHi = (((unsigned)OrigImm & 0xffff0000) >> 16) + + int ImmHi = (((unsigned)OrigImm & 0xffff0000) >> 16) + ((OrigImm & 0x8000) != 0); // FIXME: change this when mips goes MC". |