diff --git a/Cargo.lock b/Cargo.lock index 79cc8730..fac3793c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -214,6 +214,7 @@ name = "demo" version = "0.1.0" dependencies = [ "gl 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", + "jemallocator 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", "nfd 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)", "pathfinder_demo 0.1.0", "pathfinder_geometry 0.3.0", @@ -647,7 +648,6 @@ dependencies = [ "clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)", "gl 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", "image 0.21.0 (registry+https://github.com/rust-lang/crates.io-index)", - "jemallocator 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", "pathfinder_geometry 0.3.0", "pathfinder_gl 0.1.0", "pathfinder_gpu 0.1.0", @@ -715,6 +715,9 @@ dependencies = [ [[package]] name = "pathfinder_simd" version = "0.3.0" +dependencies = [ + "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] name = "pathfinder_svg" @@ -1036,6 +1039,14 @@ name = "rustc-serialize" version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "ryu" version = "0.2.7" @@ -1090,6 +1101,19 @@ dependencies = [ "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "serde" version = "1.0.88" @@ -1469,6 +1493,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum rustache 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c86de9443c1a5618e0d51bbd8eb6227ead9916446eb8952575a70d1ef7e00209" "checksum rustc-demangle 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "adacaae16d02b6ec37fdc7acfcddf365978de76d1983d3ee22afc260e1ca9619" "checksum rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)" = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda" +"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" "checksum ryu 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "eb9e9b8cde282a9fe6a42dd4681319bfb63f121b8a8ee9439c6f4107e58a46f7" "checksum safe-transmute 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9604873ffe1980bc1f179103704a65c8aca141c248d9e52b7af95ff10578166e" "checksum safemem 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8dca453248a96cb0749e36ccdfe2b0b4e54a61bfef89fb97ec621eb8e0a93dd9" @@ -1477,6 +1502,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" "checksum sdl2 0.32.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0ebf85f207d42e4da59fa31fff977be5ff0b224873506c4bd70cc1c94b331593" "checksum sdl2-sys 0.32.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e82803e85c2e6178d28886cef25b2c53afc2eecaeff739f2247f23ed3352e6c1" +"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" "checksum serde 1.0.88 (registry+https://github.com/rust-lang/crates.io-index)" = "9f301d728f2b94c9a7691c90f07b0b4e8a4517181d9461be94c04bddeb4bd850" "checksum serde_derive 1.0.88 (registry+https://github.com/rust-lang/crates.io-index)" = "beed18e6f5175aef3ba670e57c60ef3b1b74d250d962a26604bff4c80e970dd4" "checksum serde_json 1.0.38 (registry+https://github.com/rust-lang/crates.io-index)" = "27dce848e7467aa0e2fcaf0a413641499c0b745452aaca1194d24dedde9e13c9" diff --git a/demo/common/Cargo.toml b/demo/common/Cargo.toml index fcd8225f..f085eba6 100644 --- a/demo/common/Cargo.toml +++ b/demo/common/Cargo.toml @@ -7,7 +7,6 @@ authors = ["Patrick Walton "] [dependencies] clap = "2.32" gl = "0.6" -jemallocator = "0.1" rayon = "1.0" usvg = "0.4" diff --git a/demo/common/src/lib.rs b/demo/common/src/lib.rs index 6e62905d..6fa5c320 100644 --- a/demo/common/src/lib.rs +++ b/demo/common/src/lib.rs @@ -15,7 +15,6 @@ use crate::ui::{DemoUI, UIAction}; use crate::window::{Event, Keycode, SVGPath, Window, WindowSize}; use clap::{App, Arg}; use image::ColorType; -use jemallocator; use pathfinder_geometry::basic::point::{Point2DF32, Point2DI32, Point3DF32}; use pathfinder_geometry::basic::rect::{RectF32, RectI32}; use pathfinder_geometry::basic::transform2d::Transform2DF32; @@ -47,9 +46,6 @@ use std::thread; use std::time::{Duration, Instant}; use usvg::{Options as UsvgOptions, Tree}; -#[global_allocator] -static ALLOC: jemallocator::Jemalloc = jemallocator::Jemalloc; - static DEFAULT_SVG_VIRTUAL_PATH: &'static str = "svg/Ghostscript_Tiger.svg"; const MOUSELOOK_ROTATION_SPEED: f32 = 0.007; diff --git a/demo/native/Cargo.toml b/demo/native/Cargo.toml index 24540905..44ff2202 100644 --- a/demo/native/Cargo.toml +++ b/demo/native/Cargo.toml @@ -9,6 +9,7 @@ pf-no-simd = ["pathfinder_simd/pf-no-simd"] [dependencies] gl = "0.6" +jemallocator = "0.1" nfd = "0.0.4" sdl2 = "0.32" sdl2-sys = "0.32" diff --git a/demo/native/src/main.rs b/demo/native/src/main.rs index daf33f6a..0a2014d5 100644 --- a/demo/native/src/main.rs +++ b/demo/native/src/main.rs @@ -10,6 +10,7 @@ //! A demo app for Pathfinder using SDL 2. +use jemallocator; use nfd::Response; use pathfinder_demo::DemoApp; use pathfinder_demo::window::{Event, Keycode, SVGPath, Window, WindowSize}; @@ -24,6 +25,9 @@ use sdl2_sys::{SDL_Event, SDL_UserEvent}; use std::path::PathBuf; use std::ptr; +#[global_allocator] +static ALLOC: jemallocator::Jemalloc = jemallocator::Jemalloc; + const DEFAULT_WINDOW_WIDTH: u32 = 1067; const DEFAULT_WINDOW_HEIGHT: u32 = 800; diff --git a/simd/Cargo.toml b/simd/Cargo.toml index 3400fc6a..923dd7a5 100644 --- a/simd/Cargo.toml +++ b/simd/Cargo.toml @@ -3,8 +3,12 @@ name = "pathfinder_simd" version = "0.3.0" edition = "2018" authors = ["Patrick Walton "] +build = "build.rs" [features] pf-no-simd = [] [dependencies] + +[build-dependencies] +rustc_version = "0.2" diff --git a/simd/build.rs b/simd/build.rs new file mode 100644 index 00000000..e7128bba --- /dev/null +++ b/simd/build.rs @@ -0,0 +1,26 @@ +// pathfinder/simd/build.rs +// +// Copyright © 2019 The Pathfinder Project Developers. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +extern crate rustc_version; + +use rustc_version::Channel; + +fn main() { + // Assert we haven't travelled back in time + assert!(rustc_version::version().unwrap().major >= 1); + + // Set cfg flags depending on release channel + match rustc_version::version_meta().unwrap().channel { + Channel::Nightly => { + println!("cargo:rustc-cfg=pf_rustc_nightly"); + } + _ => {} + } +} diff --git a/simd/src/arm.rs b/simd/src/arm.rs new file mode 100644 index 00000000..1ca7ea4d --- /dev/null +++ b/simd/src/arm.rs @@ -0,0 +1,4003 @@ +// pathfinder/simd/src/arm.rs +// +// Copyright © 2019 The Pathfinder Project Developers. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +use std::arch::aarch64::{self, float32x4_t, int32x4_t, uint32x4_t, uint64x2_t, uint8x16_t}; +use std::arch::aarch64::{uint8x8x2_t, uint8x8_t}; +use std::f32; +use std::fmt::{self, Debug, Formatter}; +use std::mem; +use std::ops::{Add, Index, IndexMut, Mul, Sub}; + +// 32-bit floats + +#[derive(Clone, Copy)] +pub struct F32x4(pub float32x4_t); + +impl F32x4 { + #[inline] + pub fn new(a: f32, b: f32, c: f32, d: f32) -> F32x4 { + unsafe { F32x4(mem::transmute([a, b, c, d])) } + } + + #[inline] + pub fn splat(x: f32) -> F32x4 { + F32x4::new(x, x, x, x) + } + + // Basic operations + + #[inline] + pub fn approx_recip(self) -> F32x4 { + unsafe { F32x4(vrecpe_v4f32(self.0)) } + } + + #[inline] + pub fn min(self, other: F32x4) -> F32x4 { + unsafe { F32x4(simd_fmin(self.0, other.0)) } + } + + #[inline] + pub fn max(self, other: F32x4) -> F32x4 { + unsafe { F32x4(simd_fmax(self.0, other.0)) } + } + + #[inline] + pub fn clamp(self, min: F32x4, max: F32x4) -> F32x4 { + self.max(min).min(max) + } + + #[inline] + pub fn abs(self) -> F32x4 { + unsafe { F32x4(fabs_v4f32(self.0)) } + } + + #[inline] + pub fn floor(self) -> F32x4 { + unsafe { F32x4(floor_v4f32(self.0)) } + } + + #[inline] + pub fn ceil(self) -> F32x4 { + unsafe { F32x4(ceil_v4f32(self.0)) } + } + + // Packed comparisons + + #[inline] + pub fn packed_eq(self, other: F32x4) -> U32x4 { + unsafe { U32x4(simd_eq(self.0, other.0)) } + } + + #[inline] + pub fn packed_gt(self, other: F32x4) -> U32x4 { + unsafe { U32x4(simd_gt(self.0, other.0)) } + } + + #[inline] + pub fn packed_le(self, other: F32x4) -> U32x4 { + unsafe { U32x4(simd_le(self.0, other.0)) } + } + + #[inline] + pub fn packed_lt(self, other: F32x4) -> U32x4 { + unsafe { U32x4(simd_lt(self.0, other.0)) } + } + + // Converts these packed floats to integers. + #[inline] + pub fn to_i32x4(self) -> I32x4 { + unsafe { I32x4(simd_cast(self.0)) } + } + + // Shuffles + + /// Constructs a new vector from the first, first, first, and first + /// lanes in this vector, respectively. + #[inline] + pub fn xxxx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 0, 0, 0])) } + } + + /// Constructs a new vector from the second, first, first, and first + /// lanes in this vector, respectively. + #[inline] + pub fn yxxx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 0, 0, 0])) } + } + + /// Constructs a new vector from the third, first, first, and first + /// lanes in this vector, respectively. + #[inline] + pub fn zxxx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 0, 0, 0])) } + } + + /// Constructs a new vector from the fourth, first, first, and first + /// lanes in this vector, respectively. + #[inline] + pub fn wxxx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 0, 0, 0])) } + } + + /// Constructs a new vector from the first, second, first, and first + /// lanes in this vector, respectively. + #[inline] + pub fn xyxx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 1, 0, 0])) } + } + + /// Constructs a new vector from the second, second, first, and first + /// lanes in this vector, respectively. + #[inline] + pub fn yyxx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 1, 0, 0])) } + } + + /// Constructs a new vector from the third, second, first, and first + /// lanes in this vector, respectively. + #[inline] + pub fn zyxx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 1, 0, 0])) } + } + + /// Constructs a new vector from the fourth, second, first, and first + /// lanes in this vector, respectively. + #[inline] + pub fn wyxx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 1, 0, 0])) } + } + + /// Constructs a new vector from the first, third, first, and first + /// lanes in this vector, respectively. + #[inline] + pub fn xzxx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 2, 0, 0])) } + } + + /// Constructs a new vector from the second, third, first, and first + /// lanes in this vector, respectively. + #[inline] + pub fn yzxx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 2, 0, 0])) } + } + + /// Constructs a new vector from the third, third, first, and first + /// lanes in this vector, respectively. + #[inline] + pub fn zzxx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 2, 0, 0])) } + } + + /// Constructs a new vector from the fourth, third, first, and first + /// lanes in this vector, respectively. + #[inline] + pub fn wzxx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 2, 0, 0])) } + } + + /// Constructs a new vector from the first, fourth, first, and first + /// lanes in this vector, respectively. + #[inline] + pub fn xwxx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 3, 0, 0])) } + } + + /// Constructs a new vector from the second, fourth, first, and first + /// lanes in this vector, respectively. + #[inline] + pub fn ywxx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 3, 0, 0])) } + } + + /// Constructs a new vector from the third, fourth, first, and first + /// lanes in this vector, respectively. + #[inline] + pub fn zwxx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 3, 0, 0])) } + } + + /// Constructs a new vector from the fourth, fourth, first, and first + /// lanes in this vector, respectively. + #[inline] + pub fn wwxx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 3, 0, 0])) } + } + + /// Constructs a new vector from the first, first, second, and first + /// lanes in this vector, respectively. + #[inline] + pub fn xxyx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 0, 1, 0])) } + } + + /// Constructs a new vector from the second, first, second, and first + /// lanes in this vector, respectively. + #[inline] + pub fn yxyx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 0, 1, 0])) } + } + + /// Constructs a new vector from the third, first, second, and first + /// lanes in this vector, respectively. + #[inline] + pub fn zxyx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 0, 1, 0])) } + } + + /// Constructs a new vector from the fourth, first, second, and first + /// lanes in this vector, respectively. + #[inline] + pub fn wxyx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 0, 1, 0])) } + } + + /// Constructs a new vector from the first, second, second, and first + /// lanes in this vector, respectively. + #[inline] + pub fn xyyx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 1, 1, 0])) } + } + + /// Constructs a new vector from the second, second, second, and first + /// lanes in this vector, respectively. + #[inline] + pub fn yyyx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 1, 1, 0])) } + } + + /// Constructs a new vector from the third, second, second, and first + /// lanes in this vector, respectively. + #[inline] + pub fn zyyx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 1, 1, 0])) } + } + + /// Constructs a new vector from the fourth, second, second, and first + /// lanes in this vector, respectively. + #[inline] + pub fn wyyx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 1, 1, 0])) } + } + + /// Constructs a new vector from the first, third, second, and first + /// lanes in this vector, respectively. + #[inline] + pub fn xzyx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 2, 1, 0])) } + } + + /// Constructs a new vector from the second, third, second, and first + /// lanes in this vector, respectively. + #[inline] + pub fn yzyx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 2, 1, 0])) } + } + + /// Constructs a new vector from the third, third, second, and first + /// lanes in this vector, respectively. + #[inline] + pub fn zzyx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 2, 1, 0])) } + } + + /// Constructs a new vector from the fourth, third, second, and first + /// lanes in this vector, respectively. + #[inline] + pub fn wzyx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 2, 1, 0])) } + } + + /// Constructs a new vector from the first, fourth, second, and first + /// lanes in this vector, respectively. + #[inline] + pub fn xwyx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 3, 1, 0])) } + } + + /// Constructs a new vector from the second, fourth, second, and first + /// lanes in this vector, respectively. + #[inline] + pub fn ywyx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 3, 1, 0])) } + } + + /// Constructs a new vector from the third, fourth, second, and first + /// lanes in this vector, respectively. + #[inline] + pub fn zwyx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 3, 1, 0])) } + } + + /// Constructs a new vector from the fourth, fourth, second, and first + /// lanes in this vector, respectively. + #[inline] + pub fn wwyx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 3, 1, 0])) } + } + + /// Constructs a new vector from the first, first, third, and first + /// lanes in this vector, respectively. + #[inline] + pub fn xxzx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 0, 2, 0])) } + } + + /// Constructs a new vector from the second, first, third, and first + /// lanes in this vector, respectively. + #[inline] + pub fn yxzx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 0, 2, 0])) } + } + + /// Constructs a new vector from the third, first, third, and first + /// lanes in this vector, respectively. + #[inline] + pub fn zxzx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 0, 2, 0])) } + } + + /// Constructs a new vector from the fourth, first, third, and first + /// lanes in this vector, respectively. + #[inline] + pub fn wxzx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 0, 2, 0])) } + } + + /// Constructs a new vector from the first, second, third, and first + /// lanes in this vector, respectively. + #[inline] + pub fn xyzx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 1, 2, 0])) } + } + + /// Constructs a new vector from the second, second, third, and first + /// lanes in this vector, respectively. + #[inline] + pub fn yyzx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 1, 2, 0])) } + } + + /// Constructs a new vector from the third, second, third, and first + /// lanes in this vector, respectively. + #[inline] + pub fn zyzx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 1, 2, 0])) } + } + + /// Constructs a new vector from the fourth, second, third, and first + /// lanes in this vector, respectively. + #[inline] + pub fn wyzx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 1, 2, 0])) } + } + + /// Constructs a new vector from the first, third, third, and first + /// lanes in this vector, respectively. + #[inline] + pub fn xzzx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 2, 2, 0])) } + } + + /// Constructs a new vector from the second, third, third, and first + /// lanes in this vector, respectively. + #[inline] + pub fn yzzx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 2, 2, 0])) } + } + + /// Constructs a new vector from the third, third, third, and first + /// lanes in this vector, respectively. + #[inline] + pub fn zzzx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 2, 2, 0])) } + } + + /// Constructs a new vector from the fourth, third, third, and first + /// lanes in this vector, respectively. + #[inline] + pub fn wzzx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 2, 2, 0])) } + } + + /// Constructs a new vector from the first, fourth, third, and first + /// lanes in this vector, respectively. + #[inline] + pub fn xwzx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 3, 2, 0])) } + } + + /// Constructs a new vector from the second, fourth, third, and first + /// lanes in this vector, respectively. + #[inline] + pub fn ywzx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 3, 2, 0])) } + } + + /// Constructs a new vector from the third, fourth, third, and first + /// lanes in this vector, respectively. + #[inline] + pub fn zwzx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 3, 2, 0])) } + } + + /// Constructs a new vector from the fourth, fourth, third, and first + /// lanes in this vector, respectively. + #[inline] + pub fn wwzx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 3, 2, 0])) } + } + + /// Constructs a new vector from the first, first, fourth, and first + /// lanes in this vector, respectively. + #[inline] + pub fn xxwx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 0, 3, 0])) } + } + + /// Constructs a new vector from the second, first, fourth, and first + /// lanes in this vector, respectively. + #[inline] + pub fn yxwx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 0, 3, 0])) } + } + + /// Constructs a new vector from the third, first, fourth, and first + /// lanes in this vector, respectively. + #[inline] + pub fn zxwx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 0, 3, 0])) } + } + + /// Constructs a new vector from the fourth, first, fourth, and first + /// lanes in this vector, respectively. + #[inline] + pub fn wxwx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 0, 3, 0])) } + } + + /// Constructs a new vector from the first, second, fourth, and first + /// lanes in this vector, respectively. + #[inline] + pub fn xywx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 1, 3, 0])) } + } + + /// Constructs a new vector from the second, second, fourth, and first + /// lanes in this vector, respectively. + #[inline] + pub fn yywx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 1, 3, 0])) } + } + + /// Constructs a new vector from the third, second, fourth, and first + /// lanes in this vector, respectively. + #[inline] + pub fn zywx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 1, 3, 0])) } + } + + /// Constructs a new vector from the fourth, second, fourth, and first + /// lanes in this vector, respectively. + #[inline] + pub fn wywx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 1, 3, 0])) } + } + + /// Constructs a new vector from the first, third, fourth, and first + /// lanes in this vector, respectively. + #[inline] + pub fn xzwx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 2, 3, 0])) } + } + + /// Constructs a new vector from the second, third, fourth, and first + /// lanes in this vector, respectively. + #[inline] + pub fn yzwx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 2, 3, 0])) } + } + + /// Constructs a new vector from the third, third, fourth, and first + /// lanes in this vector, respectively. + #[inline] + pub fn zzwx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 2, 3, 0])) } + } + + /// Constructs a new vector from the fourth, third, fourth, and first + /// lanes in this vector, respectively. + #[inline] + pub fn wzwx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 2, 3, 0])) } + } + + /// Constructs a new vector from the first, fourth, fourth, and first + /// lanes in this vector, respectively. + #[inline] + pub fn xwwx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 3, 3, 0])) } + } + + /// Constructs a new vector from the second, fourth, fourth, and first + /// lanes in this vector, respectively. + #[inline] + pub fn ywwx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 3, 3, 0])) } + } + + /// Constructs a new vector from the third, fourth, fourth, and first + /// lanes in this vector, respectively. + #[inline] + pub fn zwwx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 3, 3, 0])) } + } + + /// Constructs a new vector from the fourth, fourth, fourth, and first + /// lanes in this vector, respectively. + #[inline] + pub fn wwwx(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 3, 3, 0])) } + } + + /// Constructs a new vector from the first, first, first, and second + /// lanes in this vector, respectively. + #[inline] + pub fn xxxy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 0, 0, 1])) } + } + + /// Constructs a new vector from the second, first, first, and second + /// lanes in this vector, respectively. + #[inline] + pub fn yxxy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 0, 0, 1])) } + } + + /// Constructs a new vector from the third, first, first, and second + /// lanes in this vector, respectively. + #[inline] + pub fn zxxy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 0, 0, 1])) } + } + + /// Constructs a new vector from the fourth, first, first, and second + /// lanes in this vector, respectively. + #[inline] + pub fn wxxy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 0, 0, 1])) } + } + + /// Constructs a new vector from the first, second, first, and second + /// lanes in this vector, respectively. + #[inline] + pub fn xyxy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 1, 0, 1])) } + } + + /// Constructs a new vector from the second, second, first, and second + /// lanes in this vector, respectively. + #[inline] + pub fn yyxy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 1, 0, 1])) } + } + + /// Constructs a new vector from the third, second, first, and second + /// lanes in this vector, respectively. + #[inline] + pub fn zyxy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 1, 0, 1])) } + } + + /// Constructs a new vector from the fourth, second, first, and second + /// lanes in this vector, respectively. + #[inline] + pub fn wyxy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 1, 0, 1])) } + } + + /// Constructs a new vector from the first, third, first, and second + /// lanes in this vector, respectively. + #[inline] + pub fn xzxy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 2, 0, 1])) } + } + + /// Constructs a new vector from the second, third, first, and second + /// lanes in this vector, respectively. + #[inline] + pub fn yzxy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 2, 0, 1])) } + } + + /// Constructs a new vector from the third, third, first, and second + /// lanes in this vector, respectively. + #[inline] + pub fn zzxy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 2, 0, 1])) } + } + + /// Constructs a new vector from the fourth, third, first, and second + /// lanes in this vector, respectively. + #[inline] + pub fn wzxy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 2, 0, 1])) } + } + + /// Constructs a new vector from the first, fourth, first, and second + /// lanes in this vector, respectively. + #[inline] + pub fn xwxy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 3, 0, 1])) } + } + + /// Constructs a new vector from the second, fourth, first, and second + /// lanes in this vector, respectively. + #[inline] + pub fn ywxy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 3, 0, 1])) } + } + + /// Constructs a new vector from the third, fourth, first, and second + /// lanes in this vector, respectively. + #[inline] + pub fn zwxy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 3, 0, 1])) } + } + + /// Constructs a new vector from the fourth, fourth, first, and second + /// lanes in this vector, respectively. + #[inline] + pub fn wwxy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 3, 0, 1])) } + } + + /// Constructs a new vector from the first, first, second, and second + /// lanes in this vector, respectively. + #[inline] + pub fn xxyy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 0, 1, 1])) } + } + + /// Constructs a new vector from the second, first, second, and second + /// lanes in this vector, respectively. + #[inline] + pub fn yxyy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 0, 1, 1])) } + } + + /// Constructs a new vector from the third, first, second, and second + /// lanes in this vector, respectively. + #[inline] + pub fn zxyy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 0, 1, 1])) } + } + + /// Constructs a new vector from the fourth, first, second, and second + /// lanes in this vector, respectively. + #[inline] + pub fn wxyy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 0, 1, 1])) } + } + + /// Constructs a new vector from the first, second, second, and second + /// lanes in this vector, respectively. + #[inline] + pub fn xyyy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 1, 1, 1])) } + } + + /// Constructs a new vector from the second, second, second, and second + /// lanes in this vector, respectively. + #[inline] + pub fn yyyy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 1, 1, 1])) } + } + + /// Constructs a new vector from the third, second, second, and second + /// lanes in this vector, respectively. + #[inline] + pub fn zyyy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 1, 1, 1])) } + } + + /// Constructs a new vector from the fourth, second, second, and second + /// lanes in this vector, respectively. + #[inline] + pub fn wyyy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 1, 1, 1])) } + } + + /// Constructs a new vector from the first, third, second, and second + /// lanes in this vector, respectively. + #[inline] + pub fn xzyy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 2, 1, 1])) } + } + + /// Constructs a new vector from the second, third, second, and second + /// lanes in this vector, respectively. + #[inline] + pub fn yzyy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 2, 1, 1])) } + } + + /// Constructs a new vector from the third, third, second, and second + /// lanes in this vector, respectively. + #[inline] + pub fn zzyy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 2, 1, 1])) } + } + + /// Constructs a new vector from the fourth, third, second, and second + /// lanes in this vector, respectively. + #[inline] + pub fn wzyy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 2, 1, 1])) } + } + + /// Constructs a new vector from the first, fourth, second, and second + /// lanes in this vector, respectively. + #[inline] + pub fn xwyy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 3, 1, 1])) } + } + + /// Constructs a new vector from the second, fourth, second, and second + /// lanes in this vector, respectively. + #[inline] + pub fn ywyy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 3, 1, 1])) } + } + + /// Constructs a new vector from the third, fourth, second, and second + /// lanes in this vector, respectively. + #[inline] + pub fn zwyy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 3, 1, 1])) } + } + + /// Constructs a new vector from the fourth, fourth, second, and second + /// lanes in this vector, respectively. + #[inline] + pub fn wwyy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 3, 1, 1])) } + } + + /// Constructs a new vector from the first, first, third, and second + /// lanes in this vector, respectively. + #[inline] + pub fn xxzy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 0, 2, 1])) } + } + + /// Constructs a new vector from the second, first, third, and second + /// lanes in this vector, respectively. + #[inline] + pub fn yxzy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 0, 2, 1])) } + } + + /// Constructs a new vector from the third, first, third, and second + /// lanes in this vector, respectively. + #[inline] + pub fn zxzy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 0, 2, 1])) } + } + + /// Constructs a new vector from the fourth, first, third, and second + /// lanes in this vector, respectively. + #[inline] + pub fn wxzy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 0, 2, 1])) } + } + + /// Constructs a new vector from the first, second, third, and second + /// lanes in this vector, respectively. + #[inline] + pub fn xyzy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 1, 2, 1])) } + } + + /// Constructs a new vector from the second, second, third, and second + /// lanes in this vector, respectively. + #[inline] + pub fn yyzy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 1, 2, 1])) } + } + + /// Constructs a new vector from the third, second, third, and second + /// lanes in this vector, respectively. + #[inline] + pub fn zyzy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 1, 2, 1])) } + } + + /// Constructs a new vector from the fourth, second, third, and second + /// lanes in this vector, respectively. + #[inline] + pub fn wyzy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 1, 2, 1])) } + } + + /// Constructs a new vector from the first, third, third, and second + /// lanes in this vector, respectively. + #[inline] + pub fn xzzy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 2, 2, 1])) } + } + + /// Constructs a new vector from the second, third, third, and second + /// lanes in this vector, respectively. + #[inline] + pub fn yzzy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 2, 2, 1])) } + } + + /// Constructs a new vector from the third, third, third, and second + /// lanes in this vector, respectively. + #[inline] + pub fn zzzy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 2, 2, 1])) } + } + + /// Constructs a new vector from the fourth, third, third, and second + /// lanes in this vector, respectively. + #[inline] + pub fn wzzy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 2, 2, 1])) } + } + + /// Constructs a new vector from the first, fourth, third, and second + /// lanes in this vector, respectively. + #[inline] + pub fn xwzy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 3, 2, 1])) } + } + + /// Constructs a new vector from the second, fourth, third, and second + /// lanes in this vector, respectively. + #[inline] + pub fn ywzy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 3, 2, 1])) } + } + + /// Constructs a new vector from the third, fourth, third, and second + /// lanes in this vector, respectively. + #[inline] + pub fn zwzy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 3, 2, 1])) } + } + + /// Constructs a new vector from the fourth, fourth, third, and second + /// lanes in this vector, respectively. + #[inline] + pub fn wwzy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 3, 2, 1])) } + } + + /// Constructs a new vector from the first, first, fourth, and second + /// lanes in this vector, respectively. + #[inline] + pub fn xxwy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 0, 3, 1])) } + } + + /// Constructs a new vector from the second, first, fourth, and second + /// lanes in this vector, respectively. + #[inline] + pub fn yxwy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 0, 3, 1])) } + } + + /// Constructs a new vector from the third, first, fourth, and second + /// lanes in this vector, respectively. + #[inline] + pub fn zxwy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 0, 3, 1])) } + } + + /// Constructs a new vector from the fourth, first, fourth, and second + /// lanes in this vector, respectively. + #[inline] + pub fn wxwy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 0, 3, 1])) } + } + + /// Constructs a new vector from the first, second, fourth, and second + /// lanes in this vector, respectively. + #[inline] + pub fn xywy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 1, 3, 1])) } + } + + /// Constructs a new vector from the second, second, fourth, and second + /// lanes in this vector, respectively. + #[inline] + pub fn yywy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 1, 3, 1])) } + } + + /// Constructs a new vector from the third, second, fourth, and second + /// lanes in this vector, respectively. + #[inline] + pub fn zywy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 1, 3, 1])) } + } + + /// Constructs a new vector from the fourth, second, fourth, and second + /// lanes in this vector, respectively. + #[inline] + pub fn wywy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 1, 3, 1])) } + } + + /// Constructs a new vector from the first, third, fourth, and second + /// lanes in this vector, respectively. + #[inline] + pub fn xzwy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 2, 3, 1])) } + } + + /// Constructs a new vector from the second, third, fourth, and second + /// lanes in this vector, respectively. + #[inline] + pub fn yzwy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 2, 3, 1])) } + } + + /// Constructs a new vector from the third, third, fourth, and second + /// lanes in this vector, respectively. + #[inline] + pub fn zzwy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 2, 3, 1])) } + } + + /// Constructs a new vector from the fourth, third, fourth, and second + /// lanes in this vector, respectively. + #[inline] + pub fn wzwy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 2, 3, 1])) } + } + + /// Constructs a new vector from the first, fourth, fourth, and second + /// lanes in this vector, respectively. + #[inline] + pub fn xwwy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 3, 3, 1])) } + } + + /// Constructs a new vector from the second, fourth, fourth, and second + /// lanes in this vector, respectively. + #[inline] + pub fn ywwy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 3, 3, 1])) } + } + + /// Constructs a new vector from the third, fourth, fourth, and second + /// lanes in this vector, respectively. + #[inline] + pub fn zwwy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 3, 3, 1])) } + } + + /// Constructs a new vector from the fourth, fourth, fourth, and second + /// lanes in this vector, respectively. + #[inline] + pub fn wwwy(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 3, 3, 1])) } + } + + /// Constructs a new vector from the first, first, first, and third + /// lanes in this vector, respectively. + #[inline] + pub fn xxxz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 0, 0, 2])) } + } + + /// Constructs a new vector from the second, first, first, and third + /// lanes in this vector, respectively. + #[inline] + pub fn yxxz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 0, 0, 2])) } + } + + /// Constructs a new vector from the third, first, first, and third + /// lanes in this vector, respectively. + #[inline] + pub fn zxxz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 0, 0, 2])) } + } + + /// Constructs a new vector from the fourth, first, first, and third + /// lanes in this vector, respectively. + #[inline] + pub fn wxxz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 0, 0, 2])) } + } + + /// Constructs a new vector from the first, second, first, and third + /// lanes in this vector, respectively. + #[inline] + pub fn xyxz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 1, 0, 2])) } + } + + /// Constructs a new vector from the second, second, first, and third + /// lanes in this vector, respectively. + #[inline] + pub fn yyxz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 1, 0, 2])) } + } + + /// Constructs a new vector from the third, second, first, and third + /// lanes in this vector, respectively. + #[inline] + pub fn zyxz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 1, 0, 2])) } + } + + /// Constructs a new vector from the fourth, second, first, and third + /// lanes in this vector, respectively. + #[inline] + pub fn wyxz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 1, 0, 2])) } + } + + /// Constructs a new vector from the first, third, first, and third + /// lanes in this vector, respectively. + #[inline] + pub fn xzxz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 2, 0, 2])) } + } + + /// Constructs a new vector from the second, third, first, and third + /// lanes in this vector, respectively. + #[inline] + pub fn yzxz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 2, 0, 2])) } + } + + /// Constructs a new vector from the third, third, first, and third + /// lanes in this vector, respectively. + #[inline] + pub fn zzxz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 2, 0, 2])) } + } + + /// Constructs a new vector from the fourth, third, first, and third + /// lanes in this vector, respectively. + #[inline] + pub fn wzxz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 2, 0, 2])) } + } + + /// Constructs a new vector from the first, fourth, first, and third + /// lanes in this vector, respectively. + #[inline] + pub fn xwxz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 3, 0, 2])) } + } + + /// Constructs a new vector from the second, fourth, first, and third + /// lanes in this vector, respectively. + #[inline] + pub fn ywxz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 3, 0, 2])) } + } + + /// Constructs a new vector from the third, fourth, first, and third + /// lanes in this vector, respectively. + #[inline] + pub fn zwxz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 3, 0, 2])) } + } + + /// Constructs a new vector from the fourth, fourth, first, and third + /// lanes in this vector, respectively. + #[inline] + pub fn wwxz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 3, 0, 2])) } + } + + /// Constructs a new vector from the first, first, second, and third + /// lanes in this vector, respectively. + #[inline] + pub fn xxyz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 0, 1, 2])) } + } + + /// Constructs a new vector from the second, first, second, and third + /// lanes in this vector, respectively. + #[inline] + pub fn yxyz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 0, 1, 2])) } + } + + /// Constructs a new vector from the third, first, second, and third + /// lanes in this vector, respectively. + #[inline] + pub fn zxyz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 0, 1, 2])) } + } + + /// Constructs a new vector from the fourth, first, second, and third + /// lanes in this vector, respectively. + #[inline] + pub fn wxyz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 0, 1, 2])) } + } + + /// Constructs a new vector from the first, second, second, and third + /// lanes in this vector, respectively. + #[inline] + pub fn xyyz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 1, 1, 2])) } + } + + /// Constructs a new vector from the second, second, second, and third + /// lanes in this vector, respectively. + #[inline] + pub fn yyyz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 1, 1, 2])) } + } + + /// Constructs a new vector from the third, second, second, and third + /// lanes in this vector, respectively. + #[inline] + pub fn zyyz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 1, 1, 2])) } + } + + /// Constructs a new vector from the fourth, second, second, and third + /// lanes in this vector, respectively. + #[inline] + pub fn wyyz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 1, 1, 2])) } + } + + /// Constructs a new vector from the first, third, second, and third + /// lanes in this vector, respectively. + #[inline] + pub fn xzyz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 2, 1, 2])) } + } + + /// Constructs a new vector from the second, third, second, and third + /// lanes in this vector, respectively. + #[inline] + pub fn yzyz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 2, 1, 2])) } + } + + /// Constructs a new vector from the third, third, second, and third + /// lanes in this vector, respectively. + #[inline] + pub fn zzyz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 2, 1, 2])) } + } + + /// Constructs a new vector from the fourth, third, second, and third + /// lanes in this vector, respectively. + #[inline] + pub fn wzyz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 2, 1, 2])) } + } + + /// Constructs a new vector from the first, fourth, second, and third + /// lanes in this vector, respectively. + #[inline] + pub fn xwyz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 3, 1, 2])) } + } + + /// Constructs a new vector from the second, fourth, second, and third + /// lanes in this vector, respectively. + #[inline] + pub fn ywyz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 3, 1, 2])) } + } + + /// Constructs a new vector from the third, fourth, second, and third + /// lanes in this vector, respectively. + #[inline] + pub fn zwyz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 3, 1, 2])) } + } + + /// Constructs a new vector from the fourth, fourth, second, and third + /// lanes in this vector, respectively. + #[inline] + pub fn wwyz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 3, 1, 2])) } + } + + /// Constructs a new vector from the first, first, third, and third + /// lanes in this vector, respectively. + #[inline] + pub fn xxzz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 0, 2, 2])) } + } + + /// Constructs a new vector from the second, first, third, and third + /// lanes in this vector, respectively. + #[inline] + pub fn yxzz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 0, 2, 2])) } + } + + /// Constructs a new vector from the third, first, third, and third + /// lanes in this vector, respectively. + #[inline] + pub fn zxzz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 0, 2, 2])) } + } + + /// Constructs a new vector from the fourth, first, third, and third + /// lanes in this vector, respectively. + #[inline] + pub fn wxzz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 0, 2, 2])) } + } + + /// Constructs a new vector from the first, second, third, and third + /// lanes in this vector, respectively. + #[inline] + pub fn xyzz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 1, 2, 2])) } + } + + /// Constructs a new vector from the second, second, third, and third + /// lanes in this vector, respectively. + #[inline] + pub fn yyzz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 1, 2, 2])) } + } + + /// Constructs a new vector from the third, second, third, and third + /// lanes in this vector, respectively. + #[inline] + pub fn zyzz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 1, 2, 2])) } + } + + /// Constructs a new vector from the fourth, second, third, and third + /// lanes in this vector, respectively. + #[inline] + pub fn wyzz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 1, 2, 2])) } + } + + /// Constructs a new vector from the first, third, third, and third + /// lanes in this vector, respectively. + #[inline] + pub fn xzzz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 2, 2, 2])) } + } + + /// Constructs a new vector from the second, third, third, and third + /// lanes in this vector, respectively. + #[inline] + pub fn yzzz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 2, 2, 2])) } + } + + /// Constructs a new vector from the third, third, third, and third + /// lanes in this vector, respectively. + #[inline] + pub fn zzzz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 2, 2, 2])) } + } + + /// Constructs a new vector from the fourth, third, third, and third + /// lanes in this vector, respectively. + #[inline] + pub fn wzzz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 2, 2, 2])) } + } + + /// Constructs a new vector from the first, fourth, third, and third + /// lanes in this vector, respectively. + #[inline] + pub fn xwzz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 3, 2, 2])) } + } + + /// Constructs a new vector from the second, fourth, third, and third + /// lanes in this vector, respectively. + #[inline] + pub fn ywzz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 3, 2, 2])) } + } + + /// Constructs a new vector from the third, fourth, third, and third + /// lanes in this vector, respectively. + #[inline] + pub fn zwzz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 3, 2, 2])) } + } + + /// Constructs a new vector from the fourth, fourth, third, and third + /// lanes in this vector, respectively. + #[inline] + pub fn wwzz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 3, 2, 2])) } + } + + /// Constructs a new vector from the first, first, fourth, and third + /// lanes in this vector, respectively. + #[inline] + pub fn xxwz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 0, 3, 2])) } + } + + /// Constructs a new vector from the second, first, fourth, and third + /// lanes in this vector, respectively. + #[inline] + pub fn yxwz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 0, 3, 2])) } + } + + /// Constructs a new vector from the third, first, fourth, and third + /// lanes in this vector, respectively. + #[inline] + pub fn zxwz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 0, 3, 2])) } + } + + /// Constructs a new vector from the fourth, first, fourth, and third + /// lanes in this vector, respectively. + #[inline] + pub fn wxwz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 0, 3, 2])) } + } + + /// Constructs a new vector from the first, second, fourth, and third + /// lanes in this vector, respectively. + #[inline] + pub fn xywz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 1, 3, 2])) } + } + + /// Constructs a new vector from the second, second, fourth, and third + /// lanes in this vector, respectively. + #[inline] + pub fn yywz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 1, 3, 2])) } + } + + /// Constructs a new vector from the third, second, fourth, and third + /// lanes in this vector, respectively. + #[inline] + pub fn zywz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 1, 3, 2])) } + } + + /// Constructs a new vector from the fourth, second, fourth, and third + /// lanes in this vector, respectively. + #[inline] + pub fn wywz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 1, 3, 2])) } + } + + /// Constructs a new vector from the first, third, fourth, and third + /// lanes in this vector, respectively. + #[inline] + pub fn xzwz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 2, 3, 2])) } + } + + /// Constructs a new vector from the second, third, fourth, and third + /// lanes in this vector, respectively. + #[inline] + pub fn yzwz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 2, 3, 2])) } + } + + /// Constructs a new vector from the third, third, fourth, and third + /// lanes in this vector, respectively. + #[inline] + pub fn zzwz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 2, 3, 2])) } + } + + /// Constructs a new vector from the fourth, third, fourth, and third + /// lanes in this vector, respectively. + #[inline] + pub fn wzwz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 2, 3, 2])) } + } + + /// Constructs a new vector from the first, fourth, fourth, and third + /// lanes in this vector, respectively. + #[inline] + pub fn xwwz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 3, 3, 2])) } + } + + /// Constructs a new vector from the second, fourth, fourth, and third + /// lanes in this vector, respectively. + #[inline] + pub fn ywwz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 3, 3, 2])) } + } + + /// Constructs a new vector from the third, fourth, fourth, and third + /// lanes in this vector, respectively. + #[inline] + pub fn zwwz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 3, 3, 2])) } + } + + /// Constructs a new vector from the fourth, fourth, fourth, and third + /// lanes in this vector, respectively. + #[inline] + pub fn wwwz(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 3, 3, 2])) } + } + + /// Constructs a new vector from the first, first, first, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn xxxw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 0, 0, 3])) } + } + + /// Constructs a new vector from the second, first, first, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn yxxw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 0, 0, 3])) } + } + + /// Constructs a new vector from the third, first, first, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn zxxw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 0, 0, 3])) } + } + + /// Constructs a new vector from the fourth, first, first, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn wxxw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 0, 0, 3])) } + } + + /// Constructs a new vector from the first, second, first, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn xyxw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 1, 0, 3])) } + } + + /// Constructs a new vector from the second, second, first, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn yyxw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 1, 0, 3])) } + } + + /// Constructs a new vector from the third, second, first, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn zyxw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 1, 0, 3])) } + } + + /// Constructs a new vector from the fourth, second, first, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn wyxw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 1, 0, 3])) } + } + + /// Constructs a new vector from the first, third, first, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn xzxw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 2, 0, 3])) } + } + + /// Constructs a new vector from the second, third, first, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn yzxw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 2, 0, 3])) } + } + + /// Constructs a new vector from the third, third, first, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn zzxw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 2, 0, 3])) } + } + + /// Constructs a new vector from the fourth, third, first, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn wzxw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 2, 0, 3])) } + } + + /// Constructs a new vector from the first, fourth, first, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn xwxw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 3, 0, 3])) } + } + + /// Constructs a new vector from the second, fourth, first, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn ywxw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 3, 0, 3])) } + } + + /// Constructs a new vector from the third, fourth, first, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn zwxw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 3, 0, 3])) } + } + + /// Constructs a new vector from the fourth, fourth, first, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn wwxw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 3, 0, 3])) } + } + + /// Constructs a new vector from the first, first, second, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn xxyw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 0, 1, 3])) } + } + + /// Constructs a new vector from the second, first, second, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn yxyw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 0, 1, 3])) } + } + + /// Constructs a new vector from the third, first, second, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn zxyw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 0, 1, 3])) } + } + + /// Constructs a new vector from the fourth, first, second, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn wxyw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 0, 1, 3])) } + } + + /// Constructs a new vector from the first, second, second, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn xyyw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 1, 1, 3])) } + } + + /// Constructs a new vector from the second, second, second, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn yyyw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 1, 1, 3])) } + } + + /// Constructs a new vector from the third, second, second, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn zyyw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 1, 1, 3])) } + } + + /// Constructs a new vector from the fourth, second, second, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn wyyw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 1, 1, 3])) } + } + + /// Constructs a new vector from the first, third, second, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn xzyw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 2, 1, 3])) } + } + + /// Constructs a new vector from the second, third, second, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn yzyw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 2, 1, 3])) } + } + + /// Constructs a new vector from the third, third, second, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn zzyw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 2, 1, 3])) } + } + + /// Constructs a new vector from the fourth, third, second, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn wzyw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 2, 1, 3])) } + } + + /// Constructs a new vector from the first, fourth, second, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn xwyw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 3, 1, 3])) } + } + + /// Constructs a new vector from the second, fourth, second, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn ywyw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 3, 1, 3])) } + } + + /// Constructs a new vector from the third, fourth, second, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn zwyw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 3, 1, 3])) } + } + + /// Constructs a new vector from the fourth, fourth, second, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn wwyw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 3, 1, 3])) } + } + + /// Constructs a new vector from the first, first, third, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn xxzw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 0, 2, 3])) } + } + + /// Constructs a new vector from the second, first, third, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn yxzw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 0, 2, 3])) } + } + + /// Constructs a new vector from the third, first, third, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn zxzw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 0, 2, 3])) } + } + + /// Constructs a new vector from the fourth, first, third, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn wxzw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 0, 2, 3])) } + } + + /// Constructs a new vector from the first, second, third, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn xyzw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 1, 2, 3])) } + } + + /// Constructs a new vector from the second, second, third, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn yyzw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 1, 2, 3])) } + } + + /// Constructs a new vector from the third, second, third, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn zyzw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 1, 2, 3])) } + } + + /// Constructs a new vector from the fourth, second, third, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn wyzw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 1, 2, 3])) } + } + + /// Constructs a new vector from the first, third, third, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn xzzw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 2, 2, 3])) } + } + + /// Constructs a new vector from the second, third, third, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn yzzw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 2, 2, 3])) } + } + + /// Constructs a new vector from the third, third, third, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn zzzw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 2, 2, 3])) } + } + + /// Constructs a new vector from the fourth, third, third, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn wzzw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 2, 2, 3])) } + } + + /// Constructs a new vector from the first, fourth, third, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn xwzw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 3, 2, 3])) } + } + + /// Constructs a new vector from the second, fourth, third, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn ywzw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 3, 2, 3])) } + } + + /// Constructs a new vector from the third, fourth, third, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn zwzw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 3, 2, 3])) } + } + + /// Constructs a new vector from the fourth, fourth, third, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn wwzw(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 3, 2, 3])) } + } + + /// Constructs a new vector from the first, first, fourth, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn xxww(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 0, 3, 3])) } + } + + /// Constructs a new vector from the second, first, fourth, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn yxww(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 0, 3, 3])) } + } + + /// Constructs a new vector from the third, first, fourth, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn zxww(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 0, 3, 3])) } + } + + /// Constructs a new vector from the fourth, first, fourth, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn wxww(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 0, 3, 3])) } + } + + /// Constructs a new vector from the first, second, fourth, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn xyww(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 1, 3, 3])) } + } + + /// Constructs a new vector from the second, second, fourth, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn yyww(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 1, 3, 3])) } + } + + /// Constructs a new vector from the third, second, fourth, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn zyww(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 1, 3, 3])) } + } + + /// Constructs a new vector from the fourth, second, fourth, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn wyww(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 1, 3, 3])) } + } + + /// Constructs a new vector from the first, third, fourth, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn xzww(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 2, 3, 3])) } + } + + /// Constructs a new vector from the second, third, fourth, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn yzww(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 2, 3, 3])) } + } + + /// Constructs a new vector from the third, third, fourth, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn zzww(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 2, 3, 3])) } + } + + /// Constructs a new vector from the fourth, third, fourth, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn wzww(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 2, 3, 3])) } + } + + /// Constructs a new vector from the first, fourth, fourth, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn xwww(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [0, 3, 3, 3])) } + } + + /// Constructs a new vector from the second, fourth, fourth, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn ywww(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [1, 3, 3, 3])) } + } + + /// Constructs a new vector from the third, fourth, fourth, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn zwww(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [2, 3, 3, 3])) } + } + + /// Constructs a new vector from the fourth, fourth, fourth, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn wwww(self) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, self.0, [3, 3, 3, 3])) } + } + + + // Concatenations + + #[inline] + pub fn concat_xy_xy(self, other: F32x4) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, other.0, [0, 1, 4, 5])) } + } + + #[inline] + pub fn concat_xy_zw(self, other: F32x4) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, other.0, [0, 1, 6, 7])) } + } + + #[inline] + pub fn concat_zw_zw(self, other: F32x4) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, other.0, [2, 3, 6, 7])) } + } + + #[inline] + pub fn concat_wz_yx(self, other: F32x4) -> F32x4 { + unsafe { F32x4(simd_shuffle4(self.0, other.0, [3, 2, 5, 4])) } + } + + #[inline] + pub fn cross(&self, other: F32x4) -> F32x4 { + unimplemented!() + } +} + +impl Default for F32x4 { + #[inline] + fn default() -> F32x4 { + F32x4::new(0.0, 0.0, 0.0, 0.0) + } +} + +impl Index for F32x4 { + type Output = f32; + #[inline] + fn index(&self, index: usize) -> &f32 { + unsafe { + let ptr = &self.0 as *const float32x4_t as *const f32; + mem::transmute::<*const f32, &f32>(ptr.offset(index as isize)) + } + } +} + +impl IndexMut for F32x4 { + #[inline] + fn index_mut(&mut self, index: usize) -> &mut f32 { + unsafe { + let ptr = &mut self.0 as *mut float32x4_t as *mut f32; + mem::transmute::<*mut f32, &mut f32>(ptr.offset(index as isize)) + } + } +} + +impl Debug for F32x4 { + #[inline] + fn fmt(&self, f: &mut Formatter) -> Result<(), fmt::Error> { + write!(f, "<{}, {}, {}, {}>", self[0], self[1], self[2], self[3]) + } +} + +impl PartialEq for F32x4 { + #[inline] + fn eq(&self, other: &F32x4) -> bool { + self.packed_eq(*other).is_all_ones() + } +} + +impl Add for F32x4 { + type Output = F32x4; + #[inline] + fn add(self, other: F32x4) -> F32x4 { + unsafe { + F32x4(simd_add(self.0, other.0)) + } + } +} + +impl Mul for F32x4 { + type Output = F32x4; + #[inline] + fn mul(self, other: F32x4) -> F32x4 { + unsafe { + F32x4(simd_mul(self.0, other.0)) + } + } +} + +impl Sub for F32x4 { + type Output = F32x4; + #[inline] + fn sub(self, other: F32x4) -> F32x4 { + unsafe { + F32x4(simd_sub(self.0, other.0)) + } + } +} + +// 32-bit signed integers + +#[derive(Clone, Copy, Debug)] +pub struct I32x4(pub int32x4_t); + +impl I32x4 { + #[inline] + pub fn new(a: i32, b: i32, c: i32, d: i32) -> I32x4 { + unsafe { I32x4(mem::transmute([a, b, c, d])) } + } + + #[inline] + pub fn splat(x: i32) -> I32x4 { + I32x4::new(x, x, x, x) + } + + #[inline] + pub fn as_u8x16(self) -> U8x16 { + unsafe { U8x16(*mem::transmute::<&int32x4_t, &uint8x16_t>(&self.0)) } + } + + #[inline] + pub fn min(self, other: I32x4) -> I32x4 { + unsafe { I32x4(simd_fmin(self.0, other.0)) } + } + + // Packed comparisons + + #[inline] + pub fn packed_eq(self, other: I32x4) -> U32x4 { + unsafe { U32x4(simd_eq(self.0, other.0)) } + } + + #[inline] + pub fn packed_le(self, other: I32x4) -> U32x4 { + unsafe { U32x4(simd_le(self.0, other.0)) } + } + + // Shuffles + + /// Constructs a new vector from the first, first, first, and first + /// lanes in this vector, respectively. + #[inline] + pub fn xxxx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 0, 0, 0])) } + } + + /// Constructs a new vector from the second, first, first, and first + /// lanes in this vector, respectively. + #[inline] + pub fn yxxx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 0, 0, 0])) } + } + + /// Constructs a new vector from the third, first, first, and first + /// lanes in this vector, respectively. + #[inline] + pub fn zxxx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 0, 0, 0])) } + } + + /// Constructs a new vector from the fourth, first, first, and first + /// lanes in this vector, respectively. + #[inline] + pub fn wxxx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 0, 0, 0])) } + } + + /// Constructs a new vector from the first, second, first, and first + /// lanes in this vector, respectively. + #[inline] + pub fn xyxx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 1, 0, 0])) } + } + + /// Constructs a new vector from the second, second, first, and first + /// lanes in this vector, respectively. + #[inline] + pub fn yyxx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 1, 0, 0])) } + } + + /// Constructs a new vector from the third, second, first, and first + /// lanes in this vector, respectively. + #[inline] + pub fn zyxx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 1, 0, 0])) } + } + + /// Constructs a new vector from the fourth, second, first, and first + /// lanes in this vector, respectively. + #[inline] + pub fn wyxx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 1, 0, 0])) } + } + + /// Constructs a new vector from the first, third, first, and first + /// lanes in this vector, respectively. + #[inline] + pub fn xzxx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 2, 0, 0])) } + } + + /// Constructs a new vector from the second, third, first, and first + /// lanes in this vector, respectively. + #[inline] + pub fn yzxx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 2, 0, 0])) } + } + + /// Constructs a new vector from the third, third, first, and first + /// lanes in this vector, respectively. + #[inline] + pub fn zzxx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 2, 0, 0])) } + } + + /// Constructs a new vector from the fourth, third, first, and first + /// lanes in this vector, respectively. + #[inline] + pub fn wzxx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 2, 0, 0])) } + } + + /// Constructs a new vector from the first, fourth, first, and first + /// lanes in this vector, respectively. + #[inline] + pub fn xwxx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 3, 0, 0])) } + } + + /// Constructs a new vector from the second, fourth, first, and first + /// lanes in this vector, respectively. + #[inline] + pub fn ywxx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 3, 0, 0])) } + } + + /// Constructs a new vector from the third, fourth, first, and first + /// lanes in this vector, respectively. + #[inline] + pub fn zwxx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 3, 0, 0])) } + } + + /// Constructs a new vector from the fourth, fourth, first, and first + /// lanes in this vector, respectively. + #[inline] + pub fn wwxx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 3, 0, 0])) } + } + + /// Constructs a new vector from the first, first, second, and first + /// lanes in this vector, respectively. + #[inline] + pub fn xxyx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 0, 1, 0])) } + } + + /// Constructs a new vector from the second, first, second, and first + /// lanes in this vector, respectively. + #[inline] + pub fn yxyx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 0, 1, 0])) } + } + + /// Constructs a new vector from the third, first, second, and first + /// lanes in this vector, respectively. + #[inline] + pub fn zxyx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 0, 1, 0])) } + } + + /// Constructs a new vector from the fourth, first, second, and first + /// lanes in this vector, respectively. + #[inline] + pub fn wxyx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 0, 1, 0])) } + } + + /// Constructs a new vector from the first, second, second, and first + /// lanes in this vector, respectively. + #[inline] + pub fn xyyx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 1, 1, 0])) } + } + + /// Constructs a new vector from the second, second, second, and first + /// lanes in this vector, respectively. + #[inline] + pub fn yyyx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 1, 1, 0])) } + } + + /// Constructs a new vector from the third, second, second, and first + /// lanes in this vector, respectively. + #[inline] + pub fn zyyx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 1, 1, 0])) } + } + + /// Constructs a new vector from the fourth, second, second, and first + /// lanes in this vector, respectively. + #[inline] + pub fn wyyx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 1, 1, 0])) } + } + + /// Constructs a new vector from the first, third, second, and first + /// lanes in this vector, respectively. + #[inline] + pub fn xzyx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 2, 1, 0])) } + } + + /// Constructs a new vector from the second, third, second, and first + /// lanes in this vector, respectively. + #[inline] + pub fn yzyx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 2, 1, 0])) } + } + + /// Constructs a new vector from the third, third, second, and first + /// lanes in this vector, respectively. + #[inline] + pub fn zzyx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 2, 1, 0])) } + } + + /// Constructs a new vector from the fourth, third, second, and first + /// lanes in this vector, respectively. + #[inline] + pub fn wzyx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 2, 1, 0])) } + } + + /// Constructs a new vector from the first, fourth, second, and first + /// lanes in this vector, respectively. + #[inline] + pub fn xwyx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 3, 1, 0])) } + } + + /// Constructs a new vector from the second, fourth, second, and first + /// lanes in this vector, respectively. + #[inline] + pub fn ywyx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 3, 1, 0])) } + } + + /// Constructs a new vector from the third, fourth, second, and first + /// lanes in this vector, respectively. + #[inline] + pub fn zwyx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 3, 1, 0])) } + } + + /// Constructs a new vector from the fourth, fourth, second, and first + /// lanes in this vector, respectively. + #[inline] + pub fn wwyx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 3, 1, 0])) } + } + + /// Constructs a new vector from the first, first, third, and first + /// lanes in this vector, respectively. + #[inline] + pub fn xxzx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 0, 2, 0])) } + } + + /// Constructs a new vector from the second, first, third, and first + /// lanes in this vector, respectively. + #[inline] + pub fn yxzx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 0, 2, 0])) } + } + + /// Constructs a new vector from the third, first, third, and first + /// lanes in this vector, respectively. + #[inline] + pub fn zxzx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 0, 2, 0])) } + } + + /// Constructs a new vector from the fourth, first, third, and first + /// lanes in this vector, respectively. + #[inline] + pub fn wxzx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 0, 2, 0])) } + } + + /// Constructs a new vector from the first, second, third, and first + /// lanes in this vector, respectively. + #[inline] + pub fn xyzx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 1, 2, 0])) } + } + + /// Constructs a new vector from the second, second, third, and first + /// lanes in this vector, respectively. + #[inline] + pub fn yyzx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 1, 2, 0])) } + } + + /// Constructs a new vector from the third, second, third, and first + /// lanes in this vector, respectively. + #[inline] + pub fn zyzx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 1, 2, 0])) } + } + + /// Constructs a new vector from the fourth, second, third, and first + /// lanes in this vector, respectively. + #[inline] + pub fn wyzx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 1, 2, 0])) } + } + + /// Constructs a new vector from the first, third, third, and first + /// lanes in this vector, respectively. + #[inline] + pub fn xzzx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 2, 2, 0])) } + } + + /// Constructs a new vector from the second, third, third, and first + /// lanes in this vector, respectively. + #[inline] + pub fn yzzx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 2, 2, 0])) } + } + + /// Constructs a new vector from the third, third, third, and first + /// lanes in this vector, respectively. + #[inline] + pub fn zzzx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 2, 2, 0])) } + } + + /// Constructs a new vector from the fourth, third, third, and first + /// lanes in this vector, respectively. + #[inline] + pub fn wzzx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 2, 2, 0])) } + } + + /// Constructs a new vector from the first, fourth, third, and first + /// lanes in this vector, respectively. + #[inline] + pub fn xwzx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 3, 2, 0])) } + } + + /// Constructs a new vector from the second, fourth, third, and first + /// lanes in this vector, respectively. + #[inline] + pub fn ywzx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 3, 2, 0])) } + } + + /// Constructs a new vector from the third, fourth, third, and first + /// lanes in this vector, respectively. + #[inline] + pub fn zwzx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 3, 2, 0])) } + } + + /// Constructs a new vector from the fourth, fourth, third, and first + /// lanes in this vector, respectively. + #[inline] + pub fn wwzx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 3, 2, 0])) } + } + + /// Constructs a new vector from the first, first, fourth, and first + /// lanes in this vector, respectively. + #[inline] + pub fn xxwx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 0, 3, 0])) } + } + + /// Constructs a new vector from the second, first, fourth, and first + /// lanes in this vector, respectively. + #[inline] + pub fn yxwx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 0, 3, 0])) } + } + + /// Constructs a new vector from the third, first, fourth, and first + /// lanes in this vector, respectively. + #[inline] + pub fn zxwx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 0, 3, 0])) } + } + + /// Constructs a new vector from the fourth, first, fourth, and first + /// lanes in this vector, respectively. + #[inline] + pub fn wxwx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 0, 3, 0])) } + } + + /// Constructs a new vector from the first, second, fourth, and first + /// lanes in this vector, respectively. + #[inline] + pub fn xywx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 1, 3, 0])) } + } + + /// Constructs a new vector from the second, second, fourth, and first + /// lanes in this vector, respectively. + #[inline] + pub fn yywx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 1, 3, 0])) } + } + + /// Constructs a new vector from the third, second, fourth, and first + /// lanes in this vector, respectively. + #[inline] + pub fn zywx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 1, 3, 0])) } + } + + /// Constructs a new vector from the fourth, second, fourth, and first + /// lanes in this vector, respectively. + #[inline] + pub fn wywx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 1, 3, 0])) } + } + + /// Constructs a new vector from the first, third, fourth, and first + /// lanes in this vector, respectively. + #[inline] + pub fn xzwx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 2, 3, 0])) } + } + + /// Constructs a new vector from the second, third, fourth, and first + /// lanes in this vector, respectively. + #[inline] + pub fn yzwx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 2, 3, 0])) } + } + + /// Constructs a new vector from the third, third, fourth, and first + /// lanes in this vector, respectively. + #[inline] + pub fn zzwx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 2, 3, 0])) } + } + + /// Constructs a new vector from the fourth, third, fourth, and first + /// lanes in this vector, respectively. + #[inline] + pub fn wzwx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 2, 3, 0])) } + } + + /// Constructs a new vector from the first, fourth, fourth, and first + /// lanes in this vector, respectively. + #[inline] + pub fn xwwx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 3, 3, 0])) } + } + + /// Constructs a new vector from the second, fourth, fourth, and first + /// lanes in this vector, respectively. + #[inline] + pub fn ywwx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 3, 3, 0])) } + } + + /// Constructs a new vector from the third, fourth, fourth, and first + /// lanes in this vector, respectively. + #[inline] + pub fn zwwx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 3, 3, 0])) } + } + + /// Constructs a new vector from the fourth, fourth, fourth, and first + /// lanes in this vector, respectively. + #[inline] + pub fn wwwx(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 3, 3, 0])) } + } + + /// Constructs a new vector from the first, first, first, and second + /// lanes in this vector, respectively. + #[inline] + pub fn xxxy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 0, 0, 1])) } + } + + /// Constructs a new vector from the second, first, first, and second + /// lanes in this vector, respectively. + #[inline] + pub fn yxxy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 0, 0, 1])) } + } + + /// Constructs a new vector from the third, first, first, and second + /// lanes in this vector, respectively. + #[inline] + pub fn zxxy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 0, 0, 1])) } + } + + /// Constructs a new vector from the fourth, first, first, and second + /// lanes in this vector, respectively. + #[inline] + pub fn wxxy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 0, 0, 1])) } + } + + /// Constructs a new vector from the first, second, first, and second + /// lanes in this vector, respectively. + #[inline] + pub fn xyxy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 1, 0, 1])) } + } + + /// Constructs a new vector from the second, second, first, and second + /// lanes in this vector, respectively. + #[inline] + pub fn yyxy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 1, 0, 1])) } + } + + /// Constructs a new vector from the third, second, first, and second + /// lanes in this vector, respectively. + #[inline] + pub fn zyxy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 1, 0, 1])) } + } + + /// Constructs a new vector from the fourth, second, first, and second + /// lanes in this vector, respectively. + #[inline] + pub fn wyxy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 1, 0, 1])) } + } + + /// Constructs a new vector from the first, third, first, and second + /// lanes in this vector, respectively. + #[inline] + pub fn xzxy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 2, 0, 1])) } + } + + /// Constructs a new vector from the second, third, first, and second + /// lanes in this vector, respectively. + #[inline] + pub fn yzxy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 2, 0, 1])) } + } + + /// Constructs a new vector from the third, third, first, and second + /// lanes in this vector, respectively. + #[inline] + pub fn zzxy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 2, 0, 1])) } + } + + /// Constructs a new vector from the fourth, third, first, and second + /// lanes in this vector, respectively. + #[inline] + pub fn wzxy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 2, 0, 1])) } + } + + /// Constructs a new vector from the first, fourth, first, and second + /// lanes in this vector, respectively. + #[inline] + pub fn xwxy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 3, 0, 1])) } + } + + /// Constructs a new vector from the second, fourth, first, and second + /// lanes in this vector, respectively. + #[inline] + pub fn ywxy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 3, 0, 1])) } + } + + /// Constructs a new vector from the third, fourth, first, and second + /// lanes in this vector, respectively. + #[inline] + pub fn zwxy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 3, 0, 1])) } + } + + /// Constructs a new vector from the fourth, fourth, first, and second + /// lanes in this vector, respectively. + #[inline] + pub fn wwxy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 3, 0, 1])) } + } + + /// Constructs a new vector from the first, first, second, and second + /// lanes in this vector, respectively. + #[inline] + pub fn xxyy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 0, 1, 1])) } + } + + /// Constructs a new vector from the second, first, second, and second + /// lanes in this vector, respectively. + #[inline] + pub fn yxyy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 0, 1, 1])) } + } + + /// Constructs a new vector from the third, first, second, and second + /// lanes in this vector, respectively. + #[inline] + pub fn zxyy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 0, 1, 1])) } + } + + /// Constructs a new vector from the fourth, first, second, and second + /// lanes in this vector, respectively. + #[inline] + pub fn wxyy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 0, 1, 1])) } + } + + /// Constructs a new vector from the first, second, second, and second + /// lanes in this vector, respectively. + #[inline] + pub fn xyyy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 1, 1, 1])) } + } + + /// Constructs a new vector from the second, second, second, and second + /// lanes in this vector, respectively. + #[inline] + pub fn yyyy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 1, 1, 1])) } + } + + /// Constructs a new vector from the third, second, second, and second + /// lanes in this vector, respectively. + #[inline] + pub fn zyyy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 1, 1, 1])) } + } + + /// Constructs a new vector from the fourth, second, second, and second + /// lanes in this vector, respectively. + #[inline] + pub fn wyyy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 1, 1, 1])) } + } + + /// Constructs a new vector from the first, third, second, and second + /// lanes in this vector, respectively. + #[inline] + pub fn xzyy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 2, 1, 1])) } + } + + /// Constructs a new vector from the second, third, second, and second + /// lanes in this vector, respectively. + #[inline] + pub fn yzyy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 2, 1, 1])) } + } + + /// Constructs a new vector from the third, third, second, and second + /// lanes in this vector, respectively. + #[inline] + pub fn zzyy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 2, 1, 1])) } + } + + /// Constructs a new vector from the fourth, third, second, and second + /// lanes in this vector, respectively. + #[inline] + pub fn wzyy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 2, 1, 1])) } + } + + /// Constructs a new vector from the first, fourth, second, and second + /// lanes in this vector, respectively. + #[inline] + pub fn xwyy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 3, 1, 1])) } + } + + /// Constructs a new vector from the second, fourth, second, and second + /// lanes in this vector, respectively. + #[inline] + pub fn ywyy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 3, 1, 1])) } + } + + /// Constructs a new vector from the third, fourth, second, and second + /// lanes in this vector, respectively. + #[inline] + pub fn zwyy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 3, 1, 1])) } + } + + /// Constructs a new vector from the fourth, fourth, second, and second + /// lanes in this vector, respectively. + #[inline] + pub fn wwyy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 3, 1, 1])) } + } + + /// Constructs a new vector from the first, first, third, and second + /// lanes in this vector, respectively. + #[inline] + pub fn xxzy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 0, 2, 1])) } + } + + /// Constructs a new vector from the second, first, third, and second + /// lanes in this vector, respectively. + #[inline] + pub fn yxzy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 0, 2, 1])) } + } + + /// Constructs a new vector from the third, first, third, and second + /// lanes in this vector, respectively. + #[inline] + pub fn zxzy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 0, 2, 1])) } + } + + /// Constructs a new vector from the fourth, first, third, and second + /// lanes in this vector, respectively. + #[inline] + pub fn wxzy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 0, 2, 1])) } + } + + /// Constructs a new vector from the first, second, third, and second + /// lanes in this vector, respectively. + #[inline] + pub fn xyzy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 1, 2, 1])) } + } + + /// Constructs a new vector from the second, second, third, and second + /// lanes in this vector, respectively. + #[inline] + pub fn yyzy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 1, 2, 1])) } + } + + /// Constructs a new vector from the third, second, third, and second + /// lanes in this vector, respectively. + #[inline] + pub fn zyzy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 1, 2, 1])) } + } + + /// Constructs a new vector from the fourth, second, third, and second + /// lanes in this vector, respectively. + #[inline] + pub fn wyzy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 1, 2, 1])) } + } + + /// Constructs a new vector from the first, third, third, and second + /// lanes in this vector, respectively. + #[inline] + pub fn xzzy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 2, 2, 1])) } + } + + /// Constructs a new vector from the second, third, third, and second + /// lanes in this vector, respectively. + #[inline] + pub fn yzzy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 2, 2, 1])) } + } + + /// Constructs a new vector from the third, third, third, and second + /// lanes in this vector, respectively. + #[inline] + pub fn zzzy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 2, 2, 1])) } + } + + /// Constructs a new vector from the fourth, third, third, and second + /// lanes in this vector, respectively. + #[inline] + pub fn wzzy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 2, 2, 1])) } + } + + /// Constructs a new vector from the first, fourth, third, and second + /// lanes in this vector, respectively. + #[inline] + pub fn xwzy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 3, 2, 1])) } + } + + /// Constructs a new vector from the second, fourth, third, and second + /// lanes in this vector, respectively. + #[inline] + pub fn ywzy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 3, 2, 1])) } + } + + /// Constructs a new vector from the third, fourth, third, and second + /// lanes in this vector, respectively. + #[inline] + pub fn zwzy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 3, 2, 1])) } + } + + /// Constructs a new vector from the fourth, fourth, third, and second + /// lanes in this vector, respectively. + #[inline] + pub fn wwzy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 3, 2, 1])) } + } + + /// Constructs a new vector from the first, first, fourth, and second + /// lanes in this vector, respectively. + #[inline] + pub fn xxwy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 0, 3, 1])) } + } + + /// Constructs a new vector from the second, first, fourth, and second + /// lanes in this vector, respectively. + #[inline] + pub fn yxwy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 0, 3, 1])) } + } + + /// Constructs a new vector from the third, first, fourth, and second + /// lanes in this vector, respectively. + #[inline] + pub fn zxwy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 0, 3, 1])) } + } + + /// Constructs a new vector from the fourth, first, fourth, and second + /// lanes in this vector, respectively. + #[inline] + pub fn wxwy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 0, 3, 1])) } + } + + /// Constructs a new vector from the first, second, fourth, and second + /// lanes in this vector, respectively. + #[inline] + pub fn xywy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 1, 3, 1])) } + } + + /// Constructs a new vector from the second, second, fourth, and second + /// lanes in this vector, respectively. + #[inline] + pub fn yywy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 1, 3, 1])) } + } + + /// Constructs a new vector from the third, second, fourth, and second + /// lanes in this vector, respectively. + #[inline] + pub fn zywy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 1, 3, 1])) } + } + + /// Constructs a new vector from the fourth, second, fourth, and second + /// lanes in this vector, respectively. + #[inline] + pub fn wywy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 1, 3, 1])) } + } + + /// Constructs a new vector from the first, third, fourth, and second + /// lanes in this vector, respectively. + #[inline] + pub fn xzwy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 2, 3, 1])) } + } + + /// Constructs a new vector from the second, third, fourth, and second + /// lanes in this vector, respectively. + #[inline] + pub fn yzwy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 2, 3, 1])) } + } + + /// Constructs a new vector from the third, third, fourth, and second + /// lanes in this vector, respectively. + #[inline] + pub fn zzwy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 2, 3, 1])) } + } + + /// Constructs a new vector from the fourth, third, fourth, and second + /// lanes in this vector, respectively. + #[inline] + pub fn wzwy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 2, 3, 1])) } + } + + /// Constructs a new vector from the first, fourth, fourth, and second + /// lanes in this vector, respectively. + #[inline] + pub fn xwwy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 3, 3, 1])) } + } + + /// Constructs a new vector from the second, fourth, fourth, and second + /// lanes in this vector, respectively. + #[inline] + pub fn ywwy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 3, 3, 1])) } + } + + /// Constructs a new vector from the third, fourth, fourth, and second + /// lanes in this vector, respectively. + #[inline] + pub fn zwwy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 3, 3, 1])) } + } + + /// Constructs a new vector from the fourth, fourth, fourth, and second + /// lanes in this vector, respectively. + #[inline] + pub fn wwwy(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 3, 3, 1])) } + } + + /// Constructs a new vector from the first, first, first, and third + /// lanes in this vector, respectively. + #[inline] + pub fn xxxz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 0, 0, 2])) } + } + + /// Constructs a new vector from the second, first, first, and third + /// lanes in this vector, respectively. + #[inline] + pub fn yxxz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 0, 0, 2])) } + } + + /// Constructs a new vector from the third, first, first, and third + /// lanes in this vector, respectively. + #[inline] + pub fn zxxz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 0, 0, 2])) } + } + + /// Constructs a new vector from the fourth, first, first, and third + /// lanes in this vector, respectively. + #[inline] + pub fn wxxz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 0, 0, 2])) } + } + + /// Constructs a new vector from the first, second, first, and third + /// lanes in this vector, respectively. + #[inline] + pub fn xyxz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 1, 0, 2])) } + } + + /// Constructs a new vector from the second, second, first, and third + /// lanes in this vector, respectively. + #[inline] + pub fn yyxz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 1, 0, 2])) } + } + + /// Constructs a new vector from the third, second, first, and third + /// lanes in this vector, respectively. + #[inline] + pub fn zyxz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 1, 0, 2])) } + } + + /// Constructs a new vector from the fourth, second, first, and third + /// lanes in this vector, respectively. + #[inline] + pub fn wyxz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 1, 0, 2])) } + } + + /// Constructs a new vector from the first, third, first, and third + /// lanes in this vector, respectively. + #[inline] + pub fn xzxz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 2, 0, 2])) } + } + + /// Constructs a new vector from the second, third, first, and third + /// lanes in this vector, respectively. + #[inline] + pub fn yzxz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 2, 0, 2])) } + } + + /// Constructs a new vector from the third, third, first, and third + /// lanes in this vector, respectively. + #[inline] + pub fn zzxz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 2, 0, 2])) } + } + + /// Constructs a new vector from the fourth, third, first, and third + /// lanes in this vector, respectively. + #[inline] + pub fn wzxz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 2, 0, 2])) } + } + + /// Constructs a new vector from the first, fourth, first, and third + /// lanes in this vector, respectively. + #[inline] + pub fn xwxz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 3, 0, 2])) } + } + + /// Constructs a new vector from the second, fourth, first, and third + /// lanes in this vector, respectively. + #[inline] + pub fn ywxz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 3, 0, 2])) } + } + + /// Constructs a new vector from the third, fourth, first, and third + /// lanes in this vector, respectively. + #[inline] + pub fn zwxz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 3, 0, 2])) } + } + + /// Constructs a new vector from the fourth, fourth, first, and third + /// lanes in this vector, respectively. + #[inline] + pub fn wwxz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 3, 0, 2])) } + } + + /// Constructs a new vector from the first, first, second, and third + /// lanes in this vector, respectively. + #[inline] + pub fn xxyz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 0, 1, 2])) } + } + + /// Constructs a new vector from the second, first, second, and third + /// lanes in this vector, respectively. + #[inline] + pub fn yxyz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 0, 1, 2])) } + } + + /// Constructs a new vector from the third, first, second, and third + /// lanes in this vector, respectively. + #[inline] + pub fn zxyz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 0, 1, 2])) } + } + + /// Constructs a new vector from the fourth, first, second, and third + /// lanes in this vector, respectively. + #[inline] + pub fn wxyz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 0, 1, 2])) } + } + + /// Constructs a new vector from the first, second, second, and third + /// lanes in this vector, respectively. + #[inline] + pub fn xyyz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 1, 1, 2])) } + } + + /// Constructs a new vector from the second, second, second, and third + /// lanes in this vector, respectively. + #[inline] + pub fn yyyz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 1, 1, 2])) } + } + + /// Constructs a new vector from the third, second, second, and third + /// lanes in this vector, respectively. + #[inline] + pub fn zyyz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 1, 1, 2])) } + } + + /// Constructs a new vector from the fourth, second, second, and third + /// lanes in this vector, respectively. + #[inline] + pub fn wyyz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 1, 1, 2])) } + } + + /// Constructs a new vector from the first, third, second, and third + /// lanes in this vector, respectively. + #[inline] + pub fn xzyz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 2, 1, 2])) } + } + + /// Constructs a new vector from the second, third, second, and third + /// lanes in this vector, respectively. + #[inline] + pub fn yzyz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 2, 1, 2])) } + } + + /// Constructs a new vector from the third, third, second, and third + /// lanes in this vector, respectively. + #[inline] + pub fn zzyz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 2, 1, 2])) } + } + + /// Constructs a new vector from the fourth, third, second, and third + /// lanes in this vector, respectively. + #[inline] + pub fn wzyz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 2, 1, 2])) } + } + + /// Constructs a new vector from the first, fourth, second, and third + /// lanes in this vector, respectively. + #[inline] + pub fn xwyz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 3, 1, 2])) } + } + + /// Constructs a new vector from the second, fourth, second, and third + /// lanes in this vector, respectively. + #[inline] + pub fn ywyz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 3, 1, 2])) } + } + + /// Constructs a new vector from the third, fourth, second, and third + /// lanes in this vector, respectively. + #[inline] + pub fn zwyz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 3, 1, 2])) } + } + + /// Constructs a new vector from the fourth, fourth, second, and third + /// lanes in this vector, respectively. + #[inline] + pub fn wwyz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 3, 1, 2])) } + } + + /// Constructs a new vector from the first, first, third, and third + /// lanes in this vector, respectively. + #[inline] + pub fn xxzz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 0, 2, 2])) } + } + + /// Constructs a new vector from the second, first, third, and third + /// lanes in this vector, respectively. + #[inline] + pub fn yxzz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 0, 2, 2])) } + } + + /// Constructs a new vector from the third, first, third, and third + /// lanes in this vector, respectively. + #[inline] + pub fn zxzz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 0, 2, 2])) } + } + + /// Constructs a new vector from the fourth, first, third, and third + /// lanes in this vector, respectively. + #[inline] + pub fn wxzz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 0, 2, 2])) } + } + + /// Constructs a new vector from the first, second, third, and third + /// lanes in this vector, respectively. + #[inline] + pub fn xyzz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 1, 2, 2])) } + } + + /// Constructs a new vector from the second, second, third, and third + /// lanes in this vector, respectively. + #[inline] + pub fn yyzz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 1, 2, 2])) } + } + + /// Constructs a new vector from the third, second, third, and third + /// lanes in this vector, respectively. + #[inline] + pub fn zyzz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 1, 2, 2])) } + } + + /// Constructs a new vector from the fourth, second, third, and third + /// lanes in this vector, respectively. + #[inline] + pub fn wyzz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 1, 2, 2])) } + } + + /// Constructs a new vector from the first, third, third, and third + /// lanes in this vector, respectively. + #[inline] + pub fn xzzz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 2, 2, 2])) } + } + + /// Constructs a new vector from the second, third, third, and third + /// lanes in this vector, respectively. + #[inline] + pub fn yzzz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 2, 2, 2])) } + } + + /// Constructs a new vector from the third, third, third, and third + /// lanes in this vector, respectively. + #[inline] + pub fn zzzz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 2, 2, 2])) } + } + + /// Constructs a new vector from the fourth, third, third, and third + /// lanes in this vector, respectively. + #[inline] + pub fn wzzz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 2, 2, 2])) } + } + + /// Constructs a new vector from the first, fourth, third, and third + /// lanes in this vector, respectively. + #[inline] + pub fn xwzz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 3, 2, 2])) } + } + + /// Constructs a new vector from the second, fourth, third, and third + /// lanes in this vector, respectively. + #[inline] + pub fn ywzz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 3, 2, 2])) } + } + + /// Constructs a new vector from the third, fourth, third, and third + /// lanes in this vector, respectively. + #[inline] + pub fn zwzz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 3, 2, 2])) } + } + + /// Constructs a new vector from the fourth, fourth, third, and third + /// lanes in this vector, respectively. + #[inline] + pub fn wwzz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 3, 2, 2])) } + } + + /// Constructs a new vector from the first, first, fourth, and third + /// lanes in this vector, respectively. + #[inline] + pub fn xxwz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 0, 3, 2])) } + } + + /// Constructs a new vector from the second, first, fourth, and third + /// lanes in this vector, respectively. + #[inline] + pub fn yxwz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 0, 3, 2])) } + } + + /// Constructs a new vector from the third, first, fourth, and third + /// lanes in this vector, respectively. + #[inline] + pub fn zxwz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 0, 3, 2])) } + } + + /// Constructs a new vector from the fourth, first, fourth, and third + /// lanes in this vector, respectively. + #[inline] + pub fn wxwz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 0, 3, 2])) } + } + + /// Constructs a new vector from the first, second, fourth, and third + /// lanes in this vector, respectively. + #[inline] + pub fn xywz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 1, 3, 2])) } + } + + /// Constructs a new vector from the second, second, fourth, and third + /// lanes in this vector, respectively. + #[inline] + pub fn yywz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 1, 3, 2])) } + } + + /// Constructs a new vector from the third, second, fourth, and third + /// lanes in this vector, respectively. + #[inline] + pub fn zywz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 1, 3, 2])) } + } + + /// Constructs a new vector from the fourth, second, fourth, and third + /// lanes in this vector, respectively. + #[inline] + pub fn wywz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 1, 3, 2])) } + } + + /// Constructs a new vector from the first, third, fourth, and third + /// lanes in this vector, respectively. + #[inline] + pub fn xzwz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 2, 3, 2])) } + } + + /// Constructs a new vector from the second, third, fourth, and third + /// lanes in this vector, respectively. + #[inline] + pub fn yzwz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 2, 3, 2])) } + } + + /// Constructs a new vector from the third, third, fourth, and third + /// lanes in this vector, respectively. + #[inline] + pub fn zzwz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 2, 3, 2])) } + } + + /// Constructs a new vector from the fourth, third, fourth, and third + /// lanes in this vector, respectively. + #[inline] + pub fn wzwz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 2, 3, 2])) } + } + + /// Constructs a new vector from the first, fourth, fourth, and third + /// lanes in this vector, respectively. + #[inline] + pub fn xwwz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 3, 3, 2])) } + } + + /// Constructs a new vector from the second, fourth, fourth, and third + /// lanes in this vector, respectively. + #[inline] + pub fn ywwz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 3, 3, 2])) } + } + + /// Constructs a new vector from the third, fourth, fourth, and third + /// lanes in this vector, respectively. + #[inline] + pub fn zwwz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 3, 3, 2])) } + } + + /// Constructs a new vector from the fourth, fourth, fourth, and third + /// lanes in this vector, respectively. + #[inline] + pub fn wwwz(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 3, 3, 2])) } + } + + /// Constructs a new vector from the first, first, first, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn xxxw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 0, 0, 3])) } + } + + /// Constructs a new vector from the second, first, first, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn yxxw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 0, 0, 3])) } + } + + /// Constructs a new vector from the third, first, first, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn zxxw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 0, 0, 3])) } + } + + /// Constructs a new vector from the fourth, first, first, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn wxxw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 0, 0, 3])) } + } + + /// Constructs a new vector from the first, second, first, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn xyxw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 1, 0, 3])) } + } + + /// Constructs a new vector from the second, second, first, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn yyxw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 1, 0, 3])) } + } + + /// Constructs a new vector from the third, second, first, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn zyxw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 1, 0, 3])) } + } + + /// Constructs a new vector from the fourth, second, first, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn wyxw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 1, 0, 3])) } + } + + /// Constructs a new vector from the first, third, first, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn xzxw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 2, 0, 3])) } + } + + /// Constructs a new vector from the second, third, first, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn yzxw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 2, 0, 3])) } + } + + /// Constructs a new vector from the third, third, first, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn zzxw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 2, 0, 3])) } + } + + /// Constructs a new vector from the fourth, third, first, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn wzxw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 2, 0, 3])) } + } + + /// Constructs a new vector from the first, fourth, first, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn xwxw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 3, 0, 3])) } + } + + /// Constructs a new vector from the second, fourth, first, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn ywxw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 3, 0, 3])) } + } + + /// Constructs a new vector from the third, fourth, first, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn zwxw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 3, 0, 3])) } + } + + /// Constructs a new vector from the fourth, fourth, first, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn wwxw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 3, 0, 3])) } + } + + /// Constructs a new vector from the first, first, second, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn xxyw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 0, 1, 3])) } + } + + /// Constructs a new vector from the second, first, second, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn yxyw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 0, 1, 3])) } + } + + /// Constructs a new vector from the third, first, second, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn zxyw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 0, 1, 3])) } + } + + /// Constructs a new vector from the fourth, first, second, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn wxyw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 0, 1, 3])) } + } + + /// Constructs a new vector from the first, second, second, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn xyyw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 1, 1, 3])) } + } + + /// Constructs a new vector from the second, second, second, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn yyyw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 1, 1, 3])) } + } + + /// Constructs a new vector from the third, second, second, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn zyyw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 1, 1, 3])) } + } + + /// Constructs a new vector from the fourth, second, second, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn wyyw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 1, 1, 3])) } + } + + /// Constructs a new vector from the first, third, second, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn xzyw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 2, 1, 3])) } + } + + /// Constructs a new vector from the second, third, second, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn yzyw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 2, 1, 3])) } + } + + /// Constructs a new vector from the third, third, second, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn zzyw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 2, 1, 3])) } + } + + /// Constructs a new vector from the fourth, third, second, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn wzyw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 2, 1, 3])) } + } + + /// Constructs a new vector from the first, fourth, second, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn xwyw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 3, 1, 3])) } + } + + /// Constructs a new vector from the second, fourth, second, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn ywyw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 3, 1, 3])) } + } + + /// Constructs a new vector from the third, fourth, second, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn zwyw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 3, 1, 3])) } + } + + /// Constructs a new vector from the fourth, fourth, second, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn wwyw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 3, 1, 3])) } + } + + /// Constructs a new vector from the first, first, third, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn xxzw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 0, 2, 3])) } + } + + /// Constructs a new vector from the second, first, third, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn yxzw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 0, 2, 3])) } + } + + /// Constructs a new vector from the third, first, third, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn zxzw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 0, 2, 3])) } + } + + /// Constructs a new vector from the fourth, first, third, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn wxzw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 0, 2, 3])) } + } + + /// Constructs a new vector from the first, second, third, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn xyzw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 1, 2, 3])) } + } + + /// Constructs a new vector from the second, second, third, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn yyzw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 1, 2, 3])) } + } + + /// Constructs a new vector from the third, second, third, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn zyzw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 1, 2, 3])) } + } + + /// Constructs a new vector from the fourth, second, third, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn wyzw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 1, 2, 3])) } + } + + /// Constructs a new vector from the first, third, third, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn xzzw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 2, 2, 3])) } + } + + /// Constructs a new vector from the second, third, third, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn yzzw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 2, 2, 3])) } + } + + /// Constructs a new vector from the third, third, third, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn zzzw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 2, 2, 3])) } + } + + /// Constructs a new vector from the fourth, third, third, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn wzzw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 2, 2, 3])) } + } + + /// Constructs a new vector from the first, fourth, third, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn xwzw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 3, 2, 3])) } + } + + /// Constructs a new vector from the second, fourth, third, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn ywzw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 3, 2, 3])) } + } + + /// Constructs a new vector from the third, fourth, third, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn zwzw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 3, 2, 3])) } + } + + /// Constructs a new vector from the fourth, fourth, third, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn wwzw(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 3, 2, 3])) } + } + + /// Constructs a new vector from the first, first, fourth, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn xxww(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 0, 3, 3])) } + } + + /// Constructs a new vector from the second, first, fourth, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn yxww(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 0, 3, 3])) } + } + + /// Constructs a new vector from the third, first, fourth, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn zxww(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 0, 3, 3])) } + } + + /// Constructs a new vector from the fourth, first, fourth, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn wxww(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 0, 3, 3])) } + } + + /// Constructs a new vector from the first, second, fourth, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn xyww(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 1, 3, 3])) } + } + + /// Constructs a new vector from the second, second, fourth, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn yyww(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 1, 3, 3])) } + } + + /// Constructs a new vector from the third, second, fourth, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn zyww(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 1, 3, 3])) } + } + + /// Constructs a new vector from the fourth, second, fourth, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn wyww(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 1, 3, 3])) } + } + + /// Constructs a new vector from the first, third, fourth, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn xzww(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 2, 3, 3])) } + } + + /// Constructs a new vector from the second, third, fourth, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn yzww(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 2, 3, 3])) } + } + + /// Constructs a new vector from the third, third, fourth, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn zzww(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 2, 3, 3])) } + } + + /// Constructs a new vector from the fourth, third, fourth, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn wzww(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 2, 3, 3])) } + } + + /// Constructs a new vector from the first, fourth, fourth, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn xwww(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [0, 3, 3, 3])) } + } + + /// Constructs a new vector from the second, fourth, fourth, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn ywww(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [1, 3, 3, 3])) } + } + + /// Constructs a new vector from the third, fourth, fourth, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn zwww(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [2, 3, 3, 3])) } + } + + /// Constructs a new vector from the fourth, fourth, fourth, and fourth + /// lanes in this vector, respectively. + #[inline] + pub fn wwww(self) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, self.0, [3, 3, 3, 3])) } + } + + // Concatenations + + #[inline] + pub fn concat_xy_xy(self, other: I32x4) -> I32x4 { + unsafe { I32x4(simd_shuffle4(self.0, other.0, [0, 1, 4, 5])) } + } + + // Conversions + + /// Converts these packed integers to floats. + #[inline] + pub fn to_f32x4(self) -> F32x4 { + unsafe { F32x4(simd_cast(self.0)) } + } +} + +impl Default for I32x4 { + #[inline] + fn default() -> I32x4 { + I32x4::new(0, 0, 0, 0) + } +} + +impl Index for I32x4 { + type Output = i32; + #[inline] + fn index(&self, index: usize) -> &i32 { + unsafe { + let ptr = &self.0 as *const int32x4_t as *const i32; + mem::transmute::<*const i32, &i32>(ptr.offset(index as isize)) + } + } +} + +impl IndexMut for I32x4 { + #[inline] + fn index_mut(&mut self, index: usize) -> &mut i32 { + unsafe { + let ptr = &mut self.0 as *mut int32x4_t as *mut i32; + mem::transmute::<*mut i32, &mut i32>(ptr.offset(index as isize)) + } + } +} + + +impl Add for I32x4 { + type Output = I32x4; + #[inline] + fn add(self, other: I32x4) -> I32x4 { + unsafe { I32x4(simd_add(self.0, other.0)) } + } +} + +impl Sub for I32x4 { + type Output = I32x4; + #[inline] + fn sub(self, other: I32x4) -> I32x4 { + unsafe { I32x4(simd_sub(self.0, other.0)) } + } +} + +impl Mul for I32x4 { + type Output = I32x4; + #[inline] + fn mul(self, other: I32x4) -> I32x4 { + unsafe { I32x4(simd_mul(self.0, other.0)) } + } +} + +impl PartialEq for I32x4 { + #[inline] + fn eq(&self, other: &I32x4) -> bool { + self.packed_eq(*other).is_all_ones() + } +} + +// 32-bit unsigned integers + +#[derive(Clone, Copy)] +pub struct U32x4(pub uint32x4_t); + +impl U32x4 { + #[inline] + pub fn is_all_ones(&self) -> bool { + unsafe { aarch64::vminvq_u32(self.0) == !0 } + } + + #[inline] + pub fn is_all_zeroes(&self) -> bool { + unsafe { aarch64::vmaxvq_u32(self.0) == 0 } + } +} + +impl Index for U32x4 { + type Output = u32; + #[inline] + fn index(&self, index: usize) -> &u32 { + unsafe { + let ptr = &self.0 as *const uint32x4_t as *const u32; + mem::transmute::<*const u32, &u32>(ptr.offset(index as isize)) + } + } +} + +// 8-bit unsigned integers + +#[derive(Clone, Copy)] +pub struct U8x16(pub uint8x16_t); + +impl U8x16 { + #[inline] + pub fn as_i32x4(self) -> I32x4 { + unsafe { + I32x4(*mem::transmute::<&uint8x16_t, &int32x4_t>(&self.0)) + } + } + + #[inline] + pub fn shuffle(self, indices: U8x16) -> U8x16 { + unsafe { + let table = mem::transmute::(self.0); + let low = aarch64::vtbl2_u8(table, indices.extract_low()); + let high = aarch64::vtbl2_u8(table, indices.extract_high()); + U8x16(aarch64::vcombine_u8(low, high)) + } + } + + #[inline] + fn extract_low(self) -> uint8x8_t { + unsafe { + let low = simd_extract(mem::transmute::(self.0), 0); + mem::transmute::(low) + } + } + + #[inline] + fn extract_high(self) -> uint8x8_t { + unsafe { + let high = simd_extract(mem::transmute::(self.0), 1); + mem::transmute::(high) + } + } +} + +// Intrinsics + +extern "platform-intrinsic" { + fn simd_add(x: T, y: T) -> T; + fn simd_mul(x: T, y: T) -> T; + fn simd_sub(x: T, y: T) -> T; + + fn simd_fmin(x: T, y: T) -> T; + fn simd_fmax(x: T, y: T) -> T; + + fn simd_eq(x: T, y: T) -> U; + fn simd_gt(x: T, y: T) -> U; + fn simd_le(x: T, y: T) -> U; + fn simd_lt(x: T, y: T) -> U; + + fn simd_shuffle4(x: T, y: T, idx: [u32; 4]) -> U; + + fn simd_cast(x: T) -> U; + + fn simd_insert(x: T, index: u32, value: U) -> T; + fn simd_extract(x: T, index: u32) -> U; +} + +extern "C" { + #[link_name = "llvm.fabs.v4f32"] + fn fabs_v4f32(a: float32x4_t) -> float32x4_t; + #[link_name = "llvm.floor.v4f32"] + fn floor_v4f32(a: float32x4_t) -> float32x4_t; + #[link_name = "llvm.ceil.v4f32"] + fn ceil_v4f32(a: float32x4_t) -> float32x4_t; + + #[link_name = "llvm.aarch64.neon.frecpe.v4f32"] + fn vrecpe_v4f32(a: float32x4_t) -> float32x4_t; +} diff --git a/simd/src/lib.rs b/simd/src/lib.rs index d7291bf8..5e40ac32 100644 --- a/simd/src/lib.rs +++ b/simd/src/lib.rs @@ -8,14 +8,24 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +#![cfg_attr(pf_rustc_nightly, feature(link_llvm_intrinsics, platform_intrinsics))] +#![cfg_attr(pf_rustc_nightly, feature(simd_ffi, stdsimd))] + //! A minimal SIMD abstraction, usable outside of Pathfinder. -#[cfg(any(feature = "pf-no-simd", all(not(target_arch = "x86"), not(target_arch = "x86_64"))))] +#[cfg(any(feature = "pf-no-simd", + not(any(target_arch = "x86", + target_arch = "x86_64", + all(pf_rustc_nightly, target_arch = "aarch64")))))] pub use crate::scalar as default; +#[cfg(all(not(feature = "pf-no-simd"), pf_rustc_nightly, target_arch = "aarch64"))] +pub use crate::arm as default; #[cfg(all(not(feature = "pf-no-simd"), any(target_arch = "x86", target_arch = "x86_64")))] pub use crate::x86 as default; pub mod scalar; +#[cfg(all(pf_rustc_nightly, target_arch = "aarch64"))] +pub mod arm; #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] pub mod x86; mod extras; diff --git a/simd/src/scalar.rs b/simd/src/scalar.rs index c227de7b..3a0e64d1 100644 --- a/simd/src/scalar.rs +++ b/simd/src/scalar.rs @@ -3935,10 +3935,10 @@ impl U8x16 { } #[inline] - pub fn shuffle(self, table: U8x16) -> U8x16 { + pub fn shuffle(self, indices: U8x16) -> U8x16 { let mut result = [0; 16]; for index in 0..16 { - result[index] = self.0[(table.0[index] & 0x0f) as usize] + result[index] = self.0[(indices.0[index] & 0x0f) as usize] } U8x16(result) }