aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Ramsay <Joe.Ramsay@arm.com>2022-12-15 13:28:06 +0000
committerJoe Ramsay <joe.ramsay@arm.com>2022-12-15 13:28:06 +0000
commit202e46317ee8983516b6413066a57bd624ffa044 (patch)
tree70f04af3596ff1fbaeaf926a4dfbf3e4d57d8de9
parentd748e1520dd2ff5ad3574bd0827cdd882bf6bed8 (diff)
downloadarm-optimized-routines-202e46317ee8983516b6413066a57bd624ffa044.tar.gz
pl/math: Move test intervals to routine source files
To conclude the work on simplifying the runulp.sh script, a new macro has been introduced to specify the intervals in which a routine should be tested in the routine source. This is eventually consumed by runulp.sh.
-rw-r--r--pl/math/Dir.mk31
-rw-r--r--pl/math/acosh_3u.c5
-rw-r--r--pl/math/acoshf_2u8.c5
-rw-r--r--pl/math/asinh_2u5.c7
-rw-r--r--pl/math/asinhf_3u5.c4
-rw-r--r--pl/math/atan2_2u5.c5
-rw-r--r--pl/math/atan2f_3u.c5
-rw-r--r--pl/math/atanhf_3u1.c6
-rw-r--r--pl/math/cbrtf_1u5.c2
-rw-r--r--pl/math/cosh_2u.c6
-rw-r--r--pl/math/coshf_1u9.c6
-rw-r--r--pl/math/erfc_4u5.c6
-rw-r--r--pl/math/erfcf_2u.c6
-rw-r--r--pl/math/erff_1u5.c6
-rw-r--r--pl/math/expm1_2u5.c6
-rw-r--r--pl/math/expm1f_1u6.c4
-rw-r--r--pl/math/include/pl_test.h3
-rw-r--r--pl/math/log10_2u.c3
-rw-r--r--pl/math/log10f.c5
-rw-r--r--pl/math/log1p_2u.c8
-rw-r--r--pl/math/log1pf_2u1.c8
-rw-r--r--pl/math/sinh_3u.c6
-rw-r--r--pl/math/sinhf_2u3.c6
-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.c5
-rw-r--r--pl/math/sv_atanf_2u9.c5
-rw-r--r--pl/math/sv_cos_2u5.c2
-rw-r--r--pl/math/sv_cosf_2u1.c2
-rw-r--r--pl/math/sv_erf_2u5.c8
-rw-r--r--pl/math/sv_erfc_4u.c6
-rw-r--r--pl/math/sv_erff_1u3.c8
-rw-r--r--pl/math/sv_expf_2u.c8
-rw-r--r--pl/math/sv_log10_2u5.c6
-rw-r--r--pl/math/sv_log10f_3u5.c6
-rw-r--r--pl/math/sv_log_2u5.c6
-rw-r--r--pl/math/sv_logf_3u4.c6
-rw-r--r--pl/math/sv_sin_3u.c2
-rw-r--r--pl/math/sv_sinf_1u9.c2
-rw-r--r--pl/math/sv_tanf_3u2.c8
-rw-r--r--pl/math/tanf_3u3.c13
-rw-r--r--pl/math/tanhf_2u6.c6
-rw-r--r--pl/math/test/pl_test.h3
-rwxr-xr-xpl/math/test/runulp.sh695
-rw-r--r--pl/math/v_asinh_2u5.c14
-rw-r--r--pl/math/v_asinhf_2u7.c8
-rw-r--r--pl/math/v_atan2_3u.c5
-rw-r--r--pl/math/v_atan2f_3u.c5
-rw-r--r--pl/math/v_atan_2u5.c5
-rw-r--r--pl/math/v_atanf_3u.c5
-rw-r--r--pl/math/v_atanhf_3u1.c6
-rw-r--r--pl/math/v_cbrtf_1u5.c2
-rw-r--r--pl/math/v_cosh_2u.c4
-rw-r--r--pl/math/v_coshf_2u4.c6
-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.c6
-rw-r--r--pl/math/v_erff_1u5.c6
-rw-r--r--pl/math/v_expm1_2u5.c6
-rw-r--r--pl/math/v_expm1f_1u6.c4
-rw-r--r--pl/math/v_log10_2u5.c3
-rw-r--r--pl/math/v_log10f_3u5.c2
-rw-r--r--pl/math/v_log1p_2u5.c8
-rw-r--r--pl/math/v_log1pf_2u1.c8
-rw-r--r--pl/math/v_log2_3u.c6
-rw-r--r--pl/math/v_log2f_2u6.c6
-rw-r--r--pl/math/v_sinh_3u.c6
-rw-r--r--pl/math/v_sinhf_2u3.c6
-rw-r--r--pl/math/v_tanf_3u2.c8
-rw-r--r--pl/math/v_tanhf_2u6.c6
70 files changed, 416 insertions, 693 deletions
diff --git a/pl/math/Dir.mk b/pl/math/Dir.mk
index b27bcee..1433b7b 100644
--- a/pl/math/Dir.mk
+++ b/pl/math/Dir.mk
@@ -148,10 +148,11 @@ ulp-input-dir=$(B)/test/inputs
math-lib-lims = $(patsubst $(PLM)/%,$(ulp-input-dir)/%.ulp,$(basename $(math-lib-srcs)))
math-lib-aliases = $(patsubst $(PLM)/%,$(ulp-input-dir)/%.alias,$(basename $(math-lib-srcs)))
math-lib-fenvs = $(patsubst $(PLM)/%,$(ulp-input-dir)/%.fenv,$(basename $(math-lib-srcs)))
+math-lib-itvs = $(patsubst $(PLM)/%,$(ulp-input-dir)/%.itv,$(basename $(math-lib-srcs)))
-$(math-lib-lims): CFLAGS_PL += -I$(PLM) -I$(PLM)/include $(math-cflags)
-$(math-lib-aliases): CFLAGS_PL += -I$(PLM) -I$(PLM)/include $(math-cflags)
-$(math-lib-fenvs): CFLAGS_PL += -I$(PLM) -I$(PLM)/include $(math-cflags)
+ulp-inputs = $(math-lib-lims) $(math-lib-aliases) $(math-lib-fenvs) $(math-lib-itvs)
+
+$(ulp-inputs): CFLAGS_PL += -I$(PLM) -I$(PLM)/include $(math-cflags)
$(ulp-input-dir)/%.ulp: $(PLM)/%.c
mkdir -p $(@D)
@@ -165,6 +166,10 @@ $(ulp-input-dir)/%.fenv: $(PLM)/%.c
mkdir -p $(@D)
$(CC) -I$(PLM)/test $(CFLAGS_PL) $< -o - -E | { grep -o "PL_TEST_EXPECT_FENV_ENABLED [^ ]*" || true; } > $@
+$(ulp-input-dir)/%.itv: $(PLM)/%.c
+ mkdir -p $(dir $@)
+ $(CC) -I$(PLM)/test $(CFLAGS_PL) $< -o - -E | { grep "PL_TEST_INTERVAL " || true; } | sed "s/ PL_TEST_INTERVAL/\nPL_TEST_INTERVAL/g" > $@
+
ulp-lims := $(ulp-input-dir)/limits
$(ulp-lims): $(math-lib-lims)
cat $^ | sed "s/PL_TEST_ULP //g;s/^ *//g" > $@
@@ -177,12 +182,30 @@ fenv-exps := $(ulp-input-dir)/fenv
$(fenv-exps): $(math-lib-fenvs)
cat $^ | sed "s/PL_TEST_EXPECT_FENV_ENABLED //g;s/^ *//g" > $@
-check-pl/math-ulp: $(math-tools) $(ulp-lims) $(ulp-aliases) $(fenv-exps)
+ulp-itvs-noalias := $(ulp-input-dir)/itvs_noalias
+$(ulp-itvs-noalias): $(math-lib-itvs)
+ cat $^ > $@
+
+rename-aliases := $(ulp-input-dir)/rename_alias.sed
+$(rename-aliases): $(ulp-aliases)
+ # Build sed script for replacing aliases from generated alias file
+ cat $< | awk '{ print "s/ " $$1 " / " $$2 " /g" }' > $@
+
+ulp-itvs-alias := $(ulp-input-dir)/itvs_alias
+$(ulp-itvs-alias): $(ulp-itvs-noalias) $(rename-aliases)
+ cat $< | sed -f $(rename-aliases) > $@
+
+ulp-itvs := $(ulp-input-dir)/intervals
+$(ulp-itvs): $(ulp-itvs-alias) $(ulp-itvs-noalias)
+ cat $^ | sort -u | sed "s/PL_TEST_INTERVAL //g" > $@
+
+check-pl/math-ulp: $(math-tools) $(ulp-lims) $(ulp-aliases) $(fenv-exps) $(ulp-itvs)
WANT_ERRNO=$(WANT_ERRNO) \
WANT_SVE_MATH=$(WANT_SVE_MATH) \
ULPFLAGS="$(math-ulpflags)" \
LIMITS=../../../$(ulp-lims) \
ALIASES=../../../$(ulp-aliases) \
+ INTERVALS=../../../$(ulp-itvs) \
FENV=../../../$(fenv-exps) \
build/pl/bin/runulp.sh $(EMULATOR)
diff --git a/pl/math/acosh_3u.c b/pl/math/acosh_3u.c
index f135b5d..d2c195f 100644
--- a/pl/math/acosh_3u.c
+++ b/pl/math/acosh_3u.c
@@ -58,3 +58,8 @@ acosh (double x)
PL_SIG (S, D, 1, acosh, 1.0, 10.0)
PL_TEST_ULP (acosh, 2.19)
+PL_TEST_INTERVAL (acosh, 0, 1, 10000)
+PL_TEST_INTERVAL (acosh, 1, 2, 100000)
+PL_TEST_INTERVAL (acosh, 2, 0x1p511, 100000)
+PL_TEST_INTERVAL (acosh, 0x1p511, inf, 100000)
+PL_TEST_INTERVAL (acosh, -0, -inf, 10000)
diff --git a/pl/math/acoshf_2u8.c b/pl/math/acoshf_2u8.c
index 0f9824d..bd9c561 100644
--- a/pl/math/acoshf_2u8.c
+++ b/pl/math/acoshf_2u8.c
@@ -55,3 +55,8 @@ acoshf (float x)
PL_SIG (S, F, 1, acosh, 1.0, 10.0)
PL_TEST_ULP (acoshf, 2.30)
+PL_TEST_INTERVAL (acoshf, 0, 1, 100)
+PL_TEST_INTERVAL (acoshf, 1, 2, 10000)
+PL_TEST_INTERVAL (acoshf, 2, 0x1p64, 100000)
+PL_TEST_INTERVAL (acoshf, 0x1p64, inf, 100000)
+PL_TEST_INTERVAL (acoshf, -0, -inf, 10000)
diff --git a/pl/math/asinh_2u5.c b/pl/math/asinh_2u5.c
index 44435be..064d81e 100644
--- a/pl/math/asinh_2u5.c
+++ b/pl/math/asinh_2u5.c
@@ -77,3 +77,10 @@ asinh (double x)
PL_SIG (S, D, 1, asinh, -10.0, 10.0)
PL_TEST_ULP (asinh, 1.54)
+PL_TEST_INTERVAL (asinh, -0x1p-26, 0x1p-26, 50000)
+PL_TEST_INTERVAL (asinh, 0x1p-26, 1.0, 40000)
+PL_TEST_INTERVAL (asinh, -0x1p-26, -1.0, 10000)
+PL_TEST_INTERVAL (asinh, 1.0, 100.0, 40000)
+PL_TEST_INTERVAL (asinh, -1.0, -100.0, 10000)
+PL_TEST_INTERVAL (asinh, 100.0, inf, 50000)
+PL_TEST_INTERVAL (asinh, -100.0, -inf, 10000)
diff --git a/pl/math/asinhf_3u5.c b/pl/math/asinhf_3u5.c
index 36c332d..2429e82 100644
--- a/pl/math/asinhf_3u5.c
+++ b/pl/math/asinhf_3u5.c
@@ -71,3 +71,7 @@ asinhf (float x)
PL_SIG (S, F, 1, asinh, -10.0, 10.0)
PL_TEST_ULP (asinhf, 2.9)
+PL_TEST_INTERVAL (asinhf, 0, 0x1p-12, 5000)
+PL_TEST_INTERVAL (asinhf, 0x1p-12, 1.0, 50000)
+PL_TEST_INTERVAL (asinhf, 1.0, 0x1p11, 50000)
+PL_TEST_INTERVAL (asinhf, 0x1p11, 0x1p127, 20000)
diff --git a/pl/math/atan2_2u5.c b/pl/math/atan2_2u5.c
index fb5ced4..ba39d9a 100644
--- a/pl/math/atan2_2u5.c
+++ b/pl/math/atan2_2u5.c
@@ -152,3 +152,8 @@ atan2 (double y, double x)
/* Arity of 2 means no mathbench entry emitted. See test/mathbench_funcs.h. */
PL_SIG (S, D, 2, atan2)
PL_TEST_ULP (atan2, 1.78)
+PL_TEST_INTERVAL (atan2, -10.0, 10.0, 50000)
+PL_TEST_INTERVAL (atan2, -1.0, 1.0, 40000)
+PL_TEST_INTERVAL (atan2, 0.0, 1.0, 40000)
+PL_TEST_INTERVAL (atan2, 1.0, 100.0, 40000)
+PL_TEST_INTERVAL (atan2, 1e6, 1e32, 40000)
diff --git a/pl/math/atan2f_3u.c b/pl/math/atan2f_3u.c
index 0a3e975..e84ea0b 100644
--- a/pl/math/atan2f_3u.c
+++ b/pl/math/atan2f_3u.c
@@ -160,3 +160,8 @@ atan2f (float y, float x)
/* Arity of 2 means no mathbench entry emitted. See test/mathbench_funcs.h. */
PL_SIG (S, F, 2, atan2)
PL_TEST_ULP (atan2f, 2.4)
+PL_TEST_INTERVAL (atan2f, -10.0, 10.0, 50000)
+PL_TEST_INTERVAL (atan2f, -1.0, 1.0, 40000)
+PL_TEST_INTERVAL (atan2f, 0.0, 1.0, 40000)
+PL_TEST_INTERVAL (atan2f, 1.0, 100.0, 40000)
+PL_TEST_INTERVAL (atan2f, 1e6, 1e32, 40000)
diff --git a/pl/math/atanhf_3u1.c b/pl/math/atanhf_3u1.c
index 47b9486..c7f80b0 100644
--- a/pl/math/atanhf_3u1.c
+++ b/pl/math/atanhf_3u1.c
@@ -79,3 +79,9 @@ atanhf (float x)
PL_SIG (S, F, 1, atanh, -1.0, 1.0)
PL_TEST_ULP (atanhf, 2.59)
+PL_TEST_INTERVAL (atanhf, 0, 0x1p-12, 500)
+PL_TEST_INTERVAL (atanhf, 0x1p-12, 1, 200000)
+PL_TEST_INTERVAL (atanhf, 1, inf, 1000)
+PL_TEST_INTERVAL (atanhf, -0, -0x1p-12, 500)
+PL_TEST_INTERVAL (atanhf, -0x1p-12, -1, 200000)
+PL_TEST_INTERVAL (atanhf, -1, -inf, 1000)
diff --git a/pl/math/cbrtf_1u5.c b/pl/math/cbrtf_1u5.c
index c6d1de9..86a6088 100644
--- a/pl/math/cbrtf_1u5.c
+++ b/pl/math/cbrtf_1u5.c
@@ -63,3 +63,5 @@ cbrtf (float x)
PL_SIG (S, F, 1, cbrt, -10.0, 10.0)
PL_TEST_ULP (cbrtf, 1.03)
+PL_TEST_INTERVAL (cbrtf, 0, inf, 1000000)
+PL_TEST_INTERVAL (cbrtf, -0, -inf, 1000000)
diff --git a/pl/math/cosh_2u.c b/pl/math/cosh_2u.c
index 9e137ff..5ec3b77 100644
--- a/pl/math/cosh_2u.c
+++ b/pl/math/cosh_2u.c
@@ -58,3 +58,9 @@ cosh (double x)
PL_SIG (S, D, 1, cosh, -10.0, 10.0)
PL_TEST_ULP (cosh, 1.43)
+PL_TEST_INTERVAL (cosh, 0, 0x1.61da04cbafe44p+9, 100000)
+PL_TEST_INTERVAL (cosh, -0, -0x1.61da04cbafe44p+9, 100000)
+PL_TEST_INTERVAL (cosh, 0x1.61da04cbafe44p+9, 0x1p10, 1000)
+PL_TEST_INTERVAL (cosh, -0x1.61da04cbafe44p+9, -0x1p10, 1000)
+PL_TEST_INTERVAL (cosh, 0x1p10, inf, 100)
+PL_TEST_INTERVAL (cosh, -0x1p10, -inf, 100)
diff --git a/pl/math/coshf_1u9.c b/pl/math/coshf_1u9.c
index 0e7b30f..2f93f1c 100644
--- a/pl/math/coshf_1u9.c
+++ b/pl/math/coshf_1u9.c
@@ -63,3 +63,9 @@ coshf (float x)
PL_SIG (S, F, 1, cosh, -10.0, 10.0)
PL_TEST_ULP (coshf, 1.89)
+PL_TEST_INTERVAL (coshf, 0, 0x1p-63, 100)
+PL_TEST_INTERVAL (coshf, 0, 0x1.5a92d8p+6, 80000)
+PL_TEST_INTERVAL (coshf, 0x1.5a92d8p+6, inf, 2000)
+PL_TEST_INTERVAL (coshf, -0, -0x1p-63, 100)
+PL_TEST_INTERVAL (coshf, -0, -0x1.5a92d8p+6, 80000)
+PL_TEST_INTERVAL (coshf, -0x1.5a92d8p+6, -inf, 2000)
diff --git a/pl/math/erfc_4u5.c b/pl/math/erfc_4u5.c
index 8394e48..6d4a29a 100644
--- a/pl/math/erfc_4u5.c
+++ b/pl/math/erfc_4u5.c
@@ -147,3 +147,9 @@ erfc (double x)
PL_SIG (S, D, 1, erfc, -6.0, 28.0)
PL_TEST_ULP (erfc, 3.56)
+PL_TEST_INTERVAL (erfc, 0, 0xffff0000, 10000)
+PL_TEST_INTERVAL (erfc, 0x1p-1022, 0x1p-26, 40000)
+PL_TEST_INTERVAL (erfc, -0x1p-1022, -0x1p-26, 40000)
+PL_TEST_INTERVAL (erfc, 0x1p-26, 0x1p5, 40000)
+PL_TEST_INTERVAL (erfc, -0x1p-26, -0x1p3, 40000)
+PL_TEST_INTERVAL (erfc, 0, inf, 40000)
diff --git a/pl/math/erfcf_2u.c b/pl/math/erfcf_2u.c
index f76a11a..7a55000 100644
--- a/pl/math/erfcf_2u.c
+++ b/pl/math/erfcf_2u.c
@@ -125,3 +125,9 @@ erfcf (float x)
PL_SIG (S, F, 1, erfc, -4.0, 10.0)
PL_TEST_ULP (erfcf, 1.5)
+PL_TEST_INTERVAL (erfcf, 0, 0xffff0000, 10000)
+PL_TEST_INTERVAL (erfcf, 0x1p-127, 0x1p-26, 40000)
+PL_TEST_INTERVAL (erfcf, -0x1p-127, -0x1p-26, 40000)
+PL_TEST_INTERVAL (erfcf, 0x1p-26, 0x1p5, 40000)
+PL_TEST_INTERVAL (erfcf, -0x1p-26, -0x1p3, 40000)
+PL_TEST_INTERVAL (erfcf, 0, inf, 40000)
diff --git a/pl/math/erff_1u5.c b/pl/math/erff_1u5.c
index fa1e55f..3d8cfee 100644
--- a/pl/math/erff_1u5.c
+++ b/pl/math/erff_1u5.c
@@ -100,3 +100,9 @@ erff (float x)
PL_SIG (S, F, 1, erf, -4.0, 4.0)
PL_TEST_ULP (erff, 0.6)
+PL_TEST_INTERVAL (erff, 0, 0xffff0000, 10000)
+PL_TEST_INTERVAL (erff, 0x1p-127, 0x1p-26, 40000)
+PL_TEST_INTERVAL (erff, -0x1p-127, -0x1p-26, 40000)
+PL_TEST_INTERVAL (erff, 0x1p-26, 0x1p3, 40000)
+PL_TEST_INTERVAL (erff, -0x1p-26, -0x1p3, 40000)
+PL_TEST_INTERVAL (erff, 0, inf, 40000)
diff --git a/pl/math/expm1_2u5.c b/pl/math/expm1_2u5.c
index cfde806..60a556e 100644
--- a/pl/math/expm1_2u5.c
+++ b/pl/math/expm1_2u5.c
@@ -78,3 +78,9 @@ expm1 (double x)
PL_SIG (S, D, 1, expm1, -9.9, 9.9)
PL_TEST_ULP (expm1, 1.68)
+PL_TEST_INTERVAL (expm1, 0, 0x1p-51, 1000)
+PL_TEST_INTERVAL (expm1, -0, -0x1p-51, 1000)
+PL_TEST_INTERVAL (expm1, 0x1p-51, 0x1.63108c75a1937p+9, 100000)
+PL_TEST_INTERVAL (expm1, -0x1p-51, -0x1.740bf7c0d927dp+9, 100000)
+PL_TEST_INTERVAL (expm1, 0x1.63108c75a1937p+9, inf, 100)
+PL_TEST_INTERVAL (expm1, -0x1.740bf7c0d927dp+9, -inf, 100)
diff --git a/pl/math/expm1f_1u6.c b/pl/math/expm1f_1u6.c
index 82dc28d..5138865 100644
--- a/pl/math/expm1f_1u6.c
+++ b/pl/math/expm1f_1u6.c
@@ -74,3 +74,7 @@ expm1f (float x)
PL_SIG (S, F, 1, expm1, -9.9, 9.9)
PL_TEST_ULP (expm1f, 1.02)
+PL_TEST_INTERVAL (expm1f, 0, 0x1p-23, 1000)
+PL_TEST_INTERVAL (expm1f, -0, -0x1p-23, 1000)
+PL_TEST_INTERVAL (expm1f, 0x1p-23, 0x1.644716p6, 100000)
+PL_TEST_INTERVAL (expm1f, -0x1p-23, -0x1.9bbabcp+6, 100000)
diff --git a/pl/math/include/pl_test.h b/pl/math/include/pl_test.h
index 8999efa..e578a0d 100644
--- a/pl/math/include/pl_test.h
+++ b/pl/math/include/pl_test.h
@@ -20,3 +20,6 @@
build flags - defer expansion by one pass to allow those flags to be expanded
properly. */
#define PL_TEST_EXPECT_FENV(f, e)
+
+#define PL_TEST_INTERVAL(f, lo, hi, n)
+#define PL_TEST_INTERVAL_C(f, lo, hi, n, c)
diff --git a/pl/math/log10_2u.c b/pl/math/log10_2u.c
index 1827bb9..81f73a8 100644
--- a/pl/math/log10_2u.c
+++ b/pl/math/log10_2u.c
@@ -145,3 +145,6 @@ log10l (long double x)
PL_SIG (S, D, 1, log10, 0.01, 11.1)
PL_TEST_ULP (log10, 1.11)
+PL_TEST_INTERVAL (log10, 0, 0xffff000000000000, 10000)
+PL_TEST_INTERVAL (log10, 0x1p-4, 0x1p4, 40000)
+PL_TEST_INTERVAL (log10, 0, inf, 40000)
diff --git a/pl/math/log10f.c b/pl/math/log10f.c
index 84db420..32de42f 100644
--- a/pl/math/log10f.c
+++ b/pl/math/log10f.c
@@ -90,3 +90,8 @@ log10f (float x)
PL_SIG (S, F, 1, log10, 0.01, 11.1)
PL_TEST_ULP (log10f, 0.30)
+PL_TEST_INTERVAL (log10f, 0, 0xffff0000, 10000)
+PL_TEST_INTERVAL (log10f, 0x1p-127, 0x1p-26, 50000)
+PL_TEST_INTERVAL (log10f, 0x1p-26, 0x1p3, 50000)
+PL_TEST_INTERVAL (log10f, 0x1p-4, 0x1p4, 50000)
+PL_TEST_INTERVAL (log10f, 0, inf, 50000)
diff --git a/pl/math/log1p_2u.c b/pl/math/log1p_2u.c
index 5a6f798..519df42 100644
--- a/pl/math/log1p_2u.c
+++ b/pl/math/log1p_2u.c
@@ -125,3 +125,11 @@ log1p (double x)
PL_SIG (S, D, 1, log1p, -0.9, 10.0)
PL_TEST_ULP (log1p, 1.26)
+PL_TEST_INTERVAL (log1p, -10.0, 10.0, 10000)
+PL_TEST_INTERVAL (log1p, 0.0, 0x1p-23, 50000)
+PL_TEST_INTERVAL (log1p, 0x1p-23, 0.001, 50000)
+PL_TEST_INTERVAL (log1p, 0.001, 1.0, 50000)
+PL_TEST_INTERVAL (log1p, 0.0, -0x1p-23, 50000)
+PL_TEST_INTERVAL (log1p, -0x1p-23, -0.001, 50000)
+PL_TEST_INTERVAL (log1p, -0.001, -1.0, 50000)
+PL_TEST_INTERVAL (log1p, -1.0, inf, 5000)
diff --git a/pl/math/log1pf_2u1.c b/pl/math/log1pf_2u1.c
index f791105..cb1d4bc 100644
--- a/pl/math/log1pf_2u1.c
+++ b/pl/math/log1pf_2u1.c
@@ -154,3 +154,11 @@ log1pf (float x)
PL_SIG (S, F, 1, log1p, -0.9, 10.0)
PL_TEST_ULP (log1pf, 1.52)
+PL_TEST_INTERVAL (log1pf, -10.0, 10.0, 10000)
+PL_TEST_INTERVAL (log1pf, 0.0, 0x1p-23, 50000)
+PL_TEST_INTERVAL (log1pf, 0x1p-23, 0.001, 50000)
+PL_TEST_INTERVAL (log1pf, 0.001, 1.0, 50000)
+PL_TEST_INTERVAL (log1pf, 0.0, -0x1p-23, 50000)
+PL_TEST_INTERVAL (log1pf, -0x1p-23, -0.001, 50000)
+PL_TEST_INTERVAL (log1pf, -0.001, -1.0, 50000)
+PL_TEST_INTERVAL (log1pf, -1.0, inf, 5000)
diff --git a/pl/math/sinh_3u.c b/pl/math/sinh_3u.c
index 86f00a1..52ca156 100644
--- a/pl/math/sinh_3u.c
+++ b/pl/math/sinh_3u.c
@@ -58,3 +58,9 @@ sinh (double x)
PL_SIG (S, D, 1, sinh, -10.0, 10.0)
PL_TEST_ULP (sinh, 2.08)
+PL_TEST_INTERVAL (sinh, 0, 0x1p-51, 100)
+PL_TEST_INTERVAL (sinh, -0, -0x1p-51, 100)
+PL_TEST_INTERVAL (sinh, 0x1p-51, 0x1.62e42fefa39fp+9, 100000)
+PL_TEST_INTERVAL (sinh, -0x1p-51, -0x1.62e42fefa39fp+9, 100000)
+PL_TEST_INTERVAL (sinh, 0x1.62e42fefa39fp+9, inf, 1000)
+PL_TEST_INTERVAL (sinh, -0x1.62e42fefa39fp+9, -inf, 1000)
diff --git a/pl/math/sinhf_2u3.c b/pl/math/sinhf_2u3.c
index 15786d9..38f59b0 100644
--- a/pl/math/sinhf_2u3.c
+++ b/pl/math/sinhf_2u3.c
@@ -68,3 +68,9 @@ sinhf (float x)
PL_SIG (S, F, 1, sinh, -10.0, 10.0)
PL_TEST_ULP (sinhf, 1.76)
+PL_TEST_INTERVAL (sinhf, 0, 0x1.62e43p+6, 100000)
+PL_TEST_INTERVAL (sinhf, -0, -0x1.62e43p+6, 100000)
+PL_TEST_INTERVAL (sinhf, 0x1.62e43p+6, 0x1.65a9fap+6, 100)
+PL_TEST_INTERVAL (sinhf, -0x1.62e43p+6, -0x1.65a9fap+6, 100)
+PL_TEST_INTERVAL (sinhf, 0x1.65a9fap+6, inf, 100)
+PL_TEST_INTERVAL (sinhf, -0x1.65a9fap+6, -inf, 100)
diff --git a/pl/math/sv_atan2_2u5.c b/pl/math/sv_atan2_2u5.c
index 4ab2fea..b230b36 100644
--- a/pl/math/sv_atan2_2u5.c
+++ b/pl/math/sv_atan2_2u5.c
@@ -85,4 +85,9 @@ PL_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)
PL_TEST_ULP (__sv_atan2, 1.78)
+PL_TEST_INTERVAL (__sv_atan2, -10.0, 10.0, 50000)
+PL_TEST_INTERVAL (__sv_atan2, -1.0, 1.0, 40000)
+PL_TEST_INTERVAL (__sv_atan2, 0.0, 1.0, 40000)
+PL_TEST_INTERVAL (__sv_atan2, 1.0, 100.0, 40000)
+PL_TEST_INTERVAL (__sv_atan2, 1e6, 1e32, 40000)
#endif
diff --git a/pl/math/sv_atan2f_3u.c b/pl/math/sv_atan2f_3u.c
index 90656f0..5e9d59b 100644
--- a/pl/math/sv_atan2f_3u.c
+++ b/pl/math/sv_atan2f_3u.c
@@ -86,4 +86,9 @@ PL_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)
PL_TEST_ULP (__sv_atan2f, 2.45)
+PL_TEST_INTERVAL (__sv_atan2f, -10.0, 10.0, 50000)
+PL_TEST_INTERVAL (__sv_atan2f, -1.0, 1.0, 40000)
+PL_TEST_INTERVAL (__sv_atan2f, 0.0, 1.0, 40000)
+PL_TEST_INTERVAL (__sv_atan2f, 1.0, 100.0, 40000)
+PL_TEST_INTERVAL (__sv_atan2f, 1e6, 1e32, 40000)
#endif
diff --git a/pl/math/sv_atan_2u5.c b/pl/math/sv_atan_2u5.c
index 93b39b1..16430a2 100644
--- a/pl/math/sv_atan_2u5.c
+++ b/pl/math/sv_atan_2u5.c
@@ -54,4 +54,9 @@ PL_ALIAS (__sv_atan_x, _ZGVsMxv_atan)
PL_SIG (SV, D, 1, atan, -3.1, 3.1)
PL_TEST_ULP (__sv_atan, 1.78)
+PL_TEST_INTERVAL (__sv_atan, -10.0, 10.0, 50000)
+PL_TEST_INTERVAL (__sv_atan, -1.0, 1.0, 40000)
+PL_TEST_INTERVAL (__sv_atan, 0.0, 1.0, 40000)
+PL_TEST_INTERVAL (__sv_atan, 1.0, 100.0, 40000)
+PL_TEST_INTERVAL (__sv_atan, 1e6, 1e32, 40000)
#endif
diff --git a/pl/math/sv_atanf_2u9.c b/pl/math/sv_atanf_2u9.c
index 386c28e..41f99e5 100644
--- a/pl/math/sv_atanf_2u9.c
+++ b/pl/math/sv_atanf_2u9.c
@@ -51,4 +51,9 @@ PL_ALIAS (__sv_atanf_x, _ZGVsMxv_atanf)
PL_SIG (SV, F, 1, atan, -3.1, 3.1)
PL_TEST_ULP (__sv_atanf, 2.9)
+PL_TEST_INTERVAL (__sv_atanf, -10.0, 10.0, 50000)
+PL_TEST_INTERVAL (__sv_atanf, -1.0, 1.0, 40000)
+PL_TEST_INTERVAL (__sv_atanf, 0.0, 1.0, 40000)
+PL_TEST_INTERVAL (__sv_atanf, 1.0, 100.0, 40000)
+PL_TEST_INTERVAL (__sv_atanf, 1e6, 1e32, 40000)
#endif
diff --git a/pl/math/sv_cos_2u5.c b/pl/math/sv_cos_2u5.c
index 146ca22..a06ab9a 100644
--- a/pl/math/sv_cos_2u5.c
+++ b/pl/math/sv_cos_2u5.c
@@ -79,4 +79,6 @@ PL_ALIAS (__sv_cos_x, _ZGVsMxv_cos)
PL_SIG (SV, D, 1, cos, -3.1, 3.1)
PL_TEST_ULP (__sv_cos, 1.61)
+PL_TEST_INTERVAL (__sv_cos, 0, 0xffff0000, 10000)
+PL_TEST_INTERVAL (__sv_cos, 0x1p-4, 0x1p4, 500000)
#endif
diff --git a/pl/math/sv_cosf_2u1.c b/pl/math/sv_cosf_2u1.c
index fdc4b1e..b8ec846 100644
--- a/pl/math/sv_cosf_2u1.c
+++ b/pl/math/sv_cosf_2u1.c
@@ -77,4 +77,6 @@ PL_ALIAS (__sv_cosf_x, _ZGVsMxv_cosf)
PL_SIG (SV, F, 1, cos, -3.1, 3.1)
PL_TEST_ULP (__sv_cosf, 1.57)
+PL_TEST_INTERVAL (__sv_cosf, 0, 0xffff0000, 10000)
+PL_TEST_INTERVAL (__sv_cosf, 0x1p-4, 0x1p4, 500000)
#endif
diff --git a/pl/math/sv_erf_2u5.c b/pl/math/sv_erf_2u5.c
index f91aa41..b4c9186 100644
--- a/pl/math/sv_erf_2u5.c
+++ b/pl/math/sv_erf_2u5.c
@@ -92,4 +92,12 @@ PL_ALIAS (__sv_erf_x, _ZGVsMxv_erf)
PL_SIG (SV, D, 1, erf, -4.0, 4.0)
PL_TEST_ULP (__sv_erf, 1.97)
+PL_TEST_INTERVAL (__sv_erf, 0, 0x1p-28, 20000)
+PL_TEST_INTERVAL (__sv_erf, 0x1p-28, 1, 60000)
+PL_TEST_INTERVAL (__sv_erf, 1, 0x1p28, 60000)
+PL_TEST_INTERVAL (__sv_erf, 0x1p28, inf, 20000)
+PL_TEST_INTERVAL (__sv_erf, -0, -0x1p-28, 20000)
+PL_TEST_INTERVAL (__sv_erf, -0x1p-28, -1, 60000)
+PL_TEST_INTERVAL (__sv_erf, -1, -0x1p28, 60000)
+PL_TEST_INTERVAL (__sv_erf, -0x1p28, -inf, 20000)
#endif
diff --git a/pl/math/sv_erfc_4u.c b/pl/math/sv_erfc_4u.c
index d426fa9..5b2fc18 100644
--- a/pl/math/sv_erfc_4u.c
+++ b/pl/math/sv_erfc_4u.c
@@ -137,4 +137,10 @@ PL_ALIAS (__sv_erfc_x, _ZGVsMxv_erfc)
PL_SIG (SV, D, 1, erfc, -4.0, 10.0)
PL_TEST_ULP (__sv_erfc, 3.15)
+PL_TEST_INTERVAL (__sv_erfc, 0, 0xffff0000, 10000)
+PL_TEST_INTERVAL (__sv_erfc, 0x1p-127, 0x1p-26, 40000)
+PL_TEST_INTERVAL (__sv_erfc, -0x1p-127, -0x1p-26, 40000)
+PL_TEST_INTERVAL (__sv_erfc, 0x1p-26, 0x1p5, 40000)
+PL_TEST_INTERVAL (__sv_erfc, -0x1p-26, -0x1p3, 40000)
+PL_TEST_INTERVAL (__sv_erfc, 0, inf, 40000)
#endif
diff --git a/pl/math/sv_erff_1u3.c b/pl/math/sv_erff_1u3.c
index 9589fb3..fb1bef8 100644
--- a/pl/math/sv_erff_1u3.c
+++ b/pl/math/sv_erff_1u3.c
@@ -93,4 +93,12 @@ PL_ALIAS (__sv_erff_x, _ZGVsMxv_erff)
PL_SIG (SV, F, 1, erf, -4.0, 4.0)
PL_TEST_ULP (__sv_erff, 0.76)
+PL_TEST_INTERVAL (__sv_erff, 0, 0x1p-28, 20000)
+PL_TEST_INTERVAL (__sv_erff, 0x1p-28, 1, 60000)
+PL_TEST_INTERVAL (__sv_erff, 1, 0x1p28, 60000)
+PL_TEST_INTERVAL (__sv_erff, 0x1p28, inf, 20000)
+PL_TEST_INTERVAL (__sv_erff, -0, -0x1p-28, 20000)
+PL_TEST_INTERVAL (__sv_erff, -0x1p-28, -1, 60000)
+PL_TEST_INTERVAL (__sv_erff, -1, -0x1p28, 60000)
+PL_TEST_INTERVAL (__sv_erff, -0x1p28, -inf, 20000)
#endif
diff --git a/pl/math/sv_expf_2u.c b/pl/math/sv_expf_2u.c
index f97a762..30a6c62 100644
--- a/pl/math/sv_expf_2u.c
+++ b/pl/math/sv_expf_2u.c
@@ -145,4 +145,12 @@ PL_ALIAS (__sv_expf_x, _ZGVsMxv_expf)
PL_SIG (SV, F, 1, exp, -9.9, 9.9)
PL_TEST_ULP (__sv_expf, 1.46)
+PL_TEST_INTERVAL (__sv_expf, 0, 0x1p-23, 40000)
+PL_TEST_INTERVAL (__sv_expf, 0x1p-23, 1, 50000)
+PL_TEST_INTERVAL (__sv_expf, 1, 0x1p23, 50000)
+PL_TEST_INTERVAL (__sv_expf, 0x1p23, inf, 50000)
+PL_TEST_INTERVAL (__sv_expf, -0, -0x1p-23, 40000)
+PL_TEST_INTERVAL (__sv_expf, -0x1p-23, -1, 50000)
+PL_TEST_INTERVAL (__sv_expf, -1, -0x1p23, 50000)
+PL_TEST_INTERVAL (__sv_expf, -0x1p23, -inf, 50000)
#endif // SV_SUPPORTED
diff --git a/pl/math/sv_log10_2u5.c b/pl/math/sv_log10_2u5.c
index a9b002b..770b964 100644
--- a/pl/math/sv_log10_2u5.c
+++ b/pl/math/sv_log10_2u5.c
@@ -80,4 +80,10 @@ PL_ALIAS (__sv_log10_x, _ZGVsMxv_log10)
PL_SIG (SV, D, 1, log10, 0.01, 11.1)
PL_TEST_ULP (__sv_log10, 1.97)
+PL_TEST_INTERVAL (__sv_log10, -0.0, -0x1p126, 100)
+PL_TEST_INTERVAL (__sv_log10, 0x1p-149, 0x1p-126, 4000)
+PL_TEST_INTERVAL (__sv_log10, 0x1p-126, 0x1p-23, 50000)
+PL_TEST_INTERVAL (__sv_log10, 0x1p-23, 1.0, 50000)
+PL_TEST_INTERVAL (__sv_log10, 1.0, 100, 50000)
+PL_TEST_INTERVAL (__sv_log10, 100, inf, 50000)
#endif
diff --git a/pl/math/sv_log10f_3u5.c b/pl/math/sv_log10f_3u5.c
index b29ee80..06c0908 100644
--- a/pl/math/sv_log10f_3u5.c
+++ b/pl/math/sv_log10f_3u5.c
@@ -79,4 +79,10 @@ PL_ALIAS (__sv_log10f_x, _ZGVsMxv_log10f)
PL_SIG (SV, F, 1, log10, 0.01, 11.1)
PL_TEST_ULP (__sv_log10f, 2.82)
+PL_TEST_INTERVAL (__sv_log10f, -0.0, -0x1p126, 100)
+PL_TEST_INTERVAL (__sv_log10f, 0x1p-149, 0x1p-126, 4000)
+PL_TEST_INTERVAL (__sv_log10f, 0x1p-126, 0x1p-23, 50000)
+PL_TEST_INTERVAL (__sv_log10f, 0x1p-23, 1.0, 50000)
+PL_TEST_INTERVAL (__sv_log10f, 1.0, 100, 50000)
+PL_TEST_INTERVAL (__sv_log10f, 100, inf, 50000)
#endif
diff --git a/pl/math/sv_log_2u5.c b/pl/math/sv_log_2u5.c
index 8477739..7eeb206 100644
--- a/pl/math/sv_log_2u5.c
+++ b/pl/math/sv_log_2u5.c
@@ -76,4 +76,10 @@ PL_ALIAS (__sv_log_x, _ZGVsMxv_log)
PL_SIG (SV, D, 1, log, 0.01, 11.1)
PL_TEST_ULP (__sv_log, 1.68)
+PL_TEST_INTERVAL (__sv_log, -0.0, -0x1p126, 100)
+PL_TEST_INTERVAL (__sv_log, 0x1p-149, 0x1p-126, 4000)
+PL_TEST_INTERVAL (__sv_log, 0x1p-126, 0x1p-23, 50000)
+PL_TEST_INTERVAL (__sv_log, 0x1p-23, 1.0, 50000)
+PL_TEST_INTERVAL (__sv_log, 1.0, 100, 50000)
+PL_TEST_INTERVAL (__sv_log, 100, inf, 50000)
#endif // SV_SUPPORTED
diff --git a/pl/math/sv_logf_3u4.c b/pl/math/sv_logf_3u4.c
index 8fea406..4ca1ead 100644
--- a/pl/math/sv_logf_3u4.c
+++ b/pl/math/sv_logf_3u4.c
@@ -68,4 +68,10 @@ PL_ALIAS (__sv_logf_x, _ZGVsMxv_logf)
PL_SIG (SV, F, 1, log, 0.01, 11.1)
PL_TEST_ULP (__sv_logf, 2.85)
+PL_TEST_INTERVAL (__sv_logf, -0.0, -0x1p126, 100)
+PL_TEST_INTERVAL (__sv_logf, 0x1p-149, 0x1p-126, 4000)
+PL_TEST_INTERVAL (__sv_logf, 0x1p-126, 0x1p-23, 50000)
+PL_TEST_INTERVAL (__sv_logf, 0x1p-23, 1.0, 50000)
+PL_TEST_INTERVAL (__sv_logf, 1.0, 100, 50000)
+PL_TEST_INTERVAL (__sv_logf, 100, inf, 50000)
#endif // SV_SUPPORTED
diff --git a/pl/math/sv_sin_3u.c b/pl/math/sv_sin_3u.c
index 5637ebe..9072ef4 100644
--- a/pl/math/sv_sin_3u.c
+++ b/pl/math/sv_sin_3u.c
@@ -84,4 +84,6 @@ PL_ALIAS (__sv_sin_x, _ZGVsMxv_sin)
PL_SIG (SV, D, 1, sin, -3.1, 3.1)
PL_TEST_ULP (__sv_sin, 2.03)
+PL_TEST_INTERVAL (__sv_sin, 0, 0xffff0000, 10000)
+PL_TEST_INTERVAL (__sv_sin, 0x1p-4, 0x1p4, 500000)
#endif
diff --git a/pl/math/sv_sinf_1u9.c b/pl/math/sv_sinf_1u9.c
index ca26e92..576baea 100644
--- a/pl/math/sv_sinf_1u9.c
+++ b/pl/math/sv_sinf_1u9.c
@@ -79,4 +79,6 @@ PL_ALIAS (__sv_sinf_x, _ZGVsMxv_sinf)
PL_SIG (SV, F, 1, sin, -3.1, 3.1)
PL_TEST_ULP (__sv_sinf, 1.40)
+PL_TEST_INTERVAL (__sv_sinf, 0, 0xffff0000, 10000)
+PL_TEST_INTERVAL (__sv_sinf, 0x1p-4, 0x1p4, 500000)
#endif
diff --git a/pl/math/sv_tanf_3u2.c b/pl/math/sv_tanf_3u2.c
index 8629b05..ca5c5de 100644
--- a/pl/math/sv_tanf_3u2.c
+++ b/pl/math/sv_tanf_3u2.c
@@ -103,4 +103,12 @@ PL_ALIAS (__sv_tanf_x, _ZGVsMxv_tanf)
PL_SIG (SV, F, 1, tan, -3.1, 3.1)
PL_TEST_ULP (__sv_tanf, 2.7)
+PL_TEST_INTERVAL (__sv_tanf, -0.0, -0x1p126, 100)
+PL_TEST_INTERVAL (__sv_tanf, 0x1p-149, 0x1p-126, 4000)
+PL_TEST_INTERVAL (__sv_tanf, 0x1p-126, 0x1p-23, 50000)
+PL_TEST_INTERVAL (__sv_tanf, 0x1p-23, 0.7, 50000)
+PL_TEST_INTERVAL (__sv_tanf, 0.7, 1.5, 50000)
+PL_TEST_INTERVAL (__sv_tanf, 1.5, 100, 50000)
+PL_TEST_INTERVAL (__sv_tanf, 100, 0x1p17, 50000)
+PL_TEST_INTERVAL (__sv_tanf, 0x1p17, inf, 50000)
#endif
diff --git a/pl/math/tanf_3u3.c b/pl/math/tanf_3u3.c
index e8784d8..f6673f5 100644
--- a/pl/math/tanf_3u3.c
+++ b/pl/math/tanf_3u3.c
@@ -195,3 +195,16 @@ tanf (float x)
PL_SIG (S, F, 1, tan, -3.1, 3.1)
PL_TEST_ULP (tanf, 2.80)
+PL_TEST_INTERVAL (tanf, 0, 0xffff0000, 10000)
+PL_TEST_INTERVAL (tanf, 0x1p-127, 0x1p-14, 50000)
+PL_TEST_INTERVAL (tanf, -0x1p-127, -0x1p-14, 50000)
+PL_TEST_INTERVAL (tanf, 0x1p-14, 0.7, 50000)
+PL_TEST_INTERVAL (tanf, -0x1p-14, -0.7, 50000)
+PL_TEST_INTERVAL (tanf, 0.7, 1.5, 50000)
+PL_TEST_INTERVAL (tanf, -0.7, -1.5, 50000)
+PL_TEST_INTERVAL (tanf, 1.5, 0x1p17, 50000)
+PL_TEST_INTERVAL (tanf, -1.5, -0x1p17, 50000)
+PL_TEST_INTERVAL (tanf, 0x1p17, 0x1p54, 50000)
+PL_TEST_INTERVAL (tanf, -0x1p17, -0x1p54, 50000)
+PL_TEST_INTERVAL (tanf, 0x1p54, inf, 50000)
+PL_TEST_INTERVAL (tanf, -0x1p54, -inf, 50000)
diff --git a/pl/math/tanhf_2u6.c b/pl/math/tanhf_2u6.c
index e6cbbd0..745e5e3 100644
--- a/pl/math/tanhf_2u6.c
+++ b/pl/math/tanhf_2u6.c
@@ -83,3 +83,9 @@ tanhf (float x)
PL_SIG (S, F, 1, tanh, -10.0, 10.0)
PL_TEST_ULP (tanhf, 2.09)
+PL_TEST_INTERVAL (tanhf, 0, 0x1p-23, 1000)
+PL_TEST_INTERVAL (tanhf, -0, -0x1p-23, 1000)
+PL_TEST_INTERVAL (tanhf, 0x1p-23, 0x1.205966p+3, 100000)
+PL_TEST_INTERVAL (tanhf, -0x1p-23, -0x1.205966p+3, 100000)
+PL_TEST_INTERVAL (tanhf, 0x1.205966p+3, inf, 100)
+PL_TEST_INTERVAL (tanhf, -0x1.205966p+3, -inf, 100)
diff --git a/pl/math/test/pl_test.h b/pl/math/test/pl_test.h
index 66dc73a..9bbcaf1 100644
--- a/pl/math/test/pl_test.h
+++ b/pl/math/test/pl_test.h
@@ -27,3 +27,6 @@
#define PL_TEST_EXPECT_FENV(f, e) PL_TEST_EXPECT_FENV_ (f, e)
#define PL_TEST_EXPECT_FENV_(f, e) PL_TEST_EXPECT_FENV_##e (f)
#define PL_TEST_EXPECT_FENV_1(f) PL_TEST_EXPECT_FENV_ENABLED f
+
+#define PL_TEST_INTERVAL(f, lo, hi, n) PL_TEST_INTERVAL f lo hi n
+#define PL_TEST_INTERVAL_C(f, lo, hi, n, c) PL_TEST_INTERVAL f lo hi n c
diff --git a/pl/math/test/runulp.sh b/pl/math/test/runulp.sh
index d6c3196..7fa4058 100755
--- a/pl/math/test/runulp.sh
+++ b/pl/math/test/runulp.sh
@@ -24,7 +24,8 @@ t() {
key=$(cat $ALIASES | { grep " $1$" || echo $1; } | awk '{print $1}')
L=$(cat $LIMITS | grep "^$key " | awk '{print $2}')
[[ $L =~ ^[0-9]+\.[0-9]+$ ]]
- extra_flags="${5:-}"
+ extra_flags=""
+ [[ -z "${5:-}" ]] || extra_flags="$extra_flags -c $5"
grep -q "^$key$" $FENV || extra_flags="$extra_flags -f"
$emu ./ulp -e $L $flags ${extra_flags} $1 $2 $3 $4 && PASS=$((PASS+1)) || FAIL=$((FAIL+1))
}
@@ -33,167 +34,11 @@ check() {
$emu ./ulp -f -q "$@" #>/dev/null
}
-t erff 0 0xffff0000 10000
-t erff 0x1p-127 0x1p-26 40000
-t erff -0x1p-127 -0x1p-26 40000
-t erff 0x1p-26 0x1p3 40000
-t erff -0x1p-26 -0x1p3 40000
-t erff 0 inf 40000
-
-t log10f 0 0xffff0000 10000
-t log10f 0x1p-127 0x1p-26 50000
-t log10f 0x1p-26 0x1p3 50000
-t log10f 0x1p-4 0x1p4 50000
-t log10f 0 inf 50000
-
-t log10 0 0xffff000000000000 10000
-t log10 0x1p-4 0x1p4 40000
-t log10 0 inf 40000
-
-t erfc 0 0xffff0000 10000
-t erfc 0x1p-1022 0x1p-26 40000
-t erfc -0x1p-1022 -0x1p-26 40000
-t erfc 0x1p-26 0x1p5 40000
-t erfc -0x1p-26 -0x1p3 40000
-t erfc 0 inf 40000
-
-t erfcf 0 0xffff0000 10000
-t erfcf 0x1p-127 0x1p-26 40000
-t erfcf -0x1p-127 -0x1p-26 40000
-t erfcf 0x1p-26 0x1p5 40000
-t erfcf -0x1p-26 -0x1p3 40000
-t erfcf 0 inf 40000
-
-t atan2 -10.0 10.0 50000
-t atan2 -1.0 1.0 40000
-t atan2 0.0 1.0 40000
-t atan2 1.0 100.0 40000
-t atan2 1e6 1e32 40000
+# Regression-test for correct NaN handling in atan2
check atan2 0x1p-1022 0x1p-1000 x 0 0x1p-1022 40000
-# Regression-test for correct NaN handling
check atan2 0x1.7887a0a717aefp+1017 0x1.7887a0a717aefp+1017 x -nan -nan
check atan2 nan nan x -nan -nan
-t atan2f -10.0 10.0 50000
-t atan2f -1.0 1.0 40000
-t atan2f 0.0 1.0 40000
-t atan2f 1.0 100.0 40000
-t atan2f 1e6 1e32 40000
-
-t asinhf 0 0x1p-12 5000
-t asinhf 0x1p-12 1.0 50000
-t asinhf 1.0 0x1p11 50000
-t asinhf 0x1p11 0x1p127 20000
-
-t asinh -0x1p-26 0x1p-26 50000
-t asinh 0x1p-26 1.0 40000
-t asinh -0x1p-26 -1.0 10000
-t asinh 1.0 100.0 40000
-t asinh -1.0 -100.0 10000
-t asinh 100.0 inf 50000
-t asinh -100.0 -inf 10000
-
-t log1p -10.0 10.0 10000
-t log1p 0.0 0x1p-23 50000
-t log1p 0x1p-23 0.001 50000
-t log1p 0.001 1.0 50000
-t log1p 0.0 -0x1p-23 50000
-t log1p -0x1p-23 -0.001 50000
-t log1p -0.001 -1.0 50000
-t log1p -1.0 inf 5000
-
-t log1pf -10.0 10.0 10000
-t log1pf 0.0 0x1p-23 50000
-t log1pf 0x1p-23 0.001 50000
-t log1pf 0.001 1.0 50000
-t log1pf 0.0 -0x1p-23 50000
-t log1pf -0x1p-23 -0.001 50000
-t log1pf -0.001 -1.0 50000
-t log1pf -1.0 inf 5000
-
-t tanf 0 0xffff0000 10000
-t tanf 0x1p-127 0x1p-14 50000
-t tanf -0x1p-127 -0x1p-14 50000
-t tanf 0x1p-14 0.7 50000
-t tanf -0x1p-14 -0.7 50000
-t tanf 0.7 1.5 50000
-t tanf -0.7 -1.5 50000
-t tanf 1.5 0x1p17 50000
-t tanf -1.5 -0x1p17 50000
-t tanf 0x1p17 0x1p54 50000
-t tanf -0x1p17 -0x1p54 50000
-t tanf 0x1p54 inf 50000
-t tanf -0x1p54 -inf 50000
-
-t acoshf 0 1 100
-t acoshf 1 2 10000
-t acoshf 2 0x1p64 100000
-t acoshf 0x1p64 inf 100000
-t acoshf -0 -inf 10000
-
-t acosh 0 1 10000
-t acosh 1 2 100000
-t acosh 2 0x1p511 100000
-t acosh 0x1p511 inf 100000
-t acosh -0 -inf 10000
-
-t expm1f 0 0x1p-23 1000
-t expm1f -0 -0x1p-23 1000
-t expm1f 0x1p-23 0x1.644716p6 100000
-t expm1f -0x1p-23 -0x1.9bbabcp+6 100000
-
-t sinhf 0 0x1.62e43p+6 100000
-t sinhf -0 -0x1.62e43p+6 100000
-t sinhf 0x1.62e43p+6 0x1.65a9fap+6 100
-t sinhf -0x1.62e43p+6 -0x1.65a9fap+6 100
-t sinhf 0x1.65a9fap+6 inf 100
-t sinhf -0x1.65a9fap+6 -inf 100
-
-t coshf 0 0x1p-63 100
-t coshf 0 0x1.5a92d8p+6 80000
-t coshf 0x1.5a92d8p+6 inf 2000
-t coshf -0 -0x1p-63 100
-t coshf -0 -0x1.5a92d8p+6 80000
-t coshf -0x1.5a92d8p+6 -inf 2000
-
-t expm1 0 0x1p-51 1000
-t expm1 -0 -0x1p-51 1000
-t expm1 0x1p-51 0x1.63108c75a1937p+9 100000
-t expm1 -0x1p-51 -0x1.740bf7c0d927dp+9 100000
-t expm1 0x1.63108c75a1937p+9 inf 100
-t expm1 -0x1.740bf7c0d927dp+9 -inf 100
-
-t sinh 0 0x1p-51 100
-t sinh -0 -0x1p-51 100
-t sinh 0x1p-51 0x1.62e42fefa39fp+9 100000
-t sinh -0x1p-51 -0x1.62e42fefa39fp+9 100000
-t sinh 0x1.62e42fefa39fp+9 inf 1000
-t sinh -0x1.62e42fefa39fp+9 -inf 1000
-
-t cosh 0 0x1.61da04cbafe44p+9 100000
-t cosh -0 -0x1.61da04cbafe44p+9 100000
-t cosh 0x1.61da04cbafe44p+9 0x1p10 1000
-t cosh -0x1.61da04cbafe44p+9 -0x1p10 1000
-t cosh 0x1p10 inf 100
-t cosh -0x1p10 -inf 100
-
-t atanhf 0 0x1p-12 500
-t atanhf 0x1p-12 1 200000
-t atanhf 1 inf 1000
-t atanhf -0 -0x1p-12 500
-t atanhf -0x1p-12 -1 200000
-t atanhf -1 -inf 1000
-
-t cbrtf 0 inf 1000000
-t cbrtf -0 -inf 1000000
-
-t tanhf 0 0x1p-23 1000
-t tanhf -0 -0x1p-23 1000
-t tanhf 0x1p-23 0x1.205966p+3 100000
-t tanhf -0x1p-23 -0x1.205966p+3 100000
-t tanhf 0x1.205966p+3 inf 100
-t tanhf -0x1.205966p+3 -inf 100
-
# vector functions
flags="${ULPFLAGS:--q}"
runs=
@@ -220,538 +65,10 @@ check -q -f -e 0 __sv_powi 0 inf x -0 -1000 100000 && runsv=1
check -q -f -e 0 __sv_powi -0 -inf x -0 -1000 100000 && runsv=1
fi
-range_erfc='
- 0 0xffff0000 10000
- 0x1p-1022 0x1p-26 40000
- -0x1p-1022 -0x1p-26 40000
- 0x1p-26 0x1p5 40000
- -0x1p-26 -0x1p3 40000
- 0 inf 40000
-'
-
-range_erfcf='
- 0 0xffff0000 10000
- 0x1p-127 0x1p-26 40000
- -0x1p-127 -0x1p-26 40000
- 0x1p-26 0x1p5 40000
- -0x1p-26 -0x1p3 40000
- 0 inf 40000
-'
-
-range_log10='
- 0 0xffff000000000000 10000
- 0x1p-4 0x1p4 400000
- 0 inf 400000
-'
-
-range_log10f='
- 0 0xffff0000 10000
- 0x1p-4 0x1p4 500000
-'
-
-range_erf='
- 0 0xffff0000 10000
- 0x1p-127 0x1p-26 40000
--0x1p-127 -0x1p-26 40000
- 0x1p-26 0x1p3 40000
--0x1p-26 -0x1p3 40000
- 0 inf 40000
-'
-
-range_erff='
- 0 0xffff0000 10000
- 0x1p-127 0x1p-26 40000
--0x1p-127 -0x1p-26 40000
- 0x1p-26 0x1p3 40000
--0x1p-26 -0x1p3 40000
- 0 inf 40000
-'
-
-range_atan2='
- -10.0 10.0 50000
- -1.0 1.0 40000
- 0.0 1.0 40000
- 1.0 100.0 40000
- 1e6 1e32 40000
-'
-
-range_atan='
- -10.0 10.0 50000
- -1.0 1.0 40000
- 0.0 1.0 40000
- 1.0 100.0 40000
- 1e6 1e32 40000
-'
-
-range_atan2f='
- -10.0 10.0 50000
- -1.0 1.0 40000
- 0.0 1.0 40000
- 1.0 100.0 40000
- 1e6 1e32 40000
-'
-
-range_atanf='
- -10.0 10.0 50000
- -1.0 1.0 40000
- 0.0 1.0 40000
- 1.0 100.0 40000
- 1e6 1e32 40000
-'
-
-range_log1pf='
- -10.0 10.0 10000
- 0.0 0x1p-23 30000
- 0x1p-23 0.001 50000
- 0.001 1.0 50000
- 0.0 -0x1p-23 30000
- -0x1p-23 -0.001 30000
- -0.001 -1.0 50000
- -1.0 inf 1000
-'
-
-range_asinhf='
- 0 0x1p-12 40000
- 0x1p-12 1.0 40000
- 1.0 0x1p11 40000
- 0x1p11 inf 40000
- 0 -0x1p-12 20000
- -0x1p-12 -1.0 20000
- -1.0 -0x1p11 20000
- -0x1p11 -inf 20000
-'
-
-range_log2f='
- -0.0 -0x1p126 100
- 0x1p-149 0x1p-126 4000
- 0x1p-126 0x1p-23 50000
- 0x1p-23 1.0 50000
- 1.0 100 50000
- 100 inf 50000
-'
-
-range_log2='
- -0.0 -0x1p126 100
- 0x1p-149 0x1p-126 4000
- 0x1p-126 0x1p-23 50000
- 0x1p-23 1.0 50000
- 1.0 100 50000
- 100 inf 50000
-'
-
-range_tanf='
- -0.0 -0x1p126 100
- 0x1p-149 0x1p-126 4000
- 0x1p-126 0x1p-23 50000
- 0x1p-23 0.7 50000
- 0.7 1.5 50000
- 1.5 100 50000
- 100 0x1p17 50000
- 0x1p17 inf 50000
-'
-
-range_log1p='
- -10.0 10.0 10000
- 0.0 0x1p-23 50000
- 0x1p-23 0.001 50000
- 0.001 1.0 50000
- 0.0 -0x1p-23 50000
- -0x1p-23 -0.001 50000
- -0.001 -1.0 50000
- -1.0 inf 5000
-'
-
-range_expm1f='
- 0 0x1p-23 1000
- -0 -0x1p-23 1000
- 0x1p-23 0x1.644716p6 1000000
- -0x1p-23 -0x1.9bbabcp+6 1000000
-'
-
-range_sinhf='
- 0 0x1.62e43p+6 100000
- -0 -0x1.62e43p+6 100000
- 0x1.62e43p+6 0x1.65a9fap+6 100
- -0x1.62e43p+6 -0x1.65a9fap+6 100
- 0x1.65a9fap+6 inf 100
- -0x1.65a9fap+6 -inf 100
-'
-
-range_coshf='
- 0 0x1p-63 100
- 0 0x1.5a92d8p+6 80000
- 0x1.5a92d8p+6 inf 2000
- -0 -0x1p-63 100
- -0 -0x1.5a92d8p+6 80000
- -0x1.5a92d8p+6 -inf 2000
-'
-
-range_expm1='
- 0 0x1p-51 1000
- -0 -0x1p-51 1000
- 0x1p-51 0x1.63108c75a1937p+9 100000
- -0x1p-51 -0x1.740bf7c0d927dp+9 100000
- 0x1.63108c75a1937p+9 inf 100
- -0x1.740bf7c0d927dp+9 -inf 100
-'
-
-range_sinh='
- 0 0x1p-51 100
- -0 -0x1p-51 100
- 0x1p-51 0x1.62e42fefa39fp+9 100000
- -0x1p-51 -0x1.62e42fefa39fp+9 100000
- 0x1.62e42fefa39fp+9 inf 1000
- -0x1.62e42fefa39fp+9 -inf 1000
-'
-
-range_cosh='
- 0 0x1.6p9 100000
- -0 -0x1.6p9 100000
- 0x1.6p9 inf 1000
- -0x1.6p9 -inf 1000
-'
-
-range_atanhf='
- 0 0x1p-12 500
- 0x1p-12 1 200000
- 1 inf 1000
- -0 -0x1p-12 500
- -0x1p-12 -1 200000
- -1 -inf 1000
-'
-
-range_cbrtf='
- 0 inf 1000000
- -0 -inf 1000000
-'
-
-range_asinh='
- 0 0x1p-26 50000
- 0x1p-26 1 50000
- 1 0x1p511 50000
- 0x1p511 inf 40000
- -0 -0x1p-26 50000
- -0x1p-26 -1 50000
- -1 -0x1p511 50000
- -0x1p511 -inf 40000
-'
-
-range_tanhf='
- 0 0x1p-23 1000
- -0 -0x1p-23 1000
- 0x1p-23 0x1.205966p+3 100000
- -0x1p-23 -0x1.205966p+3 100000
- 0x1.205966p+3 inf 100
- -0x1.205966p+3 -inf 100
-'
-
-range_sve_cosf='
- 0 0xffff0000 10000
- 0x1p-4 0x1p4 500000
-'
-
-range_sve_cos='
- 0 0xffff0000 10000
- 0x1p-4 0x1p4 500000
-'
-
-range_sve_sinf='
- 0 0xffff0000 10000
- 0x1p-4 0x1p4 500000
-'
-
-range_sve_sin='
- 0 0xffff0000 10000
- 0x1p-4 0x1p4 500000
-'
-
-range_sve_atanf='
- -10.0 10.0 50000
- -1.0 1.0 40000
- 0.0 1.0 40000
- 1.0 100.0 40000
- 1e6 1e32 40000
-'
-
-range_sve_atan='
- -10.0 10.0 50000
- -1.0 1.0 40000
- 0.0 1.0 40000
- 1.0 100.0 40000
- 1e6 1e32 40000
-'
-
-range_sve_atan2f='
- -10.0 10.0 50000
- -1.0 1.0 40000
- 0.0 1.0 40000
- 1.0 100.0 40000
- 1e6 1e32 40000
-'
-
-range_sve_atan2='
- -10.0 10.0 50000
- -1.0 1.0 40000
- 0.0 1.0 40000
- 1.0 100.0 40000
- 1e6 1e32 40000
-'
-
-range_sve_log10='
- -0.0 -0x1p126 100
- 0x1p-149 0x1p-126 4000
- 0x1p-126 0x1p-23 50000
- 0x1p-23 1.0 50000
- 1.0 100 50000
- 100 inf 50000
-'
-
-range_sve_log10f='
- -0.0 -0x1p126 100
- 0x1p-149 0x1p-126 4000
- 0x1p-126 0x1p-23 50000
- 0x1p-23 1.0 50000
- 1.0 100 50000
- 100 inf 50000
-'
-
-range_sve_logf='
- -0.0 -0x1p126 100
- 0x1p-149 0x1p-126 4000
- 0x1p-126 0x1p-23 50000
- 0x1p-23 1.0 50000
- 1.0 100 50000
- 100 inf 50000
-'
-
-range_sve_log='
- -0.0 -0x1p126 100
- 0x1p-149 0x1p-126 4000
- 0x1p-126 0x1p-23 50000
- 0x1p-23 1.0 50000
- 1.0 100 50000
- 100 inf 50000
-'
-
-range_sve_expf='
- 0 0x1p-23 40000
- 0x1p-23 1 50000
- 1 0x1p23 50000
- 0x1p23 inf 50000
- -0 -0x1p-23 40000
- -0x1p-23 -1 50000
- -1 -0x1p23 50000
- -0x1p23 -inf 50000
-'
-
-range_sve_erff='
- 0 0x1p-28 20000
- 0x1p-28 1 60000
- 1 0x1p28 60000
- 0x1p28 inf 20000
- -0 -0x1p-28 20000
- -0x1p-28 -1 60000
- -1 -0x1p28 60000
- -0x1p28 -inf 20000
-'
-
-range_sve_erf='
- 0 0x1p-28 20000
- 0x1p-28 1 60000
- 1 0x1p28 60000
- 0x1p28 inf 20000
- -0 -0x1p-28 20000
- -0x1p-28 -1 60000
- -1 -0x1p28 60000
- -0x1p28 -inf 20000
-'
-
-range_sve_tanf='
- -0.0 -0x1p126 100
- 0x1p-149 0x1p-126 4000
- 0x1p-126 0x1p-23 50000
- 0x1p-23 0.7 50000
- 0.7 1.5 50000
- 1.5 100 50000
- 100 0x1p17 50000
- 0x1p17 inf 50000
-'
-
-range_sve_erfc='
- 0 0xffff0000 10000
- 0x1p-127 0x1p-26 40000
- -0x1p-127 -0x1p-26 40000
- 0x1p-26 0x1p5 40000
- -0x1p-26 -0x1p3 40000
- 0 inf 40000
-'
-
-while read G F R A
+cat $INTERVALS | while read F LO HI N C
do
- [ "$R" = 1 ] && { [[ $G != sve_* ]] || [ $WANT_SVE_MATH -eq 1 ]; } || continue
- case "$G" in \#*) continue ;; esac
- eval range="\${range_$G}"
- while read X
- do
- [ -n "$X" ] || continue
- case "$X" in \#*) continue ;; esac
- t $F $X "$A"
- done << EOF
-$range
-EOF
-done << EOF
-# group symbol run
-
-atan __s_atan $runs
-atan __v_atan $runv
-atan __vn_atan $runvn
-atan _ZGVnN2v_atan $runvn
-atan2 __s_atan2 $runs
-atan2 __v_atan2 $runv
-atan2 __vn_atan2 $runvn
-atan2 _ZGVnN2vv_atan2 $runvn
-erf __s_erf $runs
-erf __v_erf $runv
-erf __vn_erf $runvn
-erf _ZGVnN2v_erf $runvn
-erfc __s_erfc $runs
-erfc __v_erfc $runv
-erfc __vn_erfc $runvn
-erfc _ZGVnN2v_erfc $runvn
-log10 __s_log10 $runs
-log10 __v_log10 $runv
-log10 __vn_log10 $runvn
-log10 _ZGVnN2v_log10 $runvn
-log2 __s_log2 $runs
-log2 __v_log2 $runv
-log2 __vn_log2 $runvn
-log2 _ZGVnN2v_log2 $runvn
-expm1 __s_expm1 $runs
-expm1 __v_expm1 $runv
-expm1 __vn_expm1 $runvn
-expm1 _ZGVnN2v_expm1 $runvn
-sinh __s_sinh $runs
-sinh __v_sinh $runv
-sinh __vn_sinh $runvn
-sinh _ZGVnN2v_sinh $runvn
-cosh __s_cosh $runs
-cosh __v_cosh $runv
-cosh __vn_cosh $runvn
-cosh _ZGVnN2v_cosh $runvn
-
-atanf __s_atanf $runs
-atanf __v_atanf $runv
-atanf __vn_atanf $runvn
-atanf _ZGVnN4v_atanf $runvn
-atan2f __s_atan2f $runs
-atan2f __v_atan2f $runv
-atan2f __vn_atan2f $runvn
-atan2f _ZGVnN4vv_atan2f $runvn
-erff __s_erff $runs
-erff __v_erff $runv
-erff __vn_erff $runvn
-erff _ZGVnN4v_erff $runvn
-erfcf __s_erfcf $runs
-erfcf __v_erfcf $runv
-erfcf __vn_erfcf $runvn
-erfcf _ZGVnN4v_erfcf $runvn
-log10f __s_log10f $runs
-log10f __v_log10f $runv
-log10f __vn_log10f $runvn
-log10f _ZGVnN4v_log10f $runvn
-log1pf __s_log1pf $runs
-log1pf __v_log1pf $runv
-log1pf __vn_log1pf $runvn
-log1pf _ZGVnN4v_log1pf $runvn
-asinhf __s_asinhf $runs
-asinhf __v_asinhf $runv
-asinhf __vn_asinhf $runvn
-asinhf _ZGVnN4v_asinhf $runvn
-log2f __s_log2f $runs
-log2f __v_log2f $runv
-log2f __vn_log2f $runvn
-log2f _ZGVnN4v_log2f $runvn
-tanf __s_tanf $runs
-tanf __v_tanf $runv
-tanf __vn_tanf $runvn
-tanf _ZGVnN4v_tanf $runvn
-log1p __s_log1p $runs
-log1p __v_log1p $runv
-log1p __vn_log1p $runvn
-log1p _ZGVnN2v_log1p $runvn
-expm1f __s_expm1f $runs
-expm1f __v_expm1f $runv
-expm1f __vn_expm1f $runvn
-expm1f _ZGVnN4v_expm1f $runvn
-sinhf __s_sinhf $runs
-sinhf __v_sinhf $runv
-sinhf __vn_sinhf $runvn
-sinhf _ZGVnN4v_sinhf $runvn
-coshf __s_coshf $runs
-coshf __v_coshf $runv
-coshf __vn_coshf $runvn
-coshf _ZGVnN4v_coshf $runvn
-atanhf __s_atanhf $runs -c 0
-atanhf __v_atanhf $runv -c 0
-atanhf __vn_atanhf $runvn -c 0
-atanhf _ZGVnN4v_atanhf $runvn -c 0
-cbrtf __s_cbrtf $runs
-cbrtf __v_cbrtf $runv
-cbrtf __vn_cbrtf $runvn
-cbrtf _ZGVnN4v_cbrtf $runvn
-asinh __s_asinh $runs
-# Test vector asinh 3 times, with control lane < 1, > 1 and special.
-# Ensures the v_sel is choosing the right option in all cases.
-asinh __v_asinh $runv -c 0.5
-asinh __vn_asinh $runvn -c 0.5
-asinh _ZGVnN2v_asinh $runvn -c 0.5
-asinh __v_asinh $runv -c 2
-asinh __vn_asinh $runvn -c 2
-asinh _ZGVnN2v_asinh $runvn -c 2
-asinh __v_asinh $runv -c 0x1p600
-asinh __vn_asinh $runvn -c 0x1p600
-asinh _ZGVnN2v_asinh $runvn -c 0x1p600
-tanhf __s_tanhf $runs
-tanhf __v_tanhf $runv
-tanhf __vn_tanhf $runvn
-tanhf _ZGVnN4v_tanhf $runvn
-
-sve_cosf __sv_cosf $runsv
-sve_cosf _ZGVsMxv_cosf $runsv
-sve_sinf __sv_sinf $runsv
-sve_sinf _ZGVsMxv_sinf $runsv
-sve_atan2f __sv_atan2f $runsv
-sve_atan2f _ZGVsMxvv_atan2f $runsv
-sve_atanf __sv_atanf $runsv
-sve_atanf _ZGVsMxv_atanf $runsv
-sve_log10f __sv_log10f $runsv
-sve_log10f _ZGVsMxv_log10f $runsv
-sve_logf __sv_logf $runsv
-sve_logf _ZGVsMxv_logf $runsv
-sve_expf __sv_expf $runsv
-sve_expf _ZGVsMxv_expf $runsv
-sve_erff __sv_erff $runsv
-sve_erff _ZGVsMxv_erff $runsv
-sve_tanf __sv_tanf $runsv
-sve_tanf _ZGVsMxv_tanf $runsv
-
-sve_cos __sv_cos $runsv
-sve_cos _ZGVsMxv_cos $runsv
-sve_sin __sv_sin $runsv
-sve_sin _ZGVsMxv_sin $runsv
-sve_atan __sv_atan $runsv
-sve_atan _ZGVsMxv_atan $runsv
-sve_atan2 __sv_atan2 $runsv
-sve_atan2 _ZGVsMxvv_atan2 $runsv
-sve_log10 __sv_log10 $runsv
-sve_log10 _ZGVsMxv_log10 $runsv
-sve_log __sv_log $runsv
-sve_log _ZGVsMxv_log $runsv
-sve_erf __sv_erf $runsv
-sve_erf _ZGVsMxv_erf $runsv
-sve_erfc __sv_erfc $runsv
-sve_erfc _ZGVsMxv_erfc $runsv
-EOF
+ t $F $LO $HI $N $C
+done
[ 0 -eq $FAIL ] || {
echo "FAILED $FAIL PASSED $PASS"
diff --git a/pl/math/v_asinh_2u5.c b/pl/math/v_asinh_2u5.c
index 23171a1..4eeec4a 100644
--- a/pl/math/v_asinh_2u5.c
+++ b/pl/math/v_asinh_2u5.c
@@ -157,4 +157,18 @@ VPCS_ALIAS
PL_SIG (V, D, 1, asinh, -10.0, 10.0)
PL_TEST_ULP (V_NAME (asinh), 1.54)
PL_TEST_EXPECT_FENV (V_NAME (asinh), WANT_ERRNO)
+/* Test vector asinh 3 times, with control lane < 1, > 1 and special.
+ Ensures the v_sel is choosing the right option in all cases. */
+#define V_ASINH_INTERVAL(lo, hi, n) \
+ PL_TEST_INTERVAL_C (V_NAME (asinh), lo, hi, n, 0.5) \
+ PL_TEST_INTERVAL_C (V_NAME (asinh), lo, hi, n, 2) \
+ PL_TEST_INTERVAL_C (V_NAME (asinh), lo, hi, n, 0x1p600)
+V_ASINH_INTERVAL (0, 0x1p-26, 50000)
+V_ASINH_INTERVAL (0x1p-26, 1, 50000)
+V_ASINH_INTERVAL (1, 0x1p511, 50000)
+V_ASINH_INTERVAL (0x1p511, inf, 40000)
+V_ASINH_INTERVAL (-0, -0x1p-26, 50000)
+V_ASINH_INTERVAL (-0x1p-26, -1, 50000)
+V_ASINH_INTERVAL (-1, -0x1p511, 50000)
+V_ASINH_INTERVAL (-0x1p511, -inf, 40000)
#endif
diff --git a/pl/math/v_asinhf_2u7.c b/pl/math/v_asinhf_2u7.c
index 32fe773..79bf80f 100644
--- a/pl/math/v_asinhf_2u7.c
+++ b/pl/math/v_asinhf_2u7.c
@@ -58,4 +58,12 @@ VPCS_ALIAS
PL_SIG (V, F, 1, asinh, -10.0, 10.0)
PL_TEST_ULP (V_NAME (asinhf), 2.17)
PL_TEST_EXPECT_FENV (V_NAME (asinhf), WANT_ERRNO)
+PL_TEST_INTERVAL (V_NAME (asinhf), 0, 0x1p-12, 40000)
+PL_TEST_INTERVAL (V_NAME (asinhf), 0x1p-12, 1.0, 40000)
+PL_TEST_INTERVAL (V_NAME (asinhf), 1.0, 0x1p11, 40000)
+PL_TEST_INTERVAL (V_NAME (asinhf), 0x1p11, inf, 40000)
+PL_TEST_INTERVAL (V_NAME (asinhf), 0, -0x1p-12, 20000)
+PL_TEST_INTERVAL (V_NAME (asinhf), -0x1p-12, -1.0, 20000)
+PL_TEST_INTERVAL (V_NAME (asinhf), -1.0, -0x1p11, 20000)
+PL_TEST_INTERVAL (V_NAME (asinhf), -0x1p11, -inf, 20000)
#endif
diff --git a/pl/math/v_atan2_3u.c b/pl/math/v_atan2_3u.c
index 27af80d..b123cfa 100644
--- a/pl/math/v_atan2_3u.c
+++ b/pl/math/v_atan2_3u.c
@@ -82,4 +82,9 @@ VPCS_ALIAS
PL_SIG (V, D, 2, atan2)
// TODO tighten this once __v_atan2 is fixed
PL_TEST_ULP (V_NAME (atan2), 2.9)
+PL_TEST_INTERVAL (V_NAME (atan2), -10.0, 10.0, 50000)
+PL_TEST_INTERVAL (V_NAME (atan2), -1.0, 1.0, 40000)
+PL_TEST_INTERVAL (V_NAME (atan2), 0.0, 1.0, 40000)
+PL_TEST_INTERVAL (V_NAME (atan2), 1.0, 100.0, 40000)
+PL_TEST_INTERVAL (V_NAME (atan2), 1e6, 1e32, 40000)
#endif
diff --git a/pl/math/v_atan2f_3u.c b/pl/math/v_atan2f_3u.c
index 3d8f9fc..abf8f5e 100644
--- a/pl/math/v_atan2f_3u.c
+++ b/pl/math/v_atan2f_3u.c
@@ -81,4 +81,9 @@ VPCS_ALIAS
/* Arity of 2 means no mathbench entry emitted. See test/mathbench_funcs.h. */
PL_SIG (V, F, 2, atan2)
PL_TEST_ULP (V_NAME (atan2f), 2.46)
+PL_TEST_INTERVAL (V_NAME (atan2f), -10.0, 10.0, 50000)
+PL_TEST_INTERVAL (V_NAME (atan2f), -1.0, 1.0, 40000)
+PL_TEST_INTERVAL (V_NAME (atan2f), 0.0, 1.0, 40000)
+PL_TEST_INTERVAL (V_NAME (atan2f), 1.0, 100.0, 40000)
+PL_TEST_INTERVAL (V_NAME (atan2f), 1e6, 1e32, 40000)
#endif
diff --git a/pl/math/v_atan_2u5.c b/pl/math/v_atan_2u5.c
index de39fa7..43b4abd 100644
--- a/pl/math/v_atan_2u5.c
+++ b/pl/math/v_atan_2u5.c
@@ -53,4 +53,9 @@ VPCS_ALIAS
PL_SIG (V, D, 1, atan, -10.0, 10.0)
PL_TEST_ULP (V_NAME (atan), 1.78)
+PL_TEST_INTERVAL (V_NAME (atan), -10.0, 10.0, 50000)
+PL_TEST_INTERVAL (V_NAME (atan), -1.0, 1.0, 40000)
+PL_TEST_INTERVAL (V_NAME (atan), 0.0, 1.0, 40000)
+PL_TEST_INTERVAL (V_NAME (atan), 1.0, 100.0, 40000)
+PL_TEST_INTERVAL (V_NAME (atan), 1e6, 1e32, 40000)
#endif
diff --git a/pl/math/v_atanf_3u.c b/pl/math/v_atanf_3u.c
index 8014d65..3cb51b1 100644
--- a/pl/math/v_atanf_3u.c
+++ b/pl/math/v_atanf_3u.c
@@ -52,4 +52,9 @@ VPCS_ALIAS
PL_SIG (V, F, 1, atan, -10.0, 10.0)
PL_TEST_ULP (V_NAME (atanf), 2.5)
+PL_TEST_INTERVAL (V_NAME (atanf), -10.0, 10.0, 50000)
+PL_TEST_INTERVAL (V_NAME (atanf), -1.0, 1.0, 40000)
+PL_TEST_INTERVAL (V_NAME (atanf), 0.0, 1.0, 40000)
+PL_TEST_INTERVAL (V_NAME (atanf), 1.0, 100.0, 40000)
+PL_TEST_INTERVAL (V_NAME (atanf), 1e6, 1e32, 40000)
#endif
diff --git a/pl/math/v_atanhf_3u1.c b/pl/math/v_atanhf_3u1.c
index 4cff1fc..68dbdf6 100644
--- a/pl/math/v_atanhf_3u1.c
+++ b/pl/math/v_atanhf_3u1.c
@@ -52,4 +52,10 @@ VPCS_ALIAS
PL_SIG (V, F, 1, atanh, -1.0, 1.0)
PL_TEST_ULP (V_NAME (atanhf), 2.59)
PL_TEST_EXPECT_FENV (V_NAME (atanhf), WANT_ERRNO)
+PL_TEST_INTERVAL_C (V_NAME (atanhf), 0, 0x1p-12, 500, 0)
+PL_TEST_INTERVAL_C (V_NAME (atanhf), 0x1p-12, 1, 200000, 0)
+PL_TEST_INTERVAL_C (V_NAME (atanhf), 1, inf, 1000, 0)
+PL_TEST_INTERVAL_C (V_NAME (atanhf), -0, -0x1p-12, 500, 0)
+PL_TEST_INTERVAL_C (V_NAME (atanhf), -0x1p-12, -1, 200000, 0)
+PL_TEST_INTERVAL_C (V_NAME (atanhf), -1, -inf, 1000, 0)
#endif
diff --git a/pl/math/v_cbrtf_1u5.c b/pl/math/v_cbrtf_1u5.c
index 756a468..cffc488 100644
--- a/pl/math/v_cbrtf_1u5.c
+++ b/pl/math/v_cbrtf_1u5.c
@@ -90,4 +90,6 @@ VPCS_ALIAS
PL_SIG (V, F, 1, cbrt, -10.0, 10.0)
PL_TEST_ULP (V_NAME (cbrtf), 1.03)
PL_TEST_EXPECT_FENV (V_NAME (cbrtf), WANT_ERRNO)
+PL_TEST_INTERVAL (V_NAME (cbrtf), 0, inf, 1000000)
+PL_TEST_INTERVAL (V_NAME (cbrtf), -0, -inf, 1000000)
#endif
diff --git a/pl/math/v_cosh_2u.c b/pl/math/v_cosh_2u.c
index 63f877e..20d5b38 100644
--- a/pl/math/v_cosh_2u.c
+++ b/pl/math/v_cosh_2u.c
@@ -88,4 +88,8 @@ VPCS_ALIAS
PL_SIG (V, D, 1, cosh, -10.0, 10.0)
PL_TEST_ULP (V_NAME (cosh), 1.43)
PL_TEST_EXPECT_FENV (V_NAME (cosh), WANT_ERRNO)
+PL_TEST_INTERVAL (V_NAME (cosh), 0, 0x1.6p9, 100000)
+PL_TEST_INTERVAL (V_NAME (cosh), -0, -0x1.6p9, 100000)
+PL_TEST_INTERVAL (V_NAME (cosh), 0x1.6p9, inf, 1000)
+PL_TEST_INTERVAL (V_NAME (cosh), -0x1.6p9, -inf, 1000)
#endif
diff --git a/pl/math/v_coshf_2u4.c b/pl/math/v_coshf_2u4.c
index f101681..6ea6eb3 100644
--- a/pl/math/v_coshf_2u4.c
+++ b/pl/math/v_coshf_2u4.c
@@ -64,4 +64,10 @@ VPCS_ALIAS
PL_SIG (V, F, 1, cosh, -10.0, 10.0)
PL_TEST_ULP (V_NAME (coshf), 1.89)
PL_TEST_EXPECT_FENV (V_NAME (coshf), WANT_ERRNO)
+PL_TEST_INTERVAL (V_NAME (coshf), 0, 0x1p-63, 100)
+PL_TEST_INTERVAL (V_NAME (coshf), 0, 0x1.5a92d8p+6, 80000)
+PL_TEST_INTERVAL (V_NAME (coshf), 0x1.5a92d8p+6, inf, 2000)
+PL_TEST_INTERVAL (V_NAME (coshf), -0, -0x1p-63, 100)
+PL_TEST_INTERVAL (V_NAME (coshf), -0, -0x1.5a92d8p+6, 80000)
+PL_TEST_INTERVAL (V_NAME (coshf), -0x1.5a92d8p+6, -inf, 2000)
#endif
diff --git a/pl/math/v_erf_2u.c b/pl/math/v_erf_2u.c
index e33d405..caec4d8 100644
--- a/pl/math/v_erf_2u.c
+++ b/pl/math/v_erf_2u.c
@@ -107,4 +107,10 @@ VPCS_ALIAS
PL_SIG (V, D, 1, erf, -6.0, 6.0)
PL_TEST_ULP (V_NAME (erf), 1.26)
+PL_TEST_INTERVAL (V_NAME (erf), 0, 0xffff0000, 10000)
+PL_TEST_INTERVAL (V_NAME (erf), 0x1p-127, 0x1p-26, 40000)
+PL_TEST_INTERVAL (V_NAME (erf), -0x1p-127, -0x1p-26, 40000)
+PL_TEST_INTERVAL (V_NAME (erf), 0x1p-26, 0x1p3, 40000)
+PL_TEST_INTERVAL (V_NAME (erf), -0x1p-26, -0x1p3, 40000)
+PL_TEST_INTERVAL (V_NAME (erf), 0, inf, 40000)
#endif
diff --git a/pl/math/v_erfc_4u.c b/pl/math/v_erfc_4u.c
index 9b08ead..9247f87 100644
--- a/pl/math/v_erfc_4u.c
+++ b/pl/math/v_erfc_4u.c
@@ -159,4 +159,10 @@ VPCS_ALIAS
PL_SIG (V, D, 1, erfc, -6.0, 28.0)
PL_TEST_ULP (V_NAME (erfc), 3.15)
+PL_TEST_INTERVAL (V_NAME (erfc), 0, 0xffff0000, 10000)
+PL_TEST_INTERVAL (V_NAME (erfc), 0x1p-1022, 0x1p-26, 40000)
+PL_TEST_INTERVAL (V_NAME (erfc), -0x1p-1022, -0x1p-26, 40000)
+PL_TEST_INTERVAL (V_NAME (erfc), 0x1p-26, 0x1p5, 40000)
+PL_TEST_INTERVAL (V_NAME (erfc), -0x1p-26, -0x1p3, 40000)
+PL_TEST_INTERVAL (V_NAME (erfc), 0, inf, 40000)
#endif
diff --git a/pl/math/v_erfcf_1u.c b/pl/math/v_erfcf_1u.c
index e39801e..4b495d0 100644
--- a/pl/math/v_erfcf_1u.c
+++ b/pl/math/v_erfcf_1u.c
@@ -174,4 +174,10 @@ VPCS_ALIAS
PL_SIG (V, F, 1, erfc, -6.0, 28.0)
PL_TEST_ULP (V_NAME (erfcf), 0.26)
+PL_TEST_INTERVAL (V_NAME (erfcf), 0, 0xffff0000, 10000)
+PL_TEST_INTERVAL (V_NAME (erfcf), 0x1p-127, 0x1p-26, 40000)
+PL_TEST_INTERVAL (V_NAME (erfcf), -0x1p-127, -0x1p-26, 40000)
+PL_TEST_INTERVAL (V_NAME (erfcf), 0x1p-26, 0x1p5, 40000)
+PL_TEST_INTERVAL (V_NAME (erfcf), -0x1p-26, -0x1p3, 40000)
+PL_TEST_INTERVAL (V_NAME (erfcf), 0, inf, 40000)
#endif
diff --git a/pl/math/v_erff_1u5.c b/pl/math/v_erff_1u5.c
index 52f063c..bb9b786 100644
--- a/pl/math/v_erff_1u5.c
+++ b/pl/math/v_erff_1u5.c
@@ -107,4 +107,10 @@ VPCS_ALIAS
PL_SIG (V, F, 1, erf, -4.0, 4.0)
PL_TEST_ULP (V_NAME (erff), 0.76)
+PL_TEST_INTERVAL (V_NAME (erff), 0, 0xffff0000, 10000)
+PL_TEST_INTERVAL (V_NAME (erff), 0x1p-127, 0x1p-26, 40000)
+PL_TEST_INTERVAL (V_NAME (erff), -0x1p-127, -0x1p-26, 40000)
+PL_TEST_INTERVAL (V_NAME (erff), 0x1p-26, 0x1p3, 40000)
+PL_TEST_INTERVAL (V_NAME (erff), -0x1p-26, -0x1p3, 40000)
+PL_TEST_INTERVAL (V_NAME (erff), 0, inf, 40000)
#endif
diff --git a/pl/math/v_expm1_2u5.c b/pl/math/v_expm1_2u5.c
index 216bdbc..3f63760 100644
--- a/pl/math/v_expm1_2u5.c
+++ b/pl/math/v_expm1_2u5.c
@@ -104,4 +104,10 @@ VPCS_ALIAS
PL_SIG (V, D, 1, expm1, -9.9, 9.9)
PL_TEST_ULP (V_NAME (expm1), 1.68)
PL_TEST_EXPECT_FENV (V_NAME (expm1), WANT_ERRNO)
+PL_TEST_INTERVAL (V_NAME (expm1), 0, 0x1p-51, 1000)
+PL_TEST_INTERVAL (V_NAME (expm1), -0, -0x1p-51, 1000)
+PL_TEST_INTERVAL (V_NAME (expm1), 0x1p-51, 0x1.63108c75a1937p+9, 100000)
+PL_TEST_INTERVAL (V_NAME (expm1), -0x1p-51, -0x1.740bf7c0d927dp+9, 100000)
+PL_TEST_INTERVAL (V_NAME (expm1), 0x1.63108c75a1937p+9, inf, 100)
+PL_TEST_INTERVAL (V_NAME (expm1), -0x1.740bf7c0d927dp+9, -inf, 100)
#endif
diff --git a/pl/math/v_expm1f_1u6.c b/pl/math/v_expm1f_1u6.c
index 6e47fac..9977b8e 100644
--- a/pl/math/v_expm1f_1u6.c
+++ b/pl/math/v_expm1f_1u6.c
@@ -87,4 +87,8 @@ VPCS_ALIAS
PL_SIG (V, F, 1, expm1, -9.9, 9.9)
PL_TEST_ULP (V_NAME (expm1f), 1.02)
PL_TEST_EXPECT_FENV (V_NAME (expm1f), WANT_ERRNO)
+PL_TEST_INTERVAL (V_NAME (expm1f), 0, 0x1p-23, 1000)
+PL_TEST_INTERVAL (V_NAME (expm1f), -0, -0x1p-23, 1000)
+PL_TEST_INTERVAL (V_NAME (expm1f), 0x1p-23, 0x1.644716p6, 1000000)
+PL_TEST_INTERVAL (V_NAME (expm1f), -0x1p-23, -0x1.9bbabcp+6, 1000000)
#endif
diff --git a/pl/math/v_log10_2u5.c b/pl/math/v_log10_2u5.c
index 014accc..6fb7447 100644
--- a/pl/math/v_log10_2u5.c
+++ b/pl/math/v_log10_2u5.c
@@ -103,4 +103,7 @@ VPCS_ALIAS
PL_SIG (V, D, 1, log10, 0.01, 11.1)
PL_TEST_ULP (V_NAME (log10), 1.97)
+PL_TEST_INTERVAL (V_NAME (log10), 0, 0xffff000000000000, 10000)
+PL_TEST_INTERVAL (V_NAME (log10), 0x1p-4, 0x1p4, 400000)
+PL_TEST_INTERVAL (V_NAME (log10), 0, inf, 400000)
#endif
diff --git a/pl/math/v_log10f_3u5.c b/pl/math/v_log10f_3u5.c
index f25da91..4c22540 100644
--- a/pl/math/v_log10f_3u5.c
+++ b/pl/math/v_log10f_3u5.c
@@ -76,4 +76,6 @@ VPCS_ALIAS
PL_SIG (V, F, 1, log10, 0.01, 11.1)
PL_TEST_ULP (V_NAME (log10f), 2.81)
+PL_TEST_INTERVAL (V_NAME (log10f), 0, 0xffff0000, 10000)
+PL_TEST_INTERVAL (V_NAME (log10f), 0x1p-4, 0x1p4, 500000)
#endif
diff --git a/pl/math/v_log1p_2u5.c b/pl/math/v_log1p_2u5.c
index 7a8c6bf..ccde382 100644
--- a/pl/math/v_log1p_2u5.c
+++ b/pl/math/v_log1p_2u5.c
@@ -108,4 +108,12 @@ VPCS_ALIAS
PL_SIG (V, D, 1, log1p, -0.9, 10.0)
PL_TEST_ULP (V_NAME (log1p), 1.97)
PL_TEST_EXPECT_FENV (V_NAME (log1p), WANT_ERRNO)
+PL_TEST_INTERVAL (V_NAME (log1p), -10.0, 10.0, 10000)
+PL_TEST_INTERVAL (V_NAME (log1p), 0.0, 0x1p-23, 50000)
+PL_TEST_INTERVAL (V_NAME (log1p), 0x1p-23, 0.001, 50000)
+PL_TEST_INTERVAL (V_NAME (log1p), 0.001, 1.0, 50000)
+PL_TEST_INTERVAL (V_NAME (log1p), 0.0, -0x1p-23, 50000)
+PL_TEST_INTERVAL (V_NAME (log1p), -0x1p-23, -0.001, 50000)
+PL_TEST_INTERVAL (V_NAME (log1p), -0.001, -1.0, 50000)
+PL_TEST_INTERVAL (V_NAME (log1p), -1.0, inf, 5000)
#endif
diff --git a/pl/math/v_log1pf_2u1.c b/pl/math/v_log1pf_2u1.c
index f351ecd..96ac02d 100644
--- a/pl/math/v_log1pf_2u1.c
+++ b/pl/math/v_log1pf_2u1.c
@@ -148,4 +148,12 @@ VPCS_ALIAS
PL_SIG (V, F, 1, log1p, -0.9, 10.0)
PL_TEST_ULP (V_NAME (log1pf), 1.53)
PL_TEST_EXPECT_FENV (V_NAME (log1pf), WANT_ERRNO)
+PL_TEST_INTERVAL (V_NAME (log1pf), -10.0, 10.0, 10000)
+PL_TEST_INTERVAL (V_NAME (log1pf), 0.0, 0x1p-23, 30000)
+PL_TEST_INTERVAL (V_NAME (log1pf), 0x1p-23, 0.001, 50000)
+PL_TEST_INTERVAL (V_NAME (log1pf), 0.001, 1.0, 50000)
+PL_TEST_INTERVAL (V_NAME (log1pf), 0.0, -0x1p-23, 30000)
+PL_TEST_INTERVAL (V_NAME (log1pf), -0x1p-23, -0.001, 30000)
+PL_TEST_INTERVAL (V_NAME (log1pf), -0.001, -1.0, 50000)
+PL_TEST_INTERVAL (V_NAME (log1pf), -1.0, inf, 1000)
#endif
diff --git a/pl/math/v_log2_3u.c b/pl/math/v_log2_3u.c
index 3bdfd2e..7dca684 100644
--- a/pl/math/v_log2_3u.c
+++ b/pl/math/v_log2_3u.c
@@ -90,4 +90,10 @@ VPCS_ALIAS
PL_SIG (V, D, 1, log2, 0.01, 11.1)
PL_TEST_ULP (V_NAME (log2), 2.10)
+PL_TEST_INTERVAL (V_NAME (log2), -0.0, -0x1p126, 100)
+PL_TEST_INTERVAL (V_NAME (log2), 0x1p-149, 0x1p-126, 4000)
+PL_TEST_INTERVAL (V_NAME (log2), 0x1p-126, 0x1p-23, 50000)
+PL_TEST_INTERVAL (V_NAME (log2), 0x1p-23, 1.0, 50000)
+PL_TEST_INTERVAL (V_NAME (log2), 1.0, 100, 50000)
+PL_TEST_INTERVAL (V_NAME (log2), 100, inf, 50000)
#endif
diff --git a/pl/math/v_log2f_2u6.c b/pl/math/v_log2f_2u6.c
index a3c9aac..aa011cd 100644
--- a/pl/math/v_log2f_2u6.c
+++ b/pl/math/v_log2f_2u6.c
@@ -123,4 +123,10 @@ VPCS_ALIAS
PL_SIG (V, F, 1, log2, 0.01, 11.1)
PL_TEST_ULP (V_NAME (log2f), 2.10)
PL_TEST_EXPECT_FENV (V_NAME (log2f), WANT_ERRNO)
+PL_TEST_INTERVAL (V_NAME (log2f), -0.0, -0x1p126, 100)
+PL_TEST_INTERVAL (V_NAME (log2f), 0x1p-149, 0x1p-126, 4000)
+PL_TEST_INTERVAL (V_NAME (log2f), 0x1p-126, 0x1p-23, 50000)
+PL_TEST_INTERVAL (V_NAME (log2f), 0x1p-23, 1.0, 50000)
+PL_TEST_INTERVAL (V_NAME (log2f), 1.0, 100, 50000)
+PL_TEST_INTERVAL (V_NAME (log2f), 100, inf, 50000)
#endif
diff --git a/pl/math/v_sinh_3u.c b/pl/math/v_sinh_3u.c
index bab8896..019cf84 100644
--- a/pl/math/v_sinh_3u.c
+++ b/pl/math/v_sinh_3u.c
@@ -47,4 +47,10 @@ VPCS_ALIAS
PL_SIG (V, D, 1, sinh, -10.0, 10.0)
PL_TEST_ULP (V_NAME (sinh), 2.08)
PL_TEST_EXPECT_FENV (V_NAME (sinh), WANT_ERRNO)
+PL_TEST_INTERVAL (V_NAME (sinh), 0, 0x1p-51, 100)
+PL_TEST_INTERVAL (V_NAME (sinh), -0, -0x1p-51, 100)
+PL_TEST_INTERVAL (V_NAME (sinh), 0x1p-51, 0x1.62e42fefa39fp+9, 100000)
+PL_TEST_INTERVAL (V_NAME (sinh), -0x1p-51, -0x1.62e42fefa39fp+9, 100000)
+PL_TEST_INTERVAL (V_NAME (sinh), 0x1.62e42fefa39fp+9, inf, 1000)
+PL_TEST_INTERVAL (V_NAME (sinh), -0x1.62e42fefa39fp+9, -inf, 1000)
#endif
diff --git a/pl/math/v_sinhf_2u3.c b/pl/math/v_sinhf_2u3.c
index ecedf55..a8bf5ae 100644
--- a/pl/math/v_sinhf_2u3.c
+++ b/pl/math/v_sinhf_2u3.c
@@ -46,4 +46,10 @@ VPCS_ALIAS
PL_SIG (V, F, 1, sinh, -10.0, 10.0)
PL_TEST_ULP (V_NAME (sinhf), 1.76)
PL_TEST_EXPECT_FENV (V_NAME (sinhf), WANT_ERRNO)
+PL_TEST_INTERVAL (V_NAME (sinhf), 0, 0x1.62e43p+6, 100000)
+PL_TEST_INTERVAL (V_NAME (sinhf), -0, -0x1.62e43p+6, 100000)
+PL_TEST_INTERVAL (V_NAME (sinhf), 0x1.62e43p+6, 0x1.65a9fap+6, 100)
+PL_TEST_INTERVAL (V_NAME (sinhf), -0x1.62e43p+6, -0x1.65a9fap+6, 100)
+PL_TEST_INTERVAL (V_NAME (sinhf), 0x1.65a9fap+6, inf, 100)
+PL_TEST_INTERVAL (V_NAME (sinhf), -0x1.65a9fap+6, -inf, 100)
#endif
diff --git a/pl/math/v_tanf_3u2.c b/pl/math/v_tanf_3u2.c
index 51ede3c..648690d 100644
--- a/pl/math/v_tanf_3u2.c
+++ b/pl/math/v_tanf_3u2.c
@@ -120,4 +120,12 @@ VPCS_ALIAS
PL_SIG (V, F, 1, tan, -3.1, 3.1)
PL_TEST_ULP (V_NAME (tanf), 2.7)
PL_TEST_EXPECT_FENV (V_NAME (tanf), WANT_ERRNO)
+PL_TEST_INTERVAL (V_NAME (tanf), -0.0, -0x1p126, 100)
+PL_TEST_INTERVAL (V_NAME (tanf), 0x1p-149, 0x1p-126, 4000)
+PL_TEST_INTERVAL (V_NAME (tanf), 0x1p-126, 0x1p-23, 50000)
+PL_TEST_INTERVAL (V_NAME (tanf), 0x1p-23, 0.7, 50000)
+PL_TEST_INTERVAL (V_NAME (tanf), 0.7, 1.5, 50000)
+PL_TEST_INTERVAL (V_NAME (tanf), 1.5, 100, 50000)
+PL_TEST_INTERVAL (V_NAME (tanf), 100, 0x1p17, 50000)
+PL_TEST_INTERVAL (V_NAME (tanf), 0x1p17, inf, 50000)
#endif
diff --git a/pl/math/v_tanhf_2u6.c b/pl/math/v_tanhf_2u6.c
index ae87f50..c10be40 100644
--- a/pl/math/v_tanhf_2u6.c
+++ b/pl/math/v_tanhf_2u6.c
@@ -93,4 +93,10 @@ VPCS_ALIAS
PL_SIG (V, F, 1, tanh, -10.0, 10.0)
PL_TEST_ULP (V_NAME (tanhf), 2.09)
PL_TEST_EXPECT_FENV (V_NAME (tanhf), WANT_ERRNO)
+PL_TEST_INTERVAL (V_NAME (tanhf), 0, 0x1p-23, 1000)
+PL_TEST_INTERVAL (V_NAME (tanhf), -0, -0x1p-23, 1000)
+PL_TEST_INTERVAL (V_NAME (tanhf), 0x1p-23, 0x1.205966p+3, 100000)
+PL_TEST_INTERVAL (V_NAME (tanhf), -0x1p-23, -0x1.205966p+3, 100000)
+PL_TEST_INTERVAL (V_NAME (tanhf), 0x1.205966p+3, inf, 100)
+PL_TEST_INTERVAL (V_NAME (tanhf), -0x1.205966p+3, -inf, 100)
#endif