]> git.ipfire.org Git - thirdparty/glibc.git/blobdiff - sysdeps/x86_64/fpu/e_expl.S
Fix x86/x86_64 expm1 inaccuracy near 0 in directed rounding modes (bug 16293).
[thirdparty/glibc.git] / sysdeps / x86_64 / fpu / e_expl.S
index a919780390e43ac8a55f5ea36db013857b7b56cf..1c21f03ddc0510f419bce123a759514bf45c0636 100644 (file)
@@ -127,9 +127,20 @@ ENTRY(IEEE754_EXPL)
 #endif
 3:     FLDLOG                  /* 1  log2(base)      */
        fmul    %st(1), %st     /* 1  x log2(base)    */
+#ifdef USE_AS_EXPM1L
+       /* Set round-to-nearest temporarily.  */
+       fstcw   -4(%rsp)
+       movl    $0xf3ff, %edx
+       andl    -4(%rsp), %edx
+       movl    %edx, -8(%rsp)
+       fldcw   -8(%rsp)
+#endif
        frndint                 /* 1  i               */
        fld     %st(1)          /* 2  x               */
        frndint                 /* 2  xi              */
+#ifdef USE_AS_EXPM1L
+       fldcw   -4(%rsp)
+#endif
        fld     %st(1)          /* 3  i               */
        fldt    MO(c0)          /* 4  c0              */
        fld     %st(2)          /* 5  xi              */