#[allow(deprecated)]
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
pub fn no_denormals_on() -> u32 {
#[cfg(all(target_arch = "x86_64", target_feature = "sse"))]
use std::arch::x86_64::{_mm_getcsr, _mm_setcsr};
#[cfg(all(target_arch = "x86", target_feature = "sse"))]
use std::arch::x86::{_mm_getcsr, _mm_setcsr};
let mxcsr = unsafe { _mm_getcsr() };
unsafe { _mm_setcsr(mxcsr | 0x8040) };
mxcsr
}
#[allow(deprecated)]
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
pub fn no_denormals_off(beacon: u32) {
#[cfg(all(target_arch = "x86_64", target_feature = "sse"))]
use std::arch::x86_64::_mm_setcsr;
#[cfg(all(target_arch = "x86", target_feature = "sse"))]
use std::arch::x86::_mm_setcsr;
unsafe { _mm_setcsr(beacon) };
}
#[cfg(any(target_arch = "aarch64"))]
pub fn no_denormals_on() -> u64 {
let mut fpcr: u64;
unsafe { std::arch::asm!("mrs {}, fpcr", out(reg) fpcr) };
unsafe { std::arch::asm!("msr fpcr, {}", in(reg) fpcr | 1 << 24) };
fpcr
}
#[cfg(any(target_arch = "aarch64"))]
pub fn no_denormals_off(beacon: u64) {
unsafe { std::arch::asm!("msr fpcr, {}", in(reg) beacon) }
}