[llvm] r205869 - [ARM64] Move CPSRField and DBarrier operands over to AArch64-style disassembly and assembly. This removes the last users of namespace ARM64SYS.
Bradley Smith
bradley.smith at arm.com
Wed Apr 9 07:42:42 PDT 2014
Author: brasmi01
Date: Wed Apr 9 09:42:42 2014
New Revision: 205869
URL: http://llvm.org/viewvc/llvm-project?rev=205869&view=rev
Log:
[ARM64] Move CPSRField and DBarrier operands over to AArch64-style disassembly and assembly. This removes the last users of namespace ARM64SYS.
Modified:
llvm/trunk/lib/Target/ARM64/AsmParser/ARM64AsmParser.cpp
llvm/trunk/lib/Target/ARM64/InstPrinter/ARM64InstPrinter.cpp
llvm/trunk/test/MC/Disassembler/ARM64/system.txt
Modified: llvm/trunk/lib/Target/ARM64/AsmParser/ARM64AsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM64/AsmParser/ARM64AsmParser.cpp?rev=205869&r1=205868&r2=205869&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM64/AsmParser/ARM64AsmParser.cpp (original)
+++ llvm/trunk/lib/Target/ARM64/AsmParser/ARM64AsmParser.cpp Wed Apr 9 09:42:42 2014
@@ -189,13 +189,13 @@ private:
};
struct SystemRegisterOp {
- // 16-bit immediate, usually from the ARM64SYS::SystermRegister enum,
+ // 16-bit immediate, usually from the ARM64SysReg::SysRegValues enum
// but not limited to those values.
uint16_t Val;
};
struct CPSRFieldOp {
- ARM64SYS::CPSRField Field;
+ ARM64PState::PStateValues Field;
};
struct SysCRImmOp {
@@ -336,7 +336,7 @@ public:
return SystemRegister.Val;
}
- ARM64SYS::CPSRField getCPSRField() const {
+ ARM64PState::PStateValues getCPSRField() const {
assert(Kind == k_CPSRField && "Invalid access!");
return CPSRField.Field;
}
@@ -670,7 +670,7 @@ public:
return true;
// SPSel is legal for both the system register and the CPSR-field
// variants of MSR, so special case that. Fugly.
- return (Kind == k_CPSRField && getCPSRField() == ARM64SYS::cpsr_SPSel);
+ return (Kind == k_CPSRField && getCPSRField() == ARM64PState::SPSel);
}
bool isSystemCPSRField() const { return Kind == k_CPSRField; }
bool isReg() const { return Kind == k_Register && !Reg.isVector; }
@@ -1285,8 +1285,8 @@ public:
if (Kind == k_SystemRegister)
Inst.addOperand(MCOperand::CreateImm(getSystemRegister()));
else {
- assert(Kind == k_CPSRField && getCPSRField() == ARM64SYS::cpsr_SPSel);
- Inst.addOperand(MCOperand::CreateImm(ARM64SYS::SPSel));
+ assert(Kind == k_CPSRField && getCPSRField() == ARM64PState::SPSel);
+ Inst.addOperand(MCOperand::CreateImm(ARM64SysReg::SPSel));
}
}
@@ -1615,7 +1615,7 @@ public:
return Op;
}
- static ARM64Operand *CreateCPSRField(ARM64SYS::CPSRField Field, SMLoc S,
+ static ARM64Operand *CreateCPSRField(ARM64PState::PStateValues Field, SMLoc S,
MCContext &Ctx) {
ARM64Operand *Op = new ARM64Operand(k_CPSRField, Ctx);
Op->CPSRField.Field = Field;
@@ -1703,30 +1703,32 @@ void ARM64Operand::print(raw_ostream &OS
<< ") >";
break;
case k_Barrier: {
- const char *Name =
- ARM64SYS::getBarrierOptName((ARM64SYS::BarrierOption)getBarrier());
- OS << "<barrier ";
- if (Name)
- OS << Name;
+ bool Valid;
+ StringRef Name = ARM64DB::DBarrierMapper().toString(getBarrier(), Valid);
+ if (Valid)
+ OS << "<barrier " << Name << ">";
else
- OS << getBarrier();
- OS << ">";
+ OS << "<barrier invalid #" << getCPSRField() << ">";
break;
}
case k_SystemRegister: {
- const char *Name = ARM64SYS::getSystemRegisterName(
- (ARM64SYS::SystemRegister)getSystemRegister());
- OS << "<systemreg ";
- if (Name)
- OS << Name;
+ bool Valid;
+ StringRef Name = ARM64SysReg::MRSMapper().toString(getSystemRegister(), Valid);
+ if (!Valid)
+ Name = ARM64SysReg::MSRMapper().toString(getSystemRegister(), Valid);
+ if (Valid)
+ OS << "<systemreg " << Name << ">";
else
- OS << "#" << getSystemRegister();
- OS << ">";
+ OS << "<systemreg invalid #" << getSystemRegister() << ">";
break;
}
case k_CPSRField: {
- const char *Name = ARM64SYS::getCPSRFieldName(getCPSRField());
- OS << "<cpsrfield " << Name << ">";
+ bool Valid;
+ StringRef Name = ARM64PState::PStateMapper().toString(getCPSRField(), Valid);
+ if (Valid)
+ OS << "<cpsrfield " << Name << ">";
+ else
+ OS << "<cpsrfield invalid #" << getCPSRField() << ">";
break;
}
case k_Immediate:
@@ -2601,27 +2603,15 @@ ARM64AsmParser::tryParseBarrierOperand(O
return MatchOperand_ParseFail;
}
- unsigned Opt = StringSwitch<unsigned>(Tok.getString())
- .Case("oshld", ARM64SYS::OSHLD)
- .Case("oshst", ARM64SYS::OSHST)
- .Case("osh", ARM64SYS::OSH)
- .Case("nshld", ARM64SYS::NSHLD)
- .Case("nshst", ARM64SYS::NSHST)
- .Case("nsh", ARM64SYS::NSH)
- .Case("ishld", ARM64SYS::ISHLD)
- .Case("ishst", ARM64SYS::ISHST)
- .Case("ish", ARM64SYS::ISH)
- .Case("ld", ARM64SYS::LD)
- .Case("st", ARM64SYS::ST)
- .Case("sy", ARM64SYS::SY)
- .Default(ARM64SYS::InvalidBarrier);
- if (Opt == ARM64SYS::InvalidBarrier) {
+ bool Valid;
+ unsigned Opt = ARM64DB::DBarrierMapper().fromString(Tok.getString(), Valid);
+ if (!Valid) {
TokError("invalid barrier option name");
return MatchOperand_ParseFail;
}
// The only valid named option for ISB is 'sy'
- if (Mnemonic == "isb" && Opt != ARM64SYS::SY) {
+ if (Mnemonic == "isb" && Opt != ARM64DB::SY) {
TokError("'sy' or #imm operand expected");
return MatchOperand_ParseFail;
}
@@ -2683,13 +2673,11 @@ ARM64AsmParser::tryParseCPSRField(Operan
if (Tok.isNot(AsmToken::Identifier))
return MatchOperand_NoMatch;
- ARM64SYS::CPSRField Field =
- StringSwitch<ARM64SYS::CPSRField>(Tok.getString().lower())
- .Case("spsel", ARM64SYS::cpsr_SPSel)
- .Case("daifset", ARM64SYS::cpsr_DAIFSet)
- .Case("daifclr", ARM64SYS::cpsr_DAIFClr)
- .Default(ARM64SYS::InvalidCPSRField);
- if (Field == ARM64SYS::InvalidCPSRField)
+ bool Valid;
+ ARM64PState::PStateValues Field = (ARM64PState::PStateValues)
+ ARM64PState::PStateMapper().fromString(Tok.getString(), Valid);
+
+ if (!Valid)
return MatchOperand_NoMatch;
Operands.push_back(
ARM64Operand::CreateCPSRField(Field, getLoc(), getContext()));
Modified: llvm/trunk/lib/Target/ARM64/InstPrinter/ARM64InstPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM64/InstPrinter/ARM64InstPrinter.cpp?rev=205869&r1=205868&r2=205869&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM64/InstPrinter/ARM64InstPrinter.cpp (original)
+++ llvm/trunk/lib/Target/ARM64/InstPrinter/ARM64InstPrinter.cpp Wed Apr 9 09:42:42 2014
@@ -1387,8 +1387,10 @@ void ARM64InstPrinter::printAdrpLabel(co
void ARM64InstPrinter::printBarrierOption(const MCInst *MI, unsigned OpNo,
raw_ostream &O) {
unsigned Val = MI->getOperand(OpNo).getImm();
- const char *Name = ARM64SYS::getBarrierOptName((ARM64SYS::BarrierOption)Val);
- if (Name)
+
+ bool Valid;
+ StringRef Name = ARM64DB::DBarrierMapper().toString(Val, Valid);
+ if (Valid)
O << Name;
else
O << "#" << Val;
@@ -1421,8 +1423,13 @@ void ARM64InstPrinter::printMSRSystemReg
void ARM64InstPrinter::printSystemCPSRField(const MCInst *MI, unsigned OpNo,
raw_ostream &O) {
unsigned Val = MI->getOperand(OpNo).getImm();
- const char *Name = ARM64SYS::getCPSRFieldName((ARM64SYS::CPSRField)Val);
- O << Name;
+
+ bool Valid;
+ StringRef Name = ARM64PState::PStateMapper().toString(Val, Valid);
+ if (Valid)
+ O << StringRef(Name.str()).upper();
+ else
+ O << "#" << Val;
}
void ARM64InstPrinter::printSIMDType10Operand(const MCInst *MI, unsigned OpNo,
Modified: llvm/trunk/test/MC/Disassembler/ARM64/system.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Disassembler/ARM64/system.txt?rev=205869&r1=205868&r2=205869&view=diff
==============================================================================
--- llvm/trunk/test/MC/Disassembler/ARM64/system.txt (original)
+++ llvm/trunk/test/MC/Disassembler/ARM64/system.txt Wed Apr 9 09:42:42 2014
@@ -44,7 +44,7 @@
# CHECK: sys #2, c0, c5, #7
# CHECK: sys #7, c6, c10, #7, x7
# CHECK: sysl x20, #6, c3, c15, #7
-# CHECK: msr SPSel, #0
+# CHECK: msr SPSEL, #0
# CHECK: msr S3_0_C11_C0_0, x0
# CHECK: mrs x0, S3_0_C11_C0_0
More information about the llvm-commits
mailing list