Skip to main content

fearless_simd/generated/
simd_trait.rs

1// Copyright 2025 the Fearless_SIMD Authors
2// SPDX-License-Identifier: Apache-2.0 OR MIT
3
4// This file is autogenerated by fearless_simd_gen
5
6use crate::{
7    Bytes, Level, Select, SimdCvtFloat, SimdCvtTruncate, SimdElement, SimdFrom, SimdInto,
8    seal::Seal,
9};
10use crate::{
11    f32x4, f32x8, f32x16, f64x2, f64x4, f64x8, i8x16, i8x32, i8x64, i16x8, i16x16, i16x32, i32x4,
12    i32x8, i32x16, mask8x16, mask8x32, mask8x64, mask16x8, mask16x16, mask16x32, mask32x4,
13    mask32x8, mask32x16, mask64x2, mask64x4, mask64x8, u8x16, u8x32, u8x64, u16x8, u16x16, u16x32,
14    u32x4, u32x8, u32x16,
15};
16#[doc = r" The main SIMD trait, implemented by all SIMD token types."]
17#[doc = r""]
18#[doc = r#" Each implementor of this trait (e.g. `Avx2`, `Sse4_2`, `Neon`, `Fallback`) is a zero-sized "token" type"#]
19#[doc = r" representing a specific SIMD instruction set. These tokens are obtained at runtime via [`Level`] and the"]
20#[doc = r" [`dispatch!`](crate::dispatch) macro, which selects the best available backend for the current CPU."]
21#[doc = r""]
22#[doc = r" This trait defines all the low-level SIMD operations (e.g. [`add_f32x4`](Simd::add_f32x4),"]
23#[doc = r" [`mul_u32x4`](Simd::mul_u32x4)) that are implemented by each token type using platform-specific intrinsics."]
24#[doc = r" However, you typically won't call these methods directly. Instead, you'll probably be using the methods"]
25#[doc = r" defined on the vector types themselves."]
26#[doc = r""]
27#[doc = r" # Associated Types"]
28#[doc = r""]
29#[doc = r#" The trait defines associated types for the highest "native" vector width of each scalar type (e.g. `f32s`,"#]
30#[doc = r" `u32s`). These are always at least 128 bits, but may be larger. Currently, they are 128 bits everywhere but"]
31#[doc = r" AVX2, where they are 256 bits."]
32#[doc = r""]
33#[doc = r" # Example"]
34#[doc = r""]
35#[doc = r" ```"]
36#[doc = r" # use fearless_simd::{prelude::*, f32x4, dispatch, Level};"]
37#[doc = r""]
38#[doc = r" #[inline(always)]"]
39#[doc = r" fn add_vectors<S: Simd>(simd: S, a: f32x4<S>, b: f32x4<S>) -> f32x4<S> {"]
40#[doc = r"     a + b  // Uses operator overloading, which calls simd.add_f32x4 internally"]
41#[doc = r" }"]
42#[doc = r""]
43#[doc = r" let level = Level::new();"]
44#[doc = r" dispatch!(level, simd => {"]
45#[doc = r"     let a = [1.0, 2.0, 3.0, 4.0].simd_into(simd);"]
46#[doc = r"     let b = [5.0, 6.0, 7.0, 8.0].simd_into(simd);"]
47#[doc = r"     let result = add_vectors(simd, a, b);"]
48#[doc = r"     # assert_eq!(*result, [6.0, 8.0, 10.0, 12.0]);"]
49#[doc = r" });"]
50#[doc = r" ```"]
51pub trait Simd:
52    Sized + Clone + Copy + Send + Sync + Seal + arch_types::ArchTypes + 'static
53{
54    #[doc = r" A native-width SIMD vector of [`f32`]s."]
55    type f32s: SimdFloat<
56            Self,
57            Element = f32,
58            Block = f32x4<Self>,
59            Mask = Self::mask32s,
60            Bytes = <Self::u32s as Bytes>::Bytes,
61        > + SimdCvtFloat<Self::u32s>
62        + SimdCvtFloat<Self::i32s>;
63    #[doc = r" A native-width SIMD vector of [`f64`]s."]
64    type f64s: SimdFloat<Self, Element = f64, Block = f64x2<Self>, Mask = Self::mask64s>;
65    #[doc = r" A native-width SIMD vector of [`u8`]s."]
66    type u8s: SimdInt<Self, Element = u8, Block = u8x16<Self>, Mask = Self::mask8s>;
67    #[doc = r" A native-width SIMD vector of [`i8`]s."]
68    type i8s: SimdInt<
69            Self,
70            Element = i8,
71            Block = i8x16<Self>,
72            Mask = Self::mask8s,
73            Bytes = <Self::u8s as Bytes>::Bytes,
74        > + core::ops::Neg<Output = Self::i8s>;
75    #[doc = r" A native-width SIMD vector of [`u16`]s."]
76    type u16s: SimdInt<Self, Element = u16, Block = u16x8<Self>, Mask = Self::mask16s>;
77    #[doc = r" A native-width SIMD vector of [`i16`]s."]
78    type i16s: SimdInt<
79            Self,
80            Element = i16,
81            Block = i16x8<Self>,
82            Mask = Self::mask16s,
83            Bytes = <Self::u16s as Bytes>::Bytes,
84        > + core::ops::Neg<Output = Self::i16s>;
85    #[doc = r" A native-width SIMD vector of [`u32`]s."]
86    type u32s: SimdInt<Self, Element = u32, Block = u32x4<Self>, Mask = Self::mask32s>
87        + SimdCvtTruncate<Self::f32s>;
88    #[doc = r" A native-width SIMD vector of [`i32`]s."]
89    type i32s: SimdInt<
90            Self,
91            Element = i32,
92            Block = i32x4<Self>,
93            Mask = Self::mask32s,
94            Bytes = <Self::u32s as Bytes>::Bytes,
95        > + SimdCvtTruncate<Self::f32s>
96        + core::ops::Neg<Output = Self::i32s>;
97    #[doc = r" A native-width SIMD mask with 8-bit lanes."]
98    type mask8s: SimdMask<Self, Element = i8, Block = mask8x16<Self>, Bytes = <Self::u8s as Bytes>::Bytes>
99        + Select<Self::u8s>
100        + Select<Self::i8s>
101        + Select<Self::mask8s>;
102    #[doc = r" A native-width SIMD mask with 16-bit lanes."]
103    type mask16s: SimdMask<Self, Element = i16, Block = mask16x8<Self>, Bytes = <Self::u16s as Bytes>::Bytes>
104        + Select<Self::u16s>
105        + Select<Self::i16s>
106        + Select<Self::mask16s>;
107    #[doc = r" A native-width SIMD mask with 32-bit lanes."]
108    type mask32s: SimdMask<Self, Element = i32, Block = mask32x4<Self>, Bytes = <Self::u32s as Bytes>::Bytes>
109        + Select<Self::f32s>
110        + Select<Self::u32s>
111        + Select<Self::i32s>
112        + Select<Self::mask32s>;
113    #[doc = r" A native-width SIMD mask with 64-bit lanes."]
114    type mask64s: SimdMask<Self, Element = i64, Block = mask64x2<Self>>
115        + Select<Self::f64s>
116        + Select<Self::mask64s>;
117    #[doc = r" This SIMD token's feature level."]
118    fn level(self) -> Level;
119    #[doc = r" Call function with CPU features enabled."]
120    #[doc = r""]
121    #[doc = r" For performance, the provided function should be `#[inline(always)]`."]
122    fn vectorize<F: FnOnce() -> R, R>(self, f: F) -> R;
123    #[doc = "Create a SIMD vector with all elements set to the given value."]
124    fn splat_f32x4(self, val: f32) -> f32x4<Self>;
125    #[doc = "Create a SIMD vector from an array of the same length."]
126    fn load_array_f32x4(self, val: [f32; 4usize]) -> f32x4<Self>;
127    #[doc = "Create a SIMD vector from an array of the same length."]
128    fn load_array_ref_f32x4(self, val: &[f32; 4usize]) -> f32x4<Self>;
129    #[doc = "Convert a SIMD vector to an array."]
130    fn as_array_f32x4(self, a: f32x4<Self>) -> [f32; 4usize];
131    #[doc = "Project a reference to a SIMD vector to a reference to the equivalent array."]
132    fn as_array_ref_f32x4(self, a: &f32x4<Self>) -> &[f32; 4usize];
133    #[doc = "Project a mutable reference to a SIMD vector to a mutable reference to the equivalent array."]
134    fn as_array_mut_f32x4(self, a: &mut f32x4<Self>) -> &mut [f32; 4usize];
135    #[doc = "Store a SIMD vector into an array of the same length."]
136    fn store_array_f32x4(self, a: f32x4<Self>, dest: &mut [f32; 4usize]) -> ();
137    #[doc = "Reinterpret a vector of bytes as a SIMD vector of a given type, with the equivalent byte length."]
138    fn cvt_from_bytes_f32x4(self, a: u8x16<Self>) -> f32x4<Self>;
139    #[doc = "Reinterpret a SIMD vector as a vector of bytes, with the equivalent byte length."]
140    fn cvt_to_bytes_f32x4(self, a: f32x4<Self>) -> u8x16<Self>;
141    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
142    fn slide_f32x4<const SHIFT: usize>(self, a: f32x4<Self>, b: f32x4<Self>) -> f32x4<Self>;
143    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
144    fn slide_within_blocks_f32x4<const SHIFT: usize>(
145        self,
146        a: f32x4<Self>,
147        b: f32x4<Self>,
148    ) -> f32x4<Self>;
149    #[doc = "Compute the absolute value of each element."]
150    fn abs_f32x4(self, a: f32x4<Self>) -> f32x4<Self>;
151    #[doc = "Negate each element of the vector."]
152    fn neg_f32x4(self, a: f32x4<Self>) -> f32x4<Self>;
153    #[doc = "Compute the square root of each element.\n\nNegative elements other than `-0.0` will become NaN."]
154    fn sqrt_f32x4(self, a: f32x4<Self>) -> f32x4<Self>;
155    #[doc = "Add two vectors element-wise."]
156    fn add_f32x4(self, a: f32x4<Self>, b: f32x4<Self>) -> f32x4<Self>;
157    #[doc = "Subtract two vectors element-wise."]
158    fn sub_f32x4(self, a: f32x4<Self>, b: f32x4<Self>) -> f32x4<Self>;
159    #[doc = "Multiply two vectors element-wise."]
160    fn mul_f32x4(self, a: f32x4<Self>, b: f32x4<Self>) -> f32x4<Self>;
161    #[doc = "Divide two vectors element-wise."]
162    fn div_f32x4(self, a: f32x4<Self>, b: f32x4<Self>) -> f32x4<Self>;
163    #[doc = "Return a vector with the magnitude of `a` and the sign of `b` for each element.\n\nThis operation copies the sign bit, so if an input element is NaN, the output element will be a NaN with the same payload and a copied sign bit."]
164    fn copysign_f32x4(self, a: f32x4<Self>, b: f32x4<Self>) -> f32x4<Self>;
165    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
166    fn simd_eq_f32x4(self, a: f32x4<Self>, b: f32x4<Self>) -> mask32x4<Self>;
167    #[doc = "Compare two vectors element-wise for less than.\n\nReturns a mask where each element is all ones if `a` is less than `b`, and all zeroes if not."]
168    fn simd_lt_f32x4(self, a: f32x4<Self>, b: f32x4<Self>) -> mask32x4<Self>;
169    #[doc = "Compare two vectors element-wise for less than or equal.\n\nReturns a mask where each element is all ones if `a` is less than or equal to `b`, and all zeroes if not."]
170    fn simd_le_f32x4(self, a: f32x4<Self>, b: f32x4<Self>) -> mask32x4<Self>;
171    #[doc = "Compare two vectors element-wise for greater than or equal.\n\nReturns a mask where each element is all ones if `a` is greater than or equal to `b`, and all zeroes if not."]
172    fn simd_ge_f32x4(self, a: f32x4<Self>, b: f32x4<Self>) -> mask32x4<Self>;
173    #[doc = "Compare two vectors element-wise for greater than.\n\nReturns a mask where each element is all ones if `a` is greater than `b`, and all zeroes if not."]
174    fn simd_gt_f32x4(self, a: f32x4<Self>, b: f32x4<Self>) -> mask32x4<Self>;
175    #[doc = "Interleave the lower half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, b0, a1, b1]`.\n\n**Note:** This operation is only useful if you need to discard elements `a2, a3, b2, b3`.\n        For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
176    fn zip_low_f32x4(self, a: f32x4<Self>, b: f32x4<Self>) -> f32x4<Self>;
177    #[doc = "Interleave the upper half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a2, b2, a3, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a1, b0, b1`.For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
178    fn zip_high_f32x4(self, a: f32x4<Self>, b: f32x4<Self>) -> f32x4<Self>;
179    #[doc = "Extract even-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, a2, b0, b2]`.\n\n**Note:** This operation is only useful if you need to discard elements `a1, a3, b1, b3`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
180    fn unzip_low_f32x4(self, a: f32x4<Self>, b: f32x4<Self>) -> f32x4<Self>;
181    #[doc = "Extract odd-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a1, a3, b1, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a2, b0, b2`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
182    fn unzip_high_f32x4(self, a: f32x4<Self>, b: f32x4<Self>) -> f32x4<Self>;
183    #[doc = "Interleave two vectors.\n\nThe resulting vectors contain elements taken alternately from `a` and `b`, first filling the first result, and then the second.\n\nThe reverse of this operation is `deinterleave`.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `([a0, b0, a1, b1], [a2, b2, a3, b3])`."]
184    fn interleave_f32x4(self, a: f32x4<Self>, b: f32x4<Self>) -> (f32x4<Self>, f32x4<Self>);
185    #[doc = "Deinterleave two vectors.\n\nThe first result contains all even-indexed elements from `a` followed by all even-indexed elements from `b`. The second result contains all odd-indexed elements from `a` followed by all odd-indexed elements from `b`.\n\nThe reverse of this operation is `interleave`.\n\nFor vectors `[a0, b0, a1, b1]` and `[a2, b2, a3, b3]`, returns `([a0, a1, a2, a3], [b0, b1, b2, b3])`."]
186    fn deinterleave_f32x4(self, a: f32x4<Self>, b: f32x4<Self>) -> (f32x4<Self>, f32x4<Self>);
187    #[doc = "Return the element-wise maximum of two vectors.\n\nIf either operand is NaN, the result for that lane is implementation-defined-- it could be either the first or second operand. See `max_precise` for a version that returns the non-NaN operand if only one is NaN.\n\nIf one operand is positive zero and the other is negative zero, the result is also implementation-defined, and it could be either one."]
188    fn max_f32x4(self, a: f32x4<Self>, b: f32x4<Self>) -> f32x4<Self>;
189    #[doc = "Return the element-wise minimum of two vectors.\n\nIf either operand is NaN, the result for that lane is implementation-defined-- it could be either the first or second operand. See `min_precise` for a version that returns the non-NaN operand if only one is NaN.\n\nIf one operand is positive zero and the other is negative zero, the result is also implementation-defined, and it could be either one."]
190    fn min_f32x4(self, a: f32x4<Self>, b: f32x4<Self>) -> f32x4<Self>;
191    #[doc = "Return the element-wise maximum of two vectors.\n\nIf one operand is a quiet NaN and the other is not, this operation will choose the non-NaN operand.\n\nIf one operand is positive zero and the other is negative zero, the result is implementation-defined, and it could be either one.\n\nIf an operand is a *signaling* NaN, the result is not just implementation-defined, but fully non-deterministic: it may be either NaN or the non-NaN operand.\nSignaling NaN values are not produced by floating-point math operations, only from manual initialization with specific bit patterns. You probably don't need to worry about them."]
192    fn max_precise_f32x4(self, a: f32x4<Self>, b: f32x4<Self>) -> f32x4<Self>;
193    #[doc = "Return the element-wise minimum of two vectors.\n\nIf one operand is a quiet NaN and the other is not, this operation will choose the non-NaN operand.\n\nIf one operand is positive zero and the other is negative zero, the result is implementation-defined, and it could be either one.\n\nIf an operand is a *signaling* NaN, the result is not just implementation-defined, but fully non-deterministic: it may be either NaN or the non-NaN operand.\nSignaling NaN values are not produced by floating-point math operations, only from manual initialization with specific bit patterns. You probably don't need to worry about them."]
194    fn min_precise_f32x4(self, a: f32x4<Self>, b: f32x4<Self>) -> f32x4<Self>;
195    #[doc = "Compute `(a * b) + c` (fused multiply-add) for each element.\n\nDepending on hardware support, the result may be computed with only one rounding error, or may be implemented as a regular multiply followed by an add, which will result in two rounding errors."]
196    fn mul_add_f32x4(self, a: f32x4<Self>, b: f32x4<Self>, c: f32x4<Self>) -> f32x4<Self>;
197    #[doc = "Compute `(a * b) - c` (fused multiply-subtract) for each element.\n\nDepending on hardware support, the result may be computed with only one rounding error, or may be implemented as a regular multiply followed by a subtract, which will result in two rounding errors."]
198    fn mul_sub_f32x4(self, a: f32x4<Self>, b: f32x4<Self>, c: f32x4<Self>) -> f32x4<Self>;
199    #[doc = "Return the largest integer less than or equal to each element, that is, round towards negative infinity."]
200    fn floor_f32x4(self, a: f32x4<Self>) -> f32x4<Self>;
201    #[doc = "Return the smallest integer greater than or equal to each element, that is, round towards positive infinity."]
202    fn ceil_f32x4(self, a: f32x4<Self>) -> f32x4<Self>;
203    #[doc = "Round each element to the nearest integer, with ties rounding to the nearest even integer.\n\nThere is no corresponding `round` operation. Rust's `round` operation rounds ties away from zero, a behavior it inherited from C. That behavior is not implemented across all platforms, whereas round-ties-even is."]
204    fn round_ties_even_f32x4(self, a: f32x4<Self>) -> f32x4<Self>;
205    #[doc = "Return the fractional part of each element.\n\nThis is equivalent to `a - a.trunc()`."]
206    fn fract_f32x4(self, a: f32x4<Self>) -> f32x4<Self>;
207    #[doc = "Return the integer part of each element, rounding towards zero."]
208    fn trunc_f32x4(self, a: f32x4<Self>) -> f32x4<Self>;
209    #[doc = "Select elements from b and c based on the mask operand a.\n\nThis operation's behavior is unspecified if each lane of a is not the all-zeroes or all-ones bit pattern. See the [`Select`] trait's documentation for more information."]
210    fn select_f32x4(self, a: mask32x4<Self>, b: f32x4<Self>, c: f32x4<Self>) -> f32x4<Self>;
211    #[doc = "Combine two vectors into a single vector with twice the width.\n\n`a` provides the lower elements and `b` provides the upper elements."]
212    fn combine_f32x4(self, a: f32x4<Self>, b: f32x4<Self>) -> f32x8<Self>;
213    #[doc = "Reinterpret the bits of this vector as a vector of `f64` elements.\n\nThe number of elements in the result is half that of the input."]
214    fn reinterpret_f64_f32x4(self, a: f32x4<Self>) -> f64x2<Self>;
215    #[doc = "Reinterpret the bits of this vector as a vector of `i32` elements.\n\nThis is a bitwise reinterpretation only, and does not perform any conversions."]
216    fn reinterpret_i32_f32x4(self, a: f32x4<Self>) -> i32x4<Self>;
217    #[doc = "Reinterpret the bits of this vector as a vector of `u8` elements.\n\nThe total bit width is preserved; the number of elements changes accordingly."]
218    fn reinterpret_u8_f32x4(self, a: f32x4<Self>) -> u8x16<Self>;
219    #[doc = "Reinterpret the bits of this vector as a vector of `u32` elements.\n\nThe total bit width is preserved; the number of elements changes accordingly."]
220    fn reinterpret_u32_f32x4(self, a: f32x4<Self>) -> u32x4<Self>;
221    #[doc = "Convert each floating-point element to an unsigned 32-bit integer, truncating towards zero.\n\nOut-of-range values or NaN will produce implementation-defined results.\n\nOn x86 platforms, this operation will still be slower than converting to `i32`, because there is no native instruction for converting to `u32` (at least until AVX-512, which is currently not supported).\nIf you know your values fit within range of an `i32`, you should convert to an `i32` and cast to your desired datatype afterwards."]
222    fn cvt_u32_f32x4(self, a: f32x4<Self>) -> u32x4<Self>;
223    #[doc = "Convert each floating-point element to an unsigned 32-bit integer, truncating towards zero.\n\nOut-of-range values are saturated to the closest in-range value. NaN becomes 0."]
224    fn cvt_u32_precise_f32x4(self, a: f32x4<Self>) -> u32x4<Self>;
225    #[doc = "Convert each floating-point element to a signed 32-bit integer, truncating towards zero.\n\nOut-of-range values or NaN will produce implementation-defined results."]
226    fn cvt_i32_f32x4(self, a: f32x4<Self>) -> i32x4<Self>;
227    #[doc = "Convert each floating-point element to a signed 32-bit integer, truncating towards zero.\n\nOut-of-range values are saturated to the closest in-range value. NaN becomes 0."]
228    fn cvt_i32_precise_f32x4(self, a: f32x4<Self>) -> i32x4<Self>;
229    #[doc = "Create a SIMD vector with all elements set to the given value."]
230    fn splat_i8x16(self, val: i8) -> i8x16<Self>;
231    #[doc = "Create a SIMD vector from an array of the same length."]
232    fn load_array_i8x16(self, val: [i8; 16usize]) -> i8x16<Self>;
233    #[doc = "Create a SIMD vector from an array of the same length."]
234    fn load_array_ref_i8x16(self, val: &[i8; 16usize]) -> i8x16<Self>;
235    #[doc = "Convert a SIMD vector to an array."]
236    fn as_array_i8x16(self, a: i8x16<Self>) -> [i8; 16usize];
237    #[doc = "Project a reference to a SIMD vector to a reference to the equivalent array."]
238    fn as_array_ref_i8x16(self, a: &i8x16<Self>) -> &[i8; 16usize];
239    #[doc = "Project a mutable reference to a SIMD vector to a mutable reference to the equivalent array."]
240    fn as_array_mut_i8x16(self, a: &mut i8x16<Self>) -> &mut [i8; 16usize];
241    #[doc = "Store a SIMD vector into an array of the same length."]
242    fn store_array_i8x16(self, a: i8x16<Self>, dest: &mut [i8; 16usize]) -> ();
243    #[doc = "Reinterpret a vector of bytes as a SIMD vector of a given type, with the equivalent byte length."]
244    fn cvt_from_bytes_i8x16(self, a: u8x16<Self>) -> i8x16<Self>;
245    #[doc = "Reinterpret a SIMD vector as a vector of bytes, with the equivalent byte length."]
246    fn cvt_to_bytes_i8x16(self, a: i8x16<Self>) -> u8x16<Self>;
247    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
248    fn slide_i8x16<const SHIFT: usize>(self, a: i8x16<Self>, b: i8x16<Self>) -> i8x16<Self>;
249    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
250    fn slide_within_blocks_i8x16<const SHIFT: usize>(
251        self,
252        a: i8x16<Self>,
253        b: i8x16<Self>,
254    ) -> i8x16<Self>;
255    #[doc = "Add two vectors element-wise, wrapping on overflow."]
256    fn add_i8x16(self, a: i8x16<Self>, b: i8x16<Self>) -> i8x16<Self>;
257    #[doc = "Subtract two vectors element-wise, wrapping on overflow."]
258    fn sub_i8x16(self, a: i8x16<Self>, b: i8x16<Self>) -> i8x16<Self>;
259    #[doc = "Multiply two vectors element-wise, wrapping on overflow."]
260    fn mul_i8x16(self, a: i8x16<Self>, b: i8x16<Self>) -> i8x16<Self>;
261    #[doc = "Compute the bitwise AND of two vectors."]
262    fn and_i8x16(self, a: i8x16<Self>, b: i8x16<Self>) -> i8x16<Self>;
263    #[doc = "Compute the bitwise OR of two vectors."]
264    fn or_i8x16(self, a: i8x16<Self>, b: i8x16<Self>) -> i8x16<Self>;
265    #[doc = "Compute the bitwise XOR of two vectors."]
266    fn xor_i8x16(self, a: i8x16<Self>, b: i8x16<Self>) -> i8x16<Self>;
267    #[doc = "Compute the bitwise NOT of the vector."]
268    fn not_i8x16(self, a: i8x16<Self>) -> i8x16<Self>;
269    #[doc = "Shift each element left by the given number of bits.\n\nBits shifted out of the left side are discarded, and zeros are shifted in on the right."]
270    fn shl_i8x16(self, a: i8x16<Self>, shift: u32) -> i8x16<Self>;
271    #[doc = "Shift each element left by the given number of bits.\n\nBits shifted out of the left side are discarded, and zeros are shifted in on the right.\n\nThis operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation."]
272    fn shlv_i8x16(self, a: i8x16<Self>, b: i8x16<Self>) -> i8x16<Self>;
273    #[doc = "Shift each element right by the given number of bits.\n\nFor unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated."]
274    fn shr_i8x16(self, a: i8x16<Self>, shift: u32) -> i8x16<Self>;
275    #[doc = "Shift each element right by the corresponding element in another vector.\n\nFor unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated.\n\nThis operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation."]
276    fn shrv_i8x16(self, a: i8x16<Self>, b: i8x16<Self>) -> i8x16<Self>;
277    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
278    fn simd_eq_i8x16(self, a: i8x16<Self>, b: i8x16<Self>) -> mask8x16<Self>;
279    #[doc = "Compare two vectors element-wise for less than.\n\nReturns a mask where each element is all ones if `a` is less than `b`, and all zeroes if not."]
280    fn simd_lt_i8x16(self, a: i8x16<Self>, b: i8x16<Self>) -> mask8x16<Self>;
281    #[doc = "Compare two vectors element-wise for less than or equal.\n\nReturns a mask where each element is all ones if `a` is less than or equal to `b`, and all zeroes if not."]
282    fn simd_le_i8x16(self, a: i8x16<Self>, b: i8x16<Self>) -> mask8x16<Self>;
283    #[doc = "Compare two vectors element-wise for greater than or equal.\n\nReturns a mask where each element is all ones if `a` is greater than or equal to `b`, and all zeroes if not."]
284    fn simd_ge_i8x16(self, a: i8x16<Self>, b: i8x16<Self>) -> mask8x16<Self>;
285    #[doc = "Compare two vectors element-wise for greater than.\n\nReturns a mask where each element is all ones if `a` is greater than `b`, and all zeroes if not."]
286    fn simd_gt_i8x16(self, a: i8x16<Self>, b: i8x16<Self>) -> mask8x16<Self>;
287    #[doc = "Interleave the lower half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, b0, a1, b1]`.\n\n**Note:** This operation is only useful if you need to discard elements `a2, a3, b2, b3`.\n        For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
288    fn zip_low_i8x16(self, a: i8x16<Self>, b: i8x16<Self>) -> i8x16<Self>;
289    #[doc = "Interleave the upper half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a2, b2, a3, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a1, b0, b1`.For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
290    fn zip_high_i8x16(self, a: i8x16<Self>, b: i8x16<Self>) -> i8x16<Self>;
291    #[doc = "Extract even-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, a2, b0, b2]`.\n\n**Note:** This operation is only useful if you need to discard elements `a1, a3, b1, b3`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
292    fn unzip_low_i8x16(self, a: i8x16<Self>, b: i8x16<Self>) -> i8x16<Self>;
293    #[doc = "Extract odd-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a1, a3, b1, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a2, b0, b2`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
294    fn unzip_high_i8x16(self, a: i8x16<Self>, b: i8x16<Self>) -> i8x16<Self>;
295    #[doc = "Interleave two vectors.\n\nThe resulting vectors contain elements taken alternately from `a` and `b`, first filling the first result, and then the second.\n\nThe reverse of this operation is `deinterleave`.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `([a0, b0, a1, b1], [a2, b2, a3, b3])`."]
296    fn interleave_i8x16(self, a: i8x16<Self>, b: i8x16<Self>) -> (i8x16<Self>, i8x16<Self>);
297    #[doc = "Deinterleave two vectors.\n\nThe first result contains all even-indexed elements from `a` followed by all even-indexed elements from `b`. The second result contains all odd-indexed elements from `a` followed by all odd-indexed elements from `b`.\n\nThe reverse of this operation is `interleave`.\n\nFor vectors `[a0, b0, a1, b1]` and `[a2, b2, a3, b3]`, returns `([a0, a1, a2, a3], [b0, b1, b2, b3])`."]
298    fn deinterleave_i8x16(self, a: i8x16<Self>, b: i8x16<Self>) -> (i8x16<Self>, i8x16<Self>);
299    #[doc = "Select elements from b and c based on the mask operand a.\n\nThis operation's behavior is unspecified if each lane of a is not the all-zeroes or all-ones bit pattern. See the [`Select`] trait's documentation for more information."]
300    fn select_i8x16(self, a: mask8x16<Self>, b: i8x16<Self>, c: i8x16<Self>) -> i8x16<Self>;
301    #[doc = "Return the element-wise minimum of two vectors."]
302    fn min_i8x16(self, a: i8x16<Self>, b: i8x16<Self>) -> i8x16<Self>;
303    #[doc = "Return the element-wise maximum of two vectors."]
304    fn max_i8x16(self, a: i8x16<Self>, b: i8x16<Self>) -> i8x16<Self>;
305    #[doc = "Combine two vectors into a single vector with twice the width.\n\n`a` provides the lower elements and `b` provides the upper elements."]
306    fn combine_i8x16(self, a: i8x16<Self>, b: i8x16<Self>) -> i8x32<Self>;
307    #[doc = "Negate each element of the vector, wrapping on overflow."]
308    fn neg_i8x16(self, a: i8x16<Self>) -> i8x16<Self>;
309    #[doc = "Reinterpret the bits of this vector as a vector of `u8` elements.\n\nThe total bit width is preserved; the number of elements changes accordingly."]
310    fn reinterpret_u8_i8x16(self, a: i8x16<Self>) -> u8x16<Self>;
311    #[doc = "Reinterpret the bits of this vector as a vector of `u32` elements.\n\nThe total bit width is preserved; the number of elements changes accordingly."]
312    fn reinterpret_u32_i8x16(self, a: i8x16<Self>) -> u32x4<Self>;
313    #[doc = "Create a SIMD vector with all elements set to the given value."]
314    fn splat_u8x16(self, val: u8) -> u8x16<Self>;
315    #[doc = "Create a SIMD vector from an array of the same length."]
316    fn load_array_u8x16(self, val: [u8; 16usize]) -> u8x16<Self>;
317    #[doc = "Create a SIMD vector from an array of the same length."]
318    fn load_array_ref_u8x16(self, val: &[u8; 16usize]) -> u8x16<Self>;
319    #[doc = "Convert a SIMD vector to an array."]
320    fn as_array_u8x16(self, a: u8x16<Self>) -> [u8; 16usize];
321    #[doc = "Project a reference to a SIMD vector to a reference to the equivalent array."]
322    fn as_array_ref_u8x16(self, a: &u8x16<Self>) -> &[u8; 16usize];
323    #[doc = "Project a mutable reference to a SIMD vector to a mutable reference to the equivalent array."]
324    fn as_array_mut_u8x16(self, a: &mut u8x16<Self>) -> &mut [u8; 16usize];
325    #[doc = "Store a SIMD vector into an array of the same length."]
326    fn store_array_u8x16(self, a: u8x16<Self>, dest: &mut [u8; 16usize]) -> ();
327    #[doc = "Reinterpret a vector of bytes as a SIMD vector of a given type, with the equivalent byte length."]
328    fn cvt_from_bytes_u8x16(self, a: u8x16<Self>) -> u8x16<Self>;
329    #[doc = "Reinterpret a SIMD vector as a vector of bytes, with the equivalent byte length."]
330    fn cvt_to_bytes_u8x16(self, a: u8x16<Self>) -> u8x16<Self>;
331    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
332    fn slide_u8x16<const SHIFT: usize>(self, a: u8x16<Self>, b: u8x16<Self>) -> u8x16<Self>;
333    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
334    fn slide_within_blocks_u8x16<const SHIFT: usize>(
335        self,
336        a: u8x16<Self>,
337        b: u8x16<Self>,
338    ) -> u8x16<Self>;
339    #[doc = "Add two vectors element-wise, wrapping on overflow."]
340    fn add_u8x16(self, a: u8x16<Self>, b: u8x16<Self>) -> u8x16<Self>;
341    #[doc = "Subtract two vectors element-wise, wrapping on overflow."]
342    fn sub_u8x16(self, a: u8x16<Self>, b: u8x16<Self>) -> u8x16<Self>;
343    #[doc = "Multiply two vectors element-wise, wrapping on overflow."]
344    fn mul_u8x16(self, a: u8x16<Self>, b: u8x16<Self>) -> u8x16<Self>;
345    #[doc = "Compute the bitwise AND of two vectors."]
346    fn and_u8x16(self, a: u8x16<Self>, b: u8x16<Self>) -> u8x16<Self>;
347    #[doc = "Compute the bitwise OR of two vectors."]
348    fn or_u8x16(self, a: u8x16<Self>, b: u8x16<Self>) -> u8x16<Self>;
349    #[doc = "Compute the bitwise XOR of two vectors."]
350    fn xor_u8x16(self, a: u8x16<Self>, b: u8x16<Self>) -> u8x16<Self>;
351    #[doc = "Compute the bitwise NOT of the vector."]
352    fn not_u8x16(self, a: u8x16<Self>) -> u8x16<Self>;
353    #[doc = "Shift each element left by the given number of bits.\n\nBits shifted out of the left side are discarded, and zeros are shifted in on the right."]
354    fn shl_u8x16(self, a: u8x16<Self>, shift: u32) -> u8x16<Self>;
355    #[doc = "Shift each element left by the given number of bits.\n\nBits shifted out of the left side are discarded, and zeros are shifted in on the right.\n\nThis operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation."]
356    fn shlv_u8x16(self, a: u8x16<Self>, b: u8x16<Self>) -> u8x16<Self>;
357    #[doc = "Shift each element right by the given number of bits.\n\nFor unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated."]
358    fn shr_u8x16(self, a: u8x16<Self>, shift: u32) -> u8x16<Self>;
359    #[doc = "Shift each element right by the corresponding element in another vector.\n\nFor unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated.\n\nThis operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation."]
360    fn shrv_u8x16(self, a: u8x16<Self>, b: u8x16<Self>) -> u8x16<Self>;
361    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
362    fn simd_eq_u8x16(self, a: u8x16<Self>, b: u8x16<Self>) -> mask8x16<Self>;
363    #[doc = "Compare two vectors element-wise for less than.\n\nReturns a mask where each element is all ones if `a` is less than `b`, and all zeroes if not."]
364    fn simd_lt_u8x16(self, a: u8x16<Self>, b: u8x16<Self>) -> mask8x16<Self>;
365    #[doc = "Compare two vectors element-wise for less than or equal.\n\nReturns a mask where each element is all ones if `a` is less than or equal to `b`, and all zeroes if not."]
366    fn simd_le_u8x16(self, a: u8x16<Self>, b: u8x16<Self>) -> mask8x16<Self>;
367    #[doc = "Compare two vectors element-wise for greater than or equal.\n\nReturns a mask where each element is all ones if `a` is greater than or equal to `b`, and all zeroes if not."]
368    fn simd_ge_u8x16(self, a: u8x16<Self>, b: u8x16<Self>) -> mask8x16<Self>;
369    #[doc = "Compare two vectors element-wise for greater than.\n\nReturns a mask where each element is all ones if `a` is greater than `b`, and all zeroes if not."]
370    fn simd_gt_u8x16(self, a: u8x16<Self>, b: u8x16<Self>) -> mask8x16<Self>;
371    #[doc = "Interleave the lower half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, b0, a1, b1]`.\n\n**Note:** This operation is only useful if you need to discard elements `a2, a3, b2, b3`.\n        For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
372    fn zip_low_u8x16(self, a: u8x16<Self>, b: u8x16<Self>) -> u8x16<Self>;
373    #[doc = "Interleave the upper half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a2, b2, a3, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a1, b0, b1`.For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
374    fn zip_high_u8x16(self, a: u8x16<Self>, b: u8x16<Self>) -> u8x16<Self>;
375    #[doc = "Extract even-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, a2, b0, b2]`.\n\n**Note:** This operation is only useful if you need to discard elements `a1, a3, b1, b3`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
376    fn unzip_low_u8x16(self, a: u8x16<Self>, b: u8x16<Self>) -> u8x16<Self>;
377    #[doc = "Extract odd-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a1, a3, b1, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a2, b0, b2`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
378    fn unzip_high_u8x16(self, a: u8x16<Self>, b: u8x16<Self>) -> u8x16<Self>;
379    #[doc = "Interleave two vectors.\n\nThe resulting vectors contain elements taken alternately from `a` and `b`, first filling the first result, and then the second.\n\nThe reverse of this operation is `deinterleave`.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `([a0, b0, a1, b1], [a2, b2, a3, b3])`."]
380    fn interleave_u8x16(self, a: u8x16<Self>, b: u8x16<Self>) -> (u8x16<Self>, u8x16<Self>);
381    #[doc = "Deinterleave two vectors.\n\nThe first result contains all even-indexed elements from `a` followed by all even-indexed elements from `b`. The second result contains all odd-indexed elements from `a` followed by all odd-indexed elements from `b`.\n\nThe reverse of this operation is `interleave`.\n\nFor vectors `[a0, b0, a1, b1]` and `[a2, b2, a3, b3]`, returns `([a0, a1, a2, a3], [b0, b1, b2, b3])`."]
382    fn deinterleave_u8x16(self, a: u8x16<Self>, b: u8x16<Self>) -> (u8x16<Self>, u8x16<Self>);
383    #[doc = "Select elements from b and c based on the mask operand a.\n\nThis operation's behavior is unspecified if each lane of a is not the all-zeroes or all-ones bit pattern. See the [`Select`] trait's documentation for more information."]
384    fn select_u8x16(self, a: mask8x16<Self>, b: u8x16<Self>, c: u8x16<Self>) -> u8x16<Self>;
385    #[doc = "Return the element-wise minimum of two vectors."]
386    fn min_u8x16(self, a: u8x16<Self>, b: u8x16<Self>) -> u8x16<Self>;
387    #[doc = "Return the element-wise maximum of two vectors."]
388    fn max_u8x16(self, a: u8x16<Self>, b: u8x16<Self>) -> u8x16<Self>;
389    #[doc = "Combine two vectors into a single vector with twice the width.\n\n`a` provides the lower elements and `b` provides the upper elements."]
390    fn combine_u8x16(self, a: u8x16<Self>, b: u8x16<Self>) -> u8x32<Self>;
391    #[doc = "Zero-extend each element to a wider integer type.\n\nThe number of elements in the result is half that of the input."]
392    fn widen_u8x16(self, a: u8x16<Self>) -> u16x16<Self>;
393    #[doc = "Reinterpret the bits of this vector as a vector of `u32` elements.\n\nThe total bit width is preserved; the number of elements changes accordingly."]
394    fn reinterpret_u32_u8x16(self, a: u8x16<Self>) -> u32x4<Self>;
395    #[doc = "Create a SIMD vector with all elements set to the given value."]
396    fn splat_mask8x16(self, val: i8) -> mask8x16<Self>;
397    #[doc = "Create a SIMD vector from an array of the same length."]
398    fn load_array_mask8x16(self, val: [i8; 16usize]) -> mask8x16<Self>;
399    #[doc = "Create a SIMD vector from an array of the same length."]
400    fn load_array_ref_mask8x16(self, val: &[i8; 16usize]) -> mask8x16<Self>;
401    #[doc = "Convert a SIMD vector to an array."]
402    fn as_array_mask8x16(self, a: mask8x16<Self>) -> [i8; 16usize];
403    #[doc = "Project a reference to a SIMD vector to a reference to the equivalent array."]
404    fn as_array_ref_mask8x16(self, a: &mask8x16<Self>) -> &[i8; 16usize];
405    #[doc = "Project a mutable reference to a SIMD vector to a mutable reference to the equivalent array."]
406    fn as_array_mut_mask8x16(self, a: &mut mask8x16<Self>) -> &mut [i8; 16usize];
407    #[doc = "Store a SIMD vector into an array of the same length."]
408    fn store_array_mask8x16(self, a: mask8x16<Self>, dest: &mut [i8; 16usize]) -> ();
409    #[doc = "Reinterpret a vector of bytes as a SIMD vector of a given type, with the equivalent byte length."]
410    fn cvt_from_bytes_mask8x16(self, a: u8x16<Self>) -> mask8x16<Self>;
411    #[doc = "Reinterpret a SIMD vector as a vector of bytes, with the equivalent byte length."]
412    fn cvt_to_bytes_mask8x16(self, a: mask8x16<Self>) -> u8x16<Self>;
413    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
414    fn slide_mask8x16<const SHIFT: usize>(
415        self,
416        a: mask8x16<Self>,
417        b: mask8x16<Self>,
418    ) -> mask8x16<Self>;
419    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
420    fn slide_within_blocks_mask8x16<const SHIFT: usize>(
421        self,
422        a: mask8x16<Self>,
423        b: mask8x16<Self>,
424    ) -> mask8x16<Self>;
425    #[doc = "Compute the logical AND of two masks."]
426    fn and_mask8x16(self, a: mask8x16<Self>, b: mask8x16<Self>) -> mask8x16<Self>;
427    #[doc = "Compute the logical OR of two masks."]
428    fn or_mask8x16(self, a: mask8x16<Self>, b: mask8x16<Self>) -> mask8x16<Self>;
429    #[doc = "Compute the logical XOR of two masks."]
430    fn xor_mask8x16(self, a: mask8x16<Self>, b: mask8x16<Self>) -> mask8x16<Self>;
431    #[doc = "Compute the logical NOT of the mask."]
432    fn not_mask8x16(self, a: mask8x16<Self>) -> mask8x16<Self>;
433    #[doc = "Select elements from `b` and `c` based on the mask operand `a`.\n\nThis operation's behavior is unspecified if each lane of a is not the all-zeroes or all-ones bit pattern. See the [`Select`] trait's documentation for more information."]
434    fn select_mask8x16(
435        self,
436        a: mask8x16<Self>,
437        b: mask8x16<Self>,
438        c: mask8x16<Self>,
439    ) -> mask8x16<Self>;
440    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
441    fn simd_eq_mask8x16(self, a: mask8x16<Self>, b: mask8x16<Self>) -> mask8x16<Self>;
442    #[doc = "Returns true if any elements in this mask are true (all ones).\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
443    fn any_true_mask8x16(self, a: mask8x16<Self>) -> bool;
444    #[doc = "Returns true if all elements in this mask are true (all ones).\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
445    fn all_true_mask8x16(self, a: mask8x16<Self>) -> bool;
446    #[doc = "Returns true if any elements in this mask are false (all zeroes).\n\nThis is logically equivalent to `!all_true`, but may be faster.\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
447    fn any_false_mask8x16(self, a: mask8x16<Self>) -> bool;
448    #[doc = "Returns true if all elements in this mask are false (all zeroes).\n\nThis is logically equivalent to `!any_true`, but may be faster.\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
449    fn all_false_mask8x16(self, a: mask8x16<Self>) -> bool;
450    #[doc = "Combine two vectors into a single vector with twice the width.\n\n`a` provides the lower elements and `b` provides the upper elements."]
451    fn combine_mask8x16(self, a: mask8x16<Self>, b: mask8x16<Self>) -> mask8x32<Self>;
452    #[doc = "Create a SIMD vector with all elements set to the given value."]
453    fn splat_i16x8(self, val: i16) -> i16x8<Self>;
454    #[doc = "Create a SIMD vector from an array of the same length."]
455    fn load_array_i16x8(self, val: [i16; 8usize]) -> i16x8<Self>;
456    #[doc = "Create a SIMD vector from an array of the same length."]
457    fn load_array_ref_i16x8(self, val: &[i16; 8usize]) -> i16x8<Self>;
458    #[doc = "Convert a SIMD vector to an array."]
459    fn as_array_i16x8(self, a: i16x8<Self>) -> [i16; 8usize];
460    #[doc = "Project a reference to a SIMD vector to a reference to the equivalent array."]
461    fn as_array_ref_i16x8(self, a: &i16x8<Self>) -> &[i16; 8usize];
462    #[doc = "Project a mutable reference to a SIMD vector to a mutable reference to the equivalent array."]
463    fn as_array_mut_i16x8(self, a: &mut i16x8<Self>) -> &mut [i16; 8usize];
464    #[doc = "Store a SIMD vector into an array of the same length."]
465    fn store_array_i16x8(self, a: i16x8<Self>, dest: &mut [i16; 8usize]) -> ();
466    #[doc = "Reinterpret a vector of bytes as a SIMD vector of a given type, with the equivalent byte length."]
467    fn cvt_from_bytes_i16x8(self, a: u8x16<Self>) -> i16x8<Self>;
468    #[doc = "Reinterpret a SIMD vector as a vector of bytes, with the equivalent byte length."]
469    fn cvt_to_bytes_i16x8(self, a: i16x8<Self>) -> u8x16<Self>;
470    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
471    fn slide_i16x8<const SHIFT: usize>(self, a: i16x8<Self>, b: i16x8<Self>) -> i16x8<Self>;
472    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
473    fn slide_within_blocks_i16x8<const SHIFT: usize>(
474        self,
475        a: i16x8<Self>,
476        b: i16x8<Self>,
477    ) -> i16x8<Self>;
478    #[doc = "Add two vectors element-wise, wrapping on overflow."]
479    fn add_i16x8(self, a: i16x8<Self>, b: i16x8<Self>) -> i16x8<Self>;
480    #[doc = "Subtract two vectors element-wise, wrapping on overflow."]
481    fn sub_i16x8(self, a: i16x8<Self>, b: i16x8<Self>) -> i16x8<Self>;
482    #[doc = "Multiply two vectors element-wise, wrapping on overflow."]
483    fn mul_i16x8(self, a: i16x8<Self>, b: i16x8<Self>) -> i16x8<Self>;
484    #[doc = "Compute the bitwise AND of two vectors."]
485    fn and_i16x8(self, a: i16x8<Self>, b: i16x8<Self>) -> i16x8<Self>;
486    #[doc = "Compute the bitwise OR of two vectors."]
487    fn or_i16x8(self, a: i16x8<Self>, b: i16x8<Self>) -> i16x8<Self>;
488    #[doc = "Compute the bitwise XOR of two vectors."]
489    fn xor_i16x8(self, a: i16x8<Self>, b: i16x8<Self>) -> i16x8<Self>;
490    #[doc = "Compute the bitwise NOT of the vector."]
491    fn not_i16x8(self, a: i16x8<Self>) -> i16x8<Self>;
492    #[doc = "Shift each element left by the given number of bits.\n\nBits shifted out of the left side are discarded, and zeros are shifted in on the right."]
493    fn shl_i16x8(self, a: i16x8<Self>, shift: u32) -> i16x8<Self>;
494    #[doc = "Shift each element left by the given number of bits.\n\nBits shifted out of the left side are discarded, and zeros are shifted in on the right.\n\nThis operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation."]
495    fn shlv_i16x8(self, a: i16x8<Self>, b: i16x8<Self>) -> i16x8<Self>;
496    #[doc = "Shift each element right by the given number of bits.\n\nFor unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated."]
497    fn shr_i16x8(self, a: i16x8<Self>, shift: u32) -> i16x8<Self>;
498    #[doc = "Shift each element right by the corresponding element in another vector.\n\nFor unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated.\n\nThis operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation."]
499    fn shrv_i16x8(self, a: i16x8<Self>, b: i16x8<Self>) -> i16x8<Self>;
500    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
501    fn simd_eq_i16x8(self, a: i16x8<Self>, b: i16x8<Self>) -> mask16x8<Self>;
502    #[doc = "Compare two vectors element-wise for less than.\n\nReturns a mask where each element is all ones if `a` is less than `b`, and all zeroes if not."]
503    fn simd_lt_i16x8(self, a: i16x8<Self>, b: i16x8<Self>) -> mask16x8<Self>;
504    #[doc = "Compare two vectors element-wise for less than or equal.\n\nReturns a mask where each element is all ones if `a` is less than or equal to `b`, and all zeroes if not."]
505    fn simd_le_i16x8(self, a: i16x8<Self>, b: i16x8<Self>) -> mask16x8<Self>;
506    #[doc = "Compare two vectors element-wise for greater than or equal.\n\nReturns a mask where each element is all ones if `a` is greater than or equal to `b`, and all zeroes if not."]
507    fn simd_ge_i16x8(self, a: i16x8<Self>, b: i16x8<Self>) -> mask16x8<Self>;
508    #[doc = "Compare two vectors element-wise for greater than.\n\nReturns a mask where each element is all ones if `a` is greater than `b`, and all zeroes if not."]
509    fn simd_gt_i16x8(self, a: i16x8<Self>, b: i16x8<Self>) -> mask16x8<Self>;
510    #[doc = "Interleave the lower half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, b0, a1, b1]`.\n\n**Note:** This operation is only useful if you need to discard elements `a2, a3, b2, b3`.\n        For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
511    fn zip_low_i16x8(self, a: i16x8<Self>, b: i16x8<Self>) -> i16x8<Self>;
512    #[doc = "Interleave the upper half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a2, b2, a3, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a1, b0, b1`.For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
513    fn zip_high_i16x8(self, a: i16x8<Self>, b: i16x8<Self>) -> i16x8<Self>;
514    #[doc = "Extract even-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, a2, b0, b2]`.\n\n**Note:** This operation is only useful if you need to discard elements `a1, a3, b1, b3`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
515    fn unzip_low_i16x8(self, a: i16x8<Self>, b: i16x8<Self>) -> i16x8<Self>;
516    #[doc = "Extract odd-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a1, a3, b1, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a2, b0, b2`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
517    fn unzip_high_i16x8(self, a: i16x8<Self>, b: i16x8<Self>) -> i16x8<Self>;
518    #[doc = "Interleave two vectors.\n\nThe resulting vectors contain elements taken alternately from `a` and `b`, first filling the first result, and then the second.\n\nThe reverse of this operation is `deinterleave`.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `([a0, b0, a1, b1], [a2, b2, a3, b3])`."]
519    fn interleave_i16x8(self, a: i16x8<Self>, b: i16x8<Self>) -> (i16x8<Self>, i16x8<Self>);
520    #[doc = "Deinterleave two vectors.\n\nThe first result contains all even-indexed elements from `a` followed by all even-indexed elements from `b`. The second result contains all odd-indexed elements from `a` followed by all odd-indexed elements from `b`.\n\nThe reverse of this operation is `interleave`.\n\nFor vectors `[a0, b0, a1, b1]` and `[a2, b2, a3, b3]`, returns `([a0, a1, a2, a3], [b0, b1, b2, b3])`."]
521    fn deinterleave_i16x8(self, a: i16x8<Self>, b: i16x8<Self>) -> (i16x8<Self>, i16x8<Self>);
522    #[doc = "Select elements from b and c based on the mask operand a.\n\nThis operation's behavior is unspecified if each lane of a is not the all-zeroes or all-ones bit pattern. See the [`Select`] trait's documentation for more information."]
523    fn select_i16x8(self, a: mask16x8<Self>, b: i16x8<Self>, c: i16x8<Self>) -> i16x8<Self>;
524    #[doc = "Return the element-wise minimum of two vectors."]
525    fn min_i16x8(self, a: i16x8<Self>, b: i16x8<Self>) -> i16x8<Self>;
526    #[doc = "Return the element-wise maximum of two vectors."]
527    fn max_i16x8(self, a: i16x8<Self>, b: i16x8<Self>) -> i16x8<Self>;
528    #[doc = "Combine two vectors into a single vector with twice the width.\n\n`a` provides the lower elements and `b` provides the upper elements."]
529    fn combine_i16x8(self, a: i16x8<Self>, b: i16x8<Self>) -> i16x16<Self>;
530    #[doc = "Negate each element of the vector, wrapping on overflow."]
531    fn neg_i16x8(self, a: i16x8<Self>) -> i16x8<Self>;
532    #[doc = "Reinterpret the bits of this vector as a vector of `u8` elements.\n\nThe total bit width is preserved; the number of elements changes accordingly."]
533    fn reinterpret_u8_i16x8(self, a: i16x8<Self>) -> u8x16<Self>;
534    #[doc = "Reinterpret the bits of this vector as a vector of `u32` elements.\n\nThe total bit width is preserved; the number of elements changes accordingly."]
535    fn reinterpret_u32_i16x8(self, a: i16x8<Self>) -> u32x4<Self>;
536    #[doc = "Create a SIMD vector with all elements set to the given value."]
537    fn splat_u16x8(self, val: u16) -> u16x8<Self>;
538    #[doc = "Create a SIMD vector from an array of the same length."]
539    fn load_array_u16x8(self, val: [u16; 8usize]) -> u16x8<Self>;
540    #[doc = "Create a SIMD vector from an array of the same length."]
541    fn load_array_ref_u16x8(self, val: &[u16; 8usize]) -> u16x8<Self>;
542    #[doc = "Convert a SIMD vector to an array."]
543    fn as_array_u16x8(self, a: u16x8<Self>) -> [u16; 8usize];
544    #[doc = "Project a reference to a SIMD vector to a reference to the equivalent array."]
545    fn as_array_ref_u16x8(self, a: &u16x8<Self>) -> &[u16; 8usize];
546    #[doc = "Project a mutable reference to a SIMD vector to a mutable reference to the equivalent array."]
547    fn as_array_mut_u16x8(self, a: &mut u16x8<Self>) -> &mut [u16; 8usize];
548    #[doc = "Store a SIMD vector into an array of the same length."]
549    fn store_array_u16x8(self, a: u16x8<Self>, dest: &mut [u16; 8usize]) -> ();
550    #[doc = "Reinterpret a vector of bytes as a SIMD vector of a given type, with the equivalent byte length."]
551    fn cvt_from_bytes_u16x8(self, a: u8x16<Self>) -> u16x8<Self>;
552    #[doc = "Reinterpret a SIMD vector as a vector of bytes, with the equivalent byte length."]
553    fn cvt_to_bytes_u16x8(self, a: u16x8<Self>) -> u8x16<Self>;
554    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
555    fn slide_u16x8<const SHIFT: usize>(self, a: u16x8<Self>, b: u16x8<Self>) -> u16x8<Self>;
556    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
557    fn slide_within_blocks_u16x8<const SHIFT: usize>(
558        self,
559        a: u16x8<Self>,
560        b: u16x8<Self>,
561    ) -> u16x8<Self>;
562    #[doc = "Add two vectors element-wise, wrapping on overflow."]
563    fn add_u16x8(self, a: u16x8<Self>, b: u16x8<Self>) -> u16x8<Self>;
564    #[doc = "Subtract two vectors element-wise, wrapping on overflow."]
565    fn sub_u16x8(self, a: u16x8<Self>, b: u16x8<Self>) -> u16x8<Self>;
566    #[doc = "Multiply two vectors element-wise, wrapping on overflow."]
567    fn mul_u16x8(self, a: u16x8<Self>, b: u16x8<Self>) -> u16x8<Self>;
568    #[doc = "Compute the bitwise AND of two vectors."]
569    fn and_u16x8(self, a: u16x8<Self>, b: u16x8<Self>) -> u16x8<Self>;
570    #[doc = "Compute the bitwise OR of two vectors."]
571    fn or_u16x8(self, a: u16x8<Self>, b: u16x8<Self>) -> u16x8<Self>;
572    #[doc = "Compute the bitwise XOR of two vectors."]
573    fn xor_u16x8(self, a: u16x8<Self>, b: u16x8<Self>) -> u16x8<Self>;
574    #[doc = "Compute the bitwise NOT of the vector."]
575    fn not_u16x8(self, a: u16x8<Self>) -> u16x8<Self>;
576    #[doc = "Shift each element left by the given number of bits.\n\nBits shifted out of the left side are discarded, and zeros are shifted in on the right."]
577    fn shl_u16x8(self, a: u16x8<Self>, shift: u32) -> u16x8<Self>;
578    #[doc = "Shift each element left by the given number of bits.\n\nBits shifted out of the left side are discarded, and zeros are shifted in on the right.\n\nThis operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation."]
579    fn shlv_u16x8(self, a: u16x8<Self>, b: u16x8<Self>) -> u16x8<Self>;
580    #[doc = "Shift each element right by the given number of bits.\n\nFor unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated."]
581    fn shr_u16x8(self, a: u16x8<Self>, shift: u32) -> u16x8<Self>;
582    #[doc = "Shift each element right by the corresponding element in another vector.\n\nFor unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated.\n\nThis operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation."]
583    fn shrv_u16x8(self, a: u16x8<Self>, b: u16x8<Self>) -> u16x8<Self>;
584    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
585    fn simd_eq_u16x8(self, a: u16x8<Self>, b: u16x8<Self>) -> mask16x8<Self>;
586    #[doc = "Compare two vectors element-wise for less than.\n\nReturns a mask where each element is all ones if `a` is less than `b`, and all zeroes if not."]
587    fn simd_lt_u16x8(self, a: u16x8<Self>, b: u16x8<Self>) -> mask16x8<Self>;
588    #[doc = "Compare two vectors element-wise for less than or equal.\n\nReturns a mask where each element is all ones if `a` is less than or equal to `b`, and all zeroes if not."]
589    fn simd_le_u16x8(self, a: u16x8<Self>, b: u16x8<Self>) -> mask16x8<Self>;
590    #[doc = "Compare two vectors element-wise for greater than or equal.\n\nReturns a mask where each element is all ones if `a` is greater than or equal to `b`, and all zeroes if not."]
591    fn simd_ge_u16x8(self, a: u16x8<Self>, b: u16x8<Self>) -> mask16x8<Self>;
592    #[doc = "Compare two vectors element-wise for greater than.\n\nReturns a mask where each element is all ones if `a` is greater than `b`, and all zeroes if not."]
593    fn simd_gt_u16x8(self, a: u16x8<Self>, b: u16x8<Self>) -> mask16x8<Self>;
594    #[doc = "Interleave the lower half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, b0, a1, b1]`.\n\n**Note:** This operation is only useful if you need to discard elements `a2, a3, b2, b3`.\n        For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
595    fn zip_low_u16x8(self, a: u16x8<Self>, b: u16x8<Self>) -> u16x8<Self>;
596    #[doc = "Interleave the upper half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a2, b2, a3, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a1, b0, b1`.For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
597    fn zip_high_u16x8(self, a: u16x8<Self>, b: u16x8<Self>) -> u16x8<Self>;
598    #[doc = "Extract even-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, a2, b0, b2]`.\n\n**Note:** This operation is only useful if you need to discard elements `a1, a3, b1, b3`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
599    fn unzip_low_u16x8(self, a: u16x8<Self>, b: u16x8<Self>) -> u16x8<Self>;
600    #[doc = "Extract odd-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a1, a3, b1, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a2, b0, b2`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
601    fn unzip_high_u16x8(self, a: u16x8<Self>, b: u16x8<Self>) -> u16x8<Self>;
602    #[doc = "Interleave two vectors.\n\nThe resulting vectors contain elements taken alternately from `a` and `b`, first filling the first result, and then the second.\n\nThe reverse of this operation is `deinterleave`.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `([a0, b0, a1, b1], [a2, b2, a3, b3])`."]
603    fn interleave_u16x8(self, a: u16x8<Self>, b: u16x8<Self>) -> (u16x8<Self>, u16x8<Self>);
604    #[doc = "Deinterleave two vectors.\n\nThe first result contains all even-indexed elements from `a` followed by all even-indexed elements from `b`. The second result contains all odd-indexed elements from `a` followed by all odd-indexed elements from `b`.\n\nThe reverse of this operation is `interleave`.\n\nFor vectors `[a0, b0, a1, b1]` and `[a2, b2, a3, b3]`, returns `([a0, a1, a2, a3], [b0, b1, b2, b3])`."]
605    fn deinterleave_u16x8(self, a: u16x8<Self>, b: u16x8<Self>) -> (u16x8<Self>, u16x8<Self>);
606    #[doc = "Select elements from b and c based on the mask operand a.\n\nThis operation's behavior is unspecified if each lane of a is not the all-zeroes or all-ones bit pattern. See the [`Select`] trait's documentation for more information."]
607    fn select_u16x8(self, a: mask16x8<Self>, b: u16x8<Self>, c: u16x8<Self>) -> u16x8<Self>;
608    #[doc = "Return the element-wise minimum of two vectors."]
609    fn min_u16x8(self, a: u16x8<Self>, b: u16x8<Self>) -> u16x8<Self>;
610    #[doc = "Return the element-wise maximum of two vectors."]
611    fn max_u16x8(self, a: u16x8<Self>, b: u16x8<Self>) -> u16x8<Self>;
612    #[doc = "Combine two vectors into a single vector with twice the width.\n\n`a` provides the lower elements and `b` provides the upper elements."]
613    fn combine_u16x8(self, a: u16x8<Self>, b: u16x8<Self>) -> u16x16<Self>;
614    #[doc = "Reinterpret the bits of this vector as a vector of `u8` elements.\n\nThe total bit width is preserved; the number of elements changes accordingly."]
615    fn reinterpret_u8_u16x8(self, a: u16x8<Self>) -> u8x16<Self>;
616    #[doc = "Reinterpret the bits of this vector as a vector of `u32` elements.\n\nThe total bit width is preserved; the number of elements changes accordingly."]
617    fn reinterpret_u32_u16x8(self, a: u16x8<Self>) -> u32x4<Self>;
618    #[doc = "Create a SIMD vector with all elements set to the given value."]
619    fn splat_mask16x8(self, val: i16) -> mask16x8<Self>;
620    #[doc = "Create a SIMD vector from an array of the same length."]
621    fn load_array_mask16x8(self, val: [i16; 8usize]) -> mask16x8<Self>;
622    #[doc = "Create a SIMD vector from an array of the same length."]
623    fn load_array_ref_mask16x8(self, val: &[i16; 8usize]) -> mask16x8<Self>;
624    #[doc = "Convert a SIMD vector to an array."]
625    fn as_array_mask16x8(self, a: mask16x8<Self>) -> [i16; 8usize];
626    #[doc = "Project a reference to a SIMD vector to a reference to the equivalent array."]
627    fn as_array_ref_mask16x8(self, a: &mask16x8<Self>) -> &[i16; 8usize];
628    #[doc = "Project a mutable reference to a SIMD vector to a mutable reference to the equivalent array."]
629    fn as_array_mut_mask16x8(self, a: &mut mask16x8<Self>) -> &mut [i16; 8usize];
630    #[doc = "Store a SIMD vector into an array of the same length."]
631    fn store_array_mask16x8(self, a: mask16x8<Self>, dest: &mut [i16; 8usize]) -> ();
632    #[doc = "Reinterpret a vector of bytes as a SIMD vector of a given type, with the equivalent byte length."]
633    fn cvt_from_bytes_mask16x8(self, a: u8x16<Self>) -> mask16x8<Self>;
634    #[doc = "Reinterpret a SIMD vector as a vector of bytes, with the equivalent byte length."]
635    fn cvt_to_bytes_mask16x8(self, a: mask16x8<Self>) -> u8x16<Self>;
636    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
637    fn slide_mask16x8<const SHIFT: usize>(
638        self,
639        a: mask16x8<Self>,
640        b: mask16x8<Self>,
641    ) -> mask16x8<Self>;
642    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
643    fn slide_within_blocks_mask16x8<const SHIFT: usize>(
644        self,
645        a: mask16x8<Self>,
646        b: mask16x8<Self>,
647    ) -> mask16x8<Self>;
648    #[doc = "Compute the logical AND of two masks."]
649    fn and_mask16x8(self, a: mask16x8<Self>, b: mask16x8<Self>) -> mask16x8<Self>;
650    #[doc = "Compute the logical OR of two masks."]
651    fn or_mask16x8(self, a: mask16x8<Self>, b: mask16x8<Self>) -> mask16x8<Self>;
652    #[doc = "Compute the logical XOR of two masks."]
653    fn xor_mask16x8(self, a: mask16x8<Self>, b: mask16x8<Self>) -> mask16x8<Self>;
654    #[doc = "Compute the logical NOT of the mask."]
655    fn not_mask16x8(self, a: mask16x8<Self>) -> mask16x8<Self>;
656    #[doc = "Select elements from `b` and `c` based on the mask operand `a`.\n\nThis operation's behavior is unspecified if each lane of a is not the all-zeroes or all-ones bit pattern. See the [`Select`] trait's documentation for more information."]
657    fn select_mask16x8(
658        self,
659        a: mask16x8<Self>,
660        b: mask16x8<Self>,
661        c: mask16x8<Self>,
662    ) -> mask16x8<Self>;
663    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
664    fn simd_eq_mask16x8(self, a: mask16x8<Self>, b: mask16x8<Self>) -> mask16x8<Self>;
665    #[doc = "Returns true if any elements in this mask are true (all ones).\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
666    fn any_true_mask16x8(self, a: mask16x8<Self>) -> bool;
667    #[doc = "Returns true if all elements in this mask are true (all ones).\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
668    fn all_true_mask16x8(self, a: mask16x8<Self>) -> bool;
669    #[doc = "Returns true if any elements in this mask are false (all zeroes).\n\nThis is logically equivalent to `!all_true`, but may be faster.\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
670    fn any_false_mask16x8(self, a: mask16x8<Self>) -> bool;
671    #[doc = "Returns true if all elements in this mask are false (all zeroes).\n\nThis is logically equivalent to `!any_true`, but may be faster.\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
672    fn all_false_mask16x8(self, a: mask16x8<Self>) -> bool;
673    #[doc = "Combine two vectors into a single vector with twice the width.\n\n`a` provides the lower elements and `b` provides the upper elements."]
674    fn combine_mask16x8(self, a: mask16x8<Self>, b: mask16x8<Self>) -> mask16x16<Self>;
675    #[doc = "Create a SIMD vector with all elements set to the given value."]
676    fn splat_i32x4(self, val: i32) -> i32x4<Self>;
677    #[doc = "Create a SIMD vector from an array of the same length."]
678    fn load_array_i32x4(self, val: [i32; 4usize]) -> i32x4<Self>;
679    #[doc = "Create a SIMD vector from an array of the same length."]
680    fn load_array_ref_i32x4(self, val: &[i32; 4usize]) -> i32x4<Self>;
681    #[doc = "Convert a SIMD vector to an array."]
682    fn as_array_i32x4(self, a: i32x4<Self>) -> [i32; 4usize];
683    #[doc = "Project a reference to a SIMD vector to a reference to the equivalent array."]
684    fn as_array_ref_i32x4(self, a: &i32x4<Self>) -> &[i32; 4usize];
685    #[doc = "Project a mutable reference to a SIMD vector to a mutable reference to the equivalent array."]
686    fn as_array_mut_i32x4(self, a: &mut i32x4<Self>) -> &mut [i32; 4usize];
687    #[doc = "Store a SIMD vector into an array of the same length."]
688    fn store_array_i32x4(self, a: i32x4<Self>, dest: &mut [i32; 4usize]) -> ();
689    #[doc = "Reinterpret a vector of bytes as a SIMD vector of a given type, with the equivalent byte length."]
690    fn cvt_from_bytes_i32x4(self, a: u8x16<Self>) -> i32x4<Self>;
691    #[doc = "Reinterpret a SIMD vector as a vector of bytes, with the equivalent byte length."]
692    fn cvt_to_bytes_i32x4(self, a: i32x4<Self>) -> u8x16<Self>;
693    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
694    fn slide_i32x4<const SHIFT: usize>(self, a: i32x4<Self>, b: i32x4<Self>) -> i32x4<Self>;
695    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
696    fn slide_within_blocks_i32x4<const SHIFT: usize>(
697        self,
698        a: i32x4<Self>,
699        b: i32x4<Self>,
700    ) -> i32x4<Self>;
701    #[doc = "Add two vectors element-wise, wrapping on overflow."]
702    fn add_i32x4(self, a: i32x4<Self>, b: i32x4<Self>) -> i32x4<Self>;
703    #[doc = "Subtract two vectors element-wise, wrapping on overflow."]
704    fn sub_i32x4(self, a: i32x4<Self>, b: i32x4<Self>) -> i32x4<Self>;
705    #[doc = "Multiply two vectors element-wise, wrapping on overflow."]
706    fn mul_i32x4(self, a: i32x4<Self>, b: i32x4<Self>) -> i32x4<Self>;
707    #[doc = "Compute the bitwise AND of two vectors."]
708    fn and_i32x4(self, a: i32x4<Self>, b: i32x4<Self>) -> i32x4<Self>;
709    #[doc = "Compute the bitwise OR of two vectors."]
710    fn or_i32x4(self, a: i32x4<Self>, b: i32x4<Self>) -> i32x4<Self>;
711    #[doc = "Compute the bitwise XOR of two vectors."]
712    fn xor_i32x4(self, a: i32x4<Self>, b: i32x4<Self>) -> i32x4<Self>;
713    #[doc = "Compute the bitwise NOT of the vector."]
714    fn not_i32x4(self, a: i32x4<Self>) -> i32x4<Self>;
715    #[doc = "Shift each element left by the given number of bits.\n\nBits shifted out of the left side are discarded, and zeros are shifted in on the right."]
716    fn shl_i32x4(self, a: i32x4<Self>, shift: u32) -> i32x4<Self>;
717    #[doc = "Shift each element left by the given number of bits.\n\nBits shifted out of the left side are discarded, and zeros are shifted in on the right.\n\nThis operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation."]
718    fn shlv_i32x4(self, a: i32x4<Self>, b: i32x4<Self>) -> i32x4<Self>;
719    #[doc = "Shift each element right by the given number of bits.\n\nFor unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated."]
720    fn shr_i32x4(self, a: i32x4<Self>, shift: u32) -> i32x4<Self>;
721    #[doc = "Shift each element right by the corresponding element in another vector.\n\nFor unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated.\n\nThis operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation."]
722    fn shrv_i32x4(self, a: i32x4<Self>, b: i32x4<Self>) -> i32x4<Self>;
723    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
724    fn simd_eq_i32x4(self, a: i32x4<Self>, b: i32x4<Self>) -> mask32x4<Self>;
725    #[doc = "Compare two vectors element-wise for less than.\n\nReturns a mask where each element is all ones if `a` is less than `b`, and all zeroes if not."]
726    fn simd_lt_i32x4(self, a: i32x4<Self>, b: i32x4<Self>) -> mask32x4<Self>;
727    #[doc = "Compare two vectors element-wise for less than or equal.\n\nReturns a mask where each element is all ones if `a` is less than or equal to `b`, and all zeroes if not."]
728    fn simd_le_i32x4(self, a: i32x4<Self>, b: i32x4<Self>) -> mask32x4<Self>;
729    #[doc = "Compare two vectors element-wise for greater than or equal.\n\nReturns a mask where each element is all ones if `a` is greater than or equal to `b`, and all zeroes if not."]
730    fn simd_ge_i32x4(self, a: i32x4<Self>, b: i32x4<Self>) -> mask32x4<Self>;
731    #[doc = "Compare two vectors element-wise for greater than.\n\nReturns a mask where each element is all ones if `a` is greater than `b`, and all zeroes if not."]
732    fn simd_gt_i32x4(self, a: i32x4<Self>, b: i32x4<Self>) -> mask32x4<Self>;
733    #[doc = "Interleave the lower half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, b0, a1, b1]`.\n\n**Note:** This operation is only useful if you need to discard elements `a2, a3, b2, b3`.\n        For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
734    fn zip_low_i32x4(self, a: i32x4<Self>, b: i32x4<Self>) -> i32x4<Self>;
735    #[doc = "Interleave the upper half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a2, b2, a3, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a1, b0, b1`.For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
736    fn zip_high_i32x4(self, a: i32x4<Self>, b: i32x4<Self>) -> i32x4<Self>;
737    #[doc = "Extract even-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, a2, b0, b2]`.\n\n**Note:** This operation is only useful if you need to discard elements `a1, a3, b1, b3`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
738    fn unzip_low_i32x4(self, a: i32x4<Self>, b: i32x4<Self>) -> i32x4<Self>;
739    #[doc = "Extract odd-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a1, a3, b1, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a2, b0, b2`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
740    fn unzip_high_i32x4(self, a: i32x4<Self>, b: i32x4<Self>) -> i32x4<Self>;
741    #[doc = "Interleave two vectors.\n\nThe resulting vectors contain elements taken alternately from `a` and `b`, first filling the first result, and then the second.\n\nThe reverse of this operation is `deinterleave`.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `([a0, b0, a1, b1], [a2, b2, a3, b3])`."]
742    fn interleave_i32x4(self, a: i32x4<Self>, b: i32x4<Self>) -> (i32x4<Self>, i32x4<Self>);
743    #[doc = "Deinterleave two vectors.\n\nThe first result contains all even-indexed elements from `a` followed by all even-indexed elements from `b`. The second result contains all odd-indexed elements from `a` followed by all odd-indexed elements from `b`.\n\nThe reverse of this operation is `interleave`.\n\nFor vectors `[a0, b0, a1, b1]` and `[a2, b2, a3, b3]`, returns `([a0, a1, a2, a3], [b0, b1, b2, b3])`."]
744    fn deinterleave_i32x4(self, a: i32x4<Self>, b: i32x4<Self>) -> (i32x4<Self>, i32x4<Self>);
745    #[doc = "Select elements from b and c based on the mask operand a.\n\nThis operation's behavior is unspecified if each lane of a is not the all-zeroes or all-ones bit pattern. See the [`Select`] trait's documentation for more information."]
746    fn select_i32x4(self, a: mask32x4<Self>, b: i32x4<Self>, c: i32x4<Self>) -> i32x4<Self>;
747    #[doc = "Return the element-wise minimum of two vectors."]
748    fn min_i32x4(self, a: i32x4<Self>, b: i32x4<Self>) -> i32x4<Self>;
749    #[doc = "Return the element-wise maximum of two vectors."]
750    fn max_i32x4(self, a: i32x4<Self>, b: i32x4<Self>) -> i32x4<Self>;
751    #[doc = "Combine two vectors into a single vector with twice the width.\n\n`a` provides the lower elements and `b` provides the upper elements."]
752    fn combine_i32x4(self, a: i32x4<Self>, b: i32x4<Self>) -> i32x8<Self>;
753    #[doc = "Negate each element of the vector, wrapping on overflow."]
754    fn neg_i32x4(self, a: i32x4<Self>) -> i32x4<Self>;
755    #[doc = "Reinterpret the bits of this vector as a vector of `u8` elements.\n\nThe total bit width is preserved; the number of elements changes accordingly."]
756    fn reinterpret_u8_i32x4(self, a: i32x4<Self>) -> u8x16<Self>;
757    #[doc = "Reinterpret the bits of this vector as a vector of `u32` elements.\n\nThe total bit width is preserved; the number of elements changes accordingly."]
758    fn reinterpret_u32_i32x4(self, a: i32x4<Self>) -> u32x4<Self>;
759    #[doc = "Convert each signed 32-bit integer element to a floating-point value.\n\nValues that cannot be exactly represented are rounded to the nearest representable value."]
760    fn cvt_f32_i32x4(self, a: i32x4<Self>) -> f32x4<Self>;
761    #[doc = "Create a SIMD vector with all elements set to the given value."]
762    fn splat_u32x4(self, val: u32) -> u32x4<Self>;
763    #[doc = "Create a SIMD vector from an array of the same length."]
764    fn load_array_u32x4(self, val: [u32; 4usize]) -> u32x4<Self>;
765    #[doc = "Create a SIMD vector from an array of the same length."]
766    fn load_array_ref_u32x4(self, val: &[u32; 4usize]) -> u32x4<Self>;
767    #[doc = "Convert a SIMD vector to an array."]
768    fn as_array_u32x4(self, a: u32x4<Self>) -> [u32; 4usize];
769    #[doc = "Project a reference to a SIMD vector to a reference to the equivalent array."]
770    fn as_array_ref_u32x4(self, a: &u32x4<Self>) -> &[u32; 4usize];
771    #[doc = "Project a mutable reference to a SIMD vector to a mutable reference to the equivalent array."]
772    fn as_array_mut_u32x4(self, a: &mut u32x4<Self>) -> &mut [u32; 4usize];
773    #[doc = "Store a SIMD vector into an array of the same length."]
774    fn store_array_u32x4(self, a: u32x4<Self>, dest: &mut [u32; 4usize]) -> ();
775    #[doc = "Reinterpret a vector of bytes as a SIMD vector of a given type, with the equivalent byte length."]
776    fn cvt_from_bytes_u32x4(self, a: u8x16<Self>) -> u32x4<Self>;
777    #[doc = "Reinterpret a SIMD vector as a vector of bytes, with the equivalent byte length."]
778    fn cvt_to_bytes_u32x4(self, a: u32x4<Self>) -> u8x16<Self>;
779    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
780    fn slide_u32x4<const SHIFT: usize>(self, a: u32x4<Self>, b: u32x4<Self>) -> u32x4<Self>;
781    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
782    fn slide_within_blocks_u32x4<const SHIFT: usize>(
783        self,
784        a: u32x4<Self>,
785        b: u32x4<Self>,
786    ) -> u32x4<Self>;
787    #[doc = "Add two vectors element-wise, wrapping on overflow."]
788    fn add_u32x4(self, a: u32x4<Self>, b: u32x4<Self>) -> u32x4<Self>;
789    #[doc = "Subtract two vectors element-wise, wrapping on overflow."]
790    fn sub_u32x4(self, a: u32x4<Self>, b: u32x4<Self>) -> u32x4<Self>;
791    #[doc = "Multiply two vectors element-wise, wrapping on overflow."]
792    fn mul_u32x4(self, a: u32x4<Self>, b: u32x4<Self>) -> u32x4<Self>;
793    #[doc = "Compute the bitwise AND of two vectors."]
794    fn and_u32x4(self, a: u32x4<Self>, b: u32x4<Self>) -> u32x4<Self>;
795    #[doc = "Compute the bitwise OR of two vectors."]
796    fn or_u32x4(self, a: u32x4<Self>, b: u32x4<Self>) -> u32x4<Self>;
797    #[doc = "Compute the bitwise XOR of two vectors."]
798    fn xor_u32x4(self, a: u32x4<Self>, b: u32x4<Self>) -> u32x4<Self>;
799    #[doc = "Compute the bitwise NOT of the vector."]
800    fn not_u32x4(self, a: u32x4<Self>) -> u32x4<Self>;
801    #[doc = "Shift each element left by the given number of bits.\n\nBits shifted out of the left side are discarded, and zeros are shifted in on the right."]
802    fn shl_u32x4(self, a: u32x4<Self>, shift: u32) -> u32x4<Self>;
803    #[doc = "Shift each element left by the given number of bits.\n\nBits shifted out of the left side are discarded, and zeros are shifted in on the right.\n\nThis operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation."]
804    fn shlv_u32x4(self, a: u32x4<Self>, b: u32x4<Self>) -> u32x4<Self>;
805    #[doc = "Shift each element right by the given number of bits.\n\nFor unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated."]
806    fn shr_u32x4(self, a: u32x4<Self>, shift: u32) -> u32x4<Self>;
807    #[doc = "Shift each element right by the corresponding element in another vector.\n\nFor unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated.\n\nThis operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation."]
808    fn shrv_u32x4(self, a: u32x4<Self>, b: u32x4<Self>) -> u32x4<Self>;
809    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
810    fn simd_eq_u32x4(self, a: u32x4<Self>, b: u32x4<Self>) -> mask32x4<Self>;
811    #[doc = "Compare two vectors element-wise for less than.\n\nReturns a mask where each element is all ones if `a` is less than `b`, and all zeroes if not."]
812    fn simd_lt_u32x4(self, a: u32x4<Self>, b: u32x4<Self>) -> mask32x4<Self>;
813    #[doc = "Compare two vectors element-wise for less than or equal.\n\nReturns a mask where each element is all ones if `a` is less than or equal to `b`, and all zeroes if not."]
814    fn simd_le_u32x4(self, a: u32x4<Self>, b: u32x4<Self>) -> mask32x4<Self>;
815    #[doc = "Compare two vectors element-wise for greater than or equal.\n\nReturns a mask where each element is all ones if `a` is greater than or equal to `b`, and all zeroes if not."]
816    fn simd_ge_u32x4(self, a: u32x4<Self>, b: u32x4<Self>) -> mask32x4<Self>;
817    #[doc = "Compare two vectors element-wise for greater than.\n\nReturns a mask where each element is all ones if `a` is greater than `b`, and all zeroes if not."]
818    fn simd_gt_u32x4(self, a: u32x4<Self>, b: u32x4<Self>) -> mask32x4<Self>;
819    #[doc = "Interleave the lower half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, b0, a1, b1]`.\n\n**Note:** This operation is only useful if you need to discard elements `a2, a3, b2, b3`.\n        For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
820    fn zip_low_u32x4(self, a: u32x4<Self>, b: u32x4<Self>) -> u32x4<Self>;
821    #[doc = "Interleave the upper half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a2, b2, a3, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a1, b0, b1`.For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
822    fn zip_high_u32x4(self, a: u32x4<Self>, b: u32x4<Self>) -> u32x4<Self>;
823    #[doc = "Extract even-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, a2, b0, b2]`.\n\n**Note:** This operation is only useful if you need to discard elements `a1, a3, b1, b3`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
824    fn unzip_low_u32x4(self, a: u32x4<Self>, b: u32x4<Self>) -> u32x4<Self>;
825    #[doc = "Extract odd-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a1, a3, b1, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a2, b0, b2`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
826    fn unzip_high_u32x4(self, a: u32x4<Self>, b: u32x4<Self>) -> u32x4<Self>;
827    #[doc = "Interleave two vectors.\n\nThe resulting vectors contain elements taken alternately from `a` and `b`, first filling the first result, and then the second.\n\nThe reverse of this operation is `deinterleave`.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `([a0, b0, a1, b1], [a2, b2, a3, b3])`."]
828    fn interleave_u32x4(self, a: u32x4<Self>, b: u32x4<Self>) -> (u32x4<Self>, u32x4<Self>);
829    #[doc = "Deinterleave two vectors.\n\nThe first result contains all even-indexed elements from `a` followed by all even-indexed elements from `b`. The second result contains all odd-indexed elements from `a` followed by all odd-indexed elements from `b`.\n\nThe reverse of this operation is `interleave`.\n\nFor vectors `[a0, b0, a1, b1]` and `[a2, b2, a3, b3]`, returns `([a0, a1, a2, a3], [b0, b1, b2, b3])`."]
830    fn deinterleave_u32x4(self, a: u32x4<Self>, b: u32x4<Self>) -> (u32x4<Self>, u32x4<Self>);
831    #[doc = "Select elements from b and c based on the mask operand a.\n\nThis operation's behavior is unspecified if each lane of a is not the all-zeroes or all-ones bit pattern. See the [`Select`] trait's documentation for more information."]
832    fn select_u32x4(self, a: mask32x4<Self>, b: u32x4<Self>, c: u32x4<Self>) -> u32x4<Self>;
833    #[doc = "Return the element-wise minimum of two vectors."]
834    fn min_u32x4(self, a: u32x4<Self>, b: u32x4<Self>) -> u32x4<Self>;
835    #[doc = "Return the element-wise maximum of two vectors."]
836    fn max_u32x4(self, a: u32x4<Self>, b: u32x4<Self>) -> u32x4<Self>;
837    #[doc = "Combine two vectors into a single vector with twice the width.\n\n`a` provides the lower elements and `b` provides the upper elements."]
838    fn combine_u32x4(self, a: u32x4<Self>, b: u32x4<Self>) -> u32x8<Self>;
839    #[doc = "Reinterpret the bits of this vector as a vector of `u8` elements.\n\nThe total bit width is preserved; the number of elements changes accordingly."]
840    fn reinterpret_u8_u32x4(self, a: u32x4<Self>) -> u8x16<Self>;
841    #[doc = "Convert each unsigned 32-bit integer element to a floating-point value.\n\nValues that cannot be exactly represented are rounded to the nearest representable value."]
842    fn cvt_f32_u32x4(self, a: u32x4<Self>) -> f32x4<Self>;
843    #[doc = "Create a SIMD vector with all elements set to the given value."]
844    fn splat_mask32x4(self, val: i32) -> mask32x4<Self>;
845    #[doc = "Create a SIMD vector from an array of the same length."]
846    fn load_array_mask32x4(self, val: [i32; 4usize]) -> mask32x4<Self>;
847    #[doc = "Create a SIMD vector from an array of the same length."]
848    fn load_array_ref_mask32x4(self, val: &[i32; 4usize]) -> mask32x4<Self>;
849    #[doc = "Convert a SIMD vector to an array."]
850    fn as_array_mask32x4(self, a: mask32x4<Self>) -> [i32; 4usize];
851    #[doc = "Project a reference to a SIMD vector to a reference to the equivalent array."]
852    fn as_array_ref_mask32x4(self, a: &mask32x4<Self>) -> &[i32; 4usize];
853    #[doc = "Project a mutable reference to a SIMD vector to a mutable reference to the equivalent array."]
854    fn as_array_mut_mask32x4(self, a: &mut mask32x4<Self>) -> &mut [i32; 4usize];
855    #[doc = "Store a SIMD vector into an array of the same length."]
856    fn store_array_mask32x4(self, a: mask32x4<Self>, dest: &mut [i32; 4usize]) -> ();
857    #[doc = "Reinterpret a vector of bytes as a SIMD vector of a given type, with the equivalent byte length."]
858    fn cvt_from_bytes_mask32x4(self, a: u8x16<Self>) -> mask32x4<Self>;
859    #[doc = "Reinterpret a SIMD vector as a vector of bytes, with the equivalent byte length."]
860    fn cvt_to_bytes_mask32x4(self, a: mask32x4<Self>) -> u8x16<Self>;
861    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
862    fn slide_mask32x4<const SHIFT: usize>(
863        self,
864        a: mask32x4<Self>,
865        b: mask32x4<Self>,
866    ) -> mask32x4<Self>;
867    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
868    fn slide_within_blocks_mask32x4<const SHIFT: usize>(
869        self,
870        a: mask32x4<Self>,
871        b: mask32x4<Self>,
872    ) -> mask32x4<Self>;
873    #[doc = "Compute the logical AND of two masks."]
874    fn and_mask32x4(self, a: mask32x4<Self>, b: mask32x4<Self>) -> mask32x4<Self>;
875    #[doc = "Compute the logical OR of two masks."]
876    fn or_mask32x4(self, a: mask32x4<Self>, b: mask32x4<Self>) -> mask32x4<Self>;
877    #[doc = "Compute the logical XOR of two masks."]
878    fn xor_mask32x4(self, a: mask32x4<Self>, b: mask32x4<Self>) -> mask32x4<Self>;
879    #[doc = "Compute the logical NOT of the mask."]
880    fn not_mask32x4(self, a: mask32x4<Self>) -> mask32x4<Self>;
881    #[doc = "Select elements from `b` and `c` based on the mask operand `a`.\n\nThis operation's behavior is unspecified if each lane of a is not the all-zeroes or all-ones bit pattern. See the [`Select`] trait's documentation for more information."]
882    fn select_mask32x4(
883        self,
884        a: mask32x4<Self>,
885        b: mask32x4<Self>,
886        c: mask32x4<Self>,
887    ) -> mask32x4<Self>;
888    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
889    fn simd_eq_mask32x4(self, a: mask32x4<Self>, b: mask32x4<Self>) -> mask32x4<Self>;
890    #[doc = "Returns true if any elements in this mask are true (all ones).\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
891    fn any_true_mask32x4(self, a: mask32x4<Self>) -> bool;
892    #[doc = "Returns true if all elements in this mask are true (all ones).\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
893    fn all_true_mask32x4(self, a: mask32x4<Self>) -> bool;
894    #[doc = "Returns true if any elements in this mask are false (all zeroes).\n\nThis is logically equivalent to `!all_true`, but may be faster.\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
895    fn any_false_mask32x4(self, a: mask32x4<Self>) -> bool;
896    #[doc = "Returns true if all elements in this mask are false (all zeroes).\n\nThis is logically equivalent to `!any_true`, but may be faster.\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
897    fn all_false_mask32x4(self, a: mask32x4<Self>) -> bool;
898    #[doc = "Combine two vectors into a single vector with twice the width.\n\n`a` provides the lower elements and `b` provides the upper elements."]
899    fn combine_mask32x4(self, a: mask32x4<Self>, b: mask32x4<Self>) -> mask32x8<Self>;
900    #[doc = "Create a SIMD vector with all elements set to the given value."]
901    fn splat_f64x2(self, val: f64) -> f64x2<Self>;
902    #[doc = "Create a SIMD vector from an array of the same length."]
903    fn load_array_f64x2(self, val: [f64; 2usize]) -> f64x2<Self>;
904    #[doc = "Create a SIMD vector from an array of the same length."]
905    fn load_array_ref_f64x2(self, val: &[f64; 2usize]) -> f64x2<Self>;
906    #[doc = "Convert a SIMD vector to an array."]
907    fn as_array_f64x2(self, a: f64x2<Self>) -> [f64; 2usize];
908    #[doc = "Project a reference to a SIMD vector to a reference to the equivalent array."]
909    fn as_array_ref_f64x2(self, a: &f64x2<Self>) -> &[f64; 2usize];
910    #[doc = "Project a mutable reference to a SIMD vector to a mutable reference to the equivalent array."]
911    fn as_array_mut_f64x2(self, a: &mut f64x2<Self>) -> &mut [f64; 2usize];
912    #[doc = "Store a SIMD vector into an array of the same length."]
913    fn store_array_f64x2(self, a: f64x2<Self>, dest: &mut [f64; 2usize]) -> ();
914    #[doc = "Reinterpret a vector of bytes as a SIMD vector of a given type, with the equivalent byte length."]
915    fn cvt_from_bytes_f64x2(self, a: u8x16<Self>) -> f64x2<Self>;
916    #[doc = "Reinterpret a SIMD vector as a vector of bytes, with the equivalent byte length."]
917    fn cvt_to_bytes_f64x2(self, a: f64x2<Self>) -> u8x16<Self>;
918    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
919    fn slide_f64x2<const SHIFT: usize>(self, a: f64x2<Self>, b: f64x2<Self>) -> f64x2<Self>;
920    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
921    fn slide_within_blocks_f64x2<const SHIFT: usize>(
922        self,
923        a: f64x2<Self>,
924        b: f64x2<Self>,
925    ) -> f64x2<Self>;
926    #[doc = "Compute the absolute value of each element."]
927    fn abs_f64x2(self, a: f64x2<Self>) -> f64x2<Self>;
928    #[doc = "Negate each element of the vector."]
929    fn neg_f64x2(self, a: f64x2<Self>) -> f64x2<Self>;
930    #[doc = "Compute the square root of each element.\n\nNegative elements other than `-0.0` will become NaN."]
931    fn sqrt_f64x2(self, a: f64x2<Self>) -> f64x2<Self>;
932    #[doc = "Add two vectors element-wise."]
933    fn add_f64x2(self, a: f64x2<Self>, b: f64x2<Self>) -> f64x2<Self>;
934    #[doc = "Subtract two vectors element-wise."]
935    fn sub_f64x2(self, a: f64x2<Self>, b: f64x2<Self>) -> f64x2<Self>;
936    #[doc = "Multiply two vectors element-wise."]
937    fn mul_f64x2(self, a: f64x2<Self>, b: f64x2<Self>) -> f64x2<Self>;
938    #[doc = "Divide two vectors element-wise."]
939    fn div_f64x2(self, a: f64x2<Self>, b: f64x2<Self>) -> f64x2<Self>;
940    #[doc = "Return a vector with the magnitude of `a` and the sign of `b` for each element.\n\nThis operation copies the sign bit, so if an input element is NaN, the output element will be a NaN with the same payload and a copied sign bit."]
941    fn copysign_f64x2(self, a: f64x2<Self>, b: f64x2<Self>) -> f64x2<Self>;
942    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
943    fn simd_eq_f64x2(self, a: f64x2<Self>, b: f64x2<Self>) -> mask64x2<Self>;
944    #[doc = "Compare two vectors element-wise for less than.\n\nReturns a mask where each element is all ones if `a` is less than `b`, and all zeroes if not."]
945    fn simd_lt_f64x2(self, a: f64x2<Self>, b: f64x2<Self>) -> mask64x2<Self>;
946    #[doc = "Compare two vectors element-wise for less than or equal.\n\nReturns a mask where each element is all ones if `a` is less than or equal to `b`, and all zeroes if not."]
947    fn simd_le_f64x2(self, a: f64x2<Self>, b: f64x2<Self>) -> mask64x2<Self>;
948    #[doc = "Compare two vectors element-wise for greater than or equal.\n\nReturns a mask where each element is all ones if `a` is greater than or equal to `b`, and all zeroes if not."]
949    fn simd_ge_f64x2(self, a: f64x2<Self>, b: f64x2<Self>) -> mask64x2<Self>;
950    #[doc = "Compare two vectors element-wise for greater than.\n\nReturns a mask where each element is all ones if `a` is greater than `b`, and all zeroes if not."]
951    fn simd_gt_f64x2(self, a: f64x2<Self>, b: f64x2<Self>) -> mask64x2<Self>;
952    #[doc = "Interleave the lower half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, b0, a1, b1]`.\n\n**Note:** This operation is only useful if you need to discard elements `a2, a3, b2, b3`.\n        For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
953    fn zip_low_f64x2(self, a: f64x2<Self>, b: f64x2<Self>) -> f64x2<Self>;
954    #[doc = "Interleave the upper half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a2, b2, a3, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a1, b0, b1`.For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
955    fn zip_high_f64x2(self, a: f64x2<Self>, b: f64x2<Self>) -> f64x2<Self>;
956    #[doc = "Extract even-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, a2, b0, b2]`.\n\n**Note:** This operation is only useful if you need to discard elements `a1, a3, b1, b3`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
957    fn unzip_low_f64x2(self, a: f64x2<Self>, b: f64x2<Self>) -> f64x2<Self>;
958    #[doc = "Extract odd-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a1, a3, b1, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a2, b0, b2`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
959    fn unzip_high_f64x2(self, a: f64x2<Self>, b: f64x2<Self>) -> f64x2<Self>;
960    #[doc = "Interleave two vectors.\n\nThe resulting vectors contain elements taken alternately from `a` and `b`, first filling the first result, and then the second.\n\nThe reverse of this operation is `deinterleave`.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `([a0, b0, a1, b1], [a2, b2, a3, b3])`."]
961    fn interleave_f64x2(self, a: f64x2<Self>, b: f64x2<Self>) -> (f64x2<Self>, f64x2<Self>);
962    #[doc = "Deinterleave two vectors.\n\nThe first result contains all even-indexed elements from `a` followed by all even-indexed elements from `b`. The second result contains all odd-indexed elements from `a` followed by all odd-indexed elements from `b`.\n\nThe reverse of this operation is `interleave`.\n\nFor vectors `[a0, b0, a1, b1]` and `[a2, b2, a3, b3]`, returns `([a0, a1, a2, a3], [b0, b1, b2, b3])`."]
963    fn deinterleave_f64x2(self, a: f64x2<Self>, b: f64x2<Self>) -> (f64x2<Self>, f64x2<Self>);
964    #[doc = "Return the element-wise maximum of two vectors.\n\nIf either operand is NaN, the result for that lane is implementation-defined-- it could be either the first or second operand. See `max_precise` for a version that returns the non-NaN operand if only one is NaN.\n\nIf one operand is positive zero and the other is negative zero, the result is also implementation-defined, and it could be either one."]
965    fn max_f64x2(self, a: f64x2<Self>, b: f64x2<Self>) -> f64x2<Self>;
966    #[doc = "Return the element-wise minimum of two vectors.\n\nIf either operand is NaN, the result for that lane is implementation-defined-- it could be either the first or second operand. See `min_precise` for a version that returns the non-NaN operand if only one is NaN.\n\nIf one operand is positive zero and the other is negative zero, the result is also implementation-defined, and it could be either one."]
967    fn min_f64x2(self, a: f64x2<Self>, b: f64x2<Self>) -> f64x2<Self>;
968    #[doc = "Return the element-wise maximum of two vectors.\n\nIf one operand is a quiet NaN and the other is not, this operation will choose the non-NaN operand.\n\nIf one operand is positive zero and the other is negative zero, the result is implementation-defined, and it could be either one.\n\nIf an operand is a *signaling* NaN, the result is not just implementation-defined, but fully non-deterministic: it may be either NaN or the non-NaN operand.\nSignaling NaN values are not produced by floating-point math operations, only from manual initialization with specific bit patterns. You probably don't need to worry about them."]
969    fn max_precise_f64x2(self, a: f64x2<Self>, b: f64x2<Self>) -> f64x2<Self>;
970    #[doc = "Return the element-wise minimum of two vectors.\n\nIf one operand is a quiet NaN and the other is not, this operation will choose the non-NaN operand.\n\nIf one operand is positive zero and the other is negative zero, the result is implementation-defined, and it could be either one.\n\nIf an operand is a *signaling* NaN, the result is not just implementation-defined, but fully non-deterministic: it may be either NaN or the non-NaN operand.\nSignaling NaN values are not produced by floating-point math operations, only from manual initialization with specific bit patterns. You probably don't need to worry about them."]
971    fn min_precise_f64x2(self, a: f64x2<Self>, b: f64x2<Self>) -> f64x2<Self>;
972    #[doc = "Compute `(a * b) + c` (fused multiply-add) for each element.\n\nDepending on hardware support, the result may be computed with only one rounding error, or may be implemented as a regular multiply followed by an add, which will result in two rounding errors."]
973    fn mul_add_f64x2(self, a: f64x2<Self>, b: f64x2<Self>, c: f64x2<Self>) -> f64x2<Self>;
974    #[doc = "Compute `(a * b) - c` (fused multiply-subtract) for each element.\n\nDepending on hardware support, the result may be computed with only one rounding error, or may be implemented as a regular multiply followed by a subtract, which will result in two rounding errors."]
975    fn mul_sub_f64x2(self, a: f64x2<Self>, b: f64x2<Self>, c: f64x2<Self>) -> f64x2<Self>;
976    #[doc = "Return the largest integer less than or equal to each element, that is, round towards negative infinity."]
977    fn floor_f64x2(self, a: f64x2<Self>) -> f64x2<Self>;
978    #[doc = "Return the smallest integer greater than or equal to each element, that is, round towards positive infinity."]
979    fn ceil_f64x2(self, a: f64x2<Self>) -> f64x2<Self>;
980    #[doc = "Round each element to the nearest integer, with ties rounding to the nearest even integer.\n\nThere is no corresponding `round` operation. Rust's `round` operation rounds ties away from zero, a behavior it inherited from C. That behavior is not implemented across all platforms, whereas round-ties-even is."]
981    fn round_ties_even_f64x2(self, a: f64x2<Self>) -> f64x2<Self>;
982    #[doc = "Return the fractional part of each element.\n\nThis is equivalent to `a - a.trunc()`."]
983    fn fract_f64x2(self, a: f64x2<Self>) -> f64x2<Self>;
984    #[doc = "Return the integer part of each element, rounding towards zero."]
985    fn trunc_f64x2(self, a: f64x2<Self>) -> f64x2<Self>;
986    #[doc = "Select elements from b and c based on the mask operand a.\n\nThis operation's behavior is unspecified if each lane of a is not the all-zeroes or all-ones bit pattern. See the [`Select`] trait's documentation for more information."]
987    fn select_f64x2(self, a: mask64x2<Self>, b: f64x2<Self>, c: f64x2<Self>) -> f64x2<Self>;
988    #[doc = "Combine two vectors into a single vector with twice the width.\n\n`a` provides the lower elements and `b` provides the upper elements."]
989    fn combine_f64x2(self, a: f64x2<Self>, b: f64x2<Self>) -> f64x4<Self>;
990    #[doc = "Reinterpret the bits of this vector as a vector of `f32` elements.\n\nThe number of elements in the result is twice that of the input."]
991    fn reinterpret_f32_f64x2(self, a: f64x2<Self>) -> f32x4<Self>;
992    #[doc = "Create a SIMD vector with all elements set to the given value."]
993    fn splat_mask64x2(self, val: i64) -> mask64x2<Self>;
994    #[doc = "Create a SIMD vector from an array of the same length."]
995    fn load_array_mask64x2(self, val: [i64; 2usize]) -> mask64x2<Self>;
996    #[doc = "Create a SIMD vector from an array of the same length."]
997    fn load_array_ref_mask64x2(self, val: &[i64; 2usize]) -> mask64x2<Self>;
998    #[doc = "Convert a SIMD vector to an array."]
999    fn as_array_mask64x2(self, a: mask64x2<Self>) -> [i64; 2usize];
1000    #[doc = "Project a reference to a SIMD vector to a reference to the equivalent array."]
1001    fn as_array_ref_mask64x2(self, a: &mask64x2<Self>) -> &[i64; 2usize];
1002    #[doc = "Project a mutable reference to a SIMD vector to a mutable reference to the equivalent array."]
1003    fn as_array_mut_mask64x2(self, a: &mut mask64x2<Self>) -> &mut [i64; 2usize];
1004    #[doc = "Store a SIMD vector into an array of the same length."]
1005    fn store_array_mask64x2(self, a: mask64x2<Self>, dest: &mut [i64; 2usize]) -> ();
1006    #[doc = "Reinterpret a vector of bytes as a SIMD vector of a given type, with the equivalent byte length."]
1007    fn cvt_from_bytes_mask64x2(self, a: u8x16<Self>) -> mask64x2<Self>;
1008    #[doc = "Reinterpret a SIMD vector as a vector of bytes, with the equivalent byte length."]
1009    fn cvt_to_bytes_mask64x2(self, a: mask64x2<Self>) -> u8x16<Self>;
1010    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
1011    fn slide_mask64x2<const SHIFT: usize>(
1012        self,
1013        a: mask64x2<Self>,
1014        b: mask64x2<Self>,
1015    ) -> mask64x2<Self>;
1016    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
1017    fn slide_within_blocks_mask64x2<const SHIFT: usize>(
1018        self,
1019        a: mask64x2<Self>,
1020        b: mask64x2<Self>,
1021    ) -> mask64x2<Self>;
1022    #[doc = "Compute the logical AND of two masks."]
1023    fn and_mask64x2(self, a: mask64x2<Self>, b: mask64x2<Self>) -> mask64x2<Self>;
1024    #[doc = "Compute the logical OR of two masks."]
1025    fn or_mask64x2(self, a: mask64x2<Self>, b: mask64x2<Self>) -> mask64x2<Self>;
1026    #[doc = "Compute the logical XOR of two masks."]
1027    fn xor_mask64x2(self, a: mask64x2<Self>, b: mask64x2<Self>) -> mask64x2<Self>;
1028    #[doc = "Compute the logical NOT of the mask."]
1029    fn not_mask64x2(self, a: mask64x2<Self>) -> mask64x2<Self>;
1030    #[doc = "Select elements from `b` and `c` based on the mask operand `a`.\n\nThis operation's behavior is unspecified if each lane of a is not the all-zeroes or all-ones bit pattern. See the [`Select`] trait's documentation for more information."]
1031    fn select_mask64x2(
1032        self,
1033        a: mask64x2<Self>,
1034        b: mask64x2<Self>,
1035        c: mask64x2<Self>,
1036    ) -> mask64x2<Self>;
1037    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
1038    fn simd_eq_mask64x2(self, a: mask64x2<Self>, b: mask64x2<Self>) -> mask64x2<Self>;
1039    #[doc = "Returns true if any elements in this mask are true (all ones).\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
1040    fn any_true_mask64x2(self, a: mask64x2<Self>) -> bool;
1041    #[doc = "Returns true if all elements in this mask are true (all ones).\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
1042    fn all_true_mask64x2(self, a: mask64x2<Self>) -> bool;
1043    #[doc = "Returns true if any elements in this mask are false (all zeroes).\n\nThis is logically equivalent to `!all_true`, but may be faster.\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
1044    fn any_false_mask64x2(self, a: mask64x2<Self>) -> bool;
1045    #[doc = "Returns true if all elements in this mask are false (all zeroes).\n\nThis is logically equivalent to `!any_true`, but may be faster.\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
1046    fn all_false_mask64x2(self, a: mask64x2<Self>) -> bool;
1047    #[doc = "Combine two vectors into a single vector with twice the width.\n\n`a` provides the lower elements and `b` provides the upper elements."]
1048    fn combine_mask64x2(self, a: mask64x2<Self>, b: mask64x2<Self>) -> mask64x4<Self>;
1049    #[doc = "Create a SIMD vector with all elements set to the given value."]
1050    fn splat_f32x8(self, val: f32) -> f32x8<Self>;
1051    #[doc = "Create a SIMD vector from an array of the same length."]
1052    fn load_array_f32x8(self, val: [f32; 8usize]) -> f32x8<Self>;
1053    #[doc = "Create a SIMD vector from an array of the same length."]
1054    fn load_array_ref_f32x8(self, val: &[f32; 8usize]) -> f32x8<Self>;
1055    #[doc = "Convert a SIMD vector to an array."]
1056    fn as_array_f32x8(self, a: f32x8<Self>) -> [f32; 8usize];
1057    #[doc = "Project a reference to a SIMD vector to a reference to the equivalent array."]
1058    fn as_array_ref_f32x8(self, a: &f32x8<Self>) -> &[f32; 8usize];
1059    #[doc = "Project a mutable reference to a SIMD vector to a mutable reference to the equivalent array."]
1060    fn as_array_mut_f32x8(self, a: &mut f32x8<Self>) -> &mut [f32; 8usize];
1061    #[doc = "Store a SIMD vector into an array of the same length."]
1062    fn store_array_f32x8(self, a: f32x8<Self>, dest: &mut [f32; 8usize]) -> ();
1063    #[doc = "Reinterpret a vector of bytes as a SIMD vector of a given type, with the equivalent byte length."]
1064    fn cvt_from_bytes_f32x8(self, a: u8x32<Self>) -> f32x8<Self>;
1065    #[doc = "Reinterpret a SIMD vector as a vector of bytes, with the equivalent byte length."]
1066    fn cvt_to_bytes_f32x8(self, a: f32x8<Self>) -> u8x32<Self>;
1067    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
1068    fn slide_f32x8<const SHIFT: usize>(self, a: f32x8<Self>, b: f32x8<Self>) -> f32x8<Self>;
1069    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
1070    fn slide_within_blocks_f32x8<const SHIFT: usize>(
1071        self,
1072        a: f32x8<Self>,
1073        b: f32x8<Self>,
1074    ) -> f32x8<Self>;
1075    #[doc = "Compute the absolute value of each element."]
1076    fn abs_f32x8(self, a: f32x8<Self>) -> f32x8<Self>;
1077    #[doc = "Negate each element of the vector."]
1078    fn neg_f32x8(self, a: f32x8<Self>) -> f32x8<Self>;
1079    #[doc = "Compute the square root of each element.\n\nNegative elements other than `-0.0` will become NaN."]
1080    fn sqrt_f32x8(self, a: f32x8<Self>) -> f32x8<Self>;
1081    #[doc = "Add two vectors element-wise."]
1082    fn add_f32x8(self, a: f32x8<Self>, b: f32x8<Self>) -> f32x8<Self>;
1083    #[doc = "Subtract two vectors element-wise."]
1084    fn sub_f32x8(self, a: f32x8<Self>, b: f32x8<Self>) -> f32x8<Self>;
1085    #[doc = "Multiply two vectors element-wise."]
1086    fn mul_f32x8(self, a: f32x8<Self>, b: f32x8<Self>) -> f32x8<Self>;
1087    #[doc = "Divide two vectors element-wise."]
1088    fn div_f32x8(self, a: f32x8<Self>, b: f32x8<Self>) -> f32x8<Self>;
1089    #[doc = "Return a vector with the magnitude of `a` and the sign of `b` for each element.\n\nThis operation copies the sign bit, so if an input element is NaN, the output element will be a NaN with the same payload and a copied sign bit."]
1090    fn copysign_f32x8(self, a: f32x8<Self>, b: f32x8<Self>) -> f32x8<Self>;
1091    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
1092    fn simd_eq_f32x8(self, a: f32x8<Self>, b: f32x8<Self>) -> mask32x8<Self>;
1093    #[doc = "Compare two vectors element-wise for less than.\n\nReturns a mask where each element is all ones if `a` is less than `b`, and all zeroes if not."]
1094    fn simd_lt_f32x8(self, a: f32x8<Self>, b: f32x8<Self>) -> mask32x8<Self>;
1095    #[doc = "Compare two vectors element-wise for less than or equal.\n\nReturns a mask where each element is all ones if `a` is less than or equal to `b`, and all zeroes if not."]
1096    fn simd_le_f32x8(self, a: f32x8<Self>, b: f32x8<Self>) -> mask32x8<Self>;
1097    #[doc = "Compare two vectors element-wise for greater than or equal.\n\nReturns a mask where each element is all ones if `a` is greater than or equal to `b`, and all zeroes if not."]
1098    fn simd_ge_f32x8(self, a: f32x8<Self>, b: f32x8<Self>) -> mask32x8<Self>;
1099    #[doc = "Compare two vectors element-wise for greater than.\n\nReturns a mask where each element is all ones if `a` is greater than `b`, and all zeroes if not."]
1100    fn simd_gt_f32x8(self, a: f32x8<Self>, b: f32x8<Self>) -> mask32x8<Self>;
1101    #[doc = "Interleave the lower half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, b0, a1, b1]`.\n\n**Note:** This operation is only useful if you need to discard elements `a2, a3, b2, b3`.\n        For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
1102    fn zip_low_f32x8(self, a: f32x8<Self>, b: f32x8<Self>) -> f32x8<Self>;
1103    #[doc = "Interleave the upper half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a2, b2, a3, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a1, b0, b1`.For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
1104    fn zip_high_f32x8(self, a: f32x8<Self>, b: f32x8<Self>) -> f32x8<Self>;
1105    #[doc = "Extract even-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, a2, b0, b2]`.\n\n**Note:** This operation is only useful if you need to discard elements `a1, a3, b1, b3`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
1106    fn unzip_low_f32x8(self, a: f32x8<Self>, b: f32x8<Self>) -> f32x8<Self>;
1107    #[doc = "Extract odd-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a1, a3, b1, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a2, b0, b2`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
1108    fn unzip_high_f32x8(self, a: f32x8<Self>, b: f32x8<Self>) -> f32x8<Self>;
1109    #[doc = "Interleave two vectors.\n\nThe resulting vectors contain elements taken alternately from `a` and `b`, first filling the first result, and then the second.\n\nThe reverse of this operation is `deinterleave`.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `([a0, b0, a1, b1], [a2, b2, a3, b3])`."]
1110    fn interleave_f32x8(self, a: f32x8<Self>, b: f32x8<Self>) -> (f32x8<Self>, f32x8<Self>);
1111    #[doc = "Deinterleave two vectors.\n\nThe first result contains all even-indexed elements from `a` followed by all even-indexed elements from `b`. The second result contains all odd-indexed elements from `a` followed by all odd-indexed elements from `b`.\n\nThe reverse of this operation is `interleave`.\n\nFor vectors `[a0, b0, a1, b1]` and `[a2, b2, a3, b3]`, returns `([a0, a1, a2, a3], [b0, b1, b2, b3])`."]
1112    fn deinterleave_f32x8(self, a: f32x8<Self>, b: f32x8<Self>) -> (f32x8<Self>, f32x8<Self>);
1113    #[doc = "Return the element-wise maximum of two vectors.\n\nIf either operand is NaN, the result for that lane is implementation-defined-- it could be either the first or second operand. See `max_precise` for a version that returns the non-NaN operand if only one is NaN.\n\nIf one operand is positive zero and the other is negative zero, the result is also implementation-defined, and it could be either one."]
1114    fn max_f32x8(self, a: f32x8<Self>, b: f32x8<Self>) -> f32x8<Self>;
1115    #[doc = "Return the element-wise minimum of two vectors.\n\nIf either operand is NaN, the result for that lane is implementation-defined-- it could be either the first or second operand. See `min_precise` for a version that returns the non-NaN operand if only one is NaN.\n\nIf one operand is positive zero and the other is negative zero, the result is also implementation-defined, and it could be either one."]
1116    fn min_f32x8(self, a: f32x8<Self>, b: f32x8<Self>) -> f32x8<Self>;
1117    #[doc = "Return the element-wise maximum of two vectors.\n\nIf one operand is a quiet NaN and the other is not, this operation will choose the non-NaN operand.\n\nIf one operand is positive zero and the other is negative zero, the result is implementation-defined, and it could be either one.\n\nIf an operand is a *signaling* NaN, the result is not just implementation-defined, but fully non-deterministic: it may be either NaN or the non-NaN operand.\nSignaling NaN values are not produced by floating-point math operations, only from manual initialization with specific bit patterns. You probably don't need to worry about them."]
1118    fn max_precise_f32x8(self, a: f32x8<Self>, b: f32x8<Self>) -> f32x8<Self>;
1119    #[doc = "Return the element-wise minimum of two vectors.\n\nIf one operand is a quiet NaN and the other is not, this operation will choose the non-NaN operand.\n\nIf one operand is positive zero and the other is negative zero, the result is implementation-defined, and it could be either one.\n\nIf an operand is a *signaling* NaN, the result is not just implementation-defined, but fully non-deterministic: it may be either NaN or the non-NaN operand.\nSignaling NaN values are not produced by floating-point math operations, only from manual initialization with specific bit patterns. You probably don't need to worry about them."]
1120    fn min_precise_f32x8(self, a: f32x8<Self>, b: f32x8<Self>) -> f32x8<Self>;
1121    #[doc = "Compute `(a * b) + c` (fused multiply-add) for each element.\n\nDepending on hardware support, the result may be computed with only one rounding error, or may be implemented as a regular multiply followed by an add, which will result in two rounding errors."]
1122    fn mul_add_f32x8(self, a: f32x8<Self>, b: f32x8<Self>, c: f32x8<Self>) -> f32x8<Self>;
1123    #[doc = "Compute `(a * b) - c` (fused multiply-subtract) for each element.\n\nDepending on hardware support, the result may be computed with only one rounding error, or may be implemented as a regular multiply followed by a subtract, which will result in two rounding errors."]
1124    fn mul_sub_f32x8(self, a: f32x8<Self>, b: f32x8<Self>, c: f32x8<Self>) -> f32x8<Self>;
1125    #[doc = "Return the largest integer less than or equal to each element, that is, round towards negative infinity."]
1126    fn floor_f32x8(self, a: f32x8<Self>) -> f32x8<Self>;
1127    #[doc = "Return the smallest integer greater than or equal to each element, that is, round towards positive infinity."]
1128    fn ceil_f32x8(self, a: f32x8<Self>) -> f32x8<Self>;
1129    #[doc = "Round each element to the nearest integer, with ties rounding to the nearest even integer.\n\nThere is no corresponding `round` operation. Rust's `round` operation rounds ties away from zero, a behavior it inherited from C. That behavior is not implemented across all platforms, whereas round-ties-even is."]
1130    fn round_ties_even_f32x8(self, a: f32x8<Self>) -> f32x8<Self>;
1131    #[doc = "Return the fractional part of each element.\n\nThis is equivalent to `a - a.trunc()`."]
1132    fn fract_f32x8(self, a: f32x8<Self>) -> f32x8<Self>;
1133    #[doc = "Return the integer part of each element, rounding towards zero."]
1134    fn trunc_f32x8(self, a: f32x8<Self>) -> f32x8<Self>;
1135    #[doc = "Select elements from b and c based on the mask operand a.\n\nThis operation's behavior is unspecified if each lane of a is not the all-zeroes or all-ones bit pattern. See the [`Select`] trait's documentation for more information."]
1136    fn select_f32x8(self, a: mask32x8<Self>, b: f32x8<Self>, c: f32x8<Self>) -> f32x8<Self>;
1137    #[doc = "Combine two vectors into a single vector with twice the width.\n\n`a` provides the lower elements and `b` provides the upper elements."]
1138    fn combine_f32x8(self, a: f32x8<Self>, b: f32x8<Self>) -> f32x16<Self>;
1139    #[doc = "Split a vector into two vectors of half the width.\n\nReturns a tuple of (lower half, upper half)."]
1140    fn split_f32x8(self, a: f32x8<Self>) -> (f32x4<Self>, f32x4<Self>);
1141    #[doc = "Reinterpret the bits of this vector as a vector of `f64` elements.\n\nThe number of elements in the result is half that of the input."]
1142    fn reinterpret_f64_f32x8(self, a: f32x8<Self>) -> f64x4<Self>;
1143    #[doc = "Reinterpret the bits of this vector as a vector of `i32` elements.\n\nThis is a bitwise reinterpretation only, and does not perform any conversions."]
1144    fn reinterpret_i32_f32x8(self, a: f32x8<Self>) -> i32x8<Self>;
1145    #[doc = "Reinterpret the bits of this vector as a vector of `u8` elements.\n\nThe total bit width is preserved; the number of elements changes accordingly."]
1146    fn reinterpret_u8_f32x8(self, a: f32x8<Self>) -> u8x32<Self>;
1147    #[doc = "Reinterpret the bits of this vector as a vector of `u32` elements.\n\nThe total bit width is preserved; the number of elements changes accordingly."]
1148    fn reinterpret_u32_f32x8(self, a: f32x8<Self>) -> u32x8<Self>;
1149    #[doc = "Convert each floating-point element to an unsigned 32-bit integer, truncating towards zero.\n\nOut-of-range values or NaN will produce implementation-defined results.\n\nOn x86 platforms, this operation will still be slower than converting to `i32`, because there is no native instruction for converting to `u32` (at least until AVX-512, which is currently not supported).\nIf you know your values fit within range of an `i32`, you should convert to an `i32` and cast to your desired datatype afterwards."]
1150    fn cvt_u32_f32x8(self, a: f32x8<Self>) -> u32x8<Self>;
1151    #[doc = "Convert each floating-point element to an unsigned 32-bit integer, truncating towards zero.\n\nOut-of-range values are saturated to the closest in-range value. NaN becomes 0."]
1152    fn cvt_u32_precise_f32x8(self, a: f32x8<Self>) -> u32x8<Self>;
1153    #[doc = "Convert each floating-point element to a signed 32-bit integer, truncating towards zero.\n\nOut-of-range values or NaN will produce implementation-defined results."]
1154    fn cvt_i32_f32x8(self, a: f32x8<Self>) -> i32x8<Self>;
1155    #[doc = "Convert each floating-point element to a signed 32-bit integer, truncating towards zero.\n\nOut-of-range values are saturated to the closest in-range value. NaN becomes 0."]
1156    fn cvt_i32_precise_f32x8(self, a: f32x8<Self>) -> i32x8<Self>;
1157    #[doc = "Create a SIMD vector with all elements set to the given value."]
1158    fn splat_i8x32(self, val: i8) -> i8x32<Self>;
1159    #[doc = "Create a SIMD vector from an array of the same length."]
1160    fn load_array_i8x32(self, val: [i8; 32usize]) -> i8x32<Self>;
1161    #[doc = "Create a SIMD vector from an array of the same length."]
1162    fn load_array_ref_i8x32(self, val: &[i8; 32usize]) -> i8x32<Self>;
1163    #[doc = "Convert a SIMD vector to an array."]
1164    fn as_array_i8x32(self, a: i8x32<Self>) -> [i8; 32usize];
1165    #[doc = "Project a reference to a SIMD vector to a reference to the equivalent array."]
1166    fn as_array_ref_i8x32(self, a: &i8x32<Self>) -> &[i8; 32usize];
1167    #[doc = "Project a mutable reference to a SIMD vector to a mutable reference to the equivalent array."]
1168    fn as_array_mut_i8x32(self, a: &mut i8x32<Self>) -> &mut [i8; 32usize];
1169    #[doc = "Store a SIMD vector into an array of the same length."]
1170    fn store_array_i8x32(self, a: i8x32<Self>, dest: &mut [i8; 32usize]) -> ();
1171    #[doc = "Reinterpret a vector of bytes as a SIMD vector of a given type, with the equivalent byte length."]
1172    fn cvt_from_bytes_i8x32(self, a: u8x32<Self>) -> i8x32<Self>;
1173    #[doc = "Reinterpret a SIMD vector as a vector of bytes, with the equivalent byte length."]
1174    fn cvt_to_bytes_i8x32(self, a: i8x32<Self>) -> u8x32<Self>;
1175    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
1176    fn slide_i8x32<const SHIFT: usize>(self, a: i8x32<Self>, b: i8x32<Self>) -> i8x32<Self>;
1177    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
1178    fn slide_within_blocks_i8x32<const SHIFT: usize>(
1179        self,
1180        a: i8x32<Self>,
1181        b: i8x32<Self>,
1182    ) -> i8x32<Self>;
1183    #[doc = "Add two vectors element-wise, wrapping on overflow."]
1184    fn add_i8x32(self, a: i8x32<Self>, b: i8x32<Self>) -> i8x32<Self>;
1185    #[doc = "Subtract two vectors element-wise, wrapping on overflow."]
1186    fn sub_i8x32(self, a: i8x32<Self>, b: i8x32<Self>) -> i8x32<Self>;
1187    #[doc = "Multiply two vectors element-wise, wrapping on overflow."]
1188    fn mul_i8x32(self, a: i8x32<Self>, b: i8x32<Self>) -> i8x32<Self>;
1189    #[doc = "Compute the bitwise AND of two vectors."]
1190    fn and_i8x32(self, a: i8x32<Self>, b: i8x32<Self>) -> i8x32<Self>;
1191    #[doc = "Compute the bitwise OR of two vectors."]
1192    fn or_i8x32(self, a: i8x32<Self>, b: i8x32<Self>) -> i8x32<Self>;
1193    #[doc = "Compute the bitwise XOR of two vectors."]
1194    fn xor_i8x32(self, a: i8x32<Self>, b: i8x32<Self>) -> i8x32<Self>;
1195    #[doc = "Compute the bitwise NOT of the vector."]
1196    fn not_i8x32(self, a: i8x32<Self>) -> i8x32<Self>;
1197    #[doc = "Shift each element left by the given number of bits.\n\nBits shifted out of the left side are discarded, and zeros are shifted in on the right."]
1198    fn shl_i8x32(self, a: i8x32<Self>, shift: u32) -> i8x32<Self>;
1199    #[doc = "Shift each element left by the given number of bits.\n\nBits shifted out of the left side are discarded, and zeros are shifted in on the right.\n\nThis operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation."]
1200    fn shlv_i8x32(self, a: i8x32<Self>, b: i8x32<Self>) -> i8x32<Self>;
1201    #[doc = "Shift each element right by the given number of bits.\n\nFor unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated."]
1202    fn shr_i8x32(self, a: i8x32<Self>, shift: u32) -> i8x32<Self>;
1203    #[doc = "Shift each element right by the corresponding element in another vector.\n\nFor unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated.\n\nThis operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation."]
1204    fn shrv_i8x32(self, a: i8x32<Self>, b: i8x32<Self>) -> i8x32<Self>;
1205    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
1206    fn simd_eq_i8x32(self, a: i8x32<Self>, b: i8x32<Self>) -> mask8x32<Self>;
1207    #[doc = "Compare two vectors element-wise for less than.\n\nReturns a mask where each element is all ones if `a` is less than `b`, and all zeroes if not."]
1208    fn simd_lt_i8x32(self, a: i8x32<Self>, b: i8x32<Self>) -> mask8x32<Self>;
1209    #[doc = "Compare two vectors element-wise for less than or equal.\n\nReturns a mask where each element is all ones if `a` is less than or equal to `b`, and all zeroes if not."]
1210    fn simd_le_i8x32(self, a: i8x32<Self>, b: i8x32<Self>) -> mask8x32<Self>;
1211    #[doc = "Compare two vectors element-wise for greater than or equal.\n\nReturns a mask where each element is all ones if `a` is greater than or equal to `b`, and all zeroes if not."]
1212    fn simd_ge_i8x32(self, a: i8x32<Self>, b: i8x32<Self>) -> mask8x32<Self>;
1213    #[doc = "Compare two vectors element-wise for greater than.\n\nReturns a mask where each element is all ones if `a` is greater than `b`, and all zeroes if not."]
1214    fn simd_gt_i8x32(self, a: i8x32<Self>, b: i8x32<Self>) -> mask8x32<Self>;
1215    #[doc = "Interleave the lower half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, b0, a1, b1]`.\n\n**Note:** This operation is only useful if you need to discard elements `a2, a3, b2, b3`.\n        For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
1216    fn zip_low_i8x32(self, a: i8x32<Self>, b: i8x32<Self>) -> i8x32<Self>;
1217    #[doc = "Interleave the upper half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a2, b2, a3, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a1, b0, b1`.For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
1218    fn zip_high_i8x32(self, a: i8x32<Self>, b: i8x32<Self>) -> i8x32<Self>;
1219    #[doc = "Extract even-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, a2, b0, b2]`.\n\n**Note:** This operation is only useful if you need to discard elements `a1, a3, b1, b3`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
1220    fn unzip_low_i8x32(self, a: i8x32<Self>, b: i8x32<Self>) -> i8x32<Self>;
1221    #[doc = "Extract odd-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a1, a3, b1, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a2, b0, b2`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
1222    fn unzip_high_i8x32(self, a: i8x32<Self>, b: i8x32<Self>) -> i8x32<Self>;
1223    #[doc = "Interleave two vectors.\n\nThe resulting vectors contain elements taken alternately from `a` and `b`, first filling the first result, and then the second.\n\nThe reverse of this operation is `deinterleave`.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `([a0, b0, a1, b1], [a2, b2, a3, b3])`."]
1224    fn interleave_i8x32(self, a: i8x32<Self>, b: i8x32<Self>) -> (i8x32<Self>, i8x32<Self>);
1225    #[doc = "Deinterleave two vectors.\n\nThe first result contains all even-indexed elements from `a` followed by all even-indexed elements from `b`. The second result contains all odd-indexed elements from `a` followed by all odd-indexed elements from `b`.\n\nThe reverse of this operation is `interleave`.\n\nFor vectors `[a0, b0, a1, b1]` and `[a2, b2, a3, b3]`, returns `([a0, a1, a2, a3], [b0, b1, b2, b3])`."]
1226    fn deinterleave_i8x32(self, a: i8x32<Self>, b: i8x32<Self>) -> (i8x32<Self>, i8x32<Self>);
1227    #[doc = "Select elements from b and c based on the mask operand a.\n\nThis operation's behavior is unspecified if each lane of a is not the all-zeroes or all-ones bit pattern. See the [`Select`] trait's documentation for more information."]
1228    fn select_i8x32(self, a: mask8x32<Self>, b: i8x32<Self>, c: i8x32<Self>) -> i8x32<Self>;
1229    #[doc = "Return the element-wise minimum of two vectors."]
1230    fn min_i8x32(self, a: i8x32<Self>, b: i8x32<Self>) -> i8x32<Self>;
1231    #[doc = "Return the element-wise maximum of two vectors."]
1232    fn max_i8x32(self, a: i8x32<Self>, b: i8x32<Self>) -> i8x32<Self>;
1233    #[doc = "Combine two vectors into a single vector with twice the width.\n\n`a` provides the lower elements and `b` provides the upper elements."]
1234    fn combine_i8x32(self, a: i8x32<Self>, b: i8x32<Self>) -> i8x64<Self>;
1235    #[doc = "Split a vector into two vectors of half the width.\n\nReturns a tuple of (lower half, upper half)."]
1236    fn split_i8x32(self, a: i8x32<Self>) -> (i8x16<Self>, i8x16<Self>);
1237    #[doc = "Negate each element of the vector, wrapping on overflow."]
1238    fn neg_i8x32(self, a: i8x32<Self>) -> i8x32<Self>;
1239    #[doc = "Reinterpret the bits of this vector as a vector of `u8` elements.\n\nThe total bit width is preserved; the number of elements changes accordingly."]
1240    fn reinterpret_u8_i8x32(self, a: i8x32<Self>) -> u8x32<Self>;
1241    #[doc = "Reinterpret the bits of this vector as a vector of `u32` elements.\n\nThe total bit width is preserved; the number of elements changes accordingly."]
1242    fn reinterpret_u32_i8x32(self, a: i8x32<Self>) -> u32x8<Self>;
1243    #[doc = "Create a SIMD vector with all elements set to the given value."]
1244    fn splat_u8x32(self, val: u8) -> u8x32<Self>;
1245    #[doc = "Create a SIMD vector from an array of the same length."]
1246    fn load_array_u8x32(self, val: [u8; 32usize]) -> u8x32<Self>;
1247    #[doc = "Create a SIMD vector from an array of the same length."]
1248    fn load_array_ref_u8x32(self, val: &[u8; 32usize]) -> u8x32<Self>;
1249    #[doc = "Convert a SIMD vector to an array."]
1250    fn as_array_u8x32(self, a: u8x32<Self>) -> [u8; 32usize];
1251    #[doc = "Project a reference to a SIMD vector to a reference to the equivalent array."]
1252    fn as_array_ref_u8x32(self, a: &u8x32<Self>) -> &[u8; 32usize];
1253    #[doc = "Project a mutable reference to a SIMD vector to a mutable reference to the equivalent array."]
1254    fn as_array_mut_u8x32(self, a: &mut u8x32<Self>) -> &mut [u8; 32usize];
1255    #[doc = "Store a SIMD vector into an array of the same length."]
1256    fn store_array_u8x32(self, a: u8x32<Self>, dest: &mut [u8; 32usize]) -> ();
1257    #[doc = "Reinterpret a vector of bytes as a SIMD vector of a given type, with the equivalent byte length."]
1258    fn cvt_from_bytes_u8x32(self, a: u8x32<Self>) -> u8x32<Self>;
1259    #[doc = "Reinterpret a SIMD vector as a vector of bytes, with the equivalent byte length."]
1260    fn cvt_to_bytes_u8x32(self, a: u8x32<Self>) -> u8x32<Self>;
1261    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
1262    fn slide_u8x32<const SHIFT: usize>(self, a: u8x32<Self>, b: u8x32<Self>) -> u8x32<Self>;
1263    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
1264    fn slide_within_blocks_u8x32<const SHIFT: usize>(
1265        self,
1266        a: u8x32<Self>,
1267        b: u8x32<Self>,
1268    ) -> u8x32<Self>;
1269    #[doc = "Add two vectors element-wise, wrapping on overflow."]
1270    fn add_u8x32(self, a: u8x32<Self>, b: u8x32<Self>) -> u8x32<Self>;
1271    #[doc = "Subtract two vectors element-wise, wrapping on overflow."]
1272    fn sub_u8x32(self, a: u8x32<Self>, b: u8x32<Self>) -> u8x32<Self>;
1273    #[doc = "Multiply two vectors element-wise, wrapping on overflow."]
1274    fn mul_u8x32(self, a: u8x32<Self>, b: u8x32<Self>) -> u8x32<Self>;
1275    #[doc = "Compute the bitwise AND of two vectors."]
1276    fn and_u8x32(self, a: u8x32<Self>, b: u8x32<Self>) -> u8x32<Self>;
1277    #[doc = "Compute the bitwise OR of two vectors."]
1278    fn or_u8x32(self, a: u8x32<Self>, b: u8x32<Self>) -> u8x32<Self>;
1279    #[doc = "Compute the bitwise XOR of two vectors."]
1280    fn xor_u8x32(self, a: u8x32<Self>, b: u8x32<Self>) -> u8x32<Self>;
1281    #[doc = "Compute the bitwise NOT of the vector."]
1282    fn not_u8x32(self, a: u8x32<Self>) -> u8x32<Self>;
1283    #[doc = "Shift each element left by the given number of bits.\n\nBits shifted out of the left side are discarded, and zeros are shifted in on the right."]
1284    fn shl_u8x32(self, a: u8x32<Self>, shift: u32) -> u8x32<Self>;
1285    #[doc = "Shift each element left by the given number of bits.\n\nBits shifted out of the left side are discarded, and zeros are shifted in on the right.\n\nThis operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation."]
1286    fn shlv_u8x32(self, a: u8x32<Self>, b: u8x32<Self>) -> u8x32<Self>;
1287    #[doc = "Shift each element right by the given number of bits.\n\nFor unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated."]
1288    fn shr_u8x32(self, a: u8x32<Self>, shift: u32) -> u8x32<Self>;
1289    #[doc = "Shift each element right by the corresponding element in another vector.\n\nFor unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated.\n\nThis operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation."]
1290    fn shrv_u8x32(self, a: u8x32<Self>, b: u8x32<Self>) -> u8x32<Self>;
1291    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
1292    fn simd_eq_u8x32(self, a: u8x32<Self>, b: u8x32<Self>) -> mask8x32<Self>;
1293    #[doc = "Compare two vectors element-wise for less than.\n\nReturns a mask where each element is all ones if `a` is less than `b`, and all zeroes if not."]
1294    fn simd_lt_u8x32(self, a: u8x32<Self>, b: u8x32<Self>) -> mask8x32<Self>;
1295    #[doc = "Compare two vectors element-wise for less than or equal.\n\nReturns a mask where each element is all ones if `a` is less than or equal to `b`, and all zeroes if not."]
1296    fn simd_le_u8x32(self, a: u8x32<Self>, b: u8x32<Self>) -> mask8x32<Self>;
1297    #[doc = "Compare two vectors element-wise for greater than or equal.\n\nReturns a mask where each element is all ones if `a` is greater than or equal to `b`, and all zeroes if not."]
1298    fn simd_ge_u8x32(self, a: u8x32<Self>, b: u8x32<Self>) -> mask8x32<Self>;
1299    #[doc = "Compare two vectors element-wise for greater than.\n\nReturns a mask where each element is all ones if `a` is greater than `b`, and all zeroes if not."]
1300    fn simd_gt_u8x32(self, a: u8x32<Self>, b: u8x32<Self>) -> mask8x32<Self>;
1301    #[doc = "Interleave the lower half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, b0, a1, b1]`.\n\n**Note:** This operation is only useful if you need to discard elements `a2, a3, b2, b3`.\n        For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
1302    fn zip_low_u8x32(self, a: u8x32<Self>, b: u8x32<Self>) -> u8x32<Self>;
1303    #[doc = "Interleave the upper half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a2, b2, a3, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a1, b0, b1`.For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
1304    fn zip_high_u8x32(self, a: u8x32<Self>, b: u8x32<Self>) -> u8x32<Self>;
1305    #[doc = "Extract even-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, a2, b0, b2]`.\n\n**Note:** This operation is only useful if you need to discard elements `a1, a3, b1, b3`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
1306    fn unzip_low_u8x32(self, a: u8x32<Self>, b: u8x32<Self>) -> u8x32<Self>;
1307    #[doc = "Extract odd-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a1, a3, b1, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a2, b0, b2`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
1308    fn unzip_high_u8x32(self, a: u8x32<Self>, b: u8x32<Self>) -> u8x32<Self>;
1309    #[doc = "Interleave two vectors.\n\nThe resulting vectors contain elements taken alternately from `a` and `b`, first filling the first result, and then the second.\n\nThe reverse of this operation is `deinterleave`.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `([a0, b0, a1, b1], [a2, b2, a3, b3])`."]
1310    fn interleave_u8x32(self, a: u8x32<Self>, b: u8x32<Self>) -> (u8x32<Self>, u8x32<Self>);
1311    #[doc = "Deinterleave two vectors.\n\nThe first result contains all even-indexed elements from `a` followed by all even-indexed elements from `b`. The second result contains all odd-indexed elements from `a` followed by all odd-indexed elements from `b`.\n\nThe reverse of this operation is `interleave`.\n\nFor vectors `[a0, b0, a1, b1]` and `[a2, b2, a3, b3]`, returns `([a0, a1, a2, a3], [b0, b1, b2, b3])`."]
1312    fn deinterleave_u8x32(self, a: u8x32<Self>, b: u8x32<Self>) -> (u8x32<Self>, u8x32<Self>);
1313    #[doc = "Select elements from b and c based on the mask operand a.\n\nThis operation's behavior is unspecified if each lane of a is not the all-zeroes or all-ones bit pattern. See the [`Select`] trait's documentation for more information."]
1314    fn select_u8x32(self, a: mask8x32<Self>, b: u8x32<Self>, c: u8x32<Self>) -> u8x32<Self>;
1315    #[doc = "Return the element-wise minimum of two vectors."]
1316    fn min_u8x32(self, a: u8x32<Self>, b: u8x32<Self>) -> u8x32<Self>;
1317    #[doc = "Return the element-wise maximum of two vectors."]
1318    fn max_u8x32(self, a: u8x32<Self>, b: u8x32<Self>) -> u8x32<Self>;
1319    #[doc = "Combine two vectors into a single vector with twice the width.\n\n`a` provides the lower elements and `b` provides the upper elements."]
1320    fn combine_u8x32(self, a: u8x32<Self>, b: u8x32<Self>) -> u8x64<Self>;
1321    #[doc = "Split a vector into two vectors of half the width.\n\nReturns a tuple of (lower half, upper half)."]
1322    fn split_u8x32(self, a: u8x32<Self>) -> (u8x16<Self>, u8x16<Self>);
1323    #[doc = "Zero-extend each element to a wider integer type.\n\nThe number of elements in the result is half that of the input."]
1324    fn widen_u8x32(self, a: u8x32<Self>) -> u16x32<Self>;
1325    #[doc = "Reinterpret the bits of this vector as a vector of `u32` elements.\n\nThe total bit width is preserved; the number of elements changes accordingly."]
1326    fn reinterpret_u32_u8x32(self, a: u8x32<Self>) -> u32x8<Self>;
1327    #[doc = "Create a SIMD vector with all elements set to the given value."]
1328    fn splat_mask8x32(self, val: i8) -> mask8x32<Self>;
1329    #[doc = "Create a SIMD vector from an array of the same length."]
1330    fn load_array_mask8x32(self, val: [i8; 32usize]) -> mask8x32<Self>;
1331    #[doc = "Create a SIMD vector from an array of the same length."]
1332    fn load_array_ref_mask8x32(self, val: &[i8; 32usize]) -> mask8x32<Self>;
1333    #[doc = "Convert a SIMD vector to an array."]
1334    fn as_array_mask8x32(self, a: mask8x32<Self>) -> [i8; 32usize];
1335    #[doc = "Project a reference to a SIMD vector to a reference to the equivalent array."]
1336    fn as_array_ref_mask8x32(self, a: &mask8x32<Self>) -> &[i8; 32usize];
1337    #[doc = "Project a mutable reference to a SIMD vector to a mutable reference to the equivalent array."]
1338    fn as_array_mut_mask8x32(self, a: &mut mask8x32<Self>) -> &mut [i8; 32usize];
1339    #[doc = "Store a SIMD vector into an array of the same length."]
1340    fn store_array_mask8x32(self, a: mask8x32<Self>, dest: &mut [i8; 32usize]) -> ();
1341    #[doc = "Reinterpret a vector of bytes as a SIMD vector of a given type, with the equivalent byte length."]
1342    fn cvt_from_bytes_mask8x32(self, a: u8x32<Self>) -> mask8x32<Self>;
1343    #[doc = "Reinterpret a SIMD vector as a vector of bytes, with the equivalent byte length."]
1344    fn cvt_to_bytes_mask8x32(self, a: mask8x32<Self>) -> u8x32<Self>;
1345    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
1346    fn slide_mask8x32<const SHIFT: usize>(
1347        self,
1348        a: mask8x32<Self>,
1349        b: mask8x32<Self>,
1350    ) -> mask8x32<Self>;
1351    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
1352    fn slide_within_blocks_mask8x32<const SHIFT: usize>(
1353        self,
1354        a: mask8x32<Self>,
1355        b: mask8x32<Self>,
1356    ) -> mask8x32<Self>;
1357    #[doc = "Compute the logical AND of two masks."]
1358    fn and_mask8x32(self, a: mask8x32<Self>, b: mask8x32<Self>) -> mask8x32<Self>;
1359    #[doc = "Compute the logical OR of two masks."]
1360    fn or_mask8x32(self, a: mask8x32<Self>, b: mask8x32<Self>) -> mask8x32<Self>;
1361    #[doc = "Compute the logical XOR of two masks."]
1362    fn xor_mask8x32(self, a: mask8x32<Self>, b: mask8x32<Self>) -> mask8x32<Self>;
1363    #[doc = "Compute the logical NOT of the mask."]
1364    fn not_mask8x32(self, a: mask8x32<Self>) -> mask8x32<Self>;
1365    #[doc = "Select elements from `b` and `c` based on the mask operand `a`.\n\nThis operation's behavior is unspecified if each lane of a is not the all-zeroes or all-ones bit pattern. See the [`Select`] trait's documentation for more information."]
1366    fn select_mask8x32(
1367        self,
1368        a: mask8x32<Self>,
1369        b: mask8x32<Self>,
1370        c: mask8x32<Self>,
1371    ) -> mask8x32<Self>;
1372    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
1373    fn simd_eq_mask8x32(self, a: mask8x32<Self>, b: mask8x32<Self>) -> mask8x32<Self>;
1374    #[doc = "Returns true if any elements in this mask are true (all ones).\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
1375    fn any_true_mask8x32(self, a: mask8x32<Self>) -> bool;
1376    #[doc = "Returns true if all elements in this mask are true (all ones).\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
1377    fn all_true_mask8x32(self, a: mask8x32<Self>) -> bool;
1378    #[doc = "Returns true if any elements in this mask are false (all zeroes).\n\nThis is logically equivalent to `!all_true`, but may be faster.\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
1379    fn any_false_mask8x32(self, a: mask8x32<Self>) -> bool;
1380    #[doc = "Returns true if all elements in this mask are false (all zeroes).\n\nThis is logically equivalent to `!any_true`, but may be faster.\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
1381    fn all_false_mask8x32(self, a: mask8x32<Self>) -> bool;
1382    #[doc = "Combine two vectors into a single vector with twice the width.\n\n`a` provides the lower elements and `b` provides the upper elements."]
1383    fn combine_mask8x32(self, a: mask8x32<Self>, b: mask8x32<Self>) -> mask8x64<Self>;
1384    #[doc = "Split a vector into two vectors of half the width.\n\nReturns a tuple of (lower half, upper half)."]
1385    fn split_mask8x32(self, a: mask8x32<Self>) -> (mask8x16<Self>, mask8x16<Self>);
1386    #[doc = "Create a SIMD vector with all elements set to the given value."]
1387    fn splat_i16x16(self, val: i16) -> i16x16<Self>;
1388    #[doc = "Create a SIMD vector from an array of the same length."]
1389    fn load_array_i16x16(self, val: [i16; 16usize]) -> i16x16<Self>;
1390    #[doc = "Create a SIMD vector from an array of the same length."]
1391    fn load_array_ref_i16x16(self, val: &[i16; 16usize]) -> i16x16<Self>;
1392    #[doc = "Convert a SIMD vector to an array."]
1393    fn as_array_i16x16(self, a: i16x16<Self>) -> [i16; 16usize];
1394    #[doc = "Project a reference to a SIMD vector to a reference to the equivalent array."]
1395    fn as_array_ref_i16x16(self, a: &i16x16<Self>) -> &[i16; 16usize];
1396    #[doc = "Project a mutable reference to a SIMD vector to a mutable reference to the equivalent array."]
1397    fn as_array_mut_i16x16(self, a: &mut i16x16<Self>) -> &mut [i16; 16usize];
1398    #[doc = "Store a SIMD vector into an array of the same length."]
1399    fn store_array_i16x16(self, a: i16x16<Self>, dest: &mut [i16; 16usize]) -> ();
1400    #[doc = "Reinterpret a vector of bytes as a SIMD vector of a given type, with the equivalent byte length."]
1401    fn cvt_from_bytes_i16x16(self, a: u8x32<Self>) -> i16x16<Self>;
1402    #[doc = "Reinterpret a SIMD vector as a vector of bytes, with the equivalent byte length."]
1403    fn cvt_to_bytes_i16x16(self, a: i16x16<Self>) -> u8x32<Self>;
1404    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
1405    fn slide_i16x16<const SHIFT: usize>(self, a: i16x16<Self>, b: i16x16<Self>) -> i16x16<Self>;
1406    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
1407    fn slide_within_blocks_i16x16<const SHIFT: usize>(
1408        self,
1409        a: i16x16<Self>,
1410        b: i16x16<Self>,
1411    ) -> i16x16<Self>;
1412    #[doc = "Add two vectors element-wise, wrapping on overflow."]
1413    fn add_i16x16(self, a: i16x16<Self>, b: i16x16<Self>) -> i16x16<Self>;
1414    #[doc = "Subtract two vectors element-wise, wrapping on overflow."]
1415    fn sub_i16x16(self, a: i16x16<Self>, b: i16x16<Self>) -> i16x16<Self>;
1416    #[doc = "Multiply two vectors element-wise, wrapping on overflow."]
1417    fn mul_i16x16(self, a: i16x16<Self>, b: i16x16<Self>) -> i16x16<Self>;
1418    #[doc = "Compute the bitwise AND of two vectors."]
1419    fn and_i16x16(self, a: i16x16<Self>, b: i16x16<Self>) -> i16x16<Self>;
1420    #[doc = "Compute the bitwise OR of two vectors."]
1421    fn or_i16x16(self, a: i16x16<Self>, b: i16x16<Self>) -> i16x16<Self>;
1422    #[doc = "Compute the bitwise XOR of two vectors."]
1423    fn xor_i16x16(self, a: i16x16<Self>, b: i16x16<Self>) -> i16x16<Self>;
1424    #[doc = "Compute the bitwise NOT of the vector."]
1425    fn not_i16x16(self, a: i16x16<Self>) -> i16x16<Self>;
1426    #[doc = "Shift each element left by the given number of bits.\n\nBits shifted out of the left side are discarded, and zeros are shifted in on the right."]
1427    fn shl_i16x16(self, a: i16x16<Self>, shift: u32) -> i16x16<Self>;
1428    #[doc = "Shift each element left by the given number of bits.\n\nBits shifted out of the left side are discarded, and zeros are shifted in on the right.\n\nThis operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation."]
1429    fn shlv_i16x16(self, a: i16x16<Self>, b: i16x16<Self>) -> i16x16<Self>;
1430    #[doc = "Shift each element right by the given number of bits.\n\nFor unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated."]
1431    fn shr_i16x16(self, a: i16x16<Self>, shift: u32) -> i16x16<Self>;
1432    #[doc = "Shift each element right by the corresponding element in another vector.\n\nFor unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated.\n\nThis operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation."]
1433    fn shrv_i16x16(self, a: i16x16<Self>, b: i16x16<Self>) -> i16x16<Self>;
1434    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
1435    fn simd_eq_i16x16(self, a: i16x16<Self>, b: i16x16<Self>) -> mask16x16<Self>;
1436    #[doc = "Compare two vectors element-wise for less than.\n\nReturns a mask where each element is all ones if `a` is less than `b`, and all zeroes if not."]
1437    fn simd_lt_i16x16(self, a: i16x16<Self>, b: i16x16<Self>) -> mask16x16<Self>;
1438    #[doc = "Compare two vectors element-wise for less than or equal.\n\nReturns a mask where each element is all ones if `a` is less than or equal to `b`, and all zeroes if not."]
1439    fn simd_le_i16x16(self, a: i16x16<Self>, b: i16x16<Self>) -> mask16x16<Self>;
1440    #[doc = "Compare two vectors element-wise for greater than or equal.\n\nReturns a mask where each element is all ones if `a` is greater than or equal to `b`, and all zeroes if not."]
1441    fn simd_ge_i16x16(self, a: i16x16<Self>, b: i16x16<Self>) -> mask16x16<Self>;
1442    #[doc = "Compare two vectors element-wise for greater than.\n\nReturns a mask where each element is all ones if `a` is greater than `b`, and all zeroes if not."]
1443    fn simd_gt_i16x16(self, a: i16x16<Self>, b: i16x16<Self>) -> mask16x16<Self>;
1444    #[doc = "Interleave the lower half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, b0, a1, b1]`.\n\n**Note:** This operation is only useful if you need to discard elements `a2, a3, b2, b3`.\n        For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
1445    fn zip_low_i16x16(self, a: i16x16<Self>, b: i16x16<Self>) -> i16x16<Self>;
1446    #[doc = "Interleave the upper half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a2, b2, a3, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a1, b0, b1`.For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
1447    fn zip_high_i16x16(self, a: i16x16<Self>, b: i16x16<Self>) -> i16x16<Self>;
1448    #[doc = "Extract even-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, a2, b0, b2]`.\n\n**Note:** This operation is only useful if you need to discard elements `a1, a3, b1, b3`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
1449    fn unzip_low_i16x16(self, a: i16x16<Self>, b: i16x16<Self>) -> i16x16<Self>;
1450    #[doc = "Extract odd-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a1, a3, b1, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a2, b0, b2`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
1451    fn unzip_high_i16x16(self, a: i16x16<Self>, b: i16x16<Self>) -> i16x16<Self>;
1452    #[doc = "Interleave two vectors.\n\nThe resulting vectors contain elements taken alternately from `a` and `b`, first filling the first result, and then the second.\n\nThe reverse of this operation is `deinterleave`.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `([a0, b0, a1, b1], [a2, b2, a3, b3])`."]
1453    fn interleave_i16x16(self, a: i16x16<Self>, b: i16x16<Self>) -> (i16x16<Self>, i16x16<Self>);
1454    #[doc = "Deinterleave two vectors.\n\nThe first result contains all even-indexed elements from `a` followed by all even-indexed elements from `b`. The second result contains all odd-indexed elements from `a` followed by all odd-indexed elements from `b`.\n\nThe reverse of this operation is `interleave`.\n\nFor vectors `[a0, b0, a1, b1]` and `[a2, b2, a3, b3]`, returns `([a0, a1, a2, a3], [b0, b1, b2, b3])`."]
1455    fn deinterleave_i16x16(self, a: i16x16<Self>, b: i16x16<Self>) -> (i16x16<Self>, i16x16<Self>);
1456    #[doc = "Select elements from b and c based on the mask operand a.\n\nThis operation's behavior is unspecified if each lane of a is not the all-zeroes or all-ones bit pattern. See the [`Select`] trait's documentation for more information."]
1457    fn select_i16x16(self, a: mask16x16<Self>, b: i16x16<Self>, c: i16x16<Self>) -> i16x16<Self>;
1458    #[doc = "Return the element-wise minimum of two vectors."]
1459    fn min_i16x16(self, a: i16x16<Self>, b: i16x16<Self>) -> i16x16<Self>;
1460    #[doc = "Return the element-wise maximum of two vectors."]
1461    fn max_i16x16(self, a: i16x16<Self>, b: i16x16<Self>) -> i16x16<Self>;
1462    #[doc = "Combine two vectors into a single vector with twice the width.\n\n`a` provides the lower elements and `b` provides the upper elements."]
1463    fn combine_i16x16(self, a: i16x16<Self>, b: i16x16<Self>) -> i16x32<Self>;
1464    #[doc = "Split a vector into two vectors of half the width.\n\nReturns a tuple of (lower half, upper half)."]
1465    fn split_i16x16(self, a: i16x16<Self>) -> (i16x8<Self>, i16x8<Self>);
1466    #[doc = "Negate each element of the vector, wrapping on overflow."]
1467    fn neg_i16x16(self, a: i16x16<Self>) -> i16x16<Self>;
1468    #[doc = "Reinterpret the bits of this vector as a vector of `u8` elements.\n\nThe total bit width is preserved; the number of elements changes accordingly."]
1469    fn reinterpret_u8_i16x16(self, a: i16x16<Self>) -> u8x32<Self>;
1470    #[doc = "Reinterpret the bits of this vector as a vector of `u32` elements.\n\nThe total bit width is preserved; the number of elements changes accordingly."]
1471    fn reinterpret_u32_i16x16(self, a: i16x16<Self>) -> u32x8<Self>;
1472    #[doc = "Create a SIMD vector with all elements set to the given value."]
1473    fn splat_u16x16(self, val: u16) -> u16x16<Self>;
1474    #[doc = "Create a SIMD vector from an array of the same length."]
1475    fn load_array_u16x16(self, val: [u16; 16usize]) -> u16x16<Self>;
1476    #[doc = "Create a SIMD vector from an array of the same length."]
1477    fn load_array_ref_u16x16(self, val: &[u16; 16usize]) -> u16x16<Self>;
1478    #[doc = "Convert a SIMD vector to an array."]
1479    fn as_array_u16x16(self, a: u16x16<Self>) -> [u16; 16usize];
1480    #[doc = "Project a reference to a SIMD vector to a reference to the equivalent array."]
1481    fn as_array_ref_u16x16(self, a: &u16x16<Self>) -> &[u16; 16usize];
1482    #[doc = "Project a mutable reference to a SIMD vector to a mutable reference to the equivalent array."]
1483    fn as_array_mut_u16x16(self, a: &mut u16x16<Self>) -> &mut [u16; 16usize];
1484    #[doc = "Store a SIMD vector into an array of the same length."]
1485    fn store_array_u16x16(self, a: u16x16<Self>, dest: &mut [u16; 16usize]) -> ();
1486    #[doc = "Reinterpret a vector of bytes as a SIMD vector of a given type, with the equivalent byte length."]
1487    fn cvt_from_bytes_u16x16(self, a: u8x32<Self>) -> u16x16<Self>;
1488    #[doc = "Reinterpret a SIMD vector as a vector of bytes, with the equivalent byte length."]
1489    fn cvt_to_bytes_u16x16(self, a: u16x16<Self>) -> u8x32<Self>;
1490    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
1491    fn slide_u16x16<const SHIFT: usize>(self, a: u16x16<Self>, b: u16x16<Self>) -> u16x16<Self>;
1492    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
1493    fn slide_within_blocks_u16x16<const SHIFT: usize>(
1494        self,
1495        a: u16x16<Self>,
1496        b: u16x16<Self>,
1497    ) -> u16x16<Self>;
1498    #[doc = "Add two vectors element-wise, wrapping on overflow."]
1499    fn add_u16x16(self, a: u16x16<Self>, b: u16x16<Self>) -> u16x16<Self>;
1500    #[doc = "Subtract two vectors element-wise, wrapping on overflow."]
1501    fn sub_u16x16(self, a: u16x16<Self>, b: u16x16<Self>) -> u16x16<Self>;
1502    #[doc = "Multiply two vectors element-wise, wrapping on overflow."]
1503    fn mul_u16x16(self, a: u16x16<Self>, b: u16x16<Self>) -> u16x16<Self>;
1504    #[doc = "Compute the bitwise AND of two vectors."]
1505    fn and_u16x16(self, a: u16x16<Self>, b: u16x16<Self>) -> u16x16<Self>;
1506    #[doc = "Compute the bitwise OR of two vectors."]
1507    fn or_u16x16(self, a: u16x16<Self>, b: u16x16<Self>) -> u16x16<Self>;
1508    #[doc = "Compute the bitwise XOR of two vectors."]
1509    fn xor_u16x16(self, a: u16x16<Self>, b: u16x16<Self>) -> u16x16<Self>;
1510    #[doc = "Compute the bitwise NOT of the vector."]
1511    fn not_u16x16(self, a: u16x16<Self>) -> u16x16<Self>;
1512    #[doc = "Shift each element left by the given number of bits.\n\nBits shifted out of the left side are discarded, and zeros are shifted in on the right."]
1513    fn shl_u16x16(self, a: u16x16<Self>, shift: u32) -> u16x16<Self>;
1514    #[doc = "Shift each element left by the given number of bits.\n\nBits shifted out of the left side are discarded, and zeros are shifted in on the right.\n\nThis operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation."]
1515    fn shlv_u16x16(self, a: u16x16<Self>, b: u16x16<Self>) -> u16x16<Self>;
1516    #[doc = "Shift each element right by the given number of bits.\n\nFor unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated."]
1517    fn shr_u16x16(self, a: u16x16<Self>, shift: u32) -> u16x16<Self>;
1518    #[doc = "Shift each element right by the corresponding element in another vector.\n\nFor unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated.\n\nThis operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation."]
1519    fn shrv_u16x16(self, a: u16x16<Self>, b: u16x16<Self>) -> u16x16<Self>;
1520    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
1521    fn simd_eq_u16x16(self, a: u16x16<Self>, b: u16x16<Self>) -> mask16x16<Self>;
1522    #[doc = "Compare two vectors element-wise for less than.\n\nReturns a mask where each element is all ones if `a` is less than `b`, and all zeroes if not."]
1523    fn simd_lt_u16x16(self, a: u16x16<Self>, b: u16x16<Self>) -> mask16x16<Self>;
1524    #[doc = "Compare two vectors element-wise for less than or equal.\n\nReturns a mask where each element is all ones if `a` is less than or equal to `b`, and all zeroes if not."]
1525    fn simd_le_u16x16(self, a: u16x16<Self>, b: u16x16<Self>) -> mask16x16<Self>;
1526    #[doc = "Compare two vectors element-wise for greater than or equal.\n\nReturns a mask where each element is all ones if `a` is greater than or equal to `b`, and all zeroes if not."]
1527    fn simd_ge_u16x16(self, a: u16x16<Self>, b: u16x16<Self>) -> mask16x16<Self>;
1528    #[doc = "Compare two vectors element-wise for greater than.\n\nReturns a mask where each element is all ones if `a` is greater than `b`, and all zeroes if not."]
1529    fn simd_gt_u16x16(self, a: u16x16<Self>, b: u16x16<Self>) -> mask16x16<Self>;
1530    #[doc = "Interleave the lower half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, b0, a1, b1]`.\n\n**Note:** This operation is only useful if you need to discard elements `a2, a3, b2, b3`.\n        For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
1531    fn zip_low_u16x16(self, a: u16x16<Self>, b: u16x16<Self>) -> u16x16<Self>;
1532    #[doc = "Interleave the upper half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a2, b2, a3, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a1, b0, b1`.For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
1533    fn zip_high_u16x16(self, a: u16x16<Self>, b: u16x16<Self>) -> u16x16<Self>;
1534    #[doc = "Extract even-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, a2, b0, b2]`.\n\n**Note:** This operation is only useful if you need to discard elements `a1, a3, b1, b3`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
1535    fn unzip_low_u16x16(self, a: u16x16<Self>, b: u16x16<Self>) -> u16x16<Self>;
1536    #[doc = "Extract odd-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a1, a3, b1, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a2, b0, b2`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
1537    fn unzip_high_u16x16(self, a: u16x16<Self>, b: u16x16<Self>) -> u16x16<Self>;
1538    #[doc = "Interleave two vectors.\n\nThe resulting vectors contain elements taken alternately from `a` and `b`, first filling the first result, and then the second.\n\nThe reverse of this operation is `deinterleave`.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `([a0, b0, a1, b1], [a2, b2, a3, b3])`."]
1539    fn interleave_u16x16(self, a: u16x16<Self>, b: u16x16<Self>) -> (u16x16<Self>, u16x16<Self>);
1540    #[doc = "Deinterleave two vectors.\n\nThe first result contains all even-indexed elements from `a` followed by all even-indexed elements from `b`. The second result contains all odd-indexed elements from `a` followed by all odd-indexed elements from `b`.\n\nThe reverse of this operation is `interleave`.\n\nFor vectors `[a0, b0, a1, b1]` and `[a2, b2, a3, b3]`, returns `([a0, a1, a2, a3], [b0, b1, b2, b3])`."]
1541    fn deinterleave_u16x16(self, a: u16x16<Self>, b: u16x16<Self>) -> (u16x16<Self>, u16x16<Self>);
1542    #[doc = "Select elements from b and c based on the mask operand a.\n\nThis operation's behavior is unspecified if each lane of a is not the all-zeroes or all-ones bit pattern. See the [`Select`] trait's documentation for more information."]
1543    fn select_u16x16(self, a: mask16x16<Self>, b: u16x16<Self>, c: u16x16<Self>) -> u16x16<Self>;
1544    #[doc = "Return the element-wise minimum of two vectors."]
1545    fn min_u16x16(self, a: u16x16<Self>, b: u16x16<Self>) -> u16x16<Self>;
1546    #[doc = "Return the element-wise maximum of two vectors."]
1547    fn max_u16x16(self, a: u16x16<Self>, b: u16x16<Self>) -> u16x16<Self>;
1548    #[doc = "Combine two vectors into a single vector with twice the width.\n\n`a` provides the lower elements and `b` provides the upper elements."]
1549    fn combine_u16x16(self, a: u16x16<Self>, b: u16x16<Self>) -> u16x32<Self>;
1550    #[doc = "Split a vector into two vectors of half the width.\n\nReturns a tuple of (lower half, upper half)."]
1551    fn split_u16x16(self, a: u16x16<Self>) -> (u16x8<Self>, u16x8<Self>);
1552    #[doc = "Truncate each element to a narrower integer type.\n\nThe number of elements in the result is twice that of the input."]
1553    fn narrow_u16x16(self, a: u16x16<Self>) -> u8x16<Self>;
1554    #[doc = "Reinterpret the bits of this vector as a vector of `u8` elements.\n\nThe total bit width is preserved; the number of elements changes accordingly."]
1555    fn reinterpret_u8_u16x16(self, a: u16x16<Self>) -> u8x32<Self>;
1556    #[doc = "Reinterpret the bits of this vector as a vector of `u32` elements.\n\nThe total bit width is preserved; the number of elements changes accordingly."]
1557    fn reinterpret_u32_u16x16(self, a: u16x16<Self>) -> u32x8<Self>;
1558    #[doc = "Create a SIMD vector with all elements set to the given value."]
1559    fn splat_mask16x16(self, val: i16) -> mask16x16<Self>;
1560    #[doc = "Create a SIMD vector from an array of the same length."]
1561    fn load_array_mask16x16(self, val: [i16; 16usize]) -> mask16x16<Self>;
1562    #[doc = "Create a SIMD vector from an array of the same length."]
1563    fn load_array_ref_mask16x16(self, val: &[i16; 16usize]) -> mask16x16<Self>;
1564    #[doc = "Convert a SIMD vector to an array."]
1565    fn as_array_mask16x16(self, a: mask16x16<Self>) -> [i16; 16usize];
1566    #[doc = "Project a reference to a SIMD vector to a reference to the equivalent array."]
1567    fn as_array_ref_mask16x16(self, a: &mask16x16<Self>) -> &[i16; 16usize];
1568    #[doc = "Project a mutable reference to a SIMD vector to a mutable reference to the equivalent array."]
1569    fn as_array_mut_mask16x16(self, a: &mut mask16x16<Self>) -> &mut [i16; 16usize];
1570    #[doc = "Store a SIMD vector into an array of the same length."]
1571    fn store_array_mask16x16(self, a: mask16x16<Self>, dest: &mut [i16; 16usize]) -> ();
1572    #[doc = "Reinterpret a vector of bytes as a SIMD vector of a given type, with the equivalent byte length."]
1573    fn cvt_from_bytes_mask16x16(self, a: u8x32<Self>) -> mask16x16<Self>;
1574    #[doc = "Reinterpret a SIMD vector as a vector of bytes, with the equivalent byte length."]
1575    fn cvt_to_bytes_mask16x16(self, a: mask16x16<Self>) -> u8x32<Self>;
1576    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
1577    fn slide_mask16x16<const SHIFT: usize>(
1578        self,
1579        a: mask16x16<Self>,
1580        b: mask16x16<Self>,
1581    ) -> mask16x16<Self>;
1582    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
1583    fn slide_within_blocks_mask16x16<const SHIFT: usize>(
1584        self,
1585        a: mask16x16<Self>,
1586        b: mask16x16<Self>,
1587    ) -> mask16x16<Self>;
1588    #[doc = "Compute the logical AND of two masks."]
1589    fn and_mask16x16(self, a: mask16x16<Self>, b: mask16x16<Self>) -> mask16x16<Self>;
1590    #[doc = "Compute the logical OR of two masks."]
1591    fn or_mask16x16(self, a: mask16x16<Self>, b: mask16x16<Self>) -> mask16x16<Self>;
1592    #[doc = "Compute the logical XOR of two masks."]
1593    fn xor_mask16x16(self, a: mask16x16<Self>, b: mask16x16<Self>) -> mask16x16<Self>;
1594    #[doc = "Compute the logical NOT of the mask."]
1595    fn not_mask16x16(self, a: mask16x16<Self>) -> mask16x16<Self>;
1596    #[doc = "Select elements from `b` and `c` based on the mask operand `a`.\n\nThis operation's behavior is unspecified if each lane of a is not the all-zeroes or all-ones bit pattern. See the [`Select`] trait's documentation for more information."]
1597    fn select_mask16x16(
1598        self,
1599        a: mask16x16<Self>,
1600        b: mask16x16<Self>,
1601        c: mask16x16<Self>,
1602    ) -> mask16x16<Self>;
1603    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
1604    fn simd_eq_mask16x16(self, a: mask16x16<Self>, b: mask16x16<Self>) -> mask16x16<Self>;
1605    #[doc = "Returns true if any elements in this mask are true (all ones).\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
1606    fn any_true_mask16x16(self, a: mask16x16<Self>) -> bool;
1607    #[doc = "Returns true if all elements in this mask are true (all ones).\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
1608    fn all_true_mask16x16(self, a: mask16x16<Self>) -> bool;
1609    #[doc = "Returns true if any elements in this mask are false (all zeroes).\n\nThis is logically equivalent to `!all_true`, but may be faster.\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
1610    fn any_false_mask16x16(self, a: mask16x16<Self>) -> bool;
1611    #[doc = "Returns true if all elements in this mask are false (all zeroes).\n\nThis is logically equivalent to `!any_true`, but may be faster.\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
1612    fn all_false_mask16x16(self, a: mask16x16<Self>) -> bool;
1613    #[doc = "Combine two vectors into a single vector with twice the width.\n\n`a` provides the lower elements and `b` provides the upper elements."]
1614    fn combine_mask16x16(self, a: mask16x16<Self>, b: mask16x16<Self>) -> mask16x32<Self>;
1615    #[doc = "Split a vector into two vectors of half the width.\n\nReturns a tuple of (lower half, upper half)."]
1616    fn split_mask16x16(self, a: mask16x16<Self>) -> (mask16x8<Self>, mask16x8<Self>);
1617    #[doc = "Create a SIMD vector with all elements set to the given value."]
1618    fn splat_i32x8(self, val: i32) -> i32x8<Self>;
1619    #[doc = "Create a SIMD vector from an array of the same length."]
1620    fn load_array_i32x8(self, val: [i32; 8usize]) -> i32x8<Self>;
1621    #[doc = "Create a SIMD vector from an array of the same length."]
1622    fn load_array_ref_i32x8(self, val: &[i32; 8usize]) -> i32x8<Self>;
1623    #[doc = "Convert a SIMD vector to an array."]
1624    fn as_array_i32x8(self, a: i32x8<Self>) -> [i32; 8usize];
1625    #[doc = "Project a reference to a SIMD vector to a reference to the equivalent array."]
1626    fn as_array_ref_i32x8(self, a: &i32x8<Self>) -> &[i32; 8usize];
1627    #[doc = "Project a mutable reference to a SIMD vector to a mutable reference to the equivalent array."]
1628    fn as_array_mut_i32x8(self, a: &mut i32x8<Self>) -> &mut [i32; 8usize];
1629    #[doc = "Store a SIMD vector into an array of the same length."]
1630    fn store_array_i32x8(self, a: i32x8<Self>, dest: &mut [i32; 8usize]) -> ();
1631    #[doc = "Reinterpret a vector of bytes as a SIMD vector of a given type, with the equivalent byte length."]
1632    fn cvt_from_bytes_i32x8(self, a: u8x32<Self>) -> i32x8<Self>;
1633    #[doc = "Reinterpret a SIMD vector as a vector of bytes, with the equivalent byte length."]
1634    fn cvt_to_bytes_i32x8(self, a: i32x8<Self>) -> u8x32<Self>;
1635    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
1636    fn slide_i32x8<const SHIFT: usize>(self, a: i32x8<Self>, b: i32x8<Self>) -> i32x8<Self>;
1637    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
1638    fn slide_within_blocks_i32x8<const SHIFT: usize>(
1639        self,
1640        a: i32x8<Self>,
1641        b: i32x8<Self>,
1642    ) -> i32x8<Self>;
1643    #[doc = "Add two vectors element-wise, wrapping on overflow."]
1644    fn add_i32x8(self, a: i32x8<Self>, b: i32x8<Self>) -> i32x8<Self>;
1645    #[doc = "Subtract two vectors element-wise, wrapping on overflow."]
1646    fn sub_i32x8(self, a: i32x8<Self>, b: i32x8<Self>) -> i32x8<Self>;
1647    #[doc = "Multiply two vectors element-wise, wrapping on overflow."]
1648    fn mul_i32x8(self, a: i32x8<Self>, b: i32x8<Self>) -> i32x8<Self>;
1649    #[doc = "Compute the bitwise AND of two vectors."]
1650    fn and_i32x8(self, a: i32x8<Self>, b: i32x8<Self>) -> i32x8<Self>;
1651    #[doc = "Compute the bitwise OR of two vectors."]
1652    fn or_i32x8(self, a: i32x8<Self>, b: i32x8<Self>) -> i32x8<Self>;
1653    #[doc = "Compute the bitwise XOR of two vectors."]
1654    fn xor_i32x8(self, a: i32x8<Self>, b: i32x8<Self>) -> i32x8<Self>;
1655    #[doc = "Compute the bitwise NOT of the vector."]
1656    fn not_i32x8(self, a: i32x8<Self>) -> i32x8<Self>;
1657    #[doc = "Shift each element left by the given number of bits.\n\nBits shifted out of the left side are discarded, and zeros are shifted in on the right."]
1658    fn shl_i32x8(self, a: i32x8<Self>, shift: u32) -> i32x8<Self>;
1659    #[doc = "Shift each element left by the given number of bits.\n\nBits shifted out of the left side are discarded, and zeros are shifted in on the right.\n\nThis operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation."]
1660    fn shlv_i32x8(self, a: i32x8<Self>, b: i32x8<Self>) -> i32x8<Self>;
1661    #[doc = "Shift each element right by the given number of bits.\n\nFor unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated."]
1662    fn shr_i32x8(self, a: i32x8<Self>, shift: u32) -> i32x8<Self>;
1663    #[doc = "Shift each element right by the corresponding element in another vector.\n\nFor unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated.\n\nThis operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation."]
1664    fn shrv_i32x8(self, a: i32x8<Self>, b: i32x8<Self>) -> i32x8<Self>;
1665    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
1666    fn simd_eq_i32x8(self, a: i32x8<Self>, b: i32x8<Self>) -> mask32x8<Self>;
1667    #[doc = "Compare two vectors element-wise for less than.\n\nReturns a mask where each element is all ones if `a` is less than `b`, and all zeroes if not."]
1668    fn simd_lt_i32x8(self, a: i32x8<Self>, b: i32x8<Self>) -> mask32x8<Self>;
1669    #[doc = "Compare two vectors element-wise for less than or equal.\n\nReturns a mask where each element is all ones if `a` is less than or equal to `b`, and all zeroes if not."]
1670    fn simd_le_i32x8(self, a: i32x8<Self>, b: i32x8<Self>) -> mask32x8<Self>;
1671    #[doc = "Compare two vectors element-wise for greater than or equal.\n\nReturns a mask where each element is all ones if `a` is greater than or equal to `b`, and all zeroes if not."]
1672    fn simd_ge_i32x8(self, a: i32x8<Self>, b: i32x8<Self>) -> mask32x8<Self>;
1673    #[doc = "Compare two vectors element-wise for greater than.\n\nReturns a mask where each element is all ones if `a` is greater than `b`, and all zeroes if not."]
1674    fn simd_gt_i32x8(self, a: i32x8<Self>, b: i32x8<Self>) -> mask32x8<Self>;
1675    #[doc = "Interleave the lower half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, b0, a1, b1]`.\n\n**Note:** This operation is only useful if you need to discard elements `a2, a3, b2, b3`.\n        For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
1676    fn zip_low_i32x8(self, a: i32x8<Self>, b: i32x8<Self>) -> i32x8<Self>;
1677    #[doc = "Interleave the upper half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a2, b2, a3, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a1, b0, b1`.For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
1678    fn zip_high_i32x8(self, a: i32x8<Self>, b: i32x8<Self>) -> i32x8<Self>;
1679    #[doc = "Extract even-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, a2, b0, b2]`.\n\n**Note:** This operation is only useful if you need to discard elements `a1, a3, b1, b3`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
1680    fn unzip_low_i32x8(self, a: i32x8<Self>, b: i32x8<Self>) -> i32x8<Self>;
1681    #[doc = "Extract odd-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a1, a3, b1, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a2, b0, b2`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
1682    fn unzip_high_i32x8(self, a: i32x8<Self>, b: i32x8<Self>) -> i32x8<Self>;
1683    #[doc = "Interleave two vectors.\n\nThe resulting vectors contain elements taken alternately from `a` and `b`, first filling the first result, and then the second.\n\nThe reverse of this operation is `deinterleave`.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `([a0, b0, a1, b1], [a2, b2, a3, b3])`."]
1684    fn interleave_i32x8(self, a: i32x8<Self>, b: i32x8<Self>) -> (i32x8<Self>, i32x8<Self>);
1685    #[doc = "Deinterleave two vectors.\n\nThe first result contains all even-indexed elements from `a` followed by all even-indexed elements from `b`. The second result contains all odd-indexed elements from `a` followed by all odd-indexed elements from `b`.\n\nThe reverse of this operation is `interleave`.\n\nFor vectors `[a0, b0, a1, b1]` and `[a2, b2, a3, b3]`, returns `([a0, a1, a2, a3], [b0, b1, b2, b3])`."]
1686    fn deinterleave_i32x8(self, a: i32x8<Self>, b: i32x8<Self>) -> (i32x8<Self>, i32x8<Self>);
1687    #[doc = "Select elements from b and c based on the mask operand a.\n\nThis operation's behavior is unspecified if each lane of a is not the all-zeroes or all-ones bit pattern. See the [`Select`] trait's documentation for more information."]
1688    fn select_i32x8(self, a: mask32x8<Self>, b: i32x8<Self>, c: i32x8<Self>) -> i32x8<Self>;
1689    #[doc = "Return the element-wise minimum of two vectors."]
1690    fn min_i32x8(self, a: i32x8<Self>, b: i32x8<Self>) -> i32x8<Self>;
1691    #[doc = "Return the element-wise maximum of two vectors."]
1692    fn max_i32x8(self, a: i32x8<Self>, b: i32x8<Self>) -> i32x8<Self>;
1693    #[doc = "Combine two vectors into a single vector with twice the width.\n\n`a` provides the lower elements and `b` provides the upper elements."]
1694    fn combine_i32x8(self, a: i32x8<Self>, b: i32x8<Self>) -> i32x16<Self>;
1695    #[doc = "Split a vector into two vectors of half the width.\n\nReturns a tuple of (lower half, upper half)."]
1696    fn split_i32x8(self, a: i32x8<Self>) -> (i32x4<Self>, i32x4<Self>);
1697    #[doc = "Negate each element of the vector, wrapping on overflow."]
1698    fn neg_i32x8(self, a: i32x8<Self>) -> i32x8<Self>;
1699    #[doc = "Reinterpret the bits of this vector as a vector of `u8` elements.\n\nThe total bit width is preserved; the number of elements changes accordingly."]
1700    fn reinterpret_u8_i32x8(self, a: i32x8<Self>) -> u8x32<Self>;
1701    #[doc = "Reinterpret the bits of this vector as a vector of `u32` elements.\n\nThe total bit width is preserved; the number of elements changes accordingly."]
1702    fn reinterpret_u32_i32x8(self, a: i32x8<Self>) -> u32x8<Self>;
1703    #[doc = "Convert each signed 32-bit integer element to a floating-point value.\n\nValues that cannot be exactly represented are rounded to the nearest representable value."]
1704    fn cvt_f32_i32x8(self, a: i32x8<Self>) -> f32x8<Self>;
1705    #[doc = "Create a SIMD vector with all elements set to the given value."]
1706    fn splat_u32x8(self, val: u32) -> u32x8<Self>;
1707    #[doc = "Create a SIMD vector from an array of the same length."]
1708    fn load_array_u32x8(self, val: [u32; 8usize]) -> u32x8<Self>;
1709    #[doc = "Create a SIMD vector from an array of the same length."]
1710    fn load_array_ref_u32x8(self, val: &[u32; 8usize]) -> u32x8<Self>;
1711    #[doc = "Convert a SIMD vector to an array."]
1712    fn as_array_u32x8(self, a: u32x8<Self>) -> [u32; 8usize];
1713    #[doc = "Project a reference to a SIMD vector to a reference to the equivalent array."]
1714    fn as_array_ref_u32x8(self, a: &u32x8<Self>) -> &[u32; 8usize];
1715    #[doc = "Project a mutable reference to a SIMD vector to a mutable reference to the equivalent array."]
1716    fn as_array_mut_u32x8(self, a: &mut u32x8<Self>) -> &mut [u32; 8usize];
1717    #[doc = "Store a SIMD vector into an array of the same length."]
1718    fn store_array_u32x8(self, a: u32x8<Self>, dest: &mut [u32; 8usize]) -> ();
1719    #[doc = "Reinterpret a vector of bytes as a SIMD vector of a given type, with the equivalent byte length."]
1720    fn cvt_from_bytes_u32x8(self, a: u8x32<Self>) -> u32x8<Self>;
1721    #[doc = "Reinterpret a SIMD vector as a vector of bytes, with the equivalent byte length."]
1722    fn cvt_to_bytes_u32x8(self, a: u32x8<Self>) -> u8x32<Self>;
1723    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
1724    fn slide_u32x8<const SHIFT: usize>(self, a: u32x8<Self>, b: u32x8<Self>) -> u32x8<Self>;
1725    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
1726    fn slide_within_blocks_u32x8<const SHIFT: usize>(
1727        self,
1728        a: u32x8<Self>,
1729        b: u32x8<Self>,
1730    ) -> u32x8<Self>;
1731    #[doc = "Add two vectors element-wise, wrapping on overflow."]
1732    fn add_u32x8(self, a: u32x8<Self>, b: u32x8<Self>) -> u32x8<Self>;
1733    #[doc = "Subtract two vectors element-wise, wrapping on overflow."]
1734    fn sub_u32x8(self, a: u32x8<Self>, b: u32x8<Self>) -> u32x8<Self>;
1735    #[doc = "Multiply two vectors element-wise, wrapping on overflow."]
1736    fn mul_u32x8(self, a: u32x8<Self>, b: u32x8<Self>) -> u32x8<Self>;
1737    #[doc = "Compute the bitwise AND of two vectors."]
1738    fn and_u32x8(self, a: u32x8<Self>, b: u32x8<Self>) -> u32x8<Self>;
1739    #[doc = "Compute the bitwise OR of two vectors."]
1740    fn or_u32x8(self, a: u32x8<Self>, b: u32x8<Self>) -> u32x8<Self>;
1741    #[doc = "Compute the bitwise XOR of two vectors."]
1742    fn xor_u32x8(self, a: u32x8<Self>, b: u32x8<Self>) -> u32x8<Self>;
1743    #[doc = "Compute the bitwise NOT of the vector."]
1744    fn not_u32x8(self, a: u32x8<Self>) -> u32x8<Self>;
1745    #[doc = "Shift each element left by the given number of bits.\n\nBits shifted out of the left side are discarded, and zeros are shifted in on the right."]
1746    fn shl_u32x8(self, a: u32x8<Self>, shift: u32) -> u32x8<Self>;
1747    #[doc = "Shift each element left by the given number of bits.\n\nBits shifted out of the left side are discarded, and zeros are shifted in on the right.\n\nThis operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation."]
1748    fn shlv_u32x8(self, a: u32x8<Self>, b: u32x8<Self>) -> u32x8<Self>;
1749    #[doc = "Shift each element right by the given number of bits.\n\nFor unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated."]
1750    fn shr_u32x8(self, a: u32x8<Self>, shift: u32) -> u32x8<Self>;
1751    #[doc = "Shift each element right by the corresponding element in another vector.\n\nFor unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated.\n\nThis operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation."]
1752    fn shrv_u32x8(self, a: u32x8<Self>, b: u32x8<Self>) -> u32x8<Self>;
1753    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
1754    fn simd_eq_u32x8(self, a: u32x8<Self>, b: u32x8<Self>) -> mask32x8<Self>;
1755    #[doc = "Compare two vectors element-wise for less than.\n\nReturns a mask where each element is all ones if `a` is less than `b`, and all zeroes if not."]
1756    fn simd_lt_u32x8(self, a: u32x8<Self>, b: u32x8<Self>) -> mask32x8<Self>;
1757    #[doc = "Compare two vectors element-wise for less than or equal.\n\nReturns a mask where each element is all ones if `a` is less than or equal to `b`, and all zeroes if not."]
1758    fn simd_le_u32x8(self, a: u32x8<Self>, b: u32x8<Self>) -> mask32x8<Self>;
1759    #[doc = "Compare two vectors element-wise for greater than or equal.\n\nReturns a mask where each element is all ones if `a` is greater than or equal to `b`, and all zeroes if not."]
1760    fn simd_ge_u32x8(self, a: u32x8<Self>, b: u32x8<Self>) -> mask32x8<Self>;
1761    #[doc = "Compare two vectors element-wise for greater than.\n\nReturns a mask where each element is all ones if `a` is greater than `b`, and all zeroes if not."]
1762    fn simd_gt_u32x8(self, a: u32x8<Self>, b: u32x8<Self>) -> mask32x8<Self>;
1763    #[doc = "Interleave the lower half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, b0, a1, b1]`.\n\n**Note:** This operation is only useful if you need to discard elements `a2, a3, b2, b3`.\n        For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
1764    fn zip_low_u32x8(self, a: u32x8<Self>, b: u32x8<Self>) -> u32x8<Self>;
1765    #[doc = "Interleave the upper half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a2, b2, a3, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a1, b0, b1`.For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
1766    fn zip_high_u32x8(self, a: u32x8<Self>, b: u32x8<Self>) -> u32x8<Self>;
1767    #[doc = "Extract even-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, a2, b0, b2]`.\n\n**Note:** This operation is only useful if you need to discard elements `a1, a3, b1, b3`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
1768    fn unzip_low_u32x8(self, a: u32x8<Self>, b: u32x8<Self>) -> u32x8<Self>;
1769    #[doc = "Extract odd-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a1, a3, b1, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a2, b0, b2`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
1770    fn unzip_high_u32x8(self, a: u32x8<Self>, b: u32x8<Self>) -> u32x8<Self>;
1771    #[doc = "Interleave two vectors.\n\nThe resulting vectors contain elements taken alternately from `a` and `b`, first filling the first result, and then the second.\n\nThe reverse of this operation is `deinterleave`.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `([a0, b0, a1, b1], [a2, b2, a3, b3])`."]
1772    fn interleave_u32x8(self, a: u32x8<Self>, b: u32x8<Self>) -> (u32x8<Self>, u32x8<Self>);
1773    #[doc = "Deinterleave two vectors.\n\nThe first result contains all even-indexed elements from `a` followed by all even-indexed elements from `b`. The second result contains all odd-indexed elements from `a` followed by all odd-indexed elements from `b`.\n\nThe reverse of this operation is `interleave`.\n\nFor vectors `[a0, b0, a1, b1]` and `[a2, b2, a3, b3]`, returns `([a0, a1, a2, a3], [b0, b1, b2, b3])`."]
1774    fn deinterleave_u32x8(self, a: u32x8<Self>, b: u32x8<Self>) -> (u32x8<Self>, u32x8<Self>);
1775    #[doc = "Select elements from b and c based on the mask operand a.\n\nThis operation's behavior is unspecified if each lane of a is not the all-zeroes or all-ones bit pattern. See the [`Select`] trait's documentation for more information."]
1776    fn select_u32x8(self, a: mask32x8<Self>, b: u32x8<Self>, c: u32x8<Self>) -> u32x8<Self>;
1777    #[doc = "Return the element-wise minimum of two vectors."]
1778    fn min_u32x8(self, a: u32x8<Self>, b: u32x8<Self>) -> u32x8<Self>;
1779    #[doc = "Return the element-wise maximum of two vectors."]
1780    fn max_u32x8(self, a: u32x8<Self>, b: u32x8<Self>) -> u32x8<Self>;
1781    #[doc = "Combine two vectors into a single vector with twice the width.\n\n`a` provides the lower elements and `b` provides the upper elements."]
1782    fn combine_u32x8(self, a: u32x8<Self>, b: u32x8<Self>) -> u32x16<Self>;
1783    #[doc = "Split a vector into two vectors of half the width.\n\nReturns a tuple of (lower half, upper half)."]
1784    fn split_u32x8(self, a: u32x8<Self>) -> (u32x4<Self>, u32x4<Self>);
1785    #[doc = "Reinterpret the bits of this vector as a vector of `u8` elements.\n\nThe total bit width is preserved; the number of elements changes accordingly."]
1786    fn reinterpret_u8_u32x8(self, a: u32x8<Self>) -> u8x32<Self>;
1787    #[doc = "Convert each unsigned 32-bit integer element to a floating-point value.\n\nValues that cannot be exactly represented are rounded to the nearest representable value."]
1788    fn cvt_f32_u32x8(self, a: u32x8<Self>) -> f32x8<Self>;
1789    #[doc = "Create a SIMD vector with all elements set to the given value."]
1790    fn splat_mask32x8(self, val: i32) -> mask32x8<Self>;
1791    #[doc = "Create a SIMD vector from an array of the same length."]
1792    fn load_array_mask32x8(self, val: [i32; 8usize]) -> mask32x8<Self>;
1793    #[doc = "Create a SIMD vector from an array of the same length."]
1794    fn load_array_ref_mask32x8(self, val: &[i32; 8usize]) -> mask32x8<Self>;
1795    #[doc = "Convert a SIMD vector to an array."]
1796    fn as_array_mask32x8(self, a: mask32x8<Self>) -> [i32; 8usize];
1797    #[doc = "Project a reference to a SIMD vector to a reference to the equivalent array."]
1798    fn as_array_ref_mask32x8(self, a: &mask32x8<Self>) -> &[i32; 8usize];
1799    #[doc = "Project a mutable reference to a SIMD vector to a mutable reference to the equivalent array."]
1800    fn as_array_mut_mask32x8(self, a: &mut mask32x8<Self>) -> &mut [i32; 8usize];
1801    #[doc = "Store a SIMD vector into an array of the same length."]
1802    fn store_array_mask32x8(self, a: mask32x8<Self>, dest: &mut [i32; 8usize]) -> ();
1803    #[doc = "Reinterpret a vector of bytes as a SIMD vector of a given type, with the equivalent byte length."]
1804    fn cvt_from_bytes_mask32x8(self, a: u8x32<Self>) -> mask32x8<Self>;
1805    #[doc = "Reinterpret a SIMD vector as a vector of bytes, with the equivalent byte length."]
1806    fn cvt_to_bytes_mask32x8(self, a: mask32x8<Self>) -> u8x32<Self>;
1807    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
1808    fn slide_mask32x8<const SHIFT: usize>(
1809        self,
1810        a: mask32x8<Self>,
1811        b: mask32x8<Self>,
1812    ) -> mask32x8<Self>;
1813    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
1814    fn slide_within_blocks_mask32x8<const SHIFT: usize>(
1815        self,
1816        a: mask32x8<Self>,
1817        b: mask32x8<Self>,
1818    ) -> mask32x8<Self>;
1819    #[doc = "Compute the logical AND of two masks."]
1820    fn and_mask32x8(self, a: mask32x8<Self>, b: mask32x8<Self>) -> mask32x8<Self>;
1821    #[doc = "Compute the logical OR of two masks."]
1822    fn or_mask32x8(self, a: mask32x8<Self>, b: mask32x8<Self>) -> mask32x8<Self>;
1823    #[doc = "Compute the logical XOR of two masks."]
1824    fn xor_mask32x8(self, a: mask32x8<Self>, b: mask32x8<Self>) -> mask32x8<Self>;
1825    #[doc = "Compute the logical NOT of the mask."]
1826    fn not_mask32x8(self, a: mask32x8<Self>) -> mask32x8<Self>;
1827    #[doc = "Select elements from `b` and `c` based on the mask operand `a`.\n\nThis operation's behavior is unspecified if each lane of a is not the all-zeroes or all-ones bit pattern. See the [`Select`] trait's documentation for more information."]
1828    fn select_mask32x8(
1829        self,
1830        a: mask32x8<Self>,
1831        b: mask32x8<Self>,
1832        c: mask32x8<Self>,
1833    ) -> mask32x8<Self>;
1834    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
1835    fn simd_eq_mask32x8(self, a: mask32x8<Self>, b: mask32x8<Self>) -> mask32x8<Self>;
1836    #[doc = "Returns true if any elements in this mask are true (all ones).\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
1837    fn any_true_mask32x8(self, a: mask32x8<Self>) -> bool;
1838    #[doc = "Returns true if all elements in this mask are true (all ones).\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
1839    fn all_true_mask32x8(self, a: mask32x8<Self>) -> bool;
1840    #[doc = "Returns true if any elements in this mask are false (all zeroes).\n\nThis is logically equivalent to `!all_true`, but may be faster.\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
1841    fn any_false_mask32x8(self, a: mask32x8<Self>) -> bool;
1842    #[doc = "Returns true if all elements in this mask are false (all zeroes).\n\nThis is logically equivalent to `!any_true`, but may be faster.\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
1843    fn all_false_mask32x8(self, a: mask32x8<Self>) -> bool;
1844    #[doc = "Combine two vectors into a single vector with twice the width.\n\n`a` provides the lower elements and `b` provides the upper elements."]
1845    fn combine_mask32x8(self, a: mask32x8<Self>, b: mask32x8<Self>) -> mask32x16<Self>;
1846    #[doc = "Split a vector into two vectors of half the width.\n\nReturns a tuple of (lower half, upper half)."]
1847    fn split_mask32x8(self, a: mask32x8<Self>) -> (mask32x4<Self>, mask32x4<Self>);
1848    #[doc = "Create a SIMD vector with all elements set to the given value."]
1849    fn splat_f64x4(self, val: f64) -> f64x4<Self>;
1850    #[doc = "Create a SIMD vector from an array of the same length."]
1851    fn load_array_f64x4(self, val: [f64; 4usize]) -> f64x4<Self>;
1852    #[doc = "Create a SIMD vector from an array of the same length."]
1853    fn load_array_ref_f64x4(self, val: &[f64; 4usize]) -> f64x4<Self>;
1854    #[doc = "Convert a SIMD vector to an array."]
1855    fn as_array_f64x4(self, a: f64x4<Self>) -> [f64; 4usize];
1856    #[doc = "Project a reference to a SIMD vector to a reference to the equivalent array."]
1857    fn as_array_ref_f64x4(self, a: &f64x4<Self>) -> &[f64; 4usize];
1858    #[doc = "Project a mutable reference to a SIMD vector to a mutable reference to the equivalent array."]
1859    fn as_array_mut_f64x4(self, a: &mut f64x4<Self>) -> &mut [f64; 4usize];
1860    #[doc = "Store a SIMD vector into an array of the same length."]
1861    fn store_array_f64x4(self, a: f64x4<Self>, dest: &mut [f64; 4usize]) -> ();
1862    #[doc = "Reinterpret a vector of bytes as a SIMD vector of a given type, with the equivalent byte length."]
1863    fn cvt_from_bytes_f64x4(self, a: u8x32<Self>) -> f64x4<Self>;
1864    #[doc = "Reinterpret a SIMD vector as a vector of bytes, with the equivalent byte length."]
1865    fn cvt_to_bytes_f64x4(self, a: f64x4<Self>) -> u8x32<Self>;
1866    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
1867    fn slide_f64x4<const SHIFT: usize>(self, a: f64x4<Self>, b: f64x4<Self>) -> f64x4<Self>;
1868    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
1869    fn slide_within_blocks_f64x4<const SHIFT: usize>(
1870        self,
1871        a: f64x4<Self>,
1872        b: f64x4<Self>,
1873    ) -> f64x4<Self>;
1874    #[doc = "Compute the absolute value of each element."]
1875    fn abs_f64x4(self, a: f64x4<Self>) -> f64x4<Self>;
1876    #[doc = "Negate each element of the vector."]
1877    fn neg_f64x4(self, a: f64x4<Self>) -> f64x4<Self>;
1878    #[doc = "Compute the square root of each element.\n\nNegative elements other than `-0.0` will become NaN."]
1879    fn sqrt_f64x4(self, a: f64x4<Self>) -> f64x4<Self>;
1880    #[doc = "Add two vectors element-wise."]
1881    fn add_f64x4(self, a: f64x4<Self>, b: f64x4<Self>) -> f64x4<Self>;
1882    #[doc = "Subtract two vectors element-wise."]
1883    fn sub_f64x4(self, a: f64x4<Self>, b: f64x4<Self>) -> f64x4<Self>;
1884    #[doc = "Multiply two vectors element-wise."]
1885    fn mul_f64x4(self, a: f64x4<Self>, b: f64x4<Self>) -> f64x4<Self>;
1886    #[doc = "Divide two vectors element-wise."]
1887    fn div_f64x4(self, a: f64x4<Self>, b: f64x4<Self>) -> f64x4<Self>;
1888    #[doc = "Return a vector with the magnitude of `a` and the sign of `b` for each element.\n\nThis operation copies the sign bit, so if an input element is NaN, the output element will be a NaN with the same payload and a copied sign bit."]
1889    fn copysign_f64x4(self, a: f64x4<Self>, b: f64x4<Self>) -> f64x4<Self>;
1890    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
1891    fn simd_eq_f64x4(self, a: f64x4<Self>, b: f64x4<Self>) -> mask64x4<Self>;
1892    #[doc = "Compare two vectors element-wise for less than.\n\nReturns a mask where each element is all ones if `a` is less than `b`, and all zeroes if not."]
1893    fn simd_lt_f64x4(self, a: f64x4<Self>, b: f64x4<Self>) -> mask64x4<Self>;
1894    #[doc = "Compare two vectors element-wise for less than or equal.\n\nReturns a mask where each element is all ones if `a` is less than or equal to `b`, and all zeroes if not."]
1895    fn simd_le_f64x4(self, a: f64x4<Self>, b: f64x4<Self>) -> mask64x4<Self>;
1896    #[doc = "Compare two vectors element-wise for greater than or equal.\n\nReturns a mask where each element is all ones if `a` is greater than or equal to `b`, and all zeroes if not."]
1897    fn simd_ge_f64x4(self, a: f64x4<Self>, b: f64x4<Self>) -> mask64x4<Self>;
1898    #[doc = "Compare two vectors element-wise for greater than.\n\nReturns a mask where each element is all ones if `a` is greater than `b`, and all zeroes if not."]
1899    fn simd_gt_f64x4(self, a: f64x4<Self>, b: f64x4<Self>) -> mask64x4<Self>;
1900    #[doc = "Interleave the lower half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, b0, a1, b1]`.\n\n**Note:** This operation is only useful if you need to discard elements `a2, a3, b2, b3`.\n        For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
1901    fn zip_low_f64x4(self, a: f64x4<Self>, b: f64x4<Self>) -> f64x4<Self>;
1902    #[doc = "Interleave the upper half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a2, b2, a3, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a1, b0, b1`.For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
1903    fn zip_high_f64x4(self, a: f64x4<Self>, b: f64x4<Self>) -> f64x4<Self>;
1904    #[doc = "Extract even-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, a2, b0, b2]`.\n\n**Note:** This operation is only useful if you need to discard elements `a1, a3, b1, b3`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
1905    fn unzip_low_f64x4(self, a: f64x4<Self>, b: f64x4<Self>) -> f64x4<Self>;
1906    #[doc = "Extract odd-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a1, a3, b1, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a2, b0, b2`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
1907    fn unzip_high_f64x4(self, a: f64x4<Self>, b: f64x4<Self>) -> f64x4<Self>;
1908    #[doc = "Interleave two vectors.\n\nThe resulting vectors contain elements taken alternately from `a` and `b`, first filling the first result, and then the second.\n\nThe reverse of this operation is `deinterleave`.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `([a0, b0, a1, b1], [a2, b2, a3, b3])`."]
1909    fn interleave_f64x4(self, a: f64x4<Self>, b: f64x4<Self>) -> (f64x4<Self>, f64x4<Self>);
1910    #[doc = "Deinterleave two vectors.\n\nThe first result contains all even-indexed elements from `a` followed by all even-indexed elements from `b`. The second result contains all odd-indexed elements from `a` followed by all odd-indexed elements from `b`.\n\nThe reverse of this operation is `interleave`.\n\nFor vectors `[a0, b0, a1, b1]` and `[a2, b2, a3, b3]`, returns `([a0, a1, a2, a3], [b0, b1, b2, b3])`."]
1911    fn deinterleave_f64x4(self, a: f64x4<Self>, b: f64x4<Self>) -> (f64x4<Self>, f64x4<Self>);
1912    #[doc = "Return the element-wise maximum of two vectors.\n\nIf either operand is NaN, the result for that lane is implementation-defined-- it could be either the first or second operand. See `max_precise` for a version that returns the non-NaN operand if only one is NaN.\n\nIf one operand is positive zero and the other is negative zero, the result is also implementation-defined, and it could be either one."]
1913    fn max_f64x4(self, a: f64x4<Self>, b: f64x4<Self>) -> f64x4<Self>;
1914    #[doc = "Return the element-wise minimum of two vectors.\n\nIf either operand is NaN, the result for that lane is implementation-defined-- it could be either the first or second operand. See `min_precise` for a version that returns the non-NaN operand if only one is NaN.\n\nIf one operand is positive zero and the other is negative zero, the result is also implementation-defined, and it could be either one."]
1915    fn min_f64x4(self, a: f64x4<Self>, b: f64x4<Self>) -> f64x4<Self>;
1916    #[doc = "Return the element-wise maximum of two vectors.\n\nIf one operand is a quiet NaN and the other is not, this operation will choose the non-NaN operand.\n\nIf one operand is positive zero and the other is negative zero, the result is implementation-defined, and it could be either one.\n\nIf an operand is a *signaling* NaN, the result is not just implementation-defined, but fully non-deterministic: it may be either NaN or the non-NaN operand.\nSignaling NaN values are not produced by floating-point math operations, only from manual initialization with specific bit patterns. You probably don't need to worry about them."]
1917    fn max_precise_f64x4(self, a: f64x4<Self>, b: f64x4<Self>) -> f64x4<Self>;
1918    #[doc = "Return the element-wise minimum of two vectors.\n\nIf one operand is a quiet NaN and the other is not, this operation will choose the non-NaN operand.\n\nIf one operand is positive zero and the other is negative zero, the result is implementation-defined, and it could be either one.\n\nIf an operand is a *signaling* NaN, the result is not just implementation-defined, but fully non-deterministic: it may be either NaN or the non-NaN operand.\nSignaling NaN values are not produced by floating-point math operations, only from manual initialization with specific bit patterns. You probably don't need to worry about them."]
1919    fn min_precise_f64x4(self, a: f64x4<Self>, b: f64x4<Self>) -> f64x4<Self>;
1920    #[doc = "Compute `(a * b) + c` (fused multiply-add) for each element.\n\nDepending on hardware support, the result may be computed with only one rounding error, or may be implemented as a regular multiply followed by an add, which will result in two rounding errors."]
1921    fn mul_add_f64x4(self, a: f64x4<Self>, b: f64x4<Self>, c: f64x4<Self>) -> f64x4<Self>;
1922    #[doc = "Compute `(a * b) - c` (fused multiply-subtract) for each element.\n\nDepending on hardware support, the result may be computed with only one rounding error, or may be implemented as a regular multiply followed by a subtract, which will result in two rounding errors."]
1923    fn mul_sub_f64x4(self, a: f64x4<Self>, b: f64x4<Self>, c: f64x4<Self>) -> f64x4<Self>;
1924    #[doc = "Return the largest integer less than or equal to each element, that is, round towards negative infinity."]
1925    fn floor_f64x4(self, a: f64x4<Self>) -> f64x4<Self>;
1926    #[doc = "Return the smallest integer greater than or equal to each element, that is, round towards positive infinity."]
1927    fn ceil_f64x4(self, a: f64x4<Self>) -> f64x4<Self>;
1928    #[doc = "Round each element to the nearest integer, with ties rounding to the nearest even integer.\n\nThere is no corresponding `round` operation. Rust's `round` operation rounds ties away from zero, a behavior it inherited from C. That behavior is not implemented across all platforms, whereas round-ties-even is."]
1929    fn round_ties_even_f64x4(self, a: f64x4<Self>) -> f64x4<Self>;
1930    #[doc = "Return the fractional part of each element.\n\nThis is equivalent to `a - a.trunc()`."]
1931    fn fract_f64x4(self, a: f64x4<Self>) -> f64x4<Self>;
1932    #[doc = "Return the integer part of each element, rounding towards zero."]
1933    fn trunc_f64x4(self, a: f64x4<Self>) -> f64x4<Self>;
1934    #[doc = "Select elements from b and c based on the mask operand a.\n\nThis operation's behavior is unspecified if each lane of a is not the all-zeroes or all-ones bit pattern. See the [`Select`] trait's documentation for more information."]
1935    fn select_f64x4(self, a: mask64x4<Self>, b: f64x4<Self>, c: f64x4<Self>) -> f64x4<Self>;
1936    #[doc = "Combine two vectors into a single vector with twice the width.\n\n`a` provides the lower elements and `b` provides the upper elements."]
1937    fn combine_f64x4(self, a: f64x4<Self>, b: f64x4<Self>) -> f64x8<Self>;
1938    #[doc = "Split a vector into two vectors of half the width.\n\nReturns a tuple of (lower half, upper half)."]
1939    fn split_f64x4(self, a: f64x4<Self>) -> (f64x2<Self>, f64x2<Self>);
1940    #[doc = "Reinterpret the bits of this vector as a vector of `f32` elements.\n\nThe number of elements in the result is twice that of the input."]
1941    fn reinterpret_f32_f64x4(self, a: f64x4<Self>) -> f32x8<Self>;
1942    #[doc = "Create a SIMD vector with all elements set to the given value."]
1943    fn splat_mask64x4(self, val: i64) -> mask64x4<Self>;
1944    #[doc = "Create a SIMD vector from an array of the same length."]
1945    fn load_array_mask64x4(self, val: [i64; 4usize]) -> mask64x4<Self>;
1946    #[doc = "Create a SIMD vector from an array of the same length."]
1947    fn load_array_ref_mask64x4(self, val: &[i64; 4usize]) -> mask64x4<Self>;
1948    #[doc = "Convert a SIMD vector to an array."]
1949    fn as_array_mask64x4(self, a: mask64x4<Self>) -> [i64; 4usize];
1950    #[doc = "Project a reference to a SIMD vector to a reference to the equivalent array."]
1951    fn as_array_ref_mask64x4(self, a: &mask64x4<Self>) -> &[i64; 4usize];
1952    #[doc = "Project a mutable reference to a SIMD vector to a mutable reference to the equivalent array."]
1953    fn as_array_mut_mask64x4(self, a: &mut mask64x4<Self>) -> &mut [i64; 4usize];
1954    #[doc = "Store a SIMD vector into an array of the same length."]
1955    fn store_array_mask64x4(self, a: mask64x4<Self>, dest: &mut [i64; 4usize]) -> ();
1956    #[doc = "Reinterpret a vector of bytes as a SIMD vector of a given type, with the equivalent byte length."]
1957    fn cvt_from_bytes_mask64x4(self, a: u8x32<Self>) -> mask64x4<Self>;
1958    #[doc = "Reinterpret a SIMD vector as a vector of bytes, with the equivalent byte length."]
1959    fn cvt_to_bytes_mask64x4(self, a: mask64x4<Self>) -> u8x32<Self>;
1960    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
1961    fn slide_mask64x4<const SHIFT: usize>(
1962        self,
1963        a: mask64x4<Self>,
1964        b: mask64x4<Self>,
1965    ) -> mask64x4<Self>;
1966    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
1967    fn slide_within_blocks_mask64x4<const SHIFT: usize>(
1968        self,
1969        a: mask64x4<Self>,
1970        b: mask64x4<Self>,
1971    ) -> mask64x4<Self>;
1972    #[doc = "Compute the logical AND of two masks."]
1973    fn and_mask64x4(self, a: mask64x4<Self>, b: mask64x4<Self>) -> mask64x4<Self>;
1974    #[doc = "Compute the logical OR of two masks."]
1975    fn or_mask64x4(self, a: mask64x4<Self>, b: mask64x4<Self>) -> mask64x4<Self>;
1976    #[doc = "Compute the logical XOR of two masks."]
1977    fn xor_mask64x4(self, a: mask64x4<Self>, b: mask64x4<Self>) -> mask64x4<Self>;
1978    #[doc = "Compute the logical NOT of the mask."]
1979    fn not_mask64x4(self, a: mask64x4<Self>) -> mask64x4<Self>;
1980    #[doc = "Select elements from `b` and `c` based on the mask operand `a`.\n\nThis operation's behavior is unspecified if each lane of a is not the all-zeroes or all-ones bit pattern. See the [`Select`] trait's documentation for more information."]
1981    fn select_mask64x4(
1982        self,
1983        a: mask64x4<Self>,
1984        b: mask64x4<Self>,
1985        c: mask64x4<Self>,
1986    ) -> mask64x4<Self>;
1987    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
1988    fn simd_eq_mask64x4(self, a: mask64x4<Self>, b: mask64x4<Self>) -> mask64x4<Self>;
1989    #[doc = "Returns true if any elements in this mask are true (all ones).\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
1990    fn any_true_mask64x4(self, a: mask64x4<Self>) -> bool;
1991    #[doc = "Returns true if all elements in this mask are true (all ones).\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
1992    fn all_true_mask64x4(self, a: mask64x4<Self>) -> bool;
1993    #[doc = "Returns true if any elements in this mask are false (all zeroes).\n\nThis is logically equivalent to `!all_true`, but may be faster.\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
1994    fn any_false_mask64x4(self, a: mask64x4<Self>) -> bool;
1995    #[doc = "Returns true if all elements in this mask are false (all zeroes).\n\nThis is logically equivalent to `!any_true`, but may be faster.\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
1996    fn all_false_mask64x4(self, a: mask64x4<Self>) -> bool;
1997    #[doc = "Combine two vectors into a single vector with twice the width.\n\n`a` provides the lower elements and `b` provides the upper elements."]
1998    fn combine_mask64x4(self, a: mask64x4<Self>, b: mask64x4<Self>) -> mask64x8<Self>;
1999    #[doc = "Split a vector into two vectors of half the width.\n\nReturns a tuple of (lower half, upper half)."]
2000    fn split_mask64x4(self, a: mask64x4<Self>) -> (mask64x2<Self>, mask64x2<Self>);
2001    #[doc = "Create a SIMD vector with all elements set to the given value."]
2002    fn splat_f32x16(self, val: f32) -> f32x16<Self>;
2003    #[doc = "Create a SIMD vector from an array of the same length."]
2004    fn load_array_f32x16(self, val: [f32; 16usize]) -> f32x16<Self>;
2005    #[doc = "Create a SIMD vector from an array of the same length."]
2006    fn load_array_ref_f32x16(self, val: &[f32; 16usize]) -> f32x16<Self>;
2007    #[doc = "Convert a SIMD vector to an array."]
2008    fn as_array_f32x16(self, a: f32x16<Self>) -> [f32; 16usize];
2009    #[doc = "Project a reference to a SIMD vector to a reference to the equivalent array."]
2010    fn as_array_ref_f32x16(self, a: &f32x16<Self>) -> &[f32; 16usize];
2011    #[doc = "Project a mutable reference to a SIMD vector to a mutable reference to the equivalent array."]
2012    fn as_array_mut_f32x16(self, a: &mut f32x16<Self>) -> &mut [f32; 16usize];
2013    #[doc = "Store a SIMD vector into an array of the same length."]
2014    fn store_array_f32x16(self, a: f32x16<Self>, dest: &mut [f32; 16usize]) -> ();
2015    #[doc = "Reinterpret a vector of bytes as a SIMD vector of a given type, with the equivalent byte length."]
2016    fn cvt_from_bytes_f32x16(self, a: u8x64<Self>) -> f32x16<Self>;
2017    #[doc = "Reinterpret a SIMD vector as a vector of bytes, with the equivalent byte length."]
2018    fn cvt_to_bytes_f32x16(self, a: f32x16<Self>) -> u8x64<Self>;
2019    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
2020    fn slide_f32x16<const SHIFT: usize>(self, a: f32x16<Self>, b: f32x16<Self>) -> f32x16<Self>;
2021    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
2022    fn slide_within_blocks_f32x16<const SHIFT: usize>(
2023        self,
2024        a: f32x16<Self>,
2025        b: f32x16<Self>,
2026    ) -> f32x16<Self>;
2027    #[doc = "Compute the absolute value of each element."]
2028    fn abs_f32x16(self, a: f32x16<Self>) -> f32x16<Self>;
2029    #[doc = "Negate each element of the vector."]
2030    fn neg_f32x16(self, a: f32x16<Self>) -> f32x16<Self>;
2031    #[doc = "Compute the square root of each element.\n\nNegative elements other than `-0.0` will become NaN."]
2032    fn sqrt_f32x16(self, a: f32x16<Self>) -> f32x16<Self>;
2033    #[doc = "Add two vectors element-wise."]
2034    fn add_f32x16(self, a: f32x16<Self>, b: f32x16<Self>) -> f32x16<Self>;
2035    #[doc = "Subtract two vectors element-wise."]
2036    fn sub_f32x16(self, a: f32x16<Self>, b: f32x16<Self>) -> f32x16<Self>;
2037    #[doc = "Multiply two vectors element-wise."]
2038    fn mul_f32x16(self, a: f32x16<Self>, b: f32x16<Self>) -> f32x16<Self>;
2039    #[doc = "Divide two vectors element-wise."]
2040    fn div_f32x16(self, a: f32x16<Self>, b: f32x16<Self>) -> f32x16<Self>;
2041    #[doc = "Return a vector with the magnitude of `a` and the sign of `b` for each element.\n\nThis operation copies the sign bit, so if an input element is NaN, the output element will be a NaN with the same payload and a copied sign bit."]
2042    fn copysign_f32x16(self, a: f32x16<Self>, b: f32x16<Self>) -> f32x16<Self>;
2043    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
2044    fn simd_eq_f32x16(self, a: f32x16<Self>, b: f32x16<Self>) -> mask32x16<Self>;
2045    #[doc = "Compare two vectors element-wise for less than.\n\nReturns a mask where each element is all ones if `a` is less than `b`, and all zeroes if not."]
2046    fn simd_lt_f32x16(self, a: f32x16<Self>, b: f32x16<Self>) -> mask32x16<Self>;
2047    #[doc = "Compare two vectors element-wise for less than or equal.\n\nReturns a mask where each element is all ones if `a` is less than or equal to `b`, and all zeroes if not."]
2048    fn simd_le_f32x16(self, a: f32x16<Self>, b: f32x16<Self>) -> mask32x16<Self>;
2049    #[doc = "Compare two vectors element-wise for greater than or equal.\n\nReturns a mask where each element is all ones if `a` is greater than or equal to `b`, and all zeroes if not."]
2050    fn simd_ge_f32x16(self, a: f32x16<Self>, b: f32x16<Self>) -> mask32x16<Self>;
2051    #[doc = "Compare two vectors element-wise for greater than.\n\nReturns a mask where each element is all ones if `a` is greater than `b`, and all zeroes if not."]
2052    fn simd_gt_f32x16(self, a: f32x16<Self>, b: f32x16<Self>) -> mask32x16<Self>;
2053    #[doc = "Interleave the lower half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, b0, a1, b1]`.\n\n**Note:** This operation is only useful if you need to discard elements `a2, a3, b2, b3`.\n        For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
2054    fn zip_low_f32x16(self, a: f32x16<Self>, b: f32x16<Self>) -> f32x16<Self>;
2055    #[doc = "Interleave the upper half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a2, b2, a3, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a1, b0, b1`.For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
2056    fn zip_high_f32x16(self, a: f32x16<Self>, b: f32x16<Self>) -> f32x16<Self>;
2057    #[doc = "Extract even-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, a2, b0, b2]`.\n\n**Note:** This operation is only useful if you need to discard elements `a1, a3, b1, b3`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
2058    fn unzip_low_f32x16(self, a: f32x16<Self>, b: f32x16<Self>) -> f32x16<Self>;
2059    #[doc = "Extract odd-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a1, a3, b1, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a2, b0, b2`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
2060    fn unzip_high_f32x16(self, a: f32x16<Self>, b: f32x16<Self>) -> f32x16<Self>;
2061    #[doc = "Interleave two vectors.\n\nThe resulting vectors contain elements taken alternately from `a` and `b`, first filling the first result, and then the second.\n\nThe reverse of this operation is `deinterleave`.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `([a0, b0, a1, b1], [a2, b2, a3, b3])`."]
2062    fn interleave_f32x16(self, a: f32x16<Self>, b: f32x16<Self>) -> (f32x16<Self>, f32x16<Self>);
2063    #[doc = "Deinterleave two vectors.\n\nThe first result contains all even-indexed elements from `a` followed by all even-indexed elements from `b`. The second result contains all odd-indexed elements from `a` followed by all odd-indexed elements from `b`.\n\nThe reverse of this operation is `interleave`.\n\nFor vectors `[a0, b0, a1, b1]` and `[a2, b2, a3, b3]`, returns `([a0, a1, a2, a3], [b0, b1, b2, b3])`."]
2064    fn deinterleave_f32x16(self, a: f32x16<Self>, b: f32x16<Self>) -> (f32x16<Self>, f32x16<Self>);
2065    #[doc = "Return the element-wise maximum of two vectors.\n\nIf either operand is NaN, the result for that lane is implementation-defined-- it could be either the first or second operand. See `max_precise` for a version that returns the non-NaN operand if only one is NaN.\n\nIf one operand is positive zero and the other is negative zero, the result is also implementation-defined, and it could be either one."]
2066    fn max_f32x16(self, a: f32x16<Self>, b: f32x16<Self>) -> f32x16<Self>;
2067    #[doc = "Return the element-wise minimum of two vectors.\n\nIf either operand is NaN, the result for that lane is implementation-defined-- it could be either the first or second operand. See `min_precise` for a version that returns the non-NaN operand if only one is NaN.\n\nIf one operand is positive zero and the other is negative zero, the result is also implementation-defined, and it could be either one."]
2068    fn min_f32x16(self, a: f32x16<Self>, b: f32x16<Self>) -> f32x16<Self>;
2069    #[doc = "Return the element-wise maximum of two vectors.\n\nIf one operand is a quiet NaN and the other is not, this operation will choose the non-NaN operand.\n\nIf one operand is positive zero and the other is negative zero, the result is implementation-defined, and it could be either one.\n\nIf an operand is a *signaling* NaN, the result is not just implementation-defined, but fully non-deterministic: it may be either NaN or the non-NaN operand.\nSignaling NaN values are not produced by floating-point math operations, only from manual initialization with specific bit patterns. You probably don't need to worry about them."]
2070    fn max_precise_f32x16(self, a: f32x16<Self>, b: f32x16<Self>) -> f32x16<Self>;
2071    #[doc = "Return the element-wise minimum of two vectors.\n\nIf one operand is a quiet NaN and the other is not, this operation will choose the non-NaN operand.\n\nIf one operand is positive zero and the other is negative zero, the result is implementation-defined, and it could be either one.\n\nIf an operand is a *signaling* NaN, the result is not just implementation-defined, but fully non-deterministic: it may be either NaN or the non-NaN operand.\nSignaling NaN values are not produced by floating-point math operations, only from manual initialization with specific bit patterns. You probably don't need to worry about them."]
2072    fn min_precise_f32x16(self, a: f32x16<Self>, b: f32x16<Self>) -> f32x16<Self>;
2073    #[doc = "Compute `(a * b) + c` (fused multiply-add) for each element.\n\nDepending on hardware support, the result may be computed with only one rounding error, or may be implemented as a regular multiply followed by an add, which will result in two rounding errors."]
2074    fn mul_add_f32x16(self, a: f32x16<Self>, b: f32x16<Self>, c: f32x16<Self>) -> f32x16<Self>;
2075    #[doc = "Compute `(a * b) - c` (fused multiply-subtract) for each element.\n\nDepending on hardware support, the result may be computed with only one rounding error, or may be implemented as a regular multiply followed by a subtract, which will result in two rounding errors."]
2076    fn mul_sub_f32x16(self, a: f32x16<Self>, b: f32x16<Self>, c: f32x16<Self>) -> f32x16<Self>;
2077    #[doc = "Return the largest integer less than or equal to each element, that is, round towards negative infinity."]
2078    fn floor_f32x16(self, a: f32x16<Self>) -> f32x16<Self>;
2079    #[doc = "Return the smallest integer greater than or equal to each element, that is, round towards positive infinity."]
2080    fn ceil_f32x16(self, a: f32x16<Self>) -> f32x16<Self>;
2081    #[doc = "Round each element to the nearest integer, with ties rounding to the nearest even integer.\n\nThere is no corresponding `round` operation. Rust's `round` operation rounds ties away from zero, a behavior it inherited from C. That behavior is not implemented across all platforms, whereas round-ties-even is."]
2082    fn round_ties_even_f32x16(self, a: f32x16<Self>) -> f32x16<Self>;
2083    #[doc = "Return the fractional part of each element.\n\nThis is equivalent to `a - a.trunc()`."]
2084    fn fract_f32x16(self, a: f32x16<Self>) -> f32x16<Self>;
2085    #[doc = "Return the integer part of each element, rounding towards zero."]
2086    fn trunc_f32x16(self, a: f32x16<Self>) -> f32x16<Self>;
2087    #[doc = "Select elements from b and c based on the mask operand a.\n\nThis operation's behavior is unspecified if each lane of a is not the all-zeroes or all-ones bit pattern. See the [`Select`] trait's documentation for more information."]
2088    fn select_f32x16(self, a: mask32x16<Self>, b: f32x16<Self>, c: f32x16<Self>) -> f32x16<Self>;
2089    #[doc = "Split a vector into two vectors of half the width.\n\nReturns a tuple of (lower half, upper half)."]
2090    fn split_f32x16(self, a: f32x16<Self>) -> (f32x8<Self>, f32x8<Self>);
2091    #[doc = "Reinterpret the bits of this vector as a vector of `f64` elements.\n\nThe number of elements in the result is half that of the input."]
2092    fn reinterpret_f64_f32x16(self, a: f32x16<Self>) -> f64x8<Self>;
2093    #[doc = "Reinterpret the bits of this vector as a vector of `i32` elements.\n\nThis is a bitwise reinterpretation only, and does not perform any conversions."]
2094    fn reinterpret_i32_f32x16(self, a: f32x16<Self>) -> i32x16<Self>;
2095    #[doc = "Load elements from an array with 4-way interleaving.\n\nReads consecutive elements and deinterleaves them into a single vector."]
2096    fn load_interleaved_128_f32x16(self, src: &[f32; 16usize]) -> f32x16<Self>;
2097    #[doc = "Store elements to an array with 4-way interleaving.\n\nInterleaves the vector elements and writes them consecutively to memory."]
2098    fn store_interleaved_128_f32x16(self, a: f32x16<Self>, dest: &mut [f32; 16usize]) -> ();
2099    #[doc = "Reinterpret the bits of this vector as a vector of `u8` elements.\n\nThe total bit width is preserved; the number of elements changes accordingly."]
2100    fn reinterpret_u8_f32x16(self, a: f32x16<Self>) -> u8x64<Self>;
2101    #[doc = "Reinterpret the bits of this vector as a vector of `u32` elements.\n\nThe total bit width is preserved; the number of elements changes accordingly."]
2102    fn reinterpret_u32_f32x16(self, a: f32x16<Self>) -> u32x16<Self>;
2103    #[doc = "Convert each floating-point element to an unsigned 32-bit integer, truncating towards zero.\n\nOut-of-range values or NaN will produce implementation-defined results.\n\nOn x86 platforms, this operation will still be slower than converting to `i32`, because there is no native instruction for converting to `u32` (at least until AVX-512, which is currently not supported).\nIf you know your values fit within range of an `i32`, you should convert to an `i32` and cast to your desired datatype afterwards."]
2104    fn cvt_u32_f32x16(self, a: f32x16<Self>) -> u32x16<Self>;
2105    #[doc = "Convert each floating-point element to an unsigned 32-bit integer, truncating towards zero.\n\nOut-of-range values are saturated to the closest in-range value. NaN becomes 0."]
2106    fn cvt_u32_precise_f32x16(self, a: f32x16<Self>) -> u32x16<Self>;
2107    #[doc = "Convert each floating-point element to a signed 32-bit integer, truncating towards zero.\n\nOut-of-range values or NaN will produce implementation-defined results."]
2108    fn cvt_i32_f32x16(self, a: f32x16<Self>) -> i32x16<Self>;
2109    #[doc = "Convert each floating-point element to a signed 32-bit integer, truncating towards zero.\n\nOut-of-range values are saturated to the closest in-range value. NaN becomes 0."]
2110    fn cvt_i32_precise_f32x16(self, a: f32x16<Self>) -> i32x16<Self>;
2111    #[doc = "Create a SIMD vector with all elements set to the given value."]
2112    fn splat_i8x64(self, val: i8) -> i8x64<Self>;
2113    #[doc = "Create a SIMD vector from an array of the same length."]
2114    fn load_array_i8x64(self, val: [i8; 64usize]) -> i8x64<Self>;
2115    #[doc = "Create a SIMD vector from an array of the same length."]
2116    fn load_array_ref_i8x64(self, val: &[i8; 64usize]) -> i8x64<Self>;
2117    #[doc = "Convert a SIMD vector to an array."]
2118    fn as_array_i8x64(self, a: i8x64<Self>) -> [i8; 64usize];
2119    #[doc = "Project a reference to a SIMD vector to a reference to the equivalent array."]
2120    fn as_array_ref_i8x64(self, a: &i8x64<Self>) -> &[i8; 64usize];
2121    #[doc = "Project a mutable reference to a SIMD vector to a mutable reference to the equivalent array."]
2122    fn as_array_mut_i8x64(self, a: &mut i8x64<Self>) -> &mut [i8; 64usize];
2123    #[doc = "Store a SIMD vector into an array of the same length."]
2124    fn store_array_i8x64(self, a: i8x64<Self>, dest: &mut [i8; 64usize]) -> ();
2125    #[doc = "Reinterpret a vector of bytes as a SIMD vector of a given type, with the equivalent byte length."]
2126    fn cvt_from_bytes_i8x64(self, a: u8x64<Self>) -> i8x64<Self>;
2127    #[doc = "Reinterpret a SIMD vector as a vector of bytes, with the equivalent byte length."]
2128    fn cvt_to_bytes_i8x64(self, a: i8x64<Self>) -> u8x64<Self>;
2129    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
2130    fn slide_i8x64<const SHIFT: usize>(self, a: i8x64<Self>, b: i8x64<Self>) -> i8x64<Self>;
2131    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
2132    fn slide_within_blocks_i8x64<const SHIFT: usize>(
2133        self,
2134        a: i8x64<Self>,
2135        b: i8x64<Self>,
2136    ) -> i8x64<Self>;
2137    #[doc = "Add two vectors element-wise, wrapping on overflow."]
2138    fn add_i8x64(self, a: i8x64<Self>, b: i8x64<Self>) -> i8x64<Self>;
2139    #[doc = "Subtract two vectors element-wise, wrapping on overflow."]
2140    fn sub_i8x64(self, a: i8x64<Self>, b: i8x64<Self>) -> i8x64<Self>;
2141    #[doc = "Multiply two vectors element-wise, wrapping on overflow."]
2142    fn mul_i8x64(self, a: i8x64<Self>, b: i8x64<Self>) -> i8x64<Self>;
2143    #[doc = "Compute the bitwise AND of two vectors."]
2144    fn and_i8x64(self, a: i8x64<Self>, b: i8x64<Self>) -> i8x64<Self>;
2145    #[doc = "Compute the bitwise OR of two vectors."]
2146    fn or_i8x64(self, a: i8x64<Self>, b: i8x64<Self>) -> i8x64<Self>;
2147    #[doc = "Compute the bitwise XOR of two vectors."]
2148    fn xor_i8x64(self, a: i8x64<Self>, b: i8x64<Self>) -> i8x64<Self>;
2149    #[doc = "Compute the bitwise NOT of the vector."]
2150    fn not_i8x64(self, a: i8x64<Self>) -> i8x64<Self>;
2151    #[doc = "Shift each element left by the given number of bits.\n\nBits shifted out of the left side are discarded, and zeros are shifted in on the right."]
2152    fn shl_i8x64(self, a: i8x64<Self>, shift: u32) -> i8x64<Self>;
2153    #[doc = "Shift each element left by the given number of bits.\n\nBits shifted out of the left side are discarded, and zeros are shifted in on the right.\n\nThis operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation."]
2154    fn shlv_i8x64(self, a: i8x64<Self>, b: i8x64<Self>) -> i8x64<Self>;
2155    #[doc = "Shift each element right by the given number of bits.\n\nFor unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated."]
2156    fn shr_i8x64(self, a: i8x64<Self>, shift: u32) -> i8x64<Self>;
2157    #[doc = "Shift each element right by the corresponding element in another vector.\n\nFor unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated.\n\nThis operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation."]
2158    fn shrv_i8x64(self, a: i8x64<Self>, b: i8x64<Self>) -> i8x64<Self>;
2159    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
2160    fn simd_eq_i8x64(self, a: i8x64<Self>, b: i8x64<Self>) -> mask8x64<Self>;
2161    #[doc = "Compare two vectors element-wise for less than.\n\nReturns a mask where each element is all ones if `a` is less than `b`, and all zeroes if not."]
2162    fn simd_lt_i8x64(self, a: i8x64<Self>, b: i8x64<Self>) -> mask8x64<Self>;
2163    #[doc = "Compare two vectors element-wise for less than or equal.\n\nReturns a mask where each element is all ones if `a` is less than or equal to `b`, and all zeroes if not."]
2164    fn simd_le_i8x64(self, a: i8x64<Self>, b: i8x64<Self>) -> mask8x64<Self>;
2165    #[doc = "Compare two vectors element-wise for greater than or equal.\n\nReturns a mask where each element is all ones if `a` is greater than or equal to `b`, and all zeroes if not."]
2166    fn simd_ge_i8x64(self, a: i8x64<Self>, b: i8x64<Self>) -> mask8x64<Self>;
2167    #[doc = "Compare two vectors element-wise for greater than.\n\nReturns a mask where each element is all ones if `a` is greater than `b`, and all zeroes if not."]
2168    fn simd_gt_i8x64(self, a: i8x64<Self>, b: i8x64<Self>) -> mask8x64<Self>;
2169    #[doc = "Interleave the lower half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, b0, a1, b1]`.\n\n**Note:** This operation is only useful if you need to discard elements `a2, a3, b2, b3`.\n        For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
2170    fn zip_low_i8x64(self, a: i8x64<Self>, b: i8x64<Self>) -> i8x64<Self>;
2171    #[doc = "Interleave the upper half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a2, b2, a3, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a1, b0, b1`.For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
2172    fn zip_high_i8x64(self, a: i8x64<Self>, b: i8x64<Self>) -> i8x64<Self>;
2173    #[doc = "Extract even-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, a2, b0, b2]`.\n\n**Note:** This operation is only useful if you need to discard elements `a1, a3, b1, b3`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
2174    fn unzip_low_i8x64(self, a: i8x64<Self>, b: i8x64<Self>) -> i8x64<Self>;
2175    #[doc = "Extract odd-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a1, a3, b1, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a2, b0, b2`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
2176    fn unzip_high_i8x64(self, a: i8x64<Self>, b: i8x64<Self>) -> i8x64<Self>;
2177    #[doc = "Interleave two vectors.\n\nThe resulting vectors contain elements taken alternately from `a` and `b`, first filling the first result, and then the second.\n\nThe reverse of this operation is `deinterleave`.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `([a0, b0, a1, b1], [a2, b2, a3, b3])`."]
2178    fn interleave_i8x64(self, a: i8x64<Self>, b: i8x64<Self>) -> (i8x64<Self>, i8x64<Self>);
2179    #[doc = "Deinterleave two vectors.\n\nThe first result contains all even-indexed elements from `a` followed by all even-indexed elements from `b`. The second result contains all odd-indexed elements from `a` followed by all odd-indexed elements from `b`.\n\nThe reverse of this operation is `interleave`.\n\nFor vectors `[a0, b0, a1, b1]` and `[a2, b2, a3, b3]`, returns `([a0, a1, a2, a3], [b0, b1, b2, b3])`."]
2180    fn deinterleave_i8x64(self, a: i8x64<Self>, b: i8x64<Self>) -> (i8x64<Self>, i8x64<Self>);
2181    #[doc = "Select elements from b and c based on the mask operand a.\n\nThis operation's behavior is unspecified if each lane of a is not the all-zeroes or all-ones bit pattern. See the [`Select`] trait's documentation for more information."]
2182    fn select_i8x64(self, a: mask8x64<Self>, b: i8x64<Self>, c: i8x64<Self>) -> i8x64<Self>;
2183    #[doc = "Return the element-wise minimum of two vectors."]
2184    fn min_i8x64(self, a: i8x64<Self>, b: i8x64<Self>) -> i8x64<Self>;
2185    #[doc = "Return the element-wise maximum of two vectors."]
2186    fn max_i8x64(self, a: i8x64<Self>, b: i8x64<Self>) -> i8x64<Self>;
2187    #[doc = "Split a vector into two vectors of half the width.\n\nReturns a tuple of (lower half, upper half)."]
2188    fn split_i8x64(self, a: i8x64<Self>) -> (i8x32<Self>, i8x32<Self>);
2189    #[doc = "Negate each element of the vector, wrapping on overflow."]
2190    fn neg_i8x64(self, a: i8x64<Self>) -> i8x64<Self>;
2191    #[doc = "Reinterpret the bits of this vector as a vector of `u8` elements.\n\nThe total bit width is preserved; the number of elements changes accordingly."]
2192    fn reinterpret_u8_i8x64(self, a: i8x64<Self>) -> u8x64<Self>;
2193    #[doc = "Reinterpret the bits of this vector as a vector of `u32` elements.\n\nThe total bit width is preserved; the number of elements changes accordingly."]
2194    fn reinterpret_u32_i8x64(self, a: i8x64<Self>) -> u32x16<Self>;
2195    #[doc = "Create a SIMD vector with all elements set to the given value."]
2196    fn splat_u8x64(self, val: u8) -> u8x64<Self>;
2197    #[doc = "Create a SIMD vector from an array of the same length."]
2198    fn load_array_u8x64(self, val: [u8; 64usize]) -> u8x64<Self>;
2199    #[doc = "Create a SIMD vector from an array of the same length."]
2200    fn load_array_ref_u8x64(self, val: &[u8; 64usize]) -> u8x64<Self>;
2201    #[doc = "Convert a SIMD vector to an array."]
2202    fn as_array_u8x64(self, a: u8x64<Self>) -> [u8; 64usize];
2203    #[doc = "Project a reference to a SIMD vector to a reference to the equivalent array."]
2204    fn as_array_ref_u8x64(self, a: &u8x64<Self>) -> &[u8; 64usize];
2205    #[doc = "Project a mutable reference to a SIMD vector to a mutable reference to the equivalent array."]
2206    fn as_array_mut_u8x64(self, a: &mut u8x64<Self>) -> &mut [u8; 64usize];
2207    #[doc = "Store a SIMD vector into an array of the same length."]
2208    fn store_array_u8x64(self, a: u8x64<Self>, dest: &mut [u8; 64usize]) -> ();
2209    #[doc = "Reinterpret a vector of bytes as a SIMD vector of a given type, with the equivalent byte length."]
2210    fn cvt_from_bytes_u8x64(self, a: u8x64<Self>) -> u8x64<Self>;
2211    #[doc = "Reinterpret a SIMD vector as a vector of bytes, with the equivalent byte length."]
2212    fn cvt_to_bytes_u8x64(self, a: u8x64<Self>) -> u8x64<Self>;
2213    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
2214    fn slide_u8x64<const SHIFT: usize>(self, a: u8x64<Self>, b: u8x64<Self>) -> u8x64<Self>;
2215    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
2216    fn slide_within_blocks_u8x64<const SHIFT: usize>(
2217        self,
2218        a: u8x64<Self>,
2219        b: u8x64<Self>,
2220    ) -> u8x64<Self>;
2221    #[doc = "Add two vectors element-wise, wrapping on overflow."]
2222    fn add_u8x64(self, a: u8x64<Self>, b: u8x64<Self>) -> u8x64<Self>;
2223    #[doc = "Subtract two vectors element-wise, wrapping on overflow."]
2224    fn sub_u8x64(self, a: u8x64<Self>, b: u8x64<Self>) -> u8x64<Self>;
2225    #[doc = "Multiply two vectors element-wise, wrapping on overflow."]
2226    fn mul_u8x64(self, a: u8x64<Self>, b: u8x64<Self>) -> u8x64<Self>;
2227    #[doc = "Compute the bitwise AND of two vectors."]
2228    fn and_u8x64(self, a: u8x64<Self>, b: u8x64<Self>) -> u8x64<Self>;
2229    #[doc = "Compute the bitwise OR of two vectors."]
2230    fn or_u8x64(self, a: u8x64<Self>, b: u8x64<Self>) -> u8x64<Self>;
2231    #[doc = "Compute the bitwise XOR of two vectors."]
2232    fn xor_u8x64(self, a: u8x64<Self>, b: u8x64<Self>) -> u8x64<Self>;
2233    #[doc = "Compute the bitwise NOT of the vector."]
2234    fn not_u8x64(self, a: u8x64<Self>) -> u8x64<Self>;
2235    #[doc = "Shift each element left by the given number of bits.\n\nBits shifted out of the left side are discarded, and zeros are shifted in on the right."]
2236    fn shl_u8x64(self, a: u8x64<Self>, shift: u32) -> u8x64<Self>;
2237    #[doc = "Shift each element left by the given number of bits.\n\nBits shifted out of the left side are discarded, and zeros are shifted in on the right.\n\nThis operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation."]
2238    fn shlv_u8x64(self, a: u8x64<Self>, b: u8x64<Self>) -> u8x64<Self>;
2239    #[doc = "Shift each element right by the given number of bits.\n\nFor unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated."]
2240    fn shr_u8x64(self, a: u8x64<Self>, shift: u32) -> u8x64<Self>;
2241    #[doc = "Shift each element right by the corresponding element in another vector.\n\nFor unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated.\n\nThis operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation."]
2242    fn shrv_u8x64(self, a: u8x64<Self>, b: u8x64<Self>) -> u8x64<Self>;
2243    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
2244    fn simd_eq_u8x64(self, a: u8x64<Self>, b: u8x64<Self>) -> mask8x64<Self>;
2245    #[doc = "Compare two vectors element-wise for less than.\n\nReturns a mask where each element is all ones if `a` is less than `b`, and all zeroes if not."]
2246    fn simd_lt_u8x64(self, a: u8x64<Self>, b: u8x64<Self>) -> mask8x64<Self>;
2247    #[doc = "Compare two vectors element-wise for less than or equal.\n\nReturns a mask where each element is all ones if `a` is less than or equal to `b`, and all zeroes if not."]
2248    fn simd_le_u8x64(self, a: u8x64<Self>, b: u8x64<Self>) -> mask8x64<Self>;
2249    #[doc = "Compare two vectors element-wise for greater than or equal.\n\nReturns a mask where each element is all ones if `a` is greater than or equal to `b`, and all zeroes if not."]
2250    fn simd_ge_u8x64(self, a: u8x64<Self>, b: u8x64<Self>) -> mask8x64<Self>;
2251    #[doc = "Compare two vectors element-wise for greater than.\n\nReturns a mask where each element is all ones if `a` is greater than `b`, and all zeroes if not."]
2252    fn simd_gt_u8x64(self, a: u8x64<Self>, b: u8x64<Self>) -> mask8x64<Self>;
2253    #[doc = "Interleave the lower half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, b0, a1, b1]`.\n\n**Note:** This operation is only useful if you need to discard elements `a2, a3, b2, b3`.\n        For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
2254    fn zip_low_u8x64(self, a: u8x64<Self>, b: u8x64<Self>) -> u8x64<Self>;
2255    #[doc = "Interleave the upper half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a2, b2, a3, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a1, b0, b1`.For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
2256    fn zip_high_u8x64(self, a: u8x64<Self>, b: u8x64<Self>) -> u8x64<Self>;
2257    #[doc = "Extract even-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, a2, b0, b2]`.\n\n**Note:** This operation is only useful if you need to discard elements `a1, a3, b1, b3`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
2258    fn unzip_low_u8x64(self, a: u8x64<Self>, b: u8x64<Self>) -> u8x64<Self>;
2259    #[doc = "Extract odd-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a1, a3, b1, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a2, b0, b2`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
2260    fn unzip_high_u8x64(self, a: u8x64<Self>, b: u8x64<Self>) -> u8x64<Self>;
2261    #[doc = "Interleave two vectors.\n\nThe resulting vectors contain elements taken alternately from `a` and `b`, first filling the first result, and then the second.\n\nThe reverse of this operation is `deinterleave`.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `([a0, b0, a1, b1], [a2, b2, a3, b3])`."]
2262    fn interleave_u8x64(self, a: u8x64<Self>, b: u8x64<Self>) -> (u8x64<Self>, u8x64<Self>);
2263    #[doc = "Deinterleave two vectors.\n\nThe first result contains all even-indexed elements from `a` followed by all even-indexed elements from `b`. The second result contains all odd-indexed elements from `a` followed by all odd-indexed elements from `b`.\n\nThe reverse of this operation is `interleave`.\n\nFor vectors `[a0, b0, a1, b1]` and `[a2, b2, a3, b3]`, returns `([a0, a1, a2, a3], [b0, b1, b2, b3])`."]
2264    fn deinterleave_u8x64(self, a: u8x64<Self>, b: u8x64<Self>) -> (u8x64<Self>, u8x64<Self>);
2265    #[doc = "Select elements from b and c based on the mask operand a.\n\nThis operation's behavior is unspecified if each lane of a is not the all-zeroes or all-ones bit pattern. See the [`Select`] trait's documentation for more information."]
2266    fn select_u8x64(self, a: mask8x64<Self>, b: u8x64<Self>, c: u8x64<Self>) -> u8x64<Self>;
2267    #[doc = "Return the element-wise minimum of two vectors."]
2268    fn min_u8x64(self, a: u8x64<Self>, b: u8x64<Self>) -> u8x64<Self>;
2269    #[doc = "Return the element-wise maximum of two vectors."]
2270    fn max_u8x64(self, a: u8x64<Self>, b: u8x64<Self>) -> u8x64<Self>;
2271    #[doc = "Split a vector into two vectors of half the width.\n\nReturns a tuple of (lower half, upper half)."]
2272    fn split_u8x64(self, a: u8x64<Self>) -> (u8x32<Self>, u8x32<Self>);
2273    #[doc = "Load elements from an array with 4-way interleaving.\n\nReads consecutive elements and deinterleaves them into a single vector."]
2274    fn load_interleaved_128_u8x64(self, src: &[u8; 64usize]) -> u8x64<Self>;
2275    #[doc = "Store elements to an array with 4-way interleaving.\n\nInterleaves the vector elements and writes them consecutively to memory."]
2276    fn store_interleaved_128_u8x64(self, a: u8x64<Self>, dest: &mut [u8; 64usize]) -> ();
2277    #[doc = "Reinterpret the bits of this vector as a vector of `u32` elements.\n\nThe total bit width is preserved; the number of elements changes accordingly."]
2278    fn reinterpret_u32_u8x64(self, a: u8x64<Self>) -> u32x16<Self>;
2279    #[doc = "Create a SIMD vector with all elements set to the given value."]
2280    fn splat_mask8x64(self, val: i8) -> mask8x64<Self>;
2281    #[doc = "Create a SIMD vector from an array of the same length."]
2282    fn load_array_mask8x64(self, val: [i8; 64usize]) -> mask8x64<Self>;
2283    #[doc = "Create a SIMD vector from an array of the same length."]
2284    fn load_array_ref_mask8x64(self, val: &[i8; 64usize]) -> mask8x64<Self>;
2285    #[doc = "Convert a SIMD vector to an array."]
2286    fn as_array_mask8x64(self, a: mask8x64<Self>) -> [i8; 64usize];
2287    #[doc = "Project a reference to a SIMD vector to a reference to the equivalent array."]
2288    fn as_array_ref_mask8x64(self, a: &mask8x64<Self>) -> &[i8; 64usize];
2289    #[doc = "Project a mutable reference to a SIMD vector to a mutable reference to the equivalent array."]
2290    fn as_array_mut_mask8x64(self, a: &mut mask8x64<Self>) -> &mut [i8; 64usize];
2291    #[doc = "Store a SIMD vector into an array of the same length."]
2292    fn store_array_mask8x64(self, a: mask8x64<Self>, dest: &mut [i8; 64usize]) -> ();
2293    #[doc = "Reinterpret a vector of bytes as a SIMD vector of a given type, with the equivalent byte length."]
2294    fn cvt_from_bytes_mask8x64(self, a: u8x64<Self>) -> mask8x64<Self>;
2295    #[doc = "Reinterpret a SIMD vector as a vector of bytes, with the equivalent byte length."]
2296    fn cvt_to_bytes_mask8x64(self, a: mask8x64<Self>) -> u8x64<Self>;
2297    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
2298    fn slide_mask8x64<const SHIFT: usize>(
2299        self,
2300        a: mask8x64<Self>,
2301        b: mask8x64<Self>,
2302    ) -> mask8x64<Self>;
2303    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
2304    fn slide_within_blocks_mask8x64<const SHIFT: usize>(
2305        self,
2306        a: mask8x64<Self>,
2307        b: mask8x64<Self>,
2308    ) -> mask8x64<Self>;
2309    #[doc = "Compute the logical AND of two masks."]
2310    fn and_mask8x64(self, a: mask8x64<Self>, b: mask8x64<Self>) -> mask8x64<Self>;
2311    #[doc = "Compute the logical OR of two masks."]
2312    fn or_mask8x64(self, a: mask8x64<Self>, b: mask8x64<Self>) -> mask8x64<Self>;
2313    #[doc = "Compute the logical XOR of two masks."]
2314    fn xor_mask8x64(self, a: mask8x64<Self>, b: mask8x64<Self>) -> mask8x64<Self>;
2315    #[doc = "Compute the logical NOT of the mask."]
2316    fn not_mask8x64(self, a: mask8x64<Self>) -> mask8x64<Self>;
2317    #[doc = "Select elements from `b` and `c` based on the mask operand `a`.\n\nThis operation's behavior is unspecified if each lane of a is not the all-zeroes or all-ones bit pattern. See the [`Select`] trait's documentation for more information."]
2318    fn select_mask8x64(
2319        self,
2320        a: mask8x64<Self>,
2321        b: mask8x64<Self>,
2322        c: mask8x64<Self>,
2323    ) -> mask8x64<Self>;
2324    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
2325    fn simd_eq_mask8x64(self, a: mask8x64<Self>, b: mask8x64<Self>) -> mask8x64<Self>;
2326    #[doc = "Returns true if any elements in this mask are true (all ones).\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
2327    fn any_true_mask8x64(self, a: mask8x64<Self>) -> bool;
2328    #[doc = "Returns true if all elements in this mask are true (all ones).\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
2329    fn all_true_mask8x64(self, a: mask8x64<Self>) -> bool;
2330    #[doc = "Returns true if any elements in this mask are false (all zeroes).\n\nThis is logically equivalent to `!all_true`, but may be faster.\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
2331    fn any_false_mask8x64(self, a: mask8x64<Self>) -> bool;
2332    #[doc = "Returns true if all elements in this mask are false (all zeroes).\n\nThis is logically equivalent to `!any_true`, but may be faster.\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
2333    fn all_false_mask8x64(self, a: mask8x64<Self>) -> bool;
2334    #[doc = "Split a vector into two vectors of half the width.\n\nReturns a tuple of (lower half, upper half)."]
2335    fn split_mask8x64(self, a: mask8x64<Self>) -> (mask8x32<Self>, mask8x32<Self>);
2336    #[doc = "Create a SIMD vector with all elements set to the given value."]
2337    fn splat_i16x32(self, val: i16) -> i16x32<Self>;
2338    #[doc = "Create a SIMD vector from an array of the same length."]
2339    fn load_array_i16x32(self, val: [i16; 32usize]) -> i16x32<Self>;
2340    #[doc = "Create a SIMD vector from an array of the same length."]
2341    fn load_array_ref_i16x32(self, val: &[i16; 32usize]) -> i16x32<Self>;
2342    #[doc = "Convert a SIMD vector to an array."]
2343    fn as_array_i16x32(self, a: i16x32<Self>) -> [i16; 32usize];
2344    #[doc = "Project a reference to a SIMD vector to a reference to the equivalent array."]
2345    fn as_array_ref_i16x32(self, a: &i16x32<Self>) -> &[i16; 32usize];
2346    #[doc = "Project a mutable reference to a SIMD vector to a mutable reference to the equivalent array."]
2347    fn as_array_mut_i16x32(self, a: &mut i16x32<Self>) -> &mut [i16; 32usize];
2348    #[doc = "Store a SIMD vector into an array of the same length."]
2349    fn store_array_i16x32(self, a: i16x32<Self>, dest: &mut [i16; 32usize]) -> ();
2350    #[doc = "Reinterpret a vector of bytes as a SIMD vector of a given type, with the equivalent byte length."]
2351    fn cvt_from_bytes_i16x32(self, a: u8x64<Self>) -> i16x32<Self>;
2352    #[doc = "Reinterpret a SIMD vector as a vector of bytes, with the equivalent byte length."]
2353    fn cvt_to_bytes_i16x32(self, a: i16x32<Self>) -> u8x64<Self>;
2354    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
2355    fn slide_i16x32<const SHIFT: usize>(self, a: i16x32<Self>, b: i16x32<Self>) -> i16x32<Self>;
2356    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
2357    fn slide_within_blocks_i16x32<const SHIFT: usize>(
2358        self,
2359        a: i16x32<Self>,
2360        b: i16x32<Self>,
2361    ) -> i16x32<Self>;
2362    #[doc = "Add two vectors element-wise, wrapping on overflow."]
2363    fn add_i16x32(self, a: i16x32<Self>, b: i16x32<Self>) -> i16x32<Self>;
2364    #[doc = "Subtract two vectors element-wise, wrapping on overflow."]
2365    fn sub_i16x32(self, a: i16x32<Self>, b: i16x32<Self>) -> i16x32<Self>;
2366    #[doc = "Multiply two vectors element-wise, wrapping on overflow."]
2367    fn mul_i16x32(self, a: i16x32<Self>, b: i16x32<Self>) -> i16x32<Self>;
2368    #[doc = "Compute the bitwise AND of two vectors."]
2369    fn and_i16x32(self, a: i16x32<Self>, b: i16x32<Self>) -> i16x32<Self>;
2370    #[doc = "Compute the bitwise OR of two vectors."]
2371    fn or_i16x32(self, a: i16x32<Self>, b: i16x32<Self>) -> i16x32<Self>;
2372    #[doc = "Compute the bitwise XOR of two vectors."]
2373    fn xor_i16x32(self, a: i16x32<Self>, b: i16x32<Self>) -> i16x32<Self>;
2374    #[doc = "Compute the bitwise NOT of the vector."]
2375    fn not_i16x32(self, a: i16x32<Self>) -> i16x32<Self>;
2376    #[doc = "Shift each element left by the given number of bits.\n\nBits shifted out of the left side are discarded, and zeros are shifted in on the right."]
2377    fn shl_i16x32(self, a: i16x32<Self>, shift: u32) -> i16x32<Self>;
2378    #[doc = "Shift each element left by the given number of bits.\n\nBits shifted out of the left side are discarded, and zeros are shifted in on the right.\n\nThis operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation."]
2379    fn shlv_i16x32(self, a: i16x32<Self>, b: i16x32<Self>) -> i16x32<Self>;
2380    #[doc = "Shift each element right by the given number of bits.\n\nFor unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated."]
2381    fn shr_i16x32(self, a: i16x32<Self>, shift: u32) -> i16x32<Self>;
2382    #[doc = "Shift each element right by the corresponding element in another vector.\n\nFor unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated.\n\nThis operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation."]
2383    fn shrv_i16x32(self, a: i16x32<Self>, b: i16x32<Self>) -> i16x32<Self>;
2384    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
2385    fn simd_eq_i16x32(self, a: i16x32<Self>, b: i16x32<Self>) -> mask16x32<Self>;
2386    #[doc = "Compare two vectors element-wise for less than.\n\nReturns a mask where each element is all ones if `a` is less than `b`, and all zeroes if not."]
2387    fn simd_lt_i16x32(self, a: i16x32<Self>, b: i16x32<Self>) -> mask16x32<Self>;
2388    #[doc = "Compare two vectors element-wise for less than or equal.\n\nReturns a mask where each element is all ones if `a` is less than or equal to `b`, and all zeroes if not."]
2389    fn simd_le_i16x32(self, a: i16x32<Self>, b: i16x32<Self>) -> mask16x32<Self>;
2390    #[doc = "Compare two vectors element-wise for greater than or equal.\n\nReturns a mask where each element is all ones if `a` is greater than or equal to `b`, and all zeroes if not."]
2391    fn simd_ge_i16x32(self, a: i16x32<Self>, b: i16x32<Self>) -> mask16x32<Self>;
2392    #[doc = "Compare two vectors element-wise for greater than.\n\nReturns a mask where each element is all ones if `a` is greater than `b`, and all zeroes if not."]
2393    fn simd_gt_i16x32(self, a: i16x32<Self>, b: i16x32<Self>) -> mask16x32<Self>;
2394    #[doc = "Interleave the lower half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, b0, a1, b1]`.\n\n**Note:** This operation is only useful if you need to discard elements `a2, a3, b2, b3`.\n        For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
2395    fn zip_low_i16x32(self, a: i16x32<Self>, b: i16x32<Self>) -> i16x32<Self>;
2396    #[doc = "Interleave the upper half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a2, b2, a3, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a1, b0, b1`.For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
2397    fn zip_high_i16x32(self, a: i16x32<Self>, b: i16x32<Self>) -> i16x32<Self>;
2398    #[doc = "Extract even-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, a2, b0, b2]`.\n\n**Note:** This operation is only useful if you need to discard elements `a1, a3, b1, b3`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
2399    fn unzip_low_i16x32(self, a: i16x32<Self>, b: i16x32<Self>) -> i16x32<Self>;
2400    #[doc = "Extract odd-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a1, a3, b1, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a2, b0, b2`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
2401    fn unzip_high_i16x32(self, a: i16x32<Self>, b: i16x32<Self>) -> i16x32<Self>;
2402    #[doc = "Interleave two vectors.\n\nThe resulting vectors contain elements taken alternately from `a` and `b`, first filling the first result, and then the second.\n\nThe reverse of this operation is `deinterleave`.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `([a0, b0, a1, b1], [a2, b2, a3, b3])`."]
2403    fn interleave_i16x32(self, a: i16x32<Self>, b: i16x32<Self>) -> (i16x32<Self>, i16x32<Self>);
2404    #[doc = "Deinterleave two vectors.\n\nThe first result contains all even-indexed elements from `a` followed by all even-indexed elements from `b`. The second result contains all odd-indexed elements from `a` followed by all odd-indexed elements from `b`.\n\nThe reverse of this operation is `interleave`.\n\nFor vectors `[a0, b0, a1, b1]` and `[a2, b2, a3, b3]`, returns `([a0, a1, a2, a3], [b0, b1, b2, b3])`."]
2405    fn deinterleave_i16x32(self, a: i16x32<Self>, b: i16x32<Self>) -> (i16x32<Self>, i16x32<Self>);
2406    #[doc = "Select elements from b and c based on the mask operand a.\n\nThis operation's behavior is unspecified if each lane of a is not the all-zeroes or all-ones bit pattern. See the [`Select`] trait's documentation for more information."]
2407    fn select_i16x32(self, a: mask16x32<Self>, b: i16x32<Self>, c: i16x32<Self>) -> i16x32<Self>;
2408    #[doc = "Return the element-wise minimum of two vectors."]
2409    fn min_i16x32(self, a: i16x32<Self>, b: i16x32<Self>) -> i16x32<Self>;
2410    #[doc = "Return the element-wise maximum of two vectors."]
2411    fn max_i16x32(self, a: i16x32<Self>, b: i16x32<Self>) -> i16x32<Self>;
2412    #[doc = "Split a vector into two vectors of half the width.\n\nReturns a tuple of (lower half, upper half)."]
2413    fn split_i16x32(self, a: i16x32<Self>) -> (i16x16<Self>, i16x16<Self>);
2414    #[doc = "Negate each element of the vector, wrapping on overflow."]
2415    fn neg_i16x32(self, a: i16x32<Self>) -> i16x32<Self>;
2416    #[doc = "Reinterpret the bits of this vector as a vector of `u8` elements.\n\nThe total bit width is preserved; the number of elements changes accordingly."]
2417    fn reinterpret_u8_i16x32(self, a: i16x32<Self>) -> u8x64<Self>;
2418    #[doc = "Reinterpret the bits of this vector as a vector of `u32` elements.\n\nThe total bit width is preserved; the number of elements changes accordingly."]
2419    fn reinterpret_u32_i16x32(self, a: i16x32<Self>) -> u32x16<Self>;
2420    #[doc = "Create a SIMD vector with all elements set to the given value."]
2421    fn splat_u16x32(self, val: u16) -> u16x32<Self>;
2422    #[doc = "Create a SIMD vector from an array of the same length."]
2423    fn load_array_u16x32(self, val: [u16; 32usize]) -> u16x32<Self>;
2424    #[doc = "Create a SIMD vector from an array of the same length."]
2425    fn load_array_ref_u16x32(self, val: &[u16; 32usize]) -> u16x32<Self>;
2426    #[doc = "Convert a SIMD vector to an array."]
2427    fn as_array_u16x32(self, a: u16x32<Self>) -> [u16; 32usize];
2428    #[doc = "Project a reference to a SIMD vector to a reference to the equivalent array."]
2429    fn as_array_ref_u16x32(self, a: &u16x32<Self>) -> &[u16; 32usize];
2430    #[doc = "Project a mutable reference to a SIMD vector to a mutable reference to the equivalent array."]
2431    fn as_array_mut_u16x32(self, a: &mut u16x32<Self>) -> &mut [u16; 32usize];
2432    #[doc = "Store a SIMD vector into an array of the same length."]
2433    fn store_array_u16x32(self, a: u16x32<Self>, dest: &mut [u16; 32usize]) -> ();
2434    #[doc = "Reinterpret a vector of bytes as a SIMD vector of a given type, with the equivalent byte length."]
2435    fn cvt_from_bytes_u16x32(self, a: u8x64<Self>) -> u16x32<Self>;
2436    #[doc = "Reinterpret a SIMD vector as a vector of bytes, with the equivalent byte length."]
2437    fn cvt_to_bytes_u16x32(self, a: u16x32<Self>) -> u8x64<Self>;
2438    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
2439    fn slide_u16x32<const SHIFT: usize>(self, a: u16x32<Self>, b: u16x32<Self>) -> u16x32<Self>;
2440    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
2441    fn slide_within_blocks_u16x32<const SHIFT: usize>(
2442        self,
2443        a: u16x32<Self>,
2444        b: u16x32<Self>,
2445    ) -> u16x32<Self>;
2446    #[doc = "Add two vectors element-wise, wrapping on overflow."]
2447    fn add_u16x32(self, a: u16x32<Self>, b: u16x32<Self>) -> u16x32<Self>;
2448    #[doc = "Subtract two vectors element-wise, wrapping on overflow."]
2449    fn sub_u16x32(self, a: u16x32<Self>, b: u16x32<Self>) -> u16x32<Self>;
2450    #[doc = "Multiply two vectors element-wise, wrapping on overflow."]
2451    fn mul_u16x32(self, a: u16x32<Self>, b: u16x32<Self>) -> u16x32<Self>;
2452    #[doc = "Compute the bitwise AND of two vectors."]
2453    fn and_u16x32(self, a: u16x32<Self>, b: u16x32<Self>) -> u16x32<Self>;
2454    #[doc = "Compute the bitwise OR of two vectors."]
2455    fn or_u16x32(self, a: u16x32<Self>, b: u16x32<Self>) -> u16x32<Self>;
2456    #[doc = "Compute the bitwise XOR of two vectors."]
2457    fn xor_u16x32(self, a: u16x32<Self>, b: u16x32<Self>) -> u16x32<Self>;
2458    #[doc = "Compute the bitwise NOT of the vector."]
2459    fn not_u16x32(self, a: u16x32<Self>) -> u16x32<Self>;
2460    #[doc = "Shift each element left by the given number of bits.\n\nBits shifted out of the left side are discarded, and zeros are shifted in on the right."]
2461    fn shl_u16x32(self, a: u16x32<Self>, shift: u32) -> u16x32<Self>;
2462    #[doc = "Shift each element left by the given number of bits.\n\nBits shifted out of the left side are discarded, and zeros are shifted in on the right.\n\nThis operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation."]
2463    fn shlv_u16x32(self, a: u16x32<Self>, b: u16x32<Self>) -> u16x32<Self>;
2464    #[doc = "Shift each element right by the given number of bits.\n\nFor unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated."]
2465    fn shr_u16x32(self, a: u16x32<Self>, shift: u32) -> u16x32<Self>;
2466    #[doc = "Shift each element right by the corresponding element in another vector.\n\nFor unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated.\n\nThis operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation."]
2467    fn shrv_u16x32(self, a: u16x32<Self>, b: u16x32<Self>) -> u16x32<Self>;
2468    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
2469    fn simd_eq_u16x32(self, a: u16x32<Self>, b: u16x32<Self>) -> mask16x32<Self>;
2470    #[doc = "Compare two vectors element-wise for less than.\n\nReturns a mask where each element is all ones if `a` is less than `b`, and all zeroes if not."]
2471    fn simd_lt_u16x32(self, a: u16x32<Self>, b: u16x32<Self>) -> mask16x32<Self>;
2472    #[doc = "Compare two vectors element-wise for less than or equal.\n\nReturns a mask where each element is all ones if `a` is less than or equal to `b`, and all zeroes if not."]
2473    fn simd_le_u16x32(self, a: u16x32<Self>, b: u16x32<Self>) -> mask16x32<Self>;
2474    #[doc = "Compare two vectors element-wise for greater than or equal.\n\nReturns a mask where each element is all ones if `a` is greater than or equal to `b`, and all zeroes if not."]
2475    fn simd_ge_u16x32(self, a: u16x32<Self>, b: u16x32<Self>) -> mask16x32<Self>;
2476    #[doc = "Compare two vectors element-wise for greater than.\n\nReturns a mask where each element is all ones if `a` is greater than `b`, and all zeroes if not."]
2477    fn simd_gt_u16x32(self, a: u16x32<Self>, b: u16x32<Self>) -> mask16x32<Self>;
2478    #[doc = "Interleave the lower half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, b0, a1, b1]`.\n\n**Note:** This operation is only useful if you need to discard elements `a2, a3, b2, b3`.\n        For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
2479    fn zip_low_u16x32(self, a: u16x32<Self>, b: u16x32<Self>) -> u16x32<Self>;
2480    #[doc = "Interleave the upper half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a2, b2, a3, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a1, b0, b1`.For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
2481    fn zip_high_u16x32(self, a: u16x32<Self>, b: u16x32<Self>) -> u16x32<Self>;
2482    #[doc = "Extract even-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, a2, b0, b2]`.\n\n**Note:** This operation is only useful if you need to discard elements `a1, a3, b1, b3`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
2483    fn unzip_low_u16x32(self, a: u16x32<Self>, b: u16x32<Self>) -> u16x32<Self>;
2484    #[doc = "Extract odd-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a1, a3, b1, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a2, b0, b2`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
2485    fn unzip_high_u16x32(self, a: u16x32<Self>, b: u16x32<Self>) -> u16x32<Self>;
2486    #[doc = "Interleave two vectors.\n\nThe resulting vectors contain elements taken alternately from `a` and `b`, first filling the first result, and then the second.\n\nThe reverse of this operation is `deinterleave`.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `([a0, b0, a1, b1], [a2, b2, a3, b3])`."]
2487    fn interleave_u16x32(self, a: u16x32<Self>, b: u16x32<Self>) -> (u16x32<Self>, u16x32<Self>);
2488    #[doc = "Deinterleave two vectors.\n\nThe first result contains all even-indexed elements from `a` followed by all even-indexed elements from `b`. The second result contains all odd-indexed elements from `a` followed by all odd-indexed elements from `b`.\n\nThe reverse of this operation is `interleave`.\n\nFor vectors `[a0, b0, a1, b1]` and `[a2, b2, a3, b3]`, returns `([a0, a1, a2, a3], [b0, b1, b2, b3])`."]
2489    fn deinterleave_u16x32(self, a: u16x32<Self>, b: u16x32<Self>) -> (u16x32<Self>, u16x32<Self>);
2490    #[doc = "Select elements from b and c based on the mask operand a.\n\nThis operation's behavior is unspecified if each lane of a is not the all-zeroes or all-ones bit pattern. See the [`Select`] trait's documentation for more information."]
2491    fn select_u16x32(self, a: mask16x32<Self>, b: u16x32<Self>, c: u16x32<Self>) -> u16x32<Self>;
2492    #[doc = "Return the element-wise minimum of two vectors."]
2493    fn min_u16x32(self, a: u16x32<Self>, b: u16x32<Self>) -> u16x32<Self>;
2494    #[doc = "Return the element-wise maximum of two vectors."]
2495    fn max_u16x32(self, a: u16x32<Self>, b: u16x32<Self>) -> u16x32<Self>;
2496    #[doc = "Split a vector into two vectors of half the width.\n\nReturns a tuple of (lower half, upper half)."]
2497    fn split_u16x32(self, a: u16x32<Self>) -> (u16x16<Self>, u16x16<Self>);
2498    #[doc = "Load elements from an array with 4-way interleaving.\n\nReads consecutive elements and deinterleaves them into a single vector."]
2499    fn load_interleaved_128_u16x32(self, src: &[u16; 32usize]) -> u16x32<Self>;
2500    #[doc = "Store elements to an array with 4-way interleaving.\n\nInterleaves the vector elements and writes them consecutively to memory."]
2501    fn store_interleaved_128_u16x32(self, a: u16x32<Self>, dest: &mut [u16; 32usize]) -> ();
2502    #[doc = "Truncate each element to a narrower integer type.\n\nThe number of elements in the result is twice that of the input."]
2503    fn narrow_u16x32(self, a: u16x32<Self>) -> u8x32<Self>;
2504    #[doc = "Reinterpret the bits of this vector as a vector of `u8` elements.\n\nThe total bit width is preserved; the number of elements changes accordingly."]
2505    fn reinterpret_u8_u16x32(self, a: u16x32<Self>) -> u8x64<Self>;
2506    #[doc = "Reinterpret the bits of this vector as a vector of `u32` elements.\n\nThe total bit width is preserved; the number of elements changes accordingly."]
2507    fn reinterpret_u32_u16x32(self, a: u16x32<Self>) -> u32x16<Self>;
2508    #[doc = "Create a SIMD vector with all elements set to the given value."]
2509    fn splat_mask16x32(self, val: i16) -> mask16x32<Self>;
2510    #[doc = "Create a SIMD vector from an array of the same length."]
2511    fn load_array_mask16x32(self, val: [i16; 32usize]) -> mask16x32<Self>;
2512    #[doc = "Create a SIMD vector from an array of the same length."]
2513    fn load_array_ref_mask16x32(self, val: &[i16; 32usize]) -> mask16x32<Self>;
2514    #[doc = "Convert a SIMD vector to an array."]
2515    fn as_array_mask16x32(self, a: mask16x32<Self>) -> [i16; 32usize];
2516    #[doc = "Project a reference to a SIMD vector to a reference to the equivalent array."]
2517    fn as_array_ref_mask16x32(self, a: &mask16x32<Self>) -> &[i16; 32usize];
2518    #[doc = "Project a mutable reference to a SIMD vector to a mutable reference to the equivalent array."]
2519    fn as_array_mut_mask16x32(self, a: &mut mask16x32<Self>) -> &mut [i16; 32usize];
2520    #[doc = "Store a SIMD vector into an array of the same length."]
2521    fn store_array_mask16x32(self, a: mask16x32<Self>, dest: &mut [i16; 32usize]) -> ();
2522    #[doc = "Reinterpret a vector of bytes as a SIMD vector of a given type, with the equivalent byte length."]
2523    fn cvt_from_bytes_mask16x32(self, a: u8x64<Self>) -> mask16x32<Self>;
2524    #[doc = "Reinterpret a SIMD vector as a vector of bytes, with the equivalent byte length."]
2525    fn cvt_to_bytes_mask16x32(self, a: mask16x32<Self>) -> u8x64<Self>;
2526    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
2527    fn slide_mask16x32<const SHIFT: usize>(
2528        self,
2529        a: mask16x32<Self>,
2530        b: mask16x32<Self>,
2531    ) -> mask16x32<Self>;
2532    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
2533    fn slide_within_blocks_mask16x32<const SHIFT: usize>(
2534        self,
2535        a: mask16x32<Self>,
2536        b: mask16x32<Self>,
2537    ) -> mask16x32<Self>;
2538    #[doc = "Compute the logical AND of two masks."]
2539    fn and_mask16x32(self, a: mask16x32<Self>, b: mask16x32<Self>) -> mask16x32<Self>;
2540    #[doc = "Compute the logical OR of two masks."]
2541    fn or_mask16x32(self, a: mask16x32<Self>, b: mask16x32<Self>) -> mask16x32<Self>;
2542    #[doc = "Compute the logical XOR of two masks."]
2543    fn xor_mask16x32(self, a: mask16x32<Self>, b: mask16x32<Self>) -> mask16x32<Self>;
2544    #[doc = "Compute the logical NOT of the mask."]
2545    fn not_mask16x32(self, a: mask16x32<Self>) -> mask16x32<Self>;
2546    #[doc = "Select elements from `b` and `c` based on the mask operand `a`.\n\nThis operation's behavior is unspecified if each lane of a is not the all-zeroes or all-ones bit pattern. See the [`Select`] trait's documentation for more information."]
2547    fn select_mask16x32(
2548        self,
2549        a: mask16x32<Self>,
2550        b: mask16x32<Self>,
2551        c: mask16x32<Self>,
2552    ) -> mask16x32<Self>;
2553    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
2554    fn simd_eq_mask16x32(self, a: mask16x32<Self>, b: mask16x32<Self>) -> mask16x32<Self>;
2555    #[doc = "Returns true if any elements in this mask are true (all ones).\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
2556    fn any_true_mask16x32(self, a: mask16x32<Self>) -> bool;
2557    #[doc = "Returns true if all elements in this mask are true (all ones).\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
2558    fn all_true_mask16x32(self, a: mask16x32<Self>) -> bool;
2559    #[doc = "Returns true if any elements in this mask are false (all zeroes).\n\nThis is logically equivalent to `!all_true`, but may be faster.\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
2560    fn any_false_mask16x32(self, a: mask16x32<Self>) -> bool;
2561    #[doc = "Returns true if all elements in this mask are false (all zeroes).\n\nThis is logically equivalent to `!any_true`, but may be faster.\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
2562    fn all_false_mask16x32(self, a: mask16x32<Self>) -> bool;
2563    #[doc = "Split a vector into two vectors of half the width.\n\nReturns a tuple of (lower half, upper half)."]
2564    fn split_mask16x32(self, a: mask16x32<Self>) -> (mask16x16<Self>, mask16x16<Self>);
2565    #[doc = "Create a SIMD vector with all elements set to the given value."]
2566    fn splat_i32x16(self, val: i32) -> i32x16<Self>;
2567    #[doc = "Create a SIMD vector from an array of the same length."]
2568    fn load_array_i32x16(self, val: [i32; 16usize]) -> i32x16<Self>;
2569    #[doc = "Create a SIMD vector from an array of the same length."]
2570    fn load_array_ref_i32x16(self, val: &[i32; 16usize]) -> i32x16<Self>;
2571    #[doc = "Convert a SIMD vector to an array."]
2572    fn as_array_i32x16(self, a: i32x16<Self>) -> [i32; 16usize];
2573    #[doc = "Project a reference to a SIMD vector to a reference to the equivalent array."]
2574    fn as_array_ref_i32x16(self, a: &i32x16<Self>) -> &[i32; 16usize];
2575    #[doc = "Project a mutable reference to a SIMD vector to a mutable reference to the equivalent array."]
2576    fn as_array_mut_i32x16(self, a: &mut i32x16<Self>) -> &mut [i32; 16usize];
2577    #[doc = "Store a SIMD vector into an array of the same length."]
2578    fn store_array_i32x16(self, a: i32x16<Self>, dest: &mut [i32; 16usize]) -> ();
2579    #[doc = "Reinterpret a vector of bytes as a SIMD vector of a given type, with the equivalent byte length."]
2580    fn cvt_from_bytes_i32x16(self, a: u8x64<Self>) -> i32x16<Self>;
2581    #[doc = "Reinterpret a SIMD vector as a vector of bytes, with the equivalent byte length."]
2582    fn cvt_to_bytes_i32x16(self, a: i32x16<Self>) -> u8x64<Self>;
2583    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
2584    fn slide_i32x16<const SHIFT: usize>(self, a: i32x16<Self>, b: i32x16<Self>) -> i32x16<Self>;
2585    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
2586    fn slide_within_blocks_i32x16<const SHIFT: usize>(
2587        self,
2588        a: i32x16<Self>,
2589        b: i32x16<Self>,
2590    ) -> i32x16<Self>;
2591    #[doc = "Add two vectors element-wise, wrapping on overflow."]
2592    fn add_i32x16(self, a: i32x16<Self>, b: i32x16<Self>) -> i32x16<Self>;
2593    #[doc = "Subtract two vectors element-wise, wrapping on overflow."]
2594    fn sub_i32x16(self, a: i32x16<Self>, b: i32x16<Self>) -> i32x16<Self>;
2595    #[doc = "Multiply two vectors element-wise, wrapping on overflow."]
2596    fn mul_i32x16(self, a: i32x16<Self>, b: i32x16<Self>) -> i32x16<Self>;
2597    #[doc = "Compute the bitwise AND of two vectors."]
2598    fn and_i32x16(self, a: i32x16<Self>, b: i32x16<Self>) -> i32x16<Self>;
2599    #[doc = "Compute the bitwise OR of two vectors."]
2600    fn or_i32x16(self, a: i32x16<Self>, b: i32x16<Self>) -> i32x16<Self>;
2601    #[doc = "Compute the bitwise XOR of two vectors."]
2602    fn xor_i32x16(self, a: i32x16<Self>, b: i32x16<Self>) -> i32x16<Self>;
2603    #[doc = "Compute the bitwise NOT of the vector."]
2604    fn not_i32x16(self, a: i32x16<Self>) -> i32x16<Self>;
2605    #[doc = "Shift each element left by the given number of bits.\n\nBits shifted out of the left side are discarded, and zeros are shifted in on the right."]
2606    fn shl_i32x16(self, a: i32x16<Self>, shift: u32) -> i32x16<Self>;
2607    #[doc = "Shift each element left by the given number of bits.\n\nBits shifted out of the left side are discarded, and zeros are shifted in on the right.\n\nThis operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation."]
2608    fn shlv_i32x16(self, a: i32x16<Self>, b: i32x16<Self>) -> i32x16<Self>;
2609    #[doc = "Shift each element right by the given number of bits.\n\nFor unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated."]
2610    fn shr_i32x16(self, a: i32x16<Self>, shift: u32) -> i32x16<Self>;
2611    #[doc = "Shift each element right by the corresponding element in another vector.\n\nFor unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated.\n\nThis operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation."]
2612    fn shrv_i32x16(self, a: i32x16<Self>, b: i32x16<Self>) -> i32x16<Self>;
2613    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
2614    fn simd_eq_i32x16(self, a: i32x16<Self>, b: i32x16<Self>) -> mask32x16<Self>;
2615    #[doc = "Compare two vectors element-wise for less than.\n\nReturns a mask where each element is all ones if `a` is less than `b`, and all zeroes if not."]
2616    fn simd_lt_i32x16(self, a: i32x16<Self>, b: i32x16<Self>) -> mask32x16<Self>;
2617    #[doc = "Compare two vectors element-wise for less than or equal.\n\nReturns a mask where each element is all ones if `a` is less than or equal to `b`, and all zeroes if not."]
2618    fn simd_le_i32x16(self, a: i32x16<Self>, b: i32x16<Self>) -> mask32x16<Self>;
2619    #[doc = "Compare two vectors element-wise for greater than or equal.\n\nReturns a mask where each element is all ones if `a` is greater than or equal to `b`, and all zeroes if not."]
2620    fn simd_ge_i32x16(self, a: i32x16<Self>, b: i32x16<Self>) -> mask32x16<Self>;
2621    #[doc = "Compare two vectors element-wise for greater than.\n\nReturns a mask where each element is all ones if `a` is greater than `b`, and all zeroes if not."]
2622    fn simd_gt_i32x16(self, a: i32x16<Self>, b: i32x16<Self>) -> mask32x16<Self>;
2623    #[doc = "Interleave the lower half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, b0, a1, b1]`.\n\n**Note:** This operation is only useful if you need to discard elements `a2, a3, b2, b3`.\n        For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
2624    fn zip_low_i32x16(self, a: i32x16<Self>, b: i32x16<Self>) -> i32x16<Self>;
2625    #[doc = "Interleave the upper half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a2, b2, a3, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a1, b0, b1`.For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
2626    fn zip_high_i32x16(self, a: i32x16<Self>, b: i32x16<Self>) -> i32x16<Self>;
2627    #[doc = "Extract even-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, a2, b0, b2]`.\n\n**Note:** This operation is only useful if you need to discard elements `a1, a3, b1, b3`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
2628    fn unzip_low_i32x16(self, a: i32x16<Self>, b: i32x16<Self>) -> i32x16<Self>;
2629    #[doc = "Extract odd-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a1, a3, b1, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a2, b0, b2`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
2630    fn unzip_high_i32x16(self, a: i32x16<Self>, b: i32x16<Self>) -> i32x16<Self>;
2631    #[doc = "Interleave two vectors.\n\nThe resulting vectors contain elements taken alternately from `a` and `b`, first filling the first result, and then the second.\n\nThe reverse of this operation is `deinterleave`.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `([a0, b0, a1, b1], [a2, b2, a3, b3])`."]
2632    fn interleave_i32x16(self, a: i32x16<Self>, b: i32x16<Self>) -> (i32x16<Self>, i32x16<Self>);
2633    #[doc = "Deinterleave two vectors.\n\nThe first result contains all even-indexed elements from `a` followed by all even-indexed elements from `b`. The second result contains all odd-indexed elements from `a` followed by all odd-indexed elements from `b`.\n\nThe reverse of this operation is `interleave`.\n\nFor vectors `[a0, b0, a1, b1]` and `[a2, b2, a3, b3]`, returns `([a0, a1, a2, a3], [b0, b1, b2, b3])`."]
2634    fn deinterleave_i32x16(self, a: i32x16<Self>, b: i32x16<Self>) -> (i32x16<Self>, i32x16<Self>);
2635    #[doc = "Select elements from b and c based on the mask operand a.\n\nThis operation's behavior is unspecified if each lane of a is not the all-zeroes or all-ones bit pattern. See the [`Select`] trait's documentation for more information."]
2636    fn select_i32x16(self, a: mask32x16<Self>, b: i32x16<Self>, c: i32x16<Self>) -> i32x16<Self>;
2637    #[doc = "Return the element-wise minimum of two vectors."]
2638    fn min_i32x16(self, a: i32x16<Self>, b: i32x16<Self>) -> i32x16<Self>;
2639    #[doc = "Return the element-wise maximum of two vectors."]
2640    fn max_i32x16(self, a: i32x16<Self>, b: i32x16<Self>) -> i32x16<Self>;
2641    #[doc = "Split a vector into two vectors of half the width.\n\nReturns a tuple of (lower half, upper half)."]
2642    fn split_i32x16(self, a: i32x16<Self>) -> (i32x8<Self>, i32x8<Self>);
2643    #[doc = "Negate each element of the vector, wrapping on overflow."]
2644    fn neg_i32x16(self, a: i32x16<Self>) -> i32x16<Self>;
2645    #[doc = "Reinterpret the bits of this vector as a vector of `u8` elements.\n\nThe total bit width is preserved; the number of elements changes accordingly."]
2646    fn reinterpret_u8_i32x16(self, a: i32x16<Self>) -> u8x64<Self>;
2647    #[doc = "Reinterpret the bits of this vector as a vector of `u32` elements.\n\nThe total bit width is preserved; the number of elements changes accordingly."]
2648    fn reinterpret_u32_i32x16(self, a: i32x16<Self>) -> u32x16<Self>;
2649    #[doc = "Convert each signed 32-bit integer element to a floating-point value.\n\nValues that cannot be exactly represented are rounded to the nearest representable value."]
2650    fn cvt_f32_i32x16(self, a: i32x16<Self>) -> f32x16<Self>;
2651    #[doc = "Create a SIMD vector with all elements set to the given value."]
2652    fn splat_u32x16(self, val: u32) -> u32x16<Self>;
2653    #[doc = "Create a SIMD vector from an array of the same length."]
2654    fn load_array_u32x16(self, val: [u32; 16usize]) -> u32x16<Self>;
2655    #[doc = "Create a SIMD vector from an array of the same length."]
2656    fn load_array_ref_u32x16(self, val: &[u32; 16usize]) -> u32x16<Self>;
2657    #[doc = "Convert a SIMD vector to an array."]
2658    fn as_array_u32x16(self, a: u32x16<Self>) -> [u32; 16usize];
2659    #[doc = "Project a reference to a SIMD vector to a reference to the equivalent array."]
2660    fn as_array_ref_u32x16(self, a: &u32x16<Self>) -> &[u32; 16usize];
2661    #[doc = "Project a mutable reference to a SIMD vector to a mutable reference to the equivalent array."]
2662    fn as_array_mut_u32x16(self, a: &mut u32x16<Self>) -> &mut [u32; 16usize];
2663    #[doc = "Store a SIMD vector into an array of the same length."]
2664    fn store_array_u32x16(self, a: u32x16<Self>, dest: &mut [u32; 16usize]) -> ();
2665    #[doc = "Reinterpret a vector of bytes as a SIMD vector of a given type, with the equivalent byte length."]
2666    fn cvt_from_bytes_u32x16(self, a: u8x64<Self>) -> u32x16<Self>;
2667    #[doc = "Reinterpret a SIMD vector as a vector of bytes, with the equivalent byte length."]
2668    fn cvt_to_bytes_u32x16(self, a: u32x16<Self>) -> u8x64<Self>;
2669    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
2670    fn slide_u32x16<const SHIFT: usize>(self, a: u32x16<Self>, b: u32x16<Self>) -> u32x16<Self>;
2671    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
2672    fn slide_within_blocks_u32x16<const SHIFT: usize>(
2673        self,
2674        a: u32x16<Self>,
2675        b: u32x16<Self>,
2676    ) -> u32x16<Self>;
2677    #[doc = "Add two vectors element-wise, wrapping on overflow."]
2678    fn add_u32x16(self, a: u32x16<Self>, b: u32x16<Self>) -> u32x16<Self>;
2679    #[doc = "Subtract two vectors element-wise, wrapping on overflow."]
2680    fn sub_u32x16(self, a: u32x16<Self>, b: u32x16<Self>) -> u32x16<Self>;
2681    #[doc = "Multiply two vectors element-wise, wrapping on overflow."]
2682    fn mul_u32x16(self, a: u32x16<Self>, b: u32x16<Self>) -> u32x16<Self>;
2683    #[doc = "Compute the bitwise AND of two vectors."]
2684    fn and_u32x16(self, a: u32x16<Self>, b: u32x16<Self>) -> u32x16<Self>;
2685    #[doc = "Compute the bitwise OR of two vectors."]
2686    fn or_u32x16(self, a: u32x16<Self>, b: u32x16<Self>) -> u32x16<Self>;
2687    #[doc = "Compute the bitwise XOR of two vectors."]
2688    fn xor_u32x16(self, a: u32x16<Self>, b: u32x16<Self>) -> u32x16<Self>;
2689    #[doc = "Compute the bitwise NOT of the vector."]
2690    fn not_u32x16(self, a: u32x16<Self>) -> u32x16<Self>;
2691    #[doc = "Shift each element left by the given number of bits.\n\nBits shifted out of the left side are discarded, and zeros are shifted in on the right."]
2692    fn shl_u32x16(self, a: u32x16<Self>, shift: u32) -> u32x16<Self>;
2693    #[doc = "Shift each element left by the given number of bits.\n\nBits shifted out of the left side are discarded, and zeros are shifted in on the right.\n\nThis operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation."]
2694    fn shlv_u32x16(self, a: u32x16<Self>, b: u32x16<Self>) -> u32x16<Self>;
2695    #[doc = "Shift each element right by the given number of bits.\n\nFor unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated."]
2696    fn shr_u32x16(self, a: u32x16<Self>, shift: u32) -> u32x16<Self>;
2697    #[doc = "Shift each element right by the corresponding element in another vector.\n\nFor unsigned integers, zeros are shifted in on the left. For signed integers, the sign bit is replicated.\n\nThis operation is not implemented in hardware on all platforms. On WebAssembly, and on x86 platforms without AVX2, this will use a fallback scalar implementation."]
2698    fn shrv_u32x16(self, a: u32x16<Self>, b: u32x16<Self>) -> u32x16<Self>;
2699    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
2700    fn simd_eq_u32x16(self, a: u32x16<Self>, b: u32x16<Self>) -> mask32x16<Self>;
2701    #[doc = "Compare two vectors element-wise for less than.\n\nReturns a mask where each element is all ones if `a` is less than `b`, and all zeroes if not."]
2702    fn simd_lt_u32x16(self, a: u32x16<Self>, b: u32x16<Self>) -> mask32x16<Self>;
2703    #[doc = "Compare two vectors element-wise for less than or equal.\n\nReturns a mask where each element is all ones if `a` is less than or equal to `b`, and all zeroes if not."]
2704    fn simd_le_u32x16(self, a: u32x16<Self>, b: u32x16<Self>) -> mask32x16<Self>;
2705    #[doc = "Compare two vectors element-wise for greater than or equal.\n\nReturns a mask where each element is all ones if `a` is greater than or equal to `b`, and all zeroes if not."]
2706    fn simd_ge_u32x16(self, a: u32x16<Self>, b: u32x16<Self>) -> mask32x16<Self>;
2707    #[doc = "Compare two vectors element-wise for greater than.\n\nReturns a mask where each element is all ones if `a` is greater than `b`, and all zeroes if not."]
2708    fn simd_gt_u32x16(self, a: u32x16<Self>, b: u32x16<Self>) -> mask32x16<Self>;
2709    #[doc = "Interleave the lower half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, b0, a1, b1]`.\n\n**Note:** This operation is only useful if you need to discard elements `a2, a3, b2, b3`.\n        For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
2710    fn zip_low_u32x16(self, a: u32x16<Self>, b: u32x16<Self>) -> u32x16<Self>;
2711    #[doc = "Interleave the upper half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a2, b2, a3, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a1, b0, b1`.For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
2712    fn zip_high_u32x16(self, a: u32x16<Self>, b: u32x16<Self>) -> u32x16<Self>;
2713    #[doc = "Extract even-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, a2, b0, b2]`.\n\n**Note:** This operation is only useful if you need to discard elements `a1, a3, b1, b3`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
2714    fn unzip_low_u32x16(self, a: u32x16<Self>, b: u32x16<Self>) -> u32x16<Self>;
2715    #[doc = "Extract odd-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a1, a3, b1, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a2, b0, b2`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
2716    fn unzip_high_u32x16(self, a: u32x16<Self>, b: u32x16<Self>) -> u32x16<Self>;
2717    #[doc = "Interleave two vectors.\n\nThe resulting vectors contain elements taken alternately from `a` and `b`, first filling the first result, and then the second.\n\nThe reverse of this operation is `deinterleave`.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `([a0, b0, a1, b1], [a2, b2, a3, b3])`."]
2718    fn interleave_u32x16(self, a: u32x16<Self>, b: u32x16<Self>) -> (u32x16<Self>, u32x16<Self>);
2719    #[doc = "Deinterleave two vectors.\n\nThe first result contains all even-indexed elements from `a` followed by all even-indexed elements from `b`. The second result contains all odd-indexed elements from `a` followed by all odd-indexed elements from `b`.\n\nThe reverse of this operation is `interleave`.\n\nFor vectors `[a0, b0, a1, b1]` and `[a2, b2, a3, b3]`, returns `([a0, a1, a2, a3], [b0, b1, b2, b3])`."]
2720    fn deinterleave_u32x16(self, a: u32x16<Self>, b: u32x16<Self>) -> (u32x16<Self>, u32x16<Self>);
2721    #[doc = "Select elements from b and c based on the mask operand a.\n\nThis operation's behavior is unspecified if each lane of a is not the all-zeroes or all-ones bit pattern. See the [`Select`] trait's documentation for more information."]
2722    fn select_u32x16(self, a: mask32x16<Self>, b: u32x16<Self>, c: u32x16<Self>) -> u32x16<Self>;
2723    #[doc = "Return the element-wise minimum of two vectors."]
2724    fn min_u32x16(self, a: u32x16<Self>, b: u32x16<Self>) -> u32x16<Self>;
2725    #[doc = "Return the element-wise maximum of two vectors."]
2726    fn max_u32x16(self, a: u32x16<Self>, b: u32x16<Self>) -> u32x16<Self>;
2727    #[doc = "Split a vector into two vectors of half the width.\n\nReturns a tuple of (lower half, upper half)."]
2728    fn split_u32x16(self, a: u32x16<Self>) -> (u32x8<Self>, u32x8<Self>);
2729    #[doc = "Load elements from an array with 4-way interleaving.\n\nReads consecutive elements and deinterleaves them into a single vector."]
2730    fn load_interleaved_128_u32x16(self, src: &[u32; 16usize]) -> u32x16<Self>;
2731    #[doc = "Store elements to an array with 4-way interleaving.\n\nInterleaves the vector elements and writes them consecutively to memory."]
2732    fn store_interleaved_128_u32x16(self, a: u32x16<Self>, dest: &mut [u32; 16usize]) -> ();
2733    #[doc = "Reinterpret the bits of this vector as a vector of `u8` elements.\n\nThe total bit width is preserved; the number of elements changes accordingly."]
2734    fn reinterpret_u8_u32x16(self, a: u32x16<Self>) -> u8x64<Self>;
2735    #[doc = "Convert each unsigned 32-bit integer element to a floating-point value.\n\nValues that cannot be exactly represented are rounded to the nearest representable value."]
2736    fn cvt_f32_u32x16(self, a: u32x16<Self>) -> f32x16<Self>;
2737    #[doc = "Create a SIMD vector with all elements set to the given value."]
2738    fn splat_mask32x16(self, val: i32) -> mask32x16<Self>;
2739    #[doc = "Create a SIMD vector from an array of the same length."]
2740    fn load_array_mask32x16(self, val: [i32; 16usize]) -> mask32x16<Self>;
2741    #[doc = "Create a SIMD vector from an array of the same length."]
2742    fn load_array_ref_mask32x16(self, val: &[i32; 16usize]) -> mask32x16<Self>;
2743    #[doc = "Convert a SIMD vector to an array."]
2744    fn as_array_mask32x16(self, a: mask32x16<Self>) -> [i32; 16usize];
2745    #[doc = "Project a reference to a SIMD vector to a reference to the equivalent array."]
2746    fn as_array_ref_mask32x16(self, a: &mask32x16<Self>) -> &[i32; 16usize];
2747    #[doc = "Project a mutable reference to a SIMD vector to a mutable reference to the equivalent array."]
2748    fn as_array_mut_mask32x16(self, a: &mut mask32x16<Self>) -> &mut [i32; 16usize];
2749    #[doc = "Store a SIMD vector into an array of the same length."]
2750    fn store_array_mask32x16(self, a: mask32x16<Self>, dest: &mut [i32; 16usize]) -> ();
2751    #[doc = "Reinterpret a vector of bytes as a SIMD vector of a given type, with the equivalent byte length."]
2752    fn cvt_from_bytes_mask32x16(self, a: u8x64<Self>) -> mask32x16<Self>;
2753    #[doc = "Reinterpret a SIMD vector as a vector of bytes, with the equivalent byte length."]
2754    fn cvt_to_bytes_mask32x16(self, a: mask32x16<Self>) -> u8x64<Self>;
2755    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
2756    fn slide_mask32x16<const SHIFT: usize>(
2757        self,
2758        a: mask32x16<Self>,
2759        b: mask32x16<Self>,
2760    ) -> mask32x16<Self>;
2761    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
2762    fn slide_within_blocks_mask32x16<const SHIFT: usize>(
2763        self,
2764        a: mask32x16<Self>,
2765        b: mask32x16<Self>,
2766    ) -> mask32x16<Self>;
2767    #[doc = "Compute the logical AND of two masks."]
2768    fn and_mask32x16(self, a: mask32x16<Self>, b: mask32x16<Self>) -> mask32x16<Self>;
2769    #[doc = "Compute the logical OR of two masks."]
2770    fn or_mask32x16(self, a: mask32x16<Self>, b: mask32x16<Self>) -> mask32x16<Self>;
2771    #[doc = "Compute the logical XOR of two masks."]
2772    fn xor_mask32x16(self, a: mask32x16<Self>, b: mask32x16<Self>) -> mask32x16<Self>;
2773    #[doc = "Compute the logical NOT of the mask."]
2774    fn not_mask32x16(self, a: mask32x16<Self>) -> mask32x16<Self>;
2775    #[doc = "Select elements from `b` and `c` based on the mask operand `a`.\n\nThis operation's behavior is unspecified if each lane of a is not the all-zeroes or all-ones bit pattern. See the [`Select`] trait's documentation for more information."]
2776    fn select_mask32x16(
2777        self,
2778        a: mask32x16<Self>,
2779        b: mask32x16<Self>,
2780        c: mask32x16<Self>,
2781    ) -> mask32x16<Self>;
2782    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
2783    fn simd_eq_mask32x16(self, a: mask32x16<Self>, b: mask32x16<Self>) -> mask32x16<Self>;
2784    #[doc = "Returns true if any elements in this mask are true (all ones).\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
2785    fn any_true_mask32x16(self, a: mask32x16<Self>) -> bool;
2786    #[doc = "Returns true if all elements in this mask are true (all ones).\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
2787    fn all_true_mask32x16(self, a: mask32x16<Self>) -> bool;
2788    #[doc = "Returns true if any elements in this mask are false (all zeroes).\n\nThis is logically equivalent to `!all_true`, but may be faster.\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
2789    fn any_false_mask32x16(self, a: mask32x16<Self>) -> bool;
2790    #[doc = "Returns true if all elements in this mask are false (all zeroes).\n\nThis is logically equivalent to `!any_true`, but may be faster.\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
2791    fn all_false_mask32x16(self, a: mask32x16<Self>) -> bool;
2792    #[doc = "Split a vector into two vectors of half the width.\n\nReturns a tuple of (lower half, upper half)."]
2793    fn split_mask32x16(self, a: mask32x16<Self>) -> (mask32x8<Self>, mask32x8<Self>);
2794    #[doc = "Create a SIMD vector with all elements set to the given value."]
2795    fn splat_f64x8(self, val: f64) -> f64x8<Self>;
2796    #[doc = "Create a SIMD vector from an array of the same length."]
2797    fn load_array_f64x8(self, val: [f64; 8usize]) -> f64x8<Self>;
2798    #[doc = "Create a SIMD vector from an array of the same length."]
2799    fn load_array_ref_f64x8(self, val: &[f64; 8usize]) -> f64x8<Self>;
2800    #[doc = "Convert a SIMD vector to an array."]
2801    fn as_array_f64x8(self, a: f64x8<Self>) -> [f64; 8usize];
2802    #[doc = "Project a reference to a SIMD vector to a reference to the equivalent array."]
2803    fn as_array_ref_f64x8(self, a: &f64x8<Self>) -> &[f64; 8usize];
2804    #[doc = "Project a mutable reference to a SIMD vector to a mutable reference to the equivalent array."]
2805    fn as_array_mut_f64x8(self, a: &mut f64x8<Self>) -> &mut [f64; 8usize];
2806    #[doc = "Store a SIMD vector into an array of the same length."]
2807    fn store_array_f64x8(self, a: f64x8<Self>, dest: &mut [f64; 8usize]) -> ();
2808    #[doc = "Reinterpret a vector of bytes as a SIMD vector of a given type, with the equivalent byte length."]
2809    fn cvt_from_bytes_f64x8(self, a: u8x64<Self>) -> f64x8<Self>;
2810    #[doc = "Reinterpret a SIMD vector as a vector of bytes, with the equivalent byte length."]
2811    fn cvt_to_bytes_f64x8(self, a: f64x8<Self>) -> u8x64<Self>;
2812    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
2813    fn slide_f64x8<const SHIFT: usize>(self, a: f64x8<Self>, b: f64x8<Self>) -> f64x8<Self>;
2814    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
2815    fn slide_within_blocks_f64x8<const SHIFT: usize>(
2816        self,
2817        a: f64x8<Self>,
2818        b: f64x8<Self>,
2819    ) -> f64x8<Self>;
2820    #[doc = "Compute the absolute value of each element."]
2821    fn abs_f64x8(self, a: f64x8<Self>) -> f64x8<Self>;
2822    #[doc = "Negate each element of the vector."]
2823    fn neg_f64x8(self, a: f64x8<Self>) -> f64x8<Self>;
2824    #[doc = "Compute the square root of each element.\n\nNegative elements other than `-0.0` will become NaN."]
2825    fn sqrt_f64x8(self, a: f64x8<Self>) -> f64x8<Self>;
2826    #[doc = "Add two vectors element-wise."]
2827    fn add_f64x8(self, a: f64x8<Self>, b: f64x8<Self>) -> f64x8<Self>;
2828    #[doc = "Subtract two vectors element-wise."]
2829    fn sub_f64x8(self, a: f64x8<Self>, b: f64x8<Self>) -> f64x8<Self>;
2830    #[doc = "Multiply two vectors element-wise."]
2831    fn mul_f64x8(self, a: f64x8<Self>, b: f64x8<Self>) -> f64x8<Self>;
2832    #[doc = "Divide two vectors element-wise."]
2833    fn div_f64x8(self, a: f64x8<Self>, b: f64x8<Self>) -> f64x8<Self>;
2834    #[doc = "Return a vector with the magnitude of `a` and the sign of `b` for each element.\n\nThis operation copies the sign bit, so if an input element is NaN, the output element will be a NaN with the same payload and a copied sign bit."]
2835    fn copysign_f64x8(self, a: f64x8<Self>, b: f64x8<Self>) -> f64x8<Self>;
2836    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
2837    fn simd_eq_f64x8(self, a: f64x8<Self>, b: f64x8<Self>) -> mask64x8<Self>;
2838    #[doc = "Compare two vectors element-wise for less than.\n\nReturns a mask where each element is all ones if `a` is less than `b`, and all zeroes if not."]
2839    fn simd_lt_f64x8(self, a: f64x8<Self>, b: f64x8<Self>) -> mask64x8<Self>;
2840    #[doc = "Compare two vectors element-wise for less than or equal.\n\nReturns a mask where each element is all ones if `a` is less than or equal to `b`, and all zeroes if not."]
2841    fn simd_le_f64x8(self, a: f64x8<Self>, b: f64x8<Self>) -> mask64x8<Self>;
2842    #[doc = "Compare two vectors element-wise for greater than or equal.\n\nReturns a mask where each element is all ones if `a` is greater than or equal to `b`, and all zeroes if not."]
2843    fn simd_ge_f64x8(self, a: f64x8<Self>, b: f64x8<Self>) -> mask64x8<Self>;
2844    #[doc = "Compare two vectors element-wise for greater than.\n\nReturns a mask where each element is all ones if `a` is greater than `b`, and all zeroes if not."]
2845    fn simd_gt_f64x8(self, a: f64x8<Self>, b: f64x8<Self>) -> mask64x8<Self>;
2846    #[doc = "Interleave the lower half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, b0, a1, b1]`.\n\n**Note:** This operation is only useful if you need to discard elements `a2, a3, b2, b3`.\n        For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
2847    fn zip_low_f64x8(self, a: f64x8<Self>, b: f64x8<Self>) -> f64x8<Self>;
2848    #[doc = "Interleave the upper half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a2, b2, a3, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a1, b0, b1`.For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
2849    fn zip_high_f64x8(self, a: f64x8<Self>, b: f64x8<Self>) -> f64x8<Self>;
2850    #[doc = "Extract even-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, a2, b0, b2]`.\n\n**Note:** This operation is only useful if you need to discard elements `a1, a3, b1, b3`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
2851    fn unzip_low_f64x8(self, a: f64x8<Self>, b: f64x8<Self>) -> f64x8<Self>;
2852    #[doc = "Extract odd-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a1, a3, b1, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a2, b0, b2`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
2853    fn unzip_high_f64x8(self, a: f64x8<Self>, b: f64x8<Self>) -> f64x8<Self>;
2854    #[doc = "Interleave two vectors.\n\nThe resulting vectors contain elements taken alternately from `a` and `b`, first filling the first result, and then the second.\n\nThe reverse of this operation is `deinterleave`.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `([a0, b0, a1, b1], [a2, b2, a3, b3])`."]
2855    fn interleave_f64x8(self, a: f64x8<Self>, b: f64x8<Self>) -> (f64x8<Self>, f64x8<Self>);
2856    #[doc = "Deinterleave two vectors.\n\nThe first result contains all even-indexed elements from `a` followed by all even-indexed elements from `b`. The second result contains all odd-indexed elements from `a` followed by all odd-indexed elements from `b`.\n\nThe reverse of this operation is `interleave`.\n\nFor vectors `[a0, b0, a1, b1]` and `[a2, b2, a3, b3]`, returns `([a0, a1, a2, a3], [b0, b1, b2, b3])`."]
2857    fn deinterleave_f64x8(self, a: f64x8<Self>, b: f64x8<Self>) -> (f64x8<Self>, f64x8<Self>);
2858    #[doc = "Return the element-wise maximum of two vectors.\n\nIf either operand is NaN, the result for that lane is implementation-defined-- it could be either the first or second operand. See `max_precise` for a version that returns the non-NaN operand if only one is NaN.\n\nIf one operand is positive zero and the other is negative zero, the result is also implementation-defined, and it could be either one."]
2859    fn max_f64x8(self, a: f64x8<Self>, b: f64x8<Self>) -> f64x8<Self>;
2860    #[doc = "Return the element-wise minimum of two vectors.\n\nIf either operand is NaN, the result for that lane is implementation-defined-- it could be either the first or second operand. See `min_precise` for a version that returns the non-NaN operand if only one is NaN.\n\nIf one operand is positive zero and the other is negative zero, the result is also implementation-defined, and it could be either one."]
2861    fn min_f64x8(self, a: f64x8<Self>, b: f64x8<Self>) -> f64x8<Self>;
2862    #[doc = "Return the element-wise maximum of two vectors.\n\nIf one operand is a quiet NaN and the other is not, this operation will choose the non-NaN operand.\n\nIf one operand is positive zero and the other is negative zero, the result is implementation-defined, and it could be either one.\n\nIf an operand is a *signaling* NaN, the result is not just implementation-defined, but fully non-deterministic: it may be either NaN or the non-NaN operand.\nSignaling NaN values are not produced by floating-point math operations, only from manual initialization with specific bit patterns. You probably don't need to worry about them."]
2863    fn max_precise_f64x8(self, a: f64x8<Self>, b: f64x8<Self>) -> f64x8<Self>;
2864    #[doc = "Return the element-wise minimum of two vectors.\n\nIf one operand is a quiet NaN and the other is not, this operation will choose the non-NaN operand.\n\nIf one operand is positive zero and the other is negative zero, the result is implementation-defined, and it could be either one.\n\nIf an operand is a *signaling* NaN, the result is not just implementation-defined, but fully non-deterministic: it may be either NaN or the non-NaN operand.\nSignaling NaN values are not produced by floating-point math operations, only from manual initialization with specific bit patterns. You probably don't need to worry about them."]
2865    fn min_precise_f64x8(self, a: f64x8<Self>, b: f64x8<Self>) -> f64x8<Self>;
2866    #[doc = "Compute `(a * b) + c` (fused multiply-add) for each element.\n\nDepending on hardware support, the result may be computed with only one rounding error, or may be implemented as a regular multiply followed by an add, which will result in two rounding errors."]
2867    fn mul_add_f64x8(self, a: f64x8<Self>, b: f64x8<Self>, c: f64x8<Self>) -> f64x8<Self>;
2868    #[doc = "Compute `(a * b) - c` (fused multiply-subtract) for each element.\n\nDepending on hardware support, the result may be computed with only one rounding error, or may be implemented as a regular multiply followed by a subtract, which will result in two rounding errors."]
2869    fn mul_sub_f64x8(self, a: f64x8<Self>, b: f64x8<Self>, c: f64x8<Self>) -> f64x8<Self>;
2870    #[doc = "Return the largest integer less than or equal to each element, that is, round towards negative infinity."]
2871    fn floor_f64x8(self, a: f64x8<Self>) -> f64x8<Self>;
2872    #[doc = "Return the smallest integer greater than or equal to each element, that is, round towards positive infinity."]
2873    fn ceil_f64x8(self, a: f64x8<Self>) -> f64x8<Self>;
2874    #[doc = "Round each element to the nearest integer, with ties rounding to the nearest even integer.\n\nThere is no corresponding `round` operation. Rust's `round` operation rounds ties away from zero, a behavior it inherited from C. That behavior is not implemented across all platforms, whereas round-ties-even is."]
2875    fn round_ties_even_f64x8(self, a: f64x8<Self>) -> f64x8<Self>;
2876    #[doc = "Return the fractional part of each element.\n\nThis is equivalent to `a - a.trunc()`."]
2877    fn fract_f64x8(self, a: f64x8<Self>) -> f64x8<Self>;
2878    #[doc = "Return the integer part of each element, rounding towards zero."]
2879    fn trunc_f64x8(self, a: f64x8<Self>) -> f64x8<Self>;
2880    #[doc = "Select elements from b and c based on the mask operand a.\n\nThis operation's behavior is unspecified if each lane of a is not the all-zeroes or all-ones bit pattern. See the [`Select`] trait's documentation for more information."]
2881    fn select_f64x8(self, a: mask64x8<Self>, b: f64x8<Self>, c: f64x8<Self>) -> f64x8<Self>;
2882    #[doc = "Split a vector into two vectors of half the width.\n\nReturns a tuple of (lower half, upper half)."]
2883    fn split_f64x8(self, a: f64x8<Self>) -> (f64x4<Self>, f64x4<Self>);
2884    #[doc = "Reinterpret the bits of this vector as a vector of `f32` elements.\n\nThe number of elements in the result is twice that of the input."]
2885    fn reinterpret_f32_f64x8(self, a: f64x8<Self>) -> f32x16<Self>;
2886    #[doc = "Create a SIMD vector with all elements set to the given value."]
2887    fn splat_mask64x8(self, val: i64) -> mask64x8<Self>;
2888    #[doc = "Create a SIMD vector from an array of the same length."]
2889    fn load_array_mask64x8(self, val: [i64; 8usize]) -> mask64x8<Self>;
2890    #[doc = "Create a SIMD vector from an array of the same length."]
2891    fn load_array_ref_mask64x8(self, val: &[i64; 8usize]) -> mask64x8<Self>;
2892    #[doc = "Convert a SIMD vector to an array."]
2893    fn as_array_mask64x8(self, a: mask64x8<Self>) -> [i64; 8usize];
2894    #[doc = "Project a reference to a SIMD vector to a reference to the equivalent array."]
2895    fn as_array_ref_mask64x8(self, a: &mask64x8<Self>) -> &[i64; 8usize];
2896    #[doc = "Project a mutable reference to a SIMD vector to a mutable reference to the equivalent array."]
2897    fn as_array_mut_mask64x8(self, a: &mut mask64x8<Self>) -> &mut [i64; 8usize];
2898    #[doc = "Store a SIMD vector into an array of the same length."]
2899    fn store_array_mask64x8(self, a: mask64x8<Self>, dest: &mut [i64; 8usize]) -> ();
2900    #[doc = "Reinterpret a vector of bytes as a SIMD vector of a given type, with the equivalent byte length."]
2901    fn cvt_from_bytes_mask64x8(self, a: u8x64<Self>) -> mask64x8<Self>;
2902    #[doc = "Reinterpret a SIMD vector as a vector of bytes, with the equivalent byte length."]
2903    fn cvt_to_bytes_mask64x8(self, a: mask64x8<Self>) -> u8x64<Self>;
2904    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
2905    fn slide_mask64x8<const SHIFT: usize>(
2906        self,
2907        a: mask64x8<Self>,
2908        b: mask64x8<Self>,
2909    ) -> mask64x8<Self>;
2910    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
2911    fn slide_within_blocks_mask64x8<const SHIFT: usize>(
2912        self,
2913        a: mask64x8<Self>,
2914        b: mask64x8<Self>,
2915    ) -> mask64x8<Self>;
2916    #[doc = "Compute the logical AND of two masks."]
2917    fn and_mask64x8(self, a: mask64x8<Self>, b: mask64x8<Self>) -> mask64x8<Self>;
2918    #[doc = "Compute the logical OR of two masks."]
2919    fn or_mask64x8(self, a: mask64x8<Self>, b: mask64x8<Self>) -> mask64x8<Self>;
2920    #[doc = "Compute the logical XOR of two masks."]
2921    fn xor_mask64x8(self, a: mask64x8<Self>, b: mask64x8<Self>) -> mask64x8<Self>;
2922    #[doc = "Compute the logical NOT of the mask."]
2923    fn not_mask64x8(self, a: mask64x8<Self>) -> mask64x8<Self>;
2924    #[doc = "Select elements from `b` and `c` based on the mask operand `a`.\n\nThis operation's behavior is unspecified if each lane of a is not the all-zeroes or all-ones bit pattern. See the [`Select`] trait's documentation for more information."]
2925    fn select_mask64x8(
2926        self,
2927        a: mask64x8<Self>,
2928        b: mask64x8<Self>,
2929        c: mask64x8<Self>,
2930    ) -> mask64x8<Self>;
2931    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
2932    fn simd_eq_mask64x8(self, a: mask64x8<Self>, b: mask64x8<Self>) -> mask64x8<Self>;
2933    #[doc = "Returns true if any elements in this mask are true (all ones).\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
2934    fn any_true_mask64x8(self, a: mask64x8<Self>) -> bool;
2935    #[doc = "Returns true if all elements in this mask are true (all ones).\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
2936    fn all_true_mask64x8(self, a: mask64x8<Self>) -> bool;
2937    #[doc = "Returns true if any elements in this mask are false (all zeroes).\n\nThis is logically equivalent to `!all_true`, but may be faster.\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
2938    fn any_false_mask64x8(self, a: mask64x8<Self>) -> bool;
2939    #[doc = "Returns true if all elements in this mask are false (all zeroes).\n\nThis is logically equivalent to `!any_true`, but may be faster.\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
2940    fn all_false_mask64x8(self, a: mask64x8<Self>) -> bool;
2941    #[doc = "Split a vector into two vectors of half the width.\n\nReturns a tuple of (lower half, upper half)."]
2942    fn split_mask64x8(self, a: mask64x8<Self>) -> (mask64x4<Self>, mask64x4<Self>);
2943}
2944pub(crate) mod arch_types {
2945    #[expect(
2946        unnameable_types,
2947        reason = "The native vector types that back a `Simd` implementation are an internal implementation detail, and intentionally kept private"
2948    )]
2949    pub trait ArchTypes {
2950        type f32x4: Copy + Send + Sync;
2951        type i8x16: Copy + Send + Sync;
2952        type u8x16: Copy + Send + Sync;
2953        type mask8x16: Copy + Send + Sync;
2954        type i16x8: Copy + Send + Sync;
2955        type u16x8: Copy + Send + Sync;
2956        type mask16x8: Copy + Send + Sync;
2957        type i32x4: Copy + Send + Sync;
2958        type u32x4: Copy + Send + Sync;
2959        type mask32x4: Copy + Send + Sync;
2960        type f64x2: Copy + Send + Sync;
2961        type mask64x2: Copy + Send + Sync;
2962        type f32x8: Copy + Send + Sync;
2963        type i8x32: Copy + Send + Sync;
2964        type u8x32: Copy + Send + Sync;
2965        type mask8x32: Copy + Send + Sync;
2966        type i16x16: Copy + Send + Sync;
2967        type u16x16: Copy + Send + Sync;
2968        type mask16x16: Copy + Send + Sync;
2969        type i32x8: Copy + Send + Sync;
2970        type u32x8: Copy + Send + Sync;
2971        type mask32x8: Copy + Send + Sync;
2972        type f64x4: Copy + Send + Sync;
2973        type mask64x4: Copy + Send + Sync;
2974        type f32x16: Copy + Send + Sync;
2975        type i8x64: Copy + Send + Sync;
2976        type u8x64: Copy + Send + Sync;
2977        type mask8x64: Copy + Send + Sync;
2978        type i16x32: Copy + Send + Sync;
2979        type u16x32: Copy + Send + Sync;
2980        type mask16x32: Copy + Send + Sync;
2981        type i32x16: Copy + Send + Sync;
2982        type u32x16: Copy + Send + Sync;
2983        type mask32x16: Copy + Send + Sync;
2984        type f64x8: Copy + Send + Sync;
2985        type mask64x8: Copy + Send + Sync;
2986    }
2987}
2988#[doc = r" Base functionality implemented by all SIMD vectors."]
2989pub trait SimdBase<S: Simd>:
2990    Copy
2991    + Sync
2992    + Send
2993    + 'static
2994    + Bytes
2995    + SimdFrom<Self::Element, S>
2996    + core::ops::Index<usize, Output = Self::Element>
2997    + core::ops::IndexMut<usize, Output = Self::Element>
2998    + core::ops::Deref<Target = Self::Array>
2999    + core::ops::DerefMut<Target = Self::Array>
3000{
3001    #[doc = r" The type of this vector's elements."]
3002    type Element: SimdElement;
3003    #[doc = r" This vector type's lane count. This is useful when you're"]
3004    #[doc = r" working with a native-width vector (e.g. [`Simd::f32s`]) and"]
3005    #[doc = r" want to process data in native-width chunks."]
3006    const N: usize;
3007    #[doc = r" A SIMD vector mask with the same number of elements."]
3008    #[doc = r""]
3009    #[doc = r" The mask element is represented as an integer which is"]
3010    #[doc = r" all-0 for `false` and all-1 for `true`. When we get deep"]
3011    #[doc = r" into AVX-512, we need to think about predication masks."]
3012    #[doc = r""]
3013    #[doc = r" One possibility to consider is that the SIMD trait grows"]
3014    #[doc = r" `maskAxB` associated types."]
3015    type Mask: SimdMask<S, Element = <Self::Element as SimdElement>::Mask>;
3016    #[doc = r" A 128-bit SIMD vector of the same scalar type."]
3017    type Block: SimdBase<S, Element = Self::Element>;
3018    #[doc = r" The array type that this vector type corresponds to, which will"]
3019    #[doc = r" always be `[Self::Element; Self::N]`. It has the same layout as"]
3020    #[doc = r" this vector type, but likely has a lower alignment."]
3021    type Array;
3022    #[doc = r" Get the [`Simd`] implementation associated with this type."]
3023    fn witness(&self) -> S;
3024    fn as_slice(&self) -> &[Self::Element];
3025    fn as_mut_slice(&mut self) -> &mut [Self::Element];
3026    #[doc = r" Create a SIMD vector from a slice."]
3027    #[doc = r""]
3028    #[doc = r" The slice must be exactly the size of the SIMD vector."]
3029    fn from_slice(simd: S, slice: &[Self::Element]) -> Self;
3030    #[doc = r" Store a SIMD vector into a slice."]
3031    #[doc = r""]
3032    #[doc = r" The slice must be exactly the size of the SIMD vector."]
3033    fn store_slice(&self, slice: &mut [Self::Element]);
3034    #[doc = r" Create a SIMD vector from a 128-bit vector of the same scalar"]
3035    #[doc = r" type, repeated."]
3036    fn block_splat(block: Self::Block) -> Self;
3037    #[doc = r" Create a SIMD vector where each element is produced by"]
3038    #[doc = r" calling `f` with that element's lane index (from 0 to"]
3039    #[doc = r" [`SimdBase::N`] - 1)."]
3040    fn from_fn(simd: S, f: impl FnMut(usize) -> Self::Element) -> Self;
3041    #[doc = "Create a SIMD vector with all elements set to the given value."]
3042    fn splat(simd: S, val: Self::Element) -> Self;
3043    #[doc = "Concatenate `[self, rhs]` and extract `Self::N` elements starting at index `SHIFT`.\n\n`SHIFT` must be within [0, `Self::N`].\n\nThis can be used to implement a \"shift items\" operation by providing all zeroes as one operand. For a left shift, the right-hand side should be all zeroes. For a right shift by `M` items, the left-hand side should be all zeroes, and the shift amount will be `Self::N - M`.\n\nThis can also be used to rotate items within a vector by providing the same vector as both operands.\n\n```text\n\nslide::<1>([a b c d], [e f g h]) == [b c d e]\n\n```"]
3044    fn slide<const SHIFT: usize>(self, rhs: impl SimdInto<Self, S>) -> Self;
3045    #[doc = "Like `slide`, but operates independently on each 128-bit block."]
3046    fn slide_within_blocks<const SHIFT: usize>(self, rhs: impl SimdInto<Self, S>) -> Self;
3047}
3048#[doc = r" Functionality implemented by floating-point SIMD vectors."]
3049pub trait SimdFloat<S: Simd>:
3050    SimdBase<S>
3051    + core::ops::Neg<Output = Self>
3052    + core::ops::Add<Output = Self>
3053    + core::ops::AddAssign
3054    + core::ops::Add<Self::Element, Output = Self>
3055    + core::ops::AddAssign<Self::Element>
3056    + core::ops::Sub<Output = Self>
3057    + core::ops::SubAssign
3058    + core::ops::Sub<Self::Element, Output = Self>
3059    + core::ops::SubAssign<Self::Element>
3060    + core::ops::Mul<Output = Self>
3061    + core::ops::MulAssign
3062    + core::ops::Mul<Self::Element, Output = Self>
3063    + core::ops::MulAssign<Self::Element>
3064    + core::ops::Div<Output = Self>
3065    + core::ops::DivAssign
3066    + core::ops::Div<Self::Element, Output = Self>
3067    + core::ops::DivAssign<Self::Element>
3068{
3069    #[doc = r" Convert this floating-point type to an integer. This is a convenience method that"]
3070    #[doc = r" delegates to [`SimdCvtTruncate::truncate_from`], and can only be called if there"]
3071    #[doc = r" actually exists a target type of the same bit width (currently, only `u32` and"]
3072    #[doc = r" `i32`)."]
3073    #[doc = r""]
3074    #[doc = r" For more information about the semantics of this specific conversion, see the"]
3075    #[doc = r" concrete `SimdCvtTruncate` implementations for integer types."]
3076    #[inline(always)]
3077    fn to_int<T: SimdCvtTruncate<Self>>(self) -> T {
3078        T::truncate_from(self)
3079    }
3080    #[doc = r" Convert this floating-point type to an integer, saturating on overflow and returning"]
3081    #[doc = r" 0 for NaN. This is a convenience method that delegates to"]
3082    #[doc = r" [`SimdCvtTruncate::truncate_from_precise`], and can only be called if there actually"]
3083    #[doc = r" exists a target type of the same bit width (currently, only `u32` and `i32`)."]
3084    #[doc = r""]
3085    #[doc = r" For more information about the semantics of this specific conversion, see the"]
3086    #[doc = r" concrete `SimdCvtTruncate` implementations for integer types."]
3087    #[inline(always)]
3088    fn to_int_precise<T: SimdCvtTruncate<Self>>(self) -> T {
3089        T::truncate_from_precise(self)
3090    }
3091    #[doc = "Compute the absolute value of each element."]
3092    fn abs(self) -> Self;
3093    #[doc = "Compute the square root of each element.\n\nNegative elements other than `-0.0` will become NaN."]
3094    fn sqrt(self) -> Self;
3095    #[doc = "Return a vector with the magnitude of `self` and the sign of `rhs` for each element.\n\nThis operation copies the sign bit, so if an input element is NaN, the output element will be a NaN with the same payload and a copied sign bit."]
3096    fn copysign(self, rhs: impl SimdInto<Self, S>) -> Self;
3097    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
3098    fn simd_eq(self, rhs: impl SimdInto<Self, S>) -> Self::Mask;
3099    #[doc = "Compare two vectors element-wise for less than.\n\nReturns a mask where each element is all ones if `self` is less than `rhs`, and all zeroes if not."]
3100    fn simd_lt(self, rhs: impl SimdInto<Self, S>) -> Self::Mask;
3101    #[doc = "Compare two vectors element-wise for less than or equal.\n\nReturns a mask where each element is all ones if `self` is less than or equal to `rhs`, and all zeroes if not."]
3102    fn simd_le(self, rhs: impl SimdInto<Self, S>) -> Self::Mask;
3103    #[doc = "Compare two vectors element-wise for greater than or equal.\n\nReturns a mask where each element is all ones if `self` is greater than or equal to `rhs`, and all zeroes if not."]
3104    fn simd_ge(self, rhs: impl SimdInto<Self, S>) -> Self::Mask;
3105    #[doc = "Compare two vectors element-wise for greater than.\n\nReturns a mask where each element is all ones if `self` is greater than `rhs`, and all zeroes if not."]
3106    fn simd_gt(self, rhs: impl SimdInto<Self, S>) -> Self::Mask;
3107    #[doc = "Interleave the lower half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, b0, a1, b1]`.\n\n**Note:** This operation is only useful if you need to discard elements `a2, a3, b2, b3`.\n        For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
3108    fn zip_low(self, rhs: impl SimdInto<Self, S>) -> Self;
3109    #[doc = "Interleave the upper half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a2, b2, a3, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a1, b0, b1`.For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
3110    fn zip_high(self, rhs: impl SimdInto<Self, S>) -> Self;
3111    #[doc = "Extract even-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, a2, b0, b2]`.\n\n**Note:** This operation is only useful if you need to discard elements `a1, a3, b1, b3`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
3112    fn unzip_low(self, rhs: impl SimdInto<Self, S>) -> Self;
3113    #[doc = "Extract odd-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a1, a3, b1, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a2, b0, b2`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
3114    fn unzip_high(self, rhs: impl SimdInto<Self, S>) -> Self;
3115    #[doc = "Interleave two vectors.\n\nThe resulting vectors contain elements taken alternately from `self` and `rhs`, first filling the first result, and then the second.\n\nThe reverse of this operation is `deinterleave`.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `([a0, b0, a1, b1], [a2, b2, a3, b3])`."]
3116    fn interleave(self, rhs: impl SimdInto<Self, S>) -> (Self, Self);
3117    #[doc = "Deinterleave two vectors.\n\nThe first result contains all even-indexed elements from `self` followed by all even-indexed elements from `rhs`. The second result contains all odd-indexed elements from `self` followed by all odd-indexed elements from `rhs`.\n\nThe reverse of this operation is `interleave`.\n\nFor vectors `[a0, b0, a1, b1]` and `[a2, b2, a3, b3]`, returns `([a0, a1, a2, a3], [b0, b1, b2, b3])`."]
3118    fn deinterleave(self, rhs: impl SimdInto<Self, S>) -> (Self, Self);
3119    #[doc = "Return the element-wise maximum of two vectors.\n\nIf either operand is NaN, the result for that lane is implementation-defined-- it could be either the first or second operand. See `max_precise` for a version that returns the non-NaN operand if only one is NaN.\n\nIf one operand is positive zero and the other is negative zero, the result is also implementation-defined, and it could be either one."]
3120    fn max(self, rhs: impl SimdInto<Self, S>) -> Self;
3121    #[doc = "Return the element-wise minimum of two vectors.\n\nIf either operand is NaN, the result for that lane is implementation-defined-- it could be either the first or second operand. See `min_precise` for a version that returns the non-NaN operand if only one is NaN.\n\nIf one operand is positive zero and the other is negative zero, the result is also implementation-defined, and it could be either one."]
3122    fn min(self, rhs: impl SimdInto<Self, S>) -> Self;
3123    #[doc = "Return the element-wise maximum of two vectors.\n\nIf one operand is a quiet NaN and the other is not, this operation will choose the non-NaN operand.\n\nIf one operand is positive zero and the other is negative zero, the result is implementation-defined, and it could be either one.\n\nIf an operand is a *signaling* NaN, the result is not just implementation-defined, but fully non-deterministic: it may be either NaN or the non-NaN operand.\nSignaling NaN values are not produced by floating-point math operations, only from manual initialization with specific bit patterns. You probably don't need to worry about them."]
3124    fn max_precise(self, rhs: impl SimdInto<Self, S>) -> Self;
3125    #[doc = "Return the element-wise minimum of two vectors.\n\nIf one operand is a quiet NaN and the other is not, this operation will choose the non-NaN operand.\n\nIf one operand is positive zero and the other is negative zero, the result is implementation-defined, and it could be either one.\n\nIf an operand is a *signaling* NaN, the result is not just implementation-defined, but fully non-deterministic: it may be either NaN or the non-NaN operand.\nSignaling NaN values are not produced by floating-point math operations, only from manual initialization with specific bit patterns. You probably don't need to worry about them."]
3126    fn min_precise(self, rhs: impl SimdInto<Self, S>) -> Self;
3127    #[doc = "Compute `(self * op1) + op2` (fused multiply-add) for each element.\n\nDepending on hardware support, the result may be computed with only one rounding error, or may be implemented as a regular multiply followed by an add, which will result in two rounding errors."]
3128    fn mul_add(self, op1: impl SimdInto<Self, S>, op2: impl SimdInto<Self, S>) -> Self;
3129    #[doc = "Compute `(self * op1) - op2` (fused multiply-subtract) for each element.\n\nDepending on hardware support, the result may be computed with only one rounding error, or may be implemented as a regular multiply followed by a subtract, which will result in two rounding errors."]
3130    fn mul_sub(self, op1: impl SimdInto<Self, S>, op2: impl SimdInto<Self, S>) -> Self;
3131    #[doc = "Return the largest integer less than or equal to each element, that is, round towards negative infinity."]
3132    fn floor(self) -> Self;
3133    #[doc = "Return the smallest integer greater than or equal to each element, that is, round towards positive infinity."]
3134    fn ceil(self) -> Self;
3135    #[doc = "Round each element to the nearest integer, with ties rounding to the nearest even integer.\n\nThere is no corresponding `round` operation. Rust's `round` operation rounds ties away from zero, a behavior it inherited from C. That behavior is not implemented across all platforms, whereas round-ties-even is."]
3136    fn round_ties_even(self) -> Self;
3137    #[doc = "Return the fractional part of each element.\n\nThis is equivalent to `self - self.trunc()`."]
3138    fn fract(self) -> Self;
3139    #[doc = "Return the integer part of each element, rounding towards zero."]
3140    fn trunc(self) -> Self;
3141}
3142#[doc = r" Functionality implemented by (signed and unsigned) integer SIMD vectors."]
3143pub trait SimdInt<S: Simd>:
3144    SimdBase<S>
3145    + core::ops::Add<Output = Self>
3146    + core::ops::AddAssign
3147    + core::ops::Add<Self::Element, Output = Self>
3148    + core::ops::AddAssign<Self::Element>
3149    + core::ops::Sub<Output = Self>
3150    + core::ops::SubAssign
3151    + core::ops::Sub<Self::Element, Output = Self>
3152    + core::ops::SubAssign<Self::Element>
3153    + core::ops::Mul<Output = Self>
3154    + core::ops::MulAssign
3155    + core::ops::Mul<Self::Element, Output = Self>
3156    + core::ops::MulAssign<Self::Element>
3157    + core::ops::BitAnd<Output = Self>
3158    + core::ops::BitAndAssign
3159    + core::ops::BitAnd<Self::Element, Output = Self>
3160    + core::ops::BitAndAssign<Self::Element>
3161    + core::ops::BitOr<Output = Self>
3162    + core::ops::BitOrAssign
3163    + core::ops::BitOr<Self::Element, Output = Self>
3164    + core::ops::BitOrAssign<Self::Element>
3165    + core::ops::BitXor<Output = Self>
3166    + core::ops::BitXorAssign
3167    + core::ops::BitXor<Self::Element, Output = Self>
3168    + core::ops::BitXorAssign<Self::Element>
3169    + core::ops::Not<Output = Self>
3170    + core::ops::Shl<u32, Output = Self>
3171    + core::ops::ShlAssign<u32>
3172    + core::ops::Shl<Output = Self>
3173    + core::ops::ShlAssign
3174    + core::ops::Shr<u32, Output = Self>
3175    + core::ops::ShrAssign<u32>
3176    + core::ops::Shr<Output = Self>
3177    + core::ops::ShrAssign
3178{
3179    #[doc = r" Convert this integer type to a floating-point type. This is a convenience method"]
3180    #[doc = r" that delegates to [`SimdCvtFloat::float_from`], and can only be called if there"]
3181    #[doc = r" actually exists a target type of the same bit width (currently, only `f32`)."]
3182    #[inline(always)]
3183    fn to_float<T: SimdCvtFloat<Self>>(self) -> T {
3184        T::float_from(self)
3185    }
3186    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
3187    fn simd_eq(self, rhs: impl SimdInto<Self, S>) -> Self::Mask;
3188    #[doc = "Compare two vectors element-wise for less than.\n\nReturns a mask where each element is all ones if `self` is less than `rhs`, and all zeroes if not."]
3189    fn simd_lt(self, rhs: impl SimdInto<Self, S>) -> Self::Mask;
3190    #[doc = "Compare two vectors element-wise for less than or equal.\n\nReturns a mask where each element is all ones if `self` is less than or equal to `rhs`, and all zeroes if not."]
3191    fn simd_le(self, rhs: impl SimdInto<Self, S>) -> Self::Mask;
3192    #[doc = "Compare two vectors element-wise for greater than or equal.\n\nReturns a mask where each element is all ones if `self` is greater than or equal to `rhs`, and all zeroes if not."]
3193    fn simd_ge(self, rhs: impl SimdInto<Self, S>) -> Self::Mask;
3194    #[doc = "Compare two vectors element-wise for greater than.\n\nReturns a mask where each element is all ones if `self` is greater than `rhs`, and all zeroes if not."]
3195    fn simd_gt(self, rhs: impl SimdInto<Self, S>) -> Self::Mask;
3196    #[doc = "Interleave the lower half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, b0, a1, b1]`.\n\n**Note:** This operation is only useful if you need to discard elements `a2, a3, b2, b3`.\n        For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
3197    fn zip_low(self, rhs: impl SimdInto<Self, S>) -> Self;
3198    #[doc = "Interleave the upper half elements of two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a2, b2, a3, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a1, b0, b1`.For fully interleaving two vectors prefer `interleave`,\n        which is faster than `zip_low` followed by `zip_high` on some platforms."]
3199    fn zip_high(self, rhs: impl SimdInto<Self, S>) -> Self;
3200    #[doc = "Extract even-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a0, a2, b0, b2]`.\n\n**Note:** This operation is only useful if you need to discard elements `a1, a3, b1, b3`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
3201    fn unzip_low(self, rhs: impl SimdInto<Self, S>) -> Self;
3202    #[doc = "Extract odd-indexed elements from two vectors.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `[a1, a3, b1, b3]`.\n\n**Note:** This operation is only useful if you need to discard elements `a0, a2, b0, b2`.For fully deinterleaving two vectors prefer `deinterleave`,\n        which is faster than `unzip_low` followed by `unzip_high` on some platforms."]
3203    fn unzip_high(self, rhs: impl SimdInto<Self, S>) -> Self;
3204    #[doc = "Interleave two vectors.\n\nThe resulting vectors contain elements taken alternately from `self` and `rhs`, first filling the first result, and then the second.\n\nThe reverse of this operation is `deinterleave`.\n\nFor vectors `[a0, a1, a2, a3]` and `[b0, b1, b2, b3]`, returns `([a0, b0, a1, b1], [a2, b2, a3, b3])`."]
3205    fn interleave(self, rhs: impl SimdInto<Self, S>) -> (Self, Self);
3206    #[doc = "Deinterleave two vectors.\n\nThe first result contains all even-indexed elements from `self` followed by all even-indexed elements from `rhs`. The second result contains all odd-indexed elements from `self` followed by all odd-indexed elements from `rhs`.\n\nThe reverse of this operation is `interleave`.\n\nFor vectors `[a0, b0, a1, b1]` and `[a2, b2, a3, b3]`, returns `([a0, a1, a2, a3], [b0, b1, b2, b3])`."]
3207    fn deinterleave(self, rhs: impl SimdInto<Self, S>) -> (Self, Self);
3208    #[doc = "Return the element-wise minimum of two vectors."]
3209    fn min(self, rhs: impl SimdInto<Self, S>) -> Self;
3210    #[doc = "Return the element-wise maximum of two vectors."]
3211    fn max(self, rhs: impl SimdInto<Self, S>) -> Self;
3212}
3213#[doc = r" Functionality implemented by SIMD masks."]
3214pub trait SimdMask<S: Simd>:
3215    SimdBase<S>
3216    + core::ops::BitAnd<Output = Self>
3217    + core::ops::BitAndAssign
3218    + core::ops::BitAnd<Self::Element, Output = Self>
3219    + core::ops::BitAndAssign<Self::Element>
3220    + core::ops::BitOr<Output = Self>
3221    + core::ops::BitOrAssign
3222    + core::ops::BitOr<Self::Element, Output = Self>
3223    + core::ops::BitOrAssign<Self::Element>
3224    + core::ops::BitXor<Output = Self>
3225    + core::ops::BitXorAssign
3226    + core::ops::BitXor<Self::Element, Output = Self>
3227    + core::ops::BitXorAssign<Self::Element>
3228    + core::ops::Not<Output = Self>
3229{
3230    #[doc = "Compare two vectors element-wise for equality.\n\nReturns a mask where each element is all ones if the corresponding elements are equal, and all zeroes if not."]
3231    fn simd_eq(self, rhs: impl SimdInto<Self, S>) -> Self::Mask;
3232    #[doc = "Returns true if any elements in this mask are true (all ones).\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
3233    fn any_true(self) -> bool;
3234    #[doc = "Returns true if all elements in this mask are true (all ones).\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
3235    fn all_true(self) -> bool;
3236    #[doc = "Returns true if any elements in this mask are false (all zeroes).\n\nThis is logically equivalent to `!all_true`, but may be faster.\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
3237    fn any_false(self) -> bool;
3238    #[doc = "Returns true if all elements in this mask are false (all zeroes).\n\nThis is logically equivalent to `!any_true`, but may be faster.\n\nBehavior on mask elements that are not all zeroes or all ones is unspecified. It may vary depending on architecture, feature level, the mask elements' width, the mask vector's width, or library version.\n\nThe behavior is also not guaranteed to be logically consistent if mask elements are not all zeroes or all ones. `any_true` may not return the same result as `!all_false`, and `all_true` may not return the same result as `!any_false`.\n\nThe [`select`](crate::Select::select) operation also has unspecified behavior for mask elements that are not all zeroes or all ones. That behavior may not match the behavior of this operation."]
3239    fn all_false(self) -> bool;
3240}