Skip to main content

rustc_target/asm/
riscv.rs

1use std::fmt;
2
3use rustc_data_structures::fx::FxIndexSet;
4use rustc_span::{Symbol, sym};
5
6use super::{InlineAsmArch, InlineAsmType, ModifierInfo};
7use crate::spec::{RelocModel, Target};
8
9#[allow(non_camel_case_types)]
pub enum RiscVInlineAsmRegClass { reg, freg, vreg, }
#[automatically_derived]
#[allow(non_camel_case_types)]
impl ::core::marker::Copy for RiscVInlineAsmRegClass { }
#[automatically_derived]
#[doc(hidden)]
#[allow(non_camel_case_types)]
unsafe impl ::core::clone::TrivialClone for RiscVInlineAsmRegClass { }
#[automatically_derived]
#[allow(non_camel_case_types)]
impl ::core::clone::Clone for RiscVInlineAsmRegClass {
    #[inline]
    fn clone(&self) -> RiscVInlineAsmRegClass { *self }
}
const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for RiscVInlineAsmRegClass {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        RiscVInlineAsmRegClass::reg => { 0usize }
                        RiscVInlineAsmRegClass::freg => { 1usize }
                        RiscVInlineAsmRegClass::vreg => { 2usize }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    RiscVInlineAsmRegClass::reg => {}
                    RiscVInlineAsmRegClass::freg => {}
                    RiscVInlineAsmRegClass::vreg => {}
                }
            }
        }
    };
const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for RiscVInlineAsmRegClass {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => { RiscVInlineAsmRegClass::reg }
                    1usize => { RiscVInlineAsmRegClass::freg }
                    2usize => { RiscVInlineAsmRegClass::vreg }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `RiscVInlineAsmRegClass`, expected 0..3, actual {0}",
                                n));
                    }
                }
            }
        }
    };
#[automatically_derived]
#[allow(non_camel_case_types)]
impl ::core::fmt::Debug for RiscVInlineAsmRegClass {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                RiscVInlineAsmRegClass::reg => "reg",
                RiscVInlineAsmRegClass::freg => "freg",
                RiscVInlineAsmRegClass::vreg => "vreg",
            })
    }
}
#[automatically_derived]
#[allow(non_camel_case_types)]
impl ::core::cmp::Eq for RiscVInlineAsmRegClass {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_receiver_is_total_eq(&self) {}
}
#[automatically_derived]
#[allow(non_camel_case_types)]
impl ::core::marker::StructuralPartialEq for RiscVInlineAsmRegClass { }
#[automatically_derived]
#[allow(non_camel_case_types)]
impl ::core::cmp::PartialEq for RiscVInlineAsmRegClass {
    #[inline]
    fn eq(&self, other: &RiscVInlineAsmRegClass) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr
    }
}
#[automatically_derived]
#[allow(non_camel_case_types)]
impl ::core::cmp::PartialOrd for RiscVInlineAsmRegClass {
    #[inline]
    fn partial_cmp(&self, other: &RiscVInlineAsmRegClass)
        -> ::core::option::Option<::core::cmp::Ordering> {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr)
    }
}
#[automatically_derived]
#[allow(non_camel_case_types)]
impl ::core::hash::Hash for RiscVInlineAsmRegClass {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        ::core::hash::Hash::hash(&__self_discr, state)
    }
}
const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for RiscVInlineAsmRegClass where __CTX: crate::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                ::std::mem::discriminant(self).hash_stable(__hcx, __hasher);
                match *self {
                    RiscVInlineAsmRegClass::reg => {}
                    RiscVInlineAsmRegClass::freg => {}
                    RiscVInlineAsmRegClass::vreg => {}
                }
            }
        }
    };
