[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commits] r23276 - in /fsf/trunk/libc: ./ include/ math/ po/ sysdeps/generic/ sysdeps/i386/fpu/ sysdeps/wordsize-32/



Author: eglibc
Date: Thu Jun 13 00:01:48 2013
New Revision: 23276

Log:
Import glibc-mainline for 2013-06-13

Modified:
    fsf/trunk/libc/ChangeLog
    fsf/trunk/libc/include/fenv.h
    fsf/trunk/libc/math/bug-nextafter.c
    fsf/trunk/libc/math/bug-nexttoward.c
    fsf/trunk/libc/math/test-misc.c
    fsf/trunk/libc/po/ia.po
    fsf/trunk/libc/sysdeps/generic/math_private.h
    fsf/trunk/libc/sysdeps/generic/symbol-hacks.h
    fsf/trunk/libc/sysdeps/i386/fpu/fenv_private.h
    fsf/trunk/libc/sysdeps/wordsize-32/symbol-hacks.h

Modified: fsf/trunk/libc/ChangeLog
==============================================================================
--- fsf/trunk/libc/ChangeLog (original)
+++ fsf/trunk/libc/ChangeLog Thu Jun 13 00:01:48 2013
@@ -1,3 +1,77 @@
+2013-06-11  Adhemerval Zanella  <azanella@xxxxxxxxxxxxxxxxxx>
+
+	[BZ #15605]
+	* sysdeps/generic/symbol-hacks.h: Add workaround for memset/memmove calls
+	generated by the compiler on loop optimizations.
+	* sysdeps/wordsize-32/symbol-hacks.h: Include next symbol-hacks.h for
+	general definitions.
+
+2013-06-12  Joseph Myers  <joseph@xxxxxxxxxxxxxxxx>
+
+	* math/bug-nextafter.c: Include <math-tests.h>.
+	(main): Only test for exceptions if EXCEPTION_TESTS is true for
+	the relevant type.
+	* math/bug-nexttoward.c: Include <math-tests.h>.
+	(main): Only test for exceptions if EXCEPTION_TESTS is true for
+	the relevant type.
+	* math/test-misc.c: Include <math-tests.h>.
+	(main): Only test for exceptions if EXCEPTION_TESTS is true for
+	the relevant type.
+
+2013-06-12  Andreas Jaeger  <aj@xxxxxxx>
+
+	* po/ia.po: Update Interlingua translation from translation
+	project.
+
+2013-06-12  Siddhesh Poyarekar  <siddhesh@xxxxxxxxxx>
+
+	* include/fenv.h: Include stdbool.h.
+	(struct rm_ctx): New structure.
+	* sysdeps/generic/math_private.h (SET_RESTORE_ROUND_GENERIC):
+	Define macro.
+	(SET_RESTORE_ROUND): Define using SET_RESTORE_ROUND_GENERIC.
+	(SET_RESTORE_ROUNDF): Likewise.
+	(SET_RESTORE_ROUNDL): Likewise.
+	(SET_RESTORE_ROUND_NOEX): Likewise.
+	(SET_RESTORE_ROUND_NOEXF): Likewise.
+	(SET_RESTORE_ROUND_NOEXL): Likewise.
+	(SET_RESTORE_ROUND_53BIT): Likewise.
+	[HAVE_RM_CTX] (libc_feresetround_noex_ctx): Define macro.
+	(libc_feresetround_noexf_ctx): Likewise.
+	(libc_feresetround_noexl_ctx): Likewise.
+	(libc_feholdsetround_53bit_ctx): Likewise.
+	(libc_feresetround_53bit_ctx): Likewise.
+	* sysdeps/i386/fpu/fenv_private.h (HAVE_RM_CTX): Define macro.
+	(libc_feholdexcept_setround_sse_ctx): New function.
+	(libc_fesetenv_sse_ctx): Likewise.
+	(libc_feupdateenv_sse_ctx): Likewise.
+	(libc_feholdexcept_setround_387_prec_ctx): Likewise.
+	(libc_feholdexcept_setround_387_ctx): Likewise.
+	(libc_feholdexcept_setround_387_53bit_ctx): Likewise.
+	(libc_feholdsetround_387_prec_ctx): Likewise.
+	(libc_feholdsetround_387_ctx): Likewise.
+	(libc_feholdsetround_387_53bit_ctx): Likewise.
+	(libc_feholdsetround_sse_ctx): Likewise.
+	(libc_feresetround_sse_ctx): Likewise.
+	(libc_feresetround_387_ctx): Likewise.
+	(libc_feupdateenv_387_ctx): Likewise.
+	(libc_feholdexcept_setroundf_ctx): Define macro.
+	(libc_fesetenvf_ctx): Likewise.
+	(libc_feupdateenvf_ctx): Likewise.
+	(libc_feholdsetroundf_ctx): Likewise.
+	(libc_feresetroundf_ctx): Likewise.
+	(libc_feholdexcept_setround_ctx): Likewise.
+	(libc_fesetenv_ctx): Likewise.
+	(libc_feupdateenv_ctx): Likewise.
+	(libc_feholdsetround_ctx): Likewise.
+	(libc_feresetround_ctx): Likewise.
+	(libc_feholdexcept_setroundl_ctx): Likewise.
+	(libc_feupdateenvl_ctx): Likewise.
+	(libc_feholdsetroundl_ctx): Likewise.
+	(libc_feresetroundl_ctx): Likewise.
+	[!__SSE2_MATH__] (libc_feholdsetround_53bit_ctx): Likewise.
+	(libc_feresetround_53bit_ctx): Likewise.
+
 2013-06-11  Siddhesh Poyarekar  <siddhesh@xxxxxxxxxx>
 
 	* locale/iso-639.def: Convert to UTF-8.

Modified: fsf/trunk/libc/include/fenv.h
==============================================================================
--- fsf/trunk/libc/include/fenv.h (original)
+++ fsf/trunk/libc/include/fenv.h Thu Jun 13 00:01:48 2013
@@ -1,5 +1,6 @@
 #ifndef _FENV_H
 #include <math/fenv.h>
+#include <stdbool.h>
 
 #ifndef _ISOMAC
 /* Now define the internal interfaces.  */
@@ -23,4 +24,13 @@
 libm_hidden_proto (feclearexcept)
 #endif
 
+/* Rounding mode context.  This allows functions to set/restore rounding mode
+   only when the desired rounding mode is different from the current rounding
+   mode.  */
+struct rm_ctx
+{
+  fenv_t env;
+  bool updated_status;
+};
+
 #endif

Modified: fsf/trunk/libc/math/bug-nextafter.c
==============================================================================
--- fsf/trunk/libc/math/bug-nextafter.c (original)
+++ fsf/trunk/libc/math/bug-nextafter.c Thu Jun 13 00:01:48 2013
@@ -3,6 +3,7 @@
 #include <float.h>
 #include <stdlib.h>
 #include <stdio.h>
+#include <math-tests.h>
 
 #if !defined(FE_OVERFLOW) && !defined(FE_UNDERFLOW)
 /* If there's no support for the exceptions this test is checking,
@@ -26,7 +27,7 @@
       puts ("nextafterf+ failed");
       ++result;
     }
-  if (fetestexcept (FE_OVERFLOW) == 0)
+  if (EXCEPTION_TESTS (float) && fetestexcept (FE_OVERFLOW) == 0)
     {
       puts ("nextafterf+ did not overflow");
       ++result;
@@ -37,7 +38,7 @@
       puts ("nextafterf- failed");
       ++result;
     }
-  if (fetestexcept (FE_OVERFLOW) == 0)
+  if (EXCEPTION_TESTS (float) && fetestexcept (FE_OVERFLOW) == 0)
     {
       puts ("nextafterf- did not overflow");
       ++result;
@@ -52,7 +53,7 @@
       puts ("nextafterf+ failed");
       ++result;
     }
-  if (fetestexcept (FE_UNDERFLOW) == 0)
+  if (EXCEPTION_TESTS (float) && fetestexcept (FE_UNDERFLOW) == 0)
     {
       puts ("nextafterf+ did not underflow");
       ++result;
@@ -65,7 +66,7 @@
       puts ("nextafterf- failed");
       ++result;
     }
-  if (fetestexcept (FE_UNDERFLOW) == 0)
+  if (EXCEPTION_TESTS (float) && fetestexcept (FE_UNDERFLOW) == 0)
     {
       puts ("nextafterf- did not underflow");
       ++result;
@@ -78,7 +79,7 @@
       puts ("nextafterf+ failed");
       ++result;
     }
-  if (fetestexcept (FE_UNDERFLOW) == 0)
+  if (EXCEPTION_TESTS (float) && fetestexcept (FE_UNDERFLOW) == 0)
     {
       puts ("nextafterf+ did not underflow");
       ++result;
@@ -89,7 +90,7 @@
       puts ("nextafterf+ failed");
       ++result;
     }
-  if (fetestexcept (FE_UNDERFLOW) == 0)
+  if (EXCEPTION_TESTS (float) && fetestexcept (FE_UNDERFLOW) == 0)
     {
       puts ("nextafterf+ did not underflow");
       ++result;
@@ -101,7 +102,7 @@
       puts ("nextafterf- failed");
       ++result;
     }
-  if (fetestexcept (FE_UNDERFLOW) == 0)
+  if (EXCEPTION_TESTS (float) && fetestexcept (FE_UNDERFLOW) == 0)
     {
       puts ("nextafterf- did not underflow");
       ++result;
@@ -112,7 +113,7 @@
       puts ("nextafterf- failed");
       ++result;
     }
-  if (fetestexcept (FE_UNDERFLOW) == 0)
+  if (EXCEPTION_TESTS (float) && fetestexcept (FE_UNDERFLOW) == 0)
     {
       puts ("nextafterf- did not underflow");
       ++result;
@@ -126,7 +127,7 @@
       puts ("nextafter+ failed");
       ++result;
     }
-  if (fetestexcept (FE_OVERFLOW) == 0)
+  if (EXCEPTION_TESTS (double) && fetestexcept (FE_OVERFLOW) == 0)
     {
       puts ("nextafter+ did not overflow");
       ++result;
@@ -137,7 +138,7 @@
       puts ("nextafter failed");
       ++result;
     }
-  if (fetestexcept (FE_OVERFLOW) == 0)
+  if (EXCEPTION_TESTS (double) && fetestexcept (FE_OVERFLOW) == 0)
     {
       puts ("nextafter- did not overflow");
       ++result;
@@ -152,7 +153,7 @@
       puts ("nextafter+ failed");
       ++result;
     }
-  if (fetestexcept (FE_UNDERFLOW) == 0)
+  if (EXCEPTION_TESTS (double) && fetestexcept (FE_UNDERFLOW) == 0)
     {
       puts ("nextafter+ did not underflow");
       ++result;
@@ -165,7 +166,7 @@
       puts ("nextafter- failed");
       ++result;
     }
-  if (fetestexcept (FE_UNDERFLOW) == 0)
+  if (EXCEPTION_TESTS (double) && fetestexcept (FE_UNDERFLOW) == 0)
     {
       puts ("nextafter- did not underflow");
       ++result;
@@ -178,7 +179,7 @@
       puts ("nextafter+ failed");
       ++result;
     }
-  if (fetestexcept (FE_UNDERFLOW) == 0)
+  if (EXCEPTION_TESTS (double) && fetestexcept (FE_UNDERFLOW) == 0)
     {
       puts ("nextafter+ did not underflow");
       ++result;
@@ -189,7 +190,7 @@
       puts ("nextafter+ failed");
       ++result;
     }
-  if (fetestexcept (FE_UNDERFLOW) == 0)
+  if (EXCEPTION_TESTS (double) && fetestexcept (FE_UNDERFLOW) == 0)
     {
       puts ("nextafter+ did not underflow");
       ++result;
@@ -201,7 +202,7 @@
       puts ("nextafter- failed");
       ++result;
     }
-  if (fetestexcept (FE_UNDERFLOW) == 0)
+  if (EXCEPTION_TESTS (double) && fetestexcept (FE_UNDERFLOW) == 0)
     {
       puts ("nextafter- did not underflow");
       ++result;
@@ -212,7 +213,7 @@
       puts ("nextafter- failed");
       ++result;
     }
-  if (fetestexcept (FE_UNDERFLOW) == 0)
+  if (EXCEPTION_TESTS (double) && fetestexcept (FE_UNDERFLOW) == 0)
     {
       puts ("nextafter- did not underflow");
       ++result;
@@ -227,7 +228,7 @@
       puts ("nextafterl+ failed");
       ++result;
     }
-  if (fetestexcept (FE_OVERFLOW) == 0)
+  if (EXCEPTION_TESTS (long double) && fetestexcept (FE_OVERFLOW) == 0)
     {
       puts ("nextafterl+ did not overflow");
       ++result;
@@ -238,7 +239,7 @@
       puts ("nextafterl failed");
       ++result;
     }
-  if (fetestexcept (FE_OVERFLOW) == 0)
+  if (EXCEPTION_TESTS (long double) && fetestexcept (FE_OVERFLOW) == 0)
     {
       puts ("nextafterl- did not overflow");
       ++result;
@@ -253,7 +254,7 @@
       puts ("nextafterl+ failed");
       ++result;
     }
-  if (fetestexcept (FE_UNDERFLOW) == 0)
+  if (EXCEPTION_TESTS (long double) && fetestexcept (FE_UNDERFLOW) == 0)
     {
       puts ("nextafterl+ did not underflow");
       ++result;
@@ -266,7 +267,7 @@
       puts ("nextafterl- failed");
       ++result;
     }
-  if (fetestexcept (FE_UNDERFLOW) == 0)
+  if (EXCEPTION_TESTS (long double) && fetestexcept (FE_UNDERFLOW) == 0)
     {
       puts ("nextafterl- did not underflow");
       ++result;
@@ -279,7 +280,7 @@
       puts ("nextafterl+ failed");
       ++result;
     }
-  if (fetestexcept (FE_UNDERFLOW) == 0)
+  if (EXCEPTION_TESTS (long double) && fetestexcept (FE_UNDERFLOW) == 0)
     {
       puts ("nextafterl+ did not underflow");
       ++result;
@@ -290,7 +291,7 @@
       puts ("nextafterl+ failed");
       ++result;
     }
-  if (fetestexcept (FE_UNDERFLOW) == 0)
+  if (EXCEPTION_TESTS (long double) && fetestexcept (FE_UNDERFLOW) == 0)
     {
       puts ("nextafterl+ did not underflow");
       ++result;
@@ -302,7 +303,7 @@
       puts ("nextafterl- failed");
       ++result;
     }
-  if (fetestexcept (FE_UNDERFLOW) == 0)
+  if (EXCEPTION_TESTS (long double) && fetestexcept (FE_UNDERFLOW) == 0)
     {
       puts ("nextafterl- did not underflow");
       ++result;
@@ -313,7 +314,7 @@
       puts ("nextafterl- failed");
       ++result;
     }
-  if (fetestexcept (FE_UNDERFLOW) == 0)
+  if (EXCEPTION_TESTS (long double) && fetestexcept (FE_UNDERFLOW) == 0)
     {
       puts ("nextafterl- did not underflow");
       ++result;

Modified: fsf/trunk/libc/math/bug-nexttoward.c
==============================================================================
--- fsf/trunk/libc/math/bug-nexttoward.c (original)
+++ fsf/trunk/libc/math/bug-nexttoward.c Thu Jun 13 00:01:48 2013
@@ -3,6 +3,7 @@
 #include <float.h>
 #include <stdlib.h>
 #include <stdio.h>
+#include <math-tests.h>
 
 #if !defined(FE_OVERFLOW) && !defined(FE_UNDERFLOW)
 /* If there's no support for the exceptions this test is checking,
@@ -27,7 +28,7 @@
       puts ("nexttowardf+ failed");
       ++result;
     }
-  if (fetestexcept (FE_OVERFLOW) == 0)
+  if (EXCEPTION_TESTS (float) && fetestexcept (FE_OVERFLOW) == 0)
     {
       puts ("nexttowardf+ did not overflow");
       ++result;
@@ -38,7 +39,7 @@
       puts ("nexttowardf- failed");
       ++result;
     }
-  if (fetestexcept (FE_OVERFLOW) == 0)
+  if (EXCEPTION_TESTS (float) && fetestexcept (FE_OVERFLOW) == 0)
     {
       puts ("nexttowardf- did not overflow");
       ++result;
@@ -53,7 +54,7 @@
       puts ("nexttowardf+ failed");
       ++result;
     }
-  if (fetestexcept (FE_UNDERFLOW) == 0)
+  if (EXCEPTION_TESTS (float) && fetestexcept (FE_UNDERFLOW) == 0)
     {
       puts ("nexttowardf+ did not underflow");
       ++result;
@@ -66,7 +67,7 @@
       puts ("nexttowardf- failed");
       ++result;
     }
-  if (fetestexcept (FE_UNDERFLOW) == 0)
+  if (EXCEPTION_TESTS (float) && fetestexcept (FE_UNDERFLOW) == 0)
     {
       puts ("nexttowardf- did not underflow");
       ++result;
@@ -79,7 +80,7 @@
       puts ("nexttowardf+ failed");
       ++result;
     }
-  if (fetestexcept (FE_UNDERFLOW) == 0)
+  if (EXCEPTION_TESTS (float) && fetestexcept (FE_UNDERFLOW) == 0)
     {
       puts ("nexttowardf+ did not underflow");
       ++result;
@@ -90,7 +91,7 @@
       puts ("nexttowardf+ failed");
       ++result;
     }
-  if (fetestexcept (FE_UNDERFLOW) == 0)
+  if (EXCEPTION_TESTS (float) && fetestexcept (FE_UNDERFLOW) == 0)
     {
       puts ("nexttowardf+ did not underflow");
       ++result;
@@ -102,7 +103,7 @@
       puts ("nexttowardf- failed");
       ++result;
     }
-  if (fetestexcept (FE_UNDERFLOW) == 0)
+  if (EXCEPTION_TESTS (float) && fetestexcept (FE_UNDERFLOW) == 0)
     {
       puts ("nexttowardf- did not underflow");
       ++result;
@@ -113,7 +114,7 @@
       puts ("nexttowardf- failed");
       ++result;
     }
-  if (fetestexcept (FE_UNDERFLOW) == 0)
+  if (EXCEPTION_TESTS (float) && fetestexcept (FE_UNDERFLOW) == 0)
     {
       puts ("nexttowardf- did not underflow");
       ++result;
@@ -128,7 +129,7 @@
       puts ("nexttoward+ failed");
       ++result;
     }
-  if (fetestexcept (FE_OVERFLOW) == 0)
+  if (EXCEPTION_TESTS (double) && fetestexcept (FE_OVERFLOW) == 0)
     {
       puts ("nexttoward+ did not overflow");
       ++result;
@@ -139,7 +140,7 @@
       puts ("nexttoward- failed");
       ++result;
     }
-  if (fetestexcept (FE_OVERFLOW) == 0)
+  if (EXCEPTION_TESTS (double) && fetestexcept (FE_OVERFLOW) == 0)
     {
       puts ("nexttoward- did not overflow");
       ++result;
@@ -154,7 +155,7 @@
       puts ("nexttoward+ failed");
       ++result;
     }
-  if (fetestexcept (FE_UNDERFLOW) == 0)
+  if (EXCEPTION_TESTS (double) && fetestexcept (FE_UNDERFLOW) == 0)
     {
       puts ("nexttoward+ did not underflow");
       ++result;
@@ -167,7 +168,7 @@
       puts ("nexttoward- failed");
       ++result;
     }
-  if (fetestexcept (FE_UNDERFLOW) == 0)
+  if (EXCEPTION_TESTS (double) && fetestexcept (FE_UNDERFLOW) == 0)
     {
       puts ("nexttoward- did not underflow");
       ++result;
@@ -180,7 +181,7 @@
       puts ("nexttoward+ failed");
       ++result;
     }
-  if (fetestexcept (FE_UNDERFLOW) == 0)
+  if (EXCEPTION_TESTS (double) && fetestexcept (FE_UNDERFLOW) == 0)
     {
       puts ("nexttoward+ did not underflow");
       ++result;
@@ -191,7 +192,7 @@
       puts ("nexttoward+ failed");
       ++result;
     }
-  if (fetestexcept (FE_UNDERFLOW) == 0)
+  if (EXCEPTION_TESTS (double) && fetestexcept (FE_UNDERFLOW) == 0)
     {
       puts ("nexttoward+ did not underflow");
       ++result;
@@ -203,7 +204,7 @@
       puts ("nexttoward- failed");
       ++result;
     }
-  if (fetestexcept (FE_UNDERFLOW) == 0)
+  if (EXCEPTION_TESTS (double) && fetestexcept (FE_UNDERFLOW) == 0)
     {
       puts ("nexttoward- did not underflow");
       ++result;
@@ -214,7 +215,7 @@
       puts ("nexttoward- failed");
       ++result;
     }
-  if (fetestexcept (FE_UNDERFLOW) == 0)
+  if (EXCEPTION_TESTS (double) && fetestexcept (FE_UNDERFLOW) == 0)
     {
       puts ("nexttoward- did not underflow");
       ++result;
@@ -229,7 +230,7 @@
       puts ("nexttowardl+ failed");
       ++result;
     }
-  if (fetestexcept (FE_OVERFLOW) == 0)
+  if (EXCEPTION_TESTS (long double) && fetestexcept (FE_OVERFLOW) == 0)
     {
       puts ("nexttowardl+ did not overflow");
       ++result;
@@ -240,7 +241,7 @@
       puts ("nexttowardl failed");
       ++result;
     }
-  if (fetestexcept (FE_OVERFLOW) == 0)
+  if (EXCEPTION_TESTS (long double) && fetestexcept (FE_OVERFLOW) == 0)
     {
       puts ("nexttowardl- did not overflow");
       ++result;
@@ -255,7 +256,7 @@
       puts ("nexttowardl+ failed");
       ++result;
     }
-  if (fetestexcept (FE_UNDERFLOW) == 0)
+  if (EXCEPTION_TESTS (long double) && fetestexcept (FE_UNDERFLOW) == 0)
     {
       puts ("nexttowardl+ did not underflow");
       ++result;
@@ -268,7 +269,7 @@
       puts ("nexttowardl- failed");
       ++result;
     }
-  if (fetestexcept (FE_UNDERFLOW) == 0)
+  if (EXCEPTION_TESTS (long double) && fetestexcept (FE_UNDERFLOW) == 0)
     {
       puts ("nexttowardl- did not underflow");
       ++result;
@@ -281,7 +282,7 @@
       puts ("nexttowardl+ failed");
       ++result;
     }
-  if (fetestexcept (FE_UNDERFLOW) == 0)
+  if (EXCEPTION_TESTS (long double) && fetestexcept (FE_UNDERFLOW) == 0)
     {
       puts ("nexttowardl+ did not underflow");
       ++result;
@@ -292,7 +293,7 @@
       puts ("nexttowardl+ failed");
       ++result;
     }
-  if (fetestexcept (FE_UNDERFLOW) == 0)
+  if (EXCEPTION_TESTS (long double) && fetestexcept (FE_UNDERFLOW) == 0)
     {
       puts ("nexttowardl+ did not underflow");
       ++result;
@@ -304,7 +305,7 @@
       puts ("nexttowardl- failed");
       ++result;
     }
-  if (fetestexcept (FE_UNDERFLOW) == 0)
+  if (EXCEPTION_TESTS (long double) && fetestexcept (FE_UNDERFLOW) == 0)
     {
       puts ("nexttowardl- did not underflow");
       ++result;
@@ -315,7 +316,7 @@
       puts ("nexttowardl- failed");
       ++result;
     }
-  if (fetestexcept (FE_UNDERFLOW) == 0)
+  if (EXCEPTION_TESTS (long double) && fetestexcept (FE_UNDERFLOW) == 0)
     {
       puts ("nexttowardl- did not underflow");
       ++result;

Modified: fsf/trunk/libc/math/test-misc.c
==============================================================================
--- fsf/trunk/libc/math/test-misc.c (original)
+++ fsf/trunk/libc/math/test-misc.c Thu Jun 13 00:01:48 2013
@@ -22,6 +22,7 @@
 #include <math.h>
 #include <stdio.h>
 #include <string.h>
+#include <math-tests.h>
 
 
 int
@@ -1188,7 +1189,7 @@
   f2 += f1;
 #if defined(FE_OVERFLOW) && defined(FE_INEXACT)
   int fe = fetestexcept (FE_ALL_EXCEPT);
-  if (fe != (FE_OVERFLOW | FE_INEXACT))
+  if (EXCEPTION_TESTS (float) && fe != (FE_OVERFLOW | FE_INEXACT))
     {
       printf ("float overflow test failed: %x\n", fe);
       result = 1;
@@ -1203,7 +1204,7 @@
   d2 += d1;
 #if defined(FE_OVERFLOW) && defined(FE_INEXACT)
   fe = fetestexcept (FE_ALL_EXCEPT);
-  if (fe != (FE_OVERFLOW | FE_INEXACT))
+  if (EXCEPTION_TESTS (double) && fe != (FE_OVERFLOW | FE_INEXACT))
     {
       printf ("double overflow test failed: %x\n", fe);
       result = 1;
@@ -1219,7 +1220,7 @@
   ld2 += ld1;
 # if defined(FE_OVERFLOW) && defined(FE_INEXACT)
   fe = fetestexcept (FE_ALL_EXCEPT);
-  if (fe != (FE_OVERFLOW | FE_INEXACT))
+  if (EXCEPTION_TESTS (long double) && fe != (FE_OVERFLOW | FE_INEXACT))
     {
       printf ("long double overflow test failed: %x\n", fe);
       result = 1;

Modified: fsf/trunk/libc/po/ia.po
==============================================================================
--- fsf/trunk/libc/po/ia.po (original)
+++ fsf/trunk/libc/po/ia.po Thu Jun 13 00:01:48 2013
@@ -1,13 +1,13 @@
 # Interlingua translations of the libc package.
 # Copyright (C) 2012 Free Software Foundation, Inc.
 # This file is distributed under the same license as the glibc package.
-# Nik Kalach <nik.kalach@xxxxxxxx>, 2012.
+# Nik Kalach <nik.kalach@xxxxxxxx>, 2012, 2013.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: libc 2.17-pre1\n"
 "POT-Creation-Date: 2012-12-07 15:10-0500\n"
-"PO-Revision-Date: 2012-12-22 07:22+0400\n"
+"PO-Revision-Date: 2013-04-26 04:10+0400\n"
 "Last-Translator: Nik Kalach <nik.kalach@xxxxxxxx>\n"
 "Language-Team: Interlingua <translation-team-ia@xxxxxxxxxxxxxxxxxxxxx>\n"
 "Language: ia\n"
@@ -1792,7 +1792,7 @@
 #: locale/programs/ld-telephone.c:93 locale/programs/ld-time.c:158
 #, c-format
 msgid "No definition for %s category found"
-msgstr ""
+msgstr "Necun definition trovate pro le categoria %s"
 
 #: locale/programs/ld-address.c:145 locale/programs/ld-address.c:183
 #: locale/programs/ld-address.c:201 locale/programs/ld-address.c:230
@@ -1808,45 +1808,45 @@
 #: locale/programs/ld-time.c:195
 #, c-format
 msgid "%s: field `%s' not defined"
-msgstr ""
+msgstr "%s: le campo `%s' non es definite"
 
 #: locale/programs/ld-address.c:157 locale/programs/ld-address.c:209
 #: locale/programs/ld-address.c:239 locale/programs/ld-address.c:277
 #: locale/programs/ld-name.c:116 locale/programs/ld-telephone.c:116
 #, c-format
 msgid "%s: field `%s' must not be empty"
-msgstr ""
+msgstr "%s: le campo `%s' non debe esser vacue"
 
 #: locale/programs/ld-address.c:169
 #, c-format
 msgid "%s: invalid escape `%%%c' sequence in field `%s'"
-msgstr ""
+msgstr "%s: sequentia de escappata `%%%c' invalide in le campo `%s'"
 
 #: locale/programs/ld-address.c:220
 #, c-format
 msgid "%s: terminology language code `%s' not defined"
-msgstr ""
+msgstr "%s: le codice de lingua `%s' pro le usage terminologic non es definite"
 
 #: locale/programs/ld-address.c:245
 #, c-format
 msgid "%s: field `%s' must not be defined"
-msgstr ""
+msgstr "%s: le campo `%s' non debe esser definite"
 
 #: locale/programs/ld-address.c:259 locale/programs/ld-address.c:288
 #, c-format
 msgid "%s: language abbreviation `%s' not defined"
-msgstr ""
+msgstr "%s: le abbreviation de lingua `%s' non es definite"
 
 #: locale/programs/ld-address.c:266 locale/programs/ld-address.c:294
 #: locale/programs/ld-address.c:328 locale/programs/ld-address.c:340
 #, c-format
 msgid "%s: `%s' value does not match `%s' value"
-msgstr ""
+msgstr "%s: le valor de `%s' non corresponde al valor de `%s'"
 
 #: locale/programs/ld-address.c:313
 #, c-format
 msgid "%s: numeric country code `%d' not valid"
-msgstr ""
+msgstr "%s: le codice numeric de pais `%d' non es valide"
 
 #: locale/programs/ld-address.c:509 locale/programs/ld-address.c:546
 #: locale/programs/ld-address.c:584 locale/programs/ld-ctype.c:2630
@@ -1859,7 +1859,7 @@
 #: locale/programs/ld-time.c:1167
 #, c-format
 msgid "%s: field `%s' declared more than once"
-msgstr ""
+msgstr "%s: le campo `%s' es declarate plus de un vice"
 
 #: locale/programs/ld-address.c:513 locale/programs/ld-address.c:551
 #: locale/programs/ld-identification.c:367 locale/programs/ld-messages.c:310
@@ -1869,7 +1869,7 @@
 #: locale/programs/ld-time.c:1088 locale/programs/ld-time.c:1130
 #, c-format
 msgid "%s: unknown character in field `%s'"
-msgstr ""
+msgstr "%s: character incognite in le campo `%s'"
 
 #: locale/programs/ld-address.c:598 locale/programs/ld-collate.c:3922
 #: locale/programs/ld-ctype.c:3003 locale/programs/ld-identification.c:448
@@ -1879,7 +1879,7 @@
 #: locale/programs/ld-telephone.c:310 locale/programs/ld-time.c:1218
 #, c-format
 msgid "%s: incomplete `END' line"
-msgstr ""
+msgstr "%s: linea `END' incomplete"
 
 #: locale/programs/ld-address.c:608 locale/programs/ld-collate.c:543
 #: locale/programs/ld-collate.c:595 locale/programs/ld-collate.c:891
@@ -1894,432 +1894,432 @@
 #: locale/programs/ld-telephone.c:319 locale/programs/ld-time.c:1227
 #, c-format
 msgid "%s: syntax error"
-msgstr ""
+msgstr "%s: error de syntaxe"
 
 #: locale/programs/ld-collate.c:418
 #, c-format
 msgid "`%.*s' already defined in charmap"
-msgstr ""
+msgstr "`%.*s' jam definite in le tabula de characteres"
 
 #: locale/programs/ld-collate.c:427
 #, c-format
 msgid "`%.*s' already defined in repertoire"
-msgstr ""
+msgstr "`%.*s' jam definite in repertoire"
 
 #: locale/programs/ld-collate.c:434
 #, c-format
 msgid "`%.*s' already defined as collating symbol"
-msgstr ""
+msgstr "`%.*s' jam definite como symbolo de collation"
 
 #: locale/programs/ld-collate.c:441
 #, c-format
 msgid "`%.*s' already defined as collating element"
-msgstr ""
+msgstr "`%.*s' jam definite como elemento de collation"
 
 #: locale/programs/ld-collate.c:472 locale/programs/ld-collate.c:498
 #, c-format
 msgid "%s: `forward' and `backward' are mutually excluding each other"
-msgstr ""
+msgstr "%s: `forward' e `backward' son mutualmente exclusive"
 
 #: locale/programs/ld-collate.c:482 locale/programs/ld-collate.c:508
 #: locale/programs/ld-collate.c:524
 #, c-format
 msgid "%s: `%s' mentioned more than once in definition of weight %d"
-msgstr ""
+msgstr "%s: `%s' mentionate plus de un vice in le definition del peso %d"
 
 #: locale/programs/ld-collate.c:580
 #, c-format
 msgid "%s: too many rules; first entry only had %d"
-msgstr ""
+msgstr "%s: tro de regulas; le prime entrata habeva solmente %d"
 
 #: locale/programs/ld-collate.c:616
 #, c-format
 msgid "%s: not enough sorting rules"
-msgstr ""
+msgstr "%s: il non ha sufficiente regulas a assortir"
 
 #: locale/programs/ld-collate.c:781
 #, c-format
 msgid "%s: empty weight string not allowed"
-msgstr ""
+msgstr "%s: catena de peso vacue non es permittite"
 
 #: locale/programs/ld-collate.c:876
 #, c-format
 msgid "%s: weights must use the same ellipsis symbol as the name"
-msgstr ""
+msgstr "%s: le pesos debe usar le mesmo symbolo de ellipse que le nomine"
 
 #: locale/programs/ld-collate.c:932
 #, c-format
 msgid "%s: too many values"
-msgstr ""
+msgstr "%s: tro de valores"
 
 #: locale/programs/ld-collate.c:1052 locale/programs/ld-collate.c:1227
 #, c-format
 msgid "order for `%.*s' already defined at %s:%Zu"
-msgstr ""
+msgstr "le ordine pro `%.*s' jam es definite in %s:%Zu"
 
 #: locale/programs/ld-collate.c:1102
 #, c-format
 msgid "%s: the start and the end symbol of a range must stand for characters"
-msgstr ""
+msgstr "%s: le symbolos de initio e de fin de un intervallo debe representar characteres"
 
 #: locale/programs/ld-collate.c:1129
 #, c-format
 msgid "%s: byte sequences of first and last character must have the same length"
-msgstr ""
+msgstr "%s: le sequentias de bytes del prime e del ultime characteres debe haber le mesme longitude"
 
 #: locale/programs/ld-collate.c:1171
 #, c-format
 msgid "%s: byte sequence of first character of range is not lower than that of the last character"
-msgstr ""
+msgstr "%s: le sequentia de bytes del prime character del intervallo non es plus parve que illo del ultime character"
 
 #: locale/programs/ld-collate.c:1296
 #, c-format
 msgid "%s: symbolic range ellipsis must not directly follow `order_start'"
-msgstr ""
+msgstr "%s: le ellipse de intervallo symbolic non debe sequer directemente `order_start'"
 
 #: locale/programs/ld-collate.c:1300
 #, c-format
 msgid "%s: symbolic range ellipsis must not be directly followed by `order_end'"
-msgstr ""
+msgstr "%s: le ellipse de intervallo symbolic non debe esser sequite directemente per `order_end'"
 
 #: locale/programs/ld-collate.c:1320 locale/programs/ld-ctype.c:1501
 #, c-format
 msgid "`%s' and `%.*s' are not valid names for symbolic range"
-msgstr ""
+msgstr "`%s' e `%.*s' non es nomines valide pro un intervallo symbolic"
 
 #: locale/programs/ld-collate.c:1370 locale/programs/ld-collate.c:3858
 #, c-format
 msgid "%s: order for `%.*s' already defined at %s:%Zu"
-msgstr ""
+msgstr "%s: le ordine pro `%.*s' jam es definite in %s:%Zu"
 
 #: locale/programs/ld-collate.c:1379
 #, c-format
 msgid "%s: `%s' must be a character"
-msgstr ""
+msgstr "%s: `%s' debe esser un character"
 
 #: locale/programs/ld-collate.c:1574
 #, c-format
 msgid "%s: `position' must be used for a specific level in all sections or none"
-msgstr ""
+msgstr "%s: `position' debe utilisar se pro un nivello specific in tote le sectiones o in necun"
 
 #: locale/programs/ld-collate.c:1599
 #, c-format
 msgid "symbol `%s' not defined"
-msgstr ""
+msgstr "le symbolo `%s' non es definite"
 
 #: locale/programs/ld-collate.c:1675 locale/programs/ld-collate.c:1781
 #, c-format
 msgid "symbol `%s' has the same encoding as"
-msgstr ""
+msgstr "le symbolo `%s' ha le mesme codification que"
 
 #: locale/programs/ld-collate.c:1679 locale/programs/ld-collate.c:1785
 #, c-format
 msgid "symbol `%s'"
-msgstr ""
+msgstr "le symbolo `%s'"
 
 #: locale/programs/ld-collate.c:1827
 #, c-format
 msgid "no definition of `UNDEFINED'"
-msgstr ""
+msgstr "nulle definition de `UNDEFINED'"
 
 #: locale/programs/ld-collate.c:1856
 #, c-format
 msgid "too many errors; giving up"
-msgstr ""
+msgstr "tro de errores; abandono"
 
 #: locale/programs/ld-collate.c:2658 locale/programs/ld-collate.c:4046
 #, c-format
 msgid "%s: nested conditionals not supported"
-msgstr ""
+msgstr "%s: le conditionales annidate non es supportate"
 
 #: locale/programs/ld-collate.c:2676
 #, c-format
 msgid "%s: more then one 'else'"
-msgstr ""
+msgstr "%s: plus de un 'else'"
 
 #: locale/programs/ld-collate.c:2851
 #, c-format
 msgid "%s: duplicate definition of `%s'"
-msgstr ""
+msgstr "%s: definition duplicate de `%s'"
 
 #: locale/programs/ld-collate.c:2887
 #, c-format
 msgid "%s: duplicate declaration of section `%s'"
-msgstr ""
+msgstr "%s: declaration duplicate del section `%s'"
 
 #: locale/programs/ld-collate.c:3023
 #, c-format
 msgid "%s: unknown character in collating symbol name"
-msgstr ""
+msgstr "%s: character incognite in le nomine de un symbolo de collation"
 
 #: locale/programs/ld-collate.c:3152
 #, c-format
 msgid "%s: unknown character in equivalent definition name"
-msgstr ""
+msgstr "%s: character incognite in le nomine de un definition de equivalente"
 
 #: locale/programs/ld-collate.c:3163
 #, c-format
 msgid "%s: unknown character in equivalent definition value"
-msgstr ""
+msgstr "%s: character incognite in le valor de un definition de equivalente"
 
 #: locale/programs/ld-collate.c:3173
 #, c-format
 msgid "%s: unknown symbol `%s' in equivalent definition"
-msgstr ""
+msgstr "%s: symbolo incognite `%s' in un definition de equivalente"
 
 #: locale/programs/ld-collate.c:3182
 msgid "error while adding equivalent collating symbol"
-msgstr ""
+msgstr "error durante le addition de un symbolo de collation equivalente"
 
 #: locale/programs/ld-collate.c:3220
 #, c-format
 msgid "duplicate definition of script `%s'"
-msgstr ""
+msgstr "definition duplicate del scriptura `%s'"
 
 #: locale/programs/ld-collate.c:3268
 #, c-format
 msgid "%s: unknown section name `%.*s'"
-msgstr ""
+msgstr "%s: nomine de section incognite `%.*s'"
 
 #: locale/programs/ld-collate.c:3297
 #, c-format
 msgid "%s: multiple order definitions for section `%s'"
-msgstr ""
+msgstr "%s: multiple definitiones de ordine pro le section `%s'"
 
 #: locale/programs/ld-collate.c:3325
 #, c-format
 msgid "%s: invalid number of sorting rules"
-msgstr ""
+msgstr "%s: le numero de regulas a assortir es incorrecte"
 
 #: locale/programs/ld-collate.c:3352
 #, c-format
 msgid "%s: multiple order definitions for unnamed section"
-msgstr ""
+msgstr "%s: multiple definitiones de ordine pro un section innominate"
 
 #: locale/programs/ld-collate.c:3407 locale/programs/ld-collate.c:3537
 #: locale/programs/ld-collate.c:3900
 #, c-format
 msgid "%s: missing `order_end' keyword"
-msgstr ""
+msgstr "%s: parola clave `order_end' mancante"
 
 #: locale/programs/ld-collate.c:3470
 #, c-format
 msgid "%s: order for collating symbol %.*s not yet defined"
-msgstr ""
+msgstr "%s: ordine non ancora definite pro le symbolo de collation %.*s"
 
 #: locale/programs/ld-collate.c:3488
 #, c-format
 msgid "%s: order for collating element %.*s not yet defined"
-msgstr ""
+msgstr "%s: ordine non ancora definite pro le elemento de collation %.*s"
 
 #: locale/programs/ld-collate.c:3499
 #, c-format
 msgid "%s: cannot reorder after %.*s: symbol not known"
-msgstr ""
+msgstr "%s: impossibile de reordinar post %.*s: symbolo incognite"
 
 #: locale/programs/ld-collate.c:3551 locale/programs/ld-collate.c:3912
 #, c-format
 msgid "%s: missing `reorder-end' keyword"
-msgstr ""
+msgstr "%s: parola clave `reorder-end' mancante"
 
 #: locale/programs/ld-collate.c:3585 locale/programs/ld-collate.c:3783
 #, c-format
 msgid "%s: section `%.*s' not known"
-msgstr ""
+msgstr "%s: section `%.*s' incognite"
 
 #: locale/programs/ld-collate.c:3650
 #, c-format
 msgid "%s: bad symbol <%.*s>"
-msgstr ""
+msgstr "%s: symbolo invalide <%.*s>"
 
 #: locale/programs/ld-collate.c:3846
 #, c-format
 msgid "%s: cannot have `%s' as end of ellipsis range"
-msgstr ""
+msgstr "%s: impossibile de haber `%s' como fin de un intervallo de ellipse"
 
 #: locale/programs/ld-collate.c:3896
 #, c-format
 msgid "%s: empty category description not allowed"
-msgstr ""
+msgstr "%s: le description de categoria vacue non es permittite"
 
 #: locale/programs/ld-collate.c:3915
 #, c-format
 msgid "%s: missing `reorder-sections-end' keyword"
-msgstr ""
+msgstr "%s: parola clave `reorder-sections-end' mancante"
 
 #: locale/programs/ld-collate.c:4079
 #, c-format
 msgid "%s: '%s' without matching 'ifdef' or 'ifndef'"
-msgstr ""
+msgstr "%s: '%s' sin correspondente 'ifdef' o 'ifndef'"
 
 #: locale/programs/ld-collate.c:4097
 #, c-format
 msgid "%s: 'endif' without matching 'ifdef' or 'ifndef'"
-msgstr ""
+msgstr "%s: 'endif' sin correspondente 'ifdef' o 'ifndef'"
 
 #: locale/programs/ld-ctype.c:439
 #, c-format
 msgid "No character set name specified in charmap"
-msgstr ""
+msgstr "Necun nomine de collection de characteres es specificate in le tabula de characteres"
 
 #: locale/programs/ld-ctype.c:468
 #, c-format
 msgid "character L'\\u%0*x' in class `%s' must be in class `%s'"
-msgstr ""
+msgstr "le character L'\\u%0*x' del classe `%s' debe esser in le classe `%s'"
 
 #: locale/programs/ld-ctype.c:483
 #, c-format
 msgid "character L'\\u%0*x' in class `%s' must not be in class `%s'"
-msgstr ""
+msgstr "le character L'\\u%0*x' del classe `%s' non debe esser in le classe `%s'"
 
 #: locale/programs/ld-ctype.c:497 locale/programs/ld-ctype.c:555
 #, c-format
 msgid "internal error in %s, line %u"
-msgstr ""
+msgstr "error interne in %s, linea %u"
 
 #: locale/programs/ld-ctype.c:526
 #, c-format
 msgid "character '%s' in class `%s' must be in class `%s'"
-msgstr ""
+msgstr "le character '%s' del classe `%s' debe esser in le classe `%s'"
 
 #: locale/programs/ld-ctype.c:542
 #, c-format
 msgid "character '%s' in class `%s' must not be in class `%s'"
-msgstr ""
+msgstr "le character '%s' del classe `%s' non debe esser in le classe `%s'"
 
 #: locale/programs/ld-ctype.c:572 locale/programs/ld-ctype.c:610
 #, c-format
 msgid "<SP> character not in class `%s'"
-msgstr ""
+msgstr "le character <SP> non es in le classe `%s'"
 
 #: locale/programs/ld-ctype.c:584 locale/programs/ld-ctype.c:621
 #, c-format
 msgid "<SP> character must not be in class `%s'"
-msgstr ""
+msgstr "le character <SP> non debe esser in le classe `%s'"
 
 #: locale/programs/ld-ctype.c:599
 #, c-format
 msgid "character <SP> not defined in character map"
-msgstr ""
+msgstr "le character <SP> non es definite in le tabula de characteres"
 
 #: locale/programs/ld-ctype.c:735
 #, c-format
 msgid "`digit' category has not entries in groups of ten"
-msgstr ""
+msgstr "le categoria `digit' non ha entratas in gruppos de dece"
 
 #: locale/programs/ld-ctype.c:784
 #, c-format
 msgid "no input digits defined and none of the standard names in the charmap"
-msgstr ""
+msgstr "necun cifras de entrata definite e necun del nomines standard in le tabula de characteres"
 
 #: locale/programs/ld-ctype.c:849
 #, c-format
 msgid "not all characters used in `outdigit' are available in the charmap"
-msgstr ""
+msgstr "non tote le characteres usate in `outdigit' es disponibile in le tabula de characteres"
 
 #: locale/programs/ld-ctype.c:866
 #, c-format
 msgid "not all characters used in `outdigit' are available in the repertoire"
-msgstr ""
+msgstr "non tote le characteres usate in `outdigit' es disponibile in le repertoire"
 
 #: locale/programs/ld-ctype.c:1269
 #, c-format
 msgid "character class `%s' already defined"
-msgstr ""
+msgstr "le classe de characteres `%s' jam ha essite definite"
 
 #: locale/programs/ld-ctype.c:1275
 #, c-format
 msgid "implementation limit: no more than %Zd character classes allowed"
-msgstr ""
+msgstr "limite de implementation: il se non permitte plus de %Zd classes de characteres"
 
 #: locale/programs/ld-ctype.c:1301
 #, c-format
 msgid "character map `%s' already defined"
-msgstr ""
+msgstr "le mappa de characteres `%s' jam ha essite definite"
 
 #: locale/programs/ld-ctype.c:1307
 #, c-format
 msgid "implementation limit: no more than %d character maps allowed"
-msgstr ""
+msgstr "limite de implementation: il se non permitte plus de %d mappas de characteres"
 
 #: locale/programs/ld-ctype.c:1572 locale/programs/ld-ctype.c:1697
 #: locale/programs/ld-ctype.c:1803 locale/programs/ld-ctype.c:2493
 #: locale/programs/ld-ctype.c:3489
 #, c-format
 msgid "%s: field `%s' does not contain exactly ten entries"
-msgstr ""
+msgstr "%s: le campo `%s' non contine exactemente dece entratas"
 
 #: locale/programs/ld-ctype.c:1600 locale/programs/ld-ctype.c:2174
 #, c-format
 msgid "to-value <U%0*X> of range is smaller than from-value <U%0*X>"
-msgstr ""
+msgstr "le valor final <U%0*X> del intervallo es plus parve que le valor initial <U%0*X>"
 
 #: locale/programs/ld-ctype.c:1727
 msgid "start and end character sequence of range must have the same length"
-msgstr ""
+msgstr "le sequantias de characteres initial e final del intervallo debe haber le mesme longitude"
 
 #: locale/programs/ld-ctype.c:1734
 msgid "to-value character sequence is smaller than from-value sequence"
-msgstr ""
+msgstr "le sequentia de characteres del valor final es plus parve que le sequentia del valor initial"
 
 #: locale/programs/ld-ctype.c:2094 locale/programs/ld-ctype.c:2145
 msgid "premature end of `translit_ignore' definition"
-msgstr ""
+msgstr "le fin prematur del definition de `translit_ignore'"
 
 #: locale/programs/ld-ctype.c:2100 locale/programs/ld-ctype.c:2151
 #: locale/programs/ld-ctype.c:2193
 msgid "syntax error"
-msgstr ""
+msgstr "error de syntaxe"
 
 #: locale/programs/ld-ctype.c:2326
 #, c-format
 msgid "%s: syntax error in definition of new character class"
-msgstr ""
+msgstr "%s: error de syntaxe in le definition de un nove classe de characteres"
 
 #: locale/programs/ld-ctype.c:2341
 #, c-format
 msgid "%s: syntax error in definition of new character map"
-msgstr ""
+msgstr "%s: error de syntaxe in le definition de un nove mappa de characteres"
 
 #: locale/programs/ld-ctype.c:2515
 msgid "ellipsis range must be marked by two operands of same type"
-msgstr ""
+msgstr "le intervallo de ellipse debe ser marcate per duo operandos del mesme typo"
 
 #: locale/programs/ld-ctype.c:2524
 msgid "with symbolic name range values the absolute ellipsis `...' must not be used"
-msgstr ""
+msgstr "con intervallo definite per nomines symbolic le ellipse absolute `...' non debe ser utilisate"
 
 #: locale/programs/ld-ctype.c:2539
 msgid "with UCS range values one must use the hexadecimal symbolic ellipsis `..'"
-msgstr ""
+msgstr "con intervallo definite per UCS on debe usar le ellipse symbolic hexadecimal `..'"
 
 #: locale/programs/ld-ctype.c:2553
 msgid "with character code range values one must use the absolute ellipsis `...'"
-msgstr ""
+msgstr "con intervallo definite per codices de characteres on debe usar le ellipse absolute `...'"
 
 #: locale/programs/ld-ctype.c:2704
 #, c-format
 msgid "duplicated definition for mapping `%s'"
-msgstr ""
+msgstr "definition duplicate del tabula `%s'"
 
 #: locale/programs/ld-ctype.c:2790 locale/programs/ld-ctype.c:2934
 #, c-format
 msgid "%s: `translit_start' section does not end with `translit_end'"
-msgstr ""
+msgstr "%s: le section `translit_start' non fini con `translit_end'"
 
 #: locale/programs/ld-ctype.c:2885
 #, c-format
 msgid "%s: duplicate `default_missing' definition"
-msgstr ""
+msgstr "%s: definition duplicate de `default_missing'"
 
 #: locale/programs/ld-ctype.c:2890
 msgid "previous definition was here"
-msgstr ""
+msgstr "le definition previe era hic"
 
 #: locale/programs/ld-ctype.c:2912
 #, c-format
 msgid "%s: no representable `default_missing' definition found"
-msgstr ""
+msgstr "%s: necun definition `default_missing' representabile trovate"
 
 #: locale/programs/ld-ctype.c:3065 locale/programs/ld-ctype.c:3149
 #: locale/programs/ld-ctype.c:3169 locale/programs/ld-ctype.c:3190
@@ -2329,7 +2329,7 @@
 #: locale/programs/ld-ctype.c:3423 locale/programs/ld-ctype.c:3448
 #, c-format
 msgid "%s: character `%s' not defined while needed as default value"
-msgstr ""
+msgstr "%s: le character `%s' non es definite quando illo es necesse como valor predefinite"
 
 #: locale/programs/ld-ctype.c:3070 locale/programs/ld-ctype.c:3154
 #: locale/programs/ld-ctype.c:3174 locale/programs/ld-ctype.c:3195
@@ -2338,366 +2338,368 @@
 #: locale/programs/ld-ctype.c:3319 locale/programs/ld-ctype.c:3386
 #, c-format
 msgid "%s: character `%s' in charmap not representable with one byte"
-msgstr ""
+msgstr "%s: le character `%s' in tabula de characteres non es representabile con un byte"
 
 #: locale/programs/ld-ctype.c:3430 locale/programs/ld-ctype.c:3455
 #, c-format
 msgid "%s: character `%s' needed as default value not representable with one byte"
-msgstr ""
+msgstr "%s: le character `%s' requirite como valor predefinite non es representabile con un byte"
 
 #: locale/programs/ld-ctype.c:3511
 #, c-format
 msgid "no output digits defined and none of the standard names in the charmap"
-msgstr ""
+msgstr "necun cifras de output es definite e nihil del nomines standard es in le tabula de characteres"
 
 #: locale/programs/ld-ctype.c:3802
 #, c-format
 msgid "%s: transliteration data from locale `%s' not available"
-msgstr ""
+msgstr "%s: le datos de transliteration del localitate `%s' non es disponibile"
 
 #: locale/programs/ld-ctype.c:3903
 #, c-format
 msgid "%s: table for class \"%s\": %lu bytes\n"
-msgstr ""
+msgstr "%s: tabula pro le classe \"%s\": %lu bytes\n"
 
 #: locale/programs/ld-ctype.c:3972
 #, c-format
 msgid "%s: table for map \"%s\": %lu bytes\n"
-msgstr ""
+msgstr "%s: tabula de characteres \"%s\": %lu bytes\n"
 
 #: locale/programs/ld-ctype.c:4105
 #, c-format
 msgid "%s: table for width: %lu bytes\n"
-msgstr ""
+msgstr "%s: tabula pro le largor: %lu bytes\n"
 
 #: locale/programs/ld-identification.c:169
 #, c-format
 msgid "%s: no identification for category `%s'"
-msgstr ""
+msgstr "%s: nulle identification pro le categoria `%s'"
 
 #: locale/programs/ld-identification.c:434
 #, c-format
 msgid "%s: duplicate category version definition"
-msgstr ""
+msgstr "%s: definition duplicate de version de categoria"
 
 #: locale/programs/ld-measurement.c:112
 #, c-format
 msgid "%s: invalid value for field `%s'"
-msgstr ""
+msgstr "%s: valor invalide pro le campo `%s'"
 
 #: locale/programs/ld-messages.c:113 locale/programs/ld-messages.c:147
 #, c-format
 msgid "%s: field `%s' undefined"
-msgstr ""
+msgstr "%s: le campo `%s' non es definite"
 
 #: locale/programs/ld-messages.c:120 locale/programs/ld-messages.c:154
 #: locale/programs/ld-monetary.c:255 locale/programs/ld-numeric.c:117
 #, c-format
 msgid "%s: value for field `%s' must not be an empty string"
-msgstr ""
+msgstr "%s: le valor pro le campo `%s' non debe esser un catena vacue"
 
 #: locale/programs/ld-messages.c:136 locale/programs/ld-messages.c:170
 #, c-format
 msgid "%s: no correct regular expression for field `%s': %s"
-msgstr ""
+msgstr "%s: necun expression regular correcte pro le campo `%s': %s"
 
 #: locale/programs/ld-monetary.c:223
 #, c-format
 msgid "%s: value of field `int_curr_symbol' has wrong length"
-msgstr ""
+msgstr "%s: le valor del campo `int_curr_symbol' ha un longitude incorrecte"
 
 #: locale/programs/ld-monetary.c:236
 #, c-format
 msgid "%s: value of field `int_curr_symbol' does not correspond to a valid name in ISO 4217"
-msgstr ""
+msgstr "%s: le valor del campo `int_curr_symbol' non corresponde a un nomine valide in ISO 4217"
 
 #: locale/programs/ld-monetary.c:284 locale/programs/ld-monetary.c:314
 #, c-format
 msgid "%s: value for field `%s' must be in range %d...%d"
-msgstr ""
+msgstr "%s: le valor pro le campo `%s' debe esser del intervallo %d...%d"
 
 #: locale/programs/ld-monetary.c:746 locale/programs/ld-numeric.c:273
 #, c-format
 msgid "%s: value for field `%s' must be a single character"
-msgstr ""
+msgstr "%s: le valor pro le campo `%s' debe esser un singule character"
 
 #: locale/programs/ld-monetary.c:843 locale/programs/ld-numeric.c:317
 #, c-format
 msgid "%s: `-1' must be last entry in `%s' field"
-msgstr ""
+msgstr "%s: `-1' debe esser le ultime entrata in le campo `%s'"
 
 #: locale/programs/ld-monetary.c:865 locale/programs/ld-numeric.c:334
 #, c-format
 msgid "%s: values for field `%s' must be smaller than 127"
-msgstr ""
+msgstr "%s: le valores pro le campo `%s' debe esser plus parve que 127"
 
 #: locale/programs/ld-monetary.c:908
 msgid "conversion rate value cannot be zero"
-msgstr ""
+msgstr "le valor del rata de conversion non pote esser zero"
 
 #: locale/programs/ld-name.c:128 locale/programs/ld-telephone.c:125
 #: locale/programs/ld-telephone.c:148
 #, c-format
 msgid "%s: invalid escape sequence in field `%s'"
-msgstr ""
+msgstr "%s: sequentia de escappata invalide in le campo `%s'"
 
 #: locale/programs/ld-time.c:246
 #, c-format
 msgid "%s: direction flag in string %Zd in `era' field is not '+' nor '-'"
-msgstr ""
+msgstr "%s: le indicator de direction in le catena %Zd in le campo `era' non es '+' ni '-'"
 
 #: locale/programs/ld-time.c:257
 #, c-format
 msgid "%s: direction flag in string %Zd in `era' field is not a single character"
-msgstr ""
+msgstr "%s: le indication de direction in le catena %Zd in le campo `era' non es un singule character"
 
 #: locale/programs/ld-time.c:270
 #, c-format
 msgid "%s: invalid number for offset in string %Zd in `era' field"
-msgstr ""
+msgstr "%s: numero invalide pro displaciamento in le catena %Zd in le campo `era'"
 
 #: locale/programs/ld-time.c:278
 #, c-format
 msgid "%s: garbage at end of offset value in string %Zd in `era' field"
-msgstr ""
+msgstr "%s: datos superflue al fin del valor de displaciamento in le catena %Zd in le campo `era'"
 
 #: locale/programs/ld-time.c:329
 #, c-format
 msgid "%s: invalid starting date in string %Zd in `era' field"
-msgstr ""
+msgstr "%s: data initial invalide in le catena %Zd in le campo `era'"
 
 #: locale/programs/ld-time.c:338
 #, c-format
 msgid "%s: garbage at end of starting date in string %Zd in `era' field "
-msgstr ""
+msgstr "%s: datos superflue al fin del data initial in le catena %Zd in le campo `era' "
 
 #: locale/programs/ld-time.c:357
 #, c-format
 msgid "%s: starting date is invalid in string %Zd in `era' field"
-msgstr ""
+msgstr "%s: le data de comenciamento es invalide in le catena %Zd in le campo `era'"
 
 #: locale/programs/ld-time.c:406 locale/programs/ld-time.c:434
 #, c-format
 msgid "%s: invalid stopping date in string %Zd in `era' field"
-msgstr ""
+msgstr "%s: data final invalide in le catena %Zd in le campo `era'"
 
 #: locale/programs/ld-time.c:415
 #, c-format
 msgid "%s: garbage at end of stopping date in string %Zd in `era' field"
-msgstr ""
+msgstr "%s: datos superflue al fin del data final in le catena %Zd in le campo `era'"
 
 #: locale/programs/ld-time.c:443
 #, c-format
 msgid "%s: missing era name in string %Zd in `era' field"
-msgstr ""
+msgstr "%s: nomine de era mancante in le catena %Zd in le campo `era'"
 
 #: locale/programs/ld-time.c:455
 #, c-format
 msgid "%s: missing era format in string %Zd in `era' field"
-msgstr ""
+msgstr "%s: formato de era mancante in le catena %Zd in le campo `era'"
 
 #: locale/programs/ld-time.c:496
 #, c-format
 msgid "%s: third operand for value of field `%s' must not be larger than %d"
-msgstr ""
+msgstr "%s: le tertie operando pro le valor del campo `%s' non debe esser plus grande que %d"
 
 #: locale/programs/ld-time.c:504 locale/programs/ld-time.c:512
 #: locale/programs/ld-time.c:520
 #, c-format
 msgid "%s: values for field `%s' must not be larger than %d"
-msgstr ""
+msgstr "%s: valores pro le campo `%s' non debe plus grande que %d"
 
 #: locale/programs/ld-time.c:1003
 #, c-format
 msgid "%s: too few values for field `%s'"
-msgstr ""
+msgstr "%s: insufficiente numero de valores pro le campo `%s'"
 
 #: locale/programs/ld-time.c:1048
 msgid "extra trailing semicolon"
-msgstr ""
+msgstr "puncto e virgula superflue al fin"
 
 #: locale/programs/ld-time.c:1051
 #, c-format
 msgid "%s: too many values for field `%s'"
-msgstr ""
+msgstr "%s: tro de valores pro le campo `%s'"
 
 #: locale/programs/linereader.c:129
 msgid "trailing garbage at end of line"
-msgstr ""
+msgstr "datos superflue al fin de catena"
 
 #: locale/programs/linereader.c:297
 msgid "garbage at end of number"
-msgstr ""
+msgstr "datos superflue al fin del numero"
 
 #: locale/programs/linereader.c:409
 msgid "garbage at end of character code specification"
-msgstr ""
+msgstr "datos superflue al fin del specification del codice de character"
 
 #: locale/programs/linereader.c:495
 msgid "unterminated symbolic name"
-msgstr ""
+msgstr "nomine symbolic sin termination"
 
 #: locale/programs/linereader.c:622
 msgid "illegal escape sequence at end of string"
-msgstr ""
+msgstr "sequentia de escappamento non permittite al fin de catena"
 
 #: locale/programs/linereader.c:626 locale/programs/linereader.c:854
 msgid "unterminated string"
-msgstr ""
+msgstr "catena sin termination"
 
 #: locale/programs/linereader.c:668
 msgid "non-symbolic character value should not be used"
-msgstr ""
+msgstr "un valor de character non-symbolic non deberea usar se"
 
 #: locale/programs/linereader.c:815
 #, c-format
 msgid "symbol `%.*s' not in charmap"
-msgstr ""
+msgstr "le symbolo `%.*s' non es in tabula de characteres"
 
 #: locale/programs/linereader.c:836
 #, c-format
 msgid "symbol `%.*s' not in repertoire map"
-msgstr ""
+msgstr "le symbolo `%.*s' non es in le repertoire"
 
 #: locale/programs/locale-spec.c:130
 #, c-format
 msgid "unknown name \"%s\""
-msgstr ""
+msgstr "nomine incognite \"%s\""
 
 #: locale/programs/locale.c:74
 msgid "System information:"
-msgstr ""
+msgstr "Information del systema:"
 
 #: locale/programs/locale.c:76
 msgid "Write names of available locales"
-msgstr ""
+msgstr "Monstrar le nomines del localitates disponibile"
 
 #: locale/programs/locale.c:78
 msgid "Write names of available charmaps"
-msgstr ""
+msgstr "Monstrar le nomines del tabulas de characteres disponibile"
 
 #: locale/programs/locale.c:79
 msgid "Modify output format:"
-msgstr ""
+msgstr "Modificar le formate de output:"
 
 #: locale/programs/locale.c:80
 msgid "Write names of selected categories"
-msgstr ""
+msgstr "Monstrar le nomines del categorias seligite"
 
 #: locale/programs/locale.c:81
 msgid "Write names of selected keywords"
-msgstr ""
+msgstr "Monstrar le nomines del parolas claves seligite"
 
 #: locale/programs/locale.c:82
 msgid "Print more information"
-msgstr ""
+msgstr "Monstrar information plus detaliate"
 
 #: locale/programs/locale.c:87
 msgid "Get locale-specific information."
-msgstr ""
+msgstr "Obtener le information specific pro un localitate"
 
 #: locale/programs/locale.c:90
 msgid ""
 "NAME\n"
 "[-a|-m]"
 msgstr ""
+"NOMINE\n"
+"[-a|-m]"
 
 #: locale/programs/locale.c:194
 #, c-format
 msgid "Cannot set LC_CTYPE to default locale"
-msgstr ""
+msgstr "Impossibile de initialisar LC_CTYPE al localitate predefinite"
 
 #: locale/programs/locale.c:196
 #, c-format
 msgid "Cannot set LC_MESSAGES to default locale"
-msgstr ""
+msgstr "Impossibile de initialisar LC_MESSAGE al localitate predefinite"
 
 #: locale/programs/locale.c:209
 #, c-format
 msgid "Cannot set LC_COLLATE to default locale"
-msgstr ""
+msgstr "Impossibile de initialisar LC_COLLATE al localitate predefinite"
 
 #: locale/programs/locale.c:225
 #, c-format
 msgid "Cannot set LC_ALL to default locale"
-msgstr ""
+msgstr "Impossibile de initialisar LC_ALL al localitate predefinite"
 
 #: locale/programs/locale.c:521
 #, c-format
 msgid "while preparing output"
-msgstr ""
+msgstr "durante le preparation de output"
 
 #: locale/programs/localedef.c:119
 msgid "Input Files:"
-msgstr ""
+msgstr "Files de input:"
 
 #: locale/programs/localedef.c:121
 msgid "Symbolic character names defined in FILE"
-msgstr ""
+msgstr "Nomines symbolic de characteres es in FILE"
 
 #: locale/programs/localedef.c:122
 msgid "Source definitions are found in FILE"
-msgstr ""
+msgstr "Le definitiones fontal es in FILE"
 
 #: locale/programs/localedef.c:124
 msgid "FILE contains mapping from symbolic names to UCS4 values"
-msgstr ""
+msgstr "FILE contine mappage del nomines symbolic al valores UCS4"
 
 #: locale/programs/localedef.c:128
 msgid "Create output even if warning messages were issued"
-msgstr ""
+msgstr "Crear le output etsi advertimentos era emittite"
 
 #: locale/programs/localedef.c:129
 msgid "Create old-style tables"
-msgstr ""
+msgstr "Crear le tabellas de vetule stilo"
 
 #: locale/programs/localedef.c:130
 msgid "Optional output file prefix"
-msgstr ""
+msgstr "Prefixo optional del file de output"
 
 #: locale/programs/localedef.c:131
 msgid "Be strictly POSIX conform"
-msgstr ""
+msgstr "Conformar se strictemente a POSIX"
 
 #: locale/programs/localedef.c:133
 msgid "Suppress warnings and information messages"
-msgstr ""
+msgstr "Supprimer advertimentos e messages informative"
 
 #: locale/programs/localedef.c:134
 msgid "Print more messages"
-msgstr ""
+msgstr "Monstrar plus de messages"
 
 #: locale/programs/localedef.c:135
 msgid "Archive control:"
-msgstr ""
+msgstr "Gerentia del archivo:"
 
 #: locale/programs/localedef.c:137
 msgid "Don't add new data to archive"
-msgstr ""
+msgstr "Non adder nove datos al archivo"
 
 #: locale/programs/localedef.c:139
 msgid "Add locales named by parameters to archive"
-msgstr ""
+msgstr "Adder al archivo le localitates designate per parametros"
 
 #: locale/programs/localedef.c:140
 msgid "Replace existing archive content"
-msgstr ""
+msgstr "Reimplaciar le contento existente del archivo"
 
 #: locale/programs/localedef.c:142
 msgid "Remove locales named by parameters from archive"
-msgstr ""
+msgstr "Remover del archivo le localitates designate per parametros"
 
 #: locale/programs/localedef.c:143
 msgid "List content of archive"
-msgstr ""
+msgstr "Monstrar le contento del archivo"
 
 #: locale/programs/localedef.c:145
 msgid "locale.alias file to consult when making archive"
-msgstr ""
+msgstr "Le file locale.alias a consultar durante le creation del archivo"
 
 #: locale/programs/localedef.c:150
 msgid "Compile locale specification"
-msgstr ""
+msgstr "Compilar le specification de localitate"
 
 #: locale/programs/localedef.c:153
 msgid ""
@@ -2705,6 +2707,9 @@
 "[--add-to-archive|--delete-from-archive] FILE...\n"
 "--list-archive [FILE]"
 msgstr ""
+"NOMINE\n"
+"[--add-to-archive|--delete-from-archive] FILE...\n"
+"--list-archive [FILE]"
 
 #: locale/programs/localedef.c:228
 #, c-format

Modified: fsf/trunk/libc/sysdeps/generic/math_private.h
==============================================================================
--- fsf/trunk/libc/sysdeps/generic/math_private.h (original)
+++ fsf/trunk/libc/sysdeps/generic/math_private.h Thu Jun 13 00:01:48 2013
@@ -553,35 +553,62 @@
 # define libc_feresetround_noexl libc_fesetenvl
 #endif
 
+#if HAVE_RM_CTX
+/* Set/Restore Rounding Modes only when necessary.  If defined, these functions
+   set/restore floating point state only if the state needed within the lexical
+   block is different from the current state.  This saves a lot of time when
+   the floating point unit is much slower than the fixed point units.  */
+
+# ifndef libc_feresetround_noex_ctx
+#   define libc_feresetround_noex_ctx  libc_fesetenv_ctx
+# endif
+# ifndef libc_feresetround_noexf_ctx
+#   define libc_feresetround_noexf_ctx libc_fesetenvf_ctx
+# endif
+# ifndef libc_feresetround_noexl_ctx
+#   define libc_feresetround_noexl_ctx libc_fesetenvl_ctx
+# endif
+
+# ifndef libc_feholdsetround_53bit_ctx
+#   define libc_feholdsetround_53bit_ctx libc_feholdsetround_ctx
+# endif
+
+# ifndef libc_feresetround_53bit_ctx
+#   define libc_feresetround_53bit_ctx libc_feresetround_ctx
+# endif
+
+# define SET_RESTORE_ROUND_GENERIC(RM,ROUNDFUNC,CLEANUPFUNC) \
+  struct rm_ctx ctx __attribute__((cleanup(CLEANUPFUNC ## _ctx)));	      \
+  ROUNDFUNC ## _ctx (&ctx, (RM))
+#else
+# define SET_RESTORE_ROUND_GENERIC(RM, ROUNDFUNC, CLEANUPFUNC) \
+  fenv_t __libc_save_rm __attribute__((cleanup(CLEANUPFUNC)));	\
+  ROUNDFUNC (&__libc_save_rm, (RM))
+#endif
+
 /* Save and restore the rounding mode within a lexical block.  */
 
 #define SET_RESTORE_ROUND(RM) \
-  fenv_t __libc_save_rm __attribute__((cleanup(libc_feresetround)));	\
-  libc_feholdsetround (&__libc_save_rm, (RM))
+  SET_RESTORE_ROUND_GENERIC (RM, libc_feholdsetround, libc_feresetround)
 #define SET_RESTORE_ROUNDF(RM) \
-  fenv_t __libc_save_rm __attribute__((cleanup(libc_feresetroundf)));	\
-  libc_feholdsetroundf (&__libc_save_rm, (RM))
+  SET_RESTORE_ROUND_GENERIC (RM, libc_feholdsetroundf, libc_feresetroundf)
 #define SET_RESTORE_ROUNDL(RM) \
-  fenv_t __libc_save_rm __attribute__((cleanup(libc_feresetroundl)));	\
-  libc_feholdsetroundl (&__libc_save_rm, (RM))
+  SET_RESTORE_ROUND_GENERIC (RM, libc_feholdsetroundl, libc_feresetroundl)
 
 /* Save and restore the rounding mode within a lexical block, and also
    the set of exceptions raised within the block may be discarded.  */
 
 #define SET_RESTORE_ROUND_NOEX(RM) \
-  fenv_t __libc_save_rm __attribute__((cleanup(libc_feresetround_noex))); \
-  libc_feholdsetround (&__libc_save_rm, (RM))
+  SET_RESTORE_ROUND_GENERIC (RM, libc_feholdsetround, libc_feresetround_noex)
 #define SET_RESTORE_ROUND_NOEXF(RM) \
-  fenv_t __libc_save_rm __attribute__((cleanup(libc_feresetround_noexf))); \
-  libc_feholdsetroundf (&__libc_save_rm, (RM))
+  SET_RESTORE_ROUND_GENERIC (RM, libc_feholdsetroundf, libc_feresetround_noexf)
 #define SET_RESTORE_ROUND_NOEXL(RM) \
-  fenv_t __libc_save_rm __attribute__((cleanup(libc_feresetround_noexl))); \
-  libc_feholdsetroundl (&__libc_save_rm, (RM))
+  SET_RESTORE_ROUND_GENERIC (RM, libc_feholdsetroundl, libc_feresetround_noexl)
 
 /* Like SET_RESTORE_ROUND, but also set rounding precision to 53 bits.  */
 #define SET_RESTORE_ROUND_53BIT(RM) \
-  fenv_t __libc_save_rm __attribute__((cleanup(libc_feresetround_53bit))); \
-  libc_feholdsetround_53bit (&__libc_save_rm, (RM))
+  SET_RESTORE_ROUND_GENERIC (RM, libc_feholdsetround_53bit,	      \
+			     libc_feresetround_53bit)
 
 #define __nan(str) \
   (__builtin_constant_p (str) && str[0] == '\0' ? NAN : __nan (str))

Modified: fsf/trunk/libc/sysdeps/generic/symbol-hacks.h
==============================================================================
--- fsf/trunk/libc/sysdeps/generic/symbol-hacks.h (original)
+++ fsf/trunk/libc/sysdeps/generic/symbol-hacks.h Thu Jun 13 00:01:48 2013
@@ -1,1 +1,6 @@
-/* Fortunately nothing to do.  */
+/* Some compiler optimizations may transform loops into memset/memmove
+   calls and without proper declaration it may generate PLT calls.  */
+#if !defined __ASSEMBLER__ && !defined NOT_IN_libc && defined SHARED
+asm ("memmove = __GI_memmove");
+asm ("memset = __GI_memset");
+#endif

Modified: fsf/trunk/libc/sysdeps/i386/fpu/fenv_private.h
==============================================================================
--- fsf/trunk/libc/sysdeps/i386/fpu/fenv_private.h (original)
+++ fsf/trunk/libc/sysdeps/i386/fpu/fenv_private.h Thu Jun 13 00:01:48 2013
@@ -322,6 +322,179 @@
 # define libc_feholdsetround_53bit	libc_feholdsetround_387_53bit
 #endif
 
+/* We have support for rounding mode context.  */
+#define HAVE_RM_CTX 1
+
+static __always_inline void
+libc_feholdexcept_setround_sse_ctx (struct rm_ctx *ctx, int r)
+{
+  unsigned int mxcsr, new_mxcsr;
+  asm (STMXCSR " %0" : "=m" (*&mxcsr));
+  new_mxcsr = ((mxcsr | 0x1f80) & ~0x603f) | (r << 3);
+
+  ctx->env.__mxcsr = mxcsr;
+  if (__glibc_unlikely (mxcsr != new_mxcsr))
+    {
+      asm volatile (LDMXCSR " %0" : : "m" (*&new_mxcsr));
+      ctx->updated_status = true;
+    }
+  else
+    ctx->updated_status = false;
+}
+
+/* Unconditional since we want to overwrite any exceptions that occurred in the
+   context.  This is also why all fehold* functions unconditionally write into
+   ctx->env.  */
+static __always_inline void
+libc_fesetenv_sse_ctx (struct rm_ctx *ctx)
+{
+  libc_fesetenv_sse (&ctx->env);
+}
+
+static __always_inline void
+libc_feupdateenv_sse_ctx (struct rm_ctx *ctx)
+{
+  if (__glibc_unlikely (ctx->updated_status))
+    libc_feupdateenv_test_sse (&ctx->env, 0);
+}
+
+static __always_inline void
+libc_feholdexcept_setround_387_prec_ctx (struct rm_ctx *ctx, int r)
+{
+  libc_feholdexcept_387 (&ctx->env);
+
+  fpu_control_t cw = ctx->env.__control_word;
+  fpu_control_t old_cw = cw;
+  cw &= ~(_FPU_RC_ZERO | _FPU_EXTENDED);
+  cw |= r | 0x3f;
+
+  if (__glibc_unlikely (old_cw != cw))
+    {
+      _FPU_SETCW (cw);
+      ctx->updated_status = true;
+    }
+  else
+    ctx->updated_status = false;
+}
+
+static __always_inline void
+libc_feholdexcept_setround_387_ctx (struct rm_ctx *ctx, int r)
+{
+  libc_feholdexcept_setround_387_prec_ctx (ctx, r | _FPU_EXTENDED);
+}
+
+static __always_inline void
+libc_feholdexcept_setround_387_53bit_ctx (struct rm_ctx *ctx, int r)
+{
+  libc_feholdexcept_setround_387_prec_ctx (ctx, r | _FPU_DOUBLE);
+}
+
+static __always_inline void
+libc_feholdsetround_387_prec_ctx (struct rm_ctx *ctx, int r)
+{
+  fpu_control_t cw, new_cw;
+
+  _FPU_GETCW (cw);
+  new_cw = cw;
+  new_cw &= ~(_FPU_RC_ZERO | _FPU_EXTENDED);
+  new_cw |= r;
+
+  ctx->env.__control_word = cw;
+  if (__glibc_unlikely (new_cw != cw))
+    {
+      _FPU_SETCW (new_cw);
+      ctx->updated_status = true;
+    }
+  else
+    ctx->updated_status = false;
+}
+
+static __always_inline void
+libc_feholdsetround_387_ctx (struct rm_ctx *ctx, int r)
+{
+  libc_feholdsetround_387_prec_ctx (ctx, r | _FPU_EXTENDED);
+}
+
+static __always_inline void
+libc_feholdsetround_387_53bit_ctx (struct rm_ctx *ctx, int r)
+{
+  libc_feholdsetround_387_prec_ctx (ctx, r | _FPU_DOUBLE);
+}
+
+static __always_inline void
+libc_feholdsetround_sse_ctx (struct rm_ctx *ctx, int r)
+{
+  unsigned int mxcsr, new_mxcsr;
+
+  asm (STMXCSR " %0" : "=m" (*&mxcsr));
+  new_mxcsr = (mxcsr & ~0x6000) | (r << 3);
+
+  ctx->env.__mxcsr = mxcsr;
+  if (__glibc_unlikely (new_mxcsr != mxcsr))
+    {
+      asm volatile (LDMXCSR " %0" : : "m" (*&new_mxcsr));
+      ctx->updated_status = true;
+    }
+  else
+    ctx->updated_status = false;
+}
+
+static __always_inline void
+libc_feresetround_sse_ctx (struct rm_ctx *ctx)
+{
+  if (__glibc_unlikely (ctx->updated_status))
+    libc_feresetround_sse (&ctx->env);
+}
+
+static __always_inline void
+libc_feresetround_387_ctx (struct rm_ctx *ctx)
+{
+  if (__glibc_unlikely (ctx->updated_status))
+    _FPU_SETCW (ctx->env.__control_word);
+}
+
+static __always_inline void
+libc_feupdateenv_387_ctx (struct rm_ctx *ctx)
+{
+  if (__glibc_unlikely (ctx->updated_status))
+    libc_feupdateenv_test_387 (&ctx->env, 0);
+}
+
+#ifdef __SSE_MATH__
+# define libc_feholdexcept_setroundf_ctx libc_feholdexcept_setround_sse_ctx
+# define libc_fesetenvf_ctx		libc_fesetenv_sse_ctx
+# define libc_feupdateenvf_ctx		libc_feupdateenv_sse_ctx
+# define libc_feholdsetroundf_ctx	libc_feholdsetround_sse_ctx
+# define libc_feresetroundf_ctx		libc_feresetround_sse_ctx
+#else
+# define libc_feholdexcept_setroundf_ctx libc_feholdexcept_setround_387_ctx
+# define libc_feupdateenvf_ctx		libc_feupdateenv_387_ctx
+# define libc_feholdsetroundf_ctx	libc_feholdsetround_387_ctx
+# define libc_feresetroundf_ctx		libc_feresetround_387_ctx
+#endif /* __SSE_MATH__ */
+
+#ifdef __SSE2_MATH__
+# define libc_feholdexcept_setround_ctx	libc_feholdexcept_setround_sse_ctx
+# define libc_fesetenv_ctx		libc_fesetenv_sse_ctx
+# define libc_feupdateenv_ctx		libc_feupdateenv_sse_ctx
+# define libc_feholdsetround_ctx	libc_feholdsetround_sse_ctx
+# define libc_feresetround_ctx		libc_feresetround_sse_ctx
+#else
+# define libc_feholdexcept_setround_ctx	libc_feholdexcept_setround_387_ctx
+# define libc_feupdateenv_ctx		libc_feupdateenv_387_ctx
+# define libc_feresetround_ctx		libc_feresetround_387_ctx
+#endif /* __SSE2_MATH__ */
+
+#define libc_feholdexcept_setroundl_ctx	libc_feholdexcept_setround_387_ctx
+#define libc_feupdateenvl_ctx		libc_feupdateenv_387_ctx
+#define libc_feholdsetroundl_ctx	libc_feholdsetround_387_ctx
+#define libc_feresetroundl_ctx		libc_feresetround_387_ctx
+
+#ifndef __SSE2_MATH__
+# define libc_feholdsetround_53bit_ctx	libc_feholdsetround_387_53bit_ctx
+# define libc_feresetround_53bit_ctx	libc_feresetround_387_ctx
+#endif
+
 #undef __mxcsr
 
 #endif /* FENV_PRIVATE_H */

Modified: fsf/trunk/libc/sysdeps/wordsize-32/symbol-hacks.h
==============================================================================
--- fsf/trunk/libc/sysdeps/wordsize-32/symbol-hacks.h (original)
+++ fsf/trunk/libc/sysdeps/wordsize-32/symbol-hacks.h Thu Jun 13 00:01:48 2013
@@ -16,6 +16,8 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include_next "symbol-hacks.h"
+
 /* A very dirty trick: gcc emits references to __divdi3, __udivdi3,
    __moddi3, and __umoddi3.  These functions are exported and
    therefore we get PLTs.  Unnecessarily so.  Changing gcc is a big

_______________________________________________
Commits mailing list
Commits@xxxxxxxxxx
http://eglibc.org/cgi-bin/mailman/listinfo/commits