diff options
| author | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2007-10-09 03:15:11 +0000 |
|---|---|---|
| committer | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2007-10-09 03:15:11 +0000 |
| commit | 8262df3aa49feaae18a86d21ed8a20427d638218 (patch) | |
| tree | 34c2d80693d9f5bac537de5aaa2f497642f85df1 /lib/Target/Mips/MipsRegisterInfo.cpp | |
| parent | 0a6040063fd9419041a81ada8f75b389381eb6b9 (diff) | |
Position Independent Code (PIC) support [3]
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42780 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/Mips/MipsRegisterInfo.cpp')
| -rw-r--r-- | lib/Target/Mips/MipsRegisterInfo.cpp | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/lib/Target/Mips/MipsRegisterInfo.cpp b/lib/Target/Mips/MipsRegisterInfo.cpp index 8ab5e0e088..2e872932ac 100644 --- a/lib/Target/Mips/MipsRegisterInfo.cpp +++ b/lib/Target/Mips/MipsRegisterInfo.cpp @@ -369,9 +369,10 @@ emitPrologue(MachineFunction &MF) const MachineFrameInfo *MFI = MF.getFrameInfo(); MipsFunctionInfo *MipsFI = MF.getInfo<MipsFunctionInfo>(); MachineBasicBlock::iterator MBBI = MBB.begin(); + bool isPIC = (MF.getTarget().getRelocationModel() == Reloc::PIC_); - // Replace the dummy '0' SPOffset by the negative offsets, as - // explained on LowerFORMAL_ARGUMENTS + // Replace the dummy '0' SPOffset by the negative + // offsets, as explained on LowerFORMAL_ARGUMENTS MipsFI->adjustLoadArgsFI(MFI); MipsFI->adjustStoreVarArgsFI(MFI); @@ -421,6 +422,10 @@ emitPrologue(MachineFunction &MF) const // Update frame info MFI->setStackSize(NumBytes); + // PIC speficic function prologue + if (isPIC) + BuildMI(MBB, MBBI, TII.get(Mips::CPLOAD)).addReg(Mips::T9); + // Adjust stack : addi sp, sp, (-imm) BuildMI(MBB, MBBI, TII.get(Mips::ADDiu), Mips::SP) .addReg(Mips::SP).addImm(-NumBytes); @@ -443,6 +448,12 @@ emitPrologue(MachineFunction &MF) const BuildMI(MBB, MBBI, TII.get(Mips::ADDu), Mips::FP) .addReg(Mips::SP).addReg(Mips::ZERO); } + + // PIC speficic function prologue + if ((isPIC) && (MFI->hasCalls())) + BuildMI(MBB, MBBI, TII.get(Mips::CPRESTORE)) + .addImm(MipsFI->getGPStackOffset()); + } void MipsRegisterInfo:: |
