Use Symbol for inline asm register class names
This takes care of one "FIXME": // FIXME: use direct symbol comparison for register class names Instead of using string literals, this uses Symbol for register class names.
This commit is contained in:
parent
d32c320d7e
commit
40ed0f6857
2 changed files with 45 additions and 29 deletions
|
@ -20,16 +20,16 @@ macro_rules! def_reg_class {
|
|||
}
|
||||
|
||||
impl $arch_regclass {
|
||||
pub fn name(self) -> &'static str {
|
||||
pub fn name(self) -> rustc_span::Symbol {
|
||||
match self {
|
||||
$(Self::$class => stringify!($class),)*
|
||||
$(Self::$class => rustc_span::symbol::sym::$class,)*
|
||||
}
|
||||
}
|
||||
|
||||
pub fn parse(_arch: super::InlineAsmArch, name: &str) -> Result<Self, &'static str> {
|
||||
pub fn parse(_arch: super::InlineAsmArch, name: rustc_span::Symbol) -> Result<Self, &'static str> {
|
||||
match name {
|
||||
$(
|
||||
stringify!($class) => Ok(Self::$class),
|
||||
rustc_span::sym::$class => Ok(Self::$class),
|
||||
)*
|
||||
_ => Err("unknown register class"),
|
||||
}
|
||||
|
@ -327,7 +327,7 @@ pub enum InlineAsmRegClass {
|
|||
}
|
||||
|
||||
impl InlineAsmRegClass {
|
||||
pub fn name(self) -> &'static str {
|
||||
pub fn name(self) -> Symbol {
|
||||
match self {
|
||||
Self::X86(r) => r.name(),
|
||||
Self::Arm(r) => r.name(),
|
||||
|
@ -422,29 +422,22 @@ impl InlineAsmRegClass {
|
|||
}
|
||||
|
||||
pub fn parse(arch: InlineAsmArch, name: Symbol) -> Result<Self, &'static str> {
|
||||
// FIXME: use direct symbol comparison for register class names
|
||||
name.with(|name| {
|
||||
Ok(match arch {
|
||||
InlineAsmArch::X86 | InlineAsmArch::X86_64 => {
|
||||
Self::X86(X86InlineAsmRegClass::parse(arch, name)?)
|
||||
}
|
||||
InlineAsmArch::Arm => Self::Arm(ArmInlineAsmRegClass::parse(arch, name)?),
|
||||
InlineAsmArch::AArch64 => {
|
||||
Self::AArch64(AArch64InlineAsmRegClass::parse(arch, name)?)
|
||||
}
|
||||
InlineAsmArch::RiscV32 | InlineAsmArch::RiscV64 => {
|
||||
Self::RiscV(RiscVInlineAsmRegClass::parse(arch, name)?)
|
||||
}
|
||||
InlineAsmArch::Nvptx64 => Self::Nvptx(NvptxInlineAsmRegClass::parse(arch, name)?),
|
||||
InlineAsmArch::Hexagon => {
|
||||
Self::Hexagon(HexagonInlineAsmRegClass::parse(arch, name)?)
|
||||
}
|
||||
InlineAsmArch::Mips | InlineAsmArch::Mips64 => {
|
||||
Self::Mips(MipsInlineAsmRegClass::parse(arch, name)?)
|
||||
}
|
||||
InlineAsmArch::SpirV => Self::SpirV(SpirVInlineAsmRegClass::parse(arch, name)?),
|
||||
InlineAsmArch::Wasm32 => Self::Wasm(WasmInlineAsmRegClass::parse(arch, name)?),
|
||||
})
|
||||
Ok(match arch {
|
||||
InlineAsmArch::X86 | InlineAsmArch::X86_64 => {
|
||||
Self::X86(X86InlineAsmRegClass::parse(arch, name)?)
|
||||
}
|
||||
InlineAsmArch::Arm => Self::Arm(ArmInlineAsmRegClass::parse(arch, name)?),
|
||||
InlineAsmArch::AArch64 => Self::AArch64(AArch64InlineAsmRegClass::parse(arch, name)?),
|
||||
InlineAsmArch::RiscV32 | InlineAsmArch::RiscV64 => {
|
||||
Self::RiscV(RiscVInlineAsmRegClass::parse(arch, name)?)
|
||||
}
|
||||
InlineAsmArch::Nvptx64 => Self::Nvptx(NvptxInlineAsmRegClass::parse(arch, name)?),
|
||||
InlineAsmArch::Hexagon => Self::Hexagon(HexagonInlineAsmRegClass::parse(arch, name)?),
|
||||
InlineAsmArch::Mips | InlineAsmArch::Mips64 => {
|
||||
Self::Mips(MipsInlineAsmRegClass::parse(arch, name)?)
|
||||
}
|
||||
InlineAsmArch::SpirV => Self::SpirV(SpirVInlineAsmRegClass::parse(arch, name)?),
|
||||
InlineAsmArch::Wasm32 => Self::Wasm(WasmInlineAsmRegClass::parse(arch, name)?),
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -484,7 +477,7 @@ impl fmt::Display for InlineAsmRegOrRegClass {
|
|||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
match self {
|
||||
Self::Reg(r) => write!(f, "\"{}\"", r.name()),
|
||||
Self::RegClass(r) => f.write_str(r.name()),
|
||||
Self::RegClass(r) => write!(f, "{}", r.name()),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue