summaryrefslogtreecommitdiff
path: root/scripts/src/libs/math.rs
blob: 4aae3c3f44348bce30020addf0cd14bf5581fde7 (plain)
use crate::ScriptManager;

use super::LIBRARY_NAME;

fn abs_i32(n: i32) -> i32 {
	n.abs()
}

fn abs_i64(n: i64) -> i64 {
	n.abs()
}

fn mod_f32(x: f32, y: f32) -> f32 {
	libm::fmodf(x, y)
}

fn mod_f64(x: f64, y: f64) -> f64 {
	libm::fmod(x, y)
}

fn remainder_f32(x: f32, y: f32) -> f32 {
	libm::remainderf(x, y)
}

fn remainder_f64(x: f64, y: f64) -> f64 {
	libm::remainder(x, y)
}

fn mul_add_f32(x: f32, y: f32, z: f32) -> f32 {
	x.mul_add(y, z)
}

fn mul_add_f64(x: f64, y: f64, z: f64) -> f64 {
	x.mul_add(y, z)
}

fn fdim_f32(x: f32, y: f32) -> f32 {
	libm::fdimf(x, y)
}

fn fdim_f64(x: f64, y: f64) -> f64 {
	libm::fdim(x, y)
}

fn exp_f32(x: f32) -> f32 {
	x.exp()
}

fn exp_f64(x: f64) -> f64 {
	x.exp()
}

fn exp2_f32(x: f32) -> f32 {
	x.exp2()
}

fn exp2_f64(x: f64) -> f64 {
	x.exp2()
}

fn expm1_f32(x: f32) -> f32 {
	x.exp_m1()
}

fn expm1_f64(x: f64) -> f64 {
	x.exp_m1()
}

fn ln_f32(x: f32) -> f32 {
	x.ln()
}

fn ln_f64(x: f64) -> f64 {
	x.ln()
}

fn log10_f32(x: f32) -> f32 {
	x.log10()
}

fn log10_f64(x: f64) -> f64 {
	x.log10()
}

fn log2_f32(x: f32) -> f32 {
	x.log2()
}

fn log2_f64(x: f64) -> f64 {
	x.log2()
}

fn ln1p_f32(x: f32) -> f32 {
	x.ln_1p()
}

fn ln1p_f64(x: f64) -> f64 {
	x.ln_1p()
}

fn pow_f32(base: f32, exponent: f32) -> f32 {
	base.powf(exponent)
}

fn pow_f64(base: f64, exponent: f64) -> f64 {
	base.powf(exponent)
}

fn cbrt_f32(x: f32) -> f32 {
	x.cbrt()
}

fn cbrt_f64(x: f64) -> f64 {
	x.cbrt()
}

fn hypotenuse_f32(x: f32, y: f32) -> f32 {
	x.hypot(y)
}

fn hypotenuse_f64(x: f64, y: f64) -> f64 {
	x.hypot(y)
}

fn sin_f32(x: f32) -> f32 {
	x.sin()
}

fn sin_f64(x: f64) -> f64 {
	x.sin()
}

fn cos_f32(x: f32) -> f32 {
	x.cos()
}

fn cos_f64(x: f64) -> f64 {
	x.cos()
}

fn tan_f32(x: f32) -> f32 {
	x.tan()
}

fn tan_f64(x: f64) -> f64 {
	x.tan()
}

fn asin_f32(x: f32) -> f32 {
	x.asin()
}

fn asin_f64(x: f64) -> f64 {
	x.asin()
}

fn acos_f32(x: f32) -> f32 {
	x.acos()
}

fn acos_f64(x: f64) -> f64 {
	x.acos()
}

fn atan_f32(x: f32) -> f32 {
	x.atan()
}

fn atan_f64(x: f64) -> f64 {
	x.atan()
}

fn sinh_f32(x: f32) -> f32 {
	x.sinh()
}

fn sinh_f64(x: f64) -> f64 {
	x.sinh()
}

fn cosh_f32(x: f32) -> f32 {
	x.cosh()
}

fn cosh_f64(x: f64) -> f64 {
	x.cosh()
}

fn tanh_f32(x: f32) -> f32 {
	x.tanh()
}

fn tanh_f64(x: f64) -> f64 {
	x.tanh()
}

fn asinh_f32(x: f32) -> f32 {
	x.asinh()
}

fn asinh_f64(x: f64) -> f64 {
	x.asinh()
}

fn acosh_f32(x: f32) -> f32 {
	x.acosh()
}

fn acosh_f64(x: f64) -> f64 {
	x.acosh()
}

fn atanh_f32(x: f32) -> f32 {
	x.atanh()
}

fn atanh_f64(x: f64) -> f64 {
	x.atanh()
}

