Skip to main content

rustc_target/asm/
arm.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 ArmInlineAsmRegClass {
    reg,
    sreg,
    sreg_low16,
    dreg,
    dreg_low16,
    dreg_low8,
    qreg,
    qreg_low8,
    qreg_low4,
}
#[automatically_derived]
#[allow(non_camel_case_types)]
impl ::core::marker::Copy for ArmInlineAsmRegClass { }
#[automatically_derived]
#[doc(hidden)]
#[allow(non_camel_case_types)]
unsafe impl ::core::clone::TrivialClone for ArmInlineAsmRegClass { }
#[automatically_derived]
#[allow(non_camel_case_types)]
impl ::core::clone::Clone for ArmInlineAsmRegClass {
    #[inline]
    fn clone(&self) -> ArmInlineAsmRegClass { *self }
}
const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for ArmInlineAsmRegClass {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        ArmInlineAsmRegClass::reg => { 0usize }
                        ArmInlineAsmRegClass::sreg => { 1usize }
                        ArmInlineAsmRegClass::sreg_low16 => { 2usize }
                        ArmInlineAsmRegClass::dreg => { 3usize }
                        ArmInlineAsmRegClass::dreg_low16 => { 4usize }
                        ArmInlineAsmRegClass::dreg_low8 => { 5usize }
                        ArmInlineAsmRegClass::qreg => { 6usize }
                        ArmInlineAsmRegClass::qreg_low8 => { 7usize }
                        ArmInlineAsmRegClass::qreg_low4 => { 8usize }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    ArmInlineAsmRegClass::reg => {}
                    ArmInlineAsmRegClass::sreg => {}
                    ArmInlineAsmRegClass::sreg_low16 => {}
                    ArmInlineAsmRegClass::dreg => {}
                    ArmInlineAsmRegClass::dreg_low16 => {}
                    ArmInlineAsmRegClass::dreg_low8 => {}
                    ArmInlineAsmRegClass::qreg => {}
                    ArmInlineAsmRegClass::qreg_low8 => {}
                    ArmInlineAsmRegClass::qreg_low4 => {}
                }
            }
        }
    };
const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for ArmInlineAsmRegClass {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => { ArmInlineAsmRegClass::reg }
                    1usize => { ArmInlineAsmRegClass::sreg }
                    2usize => { ArmInlineAsmRegClass::sreg_low16 }
                    3usize => { ArmInlineAsmRegClass::dreg }
                    4usize => { ArmInlineAsmRegClass::dreg_low16 }
                    5usize => { ArmInlineAsmRegClass::dreg_low8 }
                    6usize => { ArmInlineAsmRegClass::qreg }
                    7usize => { ArmInlineAsmRegClass::qreg_low8 }
                    8usize => { ArmInlineAsmRegClass::qreg_low4 }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `ArmInlineAsmRegClass`, expected 0..9, actual {0}",
                                n));
                    }
                }
            }
        }
    };
#[automatically_derived]
#[allow(non_camel_case_types)]
impl ::core::fmt::Debug for ArmInlineAsmRegClass {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                ArmInlineAsmRegClass::reg => "reg",
                ArmInlineAsmRegClass::sreg => "sreg",
                ArmInlineAsmRegClass::sreg_low16 => "sreg_low16",
                ArmInlineAsmRegClass::dreg => "dreg",
                ArmInlineAsmRegClass::dreg_low16 => "dreg_low16",
                ArmInlineAsmRegClass::dreg_low8 => "dreg_low8",
                ArmInlineAsmRegClass::qreg => "qreg",
                ArmInlineAsmRegClass::qreg_low8 => "qreg_low8",
                ArmInlineAsmRegClass::qreg_low4 => "qreg_low4",
            })
    }
}
#[automatically_derived]
#[allow(non_camel_case_types)]
impl ::core::cmp::Eq for ArmInlineAsmRegClass {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_receiver_is_total_eq(&self) {}
}
#[automatically_derived]
#[allow(non_camel_case_types)]
impl ::core::marker::StructuralPartialEq for ArmInlineAsmRegClass { }
#[automatically_derived]
#[allow(non_camel_case_types)]
impl ::core::cmp::PartialEq for ArmInlineAsmRegClass {
    #[inline]
    fn eq(&self, other: &ArmInlineAsmRegClass) -> 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 ArmInlineAsmRegClass {
    #[inline]
    fn partial_cmp(&self, other: &ArmInlineAsmRegClass)
        -> ::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 ArmInlineAsmRegClass {
    #[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 ArmInlineAsmRegClass 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 {
                    ArmInlineAsmRegClass::reg => {}
                    ArmInlineAsmRegClass::sreg => {}
                    ArmInlineAsmRegClass::sreg_low16 => {}
                    ArmInlineAsmRegClass::dreg => {}
                    ArmInlineAsmRegClass::dreg_low16 => {}
                    ArmInlineAsmRegClass::dreg_low8 => {}
                    ArmInlineAsmRegClass::qreg => {}
                    ArmInlineAsmRegClass::qreg_low8 => {}
                    ArmInlineAsmRegClass::qreg_low4 => {}
                }
            }
        }
    };
