summaryrefslogtreecommitdiffstats
path: root/vendor/ahash/src/operations.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/ahash/src/operations.rs')
-rw-r--r--vendor/ahash/src/operations.rs35
1 files changed, 14 insertions, 21 deletions
diff --git a/vendor/ahash/src/operations.rs b/vendor/ahash/src/operations.rs
index ffd3b1a1a..23d4e22fa 100644
--- a/vendor/ahash/src/operations.rs
+++ b/vendor/ahash/src/operations.rs
@@ -1,4 +1,5 @@
use crate::convert::*;
+use zerocopy::transmute;
///This constant comes from Kunth's prng (Empirically it works better than those from splitmix32).
pub(crate) const MULTIPLE: u64 = 6364136223846793005;
@@ -55,8 +56,7 @@ pub(crate) fn shuffle(a: u128) -> u128 {
use core::arch::x86::*;
#[cfg(target_arch = "x86_64")]
use core::arch::x86_64::*;
- use core::mem::transmute;
- unsafe { transmute(_mm_shuffle_epi8(transmute(a), transmute(SHUFFLE_MASK))) }
+ unsafe { transmute!(_mm_shuffle_epi8(transmute!(a), transmute!(SHUFFLE_MASK))) }
}
#[cfg(not(all(target_feature = "ssse3", not(miri))))]
{
@@ -81,13 +81,12 @@ pub(crate) fn shuffle_and_add(base: u128, to_add: u128) -> u128 {
#[cfg(all(any(target_arch = "x86", target_arch = "x86_64"), target_feature = "sse2", not(miri)))]
#[inline(always)]
pub(crate) fn add_by_64s(a: [u64; 2], b: [u64; 2]) -> [u64; 2] {
- use core::mem::transmute;
unsafe {
#[cfg(target_arch = "x86")]
use core::arch::x86::*;
#[cfg(target_arch = "x86_64")]
use core::arch::x86_64::*;
- transmute(_mm_add_epi64(transmute(a), transmute(b)))
+ transmute!(_mm_add_epi64(transmute!(a), transmute!(b)))
}
}
@@ -105,10 +104,9 @@ pub(crate) fn aesenc(value: u128, xor: u128) -> u128 {
use core::arch::x86::*;
#[cfg(target_arch = "x86_64")]
use core::arch::x86_64::*;
- use core::mem::transmute;
unsafe {
- let value = transmute(value);
- transmute(_mm_aesenc_si128(value, transmute(xor)))
+ let value = transmute!(value);
+ transmute!(_mm_aesenc_si128(value, transmute!(xor)))
}
}
@@ -125,11 +123,9 @@ pub(crate) fn aesenc(value: u128, xor: u128) -> u128 {
use core::arch::aarch64::*;
#[cfg(target_arch = "arm")]
use core::arch::arm::*;
- use core::mem::transmute;
- unsafe {
- let value = transmute(value);
- transmute(vaesmcq_u8(vaeseq_u8(value, transmute(xor))))
- }
+ let res = unsafe { vaesmcq_u8(vaeseq_u8(transmute!(value), transmute!(0u128))) };
+ let value: u128 = transmute!(res);
+ xor ^ value
}
#[cfg(all(any(target_arch = "x86", target_arch = "x86_64"), target_feature = "aes", not(miri)))]
@@ -140,10 +136,9 @@ pub(crate) fn aesdec(value: u128, xor: u128) -> u128 {
use core::arch::x86::*;
#[cfg(target_arch = "x86_64")]
use core::arch::x86_64::*;
- use core::mem::transmute;
unsafe {
- let value = transmute(value);
- transmute(_mm_aesdec_si128(value, transmute(xor)))
+ let value = transmute!(value);
+ transmute!(_mm_aesdec_si128(value, transmute!(xor)))
}
}
@@ -160,11 +155,9 @@ pub(crate) fn aesdec(value: u128, xor: u128) -> u128 {
use core::arch::aarch64::*;
#[cfg(target_arch = "arm")]
use core::arch::arm::*;
- use core::mem::transmute;
- unsafe {
- let value = transmute(value);
- transmute(vaesimcq_u8(vaesdq_u8(value, transmute(xor))))
- }
+ let res = unsafe { vaesimcq_u8(vaesdq_u8(transmute!(value), transmute!(0u128))) };
+ let value: u128 = transmute!(res);
+ xor ^ value
}
#[allow(unused)]
@@ -207,7 +200,7 @@ mod test {
// #[cfg(target_arch = "x86_64")]
// use core::arch::x86_64::*;
// MASK.with(|mask| {
- // unsafe { transmute(_mm_shuffle_epi8(transmute(a), transmute(mask.get()))) }
+ // unsafe { transmute!(_mm_shuffle_epi8(transmute!(a), transmute!(mask.get()))) }
// })
// }
//