aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Ramsay <Joe.Ramsay@arm.com>2022-12-15 13:27:31 +0000
committerJoe Ramsay <joe.ramsay@arm.com>2022-12-15 13:27:31 +0000
commit1bca1a541cce13c352296acd5dfa16160fc27bc9 (patch)
tree71ea7d7ff77d964ce4dc10b7ba8e293a333a6ef6
parent3c0af1a73df1551a372294d4b05573b2a47f051e (diff)
downloadarm-optimized-routines-1bca1a541cce13c352296acd5dfa16160fc27bc9.tar.gz
pl/math: Auto-generate mathbench and ulp headers
Instead of maintaining three separate lists of routines, which are cumbersome and prone to merge conflicts, we provide a new macro, PL_SIG, which by some preprocessor machinery outputs the lists in the required format (macro formats have been changed very slightly to make the generation simpler). Only routines with simple signatures are handled - binary functions still need mathbench wrappers defined manually. As well, routines with non-standard references (i.e. powi/powk) still need entries and wrappers manually defined.
-rw-r--r--pl/math/Dir.mk18
-rw-r--r--pl/math/acosh_3u.c3
-rw-r--r--pl/math/acoshf_2u8.c3
-rw-r--r--pl/math/asinh_2u5.c5
-rw-r--r--pl/math/asinhf_3u5.c5
-rw-r--r--pl/math/atan2_2u5.c6
-rw-r--r--pl/math/atan2f_3u.c6
-rw-r--r--pl/math/atanhf_3u1.c3
-rw-r--r--pl/math/cbrtf_1u5.c7
-rw-r--r--pl/math/cosh_2u.c3
-rw-r--r--pl/math/coshf_1u9.c3
-rw-r--r--pl/math/erfc_4u5.c6
-rw-r--r--pl/math/erfcf_2u.c3
-rw-r--r--pl/math/erff_1u5.c11
-rw-r--r--pl/math/expm1_2u5.c5
-rw-r--r--pl/math/expm1f_1u6.c5
-rw-r--r--pl/math/log10_2u.c6
-rw-r--r--pl/math/log10f.c6
-rw-r--r--pl/math/log1p_2u.c5
-rw-r--r--pl/math/log1pf_2u1.c5
-rw-r--r--pl/math/pl_sig.h43
-rw-r--r--pl/math/sinh_3u.c3
-rw-r--r--pl/math/sinhf_2u3.c3
-rw-r--r--pl/math/sv_atan2_2u5.c5
-rw-r--r--pl/math/sv_atan2f_3u.c5
-rw-r--r--pl/math/sv_atan_2u5.c3
-rw-r--r--pl/math/sv_atanf_2u9.c3
-rw-r--r--pl/math/sv_cos_2u5.c3
-rw-r--r--pl/math/sv_cosf_2u1.c3
-rw-r--r--pl/math/sv_erf_2u5.c3
-rw-r--r--pl/math/sv_erfc_4u.c2
-rw-r--r--pl/math/sv_erff_1u3.c3
-rw-r--r--pl/math/sv_expf_2u.c3
-rw-r--r--pl/math/sv_log10_2u5.c4
-rw-r--r--pl/math/sv_log10f_3u5.c2
-rw-r--r--pl/math/sv_log_2u5.c3
-rw-r--r--pl/math/sv_logf_3u4.c3
-rw-r--r--pl/math/sv_sin_3u.c3
-rw-r--r--pl/math/sv_sinf_1u9.c3
-rw-r--r--pl/math/sv_tanf_3u2.c3
-rw-r--r--pl/math/tanf_3u3.c3
-rw-r--r--pl/math/tanhf_2u6.c3
-rw-r--r--pl/math/test/mathbench_funcs.h125
-rw-r--r--pl/math/test/ulp_funcs.h117
-rw-r--r--pl/math/test/ulp_wrappers.h75
-rw-r--r--pl/math/v_asinh_2u5.c2
-rw-r--r--pl/math/v_asinhf_2u7.c2
-rw-r--r--pl/math/v_atan2_3u.c4
-rw-r--r--pl/math/v_atan2f_3u.c4
-rw-r--r--pl/math/v_atan_2u5.c4
-rw-r--r--pl/math/v_atanf_3u.c4
-rw-r--r--pl/math/v_atanhf_3u1.c2
-rw-r--r--pl/math/v_cbrtf_1u5.c2
-rw-r--r--pl/math/v_cosh_2u.c2
-rw-r--r--pl/math/v_coshf_2u4.c2
-rw-r--r--pl/math/v_erf_2u.c6
-rw-r--r--pl/math/v_erfc_4u.c6
-rw-r--r--pl/math/v_erfcf_1u.c3
-rw-r--r--pl/math/v_erff_1u5.c6
-rw-r--r--pl/math/v_exp_tail.c2
-rw-r--r--pl/math/v_expf.c2
-rw-r--r--pl/math/v_expm1_2u5.c3
-rw-r--r--pl/math/v_expm1f_1u6.c3
-rw-r--r--pl/math/v_log10_2u5.c5
-rw-r--r--pl/math/v_log10f_3u5.c6
-rw-r--r--pl/math/v_log1p_2u5.c3
-rw-r--r--pl/math/v_log1pf_2u1.c3
-rw-r--r--pl/math/v_log2_3u.c5
-rw-r--r--pl/math/v_log2f_2u6.c6
-rw-r--r--pl/math/v_sinh_3u.c2
-rw-r--r--pl/math/v_sinhf_2u3.c2
-rw-r--r--pl/math/v_tanf_3u2.c3
-rw-r--r--pl/math/v_tanhf_2u6.c4
73 files changed, 393 insertions, 245 deletions
diff --git a/pl/math/Dir.mk b/pl/math/Dir.mk
index 0fe1e67..b866fa4 100644
--- a/pl/math/Dir.mk
+++ b/pl/math/Dir.mk
@@ -54,7 +54,23 @@ $(B)/test/mathtest.o: CFLAGS_PL += -fmath-errno
$(math-host-objs): CC = $(HOST_CC)
$(math-host-objs): CFLAGS_PL = $(HOST_CFLAGS)
-$(B)/test/ulp.o: $(AOR)/test/ulp.h
+build/pl/include/test/ulp_funcs_gen.h: $(math-lib-srcs)
+ # Replace PL_SIG
+ cat $^ | grep PL_SIG | $(CC) -xc - -o - -E "-DPL_SIG(v, t, a, f, ...)=_Z##v##t##a(f)" -P > $@
+
+build/pl/include/test/mathbench_funcs_gen.h: $(math-lib-srcs)
+ # Replace PL_SIG macros with mathbench func entries
+ cat $^ | grep PL_SIG | $(CC) -xc - -o - -E "-DPL_SIG(v, t, a, f, ...)=_Z##v##t##a(f, ##__VA_ARGS__)" -P > $@
+
+build/pl/include/test/ulp_wrappers_gen.h: $(math-lib-srcs)
+ # Replace PL_SIG macros with ULP wrapper declarations
+ cat $^ | grep PL_SIG | $(CC) -xc - -o - -E "-DPL_SIG(v, t, a, f, ...)=Z##v##N##t##a##_WRAP(f)" -P > $@
+
+$(B)/test/ulp.o: $(AOR)/test/ulp.h build/pl/include/test/ulp_funcs_gen.h build/pl/include/test/ulp_wrappers_gen.h
+$(B)/test/ulp.o: CFLAGS_PL += -I build/pl/include/test
+
+$(B)/test/mathbench.o: build/pl/include/test/mathbench_funcs_gen.h
+$(B)/test/mathbench.o: CFLAGS_PL += -I build/pl/include/test
build/pl/lib/libmathlib.so: $(math-lib-objs:%.o=%.os)
$(CC) $(CFLAGS_PL) $(LDFLAGS) -shared -o $@ $^
diff --git a/pl/math/acosh_3u.c b/pl/math/acosh_3u.c
index 6ac64f6..e0014d6 100644
--- a/pl/math/acosh_3u.c
+++ b/pl/math/acosh_3u.c
@@ -5,6 +5,7 @@
*/
#include "math_config.h"
+#include "pl_sig.h"
#define Ln2 (0x1.62e42fefa39efp-1)
#define MinusZero (0x8000000000000000)
@@ -53,3 +54,5 @@ acosh (double x)
double xm1 = x - 1;
return log1p (xm1 + sqrt (2 * xm1 + xm1 * xm1));
}
+
+PL_SIG (S, D, 1, acosh, 1.0, 10.0)
diff --git a/pl/math/acoshf_2u8.c b/pl/math/acoshf_2u8.c
index fb8d12d..0b1e9c7 100644
--- a/pl/math/acoshf_2u8.c
+++ b/pl/math/acoshf_2u8.c
@@ -5,6 +5,7 @@
*/
#include "math_config.h"
+#include "pl_sig.h"
#define Ln2 (0x1.62e4p-1f)
#define MinusZero 0x80000000
@@ -50,3 +51,5 @@ acoshf (float x)
float xm1 = x - 1;
return log1pf (xm1 + sqrtf (2 * xm1 + xm1 * xm1));
}
+
+PL_SIG (S, F, 1, acosh, 1.0, 10.0)
diff --git a/pl/math/asinh_2u5.c b/pl/math/asinh_2u5.c
index 9cbdd33..bbe6bee 100644
--- a/pl/math/asinh_2u5.c
+++ b/pl/math/asinh_2u5.c
@@ -4,8 +4,9 @@
* Copyright (c) 2022, Arm Limited.
* SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
*/
-#include "math_config.h"
#include "estrin.h"
+#include "math_config.h"
+#include "pl_sig.h"
#define AbsMask 0x7fffffffffffffff
#define ExpM26 0x3e50000000000000 /* asuint64(0x1.0p-26). */
@@ -72,3 +73,5 @@ asinh (double x)
return asdouble (asuint64 (optr_aor_log_f64 (ax + sqrt (ax * ax + 1)))
| sign);
}
+
+PL_SIG (S, D, 1, asinh, -10.0, 10.0)
diff --git a/pl/math/asinhf_3u5.c b/pl/math/asinhf_3u5.c
index 48acdef..ec3dd9b 100644
--- a/pl/math/asinhf_3u5.c
+++ b/pl/math/asinhf_3u5.c
@@ -4,8 +4,9 @@
* SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
*/
-#include "math_config.h"
#include "estrinf.h"
+#include "math_config.h"
+#include "pl_sig.h"
#define AbsMask (0x7fffffff)
#define SqrtFltMax (0x1.749e96p+10f)
@@ -66,3 +67,5 @@ asinhf (float x)
return asfloat (asuint (optr_aor_log_f32 (ax + sqrtf (ax * ax + 1))) | sign);
}
+
+PL_SIG (S, F, 1, asinh, -10.0, 10.0)
diff --git a/pl/math/atan2_2u5.c b/pl/math/atan2_2u5.c
index 471c5c9..c1cf7a3 100644
--- a/pl/math/atan2_2u5.c
+++ b/pl/math/atan2_2u5.c
@@ -7,8 +7,9 @@
#include <stdbool.h>
-#include "math_config.h"
#include "atan_common.h"
+#include "math_config.h"
+#include "pl_sig.h"
#define Pi (0x1.921fb54442d18p+1)
#define PiOver2 (0x1.921fb54442d18p+0)
@@ -146,3 +147,6 @@ atan2 (double y, double x)
/* Account for the sign of x and y. */
return asdouble (asuint64 (ret) ^ sign_xy);
}
+
+/* Arity of 2 means no mathbench entry emitted. See test/mathbench_funcs.h. */
+PL_SIG (S, D, 2, atan2)
diff --git a/pl/math/atan2f_3u.c b/pl/math/atan2f_3u.c
index 3fa6296..7780be6 100644
--- a/pl/math/atan2f_3u.c
+++ b/pl/math/atan2f_3u.c
@@ -7,8 +7,9 @@
#include <stdbool.h>
-#include "math_config.h"
#include "atanf_common.h"
+#include "math_config.h"
+#include "pl_sig.h"
#define Pi (0x1.921fb6p+1f)
#define PiOver2 (0x1.921fb6p+0f)
@@ -154,3 +155,6 @@ atan2f (float y, float x)
/* Account for the sign of x and y. */
return asfloat (asuint (ret) ^ sign_xy);
}
+
+/* Arity of 2 means no mathbench entry emitted. See test/mathbench_funcs.h. */
+PL_SIG (S, F, 2, atan2)
diff --git a/pl/math/atanhf_3u1.c b/pl/math/atanhf_3u1.c
index 77795c8..db663bf 100644
--- a/pl/math/atanhf_3u1.c
+++ b/pl/math/atanhf_3u1.c
@@ -6,6 +6,7 @@
#include "math_config.h"
#include "mathlib.h"
+#include "pl_sig.h"
#define AbsMask 0x7fffffff
#define Half 0x3f000000
@@ -74,3 +75,5 @@ atanhf (float x)
float ax = asfloat (iax);
return halfsign * log1pf_inline ((2 * ax) / (1 - ax));
}
+
+PL_SIG (S, F, 1, atanh, -1.0, 1.0)
diff --git a/pl/math/cbrtf_1u5.c b/pl/math/cbrtf_1u5.c
index d544a68..74e7a49 100644
--- a/pl/math/cbrtf_1u5.c
+++ b/pl/math/cbrtf_1u5.c
@@ -5,10 +5,9 @@
* SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
*/
-#include <math.h>
-
-#include "math_config.h"
#include "estrinf.h"
+#include "math_config.h"
+#include "pl_sig.h"
#define AbsMask 0x7fffffff
#define SignMask 0x80000000
@@ -60,3 +59,5 @@ cbrtf (float x)
Which can be done easily using ldexpf. */
return asfloat (asuint (ldexpf (a * T (2 + e % 3), e / 3)) | sign);
}
+
+PL_SIG (S, F, 1, cbrt, -10.0, 10.0)
diff --git a/pl/math/cosh_2u.c b/pl/math/cosh_2u.c
index 7526cdf..6be189d 100644
--- a/pl/math/cosh_2u.c
+++ b/pl/math/cosh_2u.c
@@ -6,6 +6,7 @@
*/
#include "math_config.h"
+#include "pl_sig.h"
#define AbsMask 0x7fffffffffffffff
#define SpecialBound \
@@ -53,3 +54,5 @@ cosh (double x)
double t = __exp_dd (ax, 0);
return 0.5 * t + 0.5 / t;
}
+
+PL_SIG (S, D, 1, cosh, -10.0, 10.0)
diff --git a/pl/math/coshf_1u9.c b/pl/math/coshf_1u9.c
index ca3f767..b9cbe54 100644
--- a/pl/math/coshf_1u9.c
+++ b/pl/math/coshf_1u9.c
@@ -6,6 +6,7 @@
*/
#include "math_config.h"
+#include "pl_sig.h"
#define AbsMask 0x7fffffff
#define TinyBound 0x20000000 /* 0x1p-63: Round to 1 below this. */
@@ -58,3 +59,5 @@ coshf (float x)
float t = optr_aor_exp_f32 (ax);
return 0.5f * t + 0.5f / t;
}
+
+PL_SIG (S, F, 1, cosh, -10.0, 10.0)
diff --git a/pl/math/erfc_4u5.c b/pl/math/erfc_4u5.c
index 8088562..b418421 100644
--- a/pl/math/erfc_4u5.c
+++ b/pl/math/erfc_4u5.c
@@ -5,11 +5,9 @@
* SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
*/
-#include <stdint.h>
-#include <math.h>
-#include <errno.h>
#include "math_config.h"
#include "pairwise_horner.h"
+#include "pl_sig.h"
#define AbsMask (0x7fffffffffffffff)
@@ -145,3 +143,5 @@ erfc (double x)
return __math_uflow (0);
}
}
+
+PL_SIG (S, D, 1, erfc, -6.0, 28.0)
diff --git a/pl/math/erfcf_2u.c b/pl/math/erfcf_2u.c
index 8d4bba1..32a96dc 100644
--- a/pl/math/erfcf_2u.c
+++ b/pl/math/erfcf_2u.c
@@ -7,6 +7,7 @@
#include "erfcf.h"
#include "math_config.h"
+#include "pl_sig.h"
#define P(i) __erfcf_poly_data.poly[i]
@@ -120,3 +121,5 @@ erfcf (float x)
}
return __math_uflowf (0);
}
+
+PL_SIG (S, F, 1, erfc, -4.0, 10.0)
diff --git a/pl/math/erff_1u5.c b/pl/math/erff_1u5.c
index bad68a6..afa5880 100644
--- a/pl/math/erff_1u5.c
+++ b/pl/math/erff_1u5.c
@@ -4,13 +4,10 @@
* Copyright (c) 2020-2022, Arm Limited.
* SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
*/
-
-#include <stdint.h>
-#include <math.h>
-
-#include "math_config.h"
-#include "hornerf.h"
#include "estrinf.h"
+#include "hornerf.h"
+#include "math_config.h"
+#include "pl_sig.h"
#define TwoOverSqrtPiMinusOne 0x1.06eba8p-3f
#define A __erff_data.erff_poly_A
@@ -99,3 +96,5 @@ erff (float x)
}
return r;
}
+
+PL_SIG (S, F, 1, erf, -4.0, 4.0)
diff --git a/pl/math/expm1_2u5.c b/pl/math/expm1_2u5.c
index 98ef078..55ddbd1 100644
--- a/pl/math/expm1_2u5.c
+++ b/pl/math/expm1_2u5.c
@@ -5,8 +5,9 @@
* SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
*/
-#include "math_config.h"
#include "estrin.h"
+#include "math_config.h"
+#include "pl_sig.h"
#define InvLn2 0x1.71547652b82fep0
#define Ln2hi 0x1.62e42fefa39efp-1
@@ -73,3 +74,5 @@ expm1 (double x)
/* expm1(x) ~= 2 * (p * t + (t - 1/2)). */
return 2 * fma (p, t, t - 0.5);
}
+
+PL_SIG (S, D, 1, expm1, -9.9, 9.9)
diff --git a/pl/math/expm1f_1u6.c b/pl/math/expm1f_1u6.c
index 0904652..9c0c178 100644
--- a/pl/math/expm1f_1u6.c
+++ b/pl/math/expm1f_1u6.c
@@ -5,8 +5,9 @@
* SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
*/
-#include "math_config.h"
#include "hornerf.h"
+#include "math_config.h"
+#include "pl_sig.h"
#define Shift (0x1.8p23f)
#define InvLn2 (0x1.715476p+0f)
@@ -69,3 +70,5 @@ expm1f (float x)
/* expm1(x) ~= 2 * (p * t + (t - 1/2)). */
return 2 * fmaf (p, t, t - 0.5f);
}
+
+PL_SIG (S, F, 1, expm1, -9.9, 9.9)
diff --git a/pl/math/log10_2u.c b/pl/math/log10_2u.c
index 3330389..b05e17b 100644
--- a/pl/math/log10_2u.c
+++ b/pl/math/log10_2u.c
@@ -6,9 +6,7 @@
*/
#include "math_config.h"
-#include <float.h>
-#include <math.h>
-#include <stdint.h>
+#include "pl_sig.h"
/* Polynomial coefficients and lookup tables. */
#define T __log10_data.tab
@@ -143,3 +141,5 @@ log10l (long double x)
#endif
#endif
// clang-format on
+
+PL_SIG (S, D, 1, log10, 0.01, 11.1)
diff --git a/pl/math/log10f.c b/pl/math/log10f.c
index 79f5d12..ea67b4b 100644
--- a/pl/math/log10f.c
+++ b/pl/math/log10f.c
@@ -6,6 +6,7 @@
*/
#include "math_config.h"
+#include "pl_sig.h"
#include <math.h>
#include <stdint.h>
@@ -84,7 +85,12 @@ log10f (float x)
return eval_as_float (y);
}
+
+// clang-format off
#if USE_GLIBC_ABI
strong_alias (log10f, __log10f_finite)
hidden_alias (log10f, __ieee754_log10f)
#endif
+
+PL_SIG (S, F, 1, log10, 0.01, 11.1)
+ // clang-format on
diff --git a/pl/math/log1p_2u.c b/pl/math/log1p_2u.c
index ade5d87..20b4811 100644
--- a/pl/math/log1p_2u.c
+++ b/pl/math/log1p_2u.c
@@ -4,8 +4,9 @@
* SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
*/
-#include "math_config.h"
#include "estrin.h"
+#include "math_config.h"
+#include "pl_sig.h"
#define Ln2Hi 0x1.62e42fefa3800p-1
#define Ln2Lo 0x1.ef35793c76730p-45
@@ -120,3 +121,5 @@ log1p (double x)
double y = fma (Ln2Lo, kd, cm);
return y + fma (Ln2Hi, kd, p);
}
+
+PL_SIG (S, D, 1, log1p, -0.9, 10.0)
diff --git a/pl/math/log1pf_2u1.c b/pl/math/log1pf_2u1.c
index 9b7cb94..97dd1c4 100644
--- a/pl/math/log1pf_2u1.c
+++ b/pl/math/log1pf_2u1.c
@@ -4,8 +4,9 @@
* SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
*/
-#include "math_config.h"
#include "hornerf.h"
+#include "math_config.h"
+#include "pl_sig.h"
#define Ln2 (0x1.62e43p-1f)
#define SignMask (0x80000000)
@@ -149,3 +150,5 @@ log1pf (float x)
/* Apply the scaling back. */
return fmaf (scale_back, Ln2, p);
}
+
+PL_SIG (S, F, 1, log1p, -0.9, 10.0)
diff --git a/pl/math/pl_sig.h b/pl/math/pl_sig.h
new file mode 100644
index 0000000..e9f54c0
--- /dev/null
+++ b/pl/math/pl_sig.h
@@ -0,0 +1,43 @@
+/*
+ * PL macros for emitting various ulp/bench entries based on function signature
+ *
+ * Copyright (c) 2022, Arm Limited.
+ * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception.
+ */
+#define PL_DECL_SF1(fun) float fun##f (float);
+#define PL_DECL_SF2(fun) float fun##f (float, float);
+#define PL_DECL_SD1(fun) double fun (double);
+#define PL_DECL_SD2(fun) double fun (double, double);
+
+#if V_SUPPORTED
+#define PL_DECL_VF1(fun) VPCS_ATTR v_f32_t V_NAME (fun##f) (v_f32_t);
+#define PL_DECL_VF2(fun) VPCS_ATTR v_f32_t V_NAME (fun##f) (v_f32_t, v_f32_t);
+#define PL_DECL_VD1(fun) VPCS_ATTR v_f64_t V_NAME (fun) (v_f64_t);
+#define PL_DECL_VD2(fun) VPCS_ATTR v_f64_t V_NAME (fun) (v_f64_t, v_f64_t);
+#else
+#define PL_DECL_VF1(fun)
+#define PL_DECL_VF2(fun)
+#define PL_DECL_VD1(fun)
+#define PL_DECL_VD2(fun)
+#endif
+
+#if SV_SUPPORTED
+#define PL_DECL_SVF1(fun) sv_f32_t __sv_##fun##f_x (sv_f32_t, svbool_t);
+#define PL_DECL_SVF2(fun) \
+ sv_f32_t __sv_##fun##f_x (sv_f32_t, sv_f32_t, svbool_t);
+#define PL_DECL_SVD1(fun) sv_f64_t __sv_##fun##_x (sv_f64_t, svbool_t);
+#define PL_DECL_SVD2(fun) \
+ sv_f64_t __sv_##fun##_x (sv_f64_t, sv_f64_t, svbool_t);
+#else
+#define PL_DECL_SVF1(fun)
+#define PL_DECL_SVF2(fun)
+#define PL_DECL_SVD1(fun)
+#define PL_DECL_SVD2(fun)
+#endif
+
+/* For building the routines, emit function prototype from PL_SIG. This
+ ensures that the correct signature has been chosen (wrong one will be a
+ compile error). PL_SIG is defined differently by various components of the
+ build system to emit entries in the wrappers and entries for mathbench and
+ ulp. */
+#define PL_SIG(v, t, a, f, ...) PL_DECL_##v##t##a (f)
diff --git a/pl/math/sinh_3u.c b/pl/math/sinh_3u.c
index ce3ff13..f56b8d0 100644
--- a/pl/math/sinh_3u.c
+++ b/pl/math/sinh_3u.c
@@ -6,6 +6,7 @@
*/
#include "math_config.h"
+#include "pl_sig.h"
#define AbsMask 0x7fffffffffffffff
#define Half 0x3fe0000000000000
@@ -53,3 +54,5 @@ sinh (double x)
(t + t / (t + 1)) / -2 for x < 0. */
return (t + t / (t + 1)) * halfsign;
}
+
+PL_SIG (S, D, 1, sinh, -10.0, 10.0)
diff --git a/pl/math/sinhf_2u3.c b/pl/math/sinhf_2u3.c
index c616dac..cb5eb51 100644
--- a/pl/math/sinhf_2u3.c
+++ b/pl/math/sinhf_2u3.c
@@ -6,6 +6,7 @@
*/
#include "math_config.h"
+#include "pl_sig.h"
#define AbsMask 0x7fffffff
#define Half 0x3f000000
@@ -63,3 +64,5 @@ sinhf (float x)
(t + t / (t + 1)) / -2 for x < 0. */
return (t + t / (t + 1)) * halfsign;
}
+
+PL_SIG (S, F, 1, sinh, -10.0, 10.0)
diff --git a/pl/math/sv_atan2_2u5.c b/pl/math/sv_atan2_2u5.c
index bc98ccd..c047595 100644
--- a/pl/math/sv_atan2_2u5.c
+++ b/pl/math/sv_atan2_2u5.c
@@ -6,6 +6,8 @@
*/
#include "sv_math.h"
+#include "pl_sig.h"
+
#if SV_SUPPORTED
#include "sv_atan_common.h"
@@ -79,4 +81,7 @@ __sv_atan2_x (sv_f64_t y, sv_f64_t x, const svbool_t pg)
strong_alias (__sv_atan2_x, _ZGVsMxvv_atan2)
+ /* Arity of 2 means no mathbench entry emitted. See test/mathbench_funcs.h.
+ */
+ PL_SIG (SV, D, 2, atan2)
#endif
diff --git a/pl/math/sv_atan2f_3u.c b/pl/math/sv_atan2f_3u.c
index 5f93c49..0ce7071 100644
--- a/pl/math/sv_atan2f_3u.c
+++ b/pl/math/sv_atan2f_3u.c
@@ -6,6 +6,8 @@
*/
#include "sv_math.h"
+#include "pl_sig.h"
+
#if SV_SUPPORTED
#include "sv_atanf_common.h"
@@ -80,4 +82,7 @@ __sv_atan2f_x (sv_f32_t y, sv_f32_t x, const svbool_t pg)
strong_alias (__sv_atan2f_x, _ZGVsMxvv_atan2f)
+ /* Arity of 2 means no mathbench entry emitted. See test/mathbench_funcs.h.
+ */
+ PL_SIG (SV, F, 2, atan2)
#endif
diff --git a/pl/math/sv_atan_2u5.c b/pl/math/sv_atan_2u5.c
index 49c5e82..4f52b43 100644
--- a/pl/math/sv_atan_2u5.c
+++ b/pl/math/sv_atan_2u5.c
@@ -6,6 +6,8 @@
*/
#include "sv_math.h"
+#include "pl_sig.h"
+
#if SV_SUPPORTED
#include "sv_atan_common.h"
@@ -49,4 +51,5 @@ __sv_atan_x (sv_f64_t x, const svbool_t pg)
strong_alias (__sv_atan_x, _ZGVsMxv_atan)
+ PL_SIG (SV, D, 1, atan, -3.1, 3.1)
#endif
diff --git a/pl/math/sv_atanf_2u9.c b/pl/math/sv_atanf_2u9.c
index d195ca5..db15830 100644
--- a/pl/math/sv_atanf_2u9.c
+++ b/pl/math/sv_atanf_2u9.c
@@ -6,6 +6,8 @@
*/
#include "sv_math.h"
+#include "pl_sig.h"
+
#if SV_SUPPORTED
#include "sv_atanf_common.h"
@@ -46,4 +48,5 @@ __sv_atanf_x (sv_f32_t x, const svbool_t pg)
strong_alias (__sv_atanf_x, _ZGVsMxv_atanf)
+ PL_SIG (SV, F, 1, atan, -3.1, 3.1)
#endif
diff --git a/pl/math/sv_cos_2u5.c b/pl/math/sv_cos_2u5.c
index 483c73f..a19be9b 100644
--- a/pl/math/sv_cos_2u5.c
+++ b/pl/math/sv_cos_2u5.c
@@ -6,6 +6,8 @@
*/
#include "sv_math.h"
+#include "pl_sig.h"
+
#if SV_SUPPORTED
#define InvPio2 (sv_f64 (0x1.45f306dc9c882p-1))
@@ -74,4 +76,5 @@ __sv_cos_x (sv_f64_t x, const svbool_t pg)
strong_alias (__sv_cos_x, _ZGVsMxv_cos)
+ PL_SIG (SV, D, 1, cos, -3.1, 3.1)
#endif
diff --git a/pl/math/sv_cosf_2u1.c b/pl/math/sv_cosf_2u1.c
index 70057ea..3bc3d71 100644
--- a/pl/math/sv_cosf_2u1.c
+++ b/pl/math/sv_cosf_2u1.c
@@ -6,6 +6,8 @@
*/
#include "sv_math.h"
+#include "pl_sig.h"
+
#if SV_SUPPORTED
#define NegPio2_1 (sv_f32 (-0x1.921fb6p+0f))
@@ -72,4 +74,5 @@ __sv_cosf_x (sv_f32_t x, const svbool_t pg)
strong_alias (__sv_cosf_x, _ZGVsMxv_cosf)
+ PL_SIG (SV, F, 1, cos, -3.1, 3.1)
#endif
diff --git a/pl/math/sv_erf_2u5.c b/pl/math/sv_erf_2u5.c
index 1265047..eac500c 100644
--- a/pl/math/sv_erf_2u5.c
+++ b/pl/math/sv_erf_2u5.c
@@ -6,6 +6,8 @@
*/
#include "sv_math.h"
+#include "pl_sig.h"
+
#if SV_SUPPORTED
#define Scale (8.0)
@@ -87,4 +89,5 @@ __sv_erf_x (sv_f64_t x, const svbool_t pg)
strong_alias (__sv_erf_x, _ZGVsMxv_erf)
+ PL_SIG (SV, D, 1, erf, -4.0, 4.0)
#endif
diff --git a/pl/math/sv_erfc_4u.c b/pl/math/sv_erfc_4u.c
index 33c1c62..41fb654 100644
--- a/pl/math/sv_erfc_4u.c
+++ b/pl/math/sv_erfc_4u.c
@@ -6,6 +6,7 @@
*/
#include "sv_math.h"
+#include "pl_sig.h"
#if SV_SUPPORTED
#include "sv_exp_tail.h"
@@ -133,4 +134,5 @@ __sv_erfc_x (sv_f64_t x, const svbool_t pg)
strong_alias (__sv_erfc_x, _ZGVsMxv_erfc)
+ PL_SIG (SV, D, 1, erfc, -4.0, 10.0)
#endif
diff --git a/pl/math/sv_erff_1u3.c b/pl/math/sv_erff_1u3.c
index f0af98e..02d7625 100644
--- a/pl/math/sv_erff_1u3.c
+++ b/pl/math/sv_erff_1u3.c
@@ -6,6 +6,8 @@
*/
#include "sv_math.h"
+#include "pl_sig.h"
+
#if SV_SUPPORTED
#define AbsMask (0x7fffffff)
@@ -88,4 +90,5 @@ __sv_erff_x (sv_f32_t x, const svbool_t pg)
strong_alias (__sv_erff_x, _ZGVsMxv_erff)
+ PL_SIG (SV, F, 1, erf, -4.0, 4.0)
#endif
diff --git a/pl/math/sv_expf_2u.c b/pl/math/sv_expf_2u.c
index 9ae9d60..d301392 100644
--- a/pl/math/sv_expf_2u.c
+++ b/pl/math/sv_expf_2u.c
@@ -6,6 +6,8 @@
*/
#include "sv_math.h"
+#include "pl_sig.h"
+
#if SV_SUPPORTED
#define C(i) __sv_expf_poly[i]
@@ -140,4 +142,5 @@ __sv_expf_x (sv_f32_t x, const svbool_t pg)
strong_alias (__sv_expf_x, _ZGVsMxv_expf)
+ PL_SIG (SV, F, 1, exp, -9.9, 9.9)
#endif // SV_SUPPORTED
diff --git a/pl/math/sv_log10_2u5.c b/pl/math/sv_log10_2u5.c
index 92dbfa4..d6ed49a 100644
--- a/pl/math/sv_log10_2u5.c
+++ b/pl/math/sv_log10_2u5.c
@@ -5,8 +5,9 @@
* SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
*/
-#include "math_config.h"
#include "sv_math.h"
+#include "math_config.h"
+#include "pl_sig.h"
#if SV_SUPPORTED
@@ -76,4 +77,5 @@ __sv_log10_x (sv_f64_t x, const svbool_t pg)
strong_alias (__sv_log10_x, _ZGVsMxv_log10)
+ PL_SIG (SV, D, 1, log10, 0.01, 11.1)
#endif
diff --git a/pl/math/sv_log10f_3u5.c b/pl/math/sv_log10f_3u5.c
index fe8ecfd..c1ff196 100644
--- a/pl/math/sv_log10f_3u5.c
+++ b/pl/math/sv_log10f_3u5.c
@@ -6,6 +6,7 @@
*/
#include "sv_math.h"
+#include "pl_sig.h"
#if SV_SUPPORTED
@@ -75,4 +76,5 @@ __sv_log10f_x (sv_f32_t x, const svbool_t pg)
strong_alias (__sv_log10f_x, _ZGVsMxv_log10f)
+ PL_SIG (SV, F, 1, log10, 0.01, 11.1)
#endif
diff --git a/pl/math/sv_log_2u5.c b/pl/math/sv_log_2u5.c
index c10299c..a50c3d6 100644
--- a/pl/math/sv_log_2u5.c
+++ b/pl/math/sv_log_2u5.c
@@ -6,6 +6,8 @@
*/
#include "sv_math.h"
+#include "pl_sig.h"
+
#if SV_SUPPORTED
#define A(i) __sv_log_data.poly[i]
@@ -71,4 +73,5 @@ __sv_log_x (sv_f64_t x, const svbool_t pg)
strong_alias (__sv_log_x, _ZGVsMxv_log);
+PL_SIG (SV, D, 1, log, 0.01, 11.1)
#endif // SV_SUPPORTED
diff --git a/pl/math/sv_logf_3u4.c b/pl/math/sv_logf_3u4.c
index 125f806..e9147e4 100644
--- a/pl/math/sv_logf_3u4.c
+++ b/pl/math/sv_logf_3u4.c
@@ -6,6 +6,8 @@
*/
#include "sv_math.h"
+#include "pl_sig.h"
+
#if SV_SUPPORTED
#define P(i) __sv_logf_poly[i]
@@ -63,4 +65,5 @@ __sv_logf_x (sv_f32_t x, const svbool_t pg)
strong_alias (__sv_logf_x, _ZGVsMxv_logf)
+ PL_SIG (SV, F, 1, log, 0.01, 11.1)
#endif // SV_SUPPORTED
diff --git a/pl/math/sv_sin_3u.c b/pl/math/sv_sin_3u.c
index be873a2..4d879e0 100644
--- a/pl/math/sv_sin_3u.c
+++ b/pl/math/sv_sin_3u.c
@@ -6,6 +6,8 @@
*/
#include "sv_math.h"
+#include "pl_sig.h"
+
#if SV_SUPPORTED
#define InvPi (sv_f64 (0x1.45f306dc9c883p-2))
@@ -79,4 +81,5 @@ __sv_sin_x (sv_f64_t x, const svbool_t pg)
strong_alias (__sv_sin_x, _ZGVsMxv_sin)
+ PL_SIG (SV, D, 1, sin, -3.1, 3.1)
#endif
diff --git a/pl/math/sv_sinf_1u9.c b/pl/math/sv_sinf_1u9.c
index f7913ca..5634a87 100644
--- a/pl/math/sv_sinf_1u9.c
+++ b/pl/math/sv_sinf_1u9.c
@@ -6,6 +6,8 @@
*/
#include "sv_math.h"
+#include "pl_sig.h"
+
#if SV_SUPPORTED
#define A3 (sv_f32 (__sv_sinf_data.coeffs[3]))
@@ -74,4 +76,5 @@ __sv_sinf_x (sv_f32_t x, const svbool_t pg)
strong_alias (__sv_sinf_x, _ZGVsMxv_sinf)
+ PL_SIG (SV, F, 1, sin, -3.1, 3.1)
#endif
diff --git a/pl/math/sv_tanf_3u2.c b/pl/math/sv_tanf_3u2.c
index e1d3757..2f28239 100644
--- a/pl/math/sv_tanf_3u2.c
+++ b/pl/math/sv_tanf_3u2.c
@@ -6,6 +6,8 @@
*/
#include "sv_math.h"
+#include "pl_sig.h"
+
#if SV_SUPPORTED
/* Constants. */
@@ -98,4 +100,5 @@ __sv_tanf_x (sv_f32_t x, const svbool_t pg)
strong_alias (__sv_tanf_x, _ZGVsMxv_tanf)
+ PL_SIG (SV, F, 1, tan, -3.1, 3.1)
#endif
diff --git a/pl/math/tanf_3u3.c b/pl/math/tanf_3u3.c
index e6f899f..3e4ad38 100644
--- a/pl/math/tanf_3u3.c
+++ b/pl/math/tanf_3u3.c
@@ -5,6 +5,7 @@
* SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
*/
#include "math_config.h"
+#include "pl_sig.h"
/* Useful constants. */
#define NegPio2_1 (-0x1.921fb6p+0f)
@@ -190,3 +191,5 @@ tanf (float x)
/* A unified way of assembling the result on both interval types. */
return fmaf (scale, p, offset);
}
+
+PL_SIG (S, F, 1, tan, -3.1, 3.1)
diff --git a/pl/math/tanhf_2u6.c b/pl/math/tanhf_2u6.c
index 145f437..90f561f 100644
--- a/pl/math/tanhf_2u6.c
+++ b/pl/math/tanhf_2u6.c
@@ -5,6 +5,7 @@
* SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
*/
#include "math_config.h"
+#include "pl_sig.h"
#define BoringBound \
0x41102cb3 /* 0x1.205966p+3, above which tanhf rounds to 1 (or -1 for \
@@ -78,3 +79,5 @@ tanhf (float x)
float q = expm1f_inline (2 * x);
return q / (q + 2);
}
+
+PL_SIG (S, F, 1, tanh, -10.0, 10.0)
diff --git a/pl/math/test/mathbench_funcs.h b/pl/math/test/mathbench_funcs.h
index 9e3b9a0..e3eda6f 100644
--- a/pl/math/test/mathbench_funcs.h
+++ b/pl/math/test/mathbench_funcs.h
@@ -6,86 +6,64 @@
* SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
*/
+#define _ZSF1(fun, a, b) F(fun##f, a, b)
+#define _ZSD1(f, a, b) D(f, a, b)
+
#ifdef __vpcs
-#define ZVNF(f, a, b) F(__s_##f, a, b) VF(__v_##f, a, b) VNF(__vn_##f, a, b) VNF(_ZGVnN4v_##f, a, b)
-#define ZVND(f, a, b) D(__s_##f, a, b) VD(__v_##f, a, b) VND(__vn_##f, a, b) VND(_ZGVnN2v_##f, a, b)
+#define _ZVF1(fun, a, b) F(__s_##fun##f, a, b) VF(__v_##fun##f, a, b) VNF(__vn_##fun##f, a, b) VNF(_ZGVnN4v_##fun##f, a, b)
+#define _ZVD1(f, a, b) D(__s_##f, a, b) VD(__v_##f, a, b) VND(__vn_##f, a, b) VND(_ZGVnN2v_##f, a, b)
#elif __aarch64__
-#define ZVNF(f, a, b) F(__s_##f, a, b) VF(__v_##f, a, b)
-#define ZVND(f, a, b) D(__s_##f, a, b) VD(__v_##f, a, b)
+#define _ZVF1(fun, a, b) F(__s_##fun##f, a, b) VF(__v_##fun##f, a, b)
+#define _ZVD1(f, a, b) D(__s_##f, a, b) VD(__v_##f, a, b)
+
+#elif WANT_VMATH
+
+#define _ZVF1(fun, a, b) F(__s_##fun##f, a, b)
+#define _ZVD1(f, a, b) D(__s_##f, a, b)
+
+#else
+
+#define _ZVF1(f, a, b)
+#define _ZVD1(f, a, b)
+
+#endif
+
+#if WANT_SVE_MATH
+
+#define _ZSVF1(fun, a, b) SVF(__sv_##fun##f_x, a, b) SVF(_ZGVsMxv_##fun##f, a, b)
+#define _ZSVD1(f, a, b) SVD(__sv_##f##_x, a, b) SVD(_ZGVsMxv_##f, a, b)
#else
-#define ZVNF(f, a, b) F(__s_##f, a, b)
-#define ZVND(f, a, b) D(__s_##f, a, b)
+#define _ZSVF1(f, a, b)
+#define _ZSVD1(f, a, b)
#endif
-#define VZSVF(f, a, b) SVF(__sv_##f##_x, a, b) SVF(_ZGVsMxv_##f, a, b)
-#define VZSVD(f, a, b) SVD(__sv_##f##_x, a, b) SVD(_ZGVsMxv_##f, a, b)
+/* No auto-generated wrappers for binary functions - they have be
+ manually defined in mathbench_wrappers.h. We have to define silent
+ macros for them anyway as they will be emitted by PL_SIG. */
+#define _ZSF2(...)
+#define _ZSD2(...)
+#define _ZVF2(...)
+#define _ZVD2(...)
+#define _ZSVF2(...)
+#define _ZSVD2(...)
+
+#include "mathbench_funcs_gen.h"
+
+/* PL_SIG only emits entries for unary functions, since if a function
+ needs to be wrapped in mathbench there is no way for it to know the
+ same of the wrapper. Add entries for binary functions, or any other
+ exotic signatures that need wrapping, below. */
-F (acoshf, 1.0, 10.0)
-F (asinhf, -10.0, 10.0)
-F (atanf, -10.0, 10.0)
{"atan2f", 'f', 0, -10.0, 10.0, {.f = atan2f_wrap}},
-F (atanhf, -1.0, 1.0)
-F (cbrtf, -10.0, 10.0)
-F (cosf, -3.1, 3.1)
-F (coshf, -10.0, 10.0)
-F (erfcf, -4.0, 10.0)
-F (erff, -4.0, 4.0)
-F (expm1f, -9.9, 9.9)
-F (log10f, 0.01, 11.1)
-F (log1pf, -0.9, 10.0)
-F (log2f, 0.01, 11.1)
-F (sinf, -3.1, 3.1)
-F (sinhf, -10.0, 10.0)
-F (tanf, -3.1, 3.1)
-F (tanhf, -10.0, 10.0)
-
-D (acosh, 1.0, 10.0)
-D (asinh, -10.0, 10.0)
-D (atan, -10.0, 10.0)
{"atan2", 'd', 0, -10.0, 10.0, {.d = atan2_wrap}},
-D (cos, -3.1, 3.1)
-D (cosh, -10.0, 10.0)
-D (erf, -6,6)
-D (erfc, -6.0, 28.0)
-D (expm1, -9.9, 9.9)
-D (log10, 0.01, 11.1)
-D (log1p, -0.9, 10.0)
-D (log2, 0.01, 11.1)
{"powi", 'd', 0, 0.01, 11.1, {.d = powi_wrap}},
-D (sin, -3.1, 3.1)
-D (sinh, -10.0, 10.0)
-
-#if WANT_VMATH
-ZVNF (asinhf, -10.0, 10.0)
-ZVND (asinh, -10.0, 10.0)
-ZVNF (atanf, -10.0, 10.0)
-ZVNF (atanhf, -1.0, 1.0)
-ZVND (atan, -10.0, 10.0)
-ZVNF (cbrtf, -10.0, 10.0)
-ZVNF (coshf, -10.0, 10.0)
-ZVND (cosh, -10.0, 10.0)
-ZVNF (erff, -4.0, 4.0)
-ZVND (erf, -6.0, 6.0)
-ZVNF (erfcf, -6.0, 28.0)
-ZVND (erfc, -6.0, 28.0)
-ZVNF (expm1f, -9.9, 9.9)
-ZVND (expm1, -9.9, 9.9)
-ZVNF (log10f, 0.01, 11.1)
-ZVND (log10, 0.01, 11.1)
-ZVNF (log1pf, -0.9, 10.0)
-ZVND (log1p, -0.9, 10.0)
-ZVNF (log2f, 0.01, 11.1)
-ZVND (log2, 0.01, 11.1)
-ZVNF (sinhf, -10.0, 10.0)
-ZVND (sinh, -10.0, 10.0)
-ZVNF (tanf, -3.1, 3.1)
-ZVNF (tanhf, -10.0, 10.0)
+
{"__s_atan2f", 'f', 0, -10.0, 10.0, {.f = __s_atan2f_wrap}},
{"__s_atan2", 'd', 0, -10.0, 10.0, {.d = __s_atan2_wrap}},
{"__v_atan2f", 'f', 'v', -10.0, 10.0, {.vf = __v_atan2f_wrap}},
@@ -96,30 +74,13 @@ ZVNF (tanhf, -10.0, 10.0)
{"_ZGVnN2vv_atan2", 'd', 'n', -10.0, 10.0, {.vnd = _Z_atan2_wrap}},
#if WANT_SVE_MATH
-VZSVF (atanf, -3.1, 3.1)
-VZSVD (atan, -3.1, 3.1)
{"__sv_atan2f_x", 'f', 'n', -10.0, 10.0, {.svf = __sv_atan2f_wrap}},
{"_ZGVsMxvv_atan2f", 'f', 'n', -10.0, 10.0, {.svf = _Z_sv_atan2f_wrap}},
{"__sv_atan2_x", 'd', 'n', -10.0, 10.0, {.svd = __sv_atan2_wrap}},
{"_ZGVsM2vv_atan2", 'd', 'n', -10.0, 10.0, {.svd = _Z_sv_atan2_wrap}},
-VZSVF (erff, -4.0, 4.0)
-VZSVD (erf, -4.0, 4.0)
-VZSVD (erfc, -4, 10)
-VZSVF (expf, -9.9, 9.9)
-VZSVF (cosf, -3.1, 3.1)
-VZSVD (cos, -3.1, 3.1)
-VZSVF (sinf, -3.1, 3.1)
-VZSVD (sin, -3.1, 3.1)
-VZSVF (logf, 0.01, 11.1)
-VZSVD (log, 0.01, 11.1)
-VZSVF (log10f, 0.01, 11.1)
-VZSVD (log10, 0.01, 11.1)
-VZSVF (tanf, -3.1, 3.1)
{"__sv_powif_x", 'f', 'n', -10.0, 10.0, {.svf = __sv_powif_wrap}},
{"_ZGVsMxvv_powi", 'f', 'n', -10.0, 10.0, {.svf = _Z_sv_powi_wrap}},
{"__sv_powi_x", 'd', 'n', -10.0, 10.0, {.svd = __sv_powi_wrap}},
{"_ZGVsMxvv_powk", 'd', 'n', -10.0, 10.0, {.svd = _Z_sv_powk_wrap}},
-
-#endif
#endif
// clang-format on
diff --git a/pl/math/test/ulp_funcs.h b/pl/math/test/ulp_funcs.h
index 86e2bed..af1c464 100644
--- a/pl/math/test/ulp_funcs.h
+++ b/pl/math/test/ulp_funcs.h
@@ -7,103 +7,60 @@
#ifdef __vpcs
-#define _ZVNF1(f) SF1 (f) VF1 (f) ZVNF1 (f)
-#define _ZVND1(f) SD1 (f) VD1 (f) ZVND1 (f)
-#define _ZVNF2(f) SF2 (f) VF2 (f) ZVNF2 (f)
-#define _ZVND2(f) SD2 (f) VD2 (f) ZVND2 (f)
+#define _ZVF1(f) SF1 (f) VF1 (f) ZVNF1 (f)
+#define _ZVD1(f) SD1 (f) VD1 (f) ZVND1 (f)
+#define _ZVF2(f) SF2 (f) VF2 (f) ZVNF2 (f)
+#define _ZVD2(f) SD2 (f) VD2 (f) ZVND2 (f)
#elif __aarch64
-#define _ZVNF1(f) SF1 (f) VF1 (f)
-#define _ZVND1(f) SD1 (f) VD1 (f)
-#define _ZVNF2(f) SF2 (f) VF2 (f)
-#define _ZVND2(f) SD2 (f) VD2 (f)
+#define _ZVF1(f) SF1 (f) VF1 (f)
+#define _ZVD1(f) SD1 (f) VD1 (f)
+#define _ZVF2(f) SF2 (f) VF2 (f)
+#define _ZVD2(f) SD2 (f) VD2 (f)
+
+#elif WANT_VMATH
+
+#define _ZVF1(f) SF1 (f)
+#define _ZVD1(f) SD1 (f)
+#define _ZVF2(f) SF2 (f)
+#define _ZVD2(f) SD2 (f)
#else
-#define _ZVNF1(f) SF1 (f)
-#define _ZVND1(f) SD1 (f)
-#define _ZVNF2(f) SF2 (f)
-#define _ZVND2(f) SD2 (f)
+#define _ZVF1(f)
+#define _ZVD1(f)
+#define _ZVF2(f)
+#define _ZVD2(f)
#endif
+#if WANT_SVE_MATH
+
#define _ZSVF1(f) SVF1 (f) ZSVF1 (f)
#define _ZSVF2(f) SVF2 (f) ZSVF2 (f)
#define _ZSVD1(f) SVD1 (f) ZSVD1 (f)
#define _ZSVD2(f) SVD2 (f) ZSVD2 (f)
-F1 (acosh)
-F1 (asinh)
-F2 (atan2)
-F1 (atanh)
-F1 (cbrt)
-F1 (cosh)
-F1 (erfc)
-F1 (erf)
-F1 (expm1)
-F1 (log10)
-F1 (log1p)
-F1 (sinh)
-F1 (tan)
-F1 (tanh)
-D1 (acosh)
-D1 (asinh)
-D2 (atan2)
-D1 (cosh)
-D1 (erfc)
-D1 (expm1)
-D1 (log10)
-D1 (log1p)
-D1 (sinh)
-#if WANT_VMATH
-_ZVNF1 (asinh)
-_ZVND1 (asinh)
-_ZVNF1 (atan)
-_ZVND1 (atan)
-_ZVNF2 (atan2)
-_ZVND2 (atan2)
-_ZVNF1 (atanh)
-_ZVNF1 (cbrt)
-_ZVNF1 (cosh)
-_ZVND1 (cosh)
-_ZVNF1 (erf)
-_ZVND1 (erf)
-_ZVNF1 (erfc)
-_ZVND1 (erfc)
-_ZVNF1 (expm1)
-_ZVND1 (expm1)
-_ZVNF1 (log10)
-_ZVND1 (log10)
-_ZVNF1 (log1p)
-_ZVND1 (log1p)
-_ZVNF1 (log2)
-_ZVND1 (log2)
-_ZVNF1 (sinh)
-_ZVND1 (sinh)
-_ZVNF1 (tan)
-_ZVNF1 (tanh)
+#else
+
+#define _ZSVF1(f)
+#define _ZSVF2(f)
+#define _ZSVD1(f)
+#define _ZSVD2(f)
+
+#endif
+
+#define _ZSF1(f) F1 (f)
+#define _ZSF2(f) F2 (f)
+#define _ZSD1(f) D1 (f)
+#define _ZSD2(f) D2 (f)
+
+#include "ulp_funcs_gen.h"
+
#if WANT_SVE_MATH
-_ZSVF2 (atan2)
-_ZSVD2 (atan2)
-_ZSVF1 (atan)
-_ZSVD1 (atan)
-_ZSVF1 (cos)
-_ZSVD1 (cos)
-_ZSVF1 (erf)
-_ZSVD1 (erf)
-_ZSVD1 (erfc)
-_ZSVF1 (exp)
-_ZSVF1 (log)
-_ZSVD1 (log)
-_ZSVF1 (log10)
-_ZSVD1 (log10)
F (__sv_powi, sv_powi, ref_powi, mpfr_powi, 2, 0, d2, 0)
F (_ZGVsMxvv_powk, Z_sv_powk, ref_powi, mpfr_powi, 2, 0, d2, 0)
F (__sv_powif, sv_powif, ref_powif, mpfr_powi, 2, 1, f2, 0)
F (_ZGVsMxvv_powi, Z_sv_powi, ref_powif, mpfr_powi, 2, 1, f2, 0)
-_ZSVF1 (sin)
-_ZSVD1 (sin)
-_ZSVF1 (tan)
-#endif
#endif
diff --git a/pl/math/test/ulp_wrappers.h b/pl/math/test/ulp_wrappers.h
index be87c21..e91cbe5 100644
--- a/pl/math/test/ulp_wrappers.h
+++ b/pl/math/test/ulp_wrappers.h
@@ -89,13 +89,20 @@ DECL_POW_INT_REF(ref_powi, long double, double, int)
#define ZVND1_WRAP(func) VD1_WRAP(func) VND1_WRAP(func)
#define ZVND2_WRAP(func) VD2_WRAP(func) VND2_WRAP(func)
-#else
+#elif WANT_VMATH
#define ZVNF1_WRAP(func) VF1_WRAP(func)
#define ZVNF2_WRAP(func) VF2_WRAP(func)
#define ZVND1_WRAP(func) VD1_WRAP(func)
#define ZVND2_WRAP(func) VD2_WRAP(func)
+#else
+
+#define ZVNF1_WRAP(func)
+#define ZVNF2_WRAP(func)
+#define ZVND1_WRAP(func)
+#define ZVND2_WRAP(func)
+
#endif
#define SVF1_WRAP(func) static float sv_##func##f(float x) { return svretf(__sv_##func##f_x(svargf(x), svptrue_b32())); }
@@ -108,62 +115,34 @@ DECL_POW_INT_REF(ref_powi, long double, double, int)
#define ZSVD1_WRAP(func) static double Z_sv_##func(double x) { return svretd(_ZGVsMxv_##func(svargd(x), svptrue_b64())); }
#define ZSVD2_WRAP(func) static double Z_sv_##func(double x, double y) { return svretd(_ZGVsMxvv_##func(svargd(x), svargd(y), svptrue_b64())); }
+#if WANT_SVE_MATH
+
#define ZSVNF1_WRAP(func) SVF1_WRAP(func) ZSVF1_WRAP(func)
#define ZSVNF2_WRAP(func) SVF2_WRAP(func) ZSVF2_WRAP(func)
#define ZSVND1_WRAP(func) SVD1_WRAP(func) ZSVD1_WRAP(func)
#define ZSVND2_WRAP(func) SVD2_WRAP(func) ZSVD2_WRAP(func)
-/* Wrappers for vector functions. */
-#if WANT_VMATH
-ZVNF1_WRAP(asinh)
-ZVNF1_WRAP(atan)
-ZVNF2_WRAP(atan2)
-ZVNF1_WRAP(atanh)
-ZVNF1_WRAP(cbrt)
-ZVNF1_WRAP(cosh)
-ZVNF1_WRAP(erf)
-ZVNF1_WRAP(erfc)
-ZVNF1_WRAP(expm1)
-ZVNF1_WRAP(log10)
-ZVNF1_WRAP(log1p)
-ZVNF1_WRAP(log2)
-ZVNF1_WRAP(sinh)
-ZVNF1_WRAP(tan)
-ZVNF1_WRAP(tanh)
-ZVND1_WRAP(asinh)
-ZVND1_WRAP(atan)
-ZVND2_WRAP(atan2)
-ZVND1_WRAP(cosh)
-ZVND1_WRAP(erf)
-ZVND1_WRAP(erfc)
-ZVND1_WRAP(expm1)
-ZVND1_WRAP(log10)
-ZVND1_WRAP(log1p)
-ZVND1_WRAP(log2)
-ZVND1_WRAP(sinh)
+#else
+
+#define ZSVNF1_WRAP(func)
+#define ZSVNF2_WRAP(func)
+#define ZSVND1_WRAP(func)
+#define ZSVND2_WRAP(func)
+
+#endif
+
+/* No wrappers for scalar routines, but PL_SIG will emit them. */
+#define ZSNF1_WRAP(func)
+#define ZSNF2_WRAP(func)
+#define ZSND1_WRAP(func)
+#define ZSND2_WRAP(func)
+
+#include "ulp_wrappers_gen.h"
+
#if WANT_SVE_MATH
-ZSVNF2_WRAP(atan2)
-ZSVNF1_WRAP(atan)
-ZSVNF1_WRAP(cos)
-ZSVNF1_WRAP(erf)
-ZSVNF1_WRAP(exp)
-ZSVNF1_WRAP(log)
-ZSVNF1_WRAP(log10)
-ZSVNF1_WRAP(sin)
-ZSVNF1_WRAP(tan)
static float Z_sv_powi(float x, float y) { return svretf(_ZGVsMxvv_powi(svargf(x), svdup_n_s32((int)round(y)), svptrue_b32())); }
static float sv_powif(float x, float y) { return svretf(__sv_powif_x(svargf(x), svdup_n_s32((int)round(y)), svptrue_b32())); }
-
-ZSVND2_WRAP(atan2)
-ZSVND1_WRAP(atan)
-ZSVND1_WRAP(cos)
-ZSVND1_WRAP(erf)
-ZSVND1_WRAP(erfc)
-ZSVND1_WRAP(log)
-ZSVND1_WRAP(log10)
-ZSVND1_WRAP(sin)
static double Z_sv_powk(double x, double y) { return svretd(_ZGVsMxvv_powk(svargd(x), svdup_n_s64((long)round(y)), svptrue_b64())); }
static double sv_powi(double x, double y) { return svretd(__sv_powi_x(svargd(x), svdup_n_s64((long)round(y)), svptrue_b64())); }
#endif
-#endif
// clang-format on
diff --git a/pl/math/v_asinh_2u5.c b/pl/math/v_asinh_2u5.c
index 974e6df..02e8098 100644
--- a/pl/math/v_asinh_2u5.c
+++ b/pl/math/v_asinh_2u5.c
@@ -6,6 +6,7 @@
#include "v_math.h"
#include "estrin.h"
+#include "pl_sig.h"
#if V_SUPPORTED
@@ -152,4 +153,5 @@ VPCS_ATTR v_f64_t V_NAME (asinh) (v_f64_t x)
}
VPCS_ALIAS
+PL_SIG (V, D, 1, asinh, -10.0, 10.0)
#endif
diff --git a/pl/math/v_asinhf_2u7.c b/pl/math/v_asinhf_2u7.c
index 7bce7ff..18a2395 100644
--- a/pl/math/v_asinhf_2u7.c
+++ b/pl/math/v_asinhf_2u7.c
@@ -6,6 +6,7 @@
#include "v_math.h"
#include "include/mathlib.h"
+#include "pl_sig.h"
#if V_SUPPORTED
@@ -53,4 +54,5 @@ VPCS_ATTR v_f32_t V_NAME (asinhf) (v_f32_t x)
}
VPCS_ALIAS
+PL_SIG (V, F, 1, asinh, -10.0, 10.0)
#endif
diff --git a/pl/math/v_atan2_3u.c b/pl/math/v_atan2_3u.c
index d69d221..2b31bec 100644
--- a/pl/math/v_atan2_3u.c
+++ b/pl/math/v_atan2_3u.c
@@ -6,6 +6,8 @@
*/
#include "v_math.h"
+#include "pl_sig.h"
+
#if V_SUPPORTED
#include "atan_common.h"
@@ -75,4 +77,6 @@ v_f64_t V_NAME (atan2) (v_f64_t y, v_f64_t x)
}
VPCS_ALIAS
+/* Arity of 2 means no mathbench entry emitted. See test/mathbench_funcs.h. */
+PL_SIG (V, D, 2, atan2)
#endif
diff --git a/pl/math/v_atan2f_3u.c b/pl/math/v_atan2f_3u.c
index dc0fbca..8c2c8f2 100644
--- a/pl/math/v_atan2f_3u.c
+++ b/pl/math/v_atan2f_3u.c
@@ -6,6 +6,8 @@
*/
#include "v_math.h"
+#include "pl_sig.h"
+
#if V_SUPPORTED
#include "atanf_common.h"
@@ -75,4 +77,6 @@ v_f32_t V_NAME (atan2f) (v_f32_t y, v_f32_t x)
}
VPCS_ALIAS
+/* Arity of 2 means no mathbench entry emitted. See test/mathbench_funcs.h. */
+PL_SIG (V, F, 2, atan2)
#endif
diff --git a/pl/math/v_atan_2u5.c b/pl/math/v_atan_2u5.c
index 05c77c0..3e504e7 100644
--- a/pl/math/v_atan_2u5.c
+++ b/pl/math/v_atan_2u5.c
@@ -6,6 +6,8 @@
*/
#include "v_math.h"
+#include "pl_sig.h"
+
#if V_SUPPORTED
#include "atan_common.h"
@@ -47,4 +49,6 @@ v_f64_t V_NAME (atan) (v_f64_t x)
return y;
}
VPCS_ALIAS
+
+PL_SIG (V, D, 1, atan, -10.0, 10.0)
#endif
diff --git a/pl/math/v_atanf_3u.c b/pl/math/v_atanf_3u.c
index 7c84244..9a0230a 100644
--- a/pl/math/v_atanf_3u.c
+++ b/pl/math/v_atanf_3u.c
@@ -6,6 +6,8 @@
*/
#include "v_math.h"
+#include "pl_sig.h"
+
#if V_SUPPORTED
#include "atanf_common.h"
@@ -46,4 +48,6 @@ v_f32_t V_NAME (atanf) (v_f32_t x)
return y;
}
VPCS_ALIAS
+
+PL_SIG (V, F, 1, atan, -10.0, 10.0)
#endif
diff --git a/pl/math/v_atanhf_3u1.c b/pl/math/v_atanhf_3u1.c
index 1e3a561..5c9ceb1 100644
--- a/pl/math/v_atanhf_3u1.c
+++ b/pl/math/v_atanhf_3u1.c
@@ -6,6 +6,7 @@
#include "v_math.h"
#include "mathlib.h"
+#include "pl_sig.h"
#if V_SUPPORTED
@@ -48,4 +49,5 @@ VPCS_ATTR v_f32_t V_NAME (atanhf) (v_f32_t x)
VPCS_ALIAS
+PL_SIG (V, F, 1, atanh, -1.0, 1.0)
#endif
diff --git a/pl/math/v_cbrtf_1u5.c b/pl/math/v_cbrtf_1u5.c
index fd43051..9db2579 100644
--- a/pl/math/v_cbrtf_1u5.c
+++ b/pl/math/v_cbrtf_1u5.c
@@ -6,6 +6,7 @@
#include "v_math.h"
#include "mathlib.h"
+#include "pl_sig.h"
#if V_SUPPORTED
@@ -85,4 +86,5 @@ VPCS_ATTR v_f32_t V_NAME (cbrtf) (v_f32_t x)
}
VPCS_ALIAS
+PL_SIG (V, F, 1, cbrt, -10.0, 10.0)
#endif
diff --git a/pl/math/v_cosh_2u.c b/pl/math/v_cosh_2u.c
index 6d1a9ed..fa4f1e6 100644
--- a/pl/math/v_cosh_2u.c
+++ b/pl/math/v_cosh_2u.c
@@ -5,6 +5,7 @@
*/
#include "v_math.h"
+#include "pl_sig.h"
#include "v_exp_tail.h"
#define C1 v_f64 (C1_scal)
@@ -83,4 +84,5 @@ VPCS_ATTR v_f64_t V_NAME (cosh) (v_f64_t x)
}
VPCS_ALIAS
+PL_SIG (V, D, 1, cosh, -10.0, 10.0)
#endif
diff --git a/pl/math/v_coshf_2u4.c b/pl/math/v_coshf_2u4.c
index 7d7a228..95288d9 100644
--- a/pl/math/v_coshf_2u4.c
+++ b/pl/math/v_coshf_2u4.c
@@ -6,6 +6,7 @@
#include "v_math.h"
#include "mathlib.h"
+#include "pl_sig.h"
#define AbsMask 0x7fffffff
#define TinyBound 0x20000000 /* 0x1p-63: Round to 1 below this. */
@@ -59,4 +60,5 @@ VPCS_ATTR v_f32_t V_NAME (coshf) (v_f32_t x)
}
VPCS_ALIAS
+PL_SIG (V, F, 1, cosh, -10.0, 10.0)
#endif
diff --git a/pl/math/v_erf_2u.c b/pl/math/v_erf_2u.c
index 5a7403f..192b6ed 100644
--- a/pl/math/v_erf_2u.c
+++ b/pl/math/v_erf_2u.c
@@ -5,9 +5,11 @@
* SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
*/
+#include "v_math.h"
#include "include/mathlib.h"
#include "math_config.h"
-#include "v_math.h"
+#include "pl_sig.h"
+
#if V_SUPPORTED
#define AbsMask v_u64 (0x7fffffffffffffff)
@@ -101,4 +103,6 @@ v_f64_t V_NAME (erf) (v_f64_t x)
return y;
}
VPCS_ALIAS
+
+PL_SIG (V, D, 1, erf, -6.0, 6.0)
#endif
diff --git a/pl/math/v_erfc_4u.c b/pl/math/v_erfc_4u.c
index 80e11e7..88f5172 100644
--- a/pl/math/v_erfc_4u.c
+++ b/pl/math/v_erfc_4u.c
@@ -5,9 +5,11 @@
* SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
*/
-#include "math_config.h"
#include "v_math.h"
#include "horner.h"
+#include "math_config.h"
+#include "pl_sig.h"
+
#if V_SUPPORTED
/* Accurate exponential (vector variant of exp_dd). */
@@ -153,4 +155,6 @@ v_f64_t V_NAME (erfc) (v_f64_t x)
return y;
}
VPCS_ALIAS
+
+PL_SIG (V, D, 1, erfc, -6.0, 28.0)
#endif
diff --git a/pl/math/v_erfcf_1u.c b/pl/math/v_erfcf_1u.c
index d9c65a5..cf2b174 100644
--- a/pl/math/v_erfcf_1u.c
+++ b/pl/math/v_erfcf_1u.c
@@ -8,6 +8,7 @@
#include "v_math.h"
#include "erfcf.h"
#include "estrin.h"
+#include "pl_sig.h"
#if V_SUPPORTED
@@ -169,4 +170,6 @@ v_f32_t V_NAME (erfcf) (v_f32_t x)
return y;
}
VPCS_ALIAS
+
+PL_SIG (V, F, 1, erfc, -6.0, 28.0)
#endif
diff --git a/pl/math/v_erff_1u5.c b/pl/math/v_erff_1u5.c
index 4407cd1..3e8d400 100644
--- a/pl/math/v_erff_1u5.c
+++ b/pl/math/v_erff_1u5.c
@@ -5,9 +5,11 @@
* SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
*/
+#include "v_math.h"
#include "include/mathlib.h"
#include "math_config.h"
-#include "v_math.h"
+#include "pl_sig.h"
+
#if V_SUPPORTED
VPCS_ATTR v_f32_t V_NAME (expf) (v_f32_t);
@@ -101,4 +103,6 @@ v_f32_t V_NAME (erff) (v_f32_t x)
return y;
}
VPCS_ALIAS
+
+PL_SIG (V, F, 1, erf, -4.0, 4.0)
#endif
diff --git a/pl/math/v_exp_tail.c b/pl/math/v_exp_tail.c
index cf834e6..fabc110 100644
--- a/pl/math/v_exp_tail.c
+++ b/pl/math/v_exp_tail.c
@@ -5,8 +5,8 @@
* SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
*/
-#include "math_config.h"
#include "v_math.h"
+#include "math_config.h"
#if V_SUPPORTED
#include "v_exp_tail.h"
diff --git a/pl/math/v_expf.c b/pl/math/v_expf.c
index 2707ebc..d6e5720 100644
--- a/pl/math/v_expf.c
+++ b/pl/math/v_expf.c
@@ -5,8 +5,8 @@
* SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
*/
-#include "mathlib.h"
#include "v_math.h"
+#include "mathlib.h"
#if V_SUPPORTED
static const float Poly[] = {
diff --git a/pl/math/v_expm1_2u5.c b/pl/math/v_expm1_2u5.c
index 7a5818b..78576a9 100644
--- a/pl/math/v_expm1_2u5.c
+++ b/pl/math/v_expm1_2u5.c
@@ -6,6 +6,7 @@
*/
#include "v_math.h"
+#include "pl_sig.h"
#if V_SUPPORTED
@@ -98,4 +99,6 @@ v_f64_t V_NAME (expm1) (v_f64_t x)
return y;
}
VPCS_ALIAS
+
+PL_SIG (V, D, 1, expm1, -9.9, 9.9)
#endif
diff --git a/pl/math/v_expm1f_1u6.c b/pl/math/v_expm1f_1u6.c
index e18814e..6d1ae0e 100644
--- a/pl/math/v_expm1f_1u6.c
+++ b/pl/math/v_expm1f_1u6.c
@@ -6,6 +6,7 @@
*/
#include "v_math.h"
+#include "pl_sig.h"
#if V_SUPPORTED
@@ -81,4 +82,6 @@ v_f32_t V_NAME (expm1f) (v_f32_t x)
return y;
}
VPCS_ALIAS
+
+PL_SIG (V, F, 1, expm1, -9.9, 9.9)
#endif
diff --git a/pl/math/v_log10_2u5.c b/pl/math/v_log10_2u5.c
index c34167f..c481b00 100644
--- a/pl/math/v_log10_2u5.c
+++ b/pl/math/v_log10_2u5.c
@@ -5,8 +5,10 @@
* SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
*/
-#include "include/mathlib.h"
#include "v_math.h"
+#include "include/mathlib.h"
+#include "pl_sig.h"
+
#if V_SUPPORTED
#define A(i) v_f64 (__v_log10_data.poly[i])
@@ -98,4 +100,5 @@ v_f64_t V_NAME (log10) (v_f64_t x)
}
VPCS_ALIAS
+PL_SIG (V, D, 1, log10, 0.01, 11.1)
#endif
diff --git a/pl/math/v_log10f_3u5.c b/pl/math/v_log10f_3u5.c
index 4dede3d..8bf8bb3 100644
--- a/pl/math/v_log10f_3u5.c
+++ b/pl/math/v_log10f_3u5.c
@@ -5,8 +5,10 @@
* SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
*/
-#include "mathlib.h"
#include "v_math.h"
+#include "mathlib.h"
+#include "pl_sig.h"
+
#if V_SUPPORTED
#define P(i) v_f32 (__v_log10f_poly[i])
@@ -70,4 +72,6 @@ v_f32_t V_NAME (log10f) (v_f32_t x)
return y;
}
VPCS_ALIAS
+
+PL_SIG (V, F, 1, log10, 0.01, 11.1)
#endif
diff --git a/pl/math/v_log1p_2u5.c b/pl/math/v_log1p_2u5.c
index 3781522..e0d58ec 100644
--- a/pl/math/v_log1p_2u5.c
+++ b/pl/math/v_log1p_2u5.c
@@ -5,6 +5,8 @@
*/
#include "v_math.h"
+#include "pl_sig.h"
+
#if V_SUPPORTED
#include "estrin.h"
@@ -104,4 +106,5 @@ VPCS_ATTR v_f64_t V_NAME (log1p) (v_f64_t x)
VPCS_ALIAS
+PL_SIG (V, D, 1, log1p, -0.9, 10.0)
#endif
diff --git a/pl/math/v_log1pf_2u1.c b/pl/math/v_log1pf_2u1.c
index 3ef8416..361fa4f 100644
--- a/pl/math/v_log1pf_2u1.c
+++ b/pl/math/v_log1pf_2u1.c
@@ -5,6 +5,8 @@
*/
#include "v_math.h"
+#include "pl_sig.h"
+
#if V_SUPPORTED
#define AbsMask 0x7fffffff
@@ -142,4 +144,5 @@ VPCS_ATTR v_f32_t V_NAME (log1pf) (v_f32_t x)
}
VPCS_ALIAS
+PL_SIG (V, F, 1, log1p, -0.9, 10.0)
#endif
diff --git a/pl/math/v_log2_3u.c b/pl/math/v_log2_3u.c
index af7340d..07afced 100644
--- a/pl/math/v_log2_3u.c
+++ b/pl/math/v_log2_3u.c
@@ -5,8 +5,10 @@
* SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
*/
-#include "include/mathlib.h"
#include "v_math.h"
+#include "include/mathlib.h"
+#include "pl_sig.h"
+
#if V_SUPPORTED
#define InvLn2 v_f64 (0x1.71547652b82fep0)
@@ -85,4 +87,5 @@ v_f64_t V_NAME (log2) (v_f64_t x)
}
VPCS_ALIAS
+PL_SIG (V, D, 1, log2, 0.01, 11.1)
#endif
diff --git a/pl/math/v_log2f_2u6.c b/pl/math/v_log2f_2u6.c
index 73bb84f..335b324 100644
--- a/pl/math/v_log2f_2u6.c
+++ b/pl/math/v_log2f_2u6.c
@@ -5,8 +5,10 @@
* SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
*/
-#include "math_config.h"
#include "v_math.h"
+#include "math_config.h"
+#include "pl_sig.h"
+
#if V_SUPPORTED
#define N (1 << V_LOG2F_TABLE_BITS)
@@ -116,4 +118,6 @@ VPCS_ATTR v_f32_t V_NAME (log2f) (v_f32_t x)
return y;
}
VPCS_ALIAS
+
+PL_SIG (V, F, 1, log2, 0.01, 11.1)
#endif
diff --git a/pl/math/v_sinh_3u.c b/pl/math/v_sinh_3u.c
index c707364..cec8208 100644
--- a/pl/math/v_sinh_3u.c
+++ b/pl/math/v_sinh_3u.c
@@ -6,6 +6,7 @@
#include "v_math.h"
#include "mathlib.h"
+#include "pl_sig.h"
#define AbsMask 0x7fffffffffffffff
#define Half 0x3fe0000000000000
@@ -42,4 +43,5 @@ VPCS_ATTR v_f64_t V_NAME (sinh) (v_f64_t x)
}
VPCS_ALIAS
+PL_SIG (V, D, 1, sinh, -10.0, 10.0)
#endif
diff --git a/pl/math/v_sinhf_2u3.c b/pl/math/v_sinhf_2u3.c
index 4397bca..299f081 100644
--- a/pl/math/v_sinhf_2u3.c
+++ b/pl/math/v_sinhf_2u3.c
@@ -6,6 +6,7 @@
#include "v_math.h"
#include "mathlib.h"
+#include "pl_sig.h"
#if V_SUPPORTED
@@ -41,4 +42,5 @@ VPCS_ATTR v_f32_t V_NAME (sinhf) (v_f32_t x)
}
VPCS_ALIAS
+PL_SIG (V, F, 1, sinh, -10.0, 10.0)
#endif
diff --git a/pl/math/v_tanf_3u2.c b/pl/math/v_tanf_3u2.c
index 8b3869c..9a11ba4 100644
--- a/pl/math/v_tanf_3u2.c
+++ b/pl/math/v_tanf_3u2.c
@@ -7,6 +7,7 @@
#include "v_math.h"
#include "estrinf.h"
+#include "pl_sig.h"
#if V_SUPPORTED
@@ -114,4 +115,6 @@ v_f32_t V_NAME (tanf) (v_f32_t x)
return y;
}
VPCS_ALIAS
+
+PL_SIG (V, F, 1, tan, -3.1, 3.1)
#endif
diff --git a/pl/math/v_tanhf_2u6.c b/pl/math/v_tanhf_2u6.c
index 67e4520..1196c4a 100644
--- a/pl/math/v_tanhf_2u6.c
+++ b/pl/math/v_tanhf_2u6.c
@@ -5,8 +5,9 @@
*/
#include "v_math.h"
-#include "mathlib.h"
#include "estrinf.h"
+#include "mathlib.h"
+#include "pl_sig.h"
#if V_SUPPORTED
@@ -88,4 +89,5 @@ VPCS_ATTR v_f32_t V_NAME (tanhf) (v_f32_t x)
}
VPCS_ALIAS
+PL_SIG (V, F, 1, tanh, -10.0, 10.0)
#endif