| #![cfg_attr(f128_enabled, feature(f128))] |
| |
| use builtins_test::float_bench; |
| use compiler_builtins::float::pow; |
| use criterion::{Criterion, criterion_main}; |
| |
| float_bench! { |
| name: powi_f32, |
| sig: (a: f32, b: i32) -> f32, |
| crate_fn: pow::__powisf2, |
| sys_fn: __powisf2, |
| sys_available: all(), |
| asm: [], |
| } |
| |
| float_bench! { |
| name: powi_f64, |
| sig: (a: f64, b: i32) -> f64, |
| crate_fn: pow::__powidf2, |
| sys_fn: __powidf2, |
| sys_available: all(), |
| asm: [], |
| } |
| |
| // FIXME(f16_f128): can be changed to only `f128_enabled` once `__multf3` and `__divtf3` are |
| // distributed by nightly. |
| #[cfg(all(f128_enabled, not(feature = "no-sys-f128")))] |
| float_bench! { |
| name: powi_f128, |
| sig: (a: f128, b: i32) -> f128, |
| crate_fn: pow::__powitf2, |
| crate_fn_ppc: pow::__powikf2, |
| sys_fn: __powitf2, |
| sys_fn_ppc: __powikf2, |
| sys_available: not(feature = "no-sys-f128"), |
| asm: [] |
| } |
| |
| pub fn float_pow() { |
| let mut criterion = Criterion::default().configure_from_args(); |
| |
| powi_f32(&mut criterion); |
| powi_f64(&mut criterion); |
| |
| #[cfg(all(f128_enabled, not(feature = "no-sys-f128")))] |
| powi_f128(&mut criterion); |
| } |
| |
| criterion_main!(float_pow); |