You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
2.4 KiB
82 lines
2.4 KiB
// Copyright 2016 blake2-rfc Developers
|
|
//
|
|
// Licensed under the Apache License, Version 2.0, <LICENSE-APACHE or
|
|
// http://apache.org/licenses/LICENSE-2.0> or the MIT license <LICENSE-MIT or
|
|
// http://opensource.org/licenses/MIT>, at your option. This file may not be
|
|
// copied, modified, or distributed except according to those terms.
|
|
|
|
#![allow(dead_code)]
|
|
#![allow(non_camel_case_types)]
|
|
|
|
// https://github.com/rust-lang-nursery/rust-clippy/issues/2453
|
|
#![cfg_attr(feature = "cargo-clippy", allow(empty_line_after_outer_attr))]
|
|
|
|
use as_bytes::Safe;
|
|
|
|
#[cfg(feature = "simd")]
|
|
macro_rules! decl_simd {
|
|
($($decl:item)*) => {
|
|
$(
|
|
#[derive(Clone, Copy, Debug)]
|
|
#[repr(simd)]
|
|
$decl
|
|
)*
|
|
}
|
|
}
|
|
|
|
#[cfg(not(feature = "simd"))]
|
|
macro_rules! decl_simd {
|
|
($($decl:item)*) => {
|
|
$(
|
|
#[derive(Clone, Copy, Debug)]
|
|
#[repr(C)]
|
|
$decl
|
|
)*
|
|
}
|
|
}
|
|
|
|
decl_simd! {
|
|
pub struct Simd2<T>(pub T, pub T);
|
|
pub struct Simd4<T>(pub T, pub T, pub T, pub T);
|
|
pub struct Simd8<T>(pub T, pub T, pub T, pub T,
|
|
pub T, pub T, pub T, pub T);
|
|
pub struct Simd16<T>(pub T, pub T, pub T, pub T,
|
|
pub T, pub T, pub T, pub T,
|
|
pub T, pub T, pub T, pub T,
|
|
pub T, pub T, pub T, pub T);
|
|
pub struct Simd32<T>(pub T, pub T, pub T, pub T,
|
|
pub T, pub T, pub T, pub T,
|
|
pub T, pub T, pub T, pub T,
|
|
pub T, pub T, pub T, pub T,
|
|
pub T, pub T, pub T, pub T,
|
|
pub T, pub T, pub T, pub T,
|
|
pub T, pub T, pub T, pub T,
|
|
pub T, pub T, pub T, pub T);
|
|
}
|
|
|
|
pub type u64x2 = Simd2<u64>;
|
|
|
|
pub type u32x4 = Simd4<u32>;
|
|
pub type u64x4 = Simd4<u64>;
|
|
|
|
pub type u16x8 = Simd8<u16>;
|
|
pub type u32x8 = Simd8<u32>;
|
|
|
|
pub type u8x16 = Simd16<u8>;
|
|
pub type u16x16 = Simd16<u16>;
|
|
|
|
pub type u8x32 = Simd32<u8>;
|
|
|
|
#[cfg_attr(feature = "cargo-clippy", allow(inline_always))]
|
|
impl<T> Simd4<T> {
|
|
#[inline(always)]
|
|
pub fn new(e0: T, e1: T, e2: T, e3: T) -> Self {
|
|
Simd4(e0, e1, e2, e3)
|
|
}
|
|
}
|
|
|
|
unsafe impl<T: Safe> Safe for Simd2<T> {}
|
|
unsafe impl<T: Safe> Safe for Simd4<T> {}
|
|
unsafe impl<T: Safe> Safe for Simd8<T> {}
|
|
unsafe impl<T: Safe> Safe for Simd16<T> {}
|
|
unsafe impl<T: Safe> Safe for Simd32<T> {}
|
|
|