mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-25 05:22:04 +00:00
Make function loadImmediate a member of MipsSEInstrInfo and change it to return
the temporary register that was used to load the immediate. Currently, it always returns register $at, but this will change if, in the future, we decide to use another register. No changes in functionality. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@162417 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -262,46 +262,3 @@ unsigned MipsInstrInfo::GetInstSizeInBytes(const MachineInstr *MI) const {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
unsigned
|
||||
llvm::Mips::loadImmediate(int64_t Imm, bool IsN64, const TargetInstrInfo &TII,
|
||||
MachineBasicBlock& MBB,
|
||||
MachineBasicBlock::iterator II, DebugLoc DL,
|
||||
bool LastInstrIsADDiu,
|
||||
MipsAnalyzeImmediate::Inst *LastInst) {
|
||||
MipsAnalyzeImmediate AnalyzeImm;
|
||||
unsigned Size = IsN64 ? 64 : 32;
|
||||
unsigned LUi = IsN64 ? Mips::LUi64 : Mips::LUi;
|
||||
unsigned ZEROReg = IsN64 ? Mips::ZERO_64 : Mips::ZERO;
|
||||
unsigned ATReg = IsN64 ? Mips::AT_64 : Mips::AT;
|
||||
|
||||
const MipsAnalyzeImmediate::InstSeq &Seq =
|
||||
AnalyzeImm.Analyze(Imm, Size, LastInstrIsADDiu);
|
||||
MipsAnalyzeImmediate::InstSeq::const_iterator Inst = Seq.begin();
|
||||
|
||||
if (LastInst && (Seq.size() == 1)) {
|
||||
*LastInst = *Inst;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// The first instruction can be a LUi, which is different from other
|
||||
// instructions (ADDiu, ORI and SLL) in that it does not have a register
|
||||
// operand.
|
||||
if (Inst->Opc == LUi)
|
||||
BuildMI(MBB, II, DL, TII.get(LUi), ATReg)
|
||||
.addImm(SignExtend64<16>(Inst->ImmOpnd));
|
||||
else
|
||||
BuildMI(MBB, II, DL, TII.get(Inst->Opc), ATReg).addReg(ZEROReg)
|
||||
.addImm(SignExtend64<16>(Inst->ImmOpnd));
|
||||
|
||||
// Build the remaining instructions in Seq. Skip the last instruction if
|
||||
// LastInst is not 0.
|
||||
for (++Inst; Inst != Seq.end() - !!LastInst; ++Inst)
|
||||
BuildMI(MBB, II, DL, TII.get(Inst->Opc), ATReg).addReg(ATReg)
|
||||
.addImm(SignExtend64<16>(Inst->ImmOpnd));
|
||||
|
||||
if (LastInst)
|
||||
*LastInst = *Inst;
|
||||
|
||||
return Seq.size() - !!LastInst;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user