ruffbox_synth 0.14.0

A beatbox-oriented synthesizer library.
Documentation
#[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) }
}