Skip to main content

rustc_target/asm/
m68k.rs

1use std::fmt;
2
3use rustc_span::Symbol;
4
5use super::{InlineAsmArch, InlineAsmType, ModifierInfo};
6
7#[allow(non_camel_case_types)]
pub enum M68kInlineAsmRegClass { reg, reg_addr, reg_data, }
#[automatically_derived]
#[allow(non_camel_case_types)]
impl ::core::marker::Copy for M68kInlineAsmRegClass { }
#[automatically_derived]
#[doc(hidden)]
#[allow(non_camel_case_types)]
unsafe impl ::core::clone::TrivialClone for M68kInlineAsmRegClass { }
#[automatically_derived]
#[allow(non_camel_case_types)]
impl ::core::clone::Clone for M68kInlineAsmRegClass {
    #[inline]
    fn clone(&self) -> M68kInlineAsmRegClass { *self }
}
const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for M68kInlineAsmRegClass {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        M68kInlineAsmRegClass::reg => { 0usize }
                        M68kInlineAsmRegClass::reg_addr => { 1usize }
                        M68kInlineAsmRegClass::reg_data => { 2usize }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    M68kInlineAsmRegClass::reg => {}
                    M68kInlineAsmRegClass::reg_addr => {}
                    M68kInlineAsmRegClass::reg_data => {}
                }
            }
        }
    };
const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for M68kInlineAsmRegClass {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => { M68kInlineAsmRegClass::reg }
                    1usize => { M68kInlineAsmRegClass::reg_addr }
                    2usize => { M68kInlineAsmRegClass::reg_data }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `M68kInlineAsmRegClass`, expected 0..3, actual {0}",
                                n));
                    }
                }
            }
        }
    };
#[automatically_derived]
#[allow(non_camel_case_types)]
impl ::core::fmt::Debug for M68kInlineAsmRegClass {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                M68kInlineAsmRegClass::reg => "reg",
                M68kInlineAsmRegClass::reg_addr => "reg_addr",
                M68kInlineAsmRegClass::reg_data => "reg_data",
            })
    }
}
#[automatically_derived]
#[allow(non_camel_case_types)]
impl ::core::cmp::Eq for M68kInlineAsmRegClass {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_receiver_is_total_eq(&self) {}
}
#[automatically_derived]
#[allow(non_camel_case_types)]
impl ::core::marker::StructuralPartialEq for M68kInlineAsmRegClass { }
#[automatically_derived]
#[allow(non_camel_case_types)]
impl ::core::cmp::PartialEq for M68kInlineAsmRegClass {
    #[inline]
    fn eq(&self, other: &M68kInlineAsmRegClass) -> 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 M68kInlineAsmRegClass {
    #[inline]
    fn partial_cmp(&self, other: &M68kInlineAsmRegClass)
        -> ::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 M68kInlineAsmRegClass {
    #[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 M68kInlineAsmRegClass 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 {
                    M68kInlineAsmRegClass::reg => {}
                    M68kInlineAsmRegClass::reg_addr => {}
                    M68kInlineAsmRegClass::reg_data => {}
                }
            }
        }
    };
