2018-07-12 20:40:30 -05:00
|
|
|
#[allow(dead_code)]
|
2018-07-18 11:36:24 -05:00
|
|
|
#[path = "../libm/src/math/mod.rs"]
|
2018-07-12 20:40:30 -05:00
|
|
|
mod libm;
|
|
|
|
|
|
|
|
|
|
macro_rules! no_mangle {
|
|
|
|
|
($(fn $fun:ident($($iid:ident : $ity:ty),+) -> $oty:ty;)+) => {
|
2018-07-18 10:04:33 -07:00
|
|
|
intrinsics! {
|
|
|
|
|
$(
|
|
|
|
|
pub extern "C" fn $fun($($iid: $ity),+) -> $oty {
|
|
|
|
|
self::libm::$fun($($iid),+)
|
|
|
|
|
}
|
|
|
|
|
)+
|
|
|
|
|
}
|
2018-07-12 20:40:30 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2019-04-02 07:46:06 -07:00
|
|
|
#[cfg(any(
|
|
|
|
|
all(
|
2021-10-28 16:32:30 -07:00
|
|
|
target_family = "wasm",
|
2019-04-02 07:46:06 -07:00
|
|
|
target_os = "unknown",
|
|
|
|
|
not(target_env = "wasi")
|
|
|
|
|
),
|
2021-09-09 11:21:33 +08:00
|
|
|
target_os = "xous",
|
2021-09-29 16:02:46 +04:00
|
|
|
all(target_arch = "x86_64", target_os = "uefi"),
|
2021-10-08 13:36:30 +01:00
|
|
|
all(target_arch = "xtensa", target_os = "none"),
|
2019-04-02 07:46:06 -07:00
|
|
|
all(target_vendor = "fortanix", target_env = "sgx")
|
|
|
|
|
))]
|
2018-07-12 20:40:30 -05:00
|
|
|
no_mangle! {
|
|
|
|
|
fn acos(x: f64) -> f64;
|
|
|
|
|
fn asin(x: f64) -> f64;
|
|
|
|
|
fn cbrt(x: f64) -> f64;
|
|
|
|
|
fn expm1(x: f64) -> f64;
|
|
|
|
|
fn hypot(x: f64, y: f64) -> f64;
|
|
|
|
|
fn tan(x: f64) -> f64;
|
|
|
|
|
fn cos(x: f64) -> f64;
|
|
|
|
|
fn expf(x: f32) -> f32;
|
|
|
|
|
fn log2(x: f64) -> f64;
|
|
|
|
|
fn log2f(x: f32) -> f32;
|
|
|
|
|
fn log10(x: f64) -> f64;
|
|
|
|
|
fn log10f(x: f32) -> f32;
|
|
|
|
|
fn log(x: f64) -> f64;
|
|
|
|
|
fn logf(x: f32) -> f32;
|
2019-06-05 21:32:31 +01:00
|
|
|
fn fmin(x: f64, y: f64) -> f64;
|
|
|
|
|
fn fminf(x: f32, y: f32) -> f32;
|
|
|
|
|
fn fmax(x: f64, y: f64) -> f64;
|
|
|
|
|
fn fmaxf(x: f32, y: f32) -> f32;
|
2018-07-12 20:40:30 -05:00
|
|
|
fn round(x: f64) -> f64;
|
|
|
|
|
fn roundf(x: f32) -> f32;
|
2022-11-08 21:02:21 -05:00
|
|
|
fn rint(x: f64) -> f64;
|
|
|
|
|
fn rintf(x: f32) -> f32;
|
2018-07-12 20:40:30 -05:00
|
|
|
fn sin(x: f64) -> f64;
|
|
|
|
|
fn pow(x: f64, y: f64) -> f64;
|
|
|
|
|
fn powf(x: f32, y: f32) -> f32;
|
|
|
|
|
fn fmod(x: f64, y: f64) -> f64;
|
|
|
|
|
fn fmodf(x: f32, y: f32) -> f32;
|
2018-11-21 14:07:03 +05:30
|
|
|
fn acosf(n: f32) -> f32;
|
|
|
|
|
fn atan2f(a: f32, b: f32) -> f32;
|
|
|
|
|
fn atanf(n: f32) -> f32;
|
|
|
|
|
fn coshf(n: f32) -> f32;
|
|
|
|
|
fn expm1f(n: f32) -> f32;
|
2019-04-29 14:42:14 -07:00
|
|
|
fn fdim(a: f64, b: f64) -> f64;
|
2018-11-21 14:07:03 +05:30
|
|
|
fn fdimf(a: f32, b: f32) -> f32;
|
|
|
|
|
fn log1pf(n: f32) -> f32;
|
|
|
|
|
fn sinhf(n: f32) -> f32;
|
|
|
|
|
fn tanhf(n: f32) -> f32;
|
2019-05-02 12:40:39 -07:00
|
|
|
fn ldexp(f: f64, n: i32) -> f64;
|
|
|
|
|
fn ldexpf(f: f32, n: i32) -> f32;
|
2022-07-28 16:21:37 -07:00
|
|
|
fn tgamma(x: f64) -> f64;
|
|
|
|
|
fn tgammaf(x: f32) -> f32;
|
2021-09-29 16:02:46 +04:00
|
|
|
fn atan(x: f64) -> f64;
|
|
|
|
|
fn atan2(x: f64, y: f64) -> f64;
|
|
|
|
|
fn cosh(x: f64) -> f64;
|
|
|
|
|
fn log1p(x: f64) -> f64;
|
|
|
|
|
fn sinh(x: f64) -> f64;
|
|
|
|
|
fn tanh(x: f64) -> f64;
|
|
|
|
|
fn cosf(x: f32) -> f32;
|
|
|
|
|
fn exp(x: f64) -> f64;
|
|
|
|
|
fn sinf(x: f32) -> f32;
|
|
|
|
|
fn exp2(x: f64) -> f64;
|
|
|
|
|
fn exp2f(x: f32) -> f32;
|
|
|
|
|
fn fma(x: f64, y: f64, z: f64) -> f64;
|
|
|
|
|
fn fmaf(x: f32, y: f32, z: f32) -> f32;
|
|
|
|
|
fn asinf(n: f32) -> f32;
|
|
|
|
|
fn cbrtf(n: f32) -> f32;
|
|
|
|
|
fn hypotf(x: f32, y: f32) -> f32;
|
|
|
|
|
fn tanf(n: f32) -> f32;
|
|
|
|
|
}
|
|
|
|
|
|
2022-07-28 17:58:16 +05:30
|
|
|
#[cfg(any(target_os = "xous", target_os = "uefi"))]
|
2021-09-09 11:21:33 +08:00
|
|
|
no_mangle! {
|
|
|
|
|
fn sqrtf(x: f32) -> f32;
|
|
|
|
|
fn sqrt(x: f64) -> f64;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[cfg(any(
|
|
|
|
|
all(target_vendor = "fortanix", target_env = "sgx"),
|
2022-07-28 17:58:16 +05:30
|
|
|
target_os = "xous",
|
|
|
|
|
target_os = "uefi"
|
2021-09-09 11:21:33 +08:00
|
|
|
))]
|
2018-12-27 19:13:50 +05:30
|
|
|
no_mangle! {
|
|
|
|
|
fn ceil(x: f64) -> f64;
|
|
|
|
|
fn ceilf(x: f32) -> f32;
|
|
|
|
|
fn floor(x: f64) -> f64;
|
|
|
|
|
fn floorf(x: f32) -> f32;
|
|
|
|
|
fn trunc(x: f64) -> f64;
|
|
|
|
|
fn truncf(x: f32) -> f32;
|
|
|
|
|
}
|
|
|
|
|
|
2022-12-07 16:08:01 +01:00
|
|
|
// only for the thumb*-none-eabi*, riscv32*-none-elf and x86_64-unknown-none targets that lack the floating point instruction set
|
2022-09-17 11:47:21 -04:00
|
|
|
#[cfg(any(
|
|
|
|
|
all(target_arch = "arm", target_os = "none"),
|
2022-12-07 16:08:01 +01:00
|
|
|
all(target_arch = "riscv32", not(target_feature = "f"), target_os = "none"),
|
|
|
|
|
all(target_arch = "x86_64", target_os = "none")
|
2022-09-17 11:47:21 -04:00
|
|
|
))]
|
2018-07-24 13:26:50 -05:00
|
|
|
no_mangle! {
|
2020-10-26 17:37:02 +01:00
|
|
|
fn fmin(x: f64, y: f64) -> f64;
|
|
|
|
|
fn fminf(x: f32, y: f32) -> f32;
|
|
|
|
|
fn fmax(x: f64, y: f64) -> f64;
|
|
|
|
|
fn fmaxf(x: f32, y: f32) -> f32;
|
2018-07-24 13:26:50 -05:00
|
|
|
// `f64 % f64`
|
|
|
|
|
fn fmod(x: f64, y: f64) -> f64;
|
|
|
|
|
// `f32 % f32`
|
|
|
|
|
fn fmodf(x: f32, y: f32) -> f32;
|
|
|
|
|
}
|