aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Ramsay <Joe.Ramsay@arm.com>2022-12-15 13:27:57 +0000
committerJoe Ramsay <joe.ramsay@arm.com>2022-12-15 13:27:57 +0000
commitd748e1520dd2ff5ad3574bd0827cdd882bf6bed8 (patch)
tree91c52639f3759e5148e8fc30c11096cfc886d048
parentecb1c6f6ea7872645cb4c26514d5f64815b61a1b (diff)
downloadarm-optimized-routines-d748e1520dd2ff5ad3574bd0827cdd882bf6bed8.tar.gz
pl/math: Move fenv expectations out of runulp.sh
Introduces a new macro, similar to how ULP thresholds are now handled, that emits a list of routines which are expected to correctly trigger fenv exceptions, to be consumed by runulp.sh. All scalar routines are expected to do so. A small number of Neon routines are also expected to, dependent on WANT_ERRNO.
-rw-r--r--pl/math/Dir.mk15
-rw-r--r--pl/math/include/pl_test.h6
-rw-r--r--pl/math/test/pl_test.h17
-rwxr-xr-xpl/math/test/runulp.sh162
-rw-r--r--pl/math/v_asinh_2u5.c1
-rw-r--r--pl/math/v_asinhf_2u7.c1
-rw-r--r--pl/math/v_atanhf_3u1.c1
-rw-r--r--pl/math/v_cbrtf_1u5.c1
-rw-r--r--pl/math/v_cosh_2u.c1
-rw-r--r--pl/math/v_coshf_2u4.c1
-rw-r--r--pl/math/v_expm1_2u5.c1
-rw-r--r--pl/math/v_expm1f_1u6.c1
-rw-r--r--pl/math/v_log1p_2u5.c1
-rw-r--r--pl/math/v_log1pf_2u1.c1
-rw-r--r--pl/math/v_log2f_2u6.c1
-rw-r--r--pl/math/v_sinh_3u.c1
-rw-r--r--pl/math/v_sinhf_2u3.c1
-rw-r--r--pl/math/v_tanf_3u2.c1
-rw-r--r--pl/math/v_tanhf_2u6.c1
19 files changed, 121 insertions, 94 deletions
diff --git a/pl/math/Dir.mk b/pl/math/Dir.mk
index 0cae7be..b27bcee 100644
--- a/pl/math/Dir.mk
+++ b/pl/math/Dir.mk
@@ -147,18 +147,24 @@ 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-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-input-dir)/%.ulp: $(PLM)/%.c
mkdir -p $(@D)
- $(CC) -I$(PLM)/test $(CFLAGS_PL) $< -o - -E | { grep "PL_TEST_ULP" || true; } > $@
+ $(CC) -I$(PLM)/test $(CFLAGS_PL) $< -o - -E | { grep -o "PL_TEST_ULP [^ ]* [^ ]*" || true; } > $@
$(ulp-input-dir)/%.alias: $(PLM)/%.c
mkdir -p $(@D)
$(CC) -I$(PLM)/test $(CFLAGS_PL) $< -o - -E | { grep "PL_TEST_ALIAS" || true; } | sed "s/_x / /g"> $@
+$(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-lims := $(ulp-input-dir)/limits
$(ulp-lims): $(math-lib-lims)
cat $^ | sed "s/PL_TEST_ULP //g;s/^ *//g" > $@
@@ -167,12 +173,17 @@ ulp-aliases := $(ulp-input-dir)/aliases
$(ulp-aliases): $(math-lib-aliases)
cat $^ | sed "s/PL_TEST_ALIAS //g;s/^ *//g" > $@
-check-pl/math-ulp: $(math-tools) $(ulp-lims) $(ulp-aliases)
+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)
WANT_ERRNO=$(WANT_ERRNO) \
WANT_SVE_MATH=$(WANT_SVE_MATH) \
ULPFLAGS="$(math-ulpflags)" \
LIMITS=../../../$(ulp-lims) \
ALIASES=../../../$(ulp-aliases) \
+ FENV=../../../$(fenv-exps) \
build/pl/bin/runulp.sh $(EMULATOR)
check-pl/math: check-pl/math-test check-pl/math-rtest check-pl/math-ulp
diff --git a/pl/math/include/pl_test.h b/pl/math/include/pl_test.h
index 1ab3814..8999efa 100644
--- a/pl/math/include/pl_test.h
+++ b/pl/math/include/pl_test.h
@@ -14,3 +14,9 @@
strong_alias. Use PL_ALIAS instead of strong_alias to make sure the alias is
also added to the test suite. */
#define PL_ALIAS(a, b) strong_alias (a, b)
+
+/* Emit routine name if e == 1 and f is expected to correctly trigger fenv
+ exceptions. e allows declaration to be emitted conditionally upon certain
+ build flags - defer expansion by one pass to allow those flags to be expanded
+ properly. */
+#define PL_TEST_EXPECT_FENV(f, e)
diff --git a/pl/math/test/pl_test.h b/pl/math/test/pl_test.h
index d4901b1..66dc73a 100644
--- a/pl/math/test/pl_test.h
+++ b/pl/math/test/pl_test.h
@@ -6,9 +6,24 @@
* SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception.
*/
-/* Emit the max ULP threshold, l, for routine f. */
+/* Emit the max ULP threshold, l, for routine f. Piggy-back PL_TEST_EXPECT_FENV
+ on PL_TEST_ULP to add EXPECT_FENV to all scalar routines. */
+#if !(V_SUPPORTED || SV_SUPPORTED)
+#define PL_TEST_ULP(f, l) \
+ PL_TEST_EXPECT_FENV (f, 1) \
+ PL_TEST_ULP f l
+#else
#define PL_TEST_ULP(f, l) PL_TEST_ULP f l
+#endif
/* Emit aliases to allow test params to be mapped from aliases back to their
aliasees. */
#define PL_ALIAS(a, b) PL_TEST_ALIAS a b
+
+/* Emit routine name if e == 1 and f is expected to correctly trigger fenv
+ exceptions. e allows declaration to be emitted conditionally upon certain
+ build flags - defer expansion by one pass to allow those flags to be expanded
+ properly. */
+#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
diff --git a/pl/math/test/runulp.sh b/pl/math/test/runulp.sh
index 3e31c00..d6c3196 100755
--- a/pl/math/test/runulp.sh
+++ b/pl/math/test/runulp.sh
@@ -24,7 +24,9 @@ t() {
key=$(cat $ALIASES | { grep " $1$" || echo $1; } | awk '{print $1}')
L=$(cat $LIMITS | grep "^$key " | awk '{print $2}')
[[ $L =~ ^[0-9]+\.[0-9]+$ ]]
- $emu ./ulp -e $L $flags ${5:-} $1 $2 $3 $4 && PASS=$((PASS+1)) || FAIL=$((FAIL+1))
+ extra_flags="${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))
}
check() {
@@ -584,7 +586,7 @@ range_sve_erfc='
0 inf 40000
'
-while read G F R D A
+while read G F R A
do
[ "$R" = 1 ] && { [[ $G != sve_* ]] || [ $WANT_SVE_MATH -eq 1 ]; } || continue
case "$G" in \#*) continue ;; esac
@@ -592,30 +594,8 @@ do
while read X
do
[ -n "$X" ] || continue
- # fenv checking is enabled by default, but we almost
- # always want to disable it for vector routines. There
- # are, however, a small number of vector routines in
- # pl/math which are supposed to set fenv correctly
- # when WANT_ERRNO is enabled. A hack is needed to
- # ensure fenv checking is enabled for routines where
- # this is the case. Pass "fenv" as fourth argument to
- # prevent -f being added to the run line when
- # WANT_ERRNO is enabled.
- f="-f"
- if [ $WANT_ERRNO -eq 1 ]; then
- if [ "$D" = "fenv" ]; then
- f=""
- elif [ "$D" = "nofenv" ]; then
- # Need to pass this if you want additional
- # arguments but keep fenv checking disabled.
- f="-f"
- elif [ ! -z "$D" ]; then
- echo "Unrecognised 4th argument: $D"
- exit 1
- fi
- fi
case "$X" in \#*) continue ;; esac
- t $F $X "$A $f"
+ t $F $X "$A"
done << EOF
$range
EOF
@@ -646,18 +626,18 @@ log2 __s_log2 $runs
log2 __v_log2 $runv
log2 __vn_log2 $runvn
log2 _ZGVnN2v_log2 $runvn
-expm1 __s_expm1 $runs fenv
-expm1 __v_expm1 $runv fenv
-expm1 __vn_expm1 $runvn fenv
-expm1 _ZGVnN2v_expm1 $runvn fenv
-sinh __s_sinh $runs fenv
-sinh __v_sinh $runv fenv
-sinh __vn_sinh $runvn fenv
-sinh _ZGVnN2v_sinh $runvn fenv
-cosh __s_cosh $runs fenv
-cosh __v_cosh $runv fenv
-cosh __vn_cosh $runvn fenv
-cosh _ZGVnN2v_cosh $runvn fenv
+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
@@ -679,62 +659,62 @@ log10f __s_log10f $runs
log10f __v_log10f $runv
log10f __vn_log10f $runvn
log10f _ZGVnN4v_log10f $runvn
-log1pf __s_log1pf $runs fenv
-log1pf __v_log1pf $runv fenv
-log1pf __vn_log1pf $runvn fenv
-log1pf _ZGVnN4v_log1pf $runvn fenv
-asinhf __s_asinhf $runs fenv
-asinhf __v_asinhf $runv fenv
-asinhf __vn_asinhf $runvn fenv
-asinhf _ZGVnN4v_asinhf $runvn fenv
-log2f __s_log2f $runs fenv
-log2f __v_log2f $runv fenv
-log2f __vn_log2f $runvn fenv
-log2f _ZGVnN4v_log2f $runvn fenv
-tanf __s_tanf $runs fenv
-tanf __v_tanf $runv fenv
-tanf __vn_tanf $runvn fenv
-tanf _ZGVnN4v_tanf $runvn fenv
-log1p __s_log1p $runs fenv
-log1p __v_log1p $runv fenv
-log1p __vn_log1p $runvn fenv
-log1p _ZGVnN2v_log1p $runvn fenv
-expm1f __s_expm1f $runs fenv
-expm1f __v_expm1f $runv fenv
-expm1f __vn_expm1f $runvn fenv
-expm1f _ZGVnN4v_expm1f $runvn fenv
-sinhf __s_sinhf $runs fenv
-sinhf __v_sinhf $runv fenv
-sinhf __vn_sinhf $runvn fenv
-sinhf _ZGVnN4v_sinhf $runvn fenv
-coshf __s_coshf $runs fenv
-coshf __v_coshf $runv fenv
-coshf __vn_coshf $runvn fenv
-coshf _ZGVnN4v_coshf $runvn fenv
-atanhf __s_atanhf $runs fenv -c 0
-atanhf __v_atanhf $runv fenv -c 0
-atanhf __vn_atanhf $runvn fenv -c 0
-atanhf _ZGVnN4v_atanhf $runvn fenv -c 0
-cbrtf __s_cbrtf $runs fenv
-cbrtf __v_cbrtf $runv fenv
-cbrtf __vn_cbrtf $runvn fenv
-cbrtf _ZGVnN4v_cbrtf $runvn fenv
-asinh __s_asinh $runs fenv
+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 fenv -c 0.5
-asinh __vn_asinh $runvn fenv -c 0.5
-asinh _ZGVnN2v_asinh $runvn fenv -c 0.5
-asinh __v_asinh $runv fenv -c 2
-asinh __vn_asinh $runvn fenv -c 2
-asinh _ZGVnN2v_asinh $runvn fenv -c 2
-asinh __v_asinh $runv fenv -c 0x1p600
-asinh __vn_asinh $runvn fenv -c 0x1p600
-asinh _ZGVnN2v_asinh $runvn fenv -c 0x1p600
-tanhf __s_tanhf $runs fenv
-tanhf __v_tanhf $runv fenv
-tanhf __vn_tanhf $runvn fenv
-tanhf _ZGVnN4v_tanhf $runvn fenv
+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
diff --git a/pl/math/v_asinh_2u5.c b/pl/math/v_asinh_2u5.c
index d7f9a50..23171a1 100644
--- a/pl/math/v_asinh_2u5.c
+++ b/pl/math/v_asinh_2u5.c
@@ -156,4 +156,5 @@ 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)
#endif
diff --git a/pl/math/v_asinhf_2u7.c b/pl/math/v_asinhf_2u7.c
index 812e28f..32fe773 100644
--- a/pl/math/v_asinhf_2u7.c
+++ b/pl/math/v_asinhf_2u7.c
@@ -57,4 +57,5 @@ 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)
#endif
diff --git a/pl/math/v_atanhf_3u1.c b/pl/math/v_atanhf_3u1.c
index c950c46..4cff1fc 100644
--- a/pl/math/v_atanhf_3u1.c
+++ b/pl/math/v_atanhf_3u1.c
@@ -51,4 +51,5 @@ 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)
#endif
diff --git a/pl/math/v_cbrtf_1u5.c b/pl/math/v_cbrtf_1u5.c
index b5f4c72..756a468 100644
--- a/pl/math/v_cbrtf_1u5.c
+++ b/pl/math/v_cbrtf_1u5.c
@@ -89,4 +89,5 @@ 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)
#endif
diff --git a/pl/math/v_cosh_2u.c b/pl/math/v_cosh_2u.c
index 1cac350..63f877e 100644
--- a/pl/math/v_cosh_2u.c
+++ b/pl/math/v_cosh_2u.c
@@ -87,4 +87,5 @@ 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)
#endif
diff --git a/pl/math/v_coshf_2u4.c b/pl/math/v_coshf_2u4.c
index b0a2be1..f101681 100644
--- a/pl/math/v_coshf_2u4.c
+++ b/pl/math/v_coshf_2u4.c
@@ -63,4 +63,5 @@ 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)
#endif
diff --git a/pl/math/v_expm1_2u5.c b/pl/math/v_expm1_2u5.c
index e0a31a5..216bdbc 100644
--- a/pl/math/v_expm1_2u5.c
+++ b/pl/math/v_expm1_2u5.c
@@ -103,4 +103,5 @@ 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)
#endif
diff --git a/pl/math/v_expm1f_1u6.c b/pl/math/v_expm1f_1u6.c
index dd211f9..6e47fac 100644
--- a/pl/math/v_expm1f_1u6.c
+++ b/pl/math/v_expm1f_1u6.c
@@ -86,4 +86,5 @@ 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)
#endif
diff --git a/pl/math/v_log1p_2u5.c b/pl/math/v_log1p_2u5.c
index 889fac0..7a8c6bf 100644
--- a/pl/math/v_log1p_2u5.c
+++ b/pl/math/v_log1p_2u5.c
@@ -107,4 +107,5 @@ 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)
#endif
diff --git a/pl/math/v_log1pf_2u1.c b/pl/math/v_log1pf_2u1.c
index 93c896b..f351ecd 100644
--- a/pl/math/v_log1pf_2u1.c
+++ b/pl/math/v_log1pf_2u1.c
@@ -147,4 +147,5 @@ 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)
#endif
diff --git a/pl/math/v_log2f_2u6.c b/pl/math/v_log2f_2u6.c
index 8d7d138..a3c9aac 100644
--- a/pl/math/v_log2f_2u6.c
+++ b/pl/math/v_log2f_2u6.c
@@ -122,4 +122,5 @@ 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)
#endif
diff --git a/pl/math/v_sinh_3u.c b/pl/math/v_sinh_3u.c
index 7d6b612..bab8896 100644
--- a/pl/math/v_sinh_3u.c
+++ b/pl/math/v_sinh_3u.c
@@ -46,4 +46,5 @@ 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)
#endif
diff --git a/pl/math/v_sinhf_2u3.c b/pl/math/v_sinhf_2u3.c
index 76bfe78..ecedf55 100644
--- a/pl/math/v_sinhf_2u3.c
+++ b/pl/math/v_sinhf_2u3.c
@@ -45,4 +45,5 @@ 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)
#endif
diff --git a/pl/math/v_tanf_3u2.c b/pl/math/v_tanf_3u2.c
index 73b0807..51ede3c 100644
--- a/pl/math/v_tanf_3u2.c
+++ b/pl/math/v_tanf_3u2.c
@@ -119,4 +119,5 @@ 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)
#endif
diff --git a/pl/math/v_tanhf_2u6.c b/pl/math/v_tanhf_2u6.c
index bb86794..ae87f50 100644
--- a/pl/math/v_tanhf_2u6.c
+++ b/pl/math/v_tanhf_2u6.c
@@ -92,4 +92,5 @@ 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)
#endif