impl RiscVInlineAsmRegClass {
    pub fn name(self) -> rustc_span::Symbol {
        match self {
            Self::reg => rustc_span::sym::reg,
            Self::freg => rustc_span::sym::freg,
            Self::vreg => rustc_span::sym::vreg,
        }
    }
    pub fn parse(name: rustc_span::Symbol)
        -> Result<Self, &'static [rustc_span::Symbol]> {
        match name {
            rustc_span::sym::reg => Ok(Self::reg),
            rustc_span::sym::freg => Ok(Self::freg),
            rustc_span::sym::vreg => Ok(Self::vreg),
            _ =>
                Err(&[rustc_span::sym::reg, rustc_span::sym::freg,
                                rustc_span::sym::vreg]),
        }
    }
}
pub(super) fn regclass_map()
    ->
        rustc_data_structures::fx::FxHashMap<super::InlineAsmRegClass,
        rustc_data_structures::fx::FxIndexSet<super::InlineAsmReg>> {
    use rustc_data_structures::fx::FxHashMap;
    use rustc_data_structures::fx::FxIndexSet;
    use super::InlineAsmRegClass;
    let mut map = FxHashMap::default();
    map.insert(InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::reg),
        FxIndexSet::default());
    map.insert(InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::freg),
        FxIndexSet::default());
    map.insert(InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::vreg),
        FxIndexSet::default());
    map
}def_reg_class! {
10    RiscV RiscVInlineAsmRegClass {
11        reg,
12        freg,
13        vreg,
14    }
15}
16
17impl RiscVInlineAsmRegClass {
18    pub fn valid_modifiers(self, _arch: super::InlineAsmArch) -> &'static [char] {
19        &[]
20    }
21
22    pub fn suggest_class(self, _arch: InlineAsmArch, _ty: InlineAsmType) -> Option<Self> {
23        None
24    }
25
26    pub fn suggest_modifier(
27        self,
28        _arch: InlineAsmArch,
29        _ty: InlineAsmType,
30    ) -> Option<ModifierInfo> {
31        None
32    }
33
34    pub fn default_modifier(self, _arch: InlineAsmArch) -> Option<ModifierInfo> {
35        None
36    }
37
38    pub fn supported_types(
39        self,
40        arch: InlineAsmArch,
41    ) -> &'static [(InlineAsmType, Option<Symbol>)] {
42        match self {
43            Self::reg => {
44                if arch == InlineAsmArch::RiscV64 {
45                    {
    use super::InlineAsmType::*;
    &[(I8, None), (I16, None), (I32, None), (I64, None), (F16, None),
                (F32, None), (F64, None)]
}types! { _: I8, I16, I32, I64, F16, F32, F64; }
46                } else {
47                    {
    use super::InlineAsmType::*;
    &[(I8, None), (I16, None), (I32, None), (F16, None), (F32, None)]
}types! { _: I8, I16, I32, F16, F32; }
48                }
49            }
50            // FIXME(f128): Add `q: F128;` once LLVM support the `Q` extension.
51            Self::freg => {
    use super::InlineAsmType::*;
    &[(F16, Some(rustc_span::sym::f)), (F32, Some(rustc_span::sym::f)),
                (F64, Some(rustc_span::sym::d))]
}types! { f: F16, F32; d: F64; },
52            Self::vreg => &[],
53        }
54    }
55}
56
57pub(crate) fn is_e(target_features: &FxIndexSet<Symbol>) -> bool {
58    target_features.contains(&sym::e)
59}
60
61fn not_e(
62    _arch: InlineAsmArch,
63    _reloc_model: RelocModel,
64    target_features: &FxIndexSet<Symbol>,
65    _target: &Target,
66    _is_clobber: bool,
67) -> Result<(), &'static str> {
68    if is_e(target_features) {
69        Err("register can't be used with the `e` target feature")
70    } else {
71        Ok(())
72    }
73}
74
75#[allow(unreachable_code)]
#[allow(non_camel_case_types)]
pub enum RiscVInlineAsmReg {
    x1,
    x5,
    x6,
    x7,
    x10,
    x11,
    x12,
    x13,
    x14,
    x15,
    x16,
    x17,
    x18,
    x19,
    x20,
    x21,
    x22,
    x23,
    x24,
    x25,
    x26,
    x27,
    x28,
    x29,
    x30,
    x31,
    f0,
    f1,
    f2,
    f3,
    f4,
    f5,
    f6,
    f7,
    f8,
    f9,
    f10,
    f11,
    f12,
    f13,
    f14,
    f15,
    f16,
    f17,
    f18,
    f19,
    f20,
    f21,
    f22,
    f23,
    f24,
    f25,
    f26,
    f27,
    f28,
    f29,
    f30,
    f31,
    v0,
    v1,
    v2,
    v3,
    v4,
    v5,
    v6,
    v7,
    v8,
    v9,
    v10,
    v11,
    v12,
    v13,
    v14,
    v15,
    v16,
    v17,
    v18,
    v19,
    v20,
    v21,
    v22,
    v23,
    v24,
    v25,
    v26,
    v27,
    v28,
    v29,
    v30,
    v31,
}
#[automatically_derived]
#[allow(unreachable_code)]
#[allow(non_camel_case_types)]
impl ::core::marker::Copy for RiscVInlineAsmReg { }
#[automatically_derived]
#[doc(hidden)]
#[allow(unreachable_code)]
#[allow(non_camel_case_types)]
unsafe impl ::core::clone::TrivialClone for RiscVInlineAsmReg { }
#[automatically_derived]
#[allow(unreachable_code)]
#[allow(non_camel_case_types)]
impl ::core::clone::Clone for RiscVInlineAsmReg {
    #[inline]
    fn clone(&self) -> RiscVInlineAsmReg { *self }
}
const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for RiscVInlineAsmReg {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        RiscVInlineAsmReg::x1 => { 0usize }
                        RiscVInlineAsmReg::x5 => { 1usize }
                        RiscVInlineAsmReg::x6 => { 2usize }
                        RiscVInlineAsmReg::x7 => { 3usize }
                        RiscVInlineAsmReg::x10 => { 4usize }
                        RiscVInlineAsmReg::x11 => { 5usize }
                        RiscVInlineAsmReg::x12 => { 6usize }
                        RiscVInlineAsmReg::x13 => { 7usize }
                        RiscVInlineAsmReg::x14 => { 8usize }
                        RiscVInlineAsmReg::x15 => { 9usize }
                        RiscVInlineAsmReg::x16 => { 10usize }
                        RiscVInlineAsmReg::x17 => { 11usize }
                        RiscVInlineAsmReg::x18 => { 12usize }
                        RiscVInlineAsmReg::x19 => { 13usize }
                        RiscVInlineAsmReg::x20 => { 14usize }
                        RiscVInlineAsmReg::x21 => { 15usize }
                        RiscVInlineAsmReg::x22 => { 16usize }
                        RiscVInlineAsmReg::x23 => { 17usize }
                        RiscVInlineAsmReg::x24 => { 18usize }
                        RiscVInlineAsmReg::x25 => { 19usize }
                        RiscVInlineAsmReg::x26 => { 20usize }
                        RiscVInlineAsmReg::x27 => { 21usize }
                        RiscVInlineAsmReg::x28 => { 22usize }
                        RiscVInlineAsmReg::x29 => { 23usize }
                        RiscVInlineAsmReg::x30 => { 24usize }
                        RiscVInlineAsmReg::x31 => { 25usize }
                        RiscVInlineAsmReg::f0 => { 26usize }
                        RiscVInlineAsmReg::f1 => { 27usize }
                        RiscVInlineAsmReg::f2 => { 28usize }
                        RiscVInlineAsmReg::f3 => { 29usize }
                        RiscVInlineAsmReg::f4 => { 30usize }
                        RiscVInlineAsmReg::f5 => { 31usize }
                        RiscVInlineAsmReg::f6 => { 32usize }
                        RiscVInlineAsmReg::f7 => { 33usize }
                        RiscVInlineAsmReg::f8 => { 34usize }
                        RiscVInlineAsmReg::f9 => { 35usize }
                        RiscVInlineAsmReg::f10 => { 36usize }
                        RiscVInlineAsmReg::f11 => { 37usize }
                        RiscVInlineAsmReg::f12 => { 38usize }
                        RiscVInlineAsmReg::f13 => { 39usize }
                        RiscVInlineAsmReg::f14 => { 40usize }
                        RiscVInlineAsmReg::f15 => { 41usize }
                        RiscVInlineAsmReg::f16 => { 42usize }
                        RiscVInlineAsmReg::f17 => { 43usize }
                        RiscVInlineAsmReg::f18 => { 44usize }
                        RiscVInlineAsmReg::f19 => { 45usize }
                        RiscVInlineAsmReg::f20 => { 46usize }
                        RiscVInlineAsmReg::f21 => { 47usize }
                        RiscVInlineAsmReg::f22 => { 48usize }
                        RiscVInlineAsmReg::f23 => { 49usize }
                        RiscVInlineAsmReg::f24 => { 50usize }
                        RiscVInlineAsmReg::f25 => { 51usize }
                        RiscVInlineAsmReg::f26 => { 52usize }
                        RiscVInlineAsmReg::f27 => { 53usize }
                        RiscVInlineAsmReg::f28 => { 54usize }
                        RiscVInlineAsmReg::f29 => { 55usize }
                        RiscVInlineAsmReg::f30 => { 56usize }
                        RiscVInlineAsmReg::f31 => { 57usize }
                        RiscVInlineAsmReg::v0 => { 58usize }
                        RiscVInlineAsmReg::v1 => { 59usize }
                        RiscVInlineAsmReg::v2 => { 60usize }
                        RiscVInlineAsmReg::v3 => { 61usize }
                        RiscVInlineAsmReg::v4 => { 62usize }
                        RiscVInlineAsmReg::v5 => { 63usize }
                        RiscVInlineAsmReg::v6 => { 64usize }
                        RiscVInlineAsmReg::v7 => { 65usize }
                        RiscVInlineAsmReg::v8 => { 66usize }
                        RiscVInlineAsmReg::v9 => { 67usize }
                        RiscVInlineAsmReg::v10 => { 68usize }
                        RiscVInlineAsmReg::v11 => { 69usize }
                        RiscVInlineAsmReg::v12 => { 70usize }
                        RiscVInlineAsmReg::v13 => { 71usize }
                        RiscVInlineAsmReg::v14 => { 72usize }
                        RiscVInlineAsmReg::v15 => { 73usize }
                        RiscVInlineAsmReg::v16 => { 74usize }
                        RiscVInlineAsmReg::v17 => { 75usize }
                        RiscVInlineAsmReg::v18 => { 76usize }
                        RiscVInlineAsmReg::v19 => { 77usize }
                        RiscVInlineAsmReg::v20 => { 78usize }
                        RiscVInlineAsmReg::v21 => { 79usize }
                        RiscVInlineAsmReg::v22 => { 80usize }
                        RiscVInlineAsmReg::v23 => { 81usize }
                        RiscVInlineAsmReg::v24 => { 82usize }
                        RiscVInlineAsmReg::v25 => { 83usize }
                        RiscVInlineAsmReg::v26 => { 84usize }
                        RiscVInlineAsmReg::v27 => { 85usize }
                        RiscVInlineAsmReg::v28 => { 86usize }
                        RiscVInlineAsmReg::v29 => { 87usize }
                        RiscVInlineAsmReg::v30 => { 88usize }
                        RiscVInlineAsmReg::v31 => { 89usize }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    RiscVInlineAsmReg::x1 => {}
                    RiscVInlineAsmReg::x5 => {}
                    RiscVInlineAsmReg::x6 => {}
                    RiscVInlineAsmReg::x7 => {}
                    RiscVInlineAsmReg::x10 => {}
                    RiscVInlineAsmReg::x11 => {}
                    RiscVInlineAsmReg::x12 => {}
                    RiscVInlineAsmReg::x13 => {}
                    RiscVInlineAsmReg::x14 => {}
                    RiscVInlineAsmReg::x15 => {}
                    RiscVInlineAsmReg::x16 => {}
                    RiscVInlineAsmReg::x17 => {}
                    RiscVInlineAsmReg::x18 => {}
                    RiscVInlineAsmReg::x19 => {}
                    RiscVInlineAsmReg::x20 => {}
                    RiscVInlineAsmReg::x21 => {}
                    RiscVInlineAsmReg::x22 => {}
                    RiscVInlineAsmReg::x23 => {}
                    RiscVInlineAsmReg::x24 => {}
                    RiscVInlineAsmReg::x25 => {}
                    RiscVInlineAsmReg::x26 => {}
                    RiscVInlineAsmReg::x27 => {}
                    RiscVInlineAsmReg::x28 => {}
                    RiscVInlineAsmReg::x29 => {}
                    RiscVInlineAsmReg::x30 => {}
                    RiscVInlineAsmReg::x31 => {}
                    RiscVInlineAsmReg::f0 => {}
                    RiscVInlineAsmReg::f1 => {}
                    RiscVInlineAsmReg::f2 => {}
                    RiscVInlineAsmReg::f3 => {}
                    RiscVInlineAsmReg::f4 => {}
                    RiscVInlineAsmReg::f5 => {}
                    RiscVInlineAsmReg::f6 => {}
                    RiscVInlineAsmReg::f7 => {}
                    RiscVInlineAsmReg::f8 => {}
                    RiscVInlineAsmReg::f9 => {}
                    RiscVInlineAsmReg::f10 => {}
                    RiscVInlineAsmReg::f11 => {}
                    RiscVInlineAsmReg::f12 => {}
                    RiscVInlineAsmReg::f13 => {}
                    RiscVInlineAsmReg::f14 => {}
                    RiscVInlineAsmReg::f15 => {}
                    RiscVInlineAsmReg::f16 => {}
                    RiscVInlineAsmReg::f17 => {}
                    RiscVInlineAsmReg::f18 => {}
                    RiscVInlineAsmReg::f19 => {}
                    RiscVInlineAsmReg::f20 => {}
                    RiscVInlineAsmReg::f21 => {}
                    RiscVInlineAsmReg::f22 => {}
                    RiscVInlineAsmReg::f23 => {}
                    RiscVInlineAsmReg::f24 => {}
                    RiscVInlineAsmReg::f25 => {}
                    RiscVInlineAsmReg::f26 => {}
                    RiscVInlineAsmReg::f27 => {}
                    RiscVInlineAsmReg::f28 => {}
                    RiscVInlineAsmReg::f29 => {}
                    RiscVInlineAsmReg::f30 => {}
                    RiscVInlineAsmReg::f31 => {}
                    RiscVInlineAsmReg::v0 => {}
                    RiscVInlineAsmReg::v1 => {}
                    RiscVInlineAsmReg::v2 => {}
                    RiscVInlineAsmReg::v3 => {}
                    RiscVInlineAsmReg::v4 => {}
                    RiscVInlineAsmReg::v5 => {}
                    RiscVInlineAsmReg::v6 => {}
                    RiscVInlineAsmReg::v7 => {}
                    RiscVInlineAsmReg::v8 => {}
                    RiscVInlineAsmReg::v9 => {}
                    RiscVInlineAsmReg::v10 => {}
                    RiscVInlineAsmReg::v11 => {}
                    RiscVInlineAsmReg::v12 => {}
                    RiscVInlineAsmReg::v13 => {}
                    RiscVInlineAsmReg::v14 => {}
                    RiscVInlineAsmReg::v15 => {}
                    RiscVInlineAsmReg::v16 => {}
                    RiscVInlineAsmReg::v17 => {}
                    RiscVInlineAsmReg::v18 => {}
                    RiscVInlineAsmReg::v19 => {}
                    RiscVInlineAsmReg::v20 => {}
                    RiscVInlineAsmReg::v21 => {}
                    RiscVInlineAsmReg::v22 => {}
                    RiscVInlineAsmReg::v23 => {}
                    RiscVInlineAsmReg::v24 => {}
                    RiscVInlineAsmReg::v25 => {}
                    RiscVInlineAsmReg::v26 => {}
                    RiscVInlineAsmReg::v27 => {}
                    RiscVInlineAsmReg::v28 => {}
                    RiscVInlineAsmReg::v29 => {}
                    RiscVInlineAsmReg::v30 => {}
                    RiscVInlineAsmReg::v31 => {}
                }
            }
        }
    };
