mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-18 10:31:57 +00:00
Initial support for Mips32 and Mips32r2. Patch contributed by Akira Hatanaka (ahatanaka@mips.com)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118447 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
85c3f24da3
commit
2c2304c623
@ -36,10 +36,6 @@ def FeatureFP64Bit : SubtargetFeature<"fp64", "IsFP64bit", "true",
|
||||
"Support 64-bit FP registers.">;
|
||||
def FeatureSingleFloat : SubtargetFeature<"single-float", "IsSingleFloat",
|
||||
"true", "Only supports single precision float">;
|
||||
def FeatureMips1 : SubtargetFeature<"mips1", "MipsArchVersion", "Mips1",
|
||||
"Mips1 ISA Support">;
|
||||
def FeatureMips2 : SubtargetFeature<"mips2", "MipsArchVersion", "Mips2",
|
||||
"Mips2 ISA Support">;
|
||||
def FeatureO32 : SubtargetFeature<"o32", "MipsABI", "O32",
|
||||
"Enable o32 ABI">;
|
||||
def FeatureEABI : SubtargetFeature<"eabi", "MipsABI", "EABI",
|
||||
@ -58,6 +54,15 @@ def FeatureSwap : SubtargetFeature<"swap", "HasSwap", "true",
|
||||
"Enable 'byte/half swap' instructions.">;
|
||||
def FeatureBitCount : SubtargetFeature<"bitcount", "HasBitCount", "true",
|
||||
"Enable 'count leading bits' instructions.">;
|
||||
def FeatureMips1 : SubtargetFeature<"mips1", "MipsArchVersion", "Mips1",
|
||||
"Mips1 ISA Support">;
|
||||
def FeatureMips2 : SubtargetFeature<"mips2", "MipsArchVersion", "Mips2",
|
||||
"Mips2 ISA Support">;
|
||||
def FeatureMips32 : SubtargetFeature<"mips32", "MipsArchVersion", "Mips32",
|
||||
"Mips32 ISA Support", [FeatureCondMov]>;
|
||||
def FeatureMips32r2 : SubtargetFeature<"mips32r2", "MipsArchVersion",
|
||||
"Mips32r2", "Mips32r2 ISA Support",
|
||||
[FeatureMips32, FeatureSEInReg]>;
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Mips processors supported.
|
||||
@ -73,6 +78,8 @@ def : Proc<"r3000", [FeatureMips1]>;
|
||||
def : Proc<"mips2", [FeatureMips2]>;
|
||||
def : Proc<"r6000", [FeatureMips2]>;
|
||||
|
||||
def : Proc<"4ke", [FeatureMips32r2]>;
|
||||
|
||||
// Allegrex is a 32bit subset of r4000, both for interger and fp registers,
|
||||
// but much more similar to Mips2 than Mips3. It also contains some of
|
||||
// Mips32/Mips32r2 instructions and a custom vector fpu processor.
|
||||
|
@ -59,7 +59,8 @@ runOnMachineBasicBlock(MachineBasicBlock &MBB)
|
||||
{
|
||||
bool Changed = false;
|
||||
for (MachineBasicBlock::iterator I = MBB.begin(); I != MBB.end(); ++I)
|
||||
if (I->getDesc().hasDelaySlot()) {
|
||||
if (TM.getSubtarget<MipsSubtarget>().isMips1() &&
|
||||
I->getDesc().hasDelaySlot()) {
|
||||
MachineBasicBlock::iterator J = I;
|
||||
++J;
|
||||
BuildMI(MBB, J, I->getDebugLoc(), TII->get(Mips::NOP));
|
||||
|
@ -100,6 +100,8 @@ public:
|
||||
const std::string &CPU);
|
||||
|
||||
bool isMips1() const { return MipsArchVersion == Mips1; }
|
||||
bool isMips32() const { return MipsArchVersion == Mips32; }
|
||||
bool isMips32r2() const { return MipsArchVersion == Mips32r2; }
|
||||
|
||||
bool isLittle() const { return IsLittle; }
|
||||
bool isFP64bit() const { return IsFP64bit; }
|
||||
|
Loading…
Reference in New Issue
Block a user