mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-16 14:31:59 +00:00
Allow saving and restoring of double and float registers.
Allow copying of float registers. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14445 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
c53105c749
commit
6bd5551763
@ -30,10 +30,18 @@ int SparcV8RegisterInfo::storeRegToStackSlot(
|
||||
unsigned SrcReg, int FrameIdx,
|
||||
const TargetRegisterClass *RC) const
|
||||
{
|
||||
assert (RC == SparcV8::IntRegsRegisterClass
|
||||
&& "Can only store 32-bit values to stack slots");
|
||||
// On the order of operands here: think "[FrameIdx + 0] = SrcReg".
|
||||
BuildMI (MBB, I, V8::ST, 3).addFrameIndex (FrameIdx).addSImm (0).addReg (SrcReg);
|
||||
if (RC == SparcV8::IntRegsRegisterClass)
|
||||
BuildMI (MBB, I, V8::ST, 3).addFrameIndex (FrameIdx).addSImm (0)
|
||||
.addReg (SrcReg);
|
||||
else if (RC == SparcV8::FPRegsRegisterClass)
|
||||
BuildMI (MBB, I, V8::STFri, 3).addFrameIndex (FrameIdx).addSImm (0)
|
||||
.addReg (SrcReg);
|
||||
else if (RC == SparcV8::DFPRegsRegisterClass)
|
||||
BuildMI (MBB, I, V8::STDFri, 3).addFrameIndex (FrameIdx).addSImm (0)
|
||||
.addReg (SrcReg);
|
||||
else
|
||||
assert (0 && "Can't store this register to stack slot");
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -43,9 +51,16 @@ int SparcV8RegisterInfo::loadRegFromStackSlot(
|
||||
unsigned DestReg, int FrameIdx,
|
||||
const TargetRegisterClass *RC) const
|
||||
{
|
||||
assert (RC == SparcV8::IntRegsRegisterClass
|
||||
&& "Can only load 32-bit registers from stack slots");
|
||||
BuildMI (MBB, I, V8::LD, 2, DestReg).addFrameIndex (FrameIdx).addSImm (0);
|
||||
if (RC == SparcV8::IntRegsRegisterClass)
|
||||
BuildMI (MBB, I, V8::LD, 2, DestReg).addFrameIndex (FrameIdx).addSImm (0);
|
||||
else if (RC == SparcV8::FPRegsRegisterClass)
|
||||
BuildMI (MBB, I, V8::LDFri, 2, DestReg).addFrameIndex (FrameIdx)
|
||||
.addSImm (0);
|
||||
else if (RC == SparcV8::DFPRegsRegisterClass)
|
||||
BuildMI (MBB, I, V8::LDDFri, 2, DestReg).addFrameIndex (FrameIdx)
|
||||
.addSImm (0);
|
||||
else
|
||||
assert (0 && "Can't load this register from stack slot");
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -53,9 +68,12 @@ int SparcV8RegisterInfo::copyRegToReg(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator I,
|
||||
unsigned DestReg, unsigned SrcReg,
|
||||
const TargetRegisterClass *RC) const {
|
||||
assert (RC == SparcV8::IntRegsRegisterClass
|
||||
&& "Can only copy 32-bit registers");
|
||||
BuildMI (MBB, I, V8::ORrr, 2, DestReg).addReg (V8::G0).addReg (SrcReg);
|
||||
if (RC == SparcV8::IntRegsRegisterClass)
|
||||
BuildMI (MBB, I, V8::ORrr, 2, DestReg).addReg (V8::G0).addReg (SrcReg);
|
||||
else if (RC == SparcV8::FPRegsRegisterClass)
|
||||
BuildMI (MBB, I, V8::FMOVS, 1, DestReg).addReg (SrcReg);
|
||||
else
|
||||
assert (0 && "Can't copy this register");
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -30,10 +30,18 @@ int SparcV8RegisterInfo::storeRegToStackSlot(
|
||||
unsigned SrcReg, int FrameIdx,
|
||||
const TargetRegisterClass *RC) const
|
||||
{
|
||||
assert (RC == SparcV8::IntRegsRegisterClass
|
||||
&& "Can only store 32-bit values to stack slots");
|
||||
// On the order of operands here: think "[FrameIdx + 0] = SrcReg".
|
||||
BuildMI (MBB, I, V8::ST, 3).addFrameIndex (FrameIdx).addSImm (0).addReg (SrcReg);
|
||||
if (RC == SparcV8::IntRegsRegisterClass)
|
||||
BuildMI (MBB, I, V8::ST, 3).addFrameIndex (FrameIdx).addSImm (0)
|
||||
.addReg (SrcReg);
|
||||
else if (RC == SparcV8::FPRegsRegisterClass)
|
||||
BuildMI (MBB, I, V8::STFri, 3).addFrameIndex (FrameIdx).addSImm (0)
|
||||
.addReg (SrcReg);
|
||||
else if (RC == SparcV8::DFPRegsRegisterClass)
|
||||
BuildMI (MBB, I, V8::STDFri, 3).addFrameIndex (FrameIdx).addSImm (0)
|
||||
.addReg (SrcReg);
|
||||
else
|
||||
assert (0 && "Can't store this register to stack slot");
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -43,9 +51,16 @@ int SparcV8RegisterInfo::loadRegFromStackSlot(
|
||||
unsigned DestReg, int FrameIdx,
|
||||
const TargetRegisterClass *RC) const
|
||||
{
|
||||
assert (RC == SparcV8::IntRegsRegisterClass
|
||||
&& "Can only load 32-bit registers from stack slots");
|
||||
BuildMI (MBB, I, V8::LD, 2, DestReg).addFrameIndex (FrameIdx).addSImm (0);
|
||||
if (RC == SparcV8::IntRegsRegisterClass)
|
||||
BuildMI (MBB, I, V8::LD, 2, DestReg).addFrameIndex (FrameIdx).addSImm (0);
|
||||
else if (RC == SparcV8::FPRegsRegisterClass)
|
||||
BuildMI (MBB, I, V8::LDFri, 2, DestReg).addFrameIndex (FrameIdx)
|
||||
.addSImm (0);
|
||||
else if (RC == SparcV8::DFPRegsRegisterClass)
|
||||
BuildMI (MBB, I, V8::LDDFri, 2, DestReg).addFrameIndex (FrameIdx)
|
||||
.addSImm (0);
|
||||
else
|
||||
assert (0 && "Can't load this register from stack slot");
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -53,9 +68,12 @@ int SparcV8RegisterInfo::copyRegToReg(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator I,
|
||||
unsigned DestReg, unsigned SrcReg,
|
||||
const TargetRegisterClass *RC) const {
|
||||
assert (RC == SparcV8::IntRegsRegisterClass
|
||||
&& "Can only copy 32-bit registers");
|
||||
BuildMI (MBB, I, V8::ORrr, 2, DestReg).addReg (V8::G0).addReg (SrcReg);
|
||||
if (RC == SparcV8::IntRegsRegisterClass)
|
||||
BuildMI (MBB, I, V8::ORrr, 2, DestReg).addReg (V8::G0).addReg (SrcReg);
|
||||
else if (RC == SparcV8::FPRegsRegisterClass)
|
||||
BuildMI (MBB, I, V8::FMOVS, 1, DestReg).addReg (SrcReg);
|
||||
else
|
||||
assert (0 && "Can't copy this register");
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user