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 SparcInlineAsmRegClass { reg, freg, dreg, qreg, yreg, }
#[automatically_derived]
#[allow(non_camel_case_types)]
impl ::core::marker::Copy for SparcInlineAsmRegClass { }
#[automatically_derived]
#[doc(hidden)]
#[allow(non_camel_case_types)]
unsafe impl ::core::clone::TrivialClone for SparcInlineAsmRegClass { }
#[automatically_derived]
#[allow(non_camel_case_types)]
impl ::core::clone::Clone for SparcInlineAsmRegClass {
#[inline]
fn clone(&self) -> SparcInlineAsmRegClass { *self }
}
const _: () =
{
impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
for SparcInlineAsmRegClass {
fn encode(&self, __encoder: &mut __E) {
let disc =
match *self {
SparcInlineAsmRegClass::reg => { 0usize }
SparcInlineAsmRegClass::freg => { 1usize }
SparcInlineAsmRegClass::dreg => { 2usize }
SparcInlineAsmRegClass::qreg => { 3usize }
SparcInlineAsmRegClass::yreg => { 4usize }
};
::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
}
}
};
const _: () =
{
impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
for SparcInlineAsmRegClass {
fn decode(__decoder: &mut __D) -> Self {
match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
{
0usize => { SparcInlineAsmRegClass::reg }
1usize => { SparcInlineAsmRegClass::freg }
2usize => { SparcInlineAsmRegClass::dreg }
3usize => { SparcInlineAsmRegClass::qreg }
4usize => { SparcInlineAsmRegClass::yreg }
n => {
::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `SparcInlineAsmRegClass`, expected 0..5, actual {0}",
n));
}
}
}
}
};
#[automatically_derived]
#[allow(non_camel_case_types)]
impl ::core::fmt::Debug for SparcInlineAsmRegClass {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::write_str(f,
match self {
SparcInlineAsmRegClass::reg => "reg",
SparcInlineAsmRegClass::freg => "freg",
SparcInlineAsmRegClass::dreg => "dreg",
SparcInlineAsmRegClass::qreg => "qreg",
SparcInlineAsmRegClass::yreg => "yreg",
})
}
}
#[automatically_derived]
#[allow(non_camel_case_types)]
impl ::core::cmp::Eq for SparcInlineAsmRegClass {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {}
}
#[automatically_derived]
#[allow(non_camel_case_types)]
impl ::core::marker::StructuralPartialEq for SparcInlineAsmRegClass { }
#[automatically_derived]
#[allow(non_camel_case_types)]
impl ::core::cmp::PartialEq for SparcInlineAsmRegClass {
#[inline]
fn eq(&self, other: &SparcInlineAsmRegClass) -> 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 SparcInlineAsmRegClass {
#[inline]
fn partial_cmp(&self, other: &SparcInlineAsmRegClass)
-> ::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 SparcInlineAsmRegClass {
#[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 ::rustc_data_structures::stable_hash::StableHash for
SparcInlineAsmRegClass {
#[inline]
fn stable_hash<__Hcx: ::rustc_data_structures::stable_hash::StableHashCtxt>(&self,
__hcx: &mut __Hcx,
__hasher:
&mut ::rustc_data_structures::stable_hash::StableHasher) {
::std::mem::discriminant(self).stable_hash(__hcx, __hasher);
match *self {
SparcInlineAsmRegClass::reg => {}
SparcInlineAsmRegClass::freg => {}
SparcInlineAsmRegClass::dreg => {}
SparcInlineAsmRegClass::qreg => {}
SparcInlineAsmRegClass::yreg => {}
}
}
}
};
impl SparcInlineAsmRegClass {
pub fn name(self) -> rustc_span::Symbol {
match self {
Self::reg => rustc_span::sym::reg,
Self::freg => rustc_span::sym::freg,
Self::dreg => rustc_span::sym::dreg,
Self::qreg => rustc_span::sym::qreg,
Self::yreg => rustc_span::sym::yreg,
}
}
pub fn parse(name: rustc_span::Symbol)
-> Result<Self, &'static [rustc_span::Symbol]> {
match name {
rustc_span::sym::reg => Ok(Self::reg),
rustc_span::sym::freg => Ok(Self::freg),
rustc_span::sym::dreg => Ok(Self::dreg),
rustc_span::sym::qreg => Ok(Self::qreg),
rustc_span::sym::yreg => Ok(Self::yreg),
_ =>
Err(&[rustc_span::sym::reg, rustc_span::sym::freg,
rustc_span::sym::dreg, rustc_span::sym::qreg,
rustc_span::sym::yreg]),
}
}
}
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::Sparc(SparcInlineAsmRegClass::reg),
FxIndexSet::default());
map.insert(InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::freg),
FxIndexSet::default());
map.insert(InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::dreg),
FxIndexSet::default());
map.insert(InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::qreg),
FxIndexSet::default());
map.insert(InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::yreg),
FxIndexSet::default());
map
}def_reg_class! {
10 Sparc SparcInlineAsmRegClass {
11 reg,
12 freg,
13 dreg,
14 qreg,
15 yreg,
16 }
17}
18
19impl SparcInlineAsmRegClass {
20 pub fn valid_modifiers(self, _arch: super::InlineAsmArch) -> &'static [char] {
21 &[]
22 }
23
24 pub fn suggest_class(self, _arch: InlineAsmArch, _ty: InlineAsmType) -> Option<Self> {
25 None
26 }
27
28 pub fn suggest_modifier(
29 self,
30 _arch: InlineAsmArch,
31 _ty: InlineAsmType,
32 ) -> Option<ModifierInfo> {
33 None
34 }
35
36 pub fn default_modifier(self, _arch: InlineAsmArch) -> Option<ModifierInfo> {
37 None
38 }
39
40 pub fn supported_types(
41 self,
42 arch: InlineAsmArch,
43 ) -> &'static [(InlineAsmType, Option<Symbol>)] {
44 match self {
45 Self::reg => {
46 if arch == InlineAsmArch::Sparc {
47 {
use super::InlineAsmType::*;
&[(I8, None), (I16, None), (I32, None)]
}types! {
48 _: I8, I16, I32;
49 }
53 } else {
54 {
use super::InlineAsmType::*;
&[(I8, None), (I16, None), (I32, None), (I64, None)]
}types! { _: I8, I16, I32, I64; }
55 }
56 }
57 Self::freg => {
use super::InlineAsmType::*;
&[(F32, None)]
}types! { _: F32; },
58 Self::dreg => {
use super::InlineAsmType::*;
&[(F64, None)]
}types! { _: F64; },
59 Self::qreg => {
use super::InlineAsmType::*;
&[(F128, None)]
}types! { _: F128; },
60 Self::yreg => &[],
61 }
62 }
63}
64
65fn reserved_g5(
66 arch: InlineAsmArch,
67 _reloc_model: RelocModel,
68 _target_features: &FxIndexSet<Symbol>,
69 _target: &Target,
70 _is_clobber: bool,
71) -> Result<(), &'static str> {
72 if arch == InlineAsmArch::Sparc {
73 Err("g5 is reserved for system on SPARC32")
79 } else {
80 Ok(())
81 }
82}
83
84fn v9_only(
85 _arch: InlineAsmArch,
86 _reloc_model: RelocModel,
87 target_features: &FxIndexSet<Symbol>,
88 _target: &Target,
89 _is_clobber: bool,
90) -> Result<(), &'static str> {
91 if !target_features.contains(&sym::v9) {
95 Err("floating point registers in the upper half can only be used on SPARCv9")
96 } else {
97 Ok(())
98 }
99}
100
101#[allow(unreachable_code)]
#[allow(non_camel_case_types)]
pub enum SparcInlineAsmReg {
r2,
r3,
r4,
r5,
r8,
r9,
r10,
r11,
r12,
r13,
r15,
r16,
r17,
r18,
r19,
r20,
r21,
r22,
r23,
r24,
r25,
r26,
r27,
r28,
r29,
f0,
f1,
f2,
f3,
f4,
f5,
f6,
f7,
f8,
f9,
f10,
f11,
f12,
f13,
f14,
f15,
f16,
f17,
f18,
f19,
f20,
f21,
f22,
f23,
f24,
f25,
f26,
f27,
f28,
f29,
f30,
f31,
d0,
d2,
d4,
d6,
d8,
d10,
d12,
d14,
d16,
d18,
d20,
d22,
d24,
d26,
d28,
d30,
d32,
d34,
d36,
d38,
d40,
d42,
d44,
d46,
d48,
d50,
d52,
d54,
d56,
d58,
d60,
d62,
q0,
q4,
q8,
q12,
q16,
q20,
q24,
q28,
q32,
q36,
q40,
q44,
q48,
q52,
q56,
q60,
y,
}
#[automatically_derived]
#[allow(unreachable_code)]
#[allow(non_camel_case_types)]
impl ::core::marker::Copy for SparcInlineAsmReg { }
#[automatically_derived]
#[doc(hidden)]
#[allow(unreachable_code)]
#[allow(non_camel_case_types)]
unsafe impl ::core::clone::TrivialClone for SparcInlineAsmReg { }
#[automatically_derived]
#[allow(unreachable_code)]
#[allow(non_camel_case_types)]
impl ::core::clone::Clone for SparcInlineAsmReg {
#[inline]
fn clone(&self) -> SparcInlineAsmReg { *self }
}
const _: () =
{
impl<__E: ::rustc_span::SpanEncoder> ::rustc_serialize::Encodable<__E>
for SparcInlineAsmReg {
fn encode(&self, __encoder: &mut __E) {
let disc =
match *self {
SparcInlineAsmReg::r2 => { 0usize }
SparcInlineAsmReg::r3 => { 1usize }
SparcInlineAsmReg::r4 => { 2usize }
SparcInlineAsmReg::r5 => { 3usize }
SparcInlineAsmReg::r8 => { 4usize }
SparcInlineAsmReg::r9 => { 5usize }
SparcInlineAsmReg::r10 => { 6usize }
SparcInlineAsmReg::r11 => { 7usize }
SparcInlineAsmReg::r12 => { 8usize }
SparcInlineAsmReg::r13 => { 9usize }
SparcInlineAsmReg::r15 => { 10usize }
SparcInlineAsmReg::r16 => { 11usize }
SparcInlineAsmReg::r17 => { 12usize }
SparcInlineAsmReg::r18 => { 13usize }
SparcInlineAsmReg::r19 => { 14usize }
SparcInlineAsmReg::r20 => { 15usize }
SparcInlineAsmReg::r21 => { 16usize }
SparcInlineAsmReg::r22 => { 17usize }
SparcInlineAsmReg::r23 => { 18usize }
SparcInlineAsmReg::r24 => { 19usize }
SparcInlineAsmReg::r25 => { 20usize }
SparcInlineAsmReg::r26 => { 21usize }
SparcInlineAsmReg::r27 => { 22usize }
SparcInlineAsmReg::r28 => { 23usize }
SparcInlineAsmReg::r29 => { 24usize }
SparcInlineAsmReg::f0 => { 25usize }
SparcInlineAsmReg::f1 => { 26usize }
SparcInlineAsmReg::f2 => { 27usize }
SparcInlineAsmReg::f3 => { 28usize }
SparcInlineAsmReg::f4 => { 29usize }
SparcInlineAsmReg::f5 => { 30usize }
SparcInlineAsmReg::f6 => { 31usize }
SparcInlineAsmReg::f7 => { 32usize }
SparcInlineAsmReg::f8 => { 33usize }
SparcInlineAsmReg::f9 => { 34usize }
SparcInlineAsmReg::f10 => { 35usize }
SparcInlineAsmReg::f11 => { 36usize }
SparcInlineAsmReg::f12 => { 37usize }
SparcInlineAsmReg::f13 => { 38usize }
SparcInlineAsmReg::f14 => { 39usize }
SparcInlineAsmReg::f15 => { 40usize }
SparcInlineAsmReg::f16 => { 41usize }
SparcInlineAsmReg::f17 => { 42usize }
SparcInlineAsmReg::f18 => { 43usize }
SparcInlineAsmReg::f19 => { 44usize }
SparcInlineAsmReg::f20 => { 45usize }
SparcInlineAsmReg::f21 => { 46usize }
SparcInlineAsmReg::f22 => { 47usize }
SparcInlineAsmReg::f23 => { 48usize }
SparcInlineAsmReg::f24 => { 49usize }
SparcInlineAsmReg::f25 => { 50usize }
SparcInlineAsmReg::f26 => { 51usize }
SparcInlineAsmReg::f27 => { 52usize }
SparcInlineAsmReg::f28 => { 53usize }
SparcInlineAsmReg::f29 => { 54usize }
SparcInlineAsmReg::f30 => { 55usize }
SparcInlineAsmReg::f31 => { 56usize }
SparcInlineAsmReg::d0 => { 57usize }
SparcInlineAsmReg::d2 => { 58usize }
SparcInlineAsmReg::d4 => { 59usize }
SparcInlineAsmReg::d6 => { 60usize }
SparcInlineAsmReg::d8 => { 61usize }
SparcInlineAsmReg::d10 => { 62usize }
SparcInlineAsmReg::d12 => { 63usize }
SparcInlineAsmReg::d14 => { 64usize }
SparcInlineAsmReg::d16 => { 65usize }
SparcInlineAsmReg::d18 => { 66usize }
SparcInlineAsmReg::d20 => { 67usize }
SparcInlineAsmReg::d22 => { 68usize }
SparcInlineAsmReg::d24 => { 69usize }
SparcInlineAsmReg::d26 => { 70usize }
SparcInlineAsmReg::d28 => { 71usize }
SparcInlineAsmReg::d30 => { 72usize }
SparcInlineAsmReg::d32 => { 73usize }
SparcInlineAsmReg::d34 => { 74usize }
SparcInlineAsmReg::d36 => { 75usize }
SparcInlineAsmReg::d38 => { 76usize }
SparcInlineAsmReg::d40 => { 77usize }
SparcInlineAsmReg::d42 => { 78usize }
SparcInlineAsmReg::d44 => { 79usize }
SparcInlineAsmReg::d46 => { 80usize }
SparcInlineAsmReg::d48 => { 81usize }
SparcInlineAsmReg::d50 => { 82usize }
SparcInlineAsmReg::d52 => { 83usize }
SparcInlineAsmReg::d54 => { 84usize }
SparcInlineAsmReg::d56 => { 85usize }
SparcInlineAsmReg::d58 => { 86usize }
SparcInlineAsmReg::d60 => { 87usize }
SparcInlineAsmReg::d62 => { 88usize }
SparcInlineAsmReg::q0 => { 89usize }
SparcInlineAsmReg::q4 => { 90usize }
SparcInlineAsmReg::q8 => { 91usize }
SparcInlineAsmReg::q12 => { 92usize }
SparcInlineAsmReg::q16 => { 93usize }
SparcInlineAsmReg::q20 => { 94usize }
SparcInlineAsmReg::q24 => { 95usize }
SparcInlineAsmReg::q28 => { 96usize }
SparcInlineAsmReg::q32 => { 97usize }
SparcInlineAsmReg::q36 => { 98usize }
SparcInlineAsmReg::q40 => { 99usize }
SparcInlineAsmReg::q44 => { 100usize }
SparcInlineAsmReg::q48 => { 101usize }
SparcInlineAsmReg::q52 => { 102usize }
SparcInlineAsmReg::q56 => { 103usize }
SparcInlineAsmReg::q60 => { 104usize }
SparcInlineAsmReg::y => { 105usize }
};
::rustc_serialize::Encoder::emit_u8(__encoder, disc as u8);
}
}
};
const _: () =
{
impl<__D: ::rustc_span::SpanDecoder> ::rustc_serialize::Decodable<__D>
for SparcInlineAsmReg {
fn decode(__decoder: &mut __D) -> Self {
match ::rustc_serialize::Decoder::read_u8(__decoder) as usize
{
0usize => { SparcInlineAsmReg::r2 }
1usize => { SparcInlineAsmReg::r3 }
2usize => { SparcInlineAsmReg::r4 }
3usize => { SparcInlineAsmReg::r5 }
4usize => { SparcInlineAsmReg::r8 }
5usize => { SparcInlineAsmReg::r9 }
6usize => { SparcInlineAsmReg::r10 }
7usize => { SparcInlineAsmReg::r11 }
8usize => { SparcInlineAsmReg::r12 }
9usize => { SparcInlineAsmReg::r13 }
10usize => { SparcInlineAsmReg::r15 }
11usize => { SparcInlineAsmReg::r16 }
12usize => { SparcInlineAsmReg::r17 }
13usize => { SparcInlineAsmReg::r18 }
14usize => { SparcInlineAsmReg::r19 }
15usize => { SparcInlineAsmReg::r20 }
16usize => { SparcInlineAsmReg::r21 }
17usize => { SparcInlineAsmReg::r22 }
18usize => { SparcInlineAsmReg::r23 }
19usize => { SparcInlineAsmReg::r24 }
20usize => { SparcInlineAsmReg::r25 }
21usize => { SparcInlineAsmReg::r26 }
22usize => { SparcInlineAsmReg::r27 }
23usize => { SparcInlineAsmReg::r28 }
24usize => { SparcInlineAsmReg::r29 }
25usize => { SparcInlineAsmReg::f0 }
26usize => { SparcInlineAsmReg::f1 }
27usize => { SparcInlineAsmReg::f2 }
28usize => { SparcInlineAsmReg::f3 }
29usize => { SparcInlineAsmReg::f4 }
30usize => { SparcInlineAsmReg::f5 }
31usize => { SparcInlineAsmReg::f6 }
32usize => { SparcInlineAsmReg::f7 }
33usize => { SparcInlineAsmReg::f8 }
34usize => { SparcInlineAsmReg::f9 }
35usize => { SparcInlineAsmReg::f10 }
36usize => { SparcInlineAsmReg::f11 }
37usize => { SparcInlineAsmReg::f12 }
38usize => { SparcInlineAsmReg::f13 }
39usize => { SparcInlineAsmReg::f14 }
40usize => { SparcInlineAsmReg::f15 }
41usize => { SparcInlineAsmReg::f16 }
42usize => { SparcInlineAsmReg::f17 }
43usize => { SparcInlineAsmReg::f18 }
44usize => { SparcInlineAsmReg::f19 }
45usize => { SparcInlineAsmReg::f20 }
46usize => { SparcInlineAsmReg::f21 }
47usize => { SparcInlineAsmReg::f22 }
48usize => { SparcInlineAsmReg::f23 }
49usize => { SparcInlineAsmReg::f24 }
50usize => { SparcInlineAsmReg::f25 }
51usize => { SparcInlineAsmReg::f26 }
52usize => { SparcInlineAsmReg::f27 }
53usize => { SparcInlineAsmReg::f28 }
54usize => { SparcInlineAsmReg::f29 }
55usize => { SparcInlineAsmReg::f30 }
56usize => { SparcInlineAsmReg::f31 }
57usize => { SparcInlineAsmReg::d0 }
58usize => { SparcInlineAsmReg::d2 }
59usize => { SparcInlineAsmReg::d4 }
60usize => { SparcInlineAsmReg::d6 }
61usize => { SparcInlineAsmReg::d8 }
62usize => { SparcInlineAsmReg::d10 }
63usize => { SparcInlineAsmReg::d12 }
64usize => { SparcInlineAsmReg::d14 }
65usize => { SparcInlineAsmReg::d16 }
66usize => { SparcInlineAsmReg::d18 }
67usize => { SparcInlineAsmReg::d20 }
68usize => { SparcInlineAsmReg::d22 }
69usize => { SparcInlineAsmReg::d24 }
70usize => { SparcInlineAsmReg::d26 }
71usize => { SparcInlineAsmReg::d28 }
72usize => { SparcInlineAsmReg::d30 }
73usize => { SparcInlineAsmReg::d32 }
74usize => { SparcInlineAsmReg::d34 }
75usize => { SparcInlineAsmReg::d36 }
76usize => { SparcInlineAsmReg::d38 }
77usize => { SparcInlineAsmReg::d40 }
78usize => { SparcInlineAsmReg::d42 }
79usize => { SparcInlineAsmReg::d44 }
80usize => { SparcInlineAsmReg::d46 }
81usize => { SparcInlineAsmReg::d48 }
82usize => { SparcInlineAsmReg::d50 }
83usize => { SparcInlineAsmReg::d52 }
84usize => { SparcInlineAsmReg::d54 }
85usize => { SparcInlineAsmReg::d56 }
86usize => { SparcInlineAsmReg::d58 }
87usize => { SparcInlineAsmReg::d60 }
88usize => { SparcInlineAsmReg::d62 }
89usize => { SparcInlineAsmReg::q0 }
90usize => { SparcInlineAsmReg::q4 }
91usize => { SparcInlineAsmReg::q8 }
92usize => { SparcInlineAsmReg::q12 }
93usize => { SparcInlineAsmReg::q16 }
94usize => { SparcInlineAsmReg::q20 }
95usize => { SparcInlineAsmReg::q24 }
96usize => { SparcInlineAsmReg::q28 }
97usize => { SparcInlineAsmReg::q32 }
98usize => { SparcInlineAsmReg::q36 }
99usize => { SparcInlineAsmReg::q40 }
100usize => { SparcInlineAsmReg::q44 }
101usize => { SparcInlineAsmReg::q48 }
102usize => { SparcInlineAsmReg::q52 }
103usize => { SparcInlineAsmReg::q56 }
104usize => { SparcInlineAsmReg::q60 }
105usize => { SparcInlineAsmReg::y }
n => {
::core::panicking::panic_fmt(format_args!("invalid enum variant tag while decoding `SparcInlineAsmReg`, expected 0..106, actual {0}",
n));
}
}
}
}
};
#[automatically_derived]
#[allow(unreachable_code)]
#[allow(non_camel_case_types)]
impl ::core::fmt::Debug for SparcInlineAsmReg {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::write_str(f,
match self {
SparcInlineAsmReg::r2 => "r2",
SparcInlineAsmReg::r3 => "r3",
SparcInlineAsmReg::r4 => "r4",
SparcInlineAsmReg::r5 => "r5",
SparcInlineAsmReg::r8 => "r8",
SparcInlineAsmReg::r9 => "r9",
SparcInlineAsmReg::r10 => "r10",
SparcInlineAsmReg::r11 => "r11",
SparcInlineAsmReg::r12 => "r12",
SparcInlineAsmReg::r13 => "r13",
SparcInlineAsmReg::r15 => "r15",
SparcInlineAsmReg::r16 => "r16",
SparcInlineAsmReg::r17 => "r17",
SparcInlineAsmReg::r18 => "r18",
SparcInlineAsmReg::r19 => "r19",
SparcInlineAsmReg::r20 => "r20",
SparcInlineAsmReg::r21 => "r21",
SparcInlineAsmReg::r22 => "r22",
SparcInlineAsmReg::r23 => "r23",
SparcInlineAsmReg::r24 => "r24",
SparcInlineAsmReg::r25 => "r25",
SparcInlineAsmReg::r26 => "r26",
SparcInlineAsmReg::r27 => "r27",
SparcInlineAsmReg::r28 => "r28",
SparcInlineAsmReg::r29 => "r29",
SparcInlineAsmReg::f0 => "f0",
SparcInlineAsmReg::f1 => "f1",
SparcInlineAsmReg::f2 => "f2",
SparcInlineAsmReg::f3 => "f3",
SparcInlineAsmReg::f4 => "f4",
SparcInlineAsmReg::f5 => "f5",
SparcInlineAsmReg::f6 => "f6",
SparcInlineAsmReg::f7 => "f7",
SparcInlineAsmReg::f8 => "f8",
SparcInlineAsmReg::f9 => "f9",
SparcInlineAsmReg::f10 => "f10",
SparcInlineAsmReg::f11 => "f11",
SparcInlineAsmReg::f12 => "f12",
SparcInlineAsmReg::f13 => "f13",
SparcInlineAsmReg::f14 => "f14",
SparcInlineAsmReg::f15 => "f15",
SparcInlineAsmReg::f16 => "f16",
SparcInlineAsmReg::f17 => "f17",
SparcInlineAsmReg::f18 => "f18",
SparcInlineAsmReg::f19 => "f19",
SparcInlineAsmReg::f20 => "f20",
SparcInlineAsmReg::f21 => "f21",
SparcInlineAsmReg::f22 => "f22",
SparcInlineAsmReg::f23 => "f23",
SparcInlineAsmReg::f24 => "f24",
SparcInlineAsmReg::f25 => "f25",
SparcInlineAsmReg::f26 => "f26",
SparcInlineAsmReg::f27 => "f27",
SparcInlineAsmReg::f28 => "f28",
SparcInlineAsmReg::f29 => "f29",
SparcInlineAsmReg::f30 => "f30",
SparcInlineAsmReg::f31 => "f31",
SparcInlineAsmReg::d0 => "d0",
SparcInlineAsmReg::d2 => "d2",
SparcInlineAsmReg::d4 => "d4",
SparcInlineAsmReg::d6 => "d6",
SparcInlineAsmReg::d8 => "d8",
SparcInlineAsmReg::d10 => "d10",
SparcInlineAsmReg::d12 => "d12",
SparcInlineAsmReg::d14 => "d14",
SparcInlineAsmReg::d16 => "d16",
SparcInlineAsmReg::d18 => "d18",
SparcInlineAsmReg::d20 => "d20",
SparcInlineAsmReg::d22 => "d22",
SparcInlineAsmReg::d24 => "d24",
SparcInlineAsmReg::d26 => "d26",
SparcInlineAsmReg::d28 => "d28",
SparcInlineAsmReg::d30 => "d30",
SparcInlineAsmReg::d32 => "d32",
SparcInlineAsmReg::d34 => "d34",
SparcInlineAsmReg::d36 => "d36",
SparcInlineAsmReg::d38 => "d38",
SparcInlineAsmReg::d40 => "d40",
SparcInlineAsmReg::d42 => "d42",
SparcInlineAsmReg::d44 => "d44",
SparcInlineAsmReg::d46 => "d46",
SparcInlineAsmReg::d48 => "d48",
SparcInlineAsmReg::d50 => "d50",
SparcInlineAsmReg::d52 => "d52",
SparcInlineAsmReg::d54 => "d54",
SparcInlineAsmReg::d56 => "d56",
SparcInlineAsmReg::d58 => "d58",
SparcInlineAsmReg::d60 => "d60",
SparcInlineAsmReg::d62 => "d62",
SparcInlineAsmReg::q0 => "q0",
SparcInlineAsmReg::q4 => "q4",
SparcInlineAsmReg::q8 => "q8",
SparcInlineAsmReg::q12 => "q12",
SparcInlineAsmReg::q16 => "q16",
SparcInlineAsmReg::q20 => "q20",
SparcInlineAsmReg::q24 => "q24",
SparcInlineAsmReg::q28 => "q28",
SparcInlineAsmReg::q32 => "q32",
SparcInlineAsmReg::q36 => "q36",
SparcInlineAsmReg::q40 => "q40",
SparcInlineAsmReg::q44 => "q44",
SparcInlineAsmReg::q48 => "q48",
SparcInlineAsmReg::q52 => "q52",
SparcInlineAsmReg::q56 => "q56",
SparcInlineAsmReg::q60 => "q60",
SparcInlineAsmReg::y => "y",
})
}
}
#[automatically_derived]
#[allow(unreachable_code)]
#[allow(non_camel_case_types)]
impl ::core::cmp::Eq for SparcInlineAsmReg {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {}
}
#[automatically_derived]
#[allow(unreachable_code)]
#[allow(non_camel_case_types)]
impl ::core::marker::StructuralPartialEq for SparcInlineAsmReg { }
#[automatically_derived]
#[allow(unreachable_code)]
#[allow(non_camel_case_types)]
impl ::core::cmp::PartialEq for SparcInlineAsmReg {
#[inline]
fn eq(&self, other: &SparcInlineAsmReg) -> 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 SparcInlineAsmReg {
#[inline]
fn partial_cmp(&self, other: &SparcInlineAsmReg)
-> ::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 SparcInlineAsmReg {
#[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 ::rustc_data_structures::stable_hash::StableHash for
SparcInlineAsmReg {
#[inline]
fn stable_hash<__Hcx: ::rustc_data_structures::stable_hash::StableHashCtxt>(&self,
__hcx: &mut __Hcx,
__hasher:
&mut ::rustc_data_structures::stable_hash::StableHasher) {
::std::mem::discriminant(self).stable_hash(__hcx, __hasher);
match *self {
SparcInlineAsmReg::r2 => {}
SparcInlineAsmReg::r3 => {}
SparcInlineAsmReg::r4 => {}
SparcInlineAsmReg::r5 => {}
SparcInlineAsmReg::r8 => {}
SparcInlineAsmReg::r9 => {}
SparcInlineAsmReg::r10 => {}
SparcInlineAsmReg::r11 => {}
SparcInlineAsmReg::r12 => {}
SparcInlineAsmReg::r13 => {}
SparcInlineAsmReg::r15 => {}
SparcInlineAsmReg::r16 => {}
SparcInlineAsmReg::r17 => {}
SparcInlineAsmReg::r18 => {}
SparcInlineAsmReg::r19 => {}
SparcInlineAsmReg::r20 => {}
SparcInlineAsmReg::r21 => {}
SparcInlineAsmReg::r22 => {}
SparcInlineAsmReg::r23 => {}
SparcInlineAsmReg::r24 => {}
SparcInlineAsmReg::r25 => {}
SparcInlineAsmReg::r26 => {}
SparcInlineAsmReg::r27 => {}
SparcInlineAsmReg::r28 => {}
SparcInlineAsmReg::r29 => {}
SparcInlineAsmReg::f0 => {}
SparcInlineAsmReg::f1 => {}
SparcInlineAsmReg::f2 => {}
SparcInlineAsmReg::f3 => {}
SparcInlineAsmReg::f4 => {}
SparcInlineAsmReg::f5 => {}
SparcInlineAsmReg::f6 => {}
SparcInlineAsmReg::f7 => {}
SparcInlineAsmReg::f8 => {}
SparcInlineAsmReg::f9 => {}
SparcInlineAsmReg::f10 => {}
SparcInlineAsmReg::f11 => {}
SparcInlineAsmReg::f12 => {}
SparcInlineAsmReg::f13 => {}
SparcInlineAsmReg::f14 => {}
SparcInlineAsmReg::f15 => {}
SparcInlineAsmReg::f16 => {}
SparcInlineAsmReg::f17 => {}
SparcInlineAsmReg::f18 => {}
SparcInlineAsmReg::f19 => {}
SparcInlineAsmReg::f20 => {}
SparcInlineAsmReg::f21 => {}
SparcInlineAsmReg::f22 => {}
SparcInlineAsmReg::f23 => {}
SparcInlineAsmReg::f24 => {}
SparcInlineAsmReg::f25 => {}
SparcInlineAsmReg::f26 => {}
SparcInlineAsmReg::f27 => {}
SparcInlineAsmReg::f28 => {}
SparcInlineAsmReg::f29 => {}
SparcInlineAsmReg::f30 => {}
SparcInlineAsmReg::f31 => {}
SparcInlineAsmReg::d0 => {}
SparcInlineAsmReg::d2 => {}
SparcInlineAsmReg::d4 => {}
SparcInlineAsmReg::d6 => {}
SparcInlineAsmReg::d8 => {}
SparcInlineAsmReg::d10 => {}
SparcInlineAsmReg::d12 => {}
SparcInlineAsmReg::d14 => {}
SparcInlineAsmReg::d16 => {}
SparcInlineAsmReg::d18 => {}
SparcInlineAsmReg::d20 => {}
SparcInlineAsmReg::d22 => {}
SparcInlineAsmReg::d24 => {}
SparcInlineAsmReg::d26 => {}
SparcInlineAsmReg::d28 => {}
SparcInlineAsmReg::d30 => {}
SparcInlineAsmReg::d32 => {}
SparcInlineAsmReg::d34 => {}
SparcInlineAsmReg::d36 => {}
SparcInlineAsmReg::d38 => {}
SparcInlineAsmReg::d40 => {}
SparcInlineAsmReg::d42 => {}
SparcInlineAsmReg::d44 => {}
SparcInlineAsmReg::d46 => {}
SparcInlineAsmReg::d48 => {}
SparcInlineAsmReg::d50 => {}
SparcInlineAsmReg::d52 => {}
SparcInlineAsmReg::d54 => {}
SparcInlineAsmReg::d56 => {}
SparcInlineAsmReg::d58 => {}
SparcInlineAsmReg::d60 => {}
SparcInlineAsmReg::d62 => {}
SparcInlineAsmReg::q0 => {}
SparcInlineAsmReg::q4 => {}
SparcInlineAsmReg::q8 => {}
SparcInlineAsmReg::q12 => {}
SparcInlineAsmReg::q16 => {}
SparcInlineAsmReg::q20 => {}
SparcInlineAsmReg::q24 => {}
SparcInlineAsmReg::q28 => {}
SparcInlineAsmReg::q32 => {}
SparcInlineAsmReg::q36 => {}
SparcInlineAsmReg::q40 => {}
SparcInlineAsmReg::q44 => {}
SparcInlineAsmReg::q48 => {}
SparcInlineAsmReg::q52 => {}
SparcInlineAsmReg::q56 => {}
SparcInlineAsmReg::q60 => {}
SparcInlineAsmReg::y => {}
}
}
}
};
impl SparcInlineAsmReg {
pub fn name(self) -> &'static str {
match self {
Self::r2 => "r2",
Self::r3 => "r3",
Self::r4 => "r4",
Self::r5 => "r5",
Self::r8 => "r8",
Self::r9 => "r9",
Self::r10 => "r10",
Self::r11 => "r11",
Self::r12 => "r12",
Self::r13 => "r13",
Self::r15 => "r15",
Self::r16 => "r16",
Self::r17 => "r17",
Self::r18 => "r18",
Self::r19 => "r19",
Self::r20 => "r20",
Self::r21 => "r21",
Self::r22 => "r22",
Self::r23 => "r23",
Self::r24 => "r24",
Self::r25 => "r25",
Self::r26 => "r26",
Self::r27 => "r27",
Self::r28 => "r28",
Self::r29 => "r29",
Self::f0 => "f0",
Self::f1 => "f1",
Self::f2 => "f2",
Self::f3 => "f3",
Self::f4 => "f4",
Self::f5 => "f5",
Self::f6 => "f6",
Self::f7 => "f7",
Self::f8 => "f8",
Self::f9 => "f9",
Self::f10 => "f10",
Self::f11 => "f11",
Self::f12 => "f12",
Self::f13 => "f13",
Self::f14 => "f14",
Self::f15 => "f15",
Self::f16 => "f16",
Self::f17 => "f17",
Self::f18 => "f18",
Self::f19 => "f19",
Self::f20 => "f20",
Self::f21 => "f21",
Self::f22 => "f22",
Self::f23 => "f23",
Self::f24 => "f24",
Self::f25 => "f25",
Self::f26 => "f26",
Self::f27 => "f27",
Self::f28 => "f28",
Self::f29 => "f29",
Self::f30 => "f30",
Self::f31 => "f31",
Self::d0 => "d0",
Self::d2 => "d2",
Self::d4 => "d4",
Self::d6 => "d6",
Self::d8 => "d8",
Self::d10 => "d10",
Self::d12 => "d12",
Self::d14 => "d14",
Self::d16 => "d16",
Self::d18 => "d18",
Self::d20 => "d20",
Self::d22 => "d22",
Self::d24 => "d24",
Self::d26 => "d26",
Self::d28 => "d28",
Self::d30 => "d30",
Self::d32 => "d32",
Self::d34 => "d34",
Self::d36 => "d36",
Self::d38 => "d38",
Self::d40 => "d40",
Self::d42 => "d42",
Self::d44 => "d44",
Self::d46 => "d46",
Self::d48 => "d48",
Self::d50 => "d50",
Self::d52 => "d52",
Self::d54 => "d54",
Self::d56 => "d56",
Self::d58 => "d58",
Self::d60 => "d60",
Self::d62 => "d62",
Self::q0 => "q0",
Self::q4 => "q4",
Self::q8 => "q8",
Self::q12 => "q12",
Self::q16 => "q16",
Self::q20 => "q20",
Self::q24 => "q24",
Self::q28 => "q28",
Self::q32 => "q32",
Self::q36 => "q36",
Self::q40 => "q40",
Self::q44 => "q44",
Self::q48 => "q48",
Self::q52 => "q52",
Self::q56 => "q56",
Self::q60 => "q60",
Self::y => "y",
}
}
pub fn reg_class(self) -> SparcInlineAsmRegClass {
match self {
Self::r2 => SparcInlineAsmRegClass::reg,
Self::r3 => SparcInlineAsmRegClass::reg,
Self::r4 => SparcInlineAsmRegClass::reg,
Self::r5 => SparcInlineAsmRegClass::reg,
Self::r8 => SparcInlineAsmRegClass::reg,
Self::r9 => SparcInlineAsmRegClass::reg,
Self::r10 => SparcInlineAsmRegClass::reg,
Self::r11 => SparcInlineAsmRegClass::reg,
Self::r12 => SparcInlineAsmRegClass::reg,
Self::r13 => SparcInlineAsmRegClass::reg,
Self::r15 => SparcInlineAsmRegClass::reg,
Self::r16 => SparcInlineAsmRegClass::reg,
Self::r17 => SparcInlineAsmRegClass::reg,
Self::r18 => SparcInlineAsmRegClass::reg,
Self::r19 => SparcInlineAsmRegClass::reg,
Self::r20 => SparcInlineAsmRegClass::reg,
Self::r21 => SparcInlineAsmRegClass::reg,
Self::r22 => SparcInlineAsmRegClass::reg,
Self::r23 => SparcInlineAsmRegClass::reg,
Self::r24 => SparcInlineAsmRegClass::reg,
Self::r25 => SparcInlineAsmRegClass::reg,
Self::r26 => SparcInlineAsmRegClass::reg,
Self::r27 => SparcInlineAsmRegClass::reg,
Self::r28 => SparcInlineAsmRegClass::reg,
Self::r29 => SparcInlineAsmRegClass::reg,
Self::f0 => SparcInlineAsmRegClass::freg,
Self::f1 => SparcInlineAsmRegClass::freg,
Self::f2 => SparcInlineAsmRegClass::freg,
Self::f3 => SparcInlineAsmRegClass::freg,
Self::f4 => SparcInlineAsmRegClass::freg,
Self::f5 => SparcInlineAsmRegClass::freg,
Self::f6 => SparcInlineAsmRegClass::freg,
Self::f7 => SparcInlineAsmRegClass::freg,
Self::f8 => SparcInlineAsmRegClass::freg,
Self::f9 => SparcInlineAsmRegClass::freg,
Self::f10 => SparcInlineAsmRegClass::freg,
Self::f11 => SparcInlineAsmRegClass::freg,
Self::f12 => SparcInlineAsmRegClass::freg,
Self::f13 => SparcInlineAsmRegClass::freg,
Self::f14 => SparcInlineAsmRegClass::freg,
Self::f15 => SparcInlineAsmRegClass::freg,
Self::f16 => SparcInlineAsmRegClass::freg,
Self::f17 => SparcInlineAsmRegClass::freg,
Self::f18 => SparcInlineAsmRegClass::freg,
Self::f19 => SparcInlineAsmRegClass::freg,
Self::f20 => SparcInlineAsmRegClass::freg,
Self::f21 => SparcInlineAsmRegClass::freg,
Self::f22 => SparcInlineAsmRegClass::freg,
Self::f23 => SparcInlineAsmRegClass::freg,
Self::f24 => SparcInlineAsmRegClass::freg,
Self::f25 => SparcInlineAsmRegClass::freg,
Self::f26 => SparcInlineAsmRegClass::freg,
Self::f27 => SparcInlineAsmRegClass::freg,
Self::f28 => SparcInlineAsmRegClass::freg,
Self::f29 => SparcInlineAsmRegClass::freg,
Self::f30 => SparcInlineAsmRegClass::freg,
Self::f31 => SparcInlineAsmRegClass::freg,
Self::d0 => SparcInlineAsmRegClass::dreg,
Self::d2 => SparcInlineAsmRegClass::dreg,
Self::d4 => SparcInlineAsmRegClass::dreg,
Self::d6 => SparcInlineAsmRegClass::dreg,
Self::d8 => SparcInlineAsmRegClass::dreg,
Self::d10 => SparcInlineAsmRegClass::dreg,
Self::d12 => SparcInlineAsmRegClass::dreg,
Self::d14 => SparcInlineAsmRegClass::dreg,
Self::d16 => SparcInlineAsmRegClass::dreg,
Self::d18 => SparcInlineAsmRegClass::dreg,
Self::d20 => SparcInlineAsmRegClass::dreg,
Self::d22 => SparcInlineAsmRegClass::dreg,
Self::d24 => SparcInlineAsmRegClass::dreg,
Self::d26 => SparcInlineAsmRegClass::dreg,
Self::d28 => SparcInlineAsmRegClass::dreg,
Self::d30 => SparcInlineAsmRegClass::dreg,
Self::d32 => SparcInlineAsmRegClass::dreg,
Self::d34 => SparcInlineAsmRegClass::dreg,
Self::d36 => SparcInlineAsmRegClass::dreg,
Self::d38 => SparcInlineAsmRegClass::dreg,
Self::d40 => SparcInlineAsmRegClass::dreg,
Self::d42 => SparcInlineAsmRegClass::dreg,
Self::d44 => SparcInlineAsmRegClass::dreg,
Self::d46 => SparcInlineAsmRegClass::dreg,
Self::d48 => SparcInlineAsmRegClass::dreg,
Self::d50 => SparcInlineAsmRegClass::dreg,
Self::d52 => SparcInlineAsmRegClass::dreg,
Self::d54 => SparcInlineAsmRegClass::dreg,
Self::d56 => SparcInlineAsmRegClass::dreg,
Self::d58 => SparcInlineAsmRegClass::dreg,
Self::d60 => SparcInlineAsmRegClass::dreg,
Self::d62 => SparcInlineAsmRegClass::dreg,
Self::q0 => SparcInlineAsmRegClass::qreg,
Self::q4 => SparcInlineAsmRegClass::qreg,
Self::q8 => SparcInlineAsmRegClass::qreg,
Self::q12 => SparcInlineAsmRegClass::qreg,
Self::q16 => SparcInlineAsmRegClass::qreg,
Self::q20 => SparcInlineAsmRegClass::qreg,
Self::q24 => SparcInlineAsmRegClass::qreg,
Self::q28 => SparcInlineAsmRegClass::qreg,
Self::q32 => SparcInlineAsmRegClass::qreg,
Self::q36 => SparcInlineAsmRegClass::qreg,
Self::q40 => SparcInlineAsmRegClass::qreg,
Self::q44 => SparcInlineAsmRegClass::qreg,
Self::q48 => SparcInlineAsmRegClass::qreg,
Self::q52 => SparcInlineAsmRegClass::qreg,
Self::q56 => SparcInlineAsmRegClass::qreg,
Self::q60 => SparcInlineAsmRegClass::qreg,
Self::y => SparcInlineAsmRegClass::yreg,
}
}
pub fn parse(name: &str) -> Result<Self, &'static str> {
match name {
"g2" | "r2" => Ok(Self::r2),
"g3" | "r3" => Ok(Self::r3),
"g4" | "r4" => Ok(Self::r4),
"g5" | "r5" => Ok(Self::r5),
"o0" | "r8" => Ok(Self::r8),
"o1" | "r9" => Ok(Self::r9),
"o2" | "r10" => Ok(Self::r10),
"o3" | "r11" => Ok(Self::r11),
"o4" | "r12" => Ok(Self::r12),
"o5" | "r13" => Ok(Self::r13),
"o7" | "r15" => Ok(Self::r15),
"l0" | "r16" => Ok(Self::r16),
"l1" | "r17" => Ok(Self::r17),
"l2" | "r18" => Ok(Self::r18),
"l3" | "r19" => Ok(Self::r19),
"l4" | "r20" => Ok(Self::r20),
"l5" | "r21" => Ok(Self::r21),
"l6" | "r22" => Ok(Self::r22),
"l7" | "r23" => Ok(Self::r23),
"i0" | "r24" => Ok(Self::r24),
"i1" | "r25" => Ok(Self::r25),
"i2" | "r26" => Ok(Self::r26),
"i3" | "r27" => Ok(Self::r27),
"i4" | "r28" => Ok(Self::r28),
"i5" | "r29" => Ok(Self::r29),
"f0" => Ok(Self::f0),
"f1" => Ok(Self::f1),
"f2" => Ok(Self::f2),
"f3" => Ok(Self::f3),
"f4" => Ok(Self::f4),
"f5" => Ok(Self::f5),
"f6" => Ok(Self::f6),
"f7" => Ok(Self::f7),
"f8" => Ok(Self::f8),
"f9" => Ok(Self::f9),
"f10" => Ok(Self::f10),
"f11" => Ok(Self::f11),
"f12" => Ok(Self::f12),
"f13" => Ok(Self::f13),
"f14" => Ok(Self::f14),
"f15" => Ok(Self::f15),
"f16" => Ok(Self::f16),
"f17" => Ok(Self::f17),
"f18" => Ok(Self::f18),
"f19" => Ok(Self::f19),
"f20" => Ok(Self::f20),
"f21" => Ok(Self::f21),
"f22" => Ok(Self::f22),
"f23" => Ok(Self::f23),
"f24" => Ok(Self::f24),
"f25" => Ok(Self::f25),
"f26" => Ok(Self::f26),
"f27" => Ok(Self::f27),
"f28" => Ok(Self::f28),
"f29" => Ok(Self::f29),
"f30" => Ok(Self::f30),
"f31" => Ok(Self::f31),
"d0" => Ok(Self::d0),
"d2" => Ok(Self::d2),
"d4" => Ok(Self::d4),
"d6" => Ok(Self::d6),
"d8" => Ok(Self::d8),
"d10" => Ok(Self::d10),
"d12" => Ok(Self::d12),
"d14" => Ok(Self::d14),
"d16" => Ok(Self::d16),
"d18" => Ok(Self::d18),
"d20" => Ok(Self::d20),
"d22" => Ok(Self::d22),
"d24" => Ok(Self::d24),
"d26" => Ok(Self::d26),
"d28" => Ok(Self::d28),
"d30" => Ok(Self::d30),
"d32" => Ok(Self::d32),
"d34" => Ok(Self::d34),
"d36" => Ok(Self::d36),
"d38" => Ok(Self::d38),
"d40" => Ok(Self::d40),
"d42" => Ok(Self::d42),
"d44" => Ok(Self::d44),
"d46" => Ok(Self::d46),
"d48" => Ok(Self::d48),
"d50" => Ok(Self::d50),
"d52" => Ok(Self::d52),
"d54" => Ok(Self::d54),
"d56" => Ok(Self::d56),
"d58" => Ok(Self::d58),
"d60" => Ok(Self::d60),
"d62" => Ok(Self::d62),
"q0" => Ok(Self::q0),
"q4" => Ok(Self::q4),
"q8" => Ok(Self::q8),
"q12" => Ok(Self::q12),
"q16" => Ok(Self::q16),
"q20" => Ok(Self::q20),
"q24" => Ok(Self::q24),
"q28" => Ok(Self::q28),
"q32" => Ok(Self::q32),
"q36" => Ok(Self::q36),
"q40" => Ok(Self::q40),
"q44" => Ok(Self::q44),
"q48" => Ok(Self::q48),
"q52" => Ok(Self::q52),
"q56" => Ok(Self::q56),
"q60" => Ok(Self::q60),
"y" => Ok(Self::y),
"r0" | "g0" =>
Err("g0 is always zero and cannot be used as an operand for inline asm"),
"r1" | "g1" =>
Err("reserved by LLVM and cannot be used as an operand for inline asm"),
"r6" | "g6" | "r7" | "g7" =>
Err("reserved for system and cannot be used as an operand for inline asm"),
"sp" | "r14" | "o6" =>
Err("the stack pointer cannot be used as an operand for inline asm"),
"fp" | "r30" | "i6" =>
Err("the frame pointer cannot be used as an operand for inline asm"),
"r31" | "i7" =>
Err("the return address register cannot be used as an operand for inline asm"),
_ => Err("unknown register"),
}
}
pub fn validate(self, _arch: super::InlineAsmArch,
_reloc_model: crate::spec::RelocModel,
_target_features: &rustc_data_structures::fx::FxIndexSet<Symbol>,
_target: &crate::spec::Target, _is_clobber: bool)
-> Result<(), &'static str> {
match self {
Self::r2 => { Ok(()) }
Self::r3 => { Ok(()) }
Self::r4 => { Ok(()) }
Self::r5 => {
reserved_g5(_arch, _reloc_model, _target_features, _target,
_is_clobber)?;
Ok(())
}
Self::r8 => { Ok(()) }
Self::r9 => { Ok(()) }
Self::r10 => { Ok(()) }
Self::r11 => { Ok(()) }
Self::r12 => { Ok(()) }
Self::r13 => { Ok(()) }
Self::r15 => { Ok(()) }
Self::r16 => { Ok(()) }
Self::r17 => { Ok(()) }
Self::r18 => { Ok(()) }
Self::r19 => { Ok(()) }
Self::r20 => { Ok(()) }
Self::r21 => { Ok(()) }
Self::r22 => { Ok(()) }
Self::r23 => { Ok(()) }
Self::r24 => { Ok(()) }
Self::r25 => { Ok(()) }
Self::r26 => { Ok(()) }
Self::r27 => { Ok(()) }
Self::r28 => { Ok(()) }
Self::r29 => { Ok(()) }
Self::f0 => { Ok(()) }
Self::f1 => { Ok(()) }
Self::f2 => { Ok(()) }
Self::f3 => { Ok(()) }
Self::f4 => { Ok(()) }
Self::f5 => { Ok(()) }
Self::f6 => { Ok(()) }
Self::f7 => { Ok(()) }
Self::f8 => { Ok(()) }
Self::f9 => { Ok(()) }
Self::f10 => { Ok(()) }
Self::f11 => { Ok(()) }
Self::f12 => { Ok(()) }
Self::f13 => { Ok(()) }
Self::f14 => { Ok(()) }
Self::f15 => { Ok(()) }
Self::f16 => { Ok(()) }
Self::f17 => { Ok(()) }
Self::f18 => { Ok(()) }
Self::f19 => { Ok(()) }
Self::f20 => { Ok(()) }
Self::f21 => { Ok(()) }
Self::f22 => { Ok(()) }
Self::f23 => { Ok(()) }
Self::f24 => { Ok(()) }
Self::f25 => { Ok(()) }
Self::f26 => { Ok(()) }
Self::f27 => { Ok(()) }
Self::f28 => { Ok(()) }
Self::f29 => { Ok(()) }
Self::f30 => { Ok(()) }
Self::f31 => { Ok(()) }
Self::d0 => { Ok(()) }
Self::d2 => { Ok(()) }
Self::d4 => { Ok(()) }
Self::d6 => { Ok(()) }
Self::d8 => { Ok(()) }
Self::d10 => { Ok(()) }
Self::d12 => { Ok(()) }
Self::d14 => { Ok(()) }
Self::d16 => { Ok(()) }
Self::d18 => { Ok(()) }
Self::d20 => { Ok(()) }
Self::d22 => { Ok(()) }
Self::d24 => { Ok(()) }
Self::d26 => { Ok(()) }
Self::d28 => { Ok(()) }
Self::d30 => { Ok(()) }
Self::d32 => {
v9_only(_arch, _reloc_model, _target_features, _target,
_is_clobber)?;
Ok(())
}
Self::d34 => {
v9_only(_arch, _reloc_model, _target_features, _target,
_is_clobber)?;
Ok(())
}
Self::d36 => {
v9_only(_arch, _reloc_model, _target_features, _target,
_is_clobber)?;
Ok(())
}
Self::d38 => {
v9_only(_arch, _reloc_model, _target_features, _target,
_is_clobber)?;
Ok(())
}
Self::d40 => {
v9_only(_arch, _reloc_model, _target_features, _target,
_is_clobber)?;
Ok(())
}
Self::d42 => {
v9_only(_arch, _reloc_model, _target_features, _target,
_is_clobber)?;
Ok(())
}
Self::d44 => {
v9_only(_arch, _reloc_model, _target_features, _target,
_is_clobber)?;
Ok(())
}
Self::d46 => {
v9_only(_arch, _reloc_model, _target_features, _target,
_is_clobber)?;
Ok(())
}
Self::d48 => {
v9_only(_arch, _reloc_model, _target_features, _target,
_is_clobber)?;
Ok(())
}
Self::d50 => {
v9_only(_arch, _reloc_model, _target_features, _target,
_is_clobber)?;
Ok(())
}
Self::d52 => {
v9_only(_arch, _reloc_model, _target_features, _target,
_is_clobber)?;
Ok(())
}
Self::d54 => {
v9_only(_arch, _reloc_model, _target_features, _target,
_is_clobber)?;
Ok(())
}
Self::d56 => {
v9_only(_arch, _reloc_model, _target_features, _target,
_is_clobber)?;
Ok(())
}
Self::d58 => {
v9_only(_arch, _reloc_model, _target_features, _target,
_is_clobber)?;
Ok(())
}
Self::d60 => {
v9_only(_arch, _reloc_model, _target_features, _target,
_is_clobber)?;
Ok(())
}
Self::d62 => {
v9_only(_arch, _reloc_model, _target_features, _target,
_is_clobber)?;
Ok(())
}
Self::q0 => { Ok(()) }
Self::q4 => { Ok(()) }
Self::q8 => { Ok(()) }
Self::q12 => { Ok(()) }
Self::q16 => { Ok(()) }
Self::q20 => { Ok(()) }
Self::q24 => { Ok(()) }
Self::q28 => { Ok(()) }
Self::q32 => {
v9_only(_arch, _reloc_model, _target_features, _target,
_is_clobber)?;
Ok(())
}
Self::q36 => {
v9_only(_arch, _reloc_model, _target_features, _target,
_is_clobber)?;
Ok(())
}
Self::q40 => {
v9_only(_arch, _reloc_model, _target_features, _target,
_is_clobber)?;
Ok(())
}
Self::q44 => {
v9_only(_arch, _reloc_model, _target_features, _target,
_is_clobber)?;
Ok(())
}
Self::q48 => {
v9_only(_arch, _reloc_model, _target_features, _target,
_is_clobber)?;
Ok(())
}
Self::q52 => {
v9_only(_arch, _reloc_model, _target_features, _target,
_is_clobber)?;
Ok(())
}
Self::q56 => {
v9_only(_arch, _reloc_model, _target_features, _target,
_is_clobber)?;
Ok(())
}
Self::q60 => {
v9_only(_arch, _reloc_model, _target_features, _target,
_is_clobber)?;
Ok(())
}
Self::y => { 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::Sparc(SparcInlineAsmRegClass::reg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::r2));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::reg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::r3));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::reg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::r4));
}
}
if reserved_g5(_arch, _reloc_model, _target_features, _target,
false).is_ok() && true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::reg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::r5));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::reg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::r8));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::reg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::r9));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::reg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::r10));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::reg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::r11));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::reg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::r12));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::reg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::r13));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::reg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::r15));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::reg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::r16));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::reg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::r17));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::reg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::r18));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::reg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::r19));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::reg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::r20));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::reg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::r21));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::reg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::r22));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::reg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::r23));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::reg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::r24));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::reg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::r25));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::reg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::r26));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::reg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::r27));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::reg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::r28));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::reg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::r29));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::freg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::f0));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::freg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::f1));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::freg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::f2));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::freg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::f3));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::freg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::f4));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::freg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::f5));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::freg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::f6));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::freg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::f7));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::freg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::f8));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::freg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::f9));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::freg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::f10));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::freg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::f11));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::freg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::f12));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::freg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::f13));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::freg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::f14));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::freg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::f15));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::freg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::f16));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::freg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::f17));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::freg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::f18));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::freg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::f19));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::freg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::f20));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::freg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::f21));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::freg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::f22));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::freg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::f23));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::freg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::f24));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::freg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::f25));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::freg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::f26));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::freg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::f27));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::freg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::f28));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::freg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::f29));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::freg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::f30));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::freg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::f31));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::dreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::d0));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::dreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::d2));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::dreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::d4));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::dreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::d6));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::dreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::d8));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::dreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::d10));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::dreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::d12));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::dreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::d14));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::dreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::d16));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::dreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::d18));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::dreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::d20));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::dreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::d22));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::dreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::d24));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::dreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::d26));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::dreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::d28));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::dreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::d30));
}
}
if v9_only(_arch, _reloc_model, _target_features, _target, false).is_ok()
&& true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::dreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::d32));
}
}
if v9_only(_arch, _reloc_model, _target_features, _target, false).is_ok()
&& true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::dreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::d34));
}
}
if v9_only(_arch, _reloc_model, _target_features, _target, false).is_ok()
&& true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::dreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::d36));
}
}
if v9_only(_arch, _reloc_model, _target_features, _target, false).is_ok()
&& true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::dreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::d38));
}
}
if v9_only(_arch, _reloc_model, _target_features, _target, false).is_ok()
&& true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::dreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::d40));
}
}
if v9_only(_arch, _reloc_model, _target_features, _target, false).is_ok()
&& true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::dreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::d42));
}
}
if v9_only(_arch, _reloc_model, _target_features, _target, false).is_ok()
&& true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::dreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::d44));
}
}
if v9_only(_arch, _reloc_model, _target_features, _target, false).is_ok()
&& true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::dreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::d46));
}
}
if v9_only(_arch, _reloc_model, _target_features, _target, false).is_ok()
&& true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::dreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::d48));
}
}
if v9_only(_arch, _reloc_model, _target_features, _target, false).is_ok()
&& true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::dreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::d50));
}
}
if v9_only(_arch, _reloc_model, _target_features, _target, false).is_ok()
&& true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::dreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::d52));
}
}
if v9_only(_arch, _reloc_model, _target_features, _target, false).is_ok()
&& true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::dreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::d54));
}
}
if v9_only(_arch, _reloc_model, _target_features, _target, false).is_ok()
&& true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::dreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::d56));
}
}
if v9_only(_arch, _reloc_model, _target_features, _target, false).is_ok()
&& true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::dreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::d58));
}
}
if v9_only(_arch, _reloc_model, _target_features, _target, false).is_ok()
&& true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::dreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::d60));
}
}
if v9_only(_arch, _reloc_model, _target_features, _target, false).is_ok()
&& true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::dreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::d62));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::qreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::q0));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::qreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::q4));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::qreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::q8));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::qreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::q12));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::qreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::q16));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::qreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::q20));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::qreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::q24));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::qreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::q28));
}
}
if v9_only(_arch, _reloc_model, _target_features, _target, false).is_ok()
&& true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::qreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::q32));
}
}
if v9_only(_arch, _reloc_model, _target_features, _target, false).is_ok()
&& true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::qreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::q36));
}
}
if v9_only(_arch, _reloc_model, _target_features, _target, false).is_ok()
&& true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::qreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::q40));
}
}
if v9_only(_arch, _reloc_model, _target_features, _target, false).is_ok()
&& true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::qreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::q44));
}
}
if v9_only(_arch, _reloc_model, _target_features, _target, false).is_ok()
&& true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::qreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::q48));
}
}
if v9_only(_arch, _reloc_model, _target_features, _target, false).is_ok()
&& true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::qreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::q52));
}
}
if v9_only(_arch, _reloc_model, _target_features, _target, false).is_ok()
&& true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::qreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::q56));
}
}
if v9_only(_arch, _reloc_model, _target_features, _target, false).is_ok()
&& true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::qreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::q60));
}
}
if true {
if let Some(set) =
_map.get_mut(&InlineAsmRegClass::Sparc(SparcInlineAsmRegClass::yreg))
{
set.insert(InlineAsmReg::Sparc(SparcInlineAsmReg::y));
}
}
}def_regs! {
102 Sparc SparcInlineAsmReg SparcInlineAsmRegClass {
103 r2: reg = ["r2", "g2"], r3: reg = ["r3", "g3"], r4: reg = ["r4", "g4"], r5: reg = ["r5", "g5"] % reserved_g5,
112 r8: reg = ["r8", "o0"], r9: reg = ["r9", "o1"], r10: reg = ["r10", "o2"], r11: reg = ["r11", "o3"], r12: reg = ["r12", "o4"], r13: reg = ["r13", "o5"], r15: reg = ["r15", "o7"], r16: reg = ["r16", "l0"], r17: reg = ["r17", "l1"], r18: reg = ["r18", "l2"], r19: reg = ["r19", "l3"], r20: reg = ["r20", "l4"], r21: reg = ["r21", "l5"], r22: reg = ["r22", "l6"], r23: reg = ["r23", "l7"], r24: reg = ["r24", "i0"], r25: reg = ["r25", "i1"], r26: reg = ["r26", "i2"], r27: reg = ["r27", "i3"], r28: reg = ["r28", "i4"], r29: reg = ["r29", "i5"], f0: freg = ["f0"],
134 f1: freg = ["f1"],
135 f2: freg = ["f2"],
136 f3: freg = ["f3"],
137 f4: freg = ["f4"],
138 f5: freg = ["f5"],
139 f6: freg = ["f6"],
140 f7: freg = ["f7"],
141 f8: freg = ["f8"],
142 f9: freg = ["f9"],
143 f10: freg = ["f10"],
144 f11: freg = ["f11"],
145 f12: freg = ["f12"],
146 f13: freg = ["f13"],
147 f14: freg = ["f14"],
148 f15: freg = ["f15"],
149 f16: freg = ["f16"],
150 f17: freg = ["f17"],
151 f18: freg = ["f18"],
152 f19: freg = ["f19"],
153 f20: freg = ["f20"],
154 f21: freg = ["f21"],
155 f22: freg = ["f22"],
156 f23: freg = ["f23"],
157 f24: freg = ["f24"],
158 f25: freg = ["f25"],
159 f26: freg = ["f26"],
160 f27: freg = ["f27"],
161 f28: freg = ["f28"],
162 f29: freg = ["f29"],
163 f30: freg = ["f30"],
164 f31: freg = ["f31"],
165 d0: dreg = ["d0"],
166 d2: dreg = ["d2"],
167 d4: dreg = ["d4"],
168 d6: dreg = ["d6"],
169 d8: dreg = ["d8"],
170 d10: dreg = ["d10"],
171 d12: dreg = ["d12"],
172 d14: dreg = ["d14"],
173 d16: dreg = ["d16"],
174 d18: dreg = ["d18"],
175 d20: dreg = ["d20"],
176 d22: dreg = ["d22"],
177 d24: dreg = ["d24"],
178 d26: dreg = ["d26"],
179 d28: dreg = ["d28"],
180 d30: dreg = ["d30"],
181 d32: dreg = ["d32"] % v9_only,
182 d34: dreg = ["d34"] % v9_only,
183 d36: dreg = ["d36"] % v9_only,
184 d38: dreg = ["d38"] % v9_only,
185 d40: dreg = ["d40"] % v9_only,
186 d42: dreg = ["d42"] % v9_only,
187 d44: dreg = ["d44"] % v9_only,
188 d46: dreg = ["d46"] % v9_only,
189 d48: dreg = ["d48"] % v9_only,
190 d50: dreg = ["d50"] % v9_only,
191 d52: dreg = ["d52"] % v9_only,
192 d54: dreg = ["d54"] % v9_only,
193 d56: dreg = ["d56"] % v9_only,
194 d58: dreg = ["d58"] % v9_only,
195 d60: dreg = ["d60"] % v9_only,
196 d62: dreg = ["d62"] % v9_only,
197 q0: qreg = ["q0"],
198 q4: qreg = ["q4"],
199 q8: qreg = ["q8"],
200 q12: qreg = ["q12"],
201 q16: qreg = ["q16"],
202 q20: qreg = ["q20"],
203 q24: qreg = ["q24"],
204 q28: qreg = ["q28"],
205 q32: qreg = ["q32"] % v9_only,
206 q36: qreg = ["q36"] % v9_only,
207 q40: qreg = ["q40"] % v9_only,
208 q44: qreg = ["q44"] % v9_only,
209 q48: qreg = ["q48"] % v9_only,
210 q52: qreg = ["q52"] % v9_only,
211 q56: qreg = ["q56"] % v9_only,
212 q60: qreg = ["q60"] % v9_only,
213 y: yreg = ["y"],
214 #error = ["r0", "g0"] =>
215 "g0 is always zero and cannot be used as an operand for inline asm",
216 #error = ["r1", "g1"] =>
220 "reserved by LLVM and cannot be used as an operand for inline asm",
221 #error = ["r6", "g6", "r7", "g7"] =>
222 "reserved for system and cannot be used as an operand for inline asm",
223 #error = ["sp", "r14", "o6"] =>
224 "the stack pointer cannot be used as an operand for inline asm",
225 #error = ["fp", "r30", "i6"] =>
226 "the frame pointer cannot be used as an operand for inline asm",
227 #error = ["r31", "i7"] =>
228 "the return address register cannot be used as an operand for inline asm",
229 }
230}
231
232impl SparcInlineAsmReg {
233 pub fn emit(
234 self,
235 out: &mut dyn fmt::Write,
236 _arch: InlineAsmArch,
237 _modifier: Option<char>,
238 ) -> fmt::Result {
239 out.write_fmt(format_args!("%{0}", self.name()))write!(out, "%{}", self.name())
240 }
241
242 pub fn overlapping_regs(self, mut cb: impl FnMut(SparcInlineAsmReg)) {
243 cb(self);
244
245 macro_rules! reg_conflicts {
246 (
247 $(
248 $q:ident : $d0:ident $d1:ident : $f0:ident $f1:ident $f2:ident $f3:ident
249 ),*;
250 $(
251 $q_high:ident : $d0_high:ident $d1_high:ident
252 ),*;
253 ) => {
254 match self {
255 $(
256 Self::$q => {
257 cb(Self::$d0);
258 cb(Self::$d1);
259 cb(Self::$f0);
260 cb(Self::$f1);
261 cb(Self::$f2);
262 cb(Self::$f3);
263 }
264 Self::$d0 => {
265 cb(Self::$q);
266 cb(Self::$f0);
267 cb(Self::$f1);
268 }
269 Self::$d1 => {
270 cb(Self::$q);
271 cb(Self::$f2);
272 cb(Self::$f3);
273 }
274 Self::$f0 | Self::$f1 => {
275 cb(Self::$q);
276 cb(Self::$d0);
277 }
278 Self::$f2 | Self::$f3 => {
279 cb(Self::$q);
280 cb(Self::$d1);
281 }
282 )*
283 $(
284 Self::$q_high => {
285 cb(Self::$d0_high);
286 cb(Self::$d1_high);
287 }
288 Self::$d0_high | Self::$d1_high => {
289 cb(Self::$q_high);
290 }
291 )*
292 _ => {},
293 }
294 };
295 }
296
297 match self {
Self::q0 => {
cb(Self::d0);
cb(Self::d2);
cb(Self::f0);
cb(Self::f1);
cb(Self::f2);
cb(Self::f3);
}
Self::d0 => { cb(Self::q0); cb(Self::f0); cb(Self::f1); }
Self::d2 => { cb(Self::q0); cb(Self::f2); cb(Self::f3); }
Self::f0 | Self::f1 => { cb(Self::q0); cb(Self::d0); }
Self::f2 | Self::f3 => { cb(Self::q0); cb(Self::d2); }
Self::q4 => {
cb(Self::d4);
cb(Self::d6);
cb(Self::f4);
cb(Self::f5);
cb(Self::f6);
cb(Self::f7);
}
Self::d4 => { cb(Self::q4); cb(Self::f4); cb(Self::f5); }
Self::d6 => { cb(Self::q4); cb(Self::f6); cb(Self::f7); }
Self::f4 | Self::f5 => { cb(Self::q4); cb(Self::d4); }
Self::f6 | Self::f7 => { cb(Self::q4); cb(Self::d6); }
Self::q8 => {
cb(Self::d8);
cb(Self::d10);
cb(Self::f8);
cb(Self::f9);
cb(Self::f10);
cb(Self::f11);
}
Self::d8 => { cb(Self::q8); cb(Self::f8); cb(Self::f9); }
Self::d10 => { cb(Self::q8); cb(Self::f10); cb(Self::f11); }
Self::f8 | Self::f9 => { cb(Self::q8); cb(Self::d8); }
Self::f10 | Self::f11 => { cb(Self::q8); cb(Self::d10); }
Self::q12 => {
cb(Self::d12);
cb(Self::d14);
cb(Self::f12);
cb(Self::f13);
cb(Self::f14);
cb(Self::f15);
}
Self::d12 => { cb(Self::q12); cb(Self::f12); cb(Self::f13); }
Self::d14 => { cb(Self::q12); cb(Self::f14); cb(Self::f15); }
Self::f12 | Self::f13 => { cb(Self::q12); cb(Self::d12); }
Self::f14 | Self::f15 => { cb(Self::q12); cb(Self::d14); }
Self::q16 => {
cb(Self::d16);
cb(Self::d18);
cb(Self::f16);
cb(Self::f17);
cb(Self::f18);
cb(Self::f19);
}
Self::d16 => { cb(Self::q16); cb(Self::f16); cb(Self::f17); }
Self::d18 => { cb(Self::q16); cb(Self::f18); cb(Self::f19); }
Self::f16 | Self::f17 => { cb(Self::q16); cb(Self::d16); }
Self::f18 | Self::f19 => { cb(Self::q16); cb(Self::d18); }
Self::q20 => {
cb(Self::d20);
cb(Self::d22);
cb(Self::f20);
cb(Self::f21);
cb(Self::f22);
cb(Self::f23);
}
Self::d20 => { cb(Self::q20); cb(Self::f20); cb(Self::f21); }
Self::d22 => { cb(Self::q20); cb(Self::f22); cb(Self::f23); }
Self::f20 | Self::f21 => { cb(Self::q20); cb(Self::d20); }
Self::f22 | Self::f23 => { cb(Self::q20); cb(Self::d22); }
Self::q24 => {
cb(Self::d24);
cb(Self::d26);
cb(Self::f24);
cb(Self::f25);
cb(Self::f26);
cb(Self::f27);
}
Self::d24 => { cb(Self::q24); cb(Self::f24); cb(Self::f25); }
Self::d26 => { cb(Self::q24); cb(Self::f26); cb(Self::f27); }
Self::f24 | Self::f25 => { cb(Self::q24); cb(Self::d24); }
Self::f26 | Self::f27 => { cb(Self::q24); cb(Self::d26); }
Self::q28 => {
cb(Self::d28);
cb(Self::d30);
cb(Self::f28);
cb(Self::f29);
cb(Self::f30);
cb(Self::f31);
}
Self::d28 => { cb(Self::q28); cb(Self::f28); cb(Self::f29); }
Self::d30 => { cb(Self::q28); cb(Self::f30); cb(Self::f31); }
Self::f28 | Self::f29 => { cb(Self::q28); cb(Self::d28); }
Self::f30 | Self::f31 => { cb(Self::q28); cb(Self::d30); }
Self::q32 => { cb(Self::d32); cb(Self::d34); }
Self::d32 | Self::d34 => { cb(Self::q32); }
Self::q36 => { cb(Self::d36); cb(Self::d38); }
Self::d36 | Self::d38 => { cb(Self::q36); }
Self::q40 => { cb(Self::d40); cb(Self::d42); }
Self::d40 | Self::d42 => { cb(Self::q40); }
Self::q44 => { cb(Self::d44); cb(Self::d46); }
Self::d44 | Self::d46 => { cb(Self::q44); }
Self::q48 => { cb(Self::d48); cb(Self::d50); }
Self::d48 | Self::d50 => { cb(Self::q48); }
Self::q52 => { cb(Self::d52); cb(Self::d54); }
Self::d52 | Self::d54 => { cb(Self::q52); }
Self::q56 => { cb(Self::d56); cb(Self::d58); }
Self::d56 | Self::d58 => { cb(Self::q56); }
Self::q60 => { cb(Self::d60); cb(Self::d62); }
Self::d60 | Self::d62 => { cb(Self::q60); }
_ => {}
}reg_conflicts! {
305 q0 : d0 d2 : f0 f1 f2 f3,
306 q4 : d4 d6 : f4 f5 f6 f7,
307 q8 : d8 d10 : f8 f9 f10 f11,
308 q12 : d12 d14 : f12 f13 f14 f15,
309 q16 : d16 d18 : f16 f17 f18 f19,
310 q20 : d20 d22 : f20 f21 f22 f23,
311 q24 : d24 d26 : f24 f25 f26 f27,
312 q28 : d28 d30 : f28 f29 f30 f31;
313 q32 : d32 d34,
314 q36 : d36 d38,
315 q40 : d40 d42,
316 q44 : d44 d46,
317 q48 : d48 d50,
318 q52 : d52 d54,
319 q56 : d56 d58,
320 q60 : d60 d62;
321 }
322 }
323
324 pub fn dreg_number(self) -> Option<u32> {
325 if self >= Self::d0 && self <= Self::d62 {
326 Some((self as u32 - Self::d0 as u32) * 2)
327 } else {
328 None
329 }
330 }
331
332 pub fn qreg_number(self) -> Option<u32> {
333 if self >= Self::q0 && self <= Self::q60 {
334 Some((self as u32 - Self::q0 as u32) * 4)
335 } else {
336 None
337 }
338 }
339}