#![allow(dead_code)]
use core::arch::x86_64::*;
const BYTESWAP_MASK_U16: __m256i = unsafe {
core::mem::transmute([
1u8, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14,
1u8, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14,
])
};
const BYTESWAP_MASK_U32: __m256i = unsafe {
core::mem::transmute([
3u8, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12,
3u8, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12,
])
};
#[inline(always)]
pub(crate) unsafe fn load_le_u16x16(ptr: *const u8) -> __m256i {
let v = unsafe { _mm256_loadu_si256(ptr.cast()) };
#[cfg(target_endian = "big")]
let v = unsafe { _mm256_shuffle_epi8(v, BYTESWAP_MASK_U16) };
v
}
#[inline(always)]
pub(crate) unsafe fn load_be_u16x16(ptr: *const u8) -> __m256i {
let v = unsafe { _mm256_loadu_si256(ptr.cast()) };
#[cfg(target_endian = "little")]
let v = unsafe { _mm256_shuffle_epi8(v, BYTESWAP_MASK_U16) };
v
}
#[inline(always)]
pub(crate) unsafe fn load_endian_u16x16<const BE: bool>(ptr: *const u8) -> __m256i {
if BE {
unsafe { load_be_u16x16(ptr) }
} else {
unsafe { load_le_u16x16(ptr) }
}
}
const BYTESWAP_MASK_U16X8: __m128i =
unsafe { core::mem::transmute([1u8, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14]) };
#[inline(always)]
pub(crate) unsafe fn load_le_u16x8(ptr: *const u8) -> __m128i {
let v = unsafe { _mm_loadu_si128(ptr.cast()) };
#[cfg(target_endian = "big")]
let v = unsafe { _mm_shuffle_epi8(v, BYTESWAP_MASK_U16X8) };
v
}
#[inline(always)]
pub(crate) unsafe fn load_be_u16x8(ptr: *const u8) -> __m128i {
let v = unsafe { _mm_loadu_si128(ptr.cast()) };
#[cfg(target_endian = "little")]
let v = unsafe { _mm_shuffle_epi8(v, BYTESWAP_MASK_U16X8) };
v
}
#[inline(always)]
pub(crate) unsafe fn load_endian_u16x8<const BE: bool>(ptr: *const u8) -> __m128i {
if BE {
unsafe { load_be_u16x8(ptr) }
} else {
unsafe { load_le_u16x8(ptr) }
}
}
#[inline(always)]
pub(crate) unsafe fn load_le_u32x8(ptr: *const u8) -> __m256i {
let v = unsafe { _mm256_loadu_si256(ptr.cast()) };
#[cfg(target_endian = "big")]
let v = unsafe { _mm256_shuffle_epi8(v, BYTESWAP_MASK_U32) };
v
}
#[inline(always)]
pub(crate) unsafe fn load_be_u32x8(ptr: *const u8) -> __m256i {
let v = unsafe { _mm256_loadu_si256(ptr.cast()) };
#[cfg(target_endian = "little")]
let v = unsafe { _mm256_shuffle_epi8(v, BYTESWAP_MASK_U32) };
v
}
#[inline(always)]
pub(crate) unsafe fn load_endian_u32x8<const BE: bool>(ptr: *const u8) -> __m256i {
if BE {
unsafe { load_be_u32x8(ptr) }
} else {
unsafe { load_le_u32x8(ptr) }
}
}