1use std::fmt::{self, Debug};
2use std::num::NonZero;
3use std::ops::RangeInclusive;
4
5use serde::Serialize;
6
7use crate::compiler_interface::with;
8use crate::mir::FieldIdx;
9use crate::target::{MachineInfo, MachineSize as Size};
10use crate::ty::{Align, Ty, VariantIdx, index_impl};
11use crate::{Error, ThreadLocalIndex, error};
12
13#[derive(#[automatically_derived]
impl ::core::clone::Clone for FnAbi {
#[inline]
fn clone(&self) -> FnAbi {
FnAbi {
args: ::core::clone::Clone::clone(&self.args),
ret: ::core::clone::Clone::clone(&self.ret),
fixed_count: ::core::clone::Clone::clone(&self.fixed_count),
conv: ::core::clone::Clone::clone(&self.conv),
c_variadic: ::core::clone::Clone::clone(&self.c_variadic),
}
}
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for FnAbi {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field5_finish(f, "FnAbi", "args",
&self.args, "ret", &self.ret, "fixed_count", &self.fixed_count,
"conv", &self.conv, "c_variadic", &&self.c_variadic)
}
}Debug, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for FnAbi { }
#[automatically_derived]
impl ::core::cmp::PartialEq for FnAbi {
#[inline]
fn eq(&self, other: &FnAbi) -> bool {
self.fixed_count == other.fixed_count &&
self.c_variadic == other.c_variadic &&
self.args == other.args && self.ret == other.ret &&
self.conv == other.conv
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for FnAbi {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<Vec<ArgAbi>>;
let _: ::core::cmp::AssertParamIsEq<ArgAbi>;
let _: ::core::cmp::AssertParamIsEq<u32>;
let _: ::core::cmp::AssertParamIsEq<CallConvention>;
let _: ::core::cmp::AssertParamIsEq<bool>;
}
}Eq, #[automatically_derived]
impl ::core::hash::Hash for FnAbi {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&self.args, state);
::core::hash::Hash::hash(&self.ret, state);
::core::hash::Hash::hash(&self.fixed_count, state);
::core::hash::Hash::hash(&self.conv, state);
::core::hash::Hash::hash(&self.c_variadic, state)
}
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for FnAbi {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer, "FnAbi",
false as usize + 1 + 1 + 1 + 1 + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"args", &self.args)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"ret", &self.ret)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"fixed_count", &self.fixed_count)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"conv", &self.conv)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"c_variadic", &self.c_variadic)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};Serialize)]
15pub struct FnAbi {
16 pub args: Vec<ArgAbi>,
18
19 pub ret: ArgAbi,
21
22 pub fixed_count: u32,
28
29 pub conv: CallConvention,
31
32 pub c_variadic: bool,
34}
35
36#[derive(#[automatically_derived]
impl ::core::clone::Clone for ArgAbi {
#[inline]
fn clone(&self) -> ArgAbi {
ArgAbi {
ty: ::core::clone::Clone::clone(&self.ty),
layout: ::core::clone::Clone::clone(&self.layout),
mode: ::core::clone::Clone::clone(&self.mode),
}
}
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for ArgAbi {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field3_finish(f, "ArgAbi", "ty",
&self.ty, "layout", &self.layout, "mode", &&self.mode)
}
}Debug, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for ArgAbi { }
#[automatically_derived]
impl ::core::cmp::PartialEq for ArgAbi {
#[inline]
fn eq(&self, other: &ArgAbi) -> bool {
self.ty == other.ty && self.layout == other.layout &&
self.mode == other.mode
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for ArgAbi {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<Ty>;
let _: ::core::cmp::AssertParamIsEq<Layout>;
let _: ::core::cmp::AssertParamIsEq<PassMode>;
}
}Eq, #[automatically_derived]
impl ::core::hash::Hash for ArgAbi {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&self.ty, state);
::core::hash::Hash::hash(&self.layout, state);
::core::hash::Hash::hash(&self.mode, state)
}
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for ArgAbi {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer, "ArgAbi",
false as usize + 1 + 1 + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"ty", &self.ty)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"layout", &self.layout)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"mode", &self.mode)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};Serialize)]
38pub struct ArgAbi {
39 pub ty: Ty,
40 pub layout: Layout,
41 pub mode: PassMode,
42}
43
44#[derive(#[automatically_derived]
impl ::core::clone::Clone for PassMode {
#[inline]
fn clone(&self) -> PassMode {
match self {
PassMode::Ignore => PassMode::Ignore,
PassMode::Direct(__self_0) =>
PassMode::Direct(::core::clone::Clone::clone(__self_0)),
PassMode::Pair(__self_0, __self_1) =>
PassMode::Pair(::core::clone::Clone::clone(__self_0),
::core::clone::Clone::clone(__self_1)),
PassMode::Cast { pad_i32_count: __self_0, cast: __self_1 } =>
PassMode::Cast {
pad_i32_count: ::core::clone::Clone::clone(__self_0),
cast: ::core::clone::Clone::clone(__self_1),
},
PassMode::Indirect {
attrs: __self_0, meta_attrs: __self_1, on_stack: __self_2 } =>
PassMode::Indirect {
attrs: ::core::clone::Clone::clone(__self_0),
meta_attrs: ::core::clone::Clone::clone(__self_1),
on_stack: ::core::clone::Clone::clone(__self_2),
},
}
}
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for PassMode {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
PassMode::Ignore =>
::core::fmt::Formatter::write_str(f, "Ignore"),
PassMode::Direct(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Direct",
&__self_0),
PassMode::Pair(__self_0, __self_1) =>
::core::fmt::Formatter::debug_tuple_field2_finish(f, "Pair",
__self_0, &__self_1),
PassMode::Cast { pad_i32_count: __self_0, cast: __self_1 } =>
::core::fmt::Formatter::debug_struct_field2_finish(f, "Cast",
"pad_i32_count", __self_0, "cast", &__self_1),
PassMode::Indirect {
attrs: __self_0, meta_attrs: __self_1, on_stack: __self_2 } =>
::core::fmt::Formatter::debug_struct_field3_finish(f,
"Indirect", "attrs", __self_0, "meta_attrs", __self_1,
"on_stack", &__self_2),
}
}
}Debug, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for PassMode { }
#[automatically_derived]
impl ::core::cmp::PartialEq for PassMode {
#[inline]
fn eq(&self, other: &PassMode) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr &&
match (self, other) {
(PassMode::Direct(__self_0), PassMode::Direct(__arg1_0)) =>
__self_0 == __arg1_0,
(PassMode::Pair(__self_0, __self_1),
PassMode::Pair(__arg1_0, __arg1_1)) =>
__self_0 == __arg1_0 && __self_1 == __arg1_1,
(PassMode::Cast { pad_i32_count: __self_0, cast: __self_1 },
PassMode::Cast { pad_i32_count: __arg1_0, cast: __arg1_1 })
=> __self_0 == __arg1_0 && __self_1 == __arg1_1,
(PassMode::Indirect {
attrs: __self_0, meta_attrs: __self_1, on_stack: __self_2 },
PassMode::Indirect {
attrs: __arg1_0, meta_attrs: __arg1_1, on_stack: __arg1_2 })
=>
__self_2 == __arg1_2 && __self_0 == __arg1_0 &&
__self_1 == __arg1_1,
_ => true,
}
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for PassMode {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<ArgAttributes>;
let _: ::core::cmp::AssertParamIsEq<u8>;
let _: ::core::cmp::AssertParamIsEq<CastTarget>;
let _: ::core::cmp::AssertParamIsEq<Option<ArgAttributes>>;
let _: ::core::cmp::AssertParamIsEq<bool>;
}
}Eq, #[automatically_derived]
impl ::core::hash::Hash for PassMode {
#[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);
match self {
PassMode::Direct(__self_0) =>
::core::hash::Hash::hash(__self_0, state),
PassMode::Pair(__self_0, __self_1) => {
::core::hash::Hash::hash(__self_0, state);
::core::hash::Hash::hash(__self_1, state)
}
PassMode::Cast { pad_i32_count: __self_0, cast: __self_1 } => {
::core::hash::Hash::hash(__self_0, state);
::core::hash::Hash::hash(__self_1, state)
}
PassMode::Indirect {
attrs: __self_0, meta_attrs: __self_1, on_stack: __self_2 } =>
{
::core::hash::Hash::hash(__self_0, state);
::core::hash::Hash::hash(__self_1, state);
::core::hash::Hash::hash(__self_2, state)
}
_ => {}
}
}
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for PassMode {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
match *self {
PassMode::Ignore =>
_serde::Serializer::serialize_unit_variant(__serializer,
"PassMode", 0u32, "Ignore"),
PassMode::Direct(ref __field0) =>
_serde::Serializer::serialize_newtype_variant(__serializer,
"PassMode", 1u32, "Direct", __field0),
PassMode::Pair(ref __field0, ref __field1) => {
let mut __serde_state =
_serde::Serializer::serialize_tuple_variant(__serializer,
"PassMode", 2u32, "Pair", 0 + 1 + 1)?;
_serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
__field0)?;
_serde::ser::SerializeTupleVariant::serialize_field(&mut __serde_state,
__field1)?;
_serde::ser::SerializeTupleVariant::end(__serde_state)
}
PassMode::Cast { ref pad_i32_count, ref cast } => {
let mut __serde_state =
_serde::Serializer::serialize_struct_variant(__serializer,
"PassMode", 3u32, "Cast", 0 + 1 + 1)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"pad_i32_count", pad_i32_count)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"cast", cast)?;
_serde::ser::SerializeStructVariant::end(__serde_state)
}
PassMode::Indirect { ref attrs, ref meta_attrs, ref on_stack
} => {
let mut __serde_state =
_serde::Serializer::serialize_struct_variant(__serializer,
"PassMode", 4u32, "Indirect", 0 + 1 + 1 + 1)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"attrs", attrs)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"meta_attrs", meta_attrs)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"on_stack", on_stack)?;
_serde::ser::SerializeStructVariant::end(__serde_state)
}
}
}
}
};Serialize)]
54pub enum PassMode {
55 Ignore,
59 Direct(ArgAttributes),
63 Pair(ArgAttributes, ArgAttributes),
68 Cast { pad_i32_count: u8, cast: CastTarget },
74 Indirect {
80 attrs: ArgAttributes,
81 meta_attrs: Option<ArgAttributes>,
84 on_stack: bool,
85 },
86}
87
88#[derive(#[automatically_derived]
impl ::core::clone::Clone for ArgAttributes {
#[inline]
fn clone(&self) -> ArgAttributes {
ArgAttributes {
arg_ext: ::core::clone::Clone::clone(&self.arg_ext),
pointee_size: ::core::clone::Clone::clone(&self.pointee_size),
pointee_align: ::core::clone::Clone::clone(&self.pointee_align),
}
}
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for ArgAttributes {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field3_finish(f, "ArgAttributes",
"arg_ext", &self.arg_ext, "pointee_size", &self.pointee_size,
"pointee_align", &&self.pointee_align)
}
}Debug, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for ArgAttributes { }
#[automatically_derived]
impl ::core::cmp::PartialEq for ArgAttributes {
#[inline]
fn eq(&self, other: &ArgAttributes) -> bool {
self.arg_ext == other.arg_ext &&
self.pointee_size == other.pointee_size &&
self.pointee_align == other.pointee_align
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for ArgAttributes {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<ArgExtension>;
let _: ::core::cmp::AssertParamIsEq<Size>;
let _: ::core::cmp::AssertParamIsEq<Option<Align>>;
}
}Eq, #[automatically_derived]
impl ::core::hash::Hash for ArgAttributes {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&self.arg_ext, state);
::core::hash::Hash::hash(&self.pointee_size, state);
::core::hash::Hash::hash(&self.pointee_align, state)
}
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for ArgAttributes {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"ArgAttributes", false as usize + 1 + 1 + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"arg_ext", &self.arg_ext)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"pointee_size", &self.pointee_size)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"pointee_align", &self.pointee_align)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};Serialize)]
94pub struct ArgAttributes {
95 pub(crate) arg_ext: ArgExtension,
96 pub(crate) pointee_size: Size,
97 pub(crate) pointee_align: Option<Align>,
98}
99
100impl ArgAttributes {
101 pub fn arg_extension(&self) -> ArgExtension {
105 self.arg_ext
106 }
107
108 pub fn pointee_align(&self) -> Option<Align> {
113 self.pointee_align
114 }
115
116 pub fn pointee_size(&self) -> Size {
118 self.pointee_size
119 }
120}
121
122#[derive(#[automatically_derived]
impl ::core::marker::Copy for ArgExtension { }Copy, #[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for ArgExtension { }
#[automatically_derived]
impl ::core::clone::Clone for ArgExtension {
#[inline]
fn clone(&self) -> ArgExtension { *self }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for ArgExtension {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::write_str(f,
match self {
ArgExtension::None => "None",
ArgExtension::Zext => "Zext",
ArgExtension::Sext => "Sext",
})
}
}Debug, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for ArgExtension { }
#[automatically_derived]
impl ::core::cmp::PartialEq for ArgExtension {
#[inline]
fn eq(&self, other: &ArgExtension) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for ArgExtension { }Eq, #[automatically_derived]
impl ::core::hash::Hash for ArgExtension {
#[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)
}
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for ArgExtension {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
match *self {
ArgExtension::None =>
_serde::Serializer::serialize_unit_variant(__serializer,
"ArgExtension", 0u32, "None"),
ArgExtension::Zext =>
_serde::Serializer::serialize_unit_variant(__serializer,
"ArgExtension", 1u32, "Zext"),
ArgExtension::Sext =>
_serde::Serializer::serialize_unit_variant(__serializer,
"ArgExtension", 2u32, "Sext"),
}
}
}
};Serialize)]
124pub enum ArgExtension {
125 None,
127 Zext,
129 Sext,
131}
132
133#[derive(#[automatically_derived]
impl ::core::clone::Clone for CastTarget {
#[inline]
fn clone(&self) -> CastTarget {
CastTarget {
prefix: ::core::clone::Clone::clone(&self.prefix),
rest_offset: ::core::clone::Clone::clone(&self.rest_offset),
rest: ::core::clone::Clone::clone(&self.rest),
}
}
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for CastTarget {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field3_finish(f, "CastTarget",
"prefix", &self.prefix, "rest_offset", &self.rest_offset, "rest",
&&self.rest)
}
}Debug, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for CastTarget { }
#[automatically_derived]
impl ::core::cmp::PartialEq for CastTarget {
#[inline]
fn eq(&self, other: &CastTarget) -> bool {
self.prefix == other.prefix && self.rest_offset == other.rest_offset
&& self.rest == other.rest
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for CastTarget {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<Vec<Reg>>;
let _: ::core::cmp::AssertParamIsEq<Option<Size>>;
let _: ::core::cmp::AssertParamIsEq<Uniform>;
}
}Eq, #[automatically_derived]
impl ::core::hash::Hash for CastTarget {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&self.prefix, state);
::core::hash::Hash::hash(&self.rest_offset, state);
::core::hash::Hash::hash(&self.rest, state)
}
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for CastTarget {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"CastTarget", false as usize + 1 + 1 + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"prefix", &self.prefix)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"rest_offset", &self.rest_offset)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"rest", &self.rest)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};Serialize)]
147pub struct CastTarget {
148 pub prefix: Vec<Reg>,
150 pub rest_offset: Option<Size>,
153 pub rest: Uniform,
155}
156
157impl CastTarget {
158 pub fn size(&self) -> Size {
160 let prefix_size: usize = self.prefix.iter().map(|r| r.size.bits()).sum();
161 Size::from_bits(prefix_size + self.rest.total.bits())
162 }
163}
164
165#[derive(#[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for Uniform { }
#[automatically_derived]
impl ::core::clone::Clone for Uniform {
#[inline]
fn clone(&self) -> Uniform {
let _: ::core::clone::AssertParamIsClone<Reg>;
let _: ::core::clone::AssertParamIsClone<Size>;
let _: ::core::clone::AssertParamIsClone<bool>;
*self
}
}Clone, #[automatically_derived]
impl ::core::marker::Copy for Uniform { }Copy, #[automatically_derived]
impl ::core::fmt::Debug for Uniform {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field3_finish(f, "Uniform",
"unit", &self.unit, "total", &self.total, "is_consecutive",
&&self.is_consecutive)
}
}Debug, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for Uniform { }
#[automatically_derived]
impl ::core::cmp::PartialEq for Uniform {
#[inline]
fn eq(&self, other: &Uniform) -> bool {
self.is_consecutive == other.is_consecutive && self.unit == other.unit
&& self.total == other.total
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for Uniform {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<Reg>;
let _: ::core::cmp::AssertParamIsEq<Size>;
let _: ::core::cmp::AssertParamIsEq<bool>;
}
}Eq, #[automatically_derived]
impl ::core::hash::Hash for Uniform {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&self.unit, state);
::core::hash::Hash::hash(&self.total, state);
::core::hash::Hash::hash(&self.is_consecutive, state)
}
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for Uniform {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"Uniform", false as usize + 1 + 1 + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"unit", &self.unit)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"total", &self.total)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"is_consecutive", &self.is_consecutive)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};Serialize)]
167pub struct Uniform {
168 pub unit: Reg,
170 pub total: Size,
177 pub is_consecutive: bool,
180}
181
182impl Uniform {
183 pub fn reg_count(&self) -> usize {
185 if self.unit.size.bits() == 0 {
186 return 0;
187 }
188 (self.total.bits() + self.unit.size.bits() - 1) / self.unit.size.bits()
189 }
190}
191
192#[derive(#[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for Reg { }
#[automatically_derived]
impl ::core::clone::Clone for Reg {
#[inline]
fn clone(&self) -> Reg {
let _: ::core::clone::AssertParamIsClone<RegKind>;
let _: ::core::clone::AssertParamIsClone<Size>;
*self
}
}Clone, #[automatically_derived]
impl ::core::marker::Copy for Reg { }Copy, #[automatically_derived]
impl ::core::fmt::Debug for Reg {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f, "Reg", "kind",
&self.kind, "size", &&self.size)
}
}Debug, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for Reg { }
#[automatically_derived]
impl ::core::cmp::PartialEq for Reg {
#[inline]
fn eq(&self, other: &Reg) -> bool {
self.kind == other.kind && self.size == other.size
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for Reg {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<RegKind>;
let _: ::core::cmp::AssertParamIsEq<Size>;
}
}Eq, #[automatically_derived]
impl ::core::hash::Hash for Reg {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&self.kind, state);
::core::hash::Hash::hash(&self.size, state)
}
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for Reg {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer, "Reg",
false as usize + 1 + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"kind", &self.kind)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"size", &self.size)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};Serialize)]
194pub struct Reg {
195 pub kind: RegKind,
196 pub size: Size,
197}
198
199#[derive(#[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for RegKind { }
#[automatically_derived]
impl ::core::clone::Clone for RegKind {
#[inline]
fn clone(&self) -> RegKind { *self }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for RegKind { }Copy, #[automatically_derived]
impl ::core::fmt::Debug for RegKind {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::write_str(f,
match self {
RegKind::Integer => "Integer",
RegKind::Float => "Float",
RegKind::Vector => "Vector",
})
}
}Debug, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for RegKind { }
#[automatically_derived]
impl ::core::cmp::PartialEq for RegKind {
#[inline]
fn eq(&self, other: &RegKind) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for RegKind { }Eq, #[automatically_derived]
impl ::core::hash::Hash for RegKind {
#[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)
}
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for RegKind {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
match *self {
RegKind::Integer =>
_serde::Serializer::serialize_unit_variant(__serializer,
"RegKind", 0u32, "Integer"),
RegKind::Float =>
_serde::Serializer::serialize_unit_variant(__serializer,
"RegKind", 1u32, "Float"),
RegKind::Vector =>
_serde::Serializer::serialize_unit_variant(__serializer,
"RegKind", 2u32, "Vector"),
}
}
}
};Serialize)]
201pub enum RegKind {
202 Integer,
203 Float,
204 Vector,
205}
206
207#[derive(#[automatically_derived]
impl ::core::marker::Copy for TyAndLayout { }Copy, #[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for TyAndLayout { }
#[automatically_derived]
impl ::core::clone::Clone for TyAndLayout {
#[inline]
fn clone(&self) -> TyAndLayout {
let _: ::core::clone::AssertParamIsClone<Ty>;
let _: ::core::clone::AssertParamIsClone<Layout>;
*self
}
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for TyAndLayout {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f, "TyAndLayout",
"ty", &self.ty, "layout", &&self.layout)
}
}Debug, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for TyAndLayout { }
#[automatically_derived]
impl ::core::cmp::PartialEq for TyAndLayout {
#[inline]
fn eq(&self, other: &TyAndLayout) -> bool {
self.ty == other.ty && self.layout == other.layout
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for TyAndLayout {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<Ty>;
let _: ::core::cmp::AssertParamIsEq<Layout>;
}
}Eq, #[automatically_derived]
impl ::core::hash::Hash for TyAndLayout {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&self.ty, state);
::core::hash::Hash::hash(&self.layout, state)
}
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for TyAndLayout {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"TyAndLayout", false as usize + 1 + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"ty", &self.ty)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"layout", &self.layout)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};Serialize)]
209pub struct TyAndLayout {
210 pub ty: Ty,
211 pub layout: Layout,
212}
213
214#[derive(#[automatically_derived]
impl ::core::clone::Clone for LayoutShape {
#[inline]
fn clone(&self) -> LayoutShape {
LayoutShape {
fields: ::core::clone::Clone::clone(&self.fields),
variants: ::core::clone::Clone::clone(&self.variants),
value_repr: ::core::clone::Clone::clone(&self.value_repr),
abi_align: ::core::clone::Clone::clone(&self.abi_align),
size: ::core::clone::Clone::clone(&self.size),
}
}
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for LayoutShape {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field5_finish(f, "LayoutShape",
"fields", &self.fields, "variants", &self.variants, "value_repr",
&self.value_repr, "abi_align", &self.abi_align, "size",
&&self.size)
}
}Debug, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for LayoutShape { }
#[automatically_derived]
impl ::core::cmp::PartialEq for LayoutShape {
#[inline]
fn eq(&self, other: &LayoutShape) -> bool {
self.fields == other.fields && self.variants == other.variants &&
self.value_repr == other.value_repr &&
self.abi_align == other.abi_align && self.size == other.size
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for LayoutShape {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<FieldsShape>;
let _: ::core::cmp::AssertParamIsEq<VariantsShape>;
let _: ::core::cmp::AssertParamIsEq<ValueRepr>;
let _: ::core::cmp::AssertParamIsEq<Align>;
let _: ::core::cmp::AssertParamIsEq<Size>;
}
}Eq, #[automatically_derived]
impl ::core::hash::Hash for LayoutShape {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&self.fields, state);
::core::hash::Hash::hash(&self.variants, state);
::core::hash::Hash::hash(&self.value_repr, state);
::core::hash::Hash::hash(&self.abi_align, state);
::core::hash::Hash::hash(&self.size, state)
}
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for LayoutShape {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"LayoutShape", false as usize + 1 + 1 + 1 + 1 + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"fields", &self.fields)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"variants", &self.variants)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"value_repr", &self.value_repr)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"abi_align", &self.abi_align)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"size", &self.size)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};Serialize)]
216pub struct LayoutShape {
217 pub fields: FieldsShape,
219
220 pub variants: VariantsShape,
227
228 pub value_repr: ValueRepr,
230
231 pub abi_align: Align,
233
234 pub size: Size,
236}
237
238impl LayoutShape {
239 #[inline]
241 pub fn is_unsized(&self) -> bool {
242 self.value_repr.is_unsized()
243 }
244
245 #[inline]
246 pub fn is_sized(&self) -> bool {
247 !self.value_repr.is_unsized()
248 }
249
250 pub fn is_1zst(&self) -> bool {
252 self.is_sized() && self.size.bits() == 0 && self.abi_align == 1
253 }
254}
255
256#[derive(#[automatically_derived]
impl ::core::marker::Copy for Layout { }Copy, #[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for Layout { }
#[automatically_derived]
impl ::core::clone::Clone for Layout {
#[inline]
fn clone(&self) -> Layout {
let _: ::core::clone::AssertParamIsClone<usize>;
let _: ::core::clone::AssertParamIsClone<ThreadLocalIndex>;
*self
}
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for Layout {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_tuple_field2_finish(f, "Layout",
&self.0, &&self.1)
}
}Debug, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for Layout { }
#[automatically_derived]
impl ::core::cmp::PartialEq for Layout {
#[inline]
fn eq(&self, other: &Layout) -> bool {
self.0 == other.0 && self.1 == other.1
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for Layout {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<usize>;
let _: ::core::cmp::AssertParamIsEq<ThreadLocalIndex>;
}
}Eq, #[automatically_derived]
impl ::core::hash::Hash for Layout {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&self.0, state);
::core::hash::Hash::hash(&self.1, state)
}
}Hash)]
257pub struct Layout(usize, ThreadLocalIndex);
258impl crate::IndexedVal for Layout {
fn to_val(index: usize) -> Self { Layout(index, crate::ThreadLocalIndex) }
fn to_index(&self) -> usize { self.0 }
}
impl ::serde::Serialize for Layout {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where
S: ::serde::Serializer {
let n: usize = self.0;
::serde::Serialize::serialize(&n, serializer)
}
}index_impl!(Layout);
259
260impl Layout {
261 pub fn shape(self) -> LayoutShape {
262 with(|cx| cx.layout_shape(self))
263 }
264}
265
266#[derive(#[automatically_derived]
impl ::core::clone::Clone for FieldsShape {
#[inline]
fn clone(&self) -> FieldsShape {
match self {
FieldsShape::Primitive => FieldsShape::Primitive,
FieldsShape::Union(__self_0) =>
FieldsShape::Union(::core::clone::Clone::clone(__self_0)),
FieldsShape::Array { stride: __self_0, count: __self_1 } =>
FieldsShape::Array {
stride: ::core::clone::Clone::clone(__self_0),
count: ::core::clone::Clone::clone(__self_1),
},
FieldsShape::Arbitrary { offsets: __self_0 } =>
FieldsShape::Arbitrary {
offsets: ::core::clone::Clone::clone(__self_0),
},
}
}
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for FieldsShape {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
FieldsShape::Primitive =>
::core::fmt::Formatter::write_str(f, "Primitive"),
FieldsShape::Union(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Union",
&__self_0),
FieldsShape::Array { stride: __self_0, count: __self_1 } =>
::core::fmt::Formatter::debug_struct_field2_finish(f, "Array",
"stride", __self_0, "count", &__self_1),
FieldsShape::Arbitrary { offsets: __self_0 } =>
::core::fmt::Formatter::debug_struct_field1_finish(f,
"Arbitrary", "offsets", &__self_0),
}
}
}Debug, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for FieldsShape { }
#[automatically_derived]
impl ::core::cmp::PartialEq for FieldsShape {
#[inline]
fn eq(&self, other: &FieldsShape) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr &&
match (self, other) {
(FieldsShape::Union(__self_0), FieldsShape::Union(__arg1_0))
=> __self_0 == __arg1_0,
(FieldsShape::Array { stride: __self_0, count: __self_1 },
FieldsShape::Array { stride: __arg1_0, count: __arg1_1 }) =>
__self_1 == __arg1_1 && __self_0 == __arg1_0,
(FieldsShape::Arbitrary { offsets: __self_0 },
FieldsShape::Arbitrary { offsets: __arg1_0 }) =>
__self_0 == __arg1_0,
_ => true,
}
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for FieldsShape {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<NonZero<usize>>;
let _: ::core::cmp::AssertParamIsEq<Size>;
let _: ::core::cmp::AssertParamIsEq<u64>;
let _: ::core::cmp::AssertParamIsEq<Vec<Size>>;
}
}Eq, #[automatically_derived]
impl ::core::hash::Hash for FieldsShape {
#[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);
match self {
FieldsShape::Union(__self_0) =>
::core::hash::Hash::hash(__self_0, state),
FieldsShape::Array { stride: __self_0, count: __self_1 } => {
::core::hash::Hash::hash(__self_0, state);
::core::hash::Hash::hash(__self_1, state)
}
FieldsShape::Arbitrary { offsets: __self_0 } =>
::core::hash::Hash::hash(__self_0, state),
_ => {}
}
}
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for FieldsShape {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
match *self {
FieldsShape::Primitive =>
_serde::Serializer::serialize_unit_variant(__serializer,
"FieldsShape", 0u32, "Primitive"),
FieldsShape::Union(ref __field0) =>
_serde::Serializer::serialize_newtype_variant(__serializer,
"FieldsShape", 1u32, "Union", __field0),
FieldsShape::Array { ref stride, ref count } => {
let mut __serde_state =
_serde::Serializer::serialize_struct_variant(__serializer,
"FieldsShape", 2u32, "Array", 0 + 1 + 1)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"stride", stride)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"count", count)?;
_serde::ser::SerializeStructVariant::end(__serde_state)
}
FieldsShape::Arbitrary { ref offsets } => {
let mut __serde_state =
_serde::Serializer::serialize_struct_variant(__serializer,
"FieldsShape", 3u32, "Arbitrary", 0 + 1)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"offsets", offsets)?;
_serde::ser::SerializeStructVariant::end(__serde_state)
}
}
}
}
};Serialize)]
268pub enum FieldsShape {
269 Primitive,
271
272 Union(NonZero<usize>),
274
275 Array { stride: Size, count: u64 },
277
278 Arbitrary {
286 offsets: Vec<Size>,
291 },
292}
293
294impl FieldsShape {
295 pub fn fields_by_offset_order(&self) -> Vec<FieldIdx> {
296 match self {
297 FieldsShape::Primitive => ::alloc::vec::Vec::new()vec![],
298 FieldsShape::Union(_) | FieldsShape::Array { .. } => (0..self.count()).collect(),
299 FieldsShape::Arbitrary { offsets, .. } => {
300 let mut indices = (0..offsets.len()).collect::<Vec<_>>();
301 indices.sort_by_key(|idx| offsets[*idx]);
302 indices
303 }
304 }
305 }
306
307 pub fn count(&self) -> usize {
308 match self {
309 FieldsShape::Primitive => 0,
310 FieldsShape::Union(count) => count.get(),
311 FieldsShape::Array { count, .. } => *count as usize,
312 FieldsShape::Arbitrary { offsets, .. } => offsets.len(),
313 }
314 }
315}
316
317#[derive(#[automatically_derived]
impl ::core::clone::Clone for VariantsShape {
#[inline]
fn clone(&self) -> VariantsShape {
match self {
VariantsShape::Empty => VariantsShape::Empty,
VariantsShape::Single { index: __self_0 } =>
VariantsShape::Single {
index: ::core::clone::Clone::clone(__self_0),
},
VariantsShape::Multiple {
tag: __self_0,
tag_encoding: __self_1,
tag_field: __self_2,
variants: __self_3 } =>
VariantsShape::Multiple {
tag: ::core::clone::Clone::clone(__self_0),
tag_encoding: ::core::clone::Clone::clone(__self_1),
tag_field: ::core::clone::Clone::clone(__self_2),
variants: ::core::clone::Clone::clone(__self_3),
},
}
}
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for VariantsShape {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
VariantsShape::Empty =>
::core::fmt::Formatter::write_str(f, "Empty"),
VariantsShape::Single { index: __self_0 } =>
::core::fmt::Formatter::debug_struct_field1_finish(f,
"Single", "index", &__self_0),
VariantsShape::Multiple {
tag: __self_0,
tag_encoding: __self_1,
tag_field: __self_2,
variants: __self_3 } =>
::core::fmt::Formatter::debug_struct_field4_finish(f,
"Multiple", "tag", __self_0, "tag_encoding", __self_1,
"tag_field", __self_2, "variants", &__self_3),
}
}
}Debug, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for VariantsShape { }
#[automatically_derived]
impl ::core::cmp::PartialEq for VariantsShape {
#[inline]
fn eq(&self, other: &VariantsShape) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr &&
match (self, other) {
(VariantsShape::Single { index: __self_0 },
VariantsShape::Single { index: __arg1_0 }) =>
__self_0 == __arg1_0,
(VariantsShape::Multiple {
tag: __self_0,
tag_encoding: __self_1,
tag_field: __self_2,
variants: __self_3 }, VariantsShape::Multiple {
tag: __arg1_0,
tag_encoding: __arg1_1,
tag_field: __arg1_2,
variants: __arg1_3 }) =>
__self_0 == __arg1_0 && __self_1 == __arg1_1 &&
__self_2 == __arg1_2 && __self_3 == __arg1_3,
_ => true,
}
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for VariantsShape {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<VariantIdx>;
let _: ::core::cmp::AssertParamIsEq<Scalar>;
let _: ::core::cmp::AssertParamIsEq<TagEncoding>;
let _: ::core::cmp::AssertParamIsEq<usize>;
let _: ::core::cmp::AssertParamIsEq<Vec<VariantFields>>;
}
}Eq, #[automatically_derived]
impl ::core::hash::Hash for VariantsShape {
#[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);
match self {
VariantsShape::Single { index: __self_0 } =>
::core::hash::Hash::hash(__self_0, state),
VariantsShape::Multiple {
tag: __self_0,
tag_encoding: __self_1,
tag_field: __self_2,
variants: __self_3 } => {
::core::hash::Hash::hash(__self_0, state);
::core::hash::Hash::hash(__self_1, state);
::core::hash::Hash::hash(__self_2, state);
::core::hash::Hash::hash(__self_3, state)
}
_ => {}
}
}
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for VariantsShape {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
match *self {
VariantsShape::Empty =>
_serde::Serializer::serialize_unit_variant(__serializer,
"VariantsShape", 0u32, "Empty"),
VariantsShape::Single { ref index } => {
let mut __serde_state =
_serde::Serializer::serialize_struct_variant(__serializer,
"VariantsShape", 1u32, "Single", 0 + 1)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"index", index)?;
_serde::ser::SerializeStructVariant::end(__serde_state)
}
VariantsShape::Multiple {
ref tag, ref tag_encoding, ref tag_field, ref variants } =>
{
let mut __serde_state =
_serde::Serializer::serialize_struct_variant(__serializer,
"VariantsShape", 2u32, "Multiple", 0 + 1 + 1 + 1 + 1)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"tag", tag)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"tag_encoding", tag_encoding)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"tag_field", tag_field)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"variants", variants)?;
_serde::ser::SerializeStructVariant::end(__serde_state)
}
}
}
}
};Serialize)]
318pub enum VariantsShape {
319 Empty,
321
322 Single { index: VariantIdx },
324
325 Multiple {
332 tag: Scalar,
333 tag_encoding: TagEncoding,
334 tag_field: usize,
335 variants: Vec<VariantFields>,
336 },
337}
338
339#[derive(#[automatically_derived]
impl ::core::clone::Clone for VariantFields {
#[inline]
fn clone(&self) -> VariantFields {
VariantFields { offsets: ::core::clone::Clone::clone(&self.offsets) }
}
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for VariantFields {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field1_finish(f, "VariantFields",
"offsets", &&self.offsets)
}
}Debug, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for VariantFields { }
#[automatically_derived]
impl ::core::cmp::PartialEq for VariantFields {
#[inline]
fn eq(&self, other: &VariantFields) -> bool {
self.offsets == other.offsets
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for VariantFields {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<Vec<Size>>;
}
}Eq, #[automatically_derived]
impl ::core::hash::Hash for VariantFields {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&self.offsets, state)
}
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for VariantFields {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"VariantFields", false as usize + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"offsets", &self.offsets)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};Serialize)]
340pub struct VariantFields {
341 pub offsets: Vec<Size>,
346}
347
348impl VariantFields {
349 pub fn fields_by_offset_order(&self) -> Vec<FieldIdx> {
350 let mut indices = (0..self.offsets.len()).collect::<Vec<_>>();
351 indices.sort_by_key(|idx| self.offsets[*idx]);
352 indices
353 }
354}
355
356#[derive(#[automatically_derived]
impl ::core::clone::Clone for TagEncoding {
#[inline]
fn clone(&self) -> TagEncoding {
match self {
TagEncoding::Direct => TagEncoding::Direct,
TagEncoding::Niche {
untagged_variant: __self_0,
niche_variants: __self_1,
niche_start: __self_2 } =>
TagEncoding::Niche {
untagged_variant: ::core::clone::Clone::clone(__self_0),
niche_variants: ::core::clone::Clone::clone(__self_1),
niche_start: ::core::clone::Clone::clone(__self_2),
},
}
}
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for TagEncoding {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
TagEncoding::Direct =>
::core::fmt::Formatter::write_str(f, "Direct"),
TagEncoding::Niche {
untagged_variant: __self_0,
niche_variants: __self_1,
niche_start: __self_2 } =>
::core::fmt::Formatter::debug_struct_field3_finish(f, "Niche",
"untagged_variant", __self_0, "niche_variants", __self_1,
"niche_start", &__self_2),
}
}
}Debug, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for TagEncoding { }
#[automatically_derived]
impl ::core::cmp::PartialEq for TagEncoding {
#[inline]
fn eq(&self, other: &TagEncoding) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr &&
match (self, other) {
(TagEncoding::Niche {
untagged_variant: __self_0,
niche_variants: __self_1,
niche_start: __self_2 }, TagEncoding::Niche {
untagged_variant: __arg1_0,
niche_variants: __arg1_1,
niche_start: __arg1_2 }) =>
__self_2 == __arg1_2 && __self_0 == __arg1_0 &&
__self_1 == __arg1_1,
_ => true,
}
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for TagEncoding {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<VariantIdx>;
let _: ::core::cmp::AssertParamIsEq<RangeInclusive<VariantIdx>>;
let _: ::core::cmp::AssertParamIsEq<u128>;
}
}Eq, #[automatically_derived]
impl ::core::hash::Hash for TagEncoding {
#[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);
match self {
TagEncoding::Niche {
untagged_variant: __self_0,
niche_variants: __self_1,
niche_start: __self_2 } => {
::core::hash::Hash::hash(__self_0, state);
::core::hash::Hash::hash(__self_1, state);
::core::hash::Hash::hash(__self_2, state)
}
_ => {}
}
}
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for TagEncoding {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
match *self {
TagEncoding::Direct =>
_serde::Serializer::serialize_unit_variant(__serializer,
"TagEncoding", 0u32, "Direct"),
TagEncoding::Niche {
ref untagged_variant, ref niche_variants, ref niche_start }
=> {
let mut __serde_state =
_serde::Serializer::serialize_struct_variant(__serializer,
"TagEncoding", 1u32, "Niche", 0 + 1 + 1 + 1)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"untagged_variant", untagged_variant)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"niche_variants", niche_variants)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"niche_start", niche_start)?;
_serde::ser::SerializeStructVariant::end(__serde_state)
}
}
}
}
};Serialize)]
357pub enum TagEncoding {
358 Direct,
361
362 Niche {
373 untagged_variant: VariantIdx,
374 niche_variants: RangeInclusive<VariantIdx>,
375 niche_start: u128,
376 },
377}
378
379#[derive(#[automatically_derived]
impl ::core::clone::Clone for NumScalableVectors {
#[inline]
fn clone(&self) -> NumScalableVectors {
NumScalableVectors(::core::clone::Clone::clone(&self.0))
}
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for NumScalableVectors {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"NumScalableVectors", &&self.0)
}
}Debug, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for NumScalableVectors { }
#[automatically_derived]
impl ::core::cmp::PartialEq for NumScalableVectors {
#[inline]
fn eq(&self, other: &NumScalableVectors) -> bool { self.0 == other.0 }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for NumScalableVectors {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<u8>;
}
}Eq, #[automatically_derived]
impl ::core::hash::Hash for NumScalableVectors {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&self.0, state)
}
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for NumScalableVectors {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
_serde::Serializer::serialize_newtype_struct(__serializer,
"NumScalableVectors", &self.0)
}
}
};Serialize)]
381pub struct NumScalableVectors(pub(crate) u8);
382
383#[derive(#[automatically_derived]
impl ::core::clone::Clone for ValueRepr {
#[inline]
fn clone(&self) -> ValueRepr {
match self {
ValueRepr::Scalar(__self_0) =>
ValueRepr::Scalar(::core::clone::Clone::clone(__self_0)),
ValueRepr::ScalarPair {
a: __self_0, b: __self_1, b_offset: __self_2 } =>
ValueRepr::ScalarPair {
a: ::core::clone::Clone::clone(__self_0),
b: ::core::clone::Clone::clone(__self_1),
b_offset: ::core::clone::Clone::clone(__self_2),
},
ValueRepr::Vector { element: __self_0, count: __self_1 } =>
ValueRepr::Vector {
element: ::core::clone::Clone::clone(__self_0),
count: ::core::clone::Clone::clone(__self_1),
},
ValueRepr::ScalableVector {
element: __self_0,
count: __self_1,
number_of_vectors: __self_2 } =>
ValueRepr::ScalableVector {
element: ::core::clone::Clone::clone(__self_0),
count: ::core::clone::Clone::clone(__self_1),
number_of_vectors: ::core::clone::Clone::clone(__self_2),
},
ValueRepr::Aggregate { sized: __self_0 } =>
ValueRepr::Aggregate {
sized: ::core::clone::Clone::clone(__self_0),
},
}
}
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for ValueRepr {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
ValueRepr::Scalar(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Scalar",
&__self_0),
ValueRepr::ScalarPair {
a: __self_0, b: __self_1, b_offset: __self_2 } =>
::core::fmt::Formatter::debug_struct_field3_finish(f,
"ScalarPair", "a", __self_0, "b", __self_1, "b_offset",
&__self_2),
ValueRepr::Vector { element: __self_0, count: __self_1 } =>
::core::fmt::Formatter::debug_struct_field2_finish(f,
"Vector", "element", __self_0, "count", &__self_1),
ValueRepr::ScalableVector {
element: __self_0,
count: __self_1,
number_of_vectors: __self_2 } =>
::core::fmt::Formatter::debug_struct_field3_finish(f,
"ScalableVector", "element", __self_0, "count", __self_1,
"number_of_vectors", &__self_2),
ValueRepr::Aggregate { sized: __self_0 } =>
::core::fmt::Formatter::debug_struct_field1_finish(f,
"Aggregate", "sized", &__self_0),
}
}
}Debug, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for ValueRepr { }
#[automatically_derived]
impl ::core::cmp::PartialEq for ValueRepr {
#[inline]
fn eq(&self, other: &ValueRepr) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr &&
match (self, other) {
(ValueRepr::Scalar(__self_0), ValueRepr::Scalar(__arg1_0)) =>
__self_0 == __arg1_0,
(ValueRepr::ScalarPair {
a: __self_0, b: __self_1, b_offset: __self_2 },
ValueRepr::ScalarPair {
a: __arg1_0, b: __arg1_1, b_offset: __arg1_2 }) =>
__self_0 == __arg1_0 && __self_1 == __arg1_1 &&
__self_2 == __arg1_2,
(ValueRepr::Vector { element: __self_0, count: __self_1 },
ValueRepr::Vector { element: __arg1_0, count: __arg1_1 }) =>
__self_1 == __arg1_1 && __self_0 == __arg1_0,
(ValueRepr::ScalableVector {
element: __self_0,
count: __self_1,
number_of_vectors: __self_2 }, ValueRepr::ScalableVector {
element: __arg1_0,
count: __arg1_1,
number_of_vectors: __arg1_2 }) =>
__self_1 == __arg1_1 && __self_0 == __arg1_0 &&
__self_2 == __arg1_2,
(ValueRepr::Aggregate { sized: __self_0 },
ValueRepr::Aggregate { sized: __arg1_0 }) =>
__self_0 == __arg1_0,
_ => unsafe { ::core::intrinsics::unreachable() }
}
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for ValueRepr {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<Scalar>;
let _: ::core::cmp::AssertParamIsEq<Size>;
let _: ::core::cmp::AssertParamIsEq<u64>;
let _: ::core::cmp::AssertParamIsEq<NumScalableVectors>;
let _: ::core::cmp::AssertParamIsEq<bool>;
}
}Eq, #[automatically_derived]
impl ::core::hash::Hash for ValueRepr {
#[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);
match self {
ValueRepr::Scalar(__self_0) =>
::core::hash::Hash::hash(__self_0, state),
ValueRepr::ScalarPair {
a: __self_0, b: __self_1, b_offset: __self_2 } => {
::core::hash::Hash::hash(__self_0, state);
::core::hash::Hash::hash(__self_1, state);
::core::hash::Hash::hash(__self_2, state)
}
ValueRepr::Vector { element: __self_0, count: __self_1 } => {
::core::hash::Hash::hash(__self_0, state);
::core::hash::Hash::hash(__self_1, state)
}
ValueRepr::ScalableVector {
element: __self_0,
count: __self_1,
number_of_vectors: __self_2 } => {
::core::hash::Hash::hash(__self_0, state);
::core::hash::Hash::hash(__self_1, state);
::core::hash::Hash::hash(__self_2, state)
}
ValueRepr::Aggregate { sized: __self_0 } =>
::core::hash::Hash::hash(__self_0, state),
}
}
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for ValueRepr {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
match *self {
ValueRepr::Scalar(ref __field0) =>
_serde::Serializer::serialize_newtype_variant(__serializer,
"ValueRepr", 0u32, "Scalar", __field0),
ValueRepr::ScalarPair { ref a, ref b, ref b_offset } => {
let mut __serde_state =
_serde::Serializer::serialize_struct_variant(__serializer,
"ValueRepr", 1u32, "ScalarPair", 0 + 1 + 1 + 1)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"a", a)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"b", b)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"b_offset", b_offset)?;
_serde::ser::SerializeStructVariant::end(__serde_state)
}
ValueRepr::Vector { ref element, ref count } => {
let mut __serde_state =
_serde::Serializer::serialize_struct_variant(__serializer,
"ValueRepr", 2u32, "Vector", 0 + 1 + 1)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"element", element)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"count", count)?;
_serde::ser::SerializeStructVariant::end(__serde_state)
}
ValueRepr::ScalableVector {
ref element, ref count, ref number_of_vectors } => {
let mut __serde_state =
_serde::Serializer::serialize_struct_variant(__serializer,
"ValueRepr", 3u32, "ScalableVector", 0 + 1 + 1 + 1)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"element", element)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"count", count)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"number_of_vectors", number_of_vectors)?;
_serde::ser::SerializeStructVariant::end(__serde_state)
}
ValueRepr::Aggregate { ref sized } => {
let mut __serde_state =
_serde::Serializer::serialize_struct_variant(__serializer,
"ValueRepr", 4u32, "Aggregate", 0 + 1)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"sized", sized)?;
_serde::ser::SerializeStructVariant::end(__serde_state)
}
}
}
}
};Serialize)]
388pub enum ValueRepr {
389 Scalar(Scalar),
390 ScalarPair {
391 a: Scalar,
392 b: Scalar,
393 b_offset: Size,
394 },
395 Vector {
397 element: Scalar,
398 count: u64,
399 },
400 ScalableVector {
402 element: Scalar,
403 count: u64,
404 number_of_vectors: NumScalableVectors,
405 },
406 Aggregate {
408 sized: bool,
410 },
411}
412
413impl ValueRepr {
414 pub fn is_unsized(&self) -> bool {
416 match *self {
417 ValueRepr::Scalar(_)
418 | ValueRepr::ScalarPair { .. }
419 | ValueRepr::Vector { .. }
420 | ValueRepr::ScalableVector { .. } => false,
426 ValueRepr::Aggregate { sized } => !sized,
427 }
428 }
429}
430
431#[derive(#[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for Scalar { }
#[automatically_derived]
impl ::core::clone::Clone for Scalar {
#[inline]
fn clone(&self) -> Scalar {
let _: ::core::clone::AssertParamIsClone<Primitive>;
let _: ::core::clone::AssertParamIsClone<WrappingRange>;
*self
}
}Clone, #[automatically_derived]
impl ::core::marker::Copy for Scalar { }Copy, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for Scalar { }
#[automatically_derived]
impl ::core::cmp::PartialEq for Scalar {
#[inline]
fn eq(&self, other: &Scalar) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr &&
match (self, other) {
(Scalar::Initialized { value: __self_0, valid_range: __self_1
}, Scalar::Initialized {
value: __arg1_0, valid_range: __arg1_1 }) =>
__self_0 == __arg1_0 && __self_1 == __arg1_1,
(Scalar::Union { value: __self_0 }, Scalar::Union {
value: __arg1_0 }) => __self_0 == __arg1_0,
_ => unsafe { ::core::intrinsics::unreachable() }
}
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for Scalar {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<Primitive>;
let _: ::core::cmp::AssertParamIsEq<WrappingRange>;
}
}Eq, #[automatically_derived]
impl ::core::hash::Hash for Scalar {
#[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);
match self {
Scalar::Initialized { value: __self_0, valid_range: __self_1 } =>
{
::core::hash::Hash::hash(__self_0, state);
::core::hash::Hash::hash(__self_1, state)
}
Scalar::Union { value: __self_0 } =>
::core::hash::Hash::hash(__self_0, state),
}
}
}Hash, #[automatically_derived]
impl ::core::fmt::Debug for Scalar {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
Scalar::Initialized { value: __self_0, valid_range: __self_1 } =>
::core::fmt::Formatter::debug_struct_field2_finish(f,
"Initialized", "value", __self_0, "valid_range", &__self_1),
Scalar::Union { value: __self_0 } =>
::core::fmt::Formatter::debug_struct_field1_finish(f, "Union",
"value", &__self_0),
}
}
}Debug, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for Scalar {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
match *self {
Scalar::Initialized { ref value, ref valid_range } => {
let mut __serde_state =
_serde::Serializer::serialize_struct_variant(__serializer,
"Scalar", 0u32, "Initialized", 0 + 1 + 1)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"value", value)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"valid_range", valid_range)?;
_serde::ser::SerializeStructVariant::end(__serde_state)
}
Scalar::Union { ref value } => {
let mut __serde_state =
_serde::Serializer::serialize_struct_variant(__serializer,
"Scalar", 1u32, "Union", 0 + 1)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"value", value)?;
_serde::ser::SerializeStructVariant::end(__serde_state)
}
}
}
}
};Serialize)]
433pub enum Scalar {
434 Initialized {
435 value: Primitive,
437 valid_range: WrappingRange,
440 },
441 Union {
442 value: Primitive,
446 },
447}
448
449impl Scalar {
450 pub fn has_niche(&self, target: &MachineInfo) -> bool {
451 match self {
452 Scalar::Initialized { value, valid_range } => {
453 !valid_range.is_full(value.size(target)).unwrap()
454 }
455 Scalar::Union { .. } => false,
456 }
457 }
458}
459
460#[derive(#[automatically_derived]
impl ::core::marker::Copy for Primitive { }Copy, #[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for Primitive { }
#[automatically_derived]
impl ::core::clone::Clone for Primitive {
#[inline]
fn clone(&self) -> Primitive {
let _: ::core::clone::AssertParamIsClone<IntegerLength>;
let _: ::core::clone::AssertParamIsClone<bool>;
let _: ::core::clone::AssertParamIsClone<FloatLength>;
let _: ::core::clone::AssertParamIsClone<AddressSpace>;
*self
}
}Clone, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for Primitive { }
#[automatically_derived]
impl ::core::cmp::PartialEq for Primitive {
#[inline]
fn eq(&self, other: &Primitive) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr &&
match (self, other) {
(Primitive::Int { length: __self_0, signed: __self_1 },
Primitive::Int { length: __arg1_0, signed: __arg1_1 }) =>
__self_1 == __arg1_1 && __self_0 == __arg1_0,
(Primitive::Float { length: __self_0 }, Primitive::Float {
length: __arg1_0 }) => __self_0 == __arg1_0,
(Primitive::Pointer(__self_0), Primitive::Pointer(__arg1_0))
=> __self_0 == __arg1_0,
_ => unsafe { ::core::intrinsics::unreachable() }
}
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for Primitive {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<IntegerLength>;
let _: ::core::cmp::AssertParamIsEq<bool>;
let _: ::core::cmp::AssertParamIsEq<FloatLength>;
let _: ::core::cmp::AssertParamIsEq<AddressSpace>;
}
}Eq, #[automatically_derived]
impl ::core::hash::Hash for Primitive {
#[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);
match self {
Primitive::Int { length: __self_0, signed: __self_1 } => {
::core::hash::Hash::hash(__self_0, state);
::core::hash::Hash::hash(__self_1, state)
}
Primitive::Float { length: __self_0 } =>
::core::hash::Hash::hash(__self_0, state),
Primitive::Pointer(__self_0) =>
::core::hash::Hash::hash(__self_0, state),
}
}
}Hash, #[automatically_derived]
impl ::core::fmt::Debug for Primitive {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
Primitive::Int { length: __self_0, signed: __self_1 } =>
::core::fmt::Formatter::debug_struct_field2_finish(f, "Int",
"length", __self_0, "signed", &__self_1),
Primitive::Float { length: __self_0 } =>
::core::fmt::Formatter::debug_struct_field1_finish(f, "Float",
"length", &__self_0),
Primitive::Pointer(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"Pointer", &__self_0),
}
}
}Debug, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for Primitive {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
match *self {
Primitive::Int { ref length, ref signed } => {
let mut __serde_state =
_serde::Serializer::serialize_struct_variant(__serializer,
"Primitive", 0u32, "Int", 0 + 1 + 1)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"length", length)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"signed", signed)?;
_serde::ser::SerializeStructVariant::end(__serde_state)
}
Primitive::Float { ref length } => {
let mut __serde_state =
_serde::Serializer::serialize_struct_variant(__serializer,
"Primitive", 1u32, "Float", 0 + 1)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"length", length)?;
_serde::ser::SerializeStructVariant::end(__serde_state)
}
Primitive::Pointer(ref __field0) =>
_serde::Serializer::serialize_newtype_variant(__serializer,
"Primitive", 2u32, "Pointer", __field0),
}
}
}
};Serialize)]
462pub enum Primitive {
463 Int { length: IntegerLength, signed: bool },
469 Float { length: FloatLength },
471 Pointer(AddressSpace),
473}
474
475impl Primitive {
476 pub fn size(self, target: &MachineInfo) -> Size {
477 match self {
478 Primitive::Int { length, .. } => Size::from_bits(length.bits()),
479 Primitive::Float { length } => Size::from_bits(length.bits()),
480 Primitive::Pointer(_) => target.pointer_width,
481 }
482 }
483}
484
485#[derive(#[automatically_derived]
impl ::core::marker::Copy for IntegerLength { }Copy, #[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for IntegerLength { }
#[automatically_derived]
impl ::core::clone::Clone for IntegerLength {
#[inline]
fn clone(&self) -> IntegerLength { *self }
}Clone, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for IntegerLength { }
#[automatically_derived]
impl ::core::cmp::PartialEq for IntegerLength {
#[inline]
fn eq(&self, other: &IntegerLength) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for IntegerLength { }Eq, #[automatically_derived]
impl ::core::cmp::PartialOrd for IntegerLength {
#[inline]
fn partial_cmp(&self, other: &IntegerLength)
-> ::core::option::Option<::core::cmp::Ordering> {
::core::option::Option::Some(::core::cmp::Ord::cmp(self, other))
}
}PartialOrd, #[automatically_derived]
impl ::core::cmp::Ord for IntegerLength {
#[inline]
fn cmp(&self, other: &IntegerLength) -> ::core::cmp::Ordering {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
::core::cmp::Ord::cmp(&__self_discr, &__arg1_discr)
}
}Ord, #[automatically_derived]
impl ::core::hash::Hash for IntegerLength {
#[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)
}
}Hash, #[automatically_derived]
impl ::core::fmt::Debug for IntegerLength {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::write_str(f,
match self {
IntegerLength::I8 => "I8",
IntegerLength::I16 => "I16",
IntegerLength::I32 => "I32",
IntegerLength::I64 => "I64",
IntegerLength::I128 => "I128",
})
}
}Debug, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for IntegerLength {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
match *self {
IntegerLength::I8 =>
_serde::Serializer::serialize_unit_variant(__serializer,
"IntegerLength", 0u32, "I8"),
IntegerLength::I16 =>
_serde::Serializer::serialize_unit_variant(__serializer,
"IntegerLength", 1u32, "I16"),
IntegerLength::I32 =>
_serde::Serializer::serialize_unit_variant(__serializer,
"IntegerLength", 2u32, "I32"),
IntegerLength::I64 =>
_serde::Serializer::serialize_unit_variant(__serializer,
"IntegerLength", 3u32, "I64"),
IntegerLength::I128 =>
_serde::Serializer::serialize_unit_variant(__serializer,
"IntegerLength", 4u32, "I128"),
}
}
}
};Serialize)]
487pub enum IntegerLength {
488 I8,
489 I16,
490 I32,
491 I64,
492 I128,
493}
494
495#[derive(#[automatically_derived]
impl ::core::marker::Copy for FloatLength { }Copy, #[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for FloatLength { }
#[automatically_derived]
impl ::core::clone::Clone for FloatLength {
#[inline]
fn clone(&self) -> FloatLength { *self }
}Clone, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for FloatLength { }
#[automatically_derived]
impl ::core::cmp::PartialEq for FloatLength {
#[inline]
fn eq(&self, other: &FloatLength) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for FloatLength { }Eq, #[automatically_derived]
impl ::core::cmp::PartialOrd for FloatLength {
#[inline]
fn partial_cmp(&self, other: &FloatLength)
-> ::core::option::Option<::core::cmp::Ordering> {
::core::option::Option::Some(::core::cmp::Ord::cmp(self, other))
}
}PartialOrd, #[automatically_derived]
impl ::core::cmp::Ord for FloatLength {
#[inline]
fn cmp(&self, other: &FloatLength) -> ::core::cmp::Ordering {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
::core::cmp::Ord::cmp(&__self_discr, &__arg1_discr)
}
}Ord, #[automatically_derived]
impl ::core::hash::Hash for FloatLength {
#[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)
}
}Hash, #[automatically_derived]
impl ::core::fmt::Debug for FloatLength {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::write_str(f,
match self {
FloatLength::F16 => "F16",
FloatLength::F32 => "F32",
FloatLength::F64 => "F64",
FloatLength::F128 => "F128",
})
}
}Debug, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for FloatLength {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
match *self {
FloatLength::F16 =>
_serde::Serializer::serialize_unit_variant(__serializer,
"FloatLength", 0u32, "F16"),
FloatLength::F32 =>
_serde::Serializer::serialize_unit_variant(__serializer,
"FloatLength", 1u32, "F32"),
FloatLength::F64 =>
_serde::Serializer::serialize_unit_variant(__serializer,
"FloatLength", 2u32, "F64"),
FloatLength::F128 =>
_serde::Serializer::serialize_unit_variant(__serializer,
"FloatLength", 3u32, "F128"),
}
}
}
};Serialize)]
497pub enum FloatLength {
498 F16,
499 F32,
500 F64,
501 F128,
502}
503
504impl IntegerLength {
505 pub fn bits(self) -> usize {
506 match self {
507 IntegerLength::I8 => 8,
508 IntegerLength::I16 => 16,
509 IntegerLength::I32 => 32,
510 IntegerLength::I64 => 64,
511 IntegerLength::I128 => 128,
512 }
513 }
514}
515
516impl FloatLength {
517 pub fn bits(self) -> usize {
518 match self {
519 FloatLength::F16 => 16,
520 FloatLength::F32 => 32,
521 FloatLength::F64 => 64,
522 FloatLength::F128 => 128,
523 }
524 }
525}
526
527#[derive(#[automatically_derived]
impl ::core::marker::Copy for AddressSpace { }Copy, #[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for AddressSpace { }
#[automatically_derived]
impl ::core::clone::Clone for AddressSpace {
#[inline]
fn clone(&self) -> AddressSpace {
let _: ::core::clone::AssertParamIsClone<u32>;
*self
}
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for AddressSpace {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_tuple_field1_finish(f, "AddressSpace",
&&self.0)
}
}Debug, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for AddressSpace { }
#[automatically_derived]
impl ::core::cmp::PartialEq for AddressSpace {
#[inline]
fn eq(&self, other: &AddressSpace) -> bool { self.0 == other.0 }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for AddressSpace {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<u32>;
}
}Eq, #[automatically_derived]
impl ::core::cmp::PartialOrd for AddressSpace {
#[inline]
fn partial_cmp(&self, other: &AddressSpace)
-> ::core::option::Option<::core::cmp::Ordering> {
::core::option::Option::Some(::core::cmp::Ord::cmp(self, other))
}
}PartialOrd, #[automatically_derived]
impl ::core::cmp::Ord for AddressSpace {
#[inline]
fn cmp(&self, other: &AddressSpace) -> ::core::cmp::Ordering {
::core::cmp::Ord::cmp(&self.0, &other.0)
}
}Ord, #[automatically_derived]
impl ::core::hash::Hash for AddressSpace {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&self.0, state)
}
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for AddressSpace {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
_serde::Serializer::serialize_newtype_struct(__serializer,
"AddressSpace", &self.0)
}
}
};Serialize)]
531pub struct AddressSpace(pub u32);
532
533impl AddressSpace {
534 pub const DATA: Self = AddressSpace(0);
536}
537
538#[derive(#[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for WrappingRange { }
#[automatically_derived]
impl ::core::clone::Clone for WrappingRange {
#[inline]
fn clone(&self) -> WrappingRange {
let _: ::core::clone::AssertParamIsClone<u128>;
*self
}
}Clone, #[automatically_derived]
impl ::core::marker::Copy for WrappingRange { }Copy, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for WrappingRange { }
#[automatically_derived]
impl ::core::cmp::PartialEq for WrappingRange {
#[inline]
fn eq(&self, other: &WrappingRange) -> bool {
self.start == other.start && self.end == other.end
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for WrappingRange {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<u128>;
}
}Eq, #[automatically_derived]
impl ::core::hash::Hash for WrappingRange {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&self.start, state);
::core::hash::Hash::hash(&self.end, state)
}
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for WrappingRange {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"WrappingRange", false as usize + 1 + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"start", &self.start)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"end", &self.end)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};Serialize)]
546pub struct WrappingRange {
547 pub start: u128,
548 pub end: u128,
549}
550
551impl WrappingRange {
552 #[inline]
554 pub fn is_full(&self, size: Size) -> Result<bool, Error> {
555 let Some(max_value) = size.unsigned_int_max() else {
556 return Err(Error(::alloc::__export::must_use({
::alloc::fmt::format(format_args!("Expected size <= 128 bits, but found {0} instead",
size.bits()))
}))error!("Expected size <= 128 bits, but found {} instead", size.bits()));
557 };
558 if self.start <= max_value && self.end <= max_value {
559 Ok(self.start == (self.end.wrapping_add(1) & max_value))
560 } else {
561 Err(Error(::alloc::__export::must_use({
::alloc::fmt::format(format_args!("Range `{1:?}` out of bounds for size `{0}` bits.",
size.bits(), self))
}))error!("Range `{self:?}` out of bounds for size `{}` bits.", size.bits()))
562 }
563 }
564
565 #[inline(always)]
567 pub fn contains(&self, v: u128) -> bool {
568 if self.wraps_around() {
569 self.start <= v || v <= self.end
570 } else {
571 self.start <= v && v <= self.end
572 }
573 }
574
575 #[inline]
579 pub fn wraps_around(&self) -> bool {
580 self.start > self.end
581 }
582}
583
584impl Debug for WrappingRange {
585 fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
586 if self.start > self.end {
587 fmt.write_fmt(format_args!("(..={0}) | ({1}..)", self.end, self.start))write!(fmt, "(..={}) | ({}..)", self.end, self.start)?;
588 } else {
589 fmt.write_fmt(format_args!("{0}..={1}", self.start, self.end))write!(fmt, "{}..={}", self.start, self.end)?;
590 }
591 Ok(())
592 }
593}
594
595#[derive(#[automatically_derived]
impl ::core::marker::Copy for CallConvention { }Copy, #[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for CallConvention { }
#[automatically_derived]
impl ::core::clone::Clone for CallConvention {
#[inline]
fn clone(&self) -> CallConvention { *self }
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for CallConvention {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::write_str(f,
match self {
CallConvention::C => "C",
CallConvention::Rust => "Rust",
CallConvention::Cold => "Cold",
CallConvention::PreserveMost => "PreserveMost",
CallConvention::PreserveAll => "PreserveAll",
CallConvention::PreserveNone => "PreserveNone",
CallConvention::Tail => "Tail",
CallConvention::Custom => "Custom",
CallConvention::Swift => "Swift",
CallConvention::ArmAapcs => "ArmAapcs",
CallConvention::CCmseNonSecureCall => "CCmseNonSecureCall",
CallConvention::CCmseNonSecureEntry => "CCmseNonSecureEntry",
CallConvention::Msp430Intr => "Msp430Intr",
CallConvention::PtxKernel => "PtxKernel",
CallConvention::GpuKernel => "GpuKernel",
CallConvention::X86Fastcall => "X86Fastcall",
CallConvention::X86Intr => "X86Intr",
CallConvention::X86Stdcall => "X86Stdcall",
CallConvention::X86ThisCall => "X86ThisCall",
CallConvention::X86VectorCall => "X86VectorCall",
CallConvention::X86_64SysV => "X86_64SysV",
CallConvention::X86_64Win64 => "X86_64Win64",
CallConvention::AvrInterrupt => "AvrInterrupt",
CallConvention::AvrNonBlockingInterrupt =>
"AvrNonBlockingInterrupt",
CallConvention::RiscvInterrupt => "RiscvInterrupt",
})
}
}Debug, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for CallConvention { }
#[automatically_derived]
impl ::core::cmp::PartialEq for CallConvention {
#[inline]
fn eq(&self, other: &CallConvention) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for CallConvention { }Eq, #[automatically_derived]
impl ::core::hash::Hash for CallConvention {
#[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)
}
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for CallConvention {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
match *self {
CallConvention::C =>
_serde::Serializer::serialize_unit_variant(__serializer,
"CallConvention", 0u32, "C"),
CallConvention::Rust =>
_serde::Serializer::serialize_unit_variant(__serializer,
"CallConvention", 1u32, "Rust"),
CallConvention::Cold =>
_serde::Serializer::serialize_unit_variant(__serializer,
"CallConvention", 2u32, "Cold"),
CallConvention::PreserveMost =>
_serde::Serializer::serialize_unit_variant(__serializer,
"CallConvention", 3u32, "PreserveMost"),
CallConvention::PreserveAll =>
_serde::Serializer::serialize_unit_variant(__serializer,
"CallConvention", 4u32, "PreserveAll"),
CallConvention::PreserveNone =>
_serde::Serializer::serialize_unit_variant(__serializer,
"CallConvention", 5u32, "PreserveNone"),
CallConvention::Tail =>
_serde::Serializer::serialize_unit_variant(__serializer,
"CallConvention", 6u32, "Tail"),
CallConvention::Custom =>
_serde::Serializer::serialize_unit_variant(__serializer,
"CallConvention", 7u32, "Custom"),
CallConvention::Swift =>
_serde::Serializer::serialize_unit_variant(__serializer,
"CallConvention", 8u32, "Swift"),
CallConvention::ArmAapcs =>
_serde::Serializer::serialize_unit_variant(__serializer,
"CallConvention", 9u32, "ArmAapcs"),
CallConvention::CCmseNonSecureCall =>
_serde::Serializer::serialize_unit_variant(__serializer,
"CallConvention", 10u32, "CCmseNonSecureCall"),
CallConvention::CCmseNonSecureEntry =>
_serde::Serializer::serialize_unit_variant(__serializer,
"CallConvention", 11u32, "CCmseNonSecureEntry"),
CallConvention::Msp430Intr =>
_serde::Serializer::serialize_unit_variant(__serializer,
"CallConvention", 12u32, "Msp430Intr"),
CallConvention::PtxKernel =>
_serde::Serializer::serialize_unit_variant(__serializer,
"CallConvention", 13u32, "PtxKernel"),
CallConvention::GpuKernel =>
_serde::Serializer::serialize_unit_variant(__serializer,
"CallConvention", 14u32, "GpuKernel"),
CallConvention::X86Fastcall =>
_serde::Serializer::serialize_unit_variant(__serializer,
"CallConvention", 15u32, "X86Fastcall"),
CallConvention::X86Intr =>
_serde::Serializer::serialize_unit_variant(__serializer,
"CallConvention", 16u32, "X86Intr"),
CallConvention::X86Stdcall =>
_serde::Serializer::serialize_unit_variant(__serializer,
"CallConvention", 17u32, "X86Stdcall"),
CallConvention::X86ThisCall =>
_serde::Serializer::serialize_unit_variant(__serializer,
"CallConvention", 18u32, "X86ThisCall"),
CallConvention::X86VectorCall =>
_serde::Serializer::serialize_unit_variant(__serializer,
"CallConvention", 19u32, "X86VectorCall"),
CallConvention::X86_64SysV =>
_serde::Serializer::serialize_unit_variant(__serializer,
"CallConvention", 20u32, "X86_64SysV"),
CallConvention::X86_64Win64 =>
_serde::Serializer::serialize_unit_variant(__serializer,
"CallConvention", 21u32, "X86_64Win64"),
CallConvention::AvrInterrupt =>
_serde::Serializer::serialize_unit_variant(__serializer,
"CallConvention", 22u32, "AvrInterrupt"),
CallConvention::AvrNonBlockingInterrupt =>
_serde::Serializer::serialize_unit_variant(__serializer,
"CallConvention", 23u32, "AvrNonBlockingInterrupt"),
CallConvention::RiscvInterrupt =>
_serde::Serializer::serialize_unit_variant(__serializer,
"CallConvention", 24u32, "RiscvInterrupt"),
}
}
}
};Serialize)]
597pub enum CallConvention {
598 C,
599 Rust,
600
601 Cold,
602 PreserveMost,
603 PreserveAll,
604 PreserveNone,
605 Tail,
606
607 Custom,
608
609 Swift,
610
611 ArmAapcs,
613 CCmseNonSecureCall,
614 CCmseNonSecureEntry,
615
616 Msp430Intr,
617
618 PtxKernel,
619
620 GpuKernel,
621
622 X86Fastcall,
623 X86Intr,
624 X86Stdcall,
625 X86ThisCall,
626 X86VectorCall,
627
628 X86_64SysV,
629 X86_64Win64,
630
631 AvrInterrupt,
632 AvrNonBlockingInterrupt,
633
634 RiscvInterrupt,
635}
636
637#[non_exhaustive]
638#[derive(#[automatically_derived]
impl ::core::marker::Copy for ReprFlags { }Copy, #[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for ReprFlags { }
#[automatically_derived]
impl ::core::clone::Clone for ReprFlags {
#[inline]
fn clone(&self) -> ReprFlags {
let _: ::core::clone::AssertParamIsClone<bool>;
*self
}
}Clone, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for ReprFlags { }
#[automatically_derived]
impl ::core::cmp::PartialEq for ReprFlags {
#[inline]
fn eq(&self, other: &ReprFlags) -> bool {
self.is_simd == other.is_simd && self.is_c == other.is_c &&
self.is_transparent == other.is_transparent &&
self.is_linear == other.is_linear
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for ReprFlags {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<bool>;
}
}Eq, #[automatically_derived]
impl ::core::cmp::PartialOrd for ReprFlags {
#[inline]
fn partial_cmp(&self, other: &ReprFlags)
-> ::core::option::Option<::core::cmp::Ordering> {
::core::option::Option::Some(::core::cmp::Ord::cmp(self, other))
}
}PartialOrd, #[automatically_derived]
impl ::core::cmp::Ord for ReprFlags {
#[inline]
fn cmp(&self, other: &ReprFlags) -> ::core::cmp::Ordering {
match ::core::cmp::Ord::cmp(&self.is_simd, &other.is_simd) {
::core::cmp::Ordering::Equal =>
match ::core::cmp::Ord::cmp(&self.is_c, &other.is_c) {
::core::cmp::Ordering::Equal =>
match ::core::cmp::Ord::cmp(&self.is_transparent,
&other.is_transparent) {
::core::cmp::Ordering::Equal =>
::core::cmp::Ord::cmp(&self.is_linear, &other.is_linear),
cmp => cmp,
},
cmp => cmp,
},
cmp => cmp,
}
}
}Ord, #[automatically_derived]
impl ::core::hash::Hash for ReprFlags {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&self.is_simd, state);
::core::hash::Hash::hash(&self.is_c, state);
::core::hash::Hash::hash(&self.is_transparent, state);
::core::hash::Hash::hash(&self.is_linear, state)
}
}Hash, #[automatically_derived]
impl ::core::fmt::Debug for ReprFlags {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field4_finish(f, "ReprFlags",
"is_simd", &self.is_simd, "is_c", &self.is_c, "is_transparent",
&self.is_transparent, "is_linear", &&self.is_linear)
}
}Debug, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for ReprFlags {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"ReprFlags", false as usize + 1 + 1 + 1 + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"is_simd", &self.is_simd)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"is_c", &self.is_c)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"is_transparent", &self.is_transparent)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"is_linear", &self.is_linear)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};Serialize)]
639pub struct ReprFlags {
640 pub is_simd: bool,
641 pub is_c: bool,
642 pub is_transparent: bool,
643 pub is_linear: bool,
644}
645
646#[derive(#[automatically_derived]
impl ::core::marker::Copy for IntegerType { }Copy, #[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for IntegerType { }
#[automatically_derived]
impl ::core::clone::Clone for IntegerType {
#[inline]
fn clone(&self) -> IntegerType {
let _: ::core::clone::AssertParamIsClone<bool>;
let _: ::core::clone::AssertParamIsClone<IntegerLength>;
*self
}
}Clone, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for IntegerType { }
#[automatically_derived]
impl ::core::cmp::PartialEq for IntegerType {
#[inline]
fn eq(&self, other: &IntegerType) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr &&
match (self, other) {
(IntegerType::Pointer { is_signed: __self_0 },
IntegerType::Pointer { is_signed: __arg1_0 }) =>
__self_0 == __arg1_0,
(IntegerType::Fixed { length: __self_0, is_signed: __self_1 },
IntegerType::Fixed { length: __arg1_0, is_signed: __arg1_1
}) => __self_1 == __arg1_1 && __self_0 == __arg1_0,
_ => unsafe { ::core::intrinsics::unreachable() }
}
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for IntegerType {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<bool>;
let _: ::core::cmp::AssertParamIsEq<IntegerLength>;
}
}Eq, #[automatically_derived]
impl ::core::cmp::PartialOrd for IntegerType {
#[inline]
fn partial_cmp(&self, other: &IntegerType)
-> ::core::option::Option<::core::cmp::Ordering> {
::core::option::Option::Some(::core::cmp::Ord::cmp(self, other))
}
}PartialOrd, #[automatically_derived]
impl ::core::cmp::Ord for IntegerType {
#[inline]
fn cmp(&self, other: &IntegerType) -> ::core::cmp::Ordering {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
match ::core::cmp::Ord::cmp(&__self_discr, &__arg1_discr) {
::core::cmp::Ordering::Equal =>
match (self, other) {
(IntegerType::Pointer { is_signed: __self_0 },
IntegerType::Pointer { is_signed: __arg1_0 }) =>
::core::cmp::Ord::cmp(__self_0, __arg1_0),
(IntegerType::Fixed { length: __self_0, is_signed: __self_1
}, IntegerType::Fixed {
length: __arg1_0, is_signed: __arg1_1 }) =>
match ::core::cmp::Ord::cmp(__self_0, __arg1_0) {
::core::cmp::Ordering::Equal =>
::core::cmp::Ord::cmp(__self_1, __arg1_1),
cmp => cmp,
},
_ => unsafe { ::core::intrinsics::unreachable() }
},
cmp => cmp,
}
}
}Ord, #[automatically_derived]
impl ::core::hash::Hash for IntegerType {
#[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);
match self {
IntegerType::Pointer { is_signed: __self_0 } =>
::core::hash::Hash::hash(__self_0, state),
IntegerType::Fixed { length: __self_0, is_signed: __self_1 } => {
::core::hash::Hash::hash(__self_0, state);
::core::hash::Hash::hash(__self_1, state)
}
}
}
}Hash, #[automatically_derived]
impl ::core::fmt::Debug for IntegerType {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
IntegerType::Pointer { is_signed: __self_0 } =>
::core::fmt::Formatter::debug_struct_field1_finish(f,
"Pointer", "is_signed", &__self_0),
IntegerType::Fixed { length: __self_0, is_signed: __self_1 } =>
::core::fmt::Formatter::debug_struct_field2_finish(f, "Fixed",
"length", __self_0, "is_signed", &__self_1),
}
}
}Debug, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for IntegerType {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
match *self {
IntegerType::Pointer { ref is_signed } => {
let mut __serde_state =
_serde::Serializer::serialize_struct_variant(__serializer,
"IntegerType", 0u32, "Pointer", 0 + 1)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"is_signed", is_signed)?;
_serde::ser::SerializeStructVariant::end(__serde_state)
}
IntegerType::Fixed { ref length, ref is_signed } => {
let mut __serde_state =
_serde::Serializer::serialize_struct_variant(__serializer,
"IntegerType", 1u32, "Fixed", 0 + 1 + 1)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"length", length)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"is_signed", is_signed)?;
_serde::ser::SerializeStructVariant::end(__serde_state)
}
}
}
}
};Serialize)]
647pub enum IntegerType {
648 Pointer {
650 is_signed: bool,
652 },
653 Fixed {
655 length: IntegerLength,
657 is_signed: bool,
659 },
660}
661
662#[non_exhaustive]
664#[derive(#[automatically_derived]
impl ::core::marker::Copy for ReprOptions { }Copy, #[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for ReprOptions { }
#[automatically_derived]
impl ::core::clone::Clone for ReprOptions {
#[inline]
fn clone(&self) -> ReprOptions {
let _: ::core::clone::AssertParamIsClone<Option<IntegerType>>;
let _: ::core::clone::AssertParamIsClone<Option<Align>>;
let _: ::core::clone::AssertParamIsClone<Option<Align>>;
let _: ::core::clone::AssertParamIsClone<ReprFlags>;
*self
}
}Clone, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for ReprOptions { }
#[automatically_derived]
impl ::core::cmp::PartialEq for ReprOptions {
#[inline]
fn eq(&self, other: &ReprOptions) -> bool {
self.int == other.int && self.align == other.align &&
self.pack == other.pack && self.flags == other.flags
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for ReprOptions {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<Option<IntegerType>>;
let _: ::core::cmp::AssertParamIsEq<Option<Align>>;
let _: ::core::cmp::AssertParamIsEq<Option<Align>>;
let _: ::core::cmp::AssertParamIsEq<ReprFlags>;
}
}Eq, #[automatically_derived]
impl ::core::cmp::PartialOrd for ReprOptions {
#[inline]
fn partial_cmp(&self, other: &ReprOptions)
-> ::core::option::Option<::core::cmp::Ordering> {
::core::option::Option::Some(::core::cmp::Ord::cmp(self, other))
}
}PartialOrd, #[automatically_derived]
impl ::core::cmp::Ord for ReprOptions {
#[inline]
fn cmp(&self, other: &ReprOptions) -> ::core::cmp::Ordering {
match ::core::cmp::Ord::cmp(&self.int, &other.int) {
::core::cmp::Ordering::Equal =>
match ::core::cmp::Ord::cmp(&self.align, &other.align) {
::core::cmp::Ordering::Equal =>
match ::core::cmp::Ord::cmp(&self.pack, &other.pack) {
::core::cmp::Ordering::Equal =>
::core::cmp::Ord::cmp(&self.flags, &other.flags),
cmp => cmp,
},
cmp => cmp,
},
cmp => cmp,
}
}
}Ord, #[automatically_derived]
impl ::core::hash::Hash for ReprOptions {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&self.int, state);
::core::hash::Hash::hash(&self.align, state);
::core::hash::Hash::hash(&self.pack, state);
::core::hash::Hash::hash(&self.flags, state)
}
}Hash, #[automatically_derived]
impl ::core::fmt::Debug for ReprOptions {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field4_finish(f, "ReprOptions",
"int", &self.int, "align", &self.align, "pack", &self.pack,
"flags", &&self.flags)
}
}Debug, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for ReprOptions {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"ReprOptions", false as usize + 1 + 1 + 1 + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"int", &self.int)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"align", &self.align)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"pack", &self.pack)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"flags", &self.flags)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};Serialize)]
665pub struct ReprOptions {
666 pub int: Option<IntegerType>,
667 pub align: Option<Align>,
668 pub pack: Option<Align>,
669 pub flags: ReprFlags,
670}