| use core::u64; |
| |
| /// Absolute value (magnitude) (f64) |
| /// Calculates the absolute value (magnitude) of the argument `x`, |
| /// by direct manipulation of the bit representation of `x`. |
| #[inline] |
| #[cfg_attr(all(test, assert_no_panic), no_panic::no_panic)] |
| pub fn fabs(x: f64) -> f64 { |
| // On wasm32 we know that LLVM's intrinsic will compile to an optimized |
| // `f64.abs` native instruction, so we can leverage this for both code size |
| // and speed. |
| llvm_intrinsically_optimized! { |
| #[cfg(target_arch = "wasm32")] { |
| return unsafe { ::core::intrinsics::fabsf64(x) } |
| } |
| } |
| f64::from_bits(x.to_bits() & (u64::MAX / 2)) |
| } |