1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
#[cfg(not(any(target_arch = "x86", target_arch = "x86_64")))] #[inline(always)] pub fn fract(value: f32) -> f32 { value - super::trunc(value) } #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] #[inline(always)] pub fn fract(value: f32) -> f32 { #[cfg(target_arch = "x86")] use core::arch::x86::*; #[cfg(target_arch = "x86_64")] use core::arch::x86_64::*; unsafe { let packed = _mm_set_ss(value); _mm_cvtss_f32(_mm_sub_ps(packed, _mm_cvtepi32_ps(_mm_cvttps_epi32(packed)))) } }