mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-12 01:25:10 +00:00
[AArch64] Don't store available subtarget features in AArch64SysReg::SysRegMapper
Subtarget features must not be a part of the target machine. So, they are now not being stored in SysRegMapper, but provided each time fromString()/toString() are called Reviewers: jmolloy Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D8655 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@233386 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -2638,13 +2638,15 @@ AArch64AsmParser::tryParseSysReg(OperandVector &Operands) {
|
|||||||
return MatchOperand_NoMatch;
|
return MatchOperand_NoMatch;
|
||||||
|
|
||||||
bool IsKnown;
|
bool IsKnown;
|
||||||
auto MRSMapper = AArch64SysReg::MRSMapper(STI.getFeatureBits());
|
auto MRSMapper = AArch64SysReg::MRSMapper();
|
||||||
uint32_t MRSReg = MRSMapper.fromString(Tok.getString(), IsKnown);
|
uint32_t MRSReg = MRSMapper.fromString(Tok.getString(), STI.getFeatureBits(),
|
||||||
|
IsKnown);
|
||||||
assert(IsKnown == (MRSReg != -1U) &&
|
assert(IsKnown == (MRSReg != -1U) &&
|
||||||
"register should be -1 if and only if it's unknown");
|
"register should be -1 if and only if it's unknown");
|
||||||
|
|
||||||
auto MSRMapper = AArch64SysReg::MSRMapper(STI.getFeatureBits());
|
auto MSRMapper = AArch64SysReg::MSRMapper();
|
||||||
uint32_t MSRReg = MSRMapper.fromString(Tok.getString(), IsKnown);
|
uint32_t MSRReg = MSRMapper.fromString(Tok.getString(), STI.getFeatureBits(),
|
||||||
|
IsKnown);
|
||||||
assert(IsKnown == (MSRReg != -1U) &&
|
assert(IsKnown == (MSRReg != -1U) &&
|
||||||
"register should be -1 if and only if it's unknown");
|
"register should be -1 if and only if it's unknown");
|
||||||
|
|
||||||
|
@@ -1276,8 +1276,8 @@ void AArch64InstPrinter::printMRSSystemRegister(const MCInst *MI, unsigned OpNo,
|
|||||||
raw_ostream &O) {
|
raw_ostream &O) {
|
||||||
unsigned Val = MI->getOperand(OpNo).getImm();
|
unsigned Val = MI->getOperand(OpNo).getImm();
|
||||||
|
|
||||||
auto Mapper = AArch64SysReg::MRSMapper(getAvailableFeatures());
|
auto Mapper = AArch64SysReg::MRSMapper();
|
||||||
std::string Name = Mapper.toString(Val);
|
std::string Name = Mapper.toString(Val, getAvailableFeatures());
|
||||||
|
|
||||||
O << StringRef(Name).upper();
|
O << StringRef(Name).upper();
|
||||||
}
|
}
|
||||||
@@ -1286,8 +1286,8 @@ void AArch64InstPrinter::printMSRSystemRegister(const MCInst *MI, unsigned OpNo,
|
|||||||
raw_ostream &O) {
|
raw_ostream &O) {
|
||||||
unsigned Val = MI->getOperand(OpNo).getImm();
|
unsigned Val = MI->getOperand(OpNo).getImm();
|
||||||
|
|
||||||
auto Mapper = AArch64SysReg::MSRMapper(getAvailableFeatures());
|
auto Mapper = AArch64SysReg::MSRMapper();
|
||||||
std::string Name = Mapper.toString(Val);
|
std::string Name = Mapper.toString(Val, getAvailableFeatures());
|
||||||
|
|
||||||
O << StringRef(Name).upper();
|
O << StringRef(Name).upper();
|
||||||
}
|
}
|
||||||
|
@@ -245,8 +245,7 @@ const AArch64NamedImmMapper::Mapping AArch64SysReg::MRSMapper::MRSMappings[] = {
|
|||||||
{"ich_elsr_el2", ICH_ELSR_EL2}
|
{"ich_elsr_el2", ICH_ELSR_EL2}
|
||||||
};
|
};
|
||||||
|
|
||||||
AArch64SysReg::MRSMapper::MRSMapper(uint64_t FeatureBits)
|
AArch64SysReg::MRSMapper::MRSMapper() {
|
||||||
: SysRegMapper(FeatureBits) {
|
|
||||||
InstMappings = &MRSMappings[0];
|
InstMappings = &MRSMappings[0];
|
||||||
NumInstMappings = llvm::array_lengthof(MRSMappings);
|
NumInstMappings = llvm::array_lengthof(MRSMappings);
|
||||||
}
|
}
|
||||||
@@ -269,8 +268,7 @@ const AArch64NamedImmMapper::Mapping AArch64SysReg::MSRMapper::MSRMappings[] = {
|
|||||||
{"icc_sgi0r_el1", ICC_SGI0R_EL1}
|
{"icc_sgi0r_el1", ICC_SGI0R_EL1}
|
||||||
};
|
};
|
||||||
|
|
||||||
AArch64SysReg::MSRMapper::MSRMapper(uint64_t FeatureBits)
|
AArch64SysReg::MSRMapper::MSRMapper() {
|
||||||
: SysRegMapper(FeatureBits) {
|
|
||||||
InstMappings = &MSRMappings[0];
|
InstMappings = &MSRMappings[0];
|
||||||
NumInstMappings = llvm::array_lengthof(MSRMappings);
|
NumInstMappings = llvm::array_lengthof(MSRMappings);
|
||||||
}
|
}
|
||||||
@@ -761,7 +759,8 @@ AArch64SysReg::SysRegMapper::CycloneSysRegMappings[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
uint32_t
|
uint32_t
|
||||||
AArch64SysReg::SysRegMapper::fromString(StringRef Name, bool &Valid) const {
|
AArch64SysReg::SysRegMapper::fromString(StringRef Name, uint64_t FeatureBits,
|
||||||
|
bool &Valid) const {
|
||||||
std::string NameLower = Name.lower();
|
std::string NameLower = Name.lower();
|
||||||
|
|
||||||
// First search the registers shared by all
|
// First search the registers shared by all
|
||||||
@@ -814,7 +813,7 @@ AArch64SysReg::SysRegMapper::fromString(StringRef Name, bool &Valid) const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::string
|
std::string
|
||||||
AArch64SysReg::SysRegMapper::toString(uint32_t Bits) const {
|
AArch64SysReg::SysRegMapper::toString(uint32_t Bits, uint64_t FeatureBits) const {
|
||||||
// First search the registers shared by all
|
// First search the registers shared by all
|
||||||
for (unsigned i = 0; i < array_lengthof(SysRegMappings); ++i) {
|
for (unsigned i = 0; i < array_lengthof(SysRegMappings); ++i) {
|
||||||
if (SysRegMappings[i].Value == Bits) {
|
if (SysRegMappings[i].Value == Bits) {
|
||||||
|
@@ -1139,21 +1139,20 @@ namespace AArch64SysReg {
|
|||||||
|
|
||||||
const AArch64NamedImmMapper::Mapping *InstMappings;
|
const AArch64NamedImmMapper::Mapping *InstMappings;
|
||||||
size_t NumInstMappings;
|
size_t NumInstMappings;
|
||||||
uint64_t FeatureBits;
|
|
||||||
|
|
||||||
SysRegMapper(uint64_t FeatureBits) : FeatureBits(FeatureBits) { }
|
SysRegMapper() { }
|
||||||
uint32_t fromString(StringRef Name, bool &Valid) const;
|
uint32_t fromString(StringRef Name, uint64_t FeatureBits, bool &Valid) const;
|
||||||
std::string toString(uint32_t Bits) const;
|
std::string toString(uint32_t Bits, uint64_t FeatureBits) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MSRMapper : SysRegMapper {
|
struct MSRMapper : SysRegMapper {
|
||||||
static const AArch64NamedImmMapper::Mapping MSRMappings[];
|
static const AArch64NamedImmMapper::Mapping MSRMappings[];
|
||||||
MSRMapper(uint64_t FeatureBits);
|
MSRMapper();
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MRSMapper : SysRegMapper {
|
struct MRSMapper : SysRegMapper {
|
||||||
static const AArch64NamedImmMapper::Mapping MRSMappings[];
|
static const AArch64NamedImmMapper::Mapping MRSMappings[];
|
||||||
MRSMapper(uint64_t FeatureBits);
|
MRSMapper();
|
||||||
};
|
};
|
||||||
|
|
||||||
uint32_t ParseGenericRegister(StringRef Name, bool &Valid);
|
uint32_t ParseGenericRegister(StringRef Name, bool &Valid);
|
||||||
|
Reference in New Issue
Block a user