impl ArmInlineAsmRegClass {
    pub fn name(self) -> rustc_span::Symbol {
        match self {
            Self::reg => rustc_span::sym::reg,
            Self::sreg => rustc_span::sym::sreg,
            Self::sreg_low16 => rustc_span::sym::sreg_low16,
            Self::dreg => rustc_span::sym::dreg,
            Self::dreg_low16 => rustc_span::sym::dreg_low16,
            Self::dreg_low8 => rustc_span::sym::dreg_low8,
            Self::qreg => rustc_span::sym::qreg,
            Self::qreg_low8 => rustc_span::sym::qreg_low8,
            Self::qreg_low4 => rustc_span::sym::qreg_low4,
        }
    }
    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::sreg => Ok(Self::sreg),
            rustc_span::sym::sreg_low16 => Ok(Self::sreg_low16),
            rustc_span::sym::dreg => Ok(Self::dreg),
            rustc_span::sym::dreg_low16 => Ok(Self::dreg_low16),
            rustc_span::sym::dreg_low8 => Ok(Self::dreg_low8),
            rustc_span::sym::qreg => Ok(Self::qreg),
            rustc_span::sym::qreg_low8 => Ok(Self::qreg_low8),
            rustc_span::sym::qreg_low4 => Ok(Self::qreg_low4),
            _ =>
                Err(&[rustc_span::sym::reg, rustc_span::sym::sreg,
                                rustc_span::sym::sreg_low16, rustc_span::sym::dreg,
                                rustc_span::sym::dreg_low16, rustc_span::sym::dreg_low8,
                                rustc_span::sym::qreg, rustc_span::sym::qreg_low8,
                                rustc_span::sym::qreg_low4]),
        }
    }
}
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::Arm(ArmInlineAsmRegClass::reg),
        FxIndexSet::default());
    map.insert(InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg),
        FxIndexSet::default());
    map.insert(InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg_low16),
        FxIndexSet::default());
    map.insert(InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg),
        FxIndexSet::default());
    map.insert(InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg_low16),
        FxIndexSet::default());
    map.insert(InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg_low8),
        FxIndexSet::default());
    map.insert(InlineAsmRegClass::Arm(ArmInlineAsmRegClass::qreg),
        FxIndexSet::default());
    map.insert(InlineAsmRegClass::Arm(ArmInlineAsmRegClass::qreg_low8),
        FxIndexSet::default());
    map.insert(InlineAsmRegClass::Arm(ArmInlineAsmRegClass::qreg_low4),
        FxIndexSet::default());
    map
}def_reg_class! {
10    Arm ArmInlineAsmRegClass {
11        reg,
12        sreg,
13        sreg_low16,
14        dreg,
15        dreg_low16,
16        dreg_low8,
17        qreg,
18        qreg_low8,
19        qreg_low4,
20    }
21}
22
23impl ArmInlineAsmRegClass {
24    pub fn valid_modifiers(self, _arch: super::InlineAsmArch) -> &'static [char] {
25        match self {
26            Self::qreg | Self::qreg_low8 | Self::qreg_low4 => &['e', 'f'],
27            _ => &[],
28        }
29    }
30
31    pub fn suggest_class(self, _arch: InlineAsmArch, _ty: InlineAsmType) -> Option<Self> {
32        None
33    }
34
35    pub fn suggest_modifier(
36        self,
37        _arch: InlineAsmArch,
38        _ty: InlineAsmType,
39    ) -> Option<ModifierInfo> {
40        None
41    }
42
43    pub fn default_modifier(self, _arch: InlineAsmArch) -> Option<ModifierInfo> {
44        None
45    }
46
47    pub fn supported_types(
48        self,
49        _arch: InlineAsmArch,
50    ) -> &'static [(InlineAsmType, Option<Symbol>)] {
51        match self {
52            Self::reg => {
    use super::InlineAsmType::*;
    &[(I8, None), (I16, None), (I32, None), (F16, None), (F32, None)]
}types! { _: I8, I16, I32, F16, F32; },
53            Self::sreg | Self::sreg_low16 => {
    use super::InlineAsmType::*;
    &[(I32, Some(rustc_span::sym::vfp2)), (F16, Some(rustc_span::sym::vfp2)),
                (F32, Some(rustc_span::sym::vfp2))]
}types! { vfp2: I32, F16, F32; },
54            Self::dreg_low16 | Self::dreg_low8 => {
    use super::InlineAsmType::*;
    &[(I64, Some(rustc_span::sym::vfp2)), (F64, Some(rustc_span::sym::vfp2)),
                (VecI8(8), Some(rustc_span::sym::neon)),
                (VecI16(4), Some(rustc_span::sym::neon)),
                (VecI32(2), Some(rustc_span::sym::neon)),
                (VecI64(1), Some(rustc_span::sym::neon)),
                (VecF16(4), Some(rustc_span::sym::neon)),
                (VecF32(2), Some(rustc_span::sym::neon))]
}types! {
55                vfp2: I64, F64;
56                neon: VecI8(8), VecI16(4), VecI32(2), VecI64(1), VecF16(4), VecF32(2);
57            },
58            Self::dreg => {
    use super::InlineAsmType::*;
    &[(I64, Some(rustc_span::sym::d32)), (F64, Some(rustc_span::sym::d32)),
                (VecI8(8), Some(rustc_span::sym::neon)),
                (VecI16(4), Some(rustc_span::sym::neon)),
                (VecI32(2), Some(rustc_span::sym::neon)),
                (VecI64(1), Some(rustc_span::sym::neon)),
                (VecF16(4), Some(rustc_span::sym::neon)),
                (VecF32(2), Some(rustc_span::sym::neon))]
}types! {
59                d32: I64, F64;
60                neon: VecI8(8), VecI16(4), VecI32(2), VecI64(1), VecF16(4), VecF32(2);
61            },
62            Self::qreg | Self::qreg_low8 | Self::qreg_low4 => {
    use super::InlineAsmType::*;
    &[(VecI8(16), Some(rustc_span::sym::neon)),
                (VecI16(8), Some(rustc_span::sym::neon)),
                (VecI32(4), Some(rustc_span::sym::neon)),
                (VecI64(2), Some(rustc_span::sym::neon)),
                (VecF16(8), Some(rustc_span::sym::neon)),
                (VecF32(4), Some(rustc_span::sym::neon))]
}types! {
63                neon: VecI8(16), VecI16(8), VecI32(4), VecI64(2), VecF16(8), VecF32(4);
64            },
65        }
66    }
67}
68
69// This uses the same logic as useR7AsFramePointer in LLVM
70fn frame_pointer_is_r7(target_features: &FxIndexSet<Symbol>, target: &Target) -> bool {
71    target.is_like_darwin || (!target.is_like_windows && target_features.contains(&sym::thumb_mode))
72}
73
74fn frame_pointer_r11(
75    arch: InlineAsmArch,
76    reloc_model: RelocModel,
77    target_features: &FxIndexSet<Symbol>,
78    target: &Target,
79    is_clobber: bool,
80) -> Result<(), &'static str> {
81    not_thumb1(arch, reloc_model, target_features, target, is_clobber)?;
82
83    if !frame_pointer_is_r7(target_features, target) {
84        Err("the frame pointer (r11) cannot be used as an operand for inline asm")
85    } else {
86        Ok(())
87    }
88}
89
90fn frame_pointer_r7(
91    _arch: InlineAsmArch,
92    _reloc_model: RelocModel,
93    target_features: &FxIndexSet<Symbol>,
94    target: &Target,
95    _is_clobber: bool,
96) -> Result<(), &'static str> {
97    if frame_pointer_is_r7(target_features, target) {
98        Err("the frame pointer (r7) cannot be used as an operand for inline asm")
99    } else {
100        Ok(())
101    }
102}
103
104fn not_thumb1(
105    _arch: InlineAsmArch,
106    _reloc_model: RelocModel,
107    target_features: &FxIndexSet<Symbol>,
108    _target: &Target,
109    is_clobber: bool,
110) -> Result<(), &'static str> {
111    if !is_clobber
112        && target_features.contains(&sym::thumb_mode)
113        && !target_features.contains(&sym::thumb2)
114    {
115        Err("high registers (r8+) can only be used as clobbers in Thumb-1 code")
116    } else {
117        Ok(())
118    }
119}
120
121fn reserved_r9(
122    arch: InlineAsmArch,
123    reloc_model: RelocModel,
124    target_features: &FxIndexSet<Symbol>,
125    target: &Target,
126    is_clobber: bool,
127) -> Result<(), &'static str> {
128    not_thumb1(arch, reloc_model, target_features, target, is_clobber)?;
129
130    match reloc_model {
131        RelocModel::Rwpi | RelocModel::RopiRwpi => {
132            Err("the RWPI static base register (r9) cannot be used as an operand for inline asm")
133        }
134        _ => Ok(()),
135    }
136}
137
138#[allow(unreachable_code)]
#[allow(non_camel_case_types)]
pub enum ArmInlineAsmReg {
    r0,
    r1,
    r2,
    r3,
    r4,
    r5,
    r7,
    r8,
    r9,
    r10,
    r11,
    r12,
    r14,
    s0,
    s1,
    s2,
    s3,
    s4,
    s5,
    s6,
    s7,
    s8,
    s9,
    s10,
    s11,
    s12,
    s13,
    s14,
    s15,
    s16,
    s17,
    s18,
    s19,
    s20,
    s21,
    s22,
    s23,
    s24,
    s25,
    s26,
    s27,
    s28,
    s29,
    s30,
    s31,
    d0,
    d1,
    d2,
    d3,
    d4,
    d5,
    d6,
    d7,
    d8,
    d9,
    d10,
    d11,
    d12,
    d13,
    d14,
    d15,
    d16,
    d17,
    d18,
    d19,
    d20,
    d21,
    d22,
    d23,
    d24,
    d25,
    d26,
    d27,
    d28,
    d29,
    d30,
    d31,
    q0,
    q1,
    q2,
    q3,
    q4,
    q5,
    q6,
    q7,
    q8,
    q9,
    q10,
    q11,
    q12,
    q13,
    q14,
    q15,
}
#[automatically_derived]
#[allow(unreachable_code)]
#[allow(non_camel_case_types)]
impl ::core::marker::Copy for ArmInlineAsmReg { }
#[automatically_derived]
#[doc(hidden)]
#[allow(unreachable_code)]
#[allow(non_camel_case_types)]
unsafe impl ::core::clone::TrivialClone for ArmInlineAsmReg { }
#[automatically_derived]
#[allow(unreachable_code)]
#[allow(non_camel_case_types)]
impl ::core::clone::Clone for ArmInlineAsmReg {
    #[inline]
    fn clone(&self) -> ArmInlineAsmReg { *self }
}
const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for ArmInlineAsmReg {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        ArmInlineAsmReg::r0 => { 0usize }
                        ArmInlineAsmReg::r1 => { 1usize }
                        ArmInlineAsmReg::r2 => { 2usize }
                        ArmInlineAsmReg::r3 => { 3usize }
                        ArmInlineAsmReg::r4 => { 4usize }
                        ArmInlineAsmReg::r5 => { 5usize }
                        ArmInlineAsmReg::r7 => { 6usize }
                        ArmInlineAsmReg::r8 => { 7usize }
                        ArmInlineAsmReg::r9 => { 8usize }
                        ArmInlineAsmReg::r10 => { 9usize }
                        ArmInlineAsmReg::r11 => { 10usize }
                        ArmInlineAsmReg::r12 => { 11usize }
                        ArmInlineAsmReg::r14 => { 12usize }
                        ArmInlineAsmReg::s0 => { 13usize }
                        ArmInlineAsmReg::s1 => { 14usize }
                        ArmInlineAsmReg::s2 => { 15usize }
                        ArmInlineAsmReg::s3 => { 16usize }
                        ArmInlineAsmReg::s4 => { 17usize }
                        ArmInlineAsmReg::s5 => { 18usize }
                        ArmInlineAsmReg::s6 => { 19usize }
                        ArmInlineAsmReg::s7 => { 20usize }
                        ArmInlineAsmReg::s8 => { 21usize }
                        ArmInlineAsmReg::s9 => { 22usize }
                        ArmInlineAsmReg::s10 => { 23usize }
                        ArmInlineAsmReg::s11 => { 24usize }
                        ArmInlineAsmReg::s12 => { 25usize }
                        ArmInlineAsmReg::s13 => { 26usize }
                        ArmInlineAsmReg::s14 => { 27usize }
                        ArmInlineAsmReg::s15 => { 28usize }
                        ArmInlineAsmReg::s16 => { 29usize }
                        ArmInlineAsmReg::s17 => { 30usize }
                        ArmInlineAsmReg::s18 => { 31usize }
                        ArmInlineAsmReg::s19 => { 32usize }
                        ArmInlineAsmReg::s20 => { 33usize }
                        ArmInlineAsmReg::s21 => { 34usize }
                        ArmInlineAsmReg::s22 => { 35usize }
                        ArmInlineAsmReg::s23 => { 36usize }
                        ArmInlineAsmReg::s24 => { 37usize }
                        ArmInlineAsmReg::s25 => { 38usize }
                        ArmInlineAsmReg::s26 => { 39usize }
                        ArmInlineAsmReg::s27 => { 40usize }
                        ArmInlineAsmReg::s28 => { 41usize }
                        ArmInlineAsmReg::s29 => { 42usize }
                        ArmInlineAsmReg::s30 => { 43usize }
                        ArmInlineAsmReg::s31 => { 44usize }
                        ArmInlineAsmReg::d0 => { 45usize }
                        ArmInlineAsmReg::d1 => { 46usize }
                        ArmInlineAsmReg::d2 => { 47usize }
                        ArmInlineAsmReg::d3 => { 48usize }
                        ArmInlineAsmReg::d4 => { 49usize }
                        ArmInlineAsmReg::d5 => { 50usize }
                        ArmInlineAsmReg::d6 => { 51usize }
                        ArmInlineAsmReg::d7 => { 52usize }
                        ArmInlineAsmReg::d8 => { 53usize }
                        ArmInlineAsmReg::d9 => { 54usize }
                        ArmInlineAsmReg::d10 => { 55usize }
                        ArmInlineAsmReg::d11 => { 56usize }
                        ArmInlineAsmReg::d12 => { 57usize }
                        ArmInlineAsmReg::d13 => { 58usize }
                        ArmInlineAsmReg::d14 => { 59usize }
                        ArmInlineAsmReg::d15 => { 60usize }
                        ArmInlineAsmReg::d16 => { 61usize }
                        ArmInlineAsmReg::d17 => { 62usize }
                        ArmInlineAsmReg::d18 => { 63usize }
                        ArmInlineAsmReg::d19 => { 64usize }
                        ArmInlineAsmReg::d20 => { 65usize }
                        ArmInlineAsmReg::d21 => { 66usize }
                        ArmInlineAsmReg::d22 => { 67usize }
                        ArmInlineAsmReg::d23 => { 68usize }
                        ArmInlineAsmReg::d24 => { 69usize }
                        ArmInlineAsmReg::d25 => { 70usize }
                        ArmInlineAsmReg::d26 => { 71usize }
                        ArmInlineAsmReg::d27 => { 72usize }
                        ArmInlineAsmReg::d28 => { 73usize }
                        ArmInlineAsmReg::d29 => { 74usize }
                        ArmInlineAsmReg::d30 => { 75usize }
                        ArmInlineAsmReg::d31 => { 76usize }
                        ArmInlineAsmReg::q0 => { 77usize }
                        ArmInlineAsmReg::q1 => { 78usize }
                        ArmInlineAsmReg::q2 => { 79usize }
                        ArmInlineAsmReg::q3 => { 80usize }
                        ArmInlineAsmReg::q4 => { 81usize }
                        ArmInlineAsmReg::q5 => { 82usize }
                        ArmInlineAsmReg::q6 => { 83usize }
                        ArmInlineAsmReg::q7 => { 84usize }
                        ArmInlineAsmReg::q8 => { 85usize }
                        ArmInlineAsmReg::q9 => { 86usize }
                        ArmInlineAsmReg::q10 => { 87usize }
                        ArmInlineAsmReg::q11 => { 88usize }
                        ArmInlineAsmReg::q12 => { 89usize }
                        ArmInlineAsmReg::q13 => { 90usize }
                        ArmInlineAsmReg::q14 => { 91usize }
                        ArmInlineAsmReg::q15 => { 92usize }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    ArmInlineAsmReg::r0 => {}
                    ArmInlineAsmReg::r1 => {}
                    ArmInlineAsmReg::r2 => {}
                    ArmInlineAsmReg::r3 => {}
                    ArmInlineAsmReg::r4 => {}
                    ArmInlineAsmReg::r5 => {}
                    ArmInlineAsmReg::r7 => {}
                    ArmInlineAsmReg::r8 => {}
                    ArmInlineAsmReg::r9 => {}
                    ArmInlineAsmReg::r10 => {}
                    ArmInlineAsmReg::r11 => {}
                    ArmInlineAsmReg::r12 => {}
                    ArmInlineAsmReg::r14 => {}
                    ArmInlineAsmReg::s0 => {}
                    ArmInlineAsmReg::s1 => {}
                    ArmInlineAsmReg::s2 => {}
                    ArmInlineAsmReg::s3 => {}
                    ArmInlineAsmReg::s4 => {}
                    ArmInlineAsmReg::s5 => {}
                    ArmInlineAsmReg::s6 => {}
                    ArmInlineAsmReg::s7 => {}
                    ArmInlineAsmReg::s8 => {}
                    ArmInlineAsmReg::s9 => {}
                    ArmInlineAsmReg::s10 => {}
                    ArmInlineAsmReg::s11 => {}
                    ArmInlineAsmReg::s12 => {}
                    ArmInlineAsmReg::s13 => {}
                    ArmInlineAsmReg::s14 => {}
                    ArmInlineAsmReg::s15 => {}
                    ArmInlineAsmReg::s16 => {}
                    ArmInlineAsmReg::s17 => {}
                    ArmInlineAsmReg::s18 => {}
                    ArmInlineAsmReg::s19 => {}
                    ArmInlineAsmReg::s20 => {}
                    ArmInlineAsmReg::s21 => {}
                    ArmInlineAsmReg::s22 => {}
                    ArmInlineAsmReg::s23 => {}
                    ArmInlineAsmReg::s24 => {}
                    ArmInlineAsmReg::s25 => {}
                    ArmInlineAsmReg::s26 => {}
                    ArmInlineAsmReg::s27 => {}
                    ArmInlineAsmReg::s28 => {}
                    ArmInlineAsmReg::s29 => {}
                    ArmInlineAsmReg::s30 => {}
                    ArmInlineAsmReg::s31 => {}
                    ArmInlineAsmReg::d0 => {}
                    ArmInlineAsmReg::d1 => {}
                    ArmInlineAsmReg::d2 => {}
                    ArmInlineAsmReg::d3 => {}
                    ArmInlineAsmReg::d4 => {}
                    ArmInlineAsmReg::d5 => {}
                    ArmInlineAsmReg::d6 => {}
                    ArmInlineAsmReg::d7 => {}
                    ArmInlineAsmReg::d8 => {}
                    ArmInlineAsmReg::d9 => {}
                    ArmInlineAsmReg::d10 => {}
                    ArmInlineAsmReg::d11 => {}
                    ArmInlineAsmReg::d12 => {}
                    ArmInlineAsmReg::d13 => {}
                    ArmInlineAsmReg::d14 => {}
                    ArmInlineAsmReg::d15 => {}
                    ArmInlineAsmReg::d16 => {}
                    ArmInlineAsmReg::d17 => {}
                    ArmInlineAsmReg::d18 => {}
                    ArmInlineAsmReg::d19 => {}
                    ArmInlineAsmReg::d20 => {}
                    ArmInlineAsmReg::d21 => {}
                    ArmInlineAsmReg::d22 => {}
                    ArmInlineAsmReg::d23 => {}
                    ArmInlineAsmReg::d24 => {}
                    ArmInlineAsmReg::d25 => {}
                    ArmInlineAsmReg::d26 => {}
                    ArmInlineAsmReg::d27 => {}
                    ArmInlineAsmReg::d28 => {}
                    ArmInlineAsmReg::d29 => {}
                    ArmInlineAsmReg::d30 => {}
                    ArmInlineAsmReg::d31 => {}
                    ArmInlineAsmReg::q0 => {}
                    ArmInlineAsmReg::q1 => {}
                    ArmInlineAsmReg::q2 => {}
                    ArmInlineAsmReg::q3 => {}
                    ArmInlineAsmReg::q4 => {}
                    ArmInlineAsmReg::q5 => {}
                    ArmInlineAsmReg::q6 => {}
                    ArmInlineAsmReg::q7 => {}
                    ArmInlineAsmReg::q8 => {}
                    ArmInlineAsmReg::q9 => {}
                    ArmInlineAsmReg::q10 => {}
                    ArmInlineAsmReg::q11 => {}
                    ArmInlineAsmReg::q12 => {}
                    ArmInlineAsmReg::q13 => {}
                    ArmInlineAsmReg::q14 => {}
                    ArmInlineAsmReg::q15 => {}
                }
            }
        }
    };
