summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOri Bernstein <ori@eigenstate.org>2018-08-03 23:45:16 -0700
committerOri Bernstein <ori@eigenstate.org>2018-08-03 23:45:16 -0700
commitb9656ec7e120d1fced20ea5ca826c57f2de4fc84 (patch)
tree410b9484f6c74a0b19b389b8dc3b8a817c72bbaa
parent80ad746d8032274e2e6b40d3e4d801aa2085082d (diff)
downloadmc-b9656ec7e120d1fced20ea5ca826c57f2de4fc84.tar.gz
Clean up previous fixes.
The externs were already defined, they just needed to be moved out to prevent cyclic dependencies.
-rw-r--r--lib/math/bld.sub2
-rw-r--r--lib/math/fpmath.myr70
-rw-r--r--lib/math/impls.myr70
-rw-r--r--lib/math/sin-impl.myr5
4 files changed, 74 insertions, 73 deletions
diff --git a/lib/math/bld.sub b/lib/math/bld.sub
index d84ab50..918c36d 100644
--- a/lib/math/bld.sub
+++ b/lib/math/bld.sub
@@ -1,5 +1,6 @@
lib math =
fpmath.myr
+ impls.myr
# rounding (to actual integers)
round-impl+posixy-x64-sse4.s
@@ -14,7 +15,6 @@ lib math =
# fused-multiply-add
fma-impl+posixy-x64-fma.s
fma-impl.myr
- fma.myr
# log and log1p
log-impl.myr
diff --git a/lib/math/fpmath.myr b/lib/math/fpmath.myr
index e470ec1..f49918b 100644
--- a/lib/math/fpmath.myr
+++ b/lib/math/fpmath.myr
@@ -1,4 +1,5 @@
use std
+use "impls"
pkg math =
trait fpmath @f =
@@ -159,72 +160,3 @@ impl fpmath flt64 =
floor = {x; -> floor64(x)}
ceil = {x; -> ceil64(x)}
;;
-
-extern const rn32 : (x : flt32 -> int32)
-extern const rn64 : (x : flt64 -> int64)
-
-extern const atan32 : (x : flt32 -> flt32)
-extern const atan64 : (x : flt64 -> flt64)
-
-extern const atan232 : (y : flt32, x : flt32 -> flt32)
-extern const atan264 : (y : flt64, x : flt64 -> flt64)
-
-extern const fma32 : (x : flt32, y : flt32, z : flt32 -> flt32)
-extern const fma64 : (x : flt64, y : flt64, z : flt64 -> flt64)
-
-extern const exp32 : (x : flt32 -> flt32)
-extern const exp64 : (x : flt64 -> flt64)
-
-extern const expm132 : (x : flt32 -> flt32)
-extern const expm164 : (x : flt64 -> flt64)
-
-extern const log32 : (x : flt32 -> flt32)
-extern const log64 : (x : flt64 -> flt64)
-
-extern const log1p32 : (x : flt32 -> flt32)
-extern const log1p64 : (x : flt64 -> flt64)
-
-extern const horner_poly32 : (x : flt32, a : flt32[:] -> flt32)
-extern const horner_poly64 : (x : flt64, a : flt64[:] -> flt64)
-
-extern const horner_polyu32 : (x : flt32, a : uint32[:] -> flt32)
-extern const horner_polyu64 : (x : flt64, a : uint64[:] -> flt64)
-
-extern const powr32 : (x : flt32, y : flt32 -> flt32)
-extern const powr64 : (x : flt64, y : flt64 -> flt64)
-
-extern const scale232 : (x : flt32, m : int32 -> flt32)
-extern const scale264 : (x : flt64, m : int64 -> flt64)
-
-extern const sin32 : (x : flt32 -> flt32)
-extern const sin64 : (x : flt64 -> flt64)
-
-extern const cos32 : (x : flt32 -> flt32)
-extern const cos64 : (x : flt64 -> flt64)
-
-extern const sincos32 : (x : flt32 -> (flt32, flt32))
-extern const sincos64 : (x : flt64 -> (flt64, flt64))
-
-extern const sqrt32 : (x : flt32 -> flt32)
-extern const sqrt64 : (x : flt64 -> flt64)
-
-extern const kahan_sum32 : (l : flt32[:] -> flt32)
-extern const kahan_sum64 : (l : flt64[:] -> flt64)
-
-extern const priest_sum32 : (l : flt32[:] -> flt32)
-extern const priest_sum64 : (l : flt64[:] -> flt64)
-
-extern const tan32 : (x : flt32 -> flt32)
-extern const tan64 : (x : flt64 -> flt64)
-
-extern const cot32 : (x : flt32 -> flt32)
-extern const cot64 : (x : flt64 -> flt64)
-
-extern const trunc32 : (x : flt32 -> flt32)
-extern const trunc64 : (x : flt64 -> flt64)
-
-extern const floor32 : (x : flt32 -> flt32)
-extern const floor64 : (x : flt64 -> flt64)
-
-extern const ceil32 : (x : flt32 -> flt32)
-extern const ceil64 : (x : flt64 -> flt64)
diff --git a/lib/math/impls.myr b/lib/math/impls.myr
new file mode 100644
index 0000000..87abd33
--- /dev/null
+++ b/lib/math/impls.myr
@@ -0,0 +1,70 @@
+pkg math =
+ pkglocal extern const rn32 : (x : flt32 -> int32)
+ pkglocal extern const rn64 : (x : flt64 -> int64)
+
+ pkglocal extern const atan32 : (x : flt32 -> flt32)
+ pkglocal extern const atan64 : (x : flt64 -> flt64)
+
+ pkglocal extern const atan232 : (y : flt32, x : flt32 -> flt32)
+ pkglocal extern const atan264 : (y : flt64, x : flt64 -> flt64)
+
+ pkglocal extern const fma32 : (x : flt32, y : flt32, z : flt32 -> flt32)
+ pkglocal extern const fma64 : (x : flt64, y : flt64, z : flt64 -> flt64)
+
+ pkglocal extern const exp32 : (x : flt32 -> flt32)
+ pkglocal extern const exp64 : (x : flt64 -> flt64)
+
+ pkglocal extern const expm132 : (x : flt32 -> flt32)
+ pkglocal extern const expm164 : (x : flt64 -> flt64)
+
+ pkglocal extern const log32 : (x : flt32 -> flt32)
+ pkglocal extern const log64 : (x : flt64 -> flt64)
+
+ pkglocal extern const log1p32 : (x : flt32 -> flt32)
+ pkglocal extern const log1p64 : (x : flt64 -> flt64)
+
+ pkglocal extern const horner_poly32 : (x : flt32, a : flt32[:] -> flt32)
+ pkglocal extern const horner_poly64 : (x : flt64, a : flt64[:] -> flt64)
+
+ pkglocal extern const horner_polyu32 : (x : flt32, a : uint32[:] -> flt32)
+ pkglocal extern const horner_polyu64 : (x : flt64, a : uint64[:] -> flt64)
+
+ pkglocal extern const powr32 : (x : flt32, y : flt32 -> flt32)
+ pkglocal extern const powr64 : (x : flt64, y : flt64 -> flt64)
+
+ pkglocal extern const scale232 : (x : flt32, m : int32 -> flt32)
+ pkglocal extern const scale264 : (x : flt64, m : int64 -> flt64)
+
+ pkglocal extern const sin32 : (x : flt32 -> flt32)
+ pkglocal extern const sin64 : (x : flt64 -> flt64)
+
+ pkglocal extern const cos32 : (x : flt32 -> flt32)
+ pkglocal extern const cos64 : (x : flt64 -> flt64)
+
+ pkglocal extern const sincos32 : (x : flt32 -> (flt32, flt32))
+ pkglocal extern const sincos64 : (x : flt64 -> (flt64, flt64))
+
+ pkglocal extern const sqrt32 : (x : flt32 -> flt32)
+ pkglocal extern const sqrt64 : (x : flt64 -> flt64)
+
+ pkglocal extern const kahan_sum32 : (l : flt32[:] -> flt32)
+ pkglocal extern const kahan_sum64 : (l : flt64[:] -> flt64)
+
+ pkglocal extern const priest_sum32 : (l : flt32[:] -> flt32)
+ pkglocal extern const priest_sum64 : (l : flt64[:] -> flt64)
+
+ pkglocal extern const tan32 : (x : flt32 -> flt32)
+ pkglocal extern const tan64 : (x : flt64 -> flt64)
+
+ pkglocal extern const cot32 : (x : flt32 -> flt32)
+ pkglocal extern const cot64 : (x : flt64 -> flt64)
+
+ pkglocal extern const trunc32 : (x : flt32 -> flt32)
+ pkglocal extern const trunc64 : (x : flt64 -> flt64)
+
+ pkglocal extern const floor32 : (x : flt32 -> flt32)
+ pkglocal extern const floor64 : (x : flt64 -> flt64)
+
+ pkglocal extern const ceil32 : (x : flt32 -> flt32)
+ pkglocal extern const ceil64 : (x : flt64 -> flt64)
+;;
diff --git a/lib/math/sin-impl.myr b/lib/math/sin-impl.myr
index 569d732..dc47222 100644
--- a/lib/math/sin-impl.myr
+++ b/lib/math/sin-impl.myr
@@ -1,9 +1,8 @@
use std
use "fpmath"
-use "fma"
-use "scale2-impl"
-use "sum-impl"
+use "impls"
+use "sum-impl" /* we use generics from here */
use "util"
/*