diff mbox series

[13/15] math: Fix log2 template for inputs less than 0

Message ID 20240327164527.3717523-14-adhemerval.zanella@linaro.org
State New
Headers show
Series Fix some libm static issues | expand

Commit Message

Adhemerval Zanella Netto March 27, 2024, 4:45 p.m. UTC
The template is used by some ABIs for the static build, and it
fails to correctly set the floating exceptions if the argument
is less than 0.

Checked on x86_64-linux-gnu.
---
 math/Makefile          |  1 +
 math/w_log2_template.c | 16 ++++++++++++----
 2 files changed, 13 insertions(+), 4 deletions(-)
diff mbox series

Patch

diff --git a/math/Makefile b/math/Makefile
index aa57171f77..7391f2bd41 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -370,6 +370,7 @@  $(libm-test-c-narrow-obj): $(objpfx)libm-test%.c: libm-test%.inc \
 libm-test-funcs-auto-static = \
   acos \
   exp10 \
+  log2 \
   log10 \
   # libm-test-funcs-auto-static
 libm-test-funcs-noauto-static = \
diff --git a/math/w_log2_template.c b/math/w_log2_template.c
index f3ac0aab49..8933f2cd62 100644
--- a/math/w_log2_template.c
+++ b/math/w_log2_template.c
@@ -32,11 +32,19 @@  M_DECL_FUNC (__log2) (FLOAT x)
   if (__glibc_unlikely (islessequal (x, M_LIT (0.0))))
     {
       if (x == 0)
-	/* Pole error: log2(0).  */
-	__set_errno (ERANGE);
+	{
+	  /* Pole error: log2(0).  */
+	  __feraiseexcept (FE_DIVBYZERO);
+	  __set_errno (ERANGE);
+	  return -INFINITY;
+	}
       else
-	/* Domain error: log2(<0).  */
-	__set_errno (EDOM);
+	{
+	  /* Domain error: log2(<0).  */
+	  __feraiseexcept (FE_INVALID);
+	  __set_errno (EDOM);
+	  return NAN;
+	}
     }
   return M_SUF (__ieee754_log2) (x);
 }