const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for ArmInlineAsmReg {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => { ArmInlineAsmReg::r0 }
                    1usize => { ArmInlineAsmReg::r1 }
                    2usize => { ArmInlineAsmReg::r2 }
                    3usize => { ArmInlineAsmReg::r3 }
                    4usize => { ArmInlineAsmReg::r4 }
                    5usize => { ArmInlineAsmReg::r5 }
                    6usize => { ArmInlineAsmReg::r7 }
                    7usize => { ArmInlineAsmReg::r8 }
                    8usize => { ArmInlineAsmReg::r9 }
                    9usize => { ArmInlineAsmReg::r10 }
                    10usize => { ArmInlineAsmReg::r11 }
                    11usize => { ArmInlineAsmReg::r12 }
                    12usize => { ArmInlineAsmReg::r14 }
                    13usize => { ArmInlineAsmReg::s0 }
                    14usize => { ArmInlineAsmReg::s1 }
                    15usize => { ArmInlineAsmReg::s2 }
                    16usize => { ArmInlineAsmReg::s3 }
                    17usize => { ArmInlineAsmReg::s4 }
                    18usize => { ArmInlineAsmReg::s5 }
                    19usize => { ArmInlineAsmReg::s6 }
                    20usize => { ArmInlineAsmReg::s7 }
                    21usize => { ArmInlineAsmReg::s8 }
                    22usize => { ArmInlineAsmReg::s9 }
                    23usize => { ArmInlineAsmReg::s10 }
                    24usize => { ArmInlineAsmReg::s11 }
                    25usize => { ArmInlineAsmReg::s12 }
                    26usize => { ArmInlineAsmReg::s13 }
                    27usize => { ArmInlineAsmReg::s14 }
                    28usize => { ArmInlineAsmReg::s15 }
                    29usize => { ArmInlineAsmReg::s16 }
                    30usize => { ArmInlineAsmReg::s17 }
                    31usize => { ArmInlineAsmReg::s18 }
                    32usize => { ArmInlineAsmReg::s19 }
                    33usize => { ArmInlineAsmReg::s20 }
                    34usize => { ArmInlineAsmReg::s21 }
                    35usize => { ArmInlineAsmReg::s22 }
                    36usize => { ArmInlineAsmReg::s23 }
                    37usize => { ArmInlineAsmReg::s24 }
                    38usize => { ArmInlineAsmReg::s25 }
                    39usize => { ArmInlineAsmReg::s26 }
                    40usize => { ArmInlineAsmReg::s27 }
                    41usize => { ArmInlineAsmReg::s28 }
                    42usize => { ArmInlineAsmReg::s29 }
                    43usize => { ArmInlineAsmReg::s30 }
                    44usize => { ArmInlineAsmReg::s31 }
                    45usize => { ArmInlineAsmReg::d0 }
                    46usize => { ArmInlineAsmReg::d1 }
                    47usize => { ArmInlineAsmReg::d2 }
                    48usize => { ArmInlineAsmReg::d3 }
                    49usize => { ArmInlineAsmReg::d4 }
                    50usize => { ArmInlineAsmReg::d5 }
                    51usize => { ArmInlineAsmReg::d6 }
                    52usize => { ArmInlineAsmReg::d7 }
                    53usize => { ArmInlineAsmReg::d8 }
                    54usize => { ArmInlineAsmReg::d9 }
                    55usize => { ArmInlineAsmReg::d10 }
                    56usize => { ArmInlineAsmReg::d11 }
                    57usize => { ArmInlineAsmReg::d12 }
                    58usize => { ArmInlineAsmReg::d13 }
                    59usize => { ArmInlineAsmReg::d14 }
                    60usize => { ArmInlineAsmReg::d15 }
                    61usize => { ArmInlineAsmReg::d16 }
                    62usize => { ArmInlineAsmReg::d17 }
                    63usize => { ArmInlineAsmReg::d18 }
                    64usize => { ArmInlineAsmReg::d19 }
                    65usize => { ArmInlineAsmReg::d20 }
                    66usize => { ArmInlineAsmReg::d21 }
                    67usize => { ArmInlineAsmReg::d22 }
                    68usize => { ArmInlineAsmReg::d23 }
                    69usize => { ArmInlineAsmReg::d24 }
                    70usize => { ArmInlineAsmReg::d25 }
                    71usize => { ArmInlineAsmReg::d26 }
                    72usize => { ArmInlineAsmReg::d27 }
                    73usize => { ArmInlineAsmReg::d28 }
                    74usize => { ArmInlineAsmReg::d29 }
                    75usize => { ArmInlineAsmReg::d30 }
                    76usize => { ArmInlineAsmReg::d31 }
                    77usize => { ArmInlineAsmReg::q0 }
                    78usize => { ArmInlineAsmReg::q1 }
                    79usize => { ArmInlineAsmReg::q2 }
                    80usize => { ArmInlineAsmReg::q3 }
                    81usize => { ArmInlineAsmReg::q4 }
                    82usize => { ArmInlineAsmReg::q5 }
                    83usize => { ArmInlineAsmReg::q6 }
                    84usize => { ArmInlineAsmReg::q7 }
                    85usize => { ArmInlineAsmReg::q8 }
                    86usize => { ArmInlineAsmReg::q9 }
                    87usize => { ArmInlineAsmReg::q10 }
                    88usize => { ArmInlineAsmReg::q11 }
                    89usize => { ArmInlineAsmReg::q12 }
                    90usize => { ArmInlineAsmReg::q13 }
                    91usize => { ArmInlineAsmReg::q14 }
                    92usize => { ArmInlineAsmReg::q15 }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `ArmInlineAsmReg`, expected 0..93, actual {0}",
                                n));
                    }
                }
            }
        }
    };