const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for RiscVInlineAsmReg {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => { RiscVInlineAsmReg::x1 }
                    1usize => { RiscVInlineAsmReg::x5 }
                    2usize => { RiscVInlineAsmReg::x6 }
                    3usize => { RiscVInlineAsmReg::x7 }
                    4usize => { RiscVInlineAsmReg::x10 }
                    5usize => { RiscVInlineAsmReg::x11 }
                    6usize => { RiscVInlineAsmReg::x12 }
                    7usize => { RiscVInlineAsmReg::x13 }
                    8usize => { RiscVInlineAsmReg::x14 }
                    9usize => { RiscVInlineAsmReg::x15 }
                    10usize => { RiscVInlineAsmReg::x16 }
                    11usize => { RiscVInlineAsmReg::x17 }
                    12usize => { RiscVInlineAsmReg::x18 }
                    13usize => { RiscVInlineAsmReg::x19 }
                    14usize => { RiscVInlineAsmReg::x20 }
                    15usize => { RiscVInlineAsmReg::x21 }
                    16usize => { RiscVInlineAsmReg::x22 }
                    17usize => { RiscVInlineAsmReg::x23 }
                    18usize => { RiscVInlineAsmReg::x24 }
                    19usize => { RiscVInlineAsmReg::x25 }
                    20usize => { RiscVInlineAsmReg::x26 }
                    21usize => { RiscVInlineAsmReg::x27 }
                    22usize => { RiscVInlineAsmReg::x28 }
                    23usize => { RiscVInlineAsmReg::x29 }
                    24usize => { RiscVInlineAsmReg::x30 }
                    25usize => { RiscVInlineAsmReg::x31 }
                    26usize => { RiscVInlineAsmReg::f0 }
                    27usize => { RiscVInlineAsmReg::f1 }
                    28usize => { RiscVInlineAsmReg::f2 }
                    29usize => { RiscVInlineAsmReg::f3 }
                    30usize => { RiscVInlineAsmReg::f4 }
                    31usize => { RiscVInlineAsmReg::f5 }
                    32usize => { RiscVInlineAsmReg::f6 }
                    33usize => { RiscVInlineAsmReg::f7 }
                    34usize => { RiscVInlineAsmReg::f8 }
                    35usize => { RiscVInlineAsmReg::f9 }
                    36usize => { RiscVInlineAsmReg::f10 }
                    37usize => { RiscVInlineAsmReg::f11 }
                    38usize => { RiscVInlineAsmReg::f12 }
                    39usize => { RiscVInlineAsmReg::f13 }
                    40usize => { RiscVInlineAsmReg::f14 }
                    41usize => { RiscVInlineAsmReg::f15 }
                    42usize => { RiscVInlineAsmReg::f16 }
                    43usize => { RiscVInlineAsmReg::f17 }
                    44usize => { RiscVInlineAsmReg::f18 }
                    45usize => { RiscVInlineAsmReg::f19 }
                    46usize => { RiscVInlineAsmReg::f20 }
                    47usize => { RiscVInlineAsmReg::f21 }
                    48usize => { RiscVInlineAsmReg::f22 }
                    49usize => { RiscVInlineAsmReg::f23 }
                    50usize => { RiscVInlineAsmReg::f24 }
                    51usize => { RiscVInlineAsmReg::f25 }
                    52usize => { RiscVInlineAsmReg::f26 }
                    53usize => { RiscVInlineAsmReg::f27 }
                    54usize => { RiscVInlineAsmReg::f28 }
                    55usize => { RiscVInlineAsmReg::f29 }
                    56usize => { RiscVInlineAsmReg::f30 }
                    57usize => { RiscVInlineAsmReg::f31 }
                    58usize => { RiscVInlineAsmReg::v0 }
                    59usize => { RiscVInlineAsmReg::v1 }
                    60usize => { RiscVInlineAsmReg::v2 }
                    61usize => { RiscVInlineAsmReg::v3 }
                    62usize => { RiscVInlineAsmReg::v4 }
                    63usize => { RiscVInlineAsmReg::v5 }
                    64usize => { RiscVInlineAsmReg::v6 }
                    65usize => { RiscVInlineAsmReg::v7 }
                    66usize => { RiscVInlineAsmReg::v8 }
                    67usize => { RiscVInlineAsmReg::v9 }
                    68usize => { RiscVInlineAsmReg::v10 }
                    69usize => { RiscVInlineAsmReg::v11 }
                    70usize => { RiscVInlineAsmReg::v12 }
                    71usize => { RiscVInlineAsmReg::v13 }
                    72usize => { RiscVInlineAsmReg::v14 }
                    73usize => { RiscVInlineAsmReg::v15 }
                    74usize => { RiscVInlineAsmReg::v16 }
                    75usize => { RiscVInlineAsmReg::v17 }
                    76usize => { RiscVInlineAsmReg::v18 }
                    77usize => { RiscVInlineAsmReg::v19 }
                    78usize => { RiscVInlineAsmReg::v20 }
                    79usize => { RiscVInlineAsmReg::v21 }
                    80usize => { RiscVInlineAsmReg::v22 }
                    81usize => { RiscVInlineAsmReg::v23 }
                    82usize => { RiscVInlineAsmReg::v24 }
                    83usize => { RiscVInlineAsmReg::v25 }
                    84usize => { RiscVInlineAsmReg::v26 }
                    85usize => { RiscVInlineAsmReg::v27 }
                    86usize => { RiscVInlineAsmReg::v28 }
                    87usize => { RiscVInlineAsmReg::v29 }
                    88usize => { RiscVInlineAsmReg::v30 }
                    89usize => { RiscVInlineAsmReg::v31 }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `RiscVInlineAsmReg`, expected 0..90, actual {0}",
                                n));
                    }
                }
            }
        }
    };
