| //! Architecture-specific support for x86-32 and x86-64 with SSE2 |
| |
| mod detect; |
| mod fma; |
| |
| pub use fma::{fma, fmaf}; |
| |
| pub fn sqrtf(mut x: f32) -> f32 { |
| // SAFETY: `sqrtss` is part of `sse2`, which this module is gated behind. It has no memory |
| // access or side effects. |
| unsafe { |
| core::arch::asm!( |
| "sqrtss {x}, {x}", |
| x = inout(xmm_reg) x, |
| options(nostack, nomem, pure), |
| ) |
| }; |
| x |
| } |
| |
| pub fn sqrt(mut x: f64) -> f64 { |
| // SAFETY: `sqrtsd` is part of `sse2`, which this module is gated behind. It has no memory |
| // access or side effects. |
| unsafe { |
| core::arch::asm!( |
| "sqrtsd {x}, {x}", |
| x = inout(xmm_reg) x, |
| options(nostack, nomem, pure), |
| ) |
| }; |
| x |
| } |