fn erf_f32(x: f32) -> f32 {
	libm::erff(x)
}

fn erf_f64(x: f64) -> f64 {
	libm::erf(x)
}

fn erfc_f32(x: f32) -> f32 {
	libm::erfcf(x)
}

fn erfc_f64(x: f64) -> f64 {
	libm::erfc(x)
}

fn gamma_f32(x: f32) -> f32 {
	libm::tgammaf(x)
}

fn gamma_f64(x: f64) -> f64 {
	libm::tgamma(x)
}

fn ln_gamma_f32(x: f32) -> f32 {
	libm::lgammaf(x)
}

fn ln_gamma_f64(x: f64) -> f64 {
	libm::lgamma(x)
}

fn round_f32_i32(x: f32) -> i32 {
	x.round() as i32
}

fn round_f64_i32(x: f64) -> i32 {
	x.round() as i32
}

fn round_f32_i64(x: f32) -> i64 {
	x.round() as i64
}

fn round_f64_i64(x: f64) -> i64 {
	x.round() as i64
}

fn frexp_f32(x: f32) -> (f32, i32) {
	libm::frexpf(x)
}

fn frexp_f64(x: f64) -> (f64, i32) {
	libm::frexp(x)
}

fn ldexp_f32(x: f32, exp: i32) -> f32 {
	libm::ldexpf(x, exp)
}

fn ldexp_f64(x: f64, exp: i32) -> f64 {
	libm::ldexp(x, exp)
}

fn modf_f32(x: f32) -> (f32, f32) {
	libm::modff(x)
}

fn modf_f64(x: f64) -> (f64, f64) {
	libm::modf(x)
}

fn logb_f32(x: f32) -> i32 {
	libm::ilogbf(x)
}

fn logb_f64(x: f64) -> i32 {
	libm::ilogb(x)
}

fn next_after_f32(from: f32, to: f32) -> f32 {
	libm::nextafterf(from, to)
}

fn next_after_f64(from: f64, to: f64) -> f64 {
	libm::nextafter(from, to)
}

fn copy_sign_f32(x: f32, y: f32) -> f32 {
	libm::copysignf(x, y)
}

fn copy_sign_f64(x: f64, y: f64) -> f64 {
	libm::copysign(x, y)
}

