/src/wasmi/crates/ir/src/decode/mod.rs
Line | Count | Source |
1 | | #![allow(non_camel_case_types)] |
2 | | |
3 | | //! Definitions and utilities to decode encoded byte streams. |
4 | | |
5 | | mod op; |
6 | | |
7 | | use self::op::{ |
8 | | BinaryOp, |
9 | | CmpBranchOp, |
10 | | CmpSelectOp, |
11 | | LoadOp_Si, |
12 | | LoadOp_Ss, |
13 | | LoadOpMem0Offset16_Ss, |
14 | | StoreOp_I, |
15 | | StoreOp_S, |
16 | | StoreOpMem0Offset16_S, |
17 | | TableGet, |
18 | | TableSet, |
19 | | UnaryOp, |
20 | | }; |
21 | | #[cfg(feature = "simd")] |
22 | | use self::op::{ |
23 | | StoreLaneOp_S, |
24 | | StoreLaneOpMem0Offset16_S, |
25 | | TernaryOp, |
26 | | V128ExtractLaneOp, |
27 | | V128LoadLaneOp_Ss, |
28 | | V128LoadLaneOpMem0Offset16_Ss, |
29 | | V128ReplaceLaneOp, |
30 | | }; |
31 | | #[cfg(feature = "simd")] |
32 | | use crate::core::simd::ImmLaneIdx; |
33 | | use crate::{ |
34 | | Address, |
35 | | BlockFuel, |
36 | | BoundedSlotSpan, |
37 | | BranchOffset, |
38 | | BranchTableTarget, |
39 | | FixedSlotSpan, |
40 | | Offset16, |
41 | | OpCode, |
42 | | Sign, |
43 | | Slot, |
44 | | SlotSpan, |
45 | | core::TrapCode, |
46 | | index::{Data, Elem, Func, FuncType, Global, InternalFunc, Memory, Table}, |
47 | | }; |
48 | | use core::{ |
49 | | error::Error as CoreError, |
50 | | fmt, |
51 | | mem::{self, MaybeUninit}, |
52 | | num::NonZero, |
53 | | }; |
54 | | |
55 | | /// Types that can be used to decode types implementing [`Decode`]. |
56 | | pub trait Decoder { |
57 | | /// Reads enough bytes from `self` to populate `buffer`. |
58 | | fn read_bytes(&mut self, buffer: &mut [u8]) -> Result<(), DecodeError>; |
59 | | } |
60 | | |
61 | | /// An error that may be returned when decoding items. |
62 | | #[derive(Debug, Copy, Clone)] |
63 | | pub enum DecodeError { |
64 | | /// The decoder ran out of bytes. |
65 | | OutOfBytes, |
66 | | /// The decoder found an invalid bit pattern. |
67 | | InvalidBitPattern, |
68 | | } |
69 | | |
70 | | impl CoreError for DecodeError {} |
71 | | impl fmt::Display for DecodeError { |
72 | 0 | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { |
73 | 0 | let s = match self { |
74 | 0 | DecodeError::OutOfBytes => "ran out of bytes to decode", |
75 | 0 | DecodeError::InvalidBitPattern => "encountered invalid bit pattern", |
76 | | }; |
77 | 0 | f.write_str(s) |
78 | 0 | } Unexecuted instantiation: <wasmi_ir::decode::DecodeError as core::fmt::Display>::fmt Unexecuted instantiation: <wasmi_ir::decode::DecodeError as core::fmt::Display>::fmt |
79 | | } |
80 | | |
81 | | impl Decoder for &'_ [u8] { |
82 | 9.18M | fn read_bytes(&mut self, buffer: &mut [u8]) -> Result<(), DecodeError> { |
83 | 9.18M | let Some((bytes, rest)) = self.split_at_checked(buffer.len()) else { |
84 | 0 | return Err(DecodeError::OutOfBytes); |
85 | | }; |
86 | 9.18M | buffer.copy_from_slice(bytes); |
87 | 9.18M | *self = rest; |
88 | 9.18M | Ok(()) |
89 | 9.18M | } <&[u8] as wasmi_ir::decode::Decoder>::read_bytes Line | Count | Source | 82 | 522k | fn read_bytes(&mut self, buffer: &mut [u8]) -> Result<(), DecodeError> { | 83 | 522k | let Some((bytes, rest)) = self.split_at_checked(buffer.len()) else { | 84 | 0 | return Err(DecodeError::OutOfBytes); | 85 | | }; | 86 | 522k | buffer.copy_from_slice(bytes); | 87 | 522k | *self = rest; | 88 | 522k | Ok(()) | 89 | 522k | } |
<&[u8] as wasmi_ir::decode::Decoder>::read_bytes Line | Count | Source | 82 | 8.66M | fn read_bytes(&mut self, buffer: &mut [u8]) -> Result<(), DecodeError> { | 83 | 8.66M | let Some((bytes, rest)) = self.split_at_checked(buffer.len()) else { | 84 | 0 | return Err(DecodeError::OutOfBytes); | 85 | | }; | 86 | 8.66M | buffer.copy_from_slice(bytes); | 87 | 8.66M | *self = rest; | 88 | 8.66M | Ok(()) | 89 | 8.66M | } |
|
90 | | } |
91 | | |
92 | | /// Types that can be decoded using a type that implements [`Decoder`]. |
93 | | pub trait Decode: Sized { |
94 | | /// Decodes `Self` via `decoder`. |
95 | | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError>; |
96 | | } |
97 | | |
98 | | impl Decode for BoundedSlotSpan { |
99 | 1.48M | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { |
100 | 1.48M | let span = SlotSpan::decode(decoder)?; |
101 | 1.48M | let len = u16::decode(decoder)?; |
102 | 1.48M | Ok(Self::new(span, len)) |
103 | 1.48M | } <wasmi_ir::span::BoundedSlotSpan as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 99 | 1.20M | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 100 | 1.20M | let span = SlotSpan::decode(decoder)?; | 101 | 1.20M | let len = u16::decode(decoder)?; | 102 | 1.20M | Ok(Self::new(span, len)) | 103 | 1.20M | } |
Unexecuted instantiation: <wasmi_ir::span::BoundedSlotSpan as wasmi_ir::decode::Decode>::decode::<_> <wasmi_ir::span::BoundedSlotSpan as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 99 | 273k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 100 | 273k | let span = SlotSpan::decode(decoder)?; | 101 | 273k | let len = u16::decode(decoder)?; | 102 | 273k | Ok(Self::new(span, len)) | 103 | 273k | } |
Unexecuted instantiation: <wasmi_ir::span::BoundedSlotSpan as wasmi_ir::decode::Decode>::decode::<_> |
104 | | } |
105 | | |
106 | | impl<const N: u16> Decode for FixedSlotSpan<N> { |
107 | 4.41k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { |
108 | 4.41k | let span = SlotSpan::decode(decoder)?; |
109 | 4.41k | Self::new(span).map_err(|_| DecodeError::InvalidBitPattern) |
110 | 4.41k | } <wasmi_ir::span::FixedSlotSpan<2> as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 107 | 3.37k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 108 | 3.37k | let span = SlotSpan::decode(decoder)?; | 109 | 3.37k | Self::new(span).map_err(|_| DecodeError::InvalidBitPattern) | 110 | 3.37k | } |
Unexecuted instantiation: <wasmi_ir::span::FixedSlotSpan<_> as wasmi_ir::decode::Decode>::decode::<_> <wasmi_ir::span::FixedSlotSpan<2> as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 107 | 1.03k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 108 | 1.03k | let span = SlotSpan::decode(decoder)?; | 109 | 1.03k | Self::new(span).map_err(|_| DecodeError::InvalidBitPattern) | 110 | 1.03k | } |
Unexecuted instantiation: <wasmi_ir::span::FixedSlotSpan<_> as wasmi_ir::decode::Decode>::decode::<_> |
111 | | } |
112 | | |
113 | | impl Decode for BranchTableTarget { |
114 | 139 | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { |
115 | 139 | let results = SlotSpan::decode(decoder)?; |
116 | 139 | let offset = BranchOffset::decode(decoder)?; |
117 | 139 | Ok(Self::new(results, offset)) |
118 | 139 | } <wasmi_ir::primitive::BranchTableTarget as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 114 | 44 | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 115 | 44 | let results = SlotSpan::decode(decoder)?; | 116 | 44 | let offset = BranchOffset::decode(decoder)?; | 117 | 44 | Ok(Self::new(results, offset)) | 118 | 44 | } |
Unexecuted instantiation: <wasmi_ir::primitive::BranchTableTarget as wasmi_ir::decode::Decode>::decode::<_> <wasmi_ir::primitive::BranchTableTarget as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 114 | 95 | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 115 | 95 | let results = SlotSpan::decode(decoder)?; | 116 | 95 | let offset = BranchOffset::decode(decoder)?; | 117 | 95 | Ok(Self::new(results, offset)) | 118 | 95 | } |
Unexecuted instantiation: <wasmi_ir::primitive::BranchTableTarget as wasmi_ir::decode::Decode>::decode::<_> |
119 | | } |
120 | | |
121 | | macro_rules! impl_decode_for_primitive { |
122 | | ( $($ty:ty),* $(,)? ) => { |
123 | | $( |
124 | | impl Decode for $ty { |
125 | 272M | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { |
126 | 272M | let mut bytes = [0_u8; mem::size_of::<$ty>()]; |
127 | 272M | decoder.read_bytes(&mut bytes)?; |
128 | 272M | Ok(Self::from_ne_bytes(bytes)) |
129 | 272M | } <u8 as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 125 | 532k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 126 | 532k | let mut bytes = [0_u8; mem::size_of::<$ty>()]; | 127 | 532k | decoder.read_bytes(&mut bytes)?; | 128 | 532k | Ok(Self::from_ne_bytes(bytes)) | 129 | 532k | } |
<u16 as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 125 | 88.0M | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 126 | 88.0M | let mut bytes = [0_u8; mem::size_of::<$ty>()]; | 127 | 88.0M | decoder.read_bytes(&mut bytes)?; | 128 | 88.0M | Ok(Self::from_ne_bytes(bytes)) | 129 | 88.0M | } |
<u32 as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 125 | 23.3M | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 126 | 23.3M | let mut bytes = [0_u8; mem::size_of::<$ty>()]; | 127 | 23.3M | decoder.read_bytes(&mut bytes)?; | 128 | 23.3M | Ok(Self::from_ne_bytes(bytes)) | 129 | 23.3M | } |
<u64 as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 125 | 4.56M | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 126 | 4.56M | let mut bytes = [0_u8; mem::size_of::<$ty>()]; | 127 | 4.56M | decoder.read_bytes(&mut bytes)?; | 128 | 4.56M | Ok(Self::from_ne_bytes(bytes)) | 129 | 4.56M | } |
Unexecuted instantiation: <u64 as wasmi_ir::decode::Decode>::decode::<&[u8]> <usize as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 125 | 115M | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 126 | 115M | let mut bytes = [0_u8; mem::size_of::<$ty>()]; | 127 | 115M | decoder.read_bytes(&mut bytes)?; | 128 | 115M | Ok(Self::from_ne_bytes(bytes)) | 129 | 115M | } |
<i8 as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 125 | 2.29k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 126 | 2.29k | let mut bytes = [0_u8; mem::size_of::<$ty>()]; | 127 | 2.29k | decoder.read_bytes(&mut bytes)?; | 128 | 2.29k | Ok(Self::from_ne_bytes(bytes)) | 129 | 2.29k | } |
<i16 as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 125 | 332 | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 126 | 332 | let mut bytes = [0_u8; mem::size_of::<$ty>()]; | 127 | 332 | decoder.read_bytes(&mut bytes)?; | 128 | 332 | Ok(Self::from_ne_bytes(bytes)) | 129 | 332 | } |
<i32 as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 125 | 19.4M | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 126 | 19.4M | let mut bytes = [0_u8; mem::size_of::<$ty>()]; | 127 | 19.4M | decoder.read_bytes(&mut bytes)?; | 128 | 19.4M | Ok(Self::from_ne_bytes(bytes)) | 129 | 19.4M | } |
<i32 as wasmi_ir::decode::Decode>::decode::<&[u8]> Line | Count | Source | 125 | 522k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 126 | 522k | let mut bytes = [0_u8; mem::size_of::<$ty>()]; | 127 | 522k | decoder.read_bytes(&mut bytes)?; | 128 | 522k | Ok(Self::from_ne_bytes(bytes)) | 129 | 522k | } |
<i64 as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 125 | 353k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 126 | 353k | let mut bytes = [0_u8; mem::size_of::<$ty>()]; | 127 | 353k | decoder.read_bytes(&mut bytes)?; | 128 | 353k | Ok(Self::from_ne_bytes(bytes)) | 129 | 353k | } |
<f32 as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 125 | 122k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 126 | 122k | let mut bytes = [0_u8; mem::size_of::<$ty>()]; | 127 | 122k | decoder.read_bytes(&mut bytes)?; | 128 | 122k | Ok(Self::from_ne_bytes(bytes)) | 129 | 122k | } |
<f64 as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 125 | 122k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 126 | 122k | let mut bytes = [0_u8; mem::size_of::<$ty>()]; | 127 | 122k | decoder.read_bytes(&mut bytes)?; | 128 | 122k | Ok(Self::from_ne_bytes(bytes)) | 129 | 122k | } |
Unexecuted instantiation: <u8 as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <u16 as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <u32 as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <u64 as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <u128 as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <usize as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <i8 as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <i16 as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <i32 as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <i64 as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <i128 as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <isize as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <f32 as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <f64 as wasmi_ir::decode::Decode>::decode::<_> <u8 as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 125 | 123k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 126 | 123k | let mut bytes = [0_u8; mem::size_of::<$ty>()]; | 127 | 123k | decoder.read_bytes(&mut bytes)?; | 128 | 123k | Ok(Self::from_ne_bytes(bytes)) | 129 | 123k | } |
<u16 as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 125 | 2.42M | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 126 | 2.42M | let mut bytes = [0_u8; mem::size_of::<$ty>()]; | 127 | 2.42M | decoder.read_bytes(&mut bytes)?; | 128 | 2.42M | Ok(Self::from_ne_bytes(bytes)) | 129 | 2.42M | } |
<u32 as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 125 | 754k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 126 | 754k | let mut bytes = [0_u8; mem::size_of::<$ty>()]; | 127 | 754k | decoder.read_bytes(&mut bytes)?; | 128 | 754k | Ok(Self::from_ne_bytes(bytes)) | 129 | 754k | } |
<u64 as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 125 | 1.18M | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 126 | 1.18M | let mut bytes = [0_u8; mem::size_of::<$ty>()]; | 127 | 1.18M | decoder.read_bytes(&mut bytes)?; | 128 | 1.18M | Ok(Self::from_ne_bytes(bytes)) | 129 | 1.18M | } |
<u64 as wasmi_ir::decode::Decode>::decode::<&[u8]> Line | Count | Source | 125 | 8.55M | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 126 | 8.55M | let mut bytes = [0_u8; mem::size_of::<$ty>()]; | 127 | 8.55M | decoder.read_bytes(&mut bytes)?; | 128 | 8.55M | Ok(Self::from_ne_bytes(bytes)) | 129 | 8.55M | } |
<usize as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 125 | 6.16M | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 126 | 6.16M | let mut bytes = [0_u8; mem::size_of::<$ty>()]; | 127 | 6.16M | decoder.read_bytes(&mut bytes)?; | 128 | 6.16M | Ok(Self::from_ne_bytes(bytes)) | 129 | 6.16M | } |
<i8 as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 125 | 522 | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 126 | 522 | let mut bytes = [0_u8; mem::size_of::<$ty>()]; | 127 | 522 | decoder.read_bytes(&mut bytes)?; | 128 | 522 | Ok(Self::from_ne_bytes(bytes)) | 129 | 522 | } |
<i16 as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 125 | 112 | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 126 | 112 | let mut bytes = [0_u8; mem::size_of::<$ty>()]; | 127 | 112 | decoder.read_bytes(&mut bytes)?; | 128 | 112 | Ok(Self::from_ne_bytes(bytes)) | 129 | 112 | } |
<i32 as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 125 | 464k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 126 | 464k | let mut bytes = [0_u8; mem::size_of::<$ty>()]; | 127 | 464k | decoder.read_bytes(&mut bytes)?; | 128 | 464k | Ok(Self::from_ne_bytes(bytes)) | 129 | 464k | } |
<i32 as wasmi_ir::decode::Decode>::decode::<&[u8]> Line | Count | Source | 125 | 101k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 126 | 101k | let mut bytes = [0_u8; mem::size_of::<$ty>()]; | 127 | 101k | decoder.read_bytes(&mut bytes)?; | 128 | 101k | Ok(Self::from_ne_bytes(bytes)) | 129 | 101k | } |
<i64 as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 125 | 29.8k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 126 | 29.8k | let mut bytes = [0_u8; mem::size_of::<$ty>()]; | 127 | 29.8k | decoder.read_bytes(&mut bytes)?; | 128 | 29.8k | Ok(Self::from_ne_bytes(bytes)) | 129 | 29.8k | } |
<f32 as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 125 | 1.63k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 126 | 1.63k | let mut bytes = [0_u8; mem::size_of::<$ty>()]; | 127 | 1.63k | decoder.read_bytes(&mut bytes)?; | 128 | 1.63k | Ok(Self::from_ne_bytes(bytes)) | 129 | 1.63k | } |
<f64 as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 125 | 4.30k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 126 | 4.30k | let mut bytes = [0_u8; mem::size_of::<$ty>()]; | 127 | 4.30k | decoder.read_bytes(&mut bytes)?; | 128 | 4.30k | Ok(Self::from_ne_bytes(bytes)) | 129 | 4.30k | } |
Unexecuted instantiation: <u8 as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <u16 as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <u32 as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <u64 as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <u128 as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <usize as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <i8 as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <i16 as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <i32 as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <i64 as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <i128 as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <isize as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <f32 as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <f64 as wasmi_ir::decode::Decode>::decode::<_> |
130 | | } |
131 | | )* |
132 | | }; |
133 | | } |
134 | | impl_decode_for_primitive!( |
135 | | u8, u16, u32, u64, u128, usize, i8, i16, i32, i64, i128, isize, f32, f64 |
136 | | ); |
137 | | |
138 | | macro_rules! impl_decode_using { |
139 | | ( $($ty:ty as $as:ty = $e:expr),* $(,)? ) => { |
140 | | $( |
141 | | impl Decode for $ty { |
142 | 129M | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { |
143 | 129M | Ok($e(<$as as Decode>::decode(decoder)?)) |
144 | 129M | } <wasmi_ir::primitive::Sign<f32> as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 142 | 18.7k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 143 | 18.7k | Ok($e(<$as as Decode>::decode(decoder)?)) | 144 | 18.7k | } |
<wasmi_ir::primitive::Sign<f64> as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 142 | 1.03k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 143 | 1.03k | Ok($e(<$as as Decode>::decode(decoder)?)) | 144 | 1.03k | } |
<wasmi_ir::span::SlotSpan as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 142 | 1.21M | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 143 | 1.21M | Ok($e(<$as as Decode>::decode(decoder)?)) | 144 | 1.21M | } |
<bool as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 142 | 19.7k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 143 | 19.7k | Ok($e(<$as as Decode>::decode(decoder)?)) | 144 | 19.7k | } |
<wasmi_ir::primitive::Offset16 as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 142 | 159k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 143 | 159k | Ok($e(<$as as Decode>::decode(decoder)?)) | 144 | 159k | } |
<wasmi_ir::primitive::BranchOffset as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 142 | 7.17M | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 143 | 7.17M | Ok($e(<$as as Decode>::decode(decoder)?)) | 144 | 7.17M | } |
<wasmi_ir::primitive::BranchOffset as wasmi_ir::decode::Decode>::decode::<&[u8]> Line | Count | Source | 142 | 522k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 143 | 522k | Ok($e(<$as as Decode>::decode(decoder)?)) | 144 | 522k | } |
Unexecuted instantiation: <wasmi_ir::primitive::BlockFuel as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Unexecuted instantiation: <wasmi_ir::primitive::BlockFuel as wasmi_ir::decode::Decode>::decode::<&[u8]> <wasmi_ir::index::Slot as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 142 | 86.0M | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 143 | 86.0M | Ok($e(<$as as Decode>::decode(decoder)?)) | 144 | 86.0M | } |
<wasmi_ir::index::Func as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 142 | 341k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 143 | 341k | Ok($e(<$as as Decode>::decode(decoder)?)) | 144 | 341k | } |
<wasmi_ir::index::FuncType as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 142 | 3.03k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 143 | 3.03k | Ok($e(<$as as Decode>::decode(decoder)?)) | 144 | 3.03k | } |
<wasmi_ir::index::InternalFunc as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 142 | 1.17M | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 143 | 1.17M | Ok($e(<$as as Decode>::decode(decoder)?)) | 144 | 1.17M | } |
<wasmi_ir::index::Global as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 142 | 15.2M | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 143 | 15.2M | Ok($e(<$as as Decode>::decode(decoder)?)) | 144 | 15.2M | } |
<wasmi_ir::index::Memory as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 142 | 630k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 143 | 630k | Ok($e(<$as as Decode>::decode(decoder)?)) | 144 | 630k | } |
<wasmi_ir::index::Table as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 142 | 558k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 143 | 558k | Ok($e(<$as as Decode>::decode(decoder)?)) | 144 | 558k | } |
<wasmi_ir::index::Data as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 142 | 1.39M | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 143 | 1.39M | Ok($e(<$as as Decode>::decode(decoder)?)) | 144 | 1.39M | } |
<wasmi_ir::index::Elem as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 142 | 1.81M | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 143 | 1.81M | Ok($e(<$as as Decode>::decode(decoder)?)) | 144 | 1.81M | } |
Unexecuted instantiation: <wasmi_ir::primitive::Sign<f32> as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <wasmi_ir::primitive::Sign<f64> as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <wasmi_ir::span::SlotSpan as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <bool as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <wasmi_ir::primitive::Offset16 as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <wasmi_ir::primitive::BranchOffset as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <wasmi_ir::primitive::BlockFuel as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <wasmi_ir::index::Slot as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <wasmi_ir::index::Func as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <wasmi_ir::index::FuncType as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <wasmi_ir::index::InternalFunc as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <wasmi_ir::index::Global as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <wasmi_ir::index::Memory as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <wasmi_ir::index::Table as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <wasmi_ir::index::Data as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <wasmi_ir::index::Elem as wasmi_ir::decode::Decode>::decode::<_> <wasmi_ir::primitive::Sign<f32> as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 142 | 32 | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 143 | 32 | Ok($e(<$as as Decode>::decode(decoder)?)) | 144 | 32 | } |
<wasmi_ir::primitive::Sign<f64> as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 142 | 64 | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 143 | 64 | Ok($e(<$as as Decode>::decode(decoder)?)) | 144 | 64 | } |
<wasmi_ir::span::SlotSpan as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 142 | 274k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 143 | 274k | Ok($e(<$as as Decode>::decode(decoder)?)) | 144 | 274k | } |
<bool as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 142 | 96 | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 143 | 96 | Ok($e(<$as as Decode>::decode(decoder)?)) | 144 | 96 | } |
<wasmi_ir::primitive::Offset16 as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 142 | 10.9k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 143 | 10.9k | Ok($e(<$as as Decode>::decode(decoder)?)) | 144 | 10.9k | } |
<wasmi_ir::primitive::BranchOffset as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 142 | 426k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 143 | 426k | Ok($e(<$as as Decode>::decode(decoder)?)) | 144 | 426k | } |
<wasmi_ir::primitive::BranchOffset as wasmi_ir::decode::Decode>::decode::<&[u8]> Line | Count | Source | 142 | 101k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 143 | 101k | Ok($e(<$as as Decode>::decode(decoder)?)) | 144 | 101k | } |
<wasmi_ir::primitive::BlockFuel as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 142 | 990k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 143 | 990k | Ok($e(<$as as Decode>::decode(decoder)?)) | 144 | 990k | } |
<wasmi_ir::primitive::BlockFuel as wasmi_ir::decode::Decode>::decode::<&[u8]> Line | Count | Source | 142 | 8.55M | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 143 | 8.55M | Ok($e(<$as as Decode>::decode(decoder)?)) | 144 | 8.55M | } |
<wasmi_ir::index::Slot as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 142 | 2.03M | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 143 | 2.03M | Ok($e(<$as as Decode>::decode(decoder)?)) | 144 | 2.03M | } |
<wasmi_ir::index::Func as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 142 | 14.2k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 143 | 14.2k | Ok($e(<$as as Decode>::decode(decoder)?)) | 144 | 14.2k | } |
<wasmi_ir::index::FuncType as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 142 | 1.14k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 143 | 1.14k | Ok($e(<$as as Decode>::decode(decoder)?)) | 144 | 1.14k | } |
<wasmi_ir::index::InternalFunc as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 142 | 259k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 143 | 259k | Ok($e(<$as as Decode>::decode(decoder)?)) | 144 | 259k | } |
<wasmi_ir::index::Global as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 142 | 208k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 143 | 208k | Ok($e(<$as as Decode>::decode(decoder)?)) | 144 | 208k | } |
<wasmi_ir::index::Memory as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 142 | 95.8k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 143 | 95.8k | Ok($e(<$as as Decode>::decode(decoder)?)) | 144 | 95.8k | } |
<wasmi_ir::index::Table as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 142 | 50.2k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 143 | 50.2k | Ok($e(<$as as Decode>::decode(decoder)?)) | 144 | 50.2k | } |
<wasmi_ir::index::Data as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 142 | 64.9k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 143 | 64.9k | Ok($e(<$as as Decode>::decode(decoder)?)) | 144 | 64.9k | } |
<wasmi_ir::index::Elem as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 142 | 90.8k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 143 | 90.8k | Ok($e(<$as as Decode>::decode(decoder)?)) | 144 | 90.8k | } |
Unexecuted instantiation: <wasmi_ir::primitive::Sign<f32> as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <wasmi_ir::primitive::Sign<f64> as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <wasmi_ir::span::SlotSpan as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <bool as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <wasmi_ir::primitive::Offset16 as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <wasmi_ir::primitive::BranchOffset as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <wasmi_ir::primitive::BlockFuel as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <wasmi_ir::index::Slot as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <wasmi_ir::index::Func as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <wasmi_ir::index::FuncType as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <wasmi_ir::index::InternalFunc as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <wasmi_ir::index::Global as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <wasmi_ir::index::Memory as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <wasmi_ir::index::Table as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <wasmi_ir::index::Data as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <wasmi_ir::index::Elem as wasmi_ir::decode::Decode>::decode::<_> |
145 | | } |
146 | | )* |
147 | | }; |
148 | | } |
149 | | impl_decode_using! { |
150 | 19.8k | bool as u8 = |value| value != 0, <bool as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder>::{closure#0}Line | Count | Source | 150 | 19.7k | bool as u8 = |value| value != 0, |
Unexecuted instantiation: <bool as wasmi_ir::decode::Decode>::decode::<_>::{closure#0}<bool as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder>::{closure#0}Line | Count | Source | 150 | 96 | bool as u8 = |value| value != 0, |
Unexecuted instantiation: <bool as wasmi_ir::decode::Decode>::decode::<_>::{closure#0} |
151 | | Offset16 as u16 = Into::into, |
152 | | BranchOffset as i32 = Into::into, |
153 | | BlockFuel as u64 = Into::into, |
154 | | Slot as u16 = Into::into, |
155 | | Func as u32 = Into::into, |
156 | | FuncType as u32 = Into::into, |
157 | | InternalFunc as u32 = Into::into, |
158 | | Global as u32 = Into::into, |
159 | | Memory as u16 = Into::into, |
160 | | Table as u32 = Into::into, |
161 | | Data as u32 = Into::into, |
162 | | Elem as u32 = Into::into, |
163 | | |
164 | | Sign<f32> as bool = Sign::new, |
165 | | Sign<f64> as bool = Sign::new, |
166 | | SlotSpan as Slot = SlotSpan::new, |
167 | | } |
168 | | |
169 | | macro_rules! impl_decode_fallible_using { |
170 | | ( $($ty:ty as $as:ty = $e:expr),* $(,)? ) => { |
171 | | $( |
172 | | impl Decode for $ty { |
173 | | #[inline(always)] |
174 | 384k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { |
175 | 384k | $e(<$as as Decode>::decode(decoder)?) |
176 | 384k | } <wasmi_ir::primitive::Address as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 174 | 38.2k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 175 | 38.2k | $e(<$as as Decode>::decode(decoder)?) | 176 | 38.2k | } |
<core::num::nonzero::NonZero<i32> as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 174 | 13.1k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 175 | 13.1k | $e(<$as as Decode>::decode(decoder)?) | 176 | 13.1k | } |
<core::num::nonzero::NonZero<i64> as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 174 | 2.57k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 175 | 2.57k | $e(<$as as Decode>::decode(decoder)?) | 176 | 2.57k | } |
<core::num::nonzero::NonZero<u32> as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 174 | 33.3k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 175 | 33.3k | $e(<$as as Decode>::decode(decoder)?) | 176 | 33.3k | } |
<core::num::nonzero::NonZero<u64> as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 174 | 24.6k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 175 | 24.6k | $e(<$as as Decode>::decode(decoder)?) | 176 | 24.6k | } |
<wasmi_core::trap::TrapCode as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 174 | 172k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 175 | 172k | $e(<$as as Decode>::decode(decoder)?) | 176 | 172k | } |
Unexecuted instantiation: <wasmi_ir::primitive::Address as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <core::num::nonzero::NonZero<i32> as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <core::num::nonzero::NonZero<i64> as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <core::num::nonzero::NonZero<u32> as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <core::num::nonzero::NonZero<u64> as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <wasmi_core::trap::TrapCode as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <wasmi_ir::opcode::OpCode as wasmi_ir::decode::Decode>::decode::<_> <wasmi_ir::primitive::Address as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 174 | 10.1k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 175 | 10.1k | $e(<$as as Decode>::decode(decoder)?) | 176 | 10.1k | } |
<core::num::nonzero::NonZero<i32> as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 174 | 115 | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 175 | 115 | $e(<$as as Decode>::decode(decoder)?) | 176 | 115 | } |
<core::num::nonzero::NonZero<i64> as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 174 | 755 | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 175 | 755 | $e(<$as as Decode>::decode(decoder)?) | 176 | 755 | } |
<core::num::nonzero::NonZero<u32> as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 174 | 87 | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 175 | 87 | $e(<$as as Decode>::decode(decoder)?) | 176 | 87 | } |
<core::num::nonzero::NonZero<u64> as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 174 | 110 | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 175 | 110 | $e(<$as as Decode>::decode(decoder)?) | 176 | 110 | } |
<wasmi_core::trap::TrapCode as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 174 | 89.2k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 175 | 89.2k | $e(<$as as Decode>::decode(decoder)?) | 176 | 89.2k | } |
Unexecuted instantiation: <wasmi_ir::primitive::Address as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <core::num::nonzero::NonZero<i32> as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <core::num::nonzero::NonZero<i64> as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <core::num::nonzero::NonZero<u32> as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <core::num::nonzero::NonZero<u64> as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <wasmi_core::trap::TrapCode as wasmi_ir::decode::Decode>::decode::<_> Unexecuted instantiation: <wasmi_ir::opcode::OpCode as wasmi_ir::decode::Decode>::decode::<_> |
177 | | } |
178 | | )* |
179 | | }; |
180 | | } |
181 | | impl_decode_fallible_using! { |
182 | 48.4k | Address as u64 = |address| { |
183 | 48.4k | Address::try_from(address).map_err(|_| DecodeError::InvalidBitPattern) |
184 | 48.4k | }, <wasmi_ir::primitive::Address as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder>::{closure#0}Line | Count | Source | 182 | 38.2k | Address as u64 = |address| { | 183 | 38.2k | Address::try_from(address).map_err(|_| DecodeError::InvalidBitPattern) | 184 | 38.2k | }, |
Unexecuted instantiation: <wasmi_ir::primitive::Address as wasmi_ir::decode::Decode>::decode::<_>::{closure#0}<wasmi_ir::primitive::Address as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder>::{closure#0}Line | Count | Source | 182 | 10.1k | Address as u64 = |address| { | 183 | 10.1k | Address::try_from(address).map_err(|_| DecodeError::InvalidBitPattern) | 184 | 10.1k | }, |
Unexecuted instantiation: <wasmi_ir::primitive::Address as wasmi_ir::decode::Decode>::decode::<_>::{closure#0} |
185 | 13.2k | NonZero<i32> as i32 = |value| { |
186 | 13.2k | NonZero::new(value).ok_or(DecodeError::InvalidBitPattern) |
187 | 13.2k | }, <core::num::nonzero::NonZero<i32> as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder>::{closure#0}Line | Count | Source | 185 | 13.1k | NonZero<i32> as i32 = |value| { | 186 | 13.1k | NonZero::new(value).ok_or(DecodeError::InvalidBitPattern) | 187 | 13.1k | }, |
Unexecuted instantiation: <core::num::nonzero::NonZero<i32> as wasmi_ir::decode::Decode>::decode::<_>::{closure#0}<core::num::nonzero::NonZero<i32> as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder>::{closure#0}Line | Count | Source | 185 | 115 | NonZero<i32> as i32 = |value| { | 186 | 115 | NonZero::new(value).ok_or(DecodeError::InvalidBitPattern) | 187 | 115 | }, |
Unexecuted instantiation: <core::num::nonzero::NonZero<i32> as wasmi_ir::decode::Decode>::decode::<_>::{closure#0} |
188 | 3.32k | NonZero<i64> as i64 = |value| { |
189 | 3.32k | NonZero::new(value).ok_or(DecodeError::InvalidBitPattern) |
190 | 3.32k | }, <core::num::nonzero::NonZero<i64> as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder>::{closure#0}Line | Count | Source | 188 | 2.57k | NonZero<i64> as i64 = |value| { | 189 | 2.57k | NonZero::new(value).ok_or(DecodeError::InvalidBitPattern) | 190 | 2.57k | }, |
Unexecuted instantiation: <core::num::nonzero::NonZero<i64> as wasmi_ir::decode::Decode>::decode::<_>::{closure#0}<core::num::nonzero::NonZero<i64> as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder>::{closure#0}Line | Count | Source | 188 | 755 | NonZero<i64> as i64 = |value| { | 189 | 755 | NonZero::new(value).ok_or(DecodeError::InvalidBitPattern) | 190 | 755 | }, |
Unexecuted instantiation: <core::num::nonzero::NonZero<i64> as wasmi_ir::decode::Decode>::decode::<_>::{closure#0} |
191 | 33.4k | NonZero<u32> as u32 = |value| { |
192 | 33.4k | NonZero::new(value).ok_or(DecodeError::InvalidBitPattern) |
193 | 33.4k | }, <core::num::nonzero::NonZero<u32> as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder>::{closure#0}Line | Count | Source | 191 | 33.3k | NonZero<u32> as u32 = |value| { | 192 | 33.3k | NonZero::new(value).ok_or(DecodeError::InvalidBitPattern) | 193 | 33.3k | }, |
Unexecuted instantiation: <core::num::nonzero::NonZero<u32> as wasmi_ir::decode::Decode>::decode::<_>::{closure#0}<core::num::nonzero::NonZero<u32> as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder>::{closure#0}Line | Count | Source | 191 | 87 | NonZero<u32> as u32 = |value| { | 192 | 87 | NonZero::new(value).ok_or(DecodeError::InvalidBitPattern) | 193 | 87 | }, |
Unexecuted instantiation: <core::num::nonzero::NonZero<u32> as wasmi_ir::decode::Decode>::decode::<_>::{closure#0} |
194 | 24.7k | NonZero<u64> as u64 = |value| { |
195 | 24.7k | NonZero::new(value).ok_or(DecodeError::InvalidBitPattern) |
196 | 24.7k | }, <core::num::nonzero::NonZero<u64> as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder>::{closure#0}Line | Count | Source | 194 | 24.6k | NonZero<u64> as u64 = |value| { | 195 | 24.6k | NonZero::new(value).ok_or(DecodeError::InvalidBitPattern) | 196 | 24.6k | }, |
Unexecuted instantiation: <core::num::nonzero::NonZero<u64> as wasmi_ir::decode::Decode>::decode::<_>::{closure#0}<core::num::nonzero::NonZero<u64> as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder>::{closure#0}Line | Count | Source | 194 | 110 | NonZero<u64> as u64 = |value| { | 195 | 110 | NonZero::new(value).ok_or(DecodeError::InvalidBitPattern) | 196 | 110 | }, |
Unexecuted instantiation: <core::num::nonzero::NonZero<u64> as wasmi_ir::decode::Decode>::decode::<_>::{closure#0} |
197 | 261k | TrapCode as u8 = |code: u8| { |
198 | 261k | TrapCode::try_from(code).map_err(|_| DecodeError::InvalidBitPattern) |
199 | 261k | }, <wasmi_core::trap::TrapCode as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder>::{closure#0}Line | Count | Source | 197 | 172k | TrapCode as u8 = |code: u8| { | 198 | 172k | TrapCode::try_from(code).map_err(|_| DecodeError::InvalidBitPattern) | 199 | 172k | }, |
Unexecuted instantiation: <wasmi_core::trap::TrapCode as wasmi_ir::decode::Decode>::decode::<_>::{closure#0}<wasmi_core::trap::TrapCode as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder>::{closure#0}Line | Count | Source | 197 | 89.2k | TrapCode as u8 = |code: u8| { | 198 | 89.2k | TrapCode::try_from(code).map_err(|_| DecodeError::InvalidBitPattern) | 199 | 89.2k | }, |
Unexecuted instantiation: <wasmi_core::trap::TrapCode as wasmi_ir::decode::Decode>::decode::<_>::{closure#0} |
200 | 0 | OpCode as u16 = |code: u16| { |
201 | 0 | OpCode::try_from(code).map_err(|_| DecodeError::InvalidBitPattern) |
202 | 0 | } Unexecuted instantiation: <wasmi_ir::opcode::OpCode as wasmi_ir::decode::Decode>::decode::<_>::{closure#0}Unexecuted instantiation: <wasmi_ir::opcode::OpCode as wasmi_ir::decode::Decode>::decode::<_>::{closure#0} |
203 | | } |
204 | | |
205 | | impl<const N: usize, T: Decode> Decode for [T; N] { |
206 | 445 | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { |
207 | 445 | let mut array = <MaybeUninit<[T; N]>>::uninit(); |
208 | | // Safety: we are going to decode and initialize all array items and won't read any. |
209 | 445 | let items = unsafe { &mut *array.as_mut_ptr() }; |
210 | 7.56k | for item in items { |
211 | 7.12k | *item = <T as Decode>::decode(decoder)?; |
212 | | } |
213 | | // Safety: we have decoded and thus initialized all array items. |
214 | 445 | let array = unsafe { array.assume_init() }; |
215 | 445 | Ok(array) |
216 | 445 | } <[wasmi_core::simd::ImmLaneIdx<32>; 16] as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 206 | 3 | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 207 | 3 | let mut array = <MaybeUninit<[T; N]>>::uninit(); | 208 | | // Safety: we are going to decode and initialize all array items and won't read any. | 209 | 3 | let items = unsafe { &mut *array.as_mut_ptr() }; | 210 | 51 | for item in items { | 211 | 48 | *item = <T as Decode>::decode(decoder)?; | 212 | | } | 213 | | // Safety: we have decoded and thus initialized all array items. | 214 | 3 | let array = unsafe { array.assume_init() }; | 215 | 3 | Ok(array) | 216 | 3 | } |
Unexecuted instantiation: <[_; _] as wasmi_ir::decode::Decode>::decode::<_> <[wasmi_core::simd::ImmLaneIdx<32>; 16] as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 206 | 442 | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 207 | 442 | let mut array = <MaybeUninit<[T; N]>>::uninit(); | 208 | | // Safety: we are going to decode and initialize all array items and won't read any. | 209 | 442 | let items = unsafe { &mut *array.as_mut_ptr() }; | 210 | 7.51k | for item in items { | 211 | 7.07k | *item = <T as Decode>::decode(decoder)?; | 212 | | } | 213 | | // Safety: we have decoded and thus initialized all array items. | 214 | 442 | let array = unsafe { array.assume_init() }; | 215 | 442 | Ok(array) | 216 | 442 | } |
Unexecuted instantiation: <[_; _] as wasmi_ir::decode::Decode>::decode::<_> |
217 | | } |
218 | | |
219 | | #[cfg(feature = "simd")] |
220 | | impl<const N: u8> Decode for ImmLaneIdx<N> { |
221 | 234k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { |
222 | 234k | let byte = u8::decode(decoder)?; |
223 | 234k | let lane = ImmLaneIdx::try_from(byte).map_err(|_| DecodeError::InvalidBitPattern)?; |
224 | 234k | Ok(lane) |
225 | 234k | } <wasmi_core::simd::ImmLaneIdx<16> as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 221 | 51.7k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 222 | 51.7k | let byte = u8::decode(decoder)?; | 223 | 51.7k | let lane = ImmLaneIdx::try_from(byte).map_err(|_| DecodeError::InvalidBitPattern)?; | 224 | 51.7k | Ok(lane) | 225 | 51.7k | } |
<wasmi_core::simd::ImmLaneIdx<32> as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 221 | 48 | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 222 | 48 | let byte = u8::decode(decoder)?; | 223 | 48 | let lane = ImmLaneIdx::try_from(byte).map_err(|_| DecodeError::InvalidBitPattern)?; | 224 | 48 | Ok(lane) | 225 | 48 | } |
<wasmi_core::simd::ImmLaneIdx<2> as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 221 | 48.1k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 222 | 48.1k | let byte = u8::decode(decoder)?; | 223 | 48.1k | let lane = ImmLaneIdx::try_from(byte).map_err(|_| DecodeError::InvalidBitPattern)?; | 224 | 48.1k | Ok(lane) | 225 | 48.1k | } |
<wasmi_core::simd::ImmLaneIdx<4> as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 221 | 60.1k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 222 | 60.1k | let byte = u8::decode(decoder)?; | 223 | 60.1k | let lane = ImmLaneIdx::try_from(byte).map_err(|_| DecodeError::InvalidBitPattern)?; | 224 | 60.1k | Ok(lane) | 225 | 60.1k | } |
<wasmi_core::simd::ImmLaneIdx<8> as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 221 | 48.2k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 222 | 48.2k | let byte = u8::decode(decoder)?; | 223 | 48.2k | let lane = ImmLaneIdx::try_from(byte).map_err(|_| DecodeError::InvalidBitPattern)?; | 224 | 48.2k | Ok(lane) | 225 | 48.2k | } |
Unexecuted instantiation: <wasmi_core::simd::ImmLaneIdx<_> as wasmi_ir::decode::Decode>::decode::<_> <wasmi_core::simd::ImmLaneIdx<16> as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 221 | 3.99k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 222 | 3.99k | let byte = u8::decode(decoder)?; | 223 | 3.99k | let lane = ImmLaneIdx::try_from(byte).map_err(|_| DecodeError::InvalidBitPattern)?; | 224 | 3.99k | Ok(lane) | 225 | 3.99k | } |
<wasmi_core::simd::ImmLaneIdx<32> as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 221 | 7.07k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 222 | 7.07k | let byte = u8::decode(decoder)?; | 223 | 7.07k | let lane = ImmLaneIdx::try_from(byte).map_err(|_| DecodeError::InvalidBitPattern)?; | 224 | 7.07k | Ok(lane) | 225 | 7.07k | } |
<wasmi_core::simd::ImmLaneIdx<2> as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 221 | 3.82k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 222 | 3.82k | let byte = u8::decode(decoder)?; | 223 | 3.82k | let lane = ImmLaneIdx::try_from(byte).map_err(|_| DecodeError::InvalidBitPattern)?; | 224 | 3.82k | Ok(lane) | 225 | 3.82k | } |
<wasmi_core::simd::ImmLaneIdx<4> as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 221 | 5.11k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 222 | 5.11k | let byte = u8::decode(decoder)?; | 223 | 5.11k | let lane = ImmLaneIdx::try_from(byte).map_err(|_| DecodeError::InvalidBitPattern)?; | 224 | 5.11k | Ok(lane) | 225 | 5.11k | } |
<wasmi_core::simd::ImmLaneIdx<8> as wasmi_ir::decode::Decode>::decode::<<wasmi::engine::executor::handler::state::Ip>::decode::IpDecoder> Line | Count | Source | 221 | 5.84k | fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> { | 222 | 5.84k | let byte = u8::decode(decoder)?; | 223 | 5.84k | let lane = ImmLaneIdx::try_from(byte).map_err(|_| DecodeError::InvalidBitPattern)?; | 224 | 5.84k | Ok(lane) | 225 | 5.84k | } |
Unexecuted instantiation: <wasmi_core::simd::ImmLaneIdx<_> as wasmi_ir::decode::Decode>::decode::<_> |
226 | | } |
227 | | |
228 | | include!(concat!(env!("OUT_DIR"), "/decode.rs")); |