Add rules to restore RRA

This commit is contained in:
shylie 2026-04-06 22:06:00 -04:00
parent 5aceff62cb
commit bbea044c7d

View File

@ -21,9 +21,10 @@ void FootFrameLowering::emitPrologue(MachineFunction &MF,
int FI = MF.getInfo<FootMachineFunctionInfo>()->getReturnAddressFrameIndex();
unsigned CFIIndex = MF.addFrameInst(MCCFIInstruction::createDefCfaRegister(
nullptr, MF.getRegInfo().getTargetRegisterInfo()->getDwarfRegNum(
Foot::RSP, true)));
unsigned int CFIIndex =
MF.addFrameInst(MCCFIInstruction::createDefCfaRegister(
nullptr, MF.getRegInfo().getTargetRegisterInfo()->getDwarfRegNum(
Foot::RSP, true)));
BuildMI(MBB, MBB.begin(), DebugLoc(), TII->get(TargetOpcode::CFI_INSTRUCTION))
.addCFIIndex(CFIIndex);
@ -31,6 +32,13 @@ void FootFrameLowering::emitPrologue(MachineFunction &MF,
.addFrameIndex(FI)
.addReg(Foot::RRA)
.addImm(0);
unsigned int RRADwarfRegNum =
MF.getRegInfo().getTargetRegisterInfo()->getDwarfRegNum(Foot::RRA, false);
int Offset = MFI.getObjectOffset(FI);
CFIIndex = MF.addFrameInst(
MCCFIInstruction::createOffset(nullptr, RRADwarfRegNum, Offset));
BuildMI(MBB, MBB.begin(), DebugLoc(), TII->get(TargetOpcode::CFI_INSTRUCTION))
.addCFIIndex(CFIIndex);
unsigned NumBytes = MFI.getStackSize();
@ -51,11 +59,11 @@ void FootFrameLowering::emitPrologue(MachineFunction &MF,
.addImm(NumBytes);
}
unsigned int CFIOffsetIndex = MF.addFrameInst(
CFIIndex = MF.addFrameInst(
MCCFIInstruction::createAdjustCfaOffset(nullptr, NumBytes));
BuildMI(MBB, MBB.getFirstTerminator(), DebugLoc(),
TII->get(TargetOpcode::CFI_INSTRUCTION))
.addCFIIndex(CFIOffsetIndex);
.addCFIIndex(CFIIndex);
}
}
@ -132,6 +140,7 @@ void FootFrameLowering::determineCalleeSaves(MachineFunction &MF,
TargetFrameLowering::determineCalleeSaves(MF, SavedRegs, RS);
SavedRegs.set(Foot::RSP);
SavedRegs.set(Foot::RRA);
MachineFrameInfo &MFI = MF.getFrameInfo();