1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#![cfg_attr(feature = "clippy", allow(inline_always))]
#[cfg(feature = "simd")]
macro_rules! transmute_shuffle {
($tmp:ident, $shuffle:ident, $vec:expr, $idx:expr) => {
unsafe {
use simdty::$tmp;
use simdint::$shuffle;
use core::mem::transmute;
let tmp_i: $tmp = transmute($vec);
let tmp_o: $tmp = $shuffle(tmp_i, tmp_i, $idx);
transmute(tmp_o)
}
}
}
#[cfg(feature = "simd")] pub mod u32x4;
#[cfg(feature = "simd")] pub mod u64x4;
#[cfg(not(feature = "simd"))]
macro_rules! simd_opt {
($vec:ident) => {
pub mod $vec {
use simdty::$vec;
#[inline(always)]
pub fn rotate_right_const(vec: $vec, n: u32) -> $vec {
$vec::new(vec.0.rotate_right(n),
vec.1.rotate_right(n),
vec.2.rotate_right(n),
vec.3.rotate_right(n))
}
}
}
}
#[cfg(not(feature = "simd"))] simd_opt!(u32x4);
#[cfg(not(feature = "simd"))] simd_opt!(u64x4);