impl M68kInlineAsmRegClass {
    pub fn name(self) -> rustc_span::Symbol {
        match self {
            Self::reg => rustc_span::sym::reg,
            Self::reg_addr => rustc_span::sym::reg_addr,
            Self::reg_data => rustc_span::sym::reg_data,
        }
    }
    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::reg_addr => Ok(Self::reg_addr),
            rustc_span::sym::reg_data => Ok(Self::reg_data),
            _ =>
                Err(&[rustc_span::sym::reg, rustc_span::sym::reg_addr,
                                rustc_span::sym::reg_data]),
        }
    }
}
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::M68k(M68kInlineAsmRegClass::reg),
        FxIndexSet::default());
    map.insert(InlineAsmRegClass::M68k(M68kInlineAsmRegClass::reg_addr),
        FxIndexSet::default());
    map.insert(InlineAsmRegClass::M68k(M68kInlineAsmRegClass::reg_data),
        FxIndexSet::default());
    map
}def_reg_class! {
8    M68k M68kInlineAsmRegClass {
9        reg,
10        reg_addr,
11        reg_data,
12    }
13}
14
15impl M68kInlineAsmRegClass {
16    pub fn valid_modifiers(self, _arch: super::InlineAsmArch) -> &'static [char] {
17        &[]
18    }
19
20    pub fn suggest_class(self, _arch: InlineAsmArch, _ty: InlineAsmType) -> Option<Self> {
21        None
22    }
23
24    pub fn suggest_modifier(
25        self,
26        _arch: InlineAsmArch,
27        _ty: InlineAsmType,
28    ) -> Option<ModifierInfo> {
29        None
30    }
31
32    pub fn default_modifier(self, _arch: InlineAsmArch) -> Option<ModifierInfo> {
33        None
34    }
35
36    pub fn supported_types(
37        self,
38        _arch: InlineAsmArch,
39    ) -> &'static [(InlineAsmType, Option<Symbol>)] {
40        match self {
41            Self::reg => {
    use super::InlineAsmType::*;
    &[(I16, None), (I32, None)]
}types! { _: I16, I32; },
42            Self::reg_data => {
    use super::InlineAsmType::*;
    &[(I8, None), (I16, None), (I32, None)]
}types! { _: I8, I16, I32; },
43            Self::reg_addr => {
    use super::InlineAsmType::*;
    &[(I16, None), (I32, None)]
}types! { _: I16, I32; },
44        }
45    }
46}
47
48#[allow(unreachable_code)]
#[allow(non_camel_case_types)]
pub enum M68kInlineAsmReg { d0, d1, d2, d3, d4, d5, d6, d7, a0, a1, a2, a3, }
#[automatically_derived]
#[allow(unreachable_code)]
#[allow(non_camel_case_types)]
impl ::core::marker::Copy for M68kInlineAsmReg { }
#[automatically_derived]
#[doc(hidden)]
#[allow(unreachable_code)]
#[allow(non_camel_case_types)]
unsafe impl ::core::clone::TrivialClone for M68kInlineAsmReg { }
#[automatically_derived]
#[allow(unreachable_code)]
#[allow(non_camel_case_types)]
impl ::core::clone::Clone for M68kInlineAsmReg {
    #[inline]
    fn clone(&self) -> M68kInlineAsmReg { *self }
}
const _: () =
    {
        impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
            for M68kInlineAsmReg {
            fn encode(&self, __encoder: &mut __E) {
                let disc =
                    match *self {
                        M68kInlineAsmReg::d0 => { 0usize }
                        M68kInlineAsmReg::d1 => { 1usize }
                        M68kInlineAsmReg::d2 => { 2usize }
                        M68kInlineAsmReg::d3 => { 3usize }
                        M68kInlineAsmReg::d4 => { 4usize }
                        M68kInlineAsmReg::d5 => { 5usize }
                        M68kInlineAsmReg::d6 => { 6usize }
                        M68kInlineAsmReg::d7 => { 7usize }
                        M68kInlineAsmReg::a0 => { 8usize }
                        M68kInlineAsmReg::a1 => { 9usize }
                        M68kInlineAsmReg::a2 => { 10usize }
                        M68kInlineAsmReg::a3 => { 11usize }
                    };
                ::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
                match *self {
                    M68kInlineAsmReg::d0 => {}
                    M68kInlineAsmReg::d1 => {}
                    M68kInlineAsmReg::d2 => {}
                    M68kInlineAsmReg::d3 => {}
                    M68kInlineAsmReg::d4 => {}
                    M68kInlineAsmReg::d5 => {}
                    M68kInlineAsmReg::d6 => {}
                    M68kInlineAsmReg::d7 => {}
                    M68kInlineAsmReg::a0 => {}
                    M68kInlineAsmReg::a1 => {}
                    M68kInlineAsmReg::a2 => {}
                    M68kInlineAsmReg::a3 => {}
                }
            }
        }
    };
const _: () =
    {
        impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
            for M68kInlineAsmReg {
            fn decode(__decoder: &mut __D) -> Self {
                match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
                    {
                    0usize => { M68kInlineAsmReg::d0 }
                    1usize => { M68kInlineAsmReg::d1 }
                    2usize => { M68kInlineAsmReg::d2 }
                    3usize => { M68kInlineAsmReg::d3 }
                    4usize => { M68kInlineAsmReg::d4 }
                    5usize => { M68kInlineAsmReg::d5 }
                    6usize => { M68kInlineAsmReg::d6 }
                    7usize => { M68kInlineAsmReg::d7 }
                    8usize => { M68kInlineAsmReg::a0 }
                    9usize => { M68kInlineAsmReg::a1 }
                    10usize => { M68kInlineAsmReg::a2 }
                    11usize => { M68kInlineAsmReg::a3 }
                    n => {
                        ::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `M68kInlineAsmReg`, expected 0..12, actual {0}",
                                n));
                    }
                }
            }
        }
    };
