rqsrt.rs
fn libc_rsqrt(f: &f32) -> f32 { | |
1.0/f32::sqrt(*f) | |
} | |
fn llvm_rsqrt(f: &f32) -> f32 { | |
1.0/core::unstable::intrinsics::sqrtf32(*f) | |
} | |
fn asm_rsqrt(f: &f32) -> f32 { | |
let mut b = &0.0f32; | |
unsafe { | |
asm!("rsqrtss ($0), %xmm0\n\t\ | |
movss %xmm0, ($0)" | |
:"=r"(b) | |
:"0"(f) | |
:"xmm0" | |
); | |
*b | |
} | |
} | |
fn main() { | |
io::println(fmt!("libc: %?", libc_rsqrt(&64.0))); | |
io::println(fmt!("llvm: %?", llvm_rsqrt(&64.0))); | |
io::println(fmt!("rsqrt: %?", asm_rsqrt(&64.0))); | |
} |