]> sourceware.org Git - glibc.git/commitdiff
Call math_opt_barrier inside if
authorH.J. Lu <hjl.tools@gmail.com>
Fri, 15 Jan 2016 13:22:59 +0000 (05:22 -0800)
committerH.J. Lu <hjl.tools@gmail.com>
Fri, 15 Jan 2016 13:23:20 +0000 (05:23 -0800)
Since floating-point operation may trigger floating-point exceptions,
we call math_opt_barrier inside if to prevent code motion.

[BZ #19465]
* sysdeps/ieee754/dbl-64/s_fma.c (__fma): Call math_opt_barrier
inside if.
* sysdeps/ieee754/ldbl-128/s_fmal.c (__fmal): Likewise.
* sysdeps/ieee754/ldbl-96/s_fma.c (__fma): Likewise.
* sysdeps/ieee754/ldbl-96/s_fmal.c (__fmal): Likewise.

ChangeLog
sysdeps/ieee754/dbl-64/s_fma.c
sysdeps/ieee754/ldbl-128/s_fmal.c
sysdeps/ieee754/ldbl-96/s_fma.c
sysdeps/ieee754/ldbl-96/s_fmal.c

index c874d89c2ae173f2754440504505523462883a61..8e13d27907944fbc621f551ac481725287024fe5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2016-01-15  H.J. Lu  <hongjiu.lu@intel.com>
+
+       [BZ #19465]
+       * sysdeps/ieee754/dbl-64/s_fma.c (__fma): Call math_opt_barrier
+       inside if.
+       * sysdeps/ieee754/ldbl-128/s_fmal.c (__fmal): Likewise.
+       * sysdeps/ieee754/ldbl-96/s_fma.c (__fma): Likewise.
+       * sysdeps/ieee754/ldbl-96/s_fmal.c (__fmal): Likewise.
+
 2016-01-14  H.J. Lu  <hongjiu.lu@intel.com>
 
        [BZ #19466]
index bc3677d0c5f6a15110162eb9d967574ba49188c6..a3492434e450db59b184fa1a5f2f6df95d1c7664 100644 (file)
@@ -175,7 +175,10 @@ __fma (double x, double y, double z)
 
   /* Ensure correct sign of exact 0 + 0.  */
   if (__glibc_unlikely ((x == 0 || y == 0) && z == 0))
-    return x * y + z;
+    {
+      x = math_opt_barrier (x);
+      return x * y + z;
+    }
 
   fenv_t env;
   libc_feholdexcept_setround (&env, FE_TONEAREST);
index ac30027af9ebdb4ecdb7280f41e3bcdcd5cd84f8..728949c916865486eb314e5791119731a924246b 100644 (file)
@@ -179,7 +179,10 @@ __fmal (long double x, long double y, long double z)
 
   /* Ensure correct sign of exact 0 + 0.  */
   if (__glibc_unlikely ((x == 0 || y == 0) && z == 0))
-    return x * y + z;
+    {
+      x = math_opt_barrier (x);
+      return x * y + z;
+    }
 
   fenv_t env;
   feholdexcept (&env);
index 5fbdda7ea9e0b45c7cb4caeecd34e2884790845d..ab45bcfce21799d40ff239b80e7fd6c5cb7a7404 100644 (file)
@@ -41,7 +41,10 @@ __fma (double x, double y, double z)
 
   /* Ensure correct sign of exact 0 + 0.  */
   if (__glibc_unlikely ((x == 0 || y == 0) && z == 0))
-    return x * y + z;
+    {
+      x = math_opt_barrier (x);
+      return x * y + z;
+    }
 
   fenv_t env;
   feholdexcept (&env);
index 57774cf6863598fde927c407e2679c54eb4562a9..f1467fda3da920a7e57e6472ad755b646dd27797 100644 (file)
@@ -177,7 +177,10 @@ __fmal (long double x, long double y, long double z)
 
   /* Ensure correct sign of exact 0 + 0.  */
   if (__glibc_unlikely ((x == 0 || y == 0) && z == 0))
-    return x * y + z;
+    {
+      x = math_opt_barrier (x);
+      return x * y + z;
+    }
 
   fenv_t env;
   feholdexcept (&env);
This page took 0.182299 seconds and 5 git commands to generate.