#[automatically_derived]
#[allow(unreachable_code)]
#[allow(non_camel_case_types)]
impl ::core::fmt::Debug for RiscVInlineAsmReg {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                RiscVInlineAsmReg::x1 => "x1",
                RiscVInlineAsmReg::x5 => "x5",
                RiscVInlineAsmReg::x6 => "x6",
                RiscVInlineAsmReg::x7 => "x7",
                RiscVInlineAsmReg::x10 => "x10",
                RiscVInlineAsmReg::x11 => "x11",
                RiscVInlineAsmReg::x12 => "x12",
                RiscVInlineAsmReg::x13 => "x13",
                RiscVInlineAsmReg::x14 => "x14",
                RiscVInlineAsmReg::x15 => "x15",
                RiscVInlineAsmReg::x16 => "x16",
                RiscVInlineAsmReg::x17 => "x17",
                RiscVInlineAsmReg::x18 => "x18",
                RiscVInlineAsmReg::x19 => "x19",
                RiscVInlineAsmReg::x20 => "x20",
                RiscVInlineAsmReg::x21 => "x21",
                RiscVInlineAsmReg::x22 => "x22",
                RiscVInlineAsmReg::x23 => "x23",
                RiscVInlineAsmReg::x24 => "x24",
                RiscVInlineAsmReg::x25 => "x25",
                RiscVInlineAsmReg::x26 => "x26",
                RiscVInlineAsmReg::x27 => "x27",
                RiscVInlineAsmReg::x28 => "x28",
                RiscVInlineAsmReg::x29 => "x29",
                RiscVInlineAsmReg::x30 => "x30",
                RiscVInlineAsmReg::x31 => "x31",
                RiscVInlineAsmReg::f0 => "f0",
                RiscVInlineAsmReg::f1 => "f1",
                RiscVInlineAsmReg::f2 => "f2",
                RiscVInlineAsmReg::f3 => "f3",
                RiscVInlineAsmReg::f4 => "f4",
                RiscVInlineAsmReg::f5 => "f5",
                RiscVInlineAsmReg::f6 => "f6",
                RiscVInlineAsmReg::f7 => "f7",
                RiscVInlineAsmReg::f8 => "f8",
                RiscVInlineAsmReg::f9 => "f9",
                RiscVInlineAsmReg::f10 => "f10",
                RiscVInlineAsmReg::f11 => "f11",
                RiscVInlineAsmReg::f12 => "f12",
                RiscVInlineAsmReg::f13 => "f13",
                RiscVInlineAsmReg::f14 => "f14",
                RiscVInlineAsmReg::f15 => "f15",
                RiscVInlineAsmReg::f16 => "f16",
                RiscVInlineAsmReg::f17 => "f17",
                RiscVInlineAsmReg::f18 => "f18",
                RiscVInlineAsmReg::f19 => "f19",
                RiscVInlineAsmReg::f20 => "f20",
                RiscVInlineAsmReg::f21 => "f21",
                RiscVInlineAsmReg::f22 => "f22",
                RiscVInlineAsmReg::f23 => "f23",
                RiscVInlineAsmReg::f24 => "f24",
                RiscVInlineAsmReg::f25 => "f25",
                RiscVInlineAsmReg::f26 => "f26",
                RiscVInlineAsmReg::f27 => "f27",
                RiscVInlineAsmReg::f28 => "f28",
                RiscVInlineAsmReg::f29 => "f29",
                RiscVInlineAsmReg::f30 => "f30",
                RiscVInlineAsmReg::f31 => "f31",
                RiscVInlineAsmReg::v0 => "v0",
                RiscVInlineAsmReg::v1 => "v1",
                RiscVInlineAsmReg::v2 => "v2",
                RiscVInlineAsmReg::v3 => "v3",
                RiscVInlineAsmReg::v4 => "v4",
                RiscVInlineAsmReg::v5 => "v5",
                RiscVInlineAsmReg::v6 => "v6",
                RiscVInlineAsmReg::v7 => "v7",
                RiscVInlineAsmReg::v8 => "v8",
                RiscVInlineAsmReg::v9 => "v9",
                RiscVInlineAsmReg::v10 => "v10",
                RiscVInlineAsmReg::v11 => "v11",
                RiscVInlineAsmReg::v12 => "v12",
                RiscVInlineAsmReg::v13 => "v13",
                RiscVInlineAsmReg::v14 => "v14",
                RiscVInlineAsmReg::v15 => "v15",
                RiscVInlineAsmReg::v16 => "v16",
                RiscVInlineAsmReg::v17 => "v17",
                RiscVInlineAsmReg::v18 => "v18",
                RiscVInlineAsmReg::v19 => "v19",
                RiscVInlineAsmReg::v20 => "v20",
                RiscVInlineAsmReg::v21 => "v21",
                RiscVInlineAsmReg::v22 => "v22",
                RiscVInlineAsmReg::v23 => "v23",
                RiscVInlineAsmReg::v24 => "v24",
                RiscVInlineAsmReg::v25 => "v25",
                RiscVInlineAsmReg::v26 => "v26",
                RiscVInlineAsmReg::v27 => "v27",
                RiscVInlineAsmReg::v28 => "v28",
                RiscVInlineAsmReg::v29 => "v29",
                RiscVInlineAsmReg::v30 => "v30",
                RiscVInlineAsmReg::v31 => "v31",
            })
    }
}
#[automatically_derived]
#[allow(unreachable_code)]
#[allow(non_camel_case_types)]
impl ::core::cmp::Eq for RiscVInlineAsmReg {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_receiver_is_total_eq(&self) {}
}
#[automatically_derived]
#[allow(unreachable_code)]
#[allow(non_camel_case_types)]
impl ::core::marker::StructuralPartialEq for RiscVInlineAsmReg { }
#[automatically_derived]
#[allow(unreachable_code)]
#[allow(non_camel_case_types)]
impl ::core::cmp::PartialEq for RiscVInlineAsmReg {
    #[inline]
    fn eq(&self, other: &RiscVInlineAsmReg) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr
    }
}
#[automatically_derived]
#[allow(unreachable_code)]
#[allow(non_camel_case_types)]
impl ::core::cmp::PartialOrd for RiscVInlineAsmReg {
    #[inline]
    fn partial_cmp(&self, other: &RiscVInlineAsmReg)
        -> ::core::option::Option<::core::cmp::Ordering> {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr)
    }
}
#[automatically_derived]
#[allow(unreachable_code)]
#[allow(non_camel_case_types)]
impl ::core::hash::Hash for RiscVInlineAsmReg {
    #[inline]
    fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        ::core::hash::Hash::hash(&__self_discr, state)
    }
}
const _: () =
    {
        impl<__CTX> ::rustc_data_structures::stable_hasher::HashStable<__CTX>
            for RiscVInlineAsmReg where __CTX: crate::HashStableContext {
            #[inline]
            fn hash_stable(&self, __hcx: &mut __CTX,
                __hasher:
                    &mut ::rustc_data_structures::stable_hasher::StableHasher) {
                ::std::mem::discriminant(self).hash_stable(__hcx, __hasher);
                match *self {
                    RiscVInlineAsmReg::x1 => {}
                    RiscVInlineAsmReg::x5 => {}
                    RiscVInlineAsmReg::x6 => {}
                    RiscVInlineAsmReg::x7 => {}
                    RiscVInlineAsmReg::x10 => {}
                    RiscVInlineAsmReg::x11 => {}
                    RiscVInlineAsmReg::x12 => {}
                    RiscVInlineAsmReg::x13 => {}
                    RiscVInlineAsmReg::x14 => {}
                    RiscVInlineAsmReg::x15 => {}
                    RiscVInlineAsmReg::x16 => {}
                    RiscVInlineAsmReg::x17 => {}
                    RiscVInlineAsmReg::x18 => {}
                    RiscVInlineAsmReg::x19 => {}
                    RiscVInlineAsmReg::x20 => {}
                    RiscVInlineAsmReg::x21 => {}
                    RiscVInlineAsmReg::x22 => {}
                    RiscVInlineAsmReg::x23 => {}
                    RiscVInlineAsmReg::x24 => {}
                    RiscVInlineAsmReg::x25 => {}
                    RiscVInlineAsmReg::x26 => {}
                    RiscVInlineAsmReg::x27 => {}
                    RiscVInlineAsmReg::x28 => {}
                    RiscVInlineAsmReg::x29 => {}
                    RiscVInlineAsmReg::x30 => {}
                    RiscVInlineAsmReg::x31 => {}
                    RiscVInlineAsmReg::f0 => {}
                    RiscVInlineAsmReg::f1 => {}
                    RiscVInlineAsmReg::f2 => {}
                    RiscVInlineAsmReg::f3 => {}
                    RiscVInlineAsmReg::f4 => {}
                    RiscVInlineAsmReg::f5 => {}
                    RiscVInlineAsmReg::f6 => {}
                    RiscVInlineAsmReg::f7 => {}
                    RiscVInlineAsmReg::f8 => {}
                    RiscVInlineAsmReg::f9 => {}
                    RiscVInlineAsmReg::f10 => {}
                    RiscVInlineAsmReg::f11 => {}
                    RiscVInlineAsmReg::f12 => {}
                    RiscVInlineAsmReg::f13 => {}
                    RiscVInlineAsmReg::f14 => {}
                    RiscVInlineAsmReg::f15 => {}
                    RiscVInlineAsmReg::f16 => {}
                    RiscVInlineAsmReg::f17 => {}
                    RiscVInlineAsmReg::f18 => {}
                    RiscVInlineAsmReg::f19 => {}
                    RiscVInlineAsmReg::f20 => {}
                    RiscVInlineAsmReg::f21 => {}
                    RiscVInlineAsmReg::f22 => {}
                    RiscVInlineAsmReg::f23 => {}
                    RiscVInlineAsmReg::f24 => {}
                    RiscVInlineAsmReg::f25 => {}
                    RiscVInlineAsmReg::f26 => {}
                    RiscVInlineAsmReg::f27 => {}
                    RiscVInlineAsmReg::f28 => {}
                    RiscVInlineAsmReg::f29 => {}
                    RiscVInlineAsmReg::f30 => {}
                    RiscVInlineAsmReg::f31 => {}
                    RiscVInlineAsmReg::v0 => {}
                    RiscVInlineAsmReg::v1 => {}
                    RiscVInlineAsmReg::v2 => {}
                    RiscVInlineAsmReg::v3 => {}
                    RiscVInlineAsmReg::v4 => {}
                    RiscVInlineAsmReg::v5 => {}
                    RiscVInlineAsmReg::v6 => {}
                    RiscVInlineAsmReg::v7 => {}
                    RiscVInlineAsmReg::v8 => {}
                    RiscVInlineAsmReg::v9 => {}
                    RiscVInlineAsmReg::v10 => {}
                    RiscVInlineAsmReg::v11 => {}
                    RiscVInlineAsmReg::v12 => {}
                    RiscVInlineAsmReg::v13 => {}
                    RiscVInlineAsmReg::v14 => {}
                    RiscVInlineAsmReg::v15 => {}
                    RiscVInlineAsmReg::v16 => {}
                    RiscVInlineAsmReg::v17 => {}
                    RiscVInlineAsmReg::v18 => {}
                    RiscVInlineAsmReg::v19 => {}
                    RiscVInlineAsmReg::v20 => {}
                    RiscVInlineAsmReg::v21 => {}
                    RiscVInlineAsmReg::v22 => {}
                    RiscVInlineAsmReg::v23 => {}
                    RiscVInlineAsmReg::v24 => {}
                    RiscVInlineAsmReg::v25 => {}
                    RiscVInlineAsmReg::v26 => {}
                    RiscVInlineAsmReg::v27 => {}
                    RiscVInlineAsmReg::v28 => {}
                    RiscVInlineAsmReg::v29 => {}
                    RiscVInlineAsmReg::v30 => {}
                    RiscVInlineAsmReg::v31 => {}
                }
            }
        }
    };
