mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-21 18:24:23 +00:00
Implement cfi_def_cfa_offset. "Make check" test case for this comming in the
next few days but it's already tested a lot from test-suite and works fine. This patch completes almost 100% pass of test-suite for mips 16. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@170674 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -39,9 +39,36 @@ void Mips16FrameLowering::emitPrologue(MachineFunction &MF) const {
|
|||||||
// No need to allocate space on the stack.
|
// No need to allocate space on the stack.
|
||||||
if (StackSize == 0 && !MFI->adjustsStack()) return;
|
if (StackSize == 0 && !MFI->adjustsStack()) return;
|
||||||
|
|
||||||
|
MachineModuleInfo &MMI = MF.getMMI();
|
||||||
|
std::vector<MachineMove> &Moves = MMI.getFrameMoves();
|
||||||
|
MachineLocation DstML, SrcML;
|
||||||
|
|
||||||
// Adjust stack.
|
// Adjust stack.
|
||||||
TII.makeFrame(Mips::SP, StackSize, MBB, MBBI);
|
TII.makeFrame(Mips::SP, StackSize, MBB, MBBI);
|
||||||
|
|
||||||
|
// emit ".cfi_def_cfa_offset StackSize"
|
||||||
|
MCSymbol *AdjustSPLabel = MMI.getContext().CreateTempSymbol();
|
||||||
|
BuildMI(MBB, MBBI, dl,
|
||||||
|
TII.get(TargetOpcode::PROLOG_LABEL)).addSym(AdjustSPLabel);
|
||||||
|
DstML = MachineLocation(MachineLocation::VirtualFP);
|
||||||
|
SrcML = MachineLocation(MachineLocation::VirtualFP, -StackSize);
|
||||||
|
Moves.push_back(MachineMove(AdjustSPLabel, DstML, SrcML));
|
||||||
|
|
||||||
|
MCSymbol *CSLabel = MMI.getContext().CreateTempSymbol();
|
||||||
|
BuildMI(MBB, MBBI, dl,
|
||||||
|
TII.get(TargetOpcode::PROLOG_LABEL)).addSym(CSLabel);
|
||||||
|
DstML = MachineLocation(MachineLocation::VirtualFP, -8);
|
||||||
|
SrcML = MachineLocation(Mips::S1);
|
||||||
|
Moves.push_back(MachineMove(CSLabel, DstML, SrcML));
|
||||||
|
|
||||||
|
DstML = MachineLocation(MachineLocation::VirtualFP, -12);
|
||||||
|
SrcML = MachineLocation(Mips::S0);
|
||||||
|
Moves.push_back(MachineMove(CSLabel, DstML, SrcML));
|
||||||
|
|
||||||
|
DstML = MachineLocation(MachineLocation::VirtualFP, -4);
|
||||||
|
SrcML = MachineLocation(Mips::RA);
|
||||||
|
Moves.push_back(MachineMove(CSLabel, DstML, SrcML));
|
||||||
|
|
||||||
if (hasFP(MF))
|
if (hasFP(MF))
|
||||||
BuildMI(MBB, MBBI, dl, TII.get(Mips::MoveR3216), Mips::S0)
|
BuildMI(MBB, MBBI, dl, TII.get(Mips::MoveR3216), Mips::S0)
|
||||||
.addReg(Mips::SP);
|
.addReg(Mips::SP);
|
||||||
|
Reference in New Issue
Block a user