#[automatically_derived]
#[allow(unreachable_code)]
#[allow(non_camel_case_types)]
impl ::core::fmt::Debug for ArmInlineAsmReg {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                ArmInlineAsmReg::r0 => "r0",
                ArmInlineAsmReg::r1 => "r1",
                ArmInlineAsmReg::r2 => "r2",
                ArmInlineAsmReg::r3 => "r3",
                ArmInlineAsmReg::r4 => "r4",
                ArmInlineAsmReg::r5 => "r5",
                ArmInlineAsmReg::r7 => "r7",
                ArmInlineAsmReg::r8 => "r8",
                ArmInlineAsmReg::r9 => "r9",
                ArmInlineAsmReg::r10 => "r10",
                ArmInlineAsmReg::r11 => "r11",
                ArmInlineAsmReg::r12 => "r12",
                ArmInlineAsmReg::r14 => "r14",
                ArmInlineAsmReg::s0 => "s0",
                ArmInlineAsmReg::s1 => "s1",
                ArmInlineAsmReg::s2 => "s2",
                ArmInlineAsmReg::s3 => "s3",
                ArmInlineAsmReg::s4 => "s4",
                ArmInlineAsmReg::s5 => "s5",
                ArmInlineAsmReg::s6 => "s6",
                ArmInlineAsmReg::s7 => "s7",
                ArmInlineAsmReg::s8 => "s8",
                ArmInlineAsmReg::s9 => "s9",
                ArmInlineAsmReg::s10 => "s10",
                ArmInlineAsmReg::s11 => "s11",
                ArmInlineAsmReg::s12 => "s12",
                ArmInlineAsmReg::s13 => "s13",
                ArmInlineAsmReg::s14 => "s14",
                ArmInlineAsmReg::s15 => "s15",
                ArmInlineAsmReg::s16 => "s16",
                ArmInlineAsmReg::s17 => "s17",
                ArmInlineAsmReg::s18 => "s18",
                ArmInlineAsmReg::s19 => "s19",
                ArmInlineAsmReg::s20 => "s20",
                ArmInlineAsmReg::s21 => "s21",
                ArmInlineAsmReg::s22 => "s22",
                ArmInlineAsmReg::s23 => "s23",
                ArmInlineAsmReg::s24 => "s24",
                ArmInlineAsmReg::s25 => "s25",
                ArmInlineAsmReg::s26 => "s26",
                ArmInlineAsmReg::s27 => "s27",
                ArmInlineAsmReg::s28 => "s28",
                ArmInlineAsmReg::s29 => "s29",
                ArmInlineAsmReg::s30 => "s30",
                ArmInlineAsmReg::s31 => "s31",
                ArmInlineAsmReg::d0 => "d0",
                ArmInlineAsmReg::d1 => "d1",
                ArmInlineAsmReg::d2 => "d2",
                ArmInlineAsmReg::d3 => "d3",
                ArmInlineAsmReg::d4 => "d4",
                ArmInlineAsmReg::d5 => "d5",
                ArmInlineAsmReg::d6 => "d6",
                ArmInlineAsmReg::d7 => "d7",
                ArmInlineAsmReg::d8 => "d8",
                ArmInlineAsmReg::d9 => "d9",
                ArmInlineAsmReg::d10 => "d10",
                ArmInlineAsmReg::d11 => "d11",
                ArmInlineAsmReg::d12 => "d12",
                ArmInlineAsmReg::d13 => "d13",
                ArmInlineAsmReg::d14 => "d14",
                ArmInlineAsmReg::d15 => "d15",
                ArmInlineAsmReg::d16 => "d16",
                ArmInlineAsmReg::d17 => "d17",
                ArmInlineAsmReg::d18 => "d18",
                ArmInlineAsmReg::d19 => "d19",
                ArmInlineAsmReg::d20 => "d20",
                ArmInlineAsmReg::d21 => "d21",
                ArmInlineAsmReg::d22 => "d22",
                ArmInlineAsmReg::d23 => "d23",
                ArmInlineAsmReg::d24 => "d24",
                ArmInlineAsmReg::d25 => "d25",
                ArmInlineAsmReg::d26 => "d26",
                ArmInlineAsmReg::d27 => "d27",
                ArmInlineAsmReg::d28 => "d28",
                ArmInlineAsmReg::d29 => "d29",
                ArmInlineAsmReg::d30 => "d30",
                ArmInlineAsmReg::d31 => "d31",
                ArmInlineAsmReg::q0 => "q0",
                ArmInlineAsmReg::q1 => "q1",
                ArmInlineAsmReg::q2 => "q2",
                ArmInlineAsmReg::q3 => "q3",
                ArmInlineAsmReg::q4 => "q4",
                ArmInlineAsmReg::q5 => "q5",
                ArmInlineAsmReg::q6 => "q6",
                ArmInlineAsmReg::q7 => "q7",
                ArmInlineAsmReg::q8 => "q8",
                ArmInlineAsmReg::q9 => "q9",
                ArmInlineAsmReg::q10 => "q10",
                ArmInlineAsmReg::q11 => "q11",
                ArmInlineAsmReg::q12 => "q12",
                ArmInlineAsmReg::q13 => "q13",
                ArmInlineAsmReg::q14 => "q14",
                ArmInlineAsmReg::q15 => "q15",
            })
    }
}
#[automatically_derived]
#[allow(unreachable_code)]
#[allow(non_camel_case_types)]
impl ::core::cmp::Eq for ArmInlineAsmReg {
    #[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 ArmInlineAsmReg { }
#[automatically_derived]
#[allow(unreachable_code)]
#[allow(non_camel_case_types)]
impl ::core::cmp::PartialEq for ArmInlineAsmReg {
    #[inline]
    fn eq(&self, other: &ArmInlineAsmReg) -> 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 ArmInlineAsmReg {
    #[inline]
    fn partial_cmp(&self, other: &ArmInlineAsmReg)
        -> ::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 ArmInlineAsmReg {
    #[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 ArmInlineAsmReg 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 {
                    ArmInlineAsmReg::r0 => {}
                    ArmInlineAsmReg::r1 => {}
                    ArmInlineAsmReg::r2 => {}
                    ArmInlineAsmReg::r3 => {}
                    ArmInlineAsmReg::r4 => {}
                    ArmInlineAsmReg::r5 => {}
                    ArmInlineAsmReg::r7 => {}
                    ArmInlineAsmReg::r8 => {}
                    ArmInlineAsmReg::r9 => {}
                    ArmInlineAsmReg::r10 => {}
                    ArmInlineAsmReg::r11 => {}
                    ArmInlineAsmReg::r12 => {}
                    ArmInlineAsmReg::r14 => {}
                    ArmInlineAsmReg::s0 => {}
                    ArmInlineAsmReg::s1 => {}
                    ArmInlineAsmReg::s2 => {}
                    ArmInlineAsmReg::s3 => {}
                    ArmInlineAsmReg::s4 => {}
                    ArmInlineAsmReg::s5 => {}
                    ArmInlineAsmReg::s6 => {}
                    ArmInlineAsmReg::s7 => {}
                    ArmInlineAsmReg::s8 => {}
                    ArmInlineAsmReg::s9 => {}
                    ArmInlineAsmReg::s10 => {}
                    ArmInlineAsmReg::s11 => {}
                    ArmInlineAsmReg::s12 => {}
                    ArmInlineAsmReg::s13 => {}
                    ArmInlineAsmReg::s14 => {}
                    ArmInlineAsmReg::s15 => {}
                    ArmInlineAsmReg::s16 => {}
                    ArmInlineAsmReg::s17 => {}
                    ArmInlineAsmReg::s18 => {}
                    ArmInlineAsmReg::s19 => {}
                    ArmInlineAsmReg::s20 => {}
                    ArmInlineAsmReg::s21 => {}
                    ArmInlineAsmReg::s22 => {}
                    ArmInlineAsmReg::s23 => {}
                    ArmInlineAsmReg::s24 => {}
                    ArmInlineAsmReg::s25 => {}
                    ArmInlineAsmReg::s26 => {}
                    ArmInlineAsmReg::s27 => {}
                    ArmInlineAsmReg::s28 => {}
                    ArmInlineAsmReg::s29 => {}
                    ArmInlineAsmReg::s30 => {}
                    ArmInlineAsmReg::s31 => {}
                    ArmInlineAsmReg::d0 => {}
                    ArmInlineAsmReg::d1 => {}
                    ArmInlineAsmReg::d2 => {}
                    ArmInlineAsmReg::d3 => {}
                    ArmInlineAsmReg::d4 => {}
                    ArmInlineAsmReg::d5 => {}
                    ArmInlineAsmReg::d6 => {}
                    ArmInlineAsmReg::d7 => {}
                    ArmInlineAsmReg::d8 => {}
                    ArmInlineAsmReg::d9 => {}
                    ArmInlineAsmReg::d10 => {}
                    ArmInlineAsmReg::d11 => {}
                    ArmInlineAsmReg::d12 => {}
                    ArmInlineAsmReg::d13 => {}
                    ArmInlineAsmReg::d14 => {}
                    ArmInlineAsmReg::d15 => {}
                    ArmInlineAsmReg::d16 => {}
                    ArmInlineAsmReg::d17 => {}
                    ArmInlineAsmReg::d18 => {}
                    ArmInlineAsmReg::d19 => {}
                    ArmInlineAsmReg::d20 => {}
                    ArmInlineAsmReg::d21 => {}
                    ArmInlineAsmReg::d22 => {}
                    ArmInlineAsmReg::d23 => {}
                    ArmInlineAsmReg::d24 => {}
                    ArmInlineAsmReg::d25 => {}
                    ArmInlineAsmReg::d26 => {}
                    ArmInlineAsmReg::d27 => {}
                    ArmInlineAsmReg::d28 => {}
                    ArmInlineAsmReg::d29 => {}
                    ArmInlineAsmReg::d30 => {}
                    ArmInlineAsmReg::d31 => {}
                    ArmInlineAsmReg::q0 => {}
                    ArmInlineAsmReg::q1 => {}
                    ArmInlineAsmReg::q2 => {}
                    ArmInlineAsmReg::q3 => {}
                    ArmInlineAsmReg::q4 => {}
                    ArmInlineAsmReg::q5 => {}
                    ArmInlineAsmReg::q6 => {}
                    ArmInlineAsmReg::q7 => {}
                    ArmInlineAsmReg::q8 => {}
                    ArmInlineAsmReg::q9 => {}
                    ArmInlineAsmReg::q10 => {}
                    ArmInlineAsmReg::q11 => {}
                    ArmInlineAsmReg::q12 => {}
                    ArmInlineAsmReg::q13 => {}
                    ArmInlineAsmReg::q14 => {}
                    ArmInlineAsmReg::q15 => {}
                }
            }
        }
    };