impl RiscVInlineAsmReg {
    pub fn name(self) -> &'static str {
        match self {
            Self::x1 => "x1",
            Self::x5 => "x5",
            Self::x6 => "x6",
            Self::x7 => "x7",
            Self::x10 => "x10",
            Self::x11 => "x11",
            Self::x12 => "x12",
            Self::x13 => "x13",
            Self::x14 => "x14",
            Self::x15 => "x15",
            Self::x16 => "x16",
            Self::x17 => "x17",
            Self::x18 => "x18",
            Self::x19 => "x19",
            Self::x20 => "x20",
            Self::x21 => "x21",
            Self::x22 => "x22",
            Self::x23 => "x23",
            Self::x24 => "x24",
            Self::x25 => "x25",
            Self::x26 => "x26",
            Self::x27 => "x27",
            Self::x28 => "x28",
            Self::x29 => "x29",
            Self::x30 => "x30",
            Self::x31 => "x31",
            Self::f0 => "f0",
            Self::f1 => "f1",
            Self::f2 => "f2",
            Self::f3 => "f3",
            Self::f4 => "f4",
            Self::f5 => "f5",
            Self::f6 => "f6",
            Self::f7 => "f7",
            Self::f8 => "f8",
            Self::f9 => "f9",
            Self::f10 => "f10",
            Self::f11 => "f11",
            Self::f12 => "f12",
            Self::f13 => "f13",
            Self::f14 => "f14",
            Self::f15 => "f15",
            Self::f16 => "f16",
            Self::f17 => "f17",
            Self::f18 => "f18",
            Self::f19 => "f19",
            Self::f20 => "f20",
            Self::f21 => "f21",
            Self::f22 => "f22",
            Self::f23 => "f23",
            Self::f24 => "f24",
            Self::f25 => "f25",
            Self::f26 => "f26",
            Self::f27 => "f27",
            Self::f28 => "f28",
            Self::f29 => "f29",
            Self::f30 => "f30",
            Self::f31 => "f31",
            Self::v0 => "v0",
            Self::v1 => "v1",
            Self::v2 => "v2",
            Self::v3 => "v3",
            Self::v4 => "v4",
            Self::v5 => "v5",
            Self::v6 => "v6",
            Self::v7 => "v7",
            Self::v8 => "v8",
            Self::v9 => "v9",
            Self::v10 => "v10",
            Self::v11 => "v11",
            Self::v12 => "v12",
            Self::v13 => "v13",
            Self::v14 => "v14",
            Self::v15 => "v15",
            Self::v16 => "v16",
            Self::v17 => "v17",
            Self::v18 => "v18",
            Self::v19 => "v19",
            Self::v20 => "v20",
            Self::v21 => "v21",
            Self::v22 => "v22",
            Self::v23 => "v23",
            Self::v24 => "v24",
            Self::v25 => "v25",
            Self::v26 => "v26",
            Self::v27 => "v27",
            Self::v28 => "v28",
            Self::v29 => "v29",
            Self::v30 => "v30",
            Self::v31 => "v31",
        }
    }
    pub fn reg_class(self) -> RiscVInlineAsmRegClass {
        match self {
            Self::x1 => RiscVInlineAsmRegClass::reg,
            Self::x5 => RiscVInlineAsmRegClass::reg,
            Self::x6 => RiscVInlineAsmRegClass::reg,
            Self::x7 => RiscVInlineAsmRegClass::reg,
            Self::x10 => RiscVInlineAsmRegClass::reg,
            Self::x11 => RiscVInlineAsmRegClass::reg,
            Self::x12 => RiscVInlineAsmRegClass::reg,
            Self::x13 => RiscVInlineAsmRegClass::reg,
            Self::x14 => RiscVInlineAsmRegClass::reg,
            Self::x15 => RiscVInlineAsmRegClass::reg,
            Self::x16 => RiscVInlineAsmRegClass::reg,
            Self::x17 => RiscVInlineAsmRegClass::reg,
            Self::x18 => RiscVInlineAsmRegClass::reg,
            Self::x19 => RiscVInlineAsmRegClass::reg,
            Self::x20 => RiscVInlineAsmRegClass::reg,
            Self::x21 => RiscVInlineAsmRegClass::reg,
            Self::x22 => RiscVInlineAsmRegClass::reg,
            Self::x23 => RiscVInlineAsmRegClass::reg,
            Self::x24 => RiscVInlineAsmRegClass::reg,
            Self::x25 => RiscVInlineAsmRegClass::reg,
            Self::x26 => RiscVInlineAsmRegClass::reg,
            Self::x27 => RiscVInlineAsmRegClass::reg,
            Self::x28 => RiscVInlineAsmRegClass::reg,
            Self::x29 => RiscVInlineAsmRegClass::reg,
            Self::x30 => RiscVInlineAsmRegClass::reg,
            Self::x31 => RiscVInlineAsmRegClass::reg,
            Self::f0 => RiscVInlineAsmRegClass::freg,
            Self::f1 => RiscVInlineAsmRegClass::freg,
            Self::f2 => RiscVInlineAsmRegClass::freg,
            Self::f3 => RiscVInlineAsmRegClass::freg,
            Self::f4 => RiscVInlineAsmRegClass::freg,
            Self::f5 => RiscVInlineAsmRegClass::freg,
            Self::f6 => RiscVInlineAsmRegClass::freg,
            Self::f7 => RiscVInlineAsmRegClass::freg,
            Self::f8 => RiscVInlineAsmRegClass::freg,
            Self::f9 => RiscVInlineAsmRegClass::freg,
            Self::f10 => RiscVInlineAsmRegClass::freg,
            Self::f11 => RiscVInlineAsmRegClass::freg,
            Self::f12 => RiscVInlineAsmRegClass::freg,
            Self::f13 => RiscVInlineAsmRegClass::freg,
            Self::f14 => RiscVInlineAsmRegClass::freg,
            Self::f15 => RiscVInlineAsmRegClass::freg,
            Self::f16 => RiscVInlineAsmRegClass::freg,
            Self::f17 => RiscVInlineAsmRegClass::freg,
            Self::f18 => RiscVInlineAsmRegClass::freg,
            Self::f19 => RiscVInlineAsmRegClass::freg,
            Self::f20 => RiscVInlineAsmRegClass::freg,
            Self::f21 => RiscVInlineAsmRegClass::freg,
            Self::f22 => RiscVInlineAsmRegClass::freg,
            Self::f23 => RiscVInlineAsmRegClass::freg,
            Self::f24 => RiscVInlineAsmRegClass::freg,
            Self::f25 => RiscVInlineAsmRegClass::freg,
            Self::f26 => RiscVInlineAsmRegClass::freg,
            Self::f27 => RiscVInlineAsmRegClass::freg,
            Self::f28 => RiscVInlineAsmRegClass::freg,
            Self::f29 => RiscVInlineAsmRegClass::freg,
            Self::f30 => RiscVInlineAsmRegClass::freg,
            Self::f31 => RiscVInlineAsmRegClass::freg,
            Self::v0 => RiscVInlineAsmRegClass::vreg,
            Self::v1 => RiscVInlineAsmRegClass::vreg,
            Self::v2 => RiscVInlineAsmRegClass::vreg,
            Self::v3 => RiscVInlineAsmRegClass::vreg,
            Self::v4 => RiscVInlineAsmRegClass::vreg,
            Self::v5 => RiscVInlineAsmRegClass::vreg,
            Self::v6 => RiscVInlineAsmRegClass::vreg,
            Self::v7 => RiscVInlineAsmRegClass::vreg,
            Self::v8 => RiscVInlineAsmRegClass::vreg,
            Self::v9 => RiscVInlineAsmRegClass::vreg,
            Self::v10 => RiscVInlineAsmRegClass::vreg,
            Self::v11 => RiscVInlineAsmRegClass::vreg,
            Self::v12 => RiscVInlineAsmRegClass::vreg,
            Self::v13 => RiscVInlineAsmRegClass::vreg,
            Self::v14 => RiscVInlineAsmRegClass::vreg,
            Self::v15 => RiscVInlineAsmRegClass::vreg,
            Self::v16 => RiscVInlineAsmRegClass::vreg,
            Self::v17 => RiscVInlineAsmRegClass::vreg,
            Self::v18 => RiscVInlineAsmRegClass::vreg,
            Self::v19 => RiscVInlineAsmRegClass::vreg,
            Self::v20 => RiscVInlineAsmRegClass::vreg,
            Self::v21 => RiscVInlineAsmRegClass::vreg,
            Self::v22 => RiscVInlineAsmRegClass::vreg,
            Self::v23 => RiscVInlineAsmRegClass::vreg,
            Self::v24 => RiscVInlineAsmRegClass::vreg,
            Self::v25 => RiscVInlineAsmRegClass::vreg,
            Self::v26 => RiscVInlineAsmRegClass::vreg,
            Self::v27 => RiscVInlineAsmRegClass::vreg,
            Self::v28 => RiscVInlineAsmRegClass::vreg,
            Self::v29 => RiscVInlineAsmRegClass::vreg,
            Self::v30 => RiscVInlineAsmRegClass::vreg,
            Self::v31 => RiscVInlineAsmRegClass::vreg,
        }
    }
    pub fn parse(name: &str) -> Result<Self, &'static str> {
        match name {
            "ra" | "x1" => Ok(Self::x1),
            "t0" | "x5" => Ok(Self::x5),
            "t1" | "x6" => Ok(Self::x6),
            "t2" | "x7" => Ok(Self::x7),
            "a0" | "x10" => Ok(Self::x10),
            "a1" | "x11" => Ok(Self::x11),
            "a2" | "x12" => Ok(Self::x12),
            "a3" | "x13" => Ok(Self::x13),
            "a4" | "x14" => Ok(Self::x14),
            "a5" | "x15" => Ok(Self::x15),
            "a6" | "x16" => Ok(Self::x16),
            "a7" | "x17" => Ok(Self::x17),
            "s2" | "x18" => Ok(Self::x18),
            "s3" | "x19" => Ok(Self::x19),
            "s4" | "x20" => Ok(Self::x20),
            "s5" | "x21" => Ok(Self::x21),
            "s6" | "x22" => Ok(Self::x22),
            "s7" | "x23" => Ok(Self::x23),
            "s8" | "x24" => Ok(Self::x24),
            "s9" | "x25" => Ok(Self::x25),
            "s10" | "x26" => Ok(Self::x26),
            "s11" | "x27" => Ok(Self::x27),
            "t3" | "x28" => Ok(Self::x28),
            "t4" | "x29" => Ok(Self::x29),
            "t5" | "x30" => Ok(Self::x30),
            "t6" | "x31" => Ok(Self::x31),
            "ft0" | "f0" => Ok(Self::f0),
            "ft1" | "f1" => Ok(Self::f1),
            "ft2" | "f2" => Ok(Self::f2),
            "ft3" | "f3" => Ok(Self::f3),
            "ft4" | "f4" => Ok(Self::f4),
            "ft5" | "f5" => Ok(Self::f5),
            "ft6" | "f6" => Ok(Self::f6),
            "ft7" | "f7" => Ok(Self::f7),
            "fs0" | "f8" => Ok(Self::f8),
            "fs1" | "f9" => Ok(Self::f9),
            "fa0" | "f10" => Ok(Self::f10),
            "fa1" | "f11" => Ok(Self::f11),
            "fa2" | "f12" => Ok(Self::f12),
            "fa3" | "f13" => Ok(Self::f13),
            "fa4" | "f14" => Ok(Self::f14),
            "fa5" | "f15" => Ok(Self::f15),
            "fa6" | "f16" => Ok(Self::f16),
            "fa7" | "f17" => Ok(Self::f17),
            "fs2" | "f18" => Ok(Self::f18),
            "fs3" | "f19" => Ok(Self::f19),
            "fs4" | "f20" => Ok(Self::f20),
            "fs5" | "f21" => Ok(Self::f21),
            "fs6" | "f22" => Ok(Self::f22),
            "fs7" | "f23" => Ok(Self::f23),
            "fs8" | "f24" => Ok(Self::f24),
            "fs9" | "f25" => Ok(Self::f25),
            "fs10" | "f26" => Ok(Self::f26),
            "fs11" | "f27" => Ok(Self::f27),
            "ft8" | "f28" => Ok(Self::f28),
            "ft9" | "f29" => Ok(Self::f29),
            "ft10" | "f30" => Ok(Self::f30),
            "ft11" | "f31" => Ok(Self::f31),
            "v0" => Ok(Self::v0),
            "v1" => Ok(Self::v1),
            "v2" => Ok(Self::v2),
            "v3" => Ok(Self::v3),
            "v4" => Ok(Self::v4),
            "v5" => Ok(Self::v5),
            "v6" => Ok(Self::v6),
            "v7" => Ok(Self::v7),
            "v8" => Ok(Self::v8),
            "v9" => Ok(Self::v9),
            "v10" => Ok(Self::v10),
            "v11" => Ok(Self::v11),
            "v12" => Ok(Self::v12),
            "v13" => Ok(Self::v13),
            "v14" => Ok(Self::v14),
            "v15" => Ok(Self::v15),
            "v16" => Ok(Self::v16),
            "v17" => Ok(Self::v17),
            "v18" => Ok(Self::v18),
            "v19" => Ok(Self::v19),
            "v20" => Ok(Self::v20),
            "v21" => Ok(Self::v21),
            "v22" => Ok(Self::v22),
            "v23" => Ok(Self::v23),
            "v24" => Ok(Self::v24),
            "v25" => Ok(Self::v25),
            "v26" => Ok(Self::v26),
            "v27" => Ok(Self::v27),
            "v28" => Ok(Self::v28),
            "v29" => Ok(Self::v29),
            "v30" => Ok(Self::v30),
            "v31" => Ok(Self::v31),
            "x9" | "s1" =>
                Err("s1 is used internally by LLVM and cannot be used as an operand for inline asm"),
            "x8" | "s0" | "fp" =>
                Err("the frame pointer cannot be used as an operand for inline asm"),
            "x2" | "sp" =>
                Err("the stack pointer cannot be used as an operand for inline asm"),
            "x3" | "gp" =>
                Err("the global pointer cannot be used as an operand for inline asm"),
            "x4" | "tp" =>
                Err("the thread pointer cannot be used as an operand for inline asm"),
            "x0" | "zero" =>
                Err("the zero register cannot be used as an operand for inline asm"),
            _ => Err("unknown register"),
        }
    }
    pub fn validate(self, _arch: super::InlineAsmArch,
        _reloc_model: crate::spec::RelocModel,
        _target_features: &rustc_data_structures::fx::FxIndexSet<Symbol>,
        _target: &crate::spec::Target, _is_clobber: bool)
        -> Result<(), &'static str> {
        match self {
            Self::x1 => { Ok(()) }
            Self::x5 => { Ok(()) }
            Self::x6 => { Ok(()) }
            Self::x7 => { Ok(()) }
            Self::x10 => { Ok(()) }
            Self::x11 => { Ok(()) }
            Self::x12 => { Ok(()) }
            Self::x13 => { Ok(()) }
            Self::x14 => { Ok(()) }
            Self::x15 => { Ok(()) }
            Self::x16 => {
                not_e(_arch, _reloc_model, _target_features, _target,
                        _is_clobber)?;
                Ok(())
            }
            Self::x17 => {
                not_e(_arch, _reloc_model, _target_features, _target,
                        _is_clobber)?;
                Ok(())
            }
            Self::x18 => {
                not_e(_arch, _reloc_model, _target_features, _target,
                        _is_clobber)?;
                Ok(())
            }
            Self::x19 => {
                not_e(_arch, _reloc_model, _target_features, _target,
                        _is_clobber)?;
                Ok(())
            }
            Self::x20 => {
                not_e(_arch, _reloc_model, _target_features, _target,
                        _is_clobber)?;
                Ok(())
            }
            Self::x21 => {
                not_e(_arch, _reloc_model, _target_features, _target,
                        _is_clobber)?;
                Ok(())
            }
            Self::x22 => {
                not_e(_arch, _reloc_model, _target_features, _target,
                        _is_clobber)?;
                Ok(())
            }
            Self::x23 => {
                not_e(_arch, _reloc_model, _target_features, _target,
                        _is_clobber)?;
                Ok(())
            }
            Self::x24 => {
                not_e(_arch, _reloc_model, _target_features, _target,
                        _is_clobber)?;
                Ok(())
            }
            Self::x25 => {
                not_e(_arch, _reloc_model, _target_features, _target,
                        _is_clobber)?;
                Ok(())
            }
            Self::x26 => {
                not_e(_arch, _reloc_model, _target_features, _target,
                        _is_clobber)?;
                Ok(())
            }
            Self::x27 => {
                not_e(_arch, _reloc_model, _target_features, _target,
                        _is_clobber)?;
                Ok(())
            }
            Self::x28 => {
                not_e(_arch, _reloc_model, _target_features, _target,
                        _is_clobber)?;
                Ok(())
            }
            Self::x29 => {
                not_e(_arch, _reloc_model, _target_features, _target,
                        _is_clobber)?;
                Ok(())
            }
            Self::x30 => {
                not_e(_arch, _reloc_model, _target_features, _target,
                        _is_clobber)?;
                Ok(())
            }
            Self::x31 => {
                not_e(_arch, _reloc_model, _target_features, _target,
                        _is_clobber)?;
                Ok(())
            }
            Self::f0 => { Ok(()) }
            Self::f1 => { Ok(()) }
            Self::f2 => { Ok(()) }
            Self::f3 => { Ok(()) }
            Self::f4 => { Ok(()) }
            Self::f5 => { Ok(()) }
            Self::f6 => { Ok(()) }
            Self::f7 => { Ok(()) }
            Self::f8 => { Ok(()) }
            Self::f9 => { Ok(()) }
            Self::f10 => { Ok(()) }
            Self::f11 => { Ok(()) }
            Self::f12 => { Ok(()) }
            Self::f13 => { Ok(()) }
            Self::f14 => { Ok(()) }
            Self::f15 => { Ok(()) }
            Self::f16 => { Ok(()) }
            Self::f17 => { Ok(()) }
            Self::f18 => { Ok(()) }
            Self::f19 => { Ok(()) }
            Self::f20 => { Ok(()) }
            Self::f21 => { Ok(()) }
            Self::f22 => { Ok(()) }
            Self::f23 => { Ok(()) }
            Self::f24 => { Ok(()) }
            Self::f25 => { Ok(()) }
            Self::f26 => { Ok(()) }
            Self::f27 => { Ok(()) }
            Self::f28 => { Ok(()) }
            Self::f29 => { Ok(()) }
            Self::f30 => { Ok(()) }
            Self::f31 => { Ok(()) }
            Self::v0 => { Ok(()) }
            Self::v1 => { Ok(()) }
            Self::v2 => { Ok(()) }
            Self::v3 => { Ok(()) }
            Self::v4 => { Ok(()) }
            Self::v5 => { Ok(()) }
            Self::v6 => { Ok(()) }
            Self::v7 => { Ok(()) }
            Self::v8 => { Ok(()) }
            Self::v9 => { Ok(()) }
            Self::v10 => { Ok(()) }
            Self::v11 => { Ok(()) }
            Self::v12 => { Ok(()) }
            Self::v13 => { Ok(()) }
            Self::v14 => { Ok(()) }
            Self::v15 => { Ok(()) }
            Self::v16 => { Ok(()) }
            Self::v17 => { Ok(()) }
            Self::v18 => { Ok(()) }
            Self::v19 => { Ok(()) }
            Self::v20 => { Ok(()) }
            Self::v21 => { Ok(()) }
            Self::v22 => { Ok(()) }
            Self::v23 => { Ok(()) }
            Self::v24 => { Ok(()) }
            Self::v25 => { Ok(()) }
            Self::v26 => { Ok(()) }
            Self::v27 => { Ok(()) }
            Self::v28 => { Ok(()) }
            Self::v29 => { Ok(()) }
            Self::v30 => { Ok(()) }
            Self::v31 => { Ok(()) }
        }
    }
}
pub(super) fn fill_reg_map(_arch: super::InlineAsmArch,
    _reloc_model: crate::spec::RelocModel,
    _target_features: &rustc_data_structures::fx::FxIndexSet<Symbol>,
    _target: &crate::spec::Target,
    _map:
        &mut rustc_data_structures::fx::FxHashMap<super::InlineAsmRegClass,
        rustc_data_structures::fx::FxIndexSet<super::InlineAsmReg>>) {
    #[allow(unused_imports)]
    use super::{InlineAsmReg, InlineAsmRegClass};
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::x1));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::x5));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::x6));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::x7));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::x10));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::x11));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::x12));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::x13));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::x14));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::x15));
        }
    }
    if not_e(_arch, _reloc_model, _target_features, _target, false).is_ok() &&
            true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::x16));
        }
    }
    if not_e(_arch, _reloc_model, _target_features, _target, false).is_ok() &&
            true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::x17));
        }
    }
    if not_e(_arch, _reloc_model, _target_features, _target, false).is_ok() &&
            true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::x18));
        }
    }
    if not_e(_arch, _reloc_model, _target_features, _target, false).is_ok() &&
            true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::x19));
        }
    }
    if not_e(_arch, _reloc_model, _target_features, _target, false).is_ok() &&
            true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::x20));
        }
    }
    if not_e(_arch, _reloc_model, _target_features, _target, false).is_ok() &&
            true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::x21));
        }
    }
    if not_e(_arch, _reloc_model, _target_features, _target, false).is_ok() &&
            true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::x22));
        }
    }
    if not_e(_arch, _reloc_model, _target_features, _target, false).is_ok() &&
            true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::x23));
        }
    }
    if not_e(_arch, _reloc_model, _target_features, _target, false).is_ok() &&
            true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::x24));
        }
    }
    if not_e(_arch, _reloc_model, _target_features, _target, false).is_ok() &&
            true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::x25));
        }
    }
    if not_e(_arch, _reloc_model, _target_features, _target, false).is_ok() &&
            true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::x26));
        }
    }
    if not_e(_arch, _reloc_model, _target_features, _target, false).is_ok() &&
            true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::x27));
        }
    }
    if not_e(_arch, _reloc_model, _target_features, _target, false).is_ok() &&
            true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::x28));
        }
    }
    if not_e(_arch, _reloc_model, _target_features, _target, false).is_ok() &&
            true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::x29));
        }
    }
    if not_e(_arch, _reloc_model, _target_features, _target, false).is_ok() &&
            true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::x30));
        }
    }
    if not_e(_arch, _reloc_model, _target_features, _target, false).is_ok() &&
            true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::x31));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::freg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::f0));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::freg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::f1));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::freg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::f2));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::freg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::f3));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::freg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::f4));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::freg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::f5));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::freg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::f6));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::freg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::f7));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::freg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::f8));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::freg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::f9));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::freg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::f10));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::freg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::f11));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::freg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::f12));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::freg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::f13));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::freg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::f14));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::freg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::f15));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::freg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::f16));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::freg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::f17));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::freg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::f18));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::freg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::f19));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::freg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::f20));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::freg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::f21));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::freg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::f22));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::freg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::f23));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::freg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::f24));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::freg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::f25));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::freg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::f26));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::freg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::f27));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::freg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::f28));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::freg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::f29));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::freg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::f30));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::freg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::f31));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::vreg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::v0));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::vreg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::v1));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::vreg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::v2));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::vreg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::v3));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::vreg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::v4));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::vreg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::v5));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::vreg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::v6));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::vreg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::v7));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::vreg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::v8));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::vreg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::v9));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::vreg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::v10));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::vreg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::v11));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::vreg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::v12));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::vreg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::v13));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::vreg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::v14));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::vreg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::v15));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::vreg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::v16));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::vreg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::v17));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::vreg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::v18));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::vreg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::v19));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::vreg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::v20));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::vreg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::v21));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::vreg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::v22));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::vreg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::v23));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::vreg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::v24));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::vreg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::v25));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::vreg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::v26));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::vreg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::v27));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::vreg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::v28));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::vreg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::v29));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::vreg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::v30));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::RiscV(RiscVInlineAsmRegClass::vreg))
            {
            set.insert(InlineAsmReg::RiscV(RiscVInlineAsmReg::v31));
        }
    }
}def_regs! {
76    RiscV RiscVInlineAsmReg RiscVInlineAsmRegClass {
77        x1: reg = ["x1", "ra"],
78        x5: reg = ["x5", "t0"],
79        x6: reg = ["x6", "t1"],
80        x7: reg = ["x7", "t2"],
81        x10: reg = ["x10", "a0"],
82        x11: reg = ["x11", "a1"],
83        x12: reg = ["x12", "a2"],
84        x13: reg = ["x13", "a3"],
85        x14: reg = ["x14", "a4"],
86        x15: reg = ["x15", "a5"],
87        x16: reg = ["x16", "a6"] % not_e,
88        x17: reg = ["x17", "a7"] % not_e,
89        x18: reg = ["x18", "s2"] % not_e,
90        x19: reg = ["x19", "s3"] % not_e,
91        x20: reg = ["x20", "s4"] % not_e,
92        x21: reg = ["x21", "s5"] % not_e,
93        x22: reg = ["x22", "s6"] % not_e,
94        x23: reg = ["x23", "s7"] % not_e,
95        x24: reg = ["x24", "s8"] % not_e,
96        x25: reg = ["x25", "s9"] % not_e,
97        x26: reg = ["x26", "s10"] % not_e,
98        x27: reg = ["x27", "s11"] % not_e,
99        x28: reg = ["x28", "t3"] % not_e,
100        x29: reg = ["x29", "t4"] % not_e,
101        x30: reg = ["x30", "t5"] % not_e,
102        x31: reg = ["x31", "t6"] % not_e,
103        f0: freg = ["f0", "ft0"],
104        f1: freg = ["f1", "ft1"],
105        f2: freg = ["f2", "ft2"],
106        f3: freg = ["f3", "ft3"],
107        f4: freg = ["f4", "ft4"],
108        f5: freg = ["f5", "ft5"],
109        f6: freg = ["f6", "ft6"],
110        f7: freg = ["f7", "ft7"],
111        f8: freg = ["f8", "fs0"],
112        f9: freg = ["f9", "fs1"],
113        f10: freg = ["f10", "fa0"],
114        f11: freg = ["f11", "fa1"],
115        f12: freg = ["f12", "fa2"],
116        f13: freg = ["f13", "fa3"],
117        f14: freg = ["f14", "fa4"],
118        f15: freg = ["f15", "fa5"],
119        f16: freg = ["f16", "fa6"],
120        f17: freg = ["f17", "fa7"],
121        f18: freg = ["f18", "fs2"],
122        f19: freg = ["f19", "fs3"],
123        f20: freg = ["f20", "fs4"],
124        f21: freg = ["f21", "fs5"],
125        f22: freg = ["f22", "fs6"],
126        f23: freg = ["f23", "fs7"],
127        f24: freg = ["f24", "fs8"],
128        f25: freg = ["f25", "fs9"],
129        f26: freg = ["f26", "fs10"],
130        f27: freg = ["f27", "fs11"],
131        f28: freg = ["f28", "ft8"],
132        f29: freg = ["f29", "ft9"],
133        f30: freg = ["f30", "ft10"],
134        f31: freg = ["f31", "ft11"],
135        v0: vreg = ["v0"],
136        v1: vreg = ["v1"],
137        v2: vreg = ["v2"],
138        v3: vreg = ["v3"],
139        v4: vreg = ["v4"],
140        v5: vreg = ["v5"],
141        v6: vreg = ["v6"],
142        v7: vreg = ["v7"],
143        v8: vreg = ["v8"],
144        v9: vreg = ["v9"],
145        v10: vreg = ["v10"],
146        v11: vreg = ["v11"],
147        v12: vreg = ["v12"],
148        v13: vreg = ["v13"],
149        v14: vreg = ["v14"],
150        v15: vreg = ["v15"],
151        v16: vreg = ["v16"],
152        v17: vreg = ["v17"],
153        v18: vreg = ["v18"],
154        v19: vreg = ["v19"],
155        v20: vreg = ["v20"],
156        v21: vreg = ["v21"],
157        v22: vreg = ["v22"],
158        v23: vreg = ["v23"],
159        v24: vreg = ["v24"],
160        v25: vreg = ["v25"],
161        v26: vreg = ["v26"],
162        v27: vreg = ["v27"],
163        v28: vreg = ["v28"],
164        v29: vreg = ["v29"],
165        v30: vreg = ["v30"],
166        v31: vreg = ["v31"],
167        #error = ["x9", "s1"] =>
168            "s1 is used internally by LLVM and cannot be used as an operand for inline asm",
169        #error = ["x8", "s0", "fp"] =>
170            "the frame pointer cannot be used as an operand for inline asm",
171        #error = ["x2", "sp"] =>
172            "the stack pointer cannot be used as an operand for inline asm",
173        #error = ["x3", "gp"] =>
174            "the global pointer cannot be used as an operand for inline asm",
175        #error = ["x4", "tp"] =>
176            "the thread pointer cannot be used as an operand for inline asm" ,
177        #error = ["x0", "zero"] =>
178            "the zero register cannot be used as an operand for inline asm",
179    }
180}
181
182impl RiscVInlineAsmReg {
183    pub fn emit(
184        self,
185        out: &mut dyn fmt::Write,
186        _arch: InlineAsmArch,
187        _modifier: Option<char>,
188    ) -> fmt::Result {
189        out.write_str(self.name())
190    }
191}