#[automatically_derived]
#[allow(unreachable_code)]
#[allow(non_camel_case_types)]
impl ::core::fmt::Debug for M68kInlineAsmReg {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                M68kInlineAsmReg::d0 => "d0",
                M68kInlineAsmReg::d1 => "d1",
                M68kInlineAsmReg::d2 => "d2",
                M68kInlineAsmReg::d3 => "d3",
                M68kInlineAsmReg::d4 => "d4",
                M68kInlineAsmReg::d5 => "d5",
                M68kInlineAsmReg::d6 => "d6",
                M68kInlineAsmReg::d7 => "d7",
                M68kInlineAsmReg::a0 => "a0",
                M68kInlineAsmReg::a1 => "a1",
                M68kInlineAsmReg::a2 => "a2",
                M68kInlineAsmReg::a3 => "a3",
            })
    }
}
#[automatically_derived]
#[allow(unreachable_code)]
#[allow(non_camel_case_types)]
impl ::core::cmp::Eq for M68kInlineAsmReg {
    #[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 M68kInlineAsmReg { }
#[automatically_derived]
#[allow(unreachable_code)]
#[allow(non_camel_case_types)]
impl ::core::cmp::PartialEq for M68kInlineAsmReg {
    #[inline]
    fn eq(&self, other: &M68kInlineAsmReg) -> 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 M68kInlineAsmReg {
    #[inline]
    fn partial_cmp(&self, other: &M68kInlineAsmReg)
        -> ::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 M68kInlineAsmReg {
    #[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 M68kInlineAsmReg 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 {
                    M68kInlineAsmReg::d0 => {}
                    M68kInlineAsmReg::d1 => {}
                    M68kInlineAsmReg::d2 => {}
                    M68kInlineAsmReg::d3 => {}
                    M68kInlineAsmReg::d4 => {}
                    M68kInlineAsmReg::d5 => {}
                    M68kInlineAsmReg::d6 => {}
                    M68kInlineAsmReg::d7 => {}
                    M68kInlineAsmReg::a0 => {}
                    M68kInlineAsmReg::a1 => {}
                    M68kInlineAsmReg::a2 => {}
                    M68kInlineAsmReg::a3 => {}
                }
            }
        }
    };