impl ArmInlineAsmReg {
    pub fn name(self) -> &'static str {
        match self {
            Self::r0 => "r0",
            Self::r1 => "r1",
            Self::r2 => "r2",
            Self::r3 => "r3",
            Self::r4 => "r4",
            Self::r5 => "r5",
            Self::r7 => "r7",
            Self::r8 => "r8",
            Self::r9 => "r9",
            Self::r10 => "r10",
            Self::r11 => "r11",
            Self::r12 => "r12",
            Self::r14 => "r14",
            Self::s0 => "s0",
            Self::s1 => "s1",
            Self::s2 => "s2",
            Self::s3 => "s3",
            Self::s4 => "s4",
            Self::s5 => "s5",
            Self::s6 => "s6",
            Self::s7 => "s7",
            Self::s8 => "s8",
            Self::s9 => "s9",
            Self::s10 => "s10",
            Self::s11 => "s11",
            Self::s12 => "s12",
            Self::s13 => "s13",
            Self::s14 => "s14",
            Self::s15 => "s15",
            Self::s16 => "s16",
            Self::s17 => "s17",
            Self::s18 => "s18",
            Self::s19 => "s19",
            Self::s20 => "s20",
            Self::s21 => "s21",
            Self::s22 => "s22",
            Self::s23 => "s23",
            Self::s24 => "s24",
            Self::s25 => "s25",
            Self::s26 => "s26",
            Self::s27 => "s27",
            Self::s28 => "s28",
            Self::s29 => "s29",
            Self::s30 => "s30",
            Self::s31 => "s31",
            Self::d0 => "d0",
            Self::d1 => "d1",
            Self::d2 => "d2",
            Self::d3 => "d3",
            Self::d4 => "d4",
            Self::d5 => "d5",
            Self::d6 => "d6",
            Self::d7 => "d7",
            Self::d8 => "d8",
            Self::d9 => "d9",
            Self::d10 => "d10",
            Self::d11 => "d11",
            Self::d12 => "d12",
            Self::d13 => "d13",
            Self::d14 => "d14",
            Self::d15 => "d15",
            Self::d16 => "d16",
            Self::d17 => "d17",
            Self::d18 => "d18",
            Self::d19 => "d19",
            Self::d20 => "d20",
            Self::d21 => "d21",
            Self::d22 => "d22",
            Self::d23 => "d23",
            Self::d24 => "d24",
            Self::d25 => "d25",
            Self::d26 => "d26",
            Self::d27 => "d27",
            Self::d28 => "d28",
            Self::d29 => "d29",
            Self::d30 => "d30",
            Self::d31 => "d31",
            Self::q0 => "q0",
            Self::q1 => "q1",
            Self::q2 => "q2",
            Self::q3 => "q3",
            Self::q4 => "q4",
            Self::q5 => "q5",
            Self::q6 => "q6",
            Self::q7 => "q7",
            Self::q8 => "q8",
            Self::q9 => "q9",
            Self::q10 => "q10",
            Self::q11 => "q11",
            Self::q12 => "q12",
            Self::q13 => "q13",
            Self::q14 => "q14",
            Self::q15 => "q15",
        }
    }
    pub fn reg_class(self) -> ArmInlineAsmRegClass {
        match self {
            Self::r0 => ArmInlineAsmRegClass::reg,
            Self::r1 => ArmInlineAsmRegClass::reg,
            Self::r2 => ArmInlineAsmRegClass::reg,
            Self::r3 => ArmInlineAsmRegClass::reg,
            Self::r4 => ArmInlineAsmRegClass::reg,
            Self::r5 => ArmInlineAsmRegClass::reg,
            Self::r7 => ArmInlineAsmRegClass::reg,
            Self::r8 => ArmInlineAsmRegClass::reg,
            Self::r9 => ArmInlineAsmRegClass::reg,
            Self::r10 => ArmInlineAsmRegClass::reg,
            Self::r11 => ArmInlineAsmRegClass::reg,
            Self::r12 => ArmInlineAsmRegClass::reg,
            Self::r14 => ArmInlineAsmRegClass::reg,
            Self::s0 => ArmInlineAsmRegClass::sreg_low16,
            Self::s1 => ArmInlineAsmRegClass::sreg_low16,
            Self::s2 => ArmInlineAsmRegClass::sreg_low16,
            Self::s3 => ArmInlineAsmRegClass::sreg_low16,
            Self::s4 => ArmInlineAsmRegClass::sreg_low16,
            Self::s5 => ArmInlineAsmRegClass::sreg_low16,
            Self::s6 => ArmInlineAsmRegClass::sreg_low16,
            Self::s7 => ArmInlineAsmRegClass::sreg_low16,
            Self::s8 => ArmInlineAsmRegClass::sreg_low16,
            Self::s9 => ArmInlineAsmRegClass::sreg_low16,
            Self::s10 => ArmInlineAsmRegClass::sreg_low16,
            Self::s11 => ArmInlineAsmRegClass::sreg_low16,
            Self::s12 => ArmInlineAsmRegClass::sreg_low16,
            Self::s13 => ArmInlineAsmRegClass::sreg_low16,
            Self::s14 => ArmInlineAsmRegClass::sreg_low16,
            Self::s15 => ArmInlineAsmRegClass::sreg_low16,
            Self::s16 => ArmInlineAsmRegClass::sreg,
            Self::s17 => ArmInlineAsmRegClass::sreg,
            Self::s18 => ArmInlineAsmRegClass::sreg,
            Self::s19 => ArmInlineAsmRegClass::sreg,
            Self::s20 => ArmInlineAsmRegClass::sreg,
            Self::s21 => ArmInlineAsmRegClass::sreg,
            Self::s22 => ArmInlineAsmRegClass::sreg,
            Self::s23 => ArmInlineAsmRegClass::sreg,
            Self::s24 => ArmInlineAsmRegClass::sreg,
            Self::s25 => ArmInlineAsmRegClass::sreg,
            Self::s26 => ArmInlineAsmRegClass::sreg,
            Self::s27 => ArmInlineAsmRegClass::sreg,
            Self::s28 => ArmInlineAsmRegClass::sreg,
            Self::s29 => ArmInlineAsmRegClass::sreg,
            Self::s30 => ArmInlineAsmRegClass::sreg,
            Self::s31 => ArmInlineAsmRegClass::sreg,
            Self::d0 => ArmInlineAsmRegClass::dreg_low8,
            Self::d1 => ArmInlineAsmRegClass::dreg_low8,
            Self::d2 => ArmInlineAsmRegClass::dreg_low8,
            Self::d3 => ArmInlineAsmRegClass::dreg_low8,
            Self::d4 => ArmInlineAsmRegClass::dreg_low8,
            Self::d5 => ArmInlineAsmRegClass::dreg_low8,
            Self::d6 => ArmInlineAsmRegClass::dreg_low8,
            Self::d7 => ArmInlineAsmRegClass::dreg_low8,
            Self::d8 => ArmInlineAsmRegClass::dreg_low16,
            Self::d9 => ArmInlineAsmRegClass::dreg_low16,
            Self::d10 => ArmInlineAsmRegClass::dreg_low16,
            Self::d11 => ArmInlineAsmRegClass::dreg_low16,
            Self::d12 => ArmInlineAsmRegClass::dreg_low16,
            Self::d13 => ArmInlineAsmRegClass::dreg_low16,
            Self::d14 => ArmInlineAsmRegClass::dreg_low16,
            Self::d15 => ArmInlineAsmRegClass::dreg_low16,
            Self::d16 => ArmInlineAsmRegClass::dreg,
            Self::d17 => ArmInlineAsmRegClass::dreg,
            Self::d18 => ArmInlineAsmRegClass::dreg,
            Self::d19 => ArmInlineAsmRegClass::dreg,
            Self::d20 => ArmInlineAsmRegClass::dreg,
            Self::d21 => ArmInlineAsmRegClass::dreg,
            Self::d22 => ArmInlineAsmRegClass::dreg,
            Self::d23 => ArmInlineAsmRegClass::dreg,
            Self::d24 => ArmInlineAsmRegClass::dreg,
            Self::d25 => ArmInlineAsmRegClass::dreg,
            Self::d26 => ArmInlineAsmRegClass::dreg,
            Self::d27 => ArmInlineAsmRegClass::dreg,
            Self::d28 => ArmInlineAsmRegClass::dreg,
            Self::d29 => ArmInlineAsmRegClass::dreg,
            Self::d30 => ArmInlineAsmRegClass::dreg,
            Self::d31 => ArmInlineAsmRegClass::dreg,
            Self::q0 => ArmInlineAsmRegClass::qreg_low4,
            Self::q1 => ArmInlineAsmRegClass::qreg_low4,
            Self::q2 => ArmInlineAsmRegClass::qreg_low4,
            Self::q3 => ArmInlineAsmRegClass::qreg_low4,
            Self::q4 => ArmInlineAsmRegClass::qreg_low8,
            Self::q5 => ArmInlineAsmRegClass::qreg_low8,
            Self::q6 => ArmInlineAsmRegClass::qreg_low8,
            Self::q7 => ArmInlineAsmRegClass::qreg_low8,
            Self::q8 => ArmInlineAsmRegClass::qreg,
            Self::q9 => ArmInlineAsmRegClass::qreg,
            Self::q10 => ArmInlineAsmRegClass::qreg,
            Self::q11 => ArmInlineAsmRegClass::qreg,
            Self::q12 => ArmInlineAsmRegClass::qreg,
            Self::q13 => ArmInlineAsmRegClass::qreg,
            Self::q14 => ArmInlineAsmRegClass::qreg,
            Self::q15 => ArmInlineAsmRegClass::qreg,
        }
    }
    pub fn parse(name: &str) -> Result<Self, &'static str> {
        match name {
            "a1" | "r0" => Ok(Self::r0),
            "a2" | "r1" => Ok(Self::r1),
            "a3" | "r2" => Ok(Self::r2),
            "a4" | "r3" => Ok(Self::r3),
            "v1" | "r4" => Ok(Self::r4),
            "v2" | "r5" => Ok(Self::r5),
            "v4" | "r7" => Ok(Self::r7),
            "v5" | "r8" => Ok(Self::r8),
            "v6" | "rfp" | "r9" => Ok(Self::r9),
            "sl" | "r10" => Ok(Self::r10),
            "fp" | "r11" => Ok(Self::r11),
            "ip" | "r12" => Ok(Self::r12),
            "lr" | "r14" => Ok(Self::r14),
            "s0" => Ok(Self::s0),
            "s1" => Ok(Self::s1),
            "s2" => Ok(Self::s2),
            "s3" => Ok(Self::s3),
            "s4" => Ok(Self::s4),
            "s5" => Ok(Self::s5),
            "s6" => Ok(Self::s6),
            "s7" => Ok(Self::s7),
            "s8" => Ok(Self::s8),
            "s9" => Ok(Self::s9),
            "s10" => Ok(Self::s10),
            "s11" => Ok(Self::s11),
            "s12" => Ok(Self::s12),
            "s13" => Ok(Self::s13),
            "s14" => Ok(Self::s14),
            "s15" => Ok(Self::s15),
            "s16" => Ok(Self::s16),
            "s17" => Ok(Self::s17),
            "s18" => Ok(Self::s18),
            "s19" => Ok(Self::s19),
            "s20" => Ok(Self::s20),
            "s21" => Ok(Self::s21),
            "s22" => Ok(Self::s22),
            "s23" => Ok(Self::s23),
            "s24" => Ok(Self::s24),
            "s25" => Ok(Self::s25),
            "s26" => Ok(Self::s26),
            "s27" => Ok(Self::s27),
            "s28" => Ok(Self::s28),
            "s29" => Ok(Self::s29),
            "s30" => Ok(Self::s30),
            "s31" => Ok(Self::s31),
            "d0" => Ok(Self::d0),
            "d1" => Ok(Self::d1),
            "d2" => Ok(Self::d2),
            "d3" => Ok(Self::d3),
            "d4" => Ok(Self::d4),
            "d5" => Ok(Self::d5),
            "d6" => Ok(Self::d6),
            "d7" => Ok(Self::d7),
            "d8" => Ok(Self::d8),
            "d9" => Ok(Self::d9),
            "d10" => Ok(Self::d10),
            "d11" => Ok(Self::d11),
            "d12" => Ok(Self::d12),
            "d13" => Ok(Self::d13),
            "d14" => Ok(Self::d14),
            "d15" => Ok(Self::d15),
            "d16" => Ok(Self::d16),
            "d17" => Ok(Self::d17),
            "d18" => Ok(Self::d18),
            "d19" => Ok(Self::d19),
            "d20" => Ok(Self::d20),
            "d21" => Ok(Self::d21),
            "d22" => Ok(Self::d22),
            "d23" => Ok(Self::d23),
            "d24" => Ok(Self::d24),
            "d25" => Ok(Self::d25),
            "d26" => Ok(Self::d26),
            "d27" => Ok(Self::d27),
            "d28" => Ok(Self::d28),
            "d29" => Ok(Self::d29),
            "d30" => Ok(Self::d30),
            "d31" => Ok(Self::d31),
            "q0" => Ok(Self::q0),
            "q1" => Ok(Self::q1),
            "q2" => Ok(Self::q2),
            "q3" => Ok(Self::q3),
            "q4" => Ok(Self::q4),
            "q5" => Ok(Self::q5),
            "q6" => Ok(Self::q6),
            "q7" => Ok(Self::q7),
            "q8" => Ok(Self::q8),
            "q9" => Ok(Self::q9),
            "q10" => Ok(Self::q10),
            "q11" => Ok(Self::q11),
            "q12" => Ok(Self::q12),
            "q13" => Ok(Self::q13),
            "q14" => Ok(Self::q14),
            "q15" => Ok(Self::q15),
            "r6" | "v3" =>
                Err("r6 is used internally by LLVM and cannot be used as an operand for inline asm"),
            "r13" | "sp" =>
                Err("the stack pointer cannot be used as an operand for inline asm"),
            "r15" | "pc" =>
                Err("the program pointer 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::r0 => { Ok(()) }
            Self::r1 => { Ok(()) }
            Self::r2 => { Ok(()) }
            Self::r3 => { Ok(()) }
            Self::r4 => { Ok(()) }
            Self::r5 => { Ok(()) }
            Self::r7 => {
                frame_pointer_r7(_arch, _reloc_model, _target_features,
                        _target, _is_clobber)?;
                Ok(())
            }
            Self::r8 => {
                not_thumb1(_arch, _reloc_model, _target_features, _target,
                        _is_clobber)?;
                Ok(())
            }
            Self::r9 => {
                reserved_r9(_arch, _reloc_model, _target_features, _target,
                        _is_clobber)?;
                Ok(())
            }
            Self::r10 => {
                not_thumb1(_arch, _reloc_model, _target_features, _target,
                        _is_clobber)?;
                Ok(())
            }
            Self::r11 => {
                frame_pointer_r11(_arch, _reloc_model, _target_features,
                        _target, _is_clobber)?;
                Ok(())
            }
            Self::r12 => {
                not_thumb1(_arch, _reloc_model, _target_features, _target,
                        _is_clobber)?;
                Ok(())
            }
            Self::r14 => {
                not_thumb1(_arch, _reloc_model, _target_features, _target,
                        _is_clobber)?;
                Ok(())
            }
            Self::s0 => { Ok(()) }
            Self::s1 => { Ok(()) }
            Self::s2 => { Ok(()) }
            Self::s3 => { Ok(()) }
            Self::s4 => { Ok(()) }
            Self::s5 => { Ok(()) }
            Self::s6 => { Ok(()) }
            Self::s7 => { Ok(()) }
            Self::s8 => { Ok(()) }
            Self::s9 => { Ok(()) }
            Self::s10 => { Ok(()) }
            Self::s11 => { Ok(()) }
            Self::s12 => { Ok(()) }
            Self::s13 => { Ok(()) }
            Self::s14 => { Ok(()) }
            Self::s15 => { Ok(()) }
            Self::s16 => { Ok(()) }
            Self::s17 => { Ok(()) }
            Self::s18 => { Ok(()) }
            Self::s19 => { Ok(()) }
            Self::s20 => { Ok(()) }
            Self::s21 => { Ok(()) }
            Self::s22 => { Ok(()) }
            Self::s23 => { Ok(()) }
            Self::s24 => { Ok(()) }
            Self::s25 => { Ok(()) }
            Self::s26 => { Ok(()) }
            Self::s27 => { Ok(()) }
            Self::s28 => { Ok(()) }
            Self::s29 => { Ok(()) }
            Self::s30 => { Ok(()) }
            Self::s31 => { Ok(()) }
            Self::d0 => { Ok(()) }
            Self::d1 => { Ok(()) }
            Self::d2 => { Ok(()) }
            Self::d3 => { Ok(()) }
            Self::d4 => { Ok(()) }
            Self::d5 => { Ok(()) }
            Self::d6 => { Ok(()) }
            Self::d7 => { Ok(()) }
            Self::d8 => { Ok(()) }
            Self::d9 => { Ok(()) }
            Self::d10 => { Ok(()) }
            Self::d11 => { Ok(()) }
            Self::d12 => { Ok(()) }
            Self::d13 => { Ok(()) }
            Self::d14 => { Ok(()) }
            Self::d15 => { Ok(()) }
            Self::d16 => { Ok(()) }
            Self::d17 => { Ok(()) }
            Self::d18 => { Ok(()) }
            Self::d19 => { Ok(()) }
            Self::d20 => { Ok(()) }
            Self::d21 => { Ok(()) }
            Self::d22 => { Ok(()) }
            Self::d23 => { Ok(()) }
            Self::d24 => { Ok(()) }
            Self::d25 => { Ok(()) }
            Self::d26 => { Ok(()) }
            Self::d27 => { Ok(()) }
            Self::d28 => { Ok(()) }
            Self::d29 => { Ok(()) }
            Self::d30 => { Ok(()) }
            Self::d31 => { Ok(()) }
            Self::q0 => { Ok(()) }
            Self::q1 => { Ok(()) }
            Self::q2 => { Ok(()) }
            Self::q3 => { Ok(()) }
            Self::q4 => { Ok(()) }
            Self::q5 => { Ok(()) }
            Self::q6 => { Ok(()) }
            Self::q7 => { Ok(()) }
            Self::q8 => { Ok(()) }
            Self::q9 => { Ok(()) }
            Self::q10 => { Ok(()) }
            Self::q11 => { Ok(()) }
            Self::q12 => { Ok(()) }
            Self::q13 => { Ok(()) }
            Self::q14 => { Ok(()) }
            Self::q15 => { 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::Arm(ArmInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::r0));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::r1));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::r2));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::r3));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::r4));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::r5));
        }
    }
    if frame_pointer_r7(_arch, _reloc_model, _target_features, _target,
                    false).is_ok() && true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::r7));
        }
    }
    if not_thumb1(_arch, _reloc_model, _target_features, _target,
                    false).is_ok() && true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::r8));
        }
    }
    if reserved_r9(_arch, _reloc_model, _target_features, _target,
                    false).is_ok() && true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::r9));
        }
    }
    if not_thumb1(_arch, _reloc_model, _target_features, _target,
                    false).is_ok() && true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::r10));
        }
    }
    if frame_pointer_r11(_arch, _reloc_model, _target_features, _target,
                    false).is_ok() && true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::r11));
        }
    }
    if not_thumb1(_arch, _reloc_model, _target_features, _target,
                    false).is_ok() && true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::r12));
        }
    }
    if not_thumb1(_arch, _reloc_model, _target_features, _target,
                    false).is_ok() && true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::r14));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg_low16))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s0));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s0));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg_low16))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s1));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s1));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg_low16))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s2));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s2));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg_low16))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s3));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s3));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg_low16))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s4));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s4));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg_low16))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s5));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s5));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg_low16))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s6));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s6));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg_low16))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s7));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s7));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg_low16))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s8));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s8));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg_low16))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s9));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s9));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg_low16))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s10));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s10));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg_low16))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s11));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s11));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg_low16))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s12));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s12));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg_low16))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s13));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s13));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg_low16))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s14));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s14));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg_low16))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s15));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s15));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s16));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s17));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s18));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s19));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s20));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s21));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s22));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s23));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s24));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s25));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s26));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s27));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s28));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s29));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s30));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::sreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::s31));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg_low8))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d0));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg_low16))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d0));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d0));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg_low8))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d1));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg_low16))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d1));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d1));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg_low8))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d2));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg_low16))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d2));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d2));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg_low8))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d3));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg_low16))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d3));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d3));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg_low8))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d4));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg_low16))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d4));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d4));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg_low8))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d5));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg_low16))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d5));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d5));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg_low8))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d6));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg_low16))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d6));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d6));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg_low8))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d7));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg_low16))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d7));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d7));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg_low16))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d8));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d8));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg_low16))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d9));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d9));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg_low16))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d10));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d10));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg_low16))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d11));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d11));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg_low16))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d12));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d12));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg_low16))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d13));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d13));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg_low16))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d14));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d14));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg_low16))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d15));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d15));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d16));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d17));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d18));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d19));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d20));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d21));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d22));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d23));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d24));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d25));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d26));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d27));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d28));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d29));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d30));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::dreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::d31));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::qreg_low4))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::q0));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::qreg_low8))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::q0));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::qreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::q0));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::qreg_low4))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::q1));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::qreg_low8))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::q1));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::qreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::q1));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::qreg_low4))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::q2));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::qreg_low8))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::q2));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::qreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::q2));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::qreg_low4))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::q3));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::qreg_low8))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::q3));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::qreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::q3));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::qreg_low8))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::q4));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::qreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::q4));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::qreg_low8))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::q5));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::qreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::q5));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::qreg_low8))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::q6));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::qreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::q6));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::qreg_low8))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::q7));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::qreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::q7));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::qreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::q8));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::qreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::q9));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::qreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::q10));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::qreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::q11));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::qreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::q12));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::qreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::q13));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::qreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::q14));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::Arm(ArmInlineAsmRegClass::qreg))
            {
            set.insert(InlineAsmReg::Arm(ArmInlineAsmReg::q15));
        }
    }
}def_regs! {
139    Arm ArmInlineAsmReg ArmInlineAsmRegClass {
140        r0: reg = ["r0", "a1"],
141        r1: reg = ["r1", "a2"],
142        r2: reg = ["r2", "a3"],
143        r3: reg = ["r3", "a4"],
144        r4: reg = ["r4", "v1"],
145        r5: reg = ["r5", "v2"],
146        r7: reg = ["r7", "v4"] % frame_pointer_r7,
147        r8: reg = ["r8", "v5"] % not_thumb1,
148        r9: reg = ["r9", "v6", "rfp"] % reserved_r9,
149        r10: reg = ["r10", "sl"] % not_thumb1,
150        r11: reg = ["r11", "fp"] % frame_pointer_r11,
151        r12: reg = ["r12", "ip"] % not_thumb1,
152        r14: reg = ["r14", "lr"] % not_thumb1,
153        s0: sreg_low16, sreg = ["s0"],
154        s1: sreg_low16, sreg = ["s1"],
155        s2: sreg_low16, sreg = ["s2"],
156        s3: sreg_low16, sreg = ["s3"],
157        s4: sreg_low16, sreg = ["s4"],
158        s5: sreg_low16, sreg = ["s5"],
159        s6: sreg_low16, sreg = ["s6"],
160        s7: sreg_low16, sreg = ["s7"],
161        s8: sreg_low16, sreg = ["s8"],
162        s9: sreg_low16, sreg = ["s9"],
163        s10: sreg_low16, sreg = ["s10"],
164        s11: sreg_low16, sreg = ["s11"],
165        s12: sreg_low16, sreg = ["s12"],
166        s13: sreg_low16, sreg = ["s13"],
167        s14: sreg_low16, sreg = ["s14"],
168        s15: sreg_low16, sreg = ["s15"],
169        s16: sreg = ["s16"],
170        s17: sreg = ["s17"],
171        s18: sreg = ["s18"],
172        s19: sreg = ["s19"],
173        s20: sreg = ["s20"],
174        s21: sreg = ["s21"],
175        s22: sreg = ["s22"],
176        s23: sreg = ["s23"],
177        s24: sreg = ["s24"],
178        s25: sreg = ["s25"],
179        s26: sreg = ["s26"],
180        s27: sreg = ["s27"],
181        s28: sreg = ["s28"],
182        s29: sreg = ["s29"],
183        s30: sreg = ["s30"],
184        s31: sreg = ["s31"],
185        d0: dreg_low8, dreg_low16, dreg = ["d0"],
186        d1: dreg_low8, dreg_low16, dreg = ["d1"],
187        d2: dreg_low8, dreg_low16, dreg = ["d2"],
188        d3: dreg_low8, dreg_low16, dreg = ["d3"],
189        d4: dreg_low8, dreg_low16, dreg = ["d4"],
190        d5: dreg_low8, dreg_low16, dreg = ["d5"],
191        d6: dreg_low8, dreg_low16, dreg = ["d6"],
192        d7: dreg_low8, dreg_low16, dreg = ["d7"],
193        d8: dreg_low16, dreg = ["d8"],
194        d9: dreg_low16, dreg = ["d9"],
195        d10: dreg_low16, dreg = ["d10"],
196        d11: dreg_low16, dreg = ["d11"],
197        d12: dreg_low16, dreg = ["d12"],
198        d13: dreg_low16, dreg = ["d13"],
199        d14: dreg_low16, dreg = ["d14"],
200        d15: dreg_low16, dreg = ["d15"],
201        d16: dreg = ["d16"],
202        d17: dreg = ["d17"],
203        d18: dreg = ["d18"],
204        d19: dreg = ["d19"],
205        d20: dreg = ["d20"],
206        d21: dreg = ["d21"],
207        d22: dreg = ["d22"],
208        d23: dreg = ["d23"],
209        d24: dreg = ["d24"],
210        d25: dreg = ["d25"],
211        d26: dreg = ["d26"],
212        d27: dreg = ["d27"],
213        d28: dreg = ["d28"],
214        d29: dreg = ["d29"],
215        d30: dreg = ["d30"],
216        d31: dreg = ["d31"],
217        q0: qreg_low4, qreg_low8, qreg = ["q0"],
218        q1: qreg_low4, qreg_low8, qreg = ["q1"],
219        q2: qreg_low4, qreg_low8, qreg = ["q2"],
220        q3: qreg_low4, qreg_low8, qreg = ["q3"],
221        q4: qreg_low8, qreg = ["q4"],
222        q5: qreg_low8, qreg = ["q5"],
223        q6: qreg_low8, qreg = ["q6"],
224        q7: qreg_low8, qreg = ["q7"],
225        q8: qreg = ["q8"],
226        q9: qreg = ["q9"],
227        q10: qreg = ["q10"],
228        q11: qreg = ["q11"],
229        q12: qreg = ["q12"],
230        q13: qreg = ["q13"],
231        q14: qreg = ["q14"],
232        q15: qreg = ["q15"],
233        #error = ["r6", "v3"] =>
234            "r6 is used internally by LLVM and cannot be used as an operand for inline asm",
235        #error = ["r13", "sp"] =>
236            "the stack pointer cannot be used as an operand for inline asm",
237        #error = ["r15", "pc"] =>
238            "the program pointer cannot be used as an operand for inline asm",
239    }
240}
241
242impl ArmInlineAsmReg {
243    pub fn emit(
244        self,
245        out: &mut dyn fmt::Write,
246        _arch: InlineAsmArch,
247        modifier: Option<char>,
248    ) -> fmt::Result {
249        // Only qreg is allowed to have modifiers. This should have been
250        // validated already by now.
251        if let Some(modifier) = modifier {
252            let index = self as u32 - Self::q0 as u32;
253            if !(index < 16) { ::core::panicking::panic("assertion failed: index < 16") };assert!(index < 16);
254            let index = index * 2 + (modifier == 'f') as u32;
255            out.write_fmt(format_args!("d{0}", index))write!(out, "d{index}")
256        } else {
257            out.write_str(self.name())
258        }
259    }
260
261    pub fn overlapping_regs(self, mut cb: impl FnMut(ArmInlineAsmReg)) {
262        cb(self);
263
264        macro_rules! reg_conflicts {
265            (
266                $(
267                    $q:ident : $d0:ident $d1:ident : $s0:ident $s1:ident $s2:ident $s3:ident
268                ),*;
269                $(
270                    $q_high:ident : $d0_high:ident $d1_high:ident
271                ),*;
272            ) => {
273                match self {
274                    $(
275                        Self::$q => {
276                            cb(Self::$d0);
277                            cb(Self::$d1);
278                            cb(Self::$s0);
279                            cb(Self::$s1);
280                            cb(Self::$s2);
281                            cb(Self::$s3);
282                        }
283                        Self::$d0 => {
284                            cb(Self::$q);
285                            cb(Self::$s0);
286                            cb(Self::$s1);
287                        }
288                        Self::$d1 => {
289                            cb(Self::$q);
290                            cb(Self::$s2);
291                            cb(Self::$s3);
292                        }
293                        Self::$s0 | Self::$s1 => {
294                            cb(Self::$q);
295                            cb(Self::$d0);
296                        }
297                        Self::$s2 | Self::$s3 => {
298                            cb(Self::$q);
299                            cb(Self::$d1);
300                        }
301                    )*
302                    $(
303                        Self::$q_high => {
304                            cb(Self::$d0_high);
305                            cb(Self::$d1_high);
306                        }
307                        Self::$d0_high | Self::$d1_high => {
308                            cb(Self::$q_high);
309                        }
310                    )*
311                    _ => {},
312                }
313            };
314        }
315
316        // ARM's floating-point register file is interesting in that it can be
317        // viewed as 16 128-bit registers, 32 64-bit registers or 32 32-bit
318        // registers. Because these views overlap, the registers of different
319        // widths will conflict (e.g. d0 overlaps with s0 and s1, and q1
320        // overlaps with d2 and d3).
321        //
322        // See section E1.3.1 of the ARM Architecture Reference Manual for
323        // ARMv8-A for more details.
324        match self {
    Self::q0 => {
        cb(Self::d0);
        cb(Self::d1);
        cb(Self::s0);
        cb(Self::s1);
        cb(Self::s2);
        cb(Self::s3);
    }
    Self::d0 => { cb(Self::q0); cb(Self::s0); cb(Self::s1); }
    Self::d1 => { cb(Self::q0); cb(Self::s2); cb(Self::s3); }
    Self::s0 | Self::s1 => { cb(Self::q0); cb(Self::d0); }
    Self::s2 | Self::s3 => { cb(Self::q0); cb(Self::d1); }
    Self::q1 => {
        cb(Self::d2);
        cb(Self::d3);
        cb(Self::s4);
        cb(Self::s5);
        cb(Self::s6);
        cb(Self::s7);
    }
    Self::d2 => { cb(Self::q1); cb(Self::s4); cb(Self::s5); }
    Self::d3 => { cb(Self::q1); cb(Self::s6); cb(Self::s7); }
    Self::s4 | Self::s5 => { cb(Self::q1); cb(Self::d2); }
    Self::s6 | Self::s7 => { cb(Self::q1); cb(Self::d3); }
    Self::q2 => {
        cb(Self::d4);
        cb(Self::d5);
        cb(Self::s8);
        cb(Self::s9);
        cb(Self::s10);
        cb(Self::s11);
    }
    Self::d4 => { cb(Self::q2); cb(Self::s8); cb(Self::s9); }
    Self::d5 => { cb(Self::q2); cb(Self::s10); cb(Self::s11); }
    Self::s8 | Self::s9 => { cb(Self::q2); cb(Self::d4); }
    Self::s10 | Self::s11 => { cb(Self::q2); cb(Self::d5); }
    Self::q3 => {
        cb(Self::d6);
        cb(Self::d7);
        cb(Self::s12);
        cb(Self::s13);
        cb(Self::s14);
        cb(Self::s15);
    }
    Self::d6 => { cb(Self::q3); cb(Self::s12); cb(Self::s13); }
    Self::d7 => { cb(Self::q3); cb(Self::s14); cb(Self::s15); }
    Self::s12 | Self::s13 => { cb(Self::q3); cb(Self::d6); }
    Self::s14 | Self::s15 => { cb(Self::q3); cb(Self::d7); }
    Self::q4 => {
        cb(Self::d8);
        cb(Self::d9);
        cb(Self::s16);
        cb(Self::s17);
        cb(Self::s18);
        cb(Self::s19);
    }
    Self::d8 => { cb(Self::q4); cb(Self::s16); cb(Self::s17); }
    Self::d9 => { cb(Self::q4); cb(Self::s18); cb(Self::s19); }
    Self::s16 | Self::s17 => { cb(Self::q4); cb(Self::d8); }
    Self::s18 | Self::s19 => { cb(Self::q4); cb(Self::d9); }
    Self::q5 => {
        cb(Self::d10);
        cb(Self::d11);
        cb(Self::s20);
        cb(Self::s21);
        cb(Self::s22);
        cb(Self::s23);
    }
    Self::d10 => { cb(Self::q5); cb(Self::s20); cb(Self::s21); }
    Self::d11 => { cb(Self::q5); cb(Self::s22); cb(Self::s23); }
    Self::s20 | Self::s21 => { cb(Self::q5); cb(Self::d10); }
    Self::s22 | Self::s23 => { cb(Self::q5); cb(Self::d11); }
    Self::q6 => {
        cb(Self::d12);
        cb(Self::d13);
        cb(Self::s24);
        cb(Self::s25);
        cb(Self::s26);
        cb(Self::s27);
    }
    Self::d12 => { cb(Self::q6); cb(Self::s24); cb(Self::s25); }
    Self::d13 => { cb(Self::q6); cb(Self::s26); cb(Self::s27); }
    Self::s24 | Self::s25 => { cb(Self::q6); cb(Self::d12); }
    Self::s26 | Self::s27 => { cb(Self::q6); cb(Self::d13); }
    Self::q7 => {
        cb(Self::d14);
        cb(Self::d15);
        cb(Self::s28);
        cb(Self::s29);
        cb(Self::s30);
        cb(Self::s31);
    }
    Self::d14 => { cb(Self::q7); cb(Self::s28); cb(Self::s29); }
    Self::d15 => { cb(Self::q7); cb(Self::s30); cb(Self::s31); }
    Self::s28 | Self::s29 => { cb(Self::q7); cb(Self::d14); }
    Self::s30 | Self::s31 => { cb(Self::q7); cb(Self::d15); }
    Self::q8 => { cb(Self::d16); cb(Self::d17); }
    Self::d16 | Self::d17 => { cb(Self::q8); }
    Self::q9 => { cb(Self::d18); cb(Self::d19); }
    Self::d18 | Self::d19 => { cb(Self::q9); }
    Self::q10 => { cb(Self::d20); cb(Self::d21); }
    Self::d20 | Self::d21 => { cb(Self::q10); }
    Self::q11 => { cb(Self::d22); cb(Self::d23); }
    Self::d22 | Self::d23 => { cb(Self::q11); }
    Self::q12 => { cb(Self::d24); cb(Self::d25); }
    Self::d24 | Self::d25 => { cb(Self::q12); }
    Self::q13 => { cb(Self::d26); cb(Self::d27); }
    Self::d26 | Self::d27 => { cb(Self::q13); }
    Self::q14 => { cb(Self::d28); cb(Self::d29); }
    Self::d28 | Self::d29 => { cb(Self::q14); }
    Self::q15 => { cb(Self::d30); cb(Self::d31); }
    Self::d30 | Self::d31 => { cb(Self::q15); }
    _ => {}
}reg_conflicts! {
325            q0 : d0 d1 : s0 s1 s2 s3,
326            q1 : d2 d3 : s4 s5 s6 s7,
327            q2 : d4 d5 : s8 s9 s10 s11,
328            q3 : d6 d7 : s12 s13 s14 s15,
329            q4 : d8 d9 : s16 s17 s18 s19,
330            q5 : d10 d11 : s20 s21 s22 s23,
331            q6 : d12 d13 : s24 s25 s26 s27,
332            q7 : d14 d15 : s28 s29 s30 s31;
333            q8 : d16 d17,
334            q9 : d18 d19,
335            q10 : d20 d21,
336            q11 : d22 d23,
337            q12 : d24 d25,
338            q13 : d26 d27,
339            q14 : d28 d29,
340            q15 : d30 d31;
341        }
342    }
343}