Closed
Description
The as_usize
wrapper function in the example below shouldn't be required.
#![feature(const_generics)]
#![feature(const_evaluatable_checked)]
use std::arch::x86_64::*;
pub const fn _MM_SHUFFLE(fp3: u32, fp2: u32, fp1: u32, fp0: u32) -> i32 {
((fp3 << 6) | (fp2 << 4) | (fp1 << 2) | fp0) as i32
}
pub const fn as_usize(a: i32) -> usize {
a as usize
}
pub fn swizzle<const X: u32, const Y: u32, const Z: u32, const W: u32>(v: __m128) -> __m128
where [(); as_usize(_MM_SHUFFLE(W, Z, Y, X))]:
{
unsafe {
_mm_shuffle_ps(v, v, _MM_SHUFFLE(W, Z, Y, X))
}
}