diff options
author | Akira Hatanaka <ahatanaka@mips.com> | 2013-08-20 22:58:56 +0000 |
---|---|---|
committer | Akira Hatanaka <ahatanaka@mips.com> | 2013-08-20 22:58:56 +0000 |
commit | 3531db14c61957e7ad00ce972e9685864c3887da (patch) | |
tree | 2a687704f457441cc8e5b22d42318e8863c80a9a /lib/Target/Mips/AsmParser/MipsAsmParser.cpp | |
parent | 5f560af5411fe4e9f62d4563a74f836b1dae3eae (diff) | |
download | external_llvm-3531db14c61957e7ad00ce972e9685864c3887da.zip external_llvm-3531db14c61957e7ad00ce972e9685864c3887da.tar.gz external_llvm-3531db14c61957e7ad00ce972e9685864c3887da.tar.bz2 |
[mips] Define register class FGRH32 for the high half of the 64-bit floating
point registers. We will need this register class later when we add
definitions for instructions mfhc1 and mthc1. Also, remove sub-register indices
sub_fpeven and sub_fpodd and use sub_lo and sub_hi instead.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@188842 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/Mips/AsmParser/MipsAsmParser.cpp')
-rw-r--r-- | lib/Target/Mips/AsmParser/MipsAsmParser.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/lib/Target/Mips/AsmParser/MipsAsmParser.cpp b/lib/Target/Mips/AsmParser/MipsAsmParser.cpp index c9bc29a..e92d58a 100644 --- a/lib/Target/Mips/AsmParser/MipsAsmParser.cpp +++ b/lib/Target/Mips/AsmParser/MipsAsmParser.cpp @@ -110,6 +110,9 @@ class MipsAsmParser : public MCTargetAsmParser { parseFGR32Regs(SmallVectorImpl<MCParsedAsmOperand*> &Operands); MipsAsmParser::OperandMatchResultTy + parseFGRH32Regs(SmallVectorImpl<MCParsedAsmOperand*> &Operands); + + MipsAsmParser::OperandMatchResultTy parseFCCRegs(SmallVectorImpl<MCParsedAsmOperand*> &Operands); MipsAsmParser::OperandMatchResultTy @@ -224,6 +227,7 @@ public: Kind_GPR64, Kind_HWRegs, Kind_FGR32Regs, + Kind_FGRH32Regs, Kind_FGR64Regs, Kind_AFGR64Regs, Kind_CCRRegs, @@ -408,6 +412,10 @@ public: return (Kind == k_Register) && Reg.Kind == Kind_FGR32Regs; } + bool isFGRH32Asm() const { + return (Kind == k_Register) && Reg.Kind == Kind_FGRH32Regs; + } + bool isFCCRegsAsm() const { return (Kind == k_Register) && Reg.Kind == Kind_FCCRegs; } @@ -893,6 +901,7 @@ int MipsAsmParser::regKindToRegClass(int RegKind) { case MipsOperand::Kind_GPR64: return Mips::GPR64RegClassID; case MipsOperand::Kind_HWRegs: return Mips::HWRegsRegClassID; case MipsOperand::Kind_FGR32Regs: return Mips::FGR32RegClassID; + case MipsOperand::Kind_FGRH32Regs: return Mips::FGRH32RegClassID; case MipsOperand::Kind_FGR64Regs: return Mips::FGR64RegClassID; case MipsOperand::Kind_AFGR64Regs: return Mips::AFGR64RegClassID; case MipsOperand::Kind_CCRRegs: return Mips::CCRRegClassID; @@ -1310,6 +1319,7 @@ MipsAsmParser::parseRegs(SmallVectorImpl<MCParsedAsmOperand*> &Operands, case MipsOperand::Kind_AFGR64Regs: case MipsOperand::Kind_FGR64Regs: case MipsOperand::Kind_FGR32Regs: + case MipsOperand::Kind_FGRH32Regs: RegNum = matchFPURegisterName(RegName); if (RegKind == MipsOperand::Kind_AFGR64Regs) RegNum /= 2; @@ -1416,6 +1426,11 @@ MipsAsmParser::parseFGR32Regs(SmallVectorImpl<MCParsedAsmOperand*> &Operands) { } MipsAsmParser::OperandMatchResultTy +MipsAsmParser::parseFGRH32Regs(SmallVectorImpl<MCParsedAsmOperand*> &Operands) { + return parseRegs(Operands, (int) MipsOperand::Kind_FGRH32Regs); +} + +MipsAsmParser::OperandMatchResultTy MipsAsmParser::parseFCCRegs(SmallVectorImpl<MCParsedAsmOperand*> &Operands) { return parseRegs(Operands, (int) MipsOperand::Kind_FCCRegs); } |