29 #define GET_REGINFO_TARGET_DESC
30 #include "SparcGenRegisterInfo.inc"
34 cl::desc(
"Reserve application registers (%g2-%g4)"));
79 Reserved.
set(SP::G0_G1);
81 Reserved.
set(SP::G2_G3);
83 Reserved.
set(SP::G4_G5);
85 Reserved.
set(SP::O6_O7);
86 Reserved.
set(SP::I6_I7);
87 Reserved.
set(SP::G6_G7);
90 if (!Subtarget.
isV9()) {
91 for (
unsigned n = 0;
n != 16; ++
n) {
98 for (
unsigned n = 0;
n < 31;
n++)
99 Reserved.
set(SP::ASR1 +
n);
106 unsigned Kind)
const {
108 return Subtarget.
is64Bit() ? &SP::I64RegsRegClass : &SP::IntRegsRegClass;
113 unsigned FIOperandNum,
int Offset,
unsigned FramePtr) {
115 if (Offset >= -4096 && Offset <= 4095) {
118 MI.getOperand(FIOperandNum).ChangeToRegister(FramePtr,
false);
119 MI.getOperand(FIOperandNum + 1).ChangeToImmediate(Offset);
132 BuildMI(*
MI.getParent(), II, dl,
TII.get(SP::SETHIi), SP::G1)
140 MI.getOperand(FIOperandNum).ChangeToRegister(SP::G1,
false);
141 MI.getOperand(FIOperandNum + 1).ChangeToImmediate(
LO10(Offset));
150 BuildMI(*
MI.getParent(), II, dl,
TII.get(SP::SETHIi), SP::G1)
152 BuildMI(*
MI.getParent(), II, dl,
TII.get(SP::XORri), SP::G1)
158 MI.getOperand(FIOperandNum).ChangeToRegister(SP::G1,
false);
159 MI.getOperand(FIOperandNum + 1).ChangeToImmediate(0);
165 int SPAdj,
unsigned FIOperandNum,
167 assert(SPAdj == 0 &&
"Unexpected");
171 int FrameIndex =
MI.getOperand(FIOperandNum).getIndex();
178 Offset = TFI->getFrameIndexReference(MF,
FrameIndex, FrameReg).getFixed();
180 Offset +=
MI.getOperand(FIOperandNum + 1).getImm();
183 if (
MI.getOpcode() == SP::STQFri) {
186 Register SrcEvenReg = getSubReg(SrcReg, SP::sub_even64);
187 Register SrcOddReg = getSubReg(SrcReg, SP::sub_odd64);
191 replaceFI(MF, *StMI, *StMI, dl, 0, Offset, FrameReg);
192 MI.setDesc(
TII.get(SP::STDFri));
193 MI.getOperand(2).setReg(SrcOddReg);
195 }
else if (
MI.getOpcode() == SP::LDQFri) {
198 Register DestEvenReg = getSubReg(DestReg, SP::sub_even64);
199 Register DestOddReg = getSubReg(DestReg, SP::sub_odd64);
201 BuildMI(*
MI.getParent(), II, dl,
TII.get(SP::LDDFri), DestEvenReg)
203 replaceFI(MF, *LdMI, *LdMI, dl, 1, Offset, FrameReg);
205 MI.setDesc(
TII.get(SP::LDDFri));
206 MI.getOperand(0).setReg(DestOddReg);
211 replaceFI(MF, II,
MI, dl, FIOperandNum, Offset, FrameReg);
233 if (getFrameLowering(MF)->hasReservedCallFrame(MF))