unsafe fn set_ftz_and_daz() -> u32 {
if cfg!(all(ftz_daz, target_feature = "sse2")) {
#[cfg(target_arch = "x86_64")]
{
let old_mxcsr = std::arch::x86_64::_mm_getcsr();
let new_mxcsr = old_mxcsr | 0x8000 | 0x0040; std::arch::x86_64::_mm_setcsr(new_mxcsr);
old_mxcsr
}
#[cfg(target_arch = "x86")]
{
let old_mxcsr = std::arch::x86::_mm_getcsr();
let new_mxcsr = old_mxcsr | 0x8000 | 0x0040; std::arch::x86::_mm_setcsr(new_mxcsr);
old_mxcsr
}
} else {
0
}
}
unsafe fn reset_ftz_and_daz(old_mxcsr: u32) {
if cfg!(all(ftz_daz, target_feature = "sse2")) {
#[cfg(target_arch = "x86_64")]
std::arch::x86_64::_mm_setcsr(old_mxcsr);
#[cfg(target_arch = "x86")]
std::arch::x86::_mm_setcsr(old_mxcsr);
}
}
unsafe fn prefetch_read(p: *const i8) {
if cfg!(all(prefetch, target_feature = "sse2")) {
#[cfg(target_arch = "x86_64")]
std::arch::x86_64::_mm_prefetch::<{ std::arch::x86_64::_MM_HINT_T0 }>(p);
#[cfg(target_arch = "x86")]
std::arch::x86::_mm_prefetch::<{ std::arch::x86::_MM_HINT_T0 }>(p);
}
}
unsafe fn prefetch_write(p: *const i8) {
if cfg!(all(prefetch, target_feature = "sse2")) {
#[cfg(target_arch = "x86_64")]
std::arch::x86_64::_mm_prefetch::<{ std::arch::x86_64::_MM_HINT_ET0 }>(p);
#[cfg(target_arch = "x86")]
std::arch::x86::_mm_prefetch::<{ std::arch::x86::_MM_HINT_ET0 }>(p);
}
}
extern crate generic_array;
extern crate num_cpus;
extern crate num_traits;
extern crate parking_lot;
extern crate rawpointer;
extern crate smallvec;
extern crate threadpool;
extern crate typenum;
extern crate typenum_loops;
#[macro_use]
extern crate lazy_static;
#[macro_use]
mod debugmacros;
mod gemm;
mod generic_kernel;
mod generic_params;
mod hwl_kernels;
mod snb_kernels;
mod util;
pub use gemm::dgemm;
pub use gemm::dgemm_st;
pub use gemm::sgemm;
pub use gemm::sgemm_st;