fpu-387.h (get_fpu_trap_exceptions): Add temporary variable to improve generated...
authorUros Bizjak <ubizjak@gmail.com>
Tue, 4 Aug 2015 09:16:52 +0000 (11:16 +0200)
committerUros Bizjak <uros@gcc.gnu.org>
Tue, 4 Aug 2015 09:16:52 +0000 (11:16 +0200)
* config/fpu-387.h (get_fpu_trap_exceptions): Add temporary variable
to improve generated code.

From-SVN: r226549

libgfortran/ChangeLog
libgfortran/config/fpu-387.h

index e74bff61dac7b37a41eba47a75900aa9a6017734..744a913c61f1f56a8053d0faad2598bc86f84732 100644 (file)
@@ -1,3 +1,8 @@
+2015-08-04  Uros Bizjak  <ubizjak@gmail.com>
+
+       * config/fpu-387.h (get_fpu_trap_exceptions): Add temporary variable
+       to improve generated code.
+
 2015-08-04  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
 
        PR fortran/64022
index 1d0711ce3b12db489bc43708eab7f5dc4a7ed5bf..b6071afa65aafd1169a1d185ae7baa730d9eaa1a 100644 (file)
@@ -215,12 +215,13 @@ set_fpu (void)
 int
 get_fpu_trap_exceptions (void)
 {
-  int res = 0;
   unsigned short cw;
+  int mask;
+  int res = 0;
 
   __asm__ __volatile__ ("fstcw\t%0" : "=m" (cw));
-  cw &= _FPU_MASK_ALL;
-
+  mask = cw;
+  
   if (has_sse())
     {
       unsigned int cw_sse;
@@ -228,15 +229,17 @@ get_fpu_trap_exceptions (void)
       __asm__ __volatile__ ("%vstmxcsr\t%0" : "=m" (cw_sse));
 
       /* The SSE exception masks are shifted by 7 bits.  */
-      cw = cw | ((cw_sse >> 7) & _FPU_MASK_ALL);
+      mask |= (cw_sse >> 7);
     }
 
-  if (~cw & _FPU_MASK_IM) res |= GFC_FPE_INVALID;
-  if (~cw & _FPU_MASK_DM) res |= GFC_FPE_DENORMAL;
-  if (~cw & _FPU_MASK_ZM) res |= GFC_FPE_ZERO;
-  if (~cw & _FPU_MASK_OM) res |= GFC_FPE_OVERFLOW;
-  if (~cw & _FPU_MASK_UM) res |= GFC_FPE_UNDERFLOW;
-  if (~cw & _FPU_MASK_PM) res |= GFC_FPE_INEXACT;
+  mask = ~mask & _FPU_MASK_ALL;
+
+  if (mask & _FPU_MASK_IM) res |= GFC_FPE_INVALID;
+  if (mask & _FPU_MASK_DM) res |= GFC_FPE_DENORMAL;
+  if (mask & _FPU_MASK_ZM) res |= GFC_FPE_ZERO;
+  if (mask & _FPU_MASK_OM) res |= GFC_FPE_OVERFLOW;
+  if (mask & _FPU_MASK_UM) res |= GFC_FPE_UNDERFLOW;
+  if (mask & _FPU_MASK_PM) res |= GFC_FPE_INEXACT;
 
   return res;
 }
@@ -252,7 +255,7 @@ get_fpu_except_flags (void)
 {
   unsigned short cw;
   int excepts;
-  int result = 0;
+  int res = 0;
 
   __asm__ __volatile__ ("fnstsw\t%0" : "=am" (cw));
   excepts = cw;
@@ -267,14 +270,14 @@ get_fpu_except_flags (void)
 
   excepts &= _FPU_EX_ALL;
 
-  if (excepts & _FPU_MASK_IM) result |= GFC_FPE_INVALID;
-  if (excepts & _FPU_MASK_DM) result |= GFC_FPE_DENORMAL;
-  if (excepts & _FPU_MASK_ZM) result |= GFC_FPE_ZERO;
-  if (excepts & _FPU_MASK_OM) result |= GFC_FPE_OVERFLOW;
-  if (excepts & _FPU_MASK_UM) result |= GFC_FPE_UNDERFLOW;
-  if (excepts & _FPU_MASK_PM) result |= GFC_FPE_INEXACT;
+  if (excepts & _FPU_MASK_IM) res |= GFC_FPE_INVALID;
+  if (excepts & _FPU_MASK_DM) res |= GFC_FPE_DENORMAL;
+  if (excepts & _FPU_MASK_ZM) res |= GFC_FPE_ZERO;
+  if (excepts & _FPU_MASK_OM) res |= GFC_FPE_OVERFLOW;
+  if (excepts & _FPU_MASK_UM) res |= GFC_FPE_UNDERFLOW;
+  if (excepts & _FPU_MASK_PM) res |= GFC_FPE_INEXACT;
 
-  return result;
+  return res;
 }
 
 void