mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-24 23:28:41 +00:00
Recommit "[mips] Add names and tests for the hardware registers"
The original commit r221299 was reverted in r221307. I removed the name "hrw_ulr" ($29) from the original commit because two tests were failing. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221681 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -221,6 +221,8 @@ class MipsAsmParser : public MCTargetAsmParser {
|
||||
|
||||
int matchCPURegisterName(StringRef Symbol);
|
||||
|
||||
int matchHWRegsRegisterName(StringRef Symbol);
|
||||
|
||||
int matchRegisterByNumber(unsigned RegNum, unsigned RegClass);
|
||||
|
||||
int matchFPURegisterName(StringRef Name);
|
||||
@@ -857,6 +859,14 @@ public:
|
||||
return CreateReg(Index, RegKind_FGR, RegInfo, S, E, Parser);
|
||||
}
|
||||
|
||||
/// Create a register that is definitely a HWReg.
|
||||
/// This is typically only used for named registers such as $hwr_cpunum.
|
||||
static std::unique_ptr<MipsOperand>
|
||||
createHWRegsReg(unsigned Index, const MCRegisterInfo *RegInfo,
|
||||
SMLoc S, SMLoc E, MipsAsmParser &Parser) {
|
||||
return CreateReg(Index, RegKind_HWRegs, RegInfo, S, E, Parser);
|
||||
}
|
||||
|
||||
/// Create a register that is definitely an FCC.
|
||||
/// This is typically only used for named registers such as $fcc0.
|
||||
static std::unique_ptr<MipsOperand>
|
||||
@@ -1803,6 +1813,19 @@ int MipsAsmParser::matchCPURegisterName(StringRef Name) {
|
||||
return CC;
|
||||
}
|
||||
|
||||
int MipsAsmParser::matchHWRegsRegisterName(StringRef Name) {
|
||||
int CC;
|
||||
|
||||
CC = StringSwitch<unsigned>(Name)
|
||||
.Case("hwr_cpunum", 0)
|
||||
.Case("hwr_synci_step", 1)
|
||||
.Case("hwr_cc", 2)
|
||||
.Case("hwr_ccres", 3)
|
||||
.Default(-1);
|
||||
|
||||
return CC;
|
||||
}
|
||||
|
||||
int MipsAsmParser::matchFPURegisterName(StringRef Name) {
|
||||
|
||||
if (Name[0] == 'f') {
|
||||
@@ -2290,6 +2313,13 @@ MipsAsmParser::matchAnyRegisterNameWithoutDollar(OperandVector &Operands,
|
||||
return MatchOperand_Success;
|
||||
}
|
||||
|
||||
Index = matchHWRegsRegisterName(Identifier);
|
||||
if (Index != -1) {
|
||||
Operands.push_back(MipsOperand::createHWRegsReg(
|
||||
Index, getContext().getRegisterInfo(), S, getLexer().getLoc(), *this));
|
||||
return MatchOperand_Success;
|
||||
}
|
||||
|
||||
Index = matchFPURegisterName(Identifier);
|
||||
if (Index != -1) {
|
||||
Operands.push_back(MipsOperand::createFGRReg(
|
||||
|
Reference in New Issue
Block a user