summaryrefslogtreecommitdiff
path: root/scripts/src/libs/math.rs
diff options
context:
space:
mode:
authorMicha White <botahamec@outlook.com>2023-11-08 14:09:17 -0500
committerMicha White <botahamec@outlook.com>2023-11-08 14:09:17 -0500
commit279c233cb1f32ed42419ed6a9c2e14c1c1bc80e7 (patch)
treeb72aee1d6363b3e65dcd20581590f902a88fbc0a /scripts/src/libs/math.rs
parent1ec2599c45a51dde87496edce7cd3ab301a18539 (diff)
Create a script system
Diffstat (limited to 'scripts/src/libs/math.rs')
-rw-r--r--scripts/src/libs/math.rs398
1 files changed, 398 insertions, 0 deletions
diff --git a/scripts/src/libs/math.rs b/scripts/src/libs/math.rs
new file mode 100644
index 0000000..4aae3c3
--- /dev/null
+++ b/scripts/src/libs/math.rs
@@ -0,0 +1,398 @@
+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(())
+}