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) -> Self {
Self {
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: &Self) -> 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) -> Self {
Self {
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: &Self) -> 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]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for IndirectMode { }
#[automatically_derived]
impl ::core::clone::Clone for IndirectMode {
#[inline]
fn clone(&self) -> Self { *self }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for IndirectMode { }Copy, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for IndirectMode { }
#[automatically_derived]
impl ::core::cmp::PartialEq for IndirectMode {
#[inline]
fn eq(&self, other: &Self) -> bool {
::core::intrinsics::discriminant_value(self) ==
::core::intrinsics::discriminant_value(other)
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for IndirectMode { }Eq, #[automatically_derived]
impl ::core::hash::Hash for IndirectMode {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&::core::intrinsics::discriminant_value(self),
state)
}
}Hash, #[automatically_derived]
impl ::core::fmt::Debug for IndirectMode {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::write_str(f,
match self {
IndirectMode::Pointer => "Pointer",
IndirectMode::OnStack => "OnStack",
IndirectMode::AmdgpuKernelArg => "AmdgpuKernelArg",
})
}
}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 IndirectMode {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
match *self {
IndirectMode::Pointer =>
_serde::Serializer::serialize_unit_variant(__serializer,
"IndirectMode", 0u32, "Pointer"),
IndirectMode::OnStack =>
_serde::Serializer::serialize_unit_variant(__serializer,
"IndirectMode", 1u32, "OnStack"),
IndirectMode::AmdgpuKernelArg =>
_serde::Serializer::serialize_unit_variant(__serializer,
"IndirectMode", 2u32, "AmdgpuKernelArg"),
}
}
}
};Serialize)]
46pub enum IndirectMode {
47 Pointer,
49 OnStack,
52 AmdgpuKernelArg,
55}
56
57#[derive(#[automatically_derived]
impl ::core::clone::Clone for PassMode {
#[inline]
fn clone(&self) -> Self {
match self {
Self::Ignore => Self::Ignore,
Self::Direct(__self_0) =>
Self::Direct(::core::clone::Clone::clone(__self_0)),
Self::Pair(__self_0, __self_1) =>
Self::Pair(::core::clone::Clone::clone(__self_0),
::core::clone::Clone::clone(__self_1)),
Self::Cast { pad_i32_count: __self_0, cast: __self_1 } =>
Self::Cast {
pad_i32_count: ::core::clone::Clone::clone(__self_0),
cast: ::core::clone::Clone::clone(__self_1),
},
Self::Indirect {
attrs: __self_0,
meta_attrs: __self_1,
address_space: __self_2,
mode: __self_3 } =>
Self::Indirect {
attrs: ::core::clone::Clone::clone(__self_0),
meta_attrs: ::core::clone::Clone::clone(__self_1),
address_space: ::core::clone::Clone::clone(__self_2),
mode: ::core::clone::Clone::clone(__self_3),
},
}
}
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for PassMode {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
Self::Ignore => ::core::fmt::Formatter::write_str(f, "Ignore"),
Self::Direct(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Direct",
&__self_0),
Self::Pair(__self_0, __self_1) =>
::core::fmt::Formatter::debug_tuple_field2_finish(f, "Pair",
__self_0, &__self_1),
Self::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),
Self::Indirect {
attrs: __self_0,
meta_attrs: __self_1,
address_space: __self_2,
mode: __self_3 } =>
::core::fmt::Formatter::debug_struct_field4_finish(f,
"Indirect", "attrs", __self_0, "meta_attrs", __self_1,
"address_space", __self_2, "mode", &__self_3),
}
}
}Debug, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for PassMode { }
#[automatically_derived]
impl ::core::cmp::PartialEq for PassMode {
#[inline]
fn eq(&self, other: &Self) -> bool {
::core::intrinsics::discriminant_value(self) ==
::core::intrinsics::discriminant_value(other) &&
match (self, other) {
(Self::Direct(__self_0), Self::Direct(__arg1_0)) =>
__self_0 == __arg1_0,
(Self::Pair(__self_0, __self_1),
Self::Pair(__arg1_0, __arg1_1)) =>
__self_0 == __arg1_0 && __self_1 == __arg1_1,
(Self::Cast { pad_i32_count: __self_0, cast: __self_1 },
Self::Cast { pad_i32_count: __arg1_0, cast: __arg1_1 }) =>
__self_0 == __arg1_0 && __self_1 == __arg1_1,
(Self::Indirect {
attrs: __self_0,
meta_attrs: __self_1,
address_space: __self_2,
mode: __self_3 }, Self::Indirect {
attrs: __arg1_0,
meta_attrs: __arg1_1,
address_space: __arg1_2,
mode: __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 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<Option<AddressSpace>>;
let _: ::core::cmp::AssertParamIsEq<IndirectMode>;
}
}Eq, #[automatically_derived]
impl ::core::hash::Hash for PassMode {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&::core::intrinsics::discriminant_value(self),
state);
match self {
Self::Direct(__self_0) =>
::core::hash::Hash::hash(__self_0, state),
Self::Pair(__self_0, __self_1) => {
::core::hash::Hash::hash(__self_0, state);
::core::hash::Hash::hash(__self_1, state)
}
Self::Cast { pad_i32_count: __self_0, cast: __self_1 } => {
::core::hash::Hash::hash(__self_0, state);
::core::hash::Hash::hash(__self_1, state)
}
Self::Indirect {
attrs: __self_0,
meta_attrs: __self_1,
address_space: __self_2,
mode: __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 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 address_space, ref mode } =>
{
let mut __serde_state =
_serde::Serializer::serialize_struct_variant(__serializer,
"PassMode", 4u32, "Indirect", 0 + 1 + 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,
"address_space", address_space)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"mode", mode)?;
_serde::ser::SerializeStructVariant::end(__serde_state)
}
}
}
}
};Serialize)]
67pub enum PassMode {
68 Ignore,
72 Direct(ArgAttributes),
76 Pair(ArgAttributes, ArgAttributes),
81 Cast { pad_i32_count: u8, cast: CastTarget },
87 Indirect {
91 attrs: ArgAttributes,
92 meta_attrs: Option<ArgAttributes>,
95 address_space: Option<AddressSpace>,
96 mode: IndirectMode,
97 },
98}
99
100#[derive(#[automatically_derived]
impl ::core::clone::Clone for ArgAttributes {
#[inline]
fn clone(&self) -> Self {
Self {
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: &Self) -> 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)]
106pub struct ArgAttributes {
107 pub(crate) arg_ext: ArgExtension,
108 pub(crate) pointee_size: Size,
109 pub(crate) pointee_align: Option<Align>,
110}
111
112impl ArgAttributes {
113 pub fn arg_extension(&self) -> ArgExtension {
117 self.arg_ext
118 }
119
120 pub fn pointee_align(&self) -> Option<Align> {
125 self.pointee_align
126 }
127
128 pub fn pointee_size(&self) -> Size {
130 self.pointee_size
131 }
132}
133
134#[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) -> Self { *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: &Self) -> bool {
::core::intrinsics::discriminant_value(self) ==
::core::intrinsics::discriminant_value(other)
}
}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) {
::core::hash::Hash::hash(&::core::intrinsics::discriminant_value(self),
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)]
136pub enum ArgExtension {
137 None,
139 Zext,
141 Sext,
143}
144
145#[derive(#[automatically_derived]
impl ::core::clone::Clone for CastTarget {
#[inline]
fn clone(&self) -> Self {
Self {
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: &Self) -> 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)]
159pub struct CastTarget {
160 pub prefix: Vec<Reg>,
162 pub rest_offset: Option<Size>,
165 pub rest: Uniform,
167}
168
169impl CastTarget {
170 pub fn size(&self) -> Size {
172 let prefix_size: usize = self.prefix.iter().map(|r| r.size.bits()).sum();
173 Size::from_bits(prefix_size + self.rest.total.bits())
174 }
175}
176
177#[derive(#[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for Uniform { }
#[automatically_derived]
impl ::core::clone::Clone for Uniform {
#[inline]
fn clone(&self) -> Self {
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: &Self) -> 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)]
179pub struct Uniform {
180 pub unit: Reg,
182 pub total: Size,
189 pub is_consecutive: bool,
192}
193
194impl Uniform {
195 pub fn reg_count(&self) -> usize {
197 if self.unit.size.bits() == 0 {
198 return 0;
199 }
200 (self.total.bits() + self.unit.size.bits() - 1) / self.unit.size.bits()
201 }
202}
203
204#[derive(#[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for Reg { }
#[automatically_derived]
impl ::core::clone::Clone for Reg {
#[inline]
fn clone(&self) -> Self {
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: &Self) -> 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)]
206pub struct Reg {
207 pub kind: RegKind,
208 pub size: Size,
209}
210
211#[derive(#[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for RegKind { }
#[automatically_derived]
impl ::core::clone::Clone for RegKind {
#[inline]
fn clone(&self) -> Self { *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: &Self) -> bool {
::core::intrinsics::discriminant_value(self) ==
::core::intrinsics::discriminant_value(other)
}
}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) {
::core::hash::Hash::hash(&::core::intrinsics::discriminant_value(self),
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)]
213pub enum RegKind {
214 Integer,
215 Float,
216 Vector,
217}
218
219#[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) -> Self {
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: &Self) -> 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)]
221pub struct TyAndLayout {
222 pub ty: Ty,
223 pub layout: Layout,
224}
225
226#[derive(#[automatically_derived]
impl ::core::clone::Clone for LayoutShape {
#[inline]
fn clone(&self) -> Self {
Self {
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: &Self) -> 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)]
228pub struct LayoutShape {
229 pub fields: FieldsShape,
231
232 pub variants: VariantsShape,
239
240 pub value_repr: ValueRepr,
242
243 pub abi_align: Align,
245
246 pub size: Size,
248}
249
250impl LayoutShape {
251 #[inline]
253 pub fn is_unsized(&self) -> bool {
254 self.value_repr.is_unsized()
255 }
256
257 #[inline]
258 pub fn is_sized(&self) -> bool {
259 !self.value_repr.is_unsized()
260 }
261
262 pub fn is_1zst(&self) -> bool {
264 self.is_sized() && self.size.bits() == 0 && self.abi_align == 1
265 }
266}
267
268#[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) -> Self {
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: &Self) -> 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)]
269pub struct Layout(usize, ThreadLocalIndex);
270impl 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);
271
272impl Layout {
273 pub fn shape(self) -> LayoutShape {
274 with(|cx| cx.layout_shape(self))
275 }
276}
277
278#[derive(#[automatically_derived]
impl ::core::clone::Clone for FieldsShape {
#[inline]
fn clone(&self) -> Self {
match self {
Self::Primitive => Self::Primitive,
Self::Union(__self_0) =>
Self::Union(::core::clone::Clone::clone(__self_0)),
Self::Array { stride: __self_0, count: __self_1 } =>
Self::Array {
stride: ::core::clone::Clone::clone(__self_0),
count: ::core::clone::Clone::clone(__self_1),
},
Self::Arbitrary { offsets: __self_0 } =>
Self::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 {
Self::Primitive =>
::core::fmt::Formatter::write_str(f, "Primitive"),
Self::Union(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Union",
&__self_0),
Self::Array { stride: __self_0, count: __self_1 } =>
::core::fmt::Formatter::debug_struct_field2_finish(f, "Array",
"stride", __self_0, "count", &__self_1),
Self::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: &Self) -> bool {
::core::intrinsics::discriminant_value(self) ==
::core::intrinsics::discriminant_value(other) &&
match (self, other) {
(Self::Union(__self_0), Self::Union(__arg1_0)) =>
__self_0 == __arg1_0,
(Self::Array { stride: __self_0, count: __self_1 },
Self::Array { stride: __arg1_0, count: __arg1_1 }) =>
__self_1 == __arg1_1 && __self_0 == __arg1_0,
(Self::Arbitrary { offsets: __self_0 }, Self::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) {
::core::hash::Hash::hash(&::core::intrinsics::discriminant_value(self),
state);
match self {
Self::Union(__self_0) =>
::core::hash::Hash::hash(__self_0, state),
Self::Array { stride: __self_0, count: __self_1 } => {
::core::hash::Hash::hash(__self_0, state);
::core::hash::Hash::hash(__self_1, state)
}
Self::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)]
280pub enum FieldsShape {
281 Primitive,
283
284 Union(NonZero<usize>),
286
287 Array { stride: Size, count: u64 },
289
290 Arbitrary {
298 offsets: Vec<Size>,
303 },
304}
305
306impl FieldsShape {
307 pub fn fields_by_offset_order(&self) -> Vec<FieldIdx> {
308 match self {
309 FieldsShape::Primitive => ::alloc::vec::Vec::new()vec![],
310 FieldsShape::Union(_) | FieldsShape::Array { .. } => (0..self.count()).collect(),
311 FieldsShape::Arbitrary { offsets, .. } => {
312 let mut indices = (0..offsets.len()).collect::<Vec<_>>();
313 indices.sort_by_key(|idx| offsets[*idx]);
314 indices
315 }
316 }
317 }
318
319 pub fn count(&self) -> usize {
320 match self {
321 FieldsShape::Primitive => 0,
322 FieldsShape::Union(count) => count.get(),
323 FieldsShape::Array { count, .. } => *count as usize,
324 FieldsShape::Arbitrary { offsets, .. } => offsets.len(),
325 }
326 }
327}
328
329#[derive(#[automatically_derived]
impl ::core::clone::Clone for VariantsShape {
#[inline]
fn clone(&self) -> Self {
match self {
Self::Empty => Self::Empty,
Self::Single { index: __self_0 } =>
Self::Single { index: ::core::clone::Clone::clone(__self_0) },
Self::Multiple {
tag: __self_0,
tag_encoding: __self_1,
tag_field: __self_2,
variants: __self_3 } =>
Self::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 {
Self::Empty => ::core::fmt::Formatter::write_str(f, "Empty"),
Self::Single { index: __self_0 } =>
::core::fmt::Formatter::debug_struct_field1_finish(f,
"Single", "index", &__self_0),
Self::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: &Self) -> bool {
::core::intrinsics::discriminant_value(self) ==
::core::intrinsics::discriminant_value(other) &&
match (self, other) {
(Self::Single { index: __self_0 }, Self::Single {
index: __arg1_0 }) => __self_0 == __arg1_0,
(Self::Multiple {
tag: __self_0,
tag_encoding: __self_1,
tag_field: __self_2,
variants: __self_3 }, Self::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) {
::core::hash::Hash::hash(&::core::intrinsics::discriminant_value(self),
state);
match self {
Self::Single { index: __self_0 } =>
::core::hash::Hash::hash(__self_0, state),
Self::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)]
330pub enum VariantsShape {
331 Empty,
333
334 Single { index: VariantIdx },
336
337 Multiple {
344 tag: Scalar,
345 tag_encoding: TagEncoding,
346 tag_field: usize,
347 variants: Vec<VariantFields>,
348 },
349}
350
351#[derive(#[automatically_derived]
impl ::core::clone::Clone for VariantFields {
#[inline]
fn clone(&self) -> Self {
Self { 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: &Self) -> 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)]
352pub struct VariantFields {
353 pub offsets: Vec<Size>,
358}
359
360impl VariantFields {
361 pub fn fields_by_offset_order(&self) -> Vec<FieldIdx> {
362 let mut indices = (0..self.offsets.len()).collect::<Vec<_>>();
363 indices.sort_by_key(|idx| self.offsets[*idx]);
364 indices
365 }
366}
367
368#[derive(#[automatically_derived]
impl ::core::clone::Clone for TagEncoding {
#[inline]
fn clone(&self) -> Self {
match self {
Self::Direct => Self::Direct,
Self::Niche {
untagged_variant: __self_0,
niche_variants: __self_1,
niche_start: __self_2 } =>
Self::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 {
Self::Direct => ::core::fmt::Formatter::write_str(f, "Direct"),
Self::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: &Self) -> bool {
::core::intrinsics::discriminant_value(self) ==
::core::intrinsics::discriminant_value(other) &&
match (self, other) {
(Self::Niche {
untagged_variant: __self_0,
niche_variants: __self_1,
niche_start: __self_2 }, Self::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) {
::core::hash::Hash::hash(&::core::intrinsics::discriminant_value(self),
state);
match self {
Self::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)]
369pub enum TagEncoding {
370 Direct,
373
374 Niche {
385 untagged_variant: VariantIdx,
386 niche_variants: RangeInclusive<VariantIdx>,
387 niche_start: u128,
388 },
389}
390
391#[derive(#[automatically_derived]
impl ::core::clone::Clone for NumScalableVectors {
#[inline]
fn clone(&self) -> Self { Self(::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: &Self) -> 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)]
393pub struct NumScalableVectors(pub(crate) u8);
394
395#[derive(#[automatically_derived]
impl ::core::clone::Clone for ValueRepr {
#[inline]
fn clone(&self) -> Self {
match self {
Self::Scalar(__self_0) =>
Self::Scalar(::core::clone::Clone::clone(__self_0)),
Self::ScalarPair { a: __self_0, b: __self_1, b_offset: __self_2 }
=>
Self::ScalarPair {
a: ::core::clone::Clone::clone(__self_0),
b: ::core::clone::Clone::clone(__self_1),
b_offset: ::core::clone::Clone::clone(__self_2),
},
Self::Vector { element: __self_0, count: __self_1 } =>
Self::Vector {
element: ::core::clone::Clone::clone(__self_0),
count: ::core::clone::Clone::clone(__self_1),
},
Self::ScalableVector {
element: __self_0,
count: __self_1,
number_of_vectors: __self_2 } =>
Self::ScalableVector {
element: ::core::clone::Clone::clone(__self_0),
count: ::core::clone::Clone::clone(__self_1),
number_of_vectors: ::core::clone::Clone::clone(__self_2),
},
Self::Aggregate { sized: __self_0 } =>
Self::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 {
Self::Scalar(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Scalar",
&__self_0),
Self::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),
Self::Vector { element: __self_0, count: __self_1 } =>
::core::fmt::Formatter::debug_struct_field2_finish(f,
"Vector", "element", __self_0, "count", &__self_1),
Self::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),
Self::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: &Self) -> bool {
::core::intrinsics::discriminant_value(self) ==
::core::intrinsics::discriminant_value(other) &&
match (self, other) {
(Self::Scalar(__self_0), Self::Scalar(__arg1_0)) =>
__self_0 == __arg1_0,
(Self::ScalarPair {
a: __self_0, b: __self_1, b_offset: __self_2 },
Self::ScalarPair {
a: __arg1_0, b: __arg1_1, b_offset: __arg1_2 }) =>
__self_0 == __arg1_0 && __self_1 == __arg1_1 &&
__self_2 == __arg1_2,
(Self::Vector { element: __self_0, count: __self_1 },
Self::Vector { element: __arg1_0, count: __arg1_1 }) =>
__self_1 == __arg1_1 && __self_0 == __arg1_0,
(Self::ScalableVector {
element: __self_0,
count: __self_1,
number_of_vectors: __self_2 }, Self::ScalableVector {
element: __arg1_0,
count: __arg1_1,
number_of_vectors: __arg1_2 }) =>
__self_1 == __arg1_1 && __self_0 == __arg1_0 &&
__self_2 == __arg1_2,
(Self::Aggregate { sized: __self_0 }, Self::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) {
::core::hash::Hash::hash(&::core::intrinsics::discriminant_value(self),
state);
match self {
Self::Scalar(__self_0) =>
::core::hash::Hash::hash(__self_0, state),
Self::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)
}
Self::Vector { element: __self_0, count: __self_1 } => {
::core::hash::Hash::hash(__self_0, state);
::core::hash::Hash::hash(__self_1, state)
}
Self::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)
}
Self::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)]
400pub enum ValueRepr {
401 Scalar(Scalar),
402 ScalarPair {
403 a: Scalar,
404 b: Scalar,
405 b_offset: Size,
406 },
407 Vector {
409 element: Scalar,
410 count: u64,
411 },
412 ScalableVector {
414 element: Scalar,
415 count: u64,
416 number_of_vectors: NumScalableVectors,
417 },
418 Aggregate {
420 sized: bool,
422 },
423}
424
425impl ValueRepr {
426 pub fn is_unsized(&self) -> bool {
428 match *self {
429 ValueRepr::Scalar(_)
430 | ValueRepr::ScalarPair { .. }
431 | ValueRepr::Vector { .. }
432 | ValueRepr::ScalableVector { .. } => false,
438 ValueRepr::Aggregate { sized } => !sized,
439 }
440 }
441}
442
443#[derive(#[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for Scalar { }
#[automatically_derived]
impl ::core::clone::Clone for Scalar {
#[inline]
fn clone(&self) -> Self {
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: &Self) -> bool {
::core::intrinsics::discriminant_value(self) ==
::core::intrinsics::discriminant_value(other) &&
match (self, other) {
(Self::Initialized { value: __self_0, valid_range: __self_1 },
Self::Initialized { value: __arg1_0, valid_range: __arg1_1
}) => __self_0 == __arg1_0 && __self_1 == __arg1_1,
(Self::Union { value: __self_0 }, Self::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) {
::core::hash::Hash::hash(&::core::intrinsics::discriminant_value(self),
state);
match self {
Self::Initialized { value: __self_0, valid_range: __self_1 } => {
::core::hash::Hash::hash(__self_0, state);
::core::hash::Hash::hash(__self_1, state)
}
Self::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 {
Self::Initialized { value: __self_0, valid_range: __self_1 } =>
::core::fmt::Formatter::debug_struct_field2_finish(f,
"Initialized", "value", __self_0, "valid_range", &__self_1),
Self::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)]
445pub enum Scalar {
446 Initialized {
447 value: Primitive,
449 valid_range: WrappingRange,
452 },
453 Union {
454 value: Primitive,
458 },
459}
460
461impl Scalar {
462 pub fn has_niche(&self, target: &MachineInfo) -> bool {
463 match self {
464 Scalar::Initialized { value, valid_range } => {
465 !valid_range.is_full(value.size(target)).unwrap()
466 }
467 Scalar::Union { .. } => false,
468 }
469 }
470}
471
472#[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) -> Self {
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: &Self) -> bool {
::core::intrinsics::discriminant_value(self) ==
::core::intrinsics::discriminant_value(other) &&
match (self, other) {
(Self::Int { length: __self_0, signed: __self_1 }, Self::Int {
length: __arg1_0, signed: __arg1_1 }) =>
__self_1 == __arg1_1 && __self_0 == __arg1_0,
(Self::Float { length: __self_0 }, Self::Float {
length: __arg1_0 }) => __self_0 == __arg1_0,
(Self::Pointer(__self_0), Self::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) {
::core::hash::Hash::hash(&::core::intrinsics::discriminant_value(self),
state);
match self {
Self::Int { length: __self_0, signed: __self_1 } => {
::core::hash::Hash::hash(__self_0, state);
::core::hash::Hash::hash(__self_1, state)
}
Self::Float { length: __self_0 } =>
::core::hash::Hash::hash(__self_0, state),
Self::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 {
Self::Int { length: __self_0, signed: __self_1 } =>
::core::fmt::Formatter::debug_struct_field2_finish(f, "Int",
"length", __self_0, "signed", &__self_1),
Self::Float { length: __self_0 } =>
::core::fmt::Formatter::debug_struct_field1_finish(f, "Float",
"length", &__self_0),
Self::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)]
474pub enum Primitive {
475 Int { length: IntegerLength, signed: bool },
481 Float { length: FloatLength },
483 Pointer(AddressSpace),
485}
486
487impl Primitive {
488 pub fn size(self, target: &MachineInfo) -> Size {
489 match self {
490 Primitive::Int { length, .. } => Size::from_bits(length.bits()),
491 Primitive::Float { length } => Size::from_bits(length.bits()),
492 Primitive::Pointer(_) => target.pointer_width,
493 }
494 }
495}
496
497#[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) -> Self { *self }
}Clone, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for IntegerLength { }
#[automatically_derived]
impl ::core::cmp::PartialEq for IntegerLength {
#[inline]
fn eq(&self, other: &Self) -> bool {
::core::intrinsics::discriminant_value(self) ==
::core::intrinsics::discriminant_value(other)
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for IntegerLength { }Eq, #[automatically_derived]
impl ::core::cmp::PartialOrd for IntegerLength {
#[inline]
fn partial_cmp(&self, other: &Self)
-> ::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: &Self) -> ::core::cmp::Ordering {
::core::cmp::Ord::cmp(&::core::intrinsics::discriminant_value(self),
&::core::intrinsics::discriminant_value(other))
}
}Ord, #[automatically_derived]
impl ::core::hash::Hash for IntegerLength {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&::core::intrinsics::discriminant_value(self),
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)]
499pub enum IntegerLength {
500 I8,
501 I16,
502 I32,
503 I64,
504 I128,
505}
506
507#[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) -> Self { *self }
}Clone, #[automatically_derived]
impl ::core::marker::StructuralPartialEq for FloatLength { }
#[automatically_derived]
impl ::core::cmp::PartialEq for FloatLength {
#[inline]
fn eq(&self, other: &Self) -> bool {
::core::intrinsics::discriminant_value(self) ==
::core::intrinsics::discriminant_value(other)
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for FloatLength { }Eq, #[automatically_derived]
impl ::core::cmp::PartialOrd for FloatLength {
#[inline]
fn partial_cmp(&self, other: &Self)
-> ::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: &Self) -> ::core::cmp::Ordering {
::core::cmp::Ord::cmp(&::core::intrinsics::discriminant_value(self),
&::core::intrinsics::discriminant_value(other))
}
}Ord, #[automatically_derived]
impl ::core::hash::Hash for FloatLength {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&::core::intrinsics::discriminant_value(self),
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::F16B => "F16B",
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::F16B =>
_serde::Serializer::serialize_unit_variant(__serializer,
"FloatLength", 1u32, "F16B"),
FloatLength::F32 =>
_serde::Serializer::serialize_unit_variant(__serializer,
"FloatLength", 2u32, "F32"),
FloatLength::F64 =>
_serde::Serializer::serialize_unit_variant(__serializer,
"FloatLength", 3u32, "F64"),
FloatLength::F128 =>
_serde::Serializer::serialize_unit_variant(__serializer,
"FloatLength", 4u32, "F128"),
}
}
}
};Serialize)]
509pub enum FloatLength {
510 F16,
511 F16B,
512 F32,
513 F64,
514 F128,
515}
516
517impl IntegerLength {
518 pub fn bits(self) -> usize {
519 match self {
520 IntegerLength::I8 => 8,
521 IntegerLength::I16 => 16,
522 IntegerLength::I32 => 32,
523 IntegerLength::I64 => 64,
524 IntegerLength::I128 => 128,
525 }
526 }
527}
528
529impl FloatLength {
530 pub fn bits(self) -> usize {
531 match self {
532 FloatLength::F16 | FloatLength::F16B => 16,
533 FloatLength::F32 => 32,
534 FloatLength::F64 => 64,
535 FloatLength::F128 => 128,
536 }
537 }
538}
539
540#[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) -> Self {
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: &Self) -> 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: &Self)
-> ::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: &Self) -> ::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)]
544pub struct AddressSpace(pub u32);
545
546impl AddressSpace {
547 pub const DATA: Self = AddressSpace(0);
549}
550
551#[derive(#[automatically_derived]
#[doc(hidden)]
unsafe impl ::core::clone::TrivialClone for WrappingRange { }
#[automatically_derived]
impl ::core::clone::Clone for WrappingRange {
#[inline]
fn clone(&self) -> Self {
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: &Self) -> 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)]
559pub struct WrappingRange {
560 pub start: u128,
561 pub end: u128,
562}
563
564impl WrappingRange {
565 #[inline]
567 pub fn is_full(&self, size: Size) -> Result<bool, Error> {
568 let Some(max_value) = size.unsigned_int_max() else {
569 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()));
570 };
571 if self.start <= max_value && self.end <= max_value {
572 Ok(self.start == (self.end.wrapping_add(1) & max_value))
573 } else {
574 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()))
575 }
576 }
577
578 #[inline(always)]
580 pub fn contains(&self, v: u128) -> bool {
581 if self.wraps_around() {
582 self.start <= v || v <= self.end
583 } else {
584 self.start <= v && v <= self.end
585 }
586 }
587
588 #[inline]
592 pub fn wraps_around(&self) -> bool {
593 self.start > self.end
594 }
595}
596
597impl Debug for WrappingRange {
598 fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
599 if self.start > self.end {
600 fmt.write_fmt(format_args!("(..={0}) | ({1}..)", self.end, self.start))write!(fmt, "(..={}) | ({}..)", self.end, self.start)?;
601 } else {
602 fmt.write_fmt(format_args!("{0}..={1}", self.start, self.end))write!(fmt, "{}..={}", self.start, self.end)?;
603 }
604 Ok(())
605 }
606}
607
608#[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) -> Self { *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: &Self) -> bool {
::core::intrinsics::discriminant_value(self) ==
::core::intrinsics::discriminant_value(other)
}
}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) {
::core::hash::Hash::hash(&::core::intrinsics::discriminant_value(self),
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)]
610pub enum CallConvention {
611 C,
612 Rust,
613
614 Cold,
615 PreserveMost,
616 PreserveAll,
617 PreserveNone,
618 Tail,
619
620 Custom,
621
622 Swift,
623
624 ArmAapcs,
626 CCmseNonSecureCall,
627 CCmseNonSecureEntry,
628
629 Msp430Intr,
630
631 PtxKernel,
632
633 GpuKernel,
634
635 X86Fastcall,
636 X86Intr,
637 X86Stdcall,
638 X86ThisCall,
639 X86VectorCall,
640
641 X86_64SysV,
642 X86_64Win64,
643
644 AvrInterrupt,
645 AvrNonBlockingInterrupt,
646
647 RiscvInterrupt,
648}
649
650#[non_exhaustive]
651#[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) -> Self {
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: &Self) -> 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: &Self)
-> ::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: &Self) -> ::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)]
652pub struct ReprFlags {
653 pub is_simd: bool,
654 pub is_c: bool,
655 pub is_transparent: bool,
656 pub is_linear: bool,
657}
658
659#[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) -> Self {
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: &Self) -> bool {
::core::intrinsics::discriminant_value(self) ==
::core::intrinsics::discriminant_value(other) &&
match (self, other) {
(Self::Pointer { is_signed: __self_0 }, Self::Pointer {
is_signed: __arg1_0 }) => __self_0 == __arg1_0,
(Self::Fixed { length: __self_0, is_signed: __self_1 },
Self::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: &Self)
-> ::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: &Self) -> ::core::cmp::Ordering {
match (self, other) {
(Self::Pointer { is_signed: __self_0 }, Self::Pointer {
is_signed: __arg1_0 }) =>
::core::cmp::Ord::cmp(__self_0, __arg1_0),
(Self::Fixed { length: __self_0, is_signed: __self_1 },
Self::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,
},
_ =>
::core::cmp::Ord::cmp(&::core::intrinsics::discriminant_value(self),
&::core::intrinsics::discriminant_value(other)),
}
}
}Ord, #[automatically_derived]
impl ::core::hash::Hash for IntegerType {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&::core::intrinsics::discriminant_value(self),
state);
match self {
Self::Pointer { is_signed: __self_0 } =>
::core::hash::Hash::hash(__self_0, state),
Self::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 {
Self::Pointer { is_signed: __self_0 } =>
::core::fmt::Formatter::debug_struct_field1_finish(f,
"Pointer", "is_signed", &__self_0),
Self::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)]
660pub enum IntegerType {
661 Pointer {
663 is_signed: bool,
665 },
666 Fixed {
668 length: IntegerLength,
670 is_signed: bool,
672 },
673}
674
675#[non_exhaustive]
677#[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) -> Self {
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: &Self) -> 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: &Self)
-> ::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: &Self) -> ::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)]
678pub struct ReprOptions {
679 pub int: Option<IntegerType>,
680 pub align: Option<Align>,
681 pub pack: Option<Align>,
682 pub flags: ReprFlags,
683}