impl M68kInlineAsmReg {
    pub fn name(self) -> &'static str {
        match self {
            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::a0 => "a0",
            Self::a1 => "a1",
            Self::a2 => "a2",
            Self::a3 => "a3",
        }
    }
    pub fn reg_class(self) -> M68kInlineAsmRegClass {
        match self {
            Self::d0 => M68kInlineAsmRegClass::reg,
            Self::d1 => M68kInlineAsmRegClass::reg,
            Self::d2 => M68kInlineAsmRegClass::reg,
            Self::d3 => M68kInlineAsmRegClass::reg,
            Self::d4 => M68kInlineAsmRegClass::reg,
            Self::d5 => M68kInlineAsmRegClass::reg,
            Self::d6 => M68kInlineAsmRegClass::reg,
            Self::d7 => M68kInlineAsmRegClass::reg,
            Self::a0 => M68kInlineAsmRegClass::reg,
            Self::a1 => M68kInlineAsmRegClass::reg,
            Self::a2 => M68kInlineAsmRegClass::reg,
            Self::a3 => M68kInlineAsmRegClass::reg,
        }
    }
    pub fn parse(name: &str) -> Result<Self, &'static str> {
        match name {
            "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),
            "a0" => Ok(Self::a0),
            "a1" => Ok(Self::a1),
            "a2" => Ok(Self::a2),
            "a3" => Ok(Self::a3),
            "a4" =>
                Err("a4 is used internally by LLVM and cannot be used as an operand for inline asm"),
            "a5" | "bp" =>
                Err("a5 is used internally by LLVM and cannot be used as an operand for inline asm"),
            "a6" | "fp" =>
                Err("a6 is used internally by LLVM and cannot be used as an operand for inline asm"),
            "a7" | "sp" | "usp" | "ssp" | "isp" =>
                Err("the stack 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::d0 => { Ok(()) }
            Self::d1 => { Ok(()) }
            Self::d2 => { Ok(()) }
            Self::d3 => { Ok(()) }
            Self::d4 => { Ok(()) }
            Self::d5 => { Ok(()) }
            Self::d6 => { Ok(()) }
            Self::d7 => { Ok(()) }
            Self::a0 => { Ok(()) }
            Self::a1 => { Ok(()) }
            Self::a2 => { Ok(()) }
            Self::a3 => { 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::M68k(M68kInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::M68k(M68kInlineAsmReg::d0));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::M68k(M68kInlineAsmRegClass::reg_data))
            {
            set.insert(InlineAsmReg::M68k(M68kInlineAsmReg::d0));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::M68k(M68kInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::M68k(M68kInlineAsmReg::d1));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::M68k(M68kInlineAsmRegClass::reg_data))
            {
            set.insert(InlineAsmReg::M68k(M68kInlineAsmReg::d1));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::M68k(M68kInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::M68k(M68kInlineAsmReg::d2));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::M68k(M68kInlineAsmRegClass::reg_data))
            {
            set.insert(InlineAsmReg::M68k(M68kInlineAsmReg::d2));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::M68k(M68kInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::M68k(M68kInlineAsmReg::d3));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::M68k(M68kInlineAsmRegClass::reg_data))
            {
            set.insert(InlineAsmReg::M68k(M68kInlineAsmReg::d3));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::M68k(M68kInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::M68k(M68kInlineAsmReg::d4));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::M68k(M68kInlineAsmRegClass::reg_data))
            {
            set.insert(InlineAsmReg::M68k(M68kInlineAsmReg::d4));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::M68k(M68kInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::M68k(M68kInlineAsmReg::d5));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::M68k(M68kInlineAsmRegClass::reg_data))
            {
            set.insert(InlineAsmReg::M68k(M68kInlineAsmReg::d5));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::M68k(M68kInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::M68k(M68kInlineAsmReg::d6));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::M68k(M68kInlineAsmRegClass::reg_data))
            {
            set.insert(InlineAsmReg::M68k(M68kInlineAsmReg::d6));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::M68k(M68kInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::M68k(M68kInlineAsmReg::d7));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::M68k(M68kInlineAsmRegClass::reg_data))
            {
            set.insert(InlineAsmReg::M68k(M68kInlineAsmReg::d7));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::M68k(M68kInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::M68k(M68kInlineAsmReg::a0));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::M68k(M68kInlineAsmRegClass::reg_addr))
            {
            set.insert(InlineAsmReg::M68k(M68kInlineAsmReg::a0));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::M68k(M68kInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::M68k(M68kInlineAsmReg::a1));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::M68k(M68kInlineAsmRegClass::reg_addr))
            {
            set.insert(InlineAsmReg::M68k(M68kInlineAsmReg::a1));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::M68k(M68kInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::M68k(M68kInlineAsmReg::a2));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::M68k(M68kInlineAsmRegClass::reg_addr))
            {
            set.insert(InlineAsmReg::M68k(M68kInlineAsmReg::a2));
        }
    }
    if true {
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::M68k(M68kInlineAsmRegClass::reg))
            {
            set.insert(InlineAsmReg::M68k(M68kInlineAsmReg::a3));
        }
        if let Some(set) =
                _map.get_mut(&InlineAsmRegClass::M68k(M68kInlineAsmRegClass::reg_addr))
            {
            set.insert(InlineAsmReg::M68k(M68kInlineAsmReg::a3));
        }
    }
}def_regs! {
49    M68k M68kInlineAsmReg M68kInlineAsmRegClass {
50        d0: reg, reg_data = ["d0"],
51        d1: reg, reg_data = ["d1"],
52        d2: reg, reg_data = ["d2"],
53        d3: reg, reg_data = ["d3"],
54        d4: reg, reg_data = ["d4"],
55        d5: reg, reg_data = ["d5"],
56        d6: reg, reg_data = ["d6"],
57        d7: reg, reg_data = ["d7"],
58        a0: reg, reg_addr = ["a0"],
59        a1: reg, reg_addr = ["a1"],
60        a2: reg, reg_addr = ["a2"],
61        a3: reg, reg_addr = ["a3"],
62        #error = ["a4"] =>
63            "a4 is used internally by LLVM and cannot be used as an operand for inline asm",
64        #error = ["a5", "bp"] =>
65            "a5 is used internally by LLVM and cannot be used as an operand for inline asm",
66        #error = ["a6", "fp"] =>
67            "a6 is used internally by LLVM and cannot be used as an operand for inline asm",
68        #error = ["a7", "sp", "usp", "ssp", "isp"] =>
69            "the stack pointer cannot be used as an operand for inline asm",
70    }
71}
72
73impl M68kInlineAsmReg {
74    pub fn emit(
75        self,
76        out: &mut dyn fmt::Write,
77        _arch: InlineAsmArch,
78        _modifier: Option<char>,
79    ) -> fmt::Result {
80        out.write_str(self.name())
81    }
82}