From 6029639753500d65f39105fcbd670836be01fafe Mon Sep 17 00:00:00 2001 From: Christopher Serr Date: Wed, 22 Dec 2021 03:01:47 +0100 Subject: [PATCH] Implement `Pod` and `Zeroable` for AArch64 NEON Vectors (#80) * Implement `Pod` and `Zeroable` for AArch64 NEON Vectors The NEON intrinsics will be stabilized in Rust 1.59. * Compile all-features only on nightly --- .github/workflows/rust.yml | 6 +- Cargo.toml | 1 + src/lib.rs | 2 + src/pod.rs | 209 +++++++++++++++++++++++++++++++++++++ src/zeroable.rs | 209 +++++++++++++++++++++++++++++++++++++ 5 files changed, 425 insertions(+), 2 deletions(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 802348a..4935ccd 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -36,9 +36,9 @@ jobs: - run: cargo test --verbose - run: cargo test --verbose --no-default-features - run: cargo test --verbose --all-features - if: matrix.rust != '1.34.0' + if: matrix.rust == 'nightly' - run: cargo test --verbose --manifest-path=derive/Cargo.toml --all-features - if: matrix.rust != '1.34.0' + if: matrix.rust == 'nightly' cross-test: name: Test on ${{ matrix.target }} with cross @@ -49,6 +49,8 @@ jobs: target: [i686-unknown-linux-gnu, mips-unknown-linux-gnu, mips64-unknown-linux-gnuabi64] steps: - uses: hecrj/setup-rust-action@v1 + with: + rust-version: nightly - uses: actions/checkout@v2 - run: cargo install cross - run: cross test --verbose --target=${{ matrix.target }} --no-default-features diff --git a/Cargo.toml b/Cargo.toml index 4b13931..b0aa52a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,6 +19,7 @@ extern_crate_std = ["extern_crate_alloc"] zeroable_maybe_uninit = [] min_const_generics = [] wasm_simd = [] # Until >= 1.54.0 is MSRV this is an off-by-default feature. +aarch64_simd = [] # Until >= 1.59.0 is MSRV this is an off-by-default feature. # Do not use if you can avoid it, because this is unsound. unsound_ptr_pod_impl = [] diff --git a/src/lib.rs b/src/lib.rs index 355caa7..624fe77 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -38,6 +38,8 @@ //! methods related to `Box` and `Vec`. Note that the `docs.rs` documentation //! is always built with `extern_crate_alloc` cargo feature enabled. +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +use core::arch::aarch64; #[cfg(all(target_arch = "wasm32", feature = "wasm_simd"))] use core::arch::wasm32; #[cfg(target_arch = "x86")] diff --git a/src/pod.rs b/src/pod.rs index 5453918..28618d3 100644 --- a/src/pod.rs +++ b/src/pod.rs @@ -84,6 +84,215 @@ impl_unsafe_marker_for_array!( #[cfg(all(target_arch = "wasm32", feature = "wasm_simd"))] unsafe impl Pod for wasm32::v128 {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::float32x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::float32x2x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::float32x2x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::float32x2x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::float32x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::float32x4x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::float32x4x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::float32x4x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::float64x1_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::float64x1x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::float64x1x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::float64x1x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::float64x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::float64x2x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::float64x2x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::float64x2x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::int16x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::int16x4x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::int16x4x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::int16x4x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::int16x8_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::int16x8x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::int16x8x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::int16x8x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::int32x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::int32x2x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::int32x2x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::int32x2x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::int32x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::int32x4x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::int32x4x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::int32x4x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::int64x1_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::int64x1x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::int64x1x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::int64x1x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::int64x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::int64x2x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::int64x2x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::int64x2x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::int8x16_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::int8x16x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::int8x16x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::int8x16x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::int8x8_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::int8x8x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::int8x8x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::int8x8x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::poly16x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::poly16x4x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::poly16x4x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::poly16x4x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::poly16x8_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::poly16x8x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::poly16x8x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::poly16x8x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::poly64x1_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::poly64x1x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::poly64x1x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::poly64x1x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::poly64x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::poly64x2x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::poly64x2x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::poly64x2x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::poly8x16_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::poly8x16x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::poly8x16x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::poly8x16x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::poly8x8_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::poly8x8x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::poly8x8x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::poly8x8x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::uint16x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::uint16x4x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::uint16x4x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::uint16x4x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::uint16x8_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::uint16x8x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::uint16x8x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::uint16x8x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::uint32x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::uint32x2x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::uint32x2x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::uint32x2x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::uint32x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::uint32x4x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::uint32x4x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::uint32x4x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::uint64x1_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::uint64x1x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::uint64x1x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::uint64x1x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::uint64x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::uint64x2x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::uint64x2x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::uint64x2x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::uint8x16_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::uint8x16x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::uint8x16x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::uint8x16x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::uint8x8_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::uint8x8x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::uint8x8x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Pod for aarch64::uint8x8x4_t {} + #[cfg(target_arch = "x86")] unsafe impl Pod for x86::__m128i {} #[cfg(target_arch = "x86")] diff --git a/src/zeroable.rs b/src/zeroable.rs index fd4c5ad..2af4f36 100644 --- a/src/zeroable.rs +++ b/src/zeroable.rs @@ -123,6 +123,215 @@ impl_unsafe_marker_for_array!( #[cfg(all(target_arch = "wasm32", feature = "wasm_simd"))] unsafe impl Zeroable for wasm32::v128 {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::float32x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::float32x2x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::float32x2x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::float32x2x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::float32x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::float32x4x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::float32x4x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::float32x4x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::float64x1_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::float64x1x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::float64x1x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::float64x1x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::float64x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::float64x2x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::float64x2x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::float64x2x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::int16x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::int16x4x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::int16x4x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::int16x4x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::int16x8_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::int16x8x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::int16x8x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::int16x8x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::int32x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::int32x2x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::int32x2x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::int32x2x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::int32x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::int32x4x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::int32x4x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::int32x4x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::int64x1_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::int64x1x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::int64x1x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::int64x1x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::int64x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::int64x2x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::int64x2x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::int64x2x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::int8x16_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::int8x16x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::int8x16x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::int8x16x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::int8x8_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::int8x8x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::int8x8x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::int8x8x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::poly16x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::poly16x4x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::poly16x4x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::poly16x4x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::poly16x8_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::poly16x8x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::poly16x8x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::poly16x8x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::poly64x1_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::poly64x1x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::poly64x1x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::poly64x1x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::poly64x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::poly64x2x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::poly64x2x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::poly64x2x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::poly8x16_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::poly8x16x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::poly8x16x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::poly8x16x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::poly8x8_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::poly8x8x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::poly8x8x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::poly8x8x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::uint16x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::uint16x4x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::uint16x4x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::uint16x4x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::uint16x8_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::uint16x8x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::uint16x8x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::uint16x8x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::uint32x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::uint32x2x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::uint32x2x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::uint32x2x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::uint32x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::uint32x4x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::uint32x4x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::uint32x4x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::uint64x1_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::uint64x1x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::uint64x1x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::uint64x1x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::uint64x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::uint64x2x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::uint64x2x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::uint64x2x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::uint8x16_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::uint8x16x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::uint8x16x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::uint8x16x4_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::uint8x8_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::uint8x8x2_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::uint8x8x3_t {} +#[cfg(all(target_arch = "aarch64", feature = "aarch64_simd"))] +unsafe impl Zeroable for aarch64::uint8x8x4_t {} + #[cfg(target_arch = "x86")] unsafe impl Zeroable for x86::__m128i {} #[cfg(target_arch = "x86")]