pub fn library(manager: &mut ScriptManager) -> Option<()> {
	manager.add_library_function(LIBRARY_NAME, "abs", abs_i32)?;
	manager.add_library_function(LIBRARY_NAME, "labs", abs_i64)?;
	manager.add_library_function(LIBRARY_NAME, "modf", mod_f32)?;
	manager.add_library_function(LIBRARY_NAME, "mod", mod_f64)?;
	manager.add_library_function(LIBRARY_NAME, "remf", remainder_f32)?;
	manager.add_library_function(LIBRARY_NAME, "rem", remainder_f64)?;
	manager.add_library_function(LIBRARY_NAME, "fmaf", mul_add_f32)?;
	manager.add_library_function(LIBRARY_NAME, "fma", mul_add_f64)?;
	manager.add_library_function(LIBRARY_NAME, "fdimf", fdim_f32)?;
	manager.add_library_function(LIBRARY_NAME, "fdim", fdim_f64)?;
	manager.add_library_function(LIBRARY_NAME, "expf", exp_f32)?;
	manager.add_library_function(LIBRARY_NAME, "exp", exp_f64)?;
	manager.add_library_function(LIBRARY_NAME, "exp2f", exp2_f32)?;
	manager.add_library_function(LIBRARY_NAME, "exp2", exp2_f64)?;
	manager.add_library_function(LIBRARY_NAME, "expm1f", expm1_f32)?;
	manager.add_library_function(LIBRARY_NAME, "expm1", expm1_f64)?;
	manager.add_library_function(LIBRARY_NAME, "lnf", ln_f32)?;
	manager.add_library_function(LIBRARY_NAME, "ln", ln_f64)?;
	manager.add_library_function(LIBRARY_NAME, "log2f", log2_f32)?;
	manager.add_library_function(LIBRARY_NAME, "log2", log2_f64)?;
	manager.add_library_function(LIBRARY_NAME, "log10f", log10_f32)?;
	manager.add_library_function(LIBRARY_NAME, "log10", log10_f64)?;
	manager.add_library_function(LIBRARY_NAME, "ln1pf", ln1p_f32)?;
	manager.add_library_function(LIBRARY_NAME, "ln1p", ln1p_f64)?;
	manager.add_library_function(LIBRARY_NAME, "powf", pow_f32)?;
	manager.add_library_function(LIBRARY_NAME, "pow", pow_f64)?;
	manager.add_library_function(LIBRARY_NAME, "cbrtf", cbrt_f32)?;
	manager.add_library_function(LIBRARY_NAME, "cbrt", cbrt_f64)?;
	manager.add_library_function(LIBRARY_NAME, "hypotf", hypotenuse_f32)?;
	manager.add_library_function(LIBRARY_NAME, "hypot", hypotenuse_f64)?;
	manager.add_library_function(LIBRARY_NAME, "sinf", sin_f32)?;
	manager.add_library_function(LIBRARY_NAME, "sin", sin_f64)?;
	manager.add_library_function(LIBRARY_NAME, "cosf", cos_f32)?;
	manager.add_library_function(LIBRARY_NAME, "cos", cos_f64)?;
	manager.add_library_function(LIBRARY_NAME, "tanf", tan_f32)?;
	manager.add_library_function(LIBRARY_NAME, "tan", tan_f64)?;
	manager.add_library_function(LIBRARY_NAME, "asinf", asin_f32)?;
	manager.add_library_function(LIBRARY_NAME, "asin", asin_f64)?;
	manager.add_library_function(LIBRARY_NAME, "acosf", acos_f32)?;
	manager.add_library_function(LIBRARY_NAME, "acos", acos_f64)?;
	manager.add_library_function(LIBRARY_NAME, "atanf", atan_f32)?;
	manager.add_library_function(LIBRARY_NAME, "atan", atan_f64)?;
	manager.add_library_function(LIBRARY_NAME, "sinhf", sinh_f32)?;
	manager.add_library_function(LIBRARY_NAME, "sinh", sinh_f64)?;
	manager.add_library_function(LIBRARY_NAME, "coshf", cosh_f32)?;
	manager.add_library_function(LIBRARY_NAME, "cosh", cosh_f64)?;
	manager.add_library_function(LIBRARY_NAME, "tanhf", tanh_f32)?;
	manager.add_library_function(LIBRARY_NAME, "tanh", tanh_f64)?;
	manager.add_library_function(LIBRARY_NAME, "asinhf", asinh_f32)?;
	manager.add_library_function(LIBRARY_NAME, "asinh", asinh_f64)?;
	manager.add_library_function(LIBRARY_NAME, "acoshf", acosh_f32)?;
	manager.add_library_function(LIBRARY_NAME, "acosh", acosh_f64)?;
	manager.add_library_function(LIBRARY_NAME, "atanhf", atanh_f32)?;
	manager.add_library_function(LIBRARY_NAME, "atanh", atanh_f64)?;
	manager.add_library_function(LIBRARY_NAME, "erff", erf_f32)?;
	manager.add_library_function(LIBRARY_NAME, "erf", erf_f64)?;
	manager.add_library_function(LIBRARY_NAME, "erfcf", erfc_f32)?;
	manager.add_library_function(LIBRARY_NAME, "erfc", erfc_f64)?;
	manager.add_library_function(LIBRARY_NAME, "gammaf", gamma_f32)?;
	manager.add_library_function(LIBRARY_NAME, "gamma", gamma_f64)?;
	manager.add_library_function(LIBRARY_NAME, "lgammaf", ln_gamma_f32)?;
	manager.add_library_function(LIBRARY_NAME, "lgamma", ln_gamma_f64)?;
	manager.add_library_function(LIBRARY_NAME, "lroundf", round_f32_i32)?;
	manager.add_library_function(LIBRARY_NAME, "lround", round_f64_i32)?;
	manager.add_library_function(LIBRARY_NAME, "llroundf", round_f32_i64)?;
	manager.add_library_function(LIBRARY_NAME, "llround", round_f64_i64)?;
	manager.add_library_function(LIBRARY_NAME, "frexpf", frexp_f32)?;
	manager.add_library_function(LIBRARY_NAME, "frexp", frexp_f64)?;
	manager.add_library_function(LIBRARY_NAME, "ldexpf", ldexp_f32)?;
	manager.add_library_function(LIBRARY_NAME, "ldexp", ldexp_f64)?;
	manager.add_library_function(LIBRARY_NAME, "modff", modf_f32)?;
	manager.add_library_function(LIBRARY_NAME, "modf", modf_f64)?;
	manager.add_library_function(LIBRARY_NAME, "ilogbf", logb_f32)?;
	manager.add_library_function(LIBRARY_NAME, "ilogb", logb_f64)?;
	manager.add_library_function(LIBRARY_NAME, "nextafterf", next_after_f32)?;
	manager.add_library_function(LIBRARY_NAME, "nextafter", next_after_f64)?;
	manager.add_library_function(LIBRARY_NAME, "copysignf", copy_sign_f32)?;
	manager.add_library_function(LIBRARY_NAME, "copysign", copy_sign_f64)?;

	Some(())
}