shithub: mc

Download patch

ref: b9656ec7e120d1fced20ea5ca826c57f2de4fc84
parent: 80ad746d8032274e2e6b40d3e4d801aa2085082d
author: Ori Bernstein <ori@eigenstate.org>
date: Fri Aug 3 19:45:16 EDT 2018

Clean up previous fixes.

	The externs were already defined, they just needed to
	be moved out to prevent cyclic dependencies.

--- 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 @@
 	# fused-multiply-add
 	fma-impl+posixy-x64-fma.s
 	fma-impl.myr
-	fma.myr
 
 	# log and log1p
 	log-impl.myr
--- 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 @@
 	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)
--- /dev/null
+++ b/lib/math/impls.myr
@@ -1,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)
+;;
--- 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"
 
 /*