This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Update soft-fp from glibc


This patch updates soft-fp in libgcc from glibc.  The motivation for
this late update is the recent change of MIPS to use soft-fp: the
update brings in the new support for after-rounding tininess
detection, without which MIPS TFmode operations would have started
raising underflow exceptions in certain cases where they should not be
raised on after-rounding architectures such as MIPS, and would not
previously have been raised (because of the use of fp-bit), a
technical regression that would cause issues for enabling testing
rounding modes and exceptions for MIPS long double in glibc.  The only
other soft-fp changes are to copyright dates.

The _FP_TININESS_AFTER_ROUNDING settings in sfp-machine.h for
architectures not supported by glibc have not been checked, and have
comments to that effect - but since none of the unchecked
architectures actually have any support in libgcc for generating
hardware exceptions from software floating point, there is no
observable effect of any inaccuracy in the choice of setting (which in
any case is only meaningful if the architecture defines this choice at
all - i.e. if it has some form of hardware floating point, but soft-fp
is being used for operations or types not supported in hardware).

__float128 testcases are added that illustrate on x86 / x86_64 / ia64
what has been fixed (IEEE 754-2008 requires the choice of tininess
detection to be the same for all binary operations, so it was a bug
that __float128 previously used before-rounding tininess detection
when hardware floating point used after-rounding on those
architectures).

Bootstrapped with no regressions on x86_64-unknown-linux-gnu.  Applied
to mainline.

gcc/testsuite:
2014-02-12  Joseph Myers  <joseph@codesourcery.com>

	* gcc.dg/torture/float128-mul-underflow.c,
	gcc.dg/torture/float128-truncdf-underflow.c,
	gcc.dg/torture/float128-truncsf-underflow.c: New tests.

libgcc:
2014-02-12  Joseph Myers  <joseph@codesourcery.com>

	* soft-fp/adddf3.c: Update from glibc.
	* soft-fp/addsf3.c: Likewise.
	* soft-fp/addtf3.c: Likewise.
	* soft-fp/divdf3.c: Likewise.
	* soft-fp/divsf3.c: Likewise.
	* soft-fp/divtf3.c: Likewise.
	* soft-fp/double.h: Likewise.
	* soft-fp/eqdf2.c: Likewise.
	* soft-fp/eqsf2.c: Likewise.
	* soft-fp/eqtf2.c: Likewise.
	* soft-fp/extenddftf2.c: Likewise.
	* soft-fp/extended.h: Likewise.
	* soft-fp/extendsfdf2.c: Likewise.
	* soft-fp/extendsftf2.c: Likewise.
	* soft-fp/extendxftf2.c: Likewise.
	* soft-fp/fixdfdi.c: Likewise.
	* soft-fp/fixdfsi.c: Likewise.
	* soft-fp/fixdfti.c: Likewise.
	* soft-fp/fixsfdi.c: Likewise.
	* soft-fp/fixsfsi.c: Likewise.
	* soft-fp/fixsfti.c: Likewise.
	* soft-fp/fixtfdi.c: Likewise.
	* soft-fp/fixtfsi.c: Likewise.
	* soft-fp/fixtfti.c: Likewise.
	* soft-fp/fixunsdfdi.c: Likewise.
	* soft-fp/fixunsdfsi.c: Likewise.
	* soft-fp/fixunsdfti.c: Likewise.
	* soft-fp/fixunssfdi.c: Likewise.
	* soft-fp/fixunssfsi.c: Likewise.
	* soft-fp/fixunssfti.c: Likewise.
	* soft-fp/fixunstfdi.c: Likewise.
	* soft-fp/fixunstfsi.c: Likewise.
	* soft-fp/fixunstfti.c: Likewise.
	* soft-fp/floatdidf.c: Likewise.
	* soft-fp/floatdisf.c: Likewise.
	* soft-fp/floatditf.c: Likewise.
	* soft-fp/floatsidf.c: Likewise.
	* soft-fp/floatsisf.c: Likewise.
	* soft-fp/floatsitf.c: Likewise.
	* soft-fp/floattidf.c: Likewise.
	* soft-fp/floattisf.c: Likewise.
	* soft-fp/floattitf.c: Likewise.
	* soft-fp/floatundidf.c: Likewise.
	* soft-fp/floatundisf.c: Likewise.
	* soft-fp/floatunditf.c: Likewise.
	* soft-fp/floatunsidf.c: Likewise.
	* soft-fp/floatunsisf.c: Likewise.
	* soft-fp/floatunsitf.c: Likewise.
	* soft-fp/floatuntidf.c: Likewise.
	* soft-fp/floatuntisf.c: Likewise.
	* soft-fp/floatuntitf.c: Likewise.
	* soft-fp/gedf2.c: Likewise.
	* soft-fp/gesf2.c: Likewise.
	* soft-fp/getf2.c: Likewise.
	* soft-fp/ledf2.c: Likewise.
	* soft-fp/lesf2.c: Likewise.
	* soft-fp/letf2.c: Likewise.
	* soft-fp/muldf3.c: Likewise.
	* soft-fp/mulsf3.c: Likewise.
	* soft-fp/multf3.c: Likewise.
	* soft-fp/negdf2.c: Likewise.
	* soft-fp/negsf2.c: Likewise.
	* soft-fp/negtf2.c: Likewise.
	* soft-fp/op-1.h: Likewise.
	* soft-fp/op-2.h: Likewise.
	* soft-fp/op-4.h: Likewise.
	* soft-fp/op-8.h: Likewise.
	* soft-fp/op-common.h: Likewise.
	* soft-fp/quad.h: Likewise.
	* soft-fp/single.h: Likewise.
	* soft-fp/soft-fp.h: Likewise.
	* soft-fp/subdf3.c: Likewise.
	* soft-fp/subsf3.c: Likewise.
	* soft-fp/subtf3.c: Likewise.
	* soft-fp/truncdfsf2.c: Likewise.
	* soft-fp/trunctfdf2.c: Likewise.
	* soft-fp/trunctfsf2.c: Likewise.
	* soft-fp/trunctfxf2.c: Likewise.
	* soft-fp/unorddf2.c: Likewise.
	* soft-fp/unordsf2.c: Likewise.
	* soft-fp/unordtf2.c: Likewise.
	* config/aarch64/sfp-machine.h (_FP_TININESS_AFTER_ROUNDING): New
	macro.
	* config/arm/sfp-machine.h (_FP_TININESS_AFTER_ROUNDING):
	Likewise.
	* config/c6x/sfp-machine.h (_FP_TININESS_AFTER_ROUNDING):
	Likewise.
	* config/cris/sfp-machine.h (_FP_TININESS_AFTER_ROUNDING):
	Likewise.
	* config/i386/sfp-machine.h (_FP_TININESS_AFTER_ROUNDING):
	Likewise.
	* config/ia64/sfp-machine.h (_FP_TININESS_AFTER_ROUNDING):
	Likewise.
	* config/lm32/sfp-machine.h (_FP_TININESS_AFTER_ROUNDING):
	Likewise.
	* config/mips/sfp-machine.h (_FP_TININESS_AFTER_ROUNDING):
	Likewise.
	* config/moxie/sfp-machine.h (_FP_TININESS_AFTER_ROUNDING):
	Likewise.
	* config/nds32/sfp-machine.h (_FP_TININESS_AFTER_ROUNDING):
	Likewise.
	* config/nios2/sfp-machine.h (_FP_TININESS_AFTER_ROUNDING):
	Likewise.
	* config/rs6000/sfp-machine.h (_FP_TININESS_AFTER_ROUNDING):
	Likewise.
	* config/score/sfp-machine.h (_FP_TININESS_AFTER_ROUNDING):
	Likewise.
	* config/tilegx/sfp-machine32.h (_FP_TININESS_AFTER_ROUNDING):
	Likewise.
	* config/tilegx/sfp-machine64.h (_FP_TININESS_AFTER_ROUNDING):
	Likewise.
	* config/tilepro/sfp-machine.h (_FP_TININESS_AFTER_ROUNDING):
	Likewise.

Index: libgcc/config/moxie/sfp-machine.h
===================================================================
--- libgcc/config/moxie/sfp-machine.h	(revision 207735)
+++ libgcc/config/moxie/sfp-machine.h	(working copy)
@@ -46,6 +46,9 @@
     R##_c = FP_CLS_NAN;						\
   } while (0)
 
+/* Not checked.  */
+#define _FP_TININESS_AFTER_ROUNDING 0
+
 #define	__LITTLE_ENDIAN	1234
 #define	__BIG_ENDIAN	4321
 
Index: libgcc/config/aarch64/sfp-machine.h
===================================================================
--- libgcc/config/aarch64/sfp-machine.h	(revision 207735)
+++ libgcc/config/aarch64/sfp-machine.h	(working copy)
@@ -80,6 +80,8 @@
 	(FP_EX_INVALID | FP_EX_DIVZERO | FP_EX_OVERFLOW | FP_EX_UNDERFLOW \
 	 | FP_EX_INEXACT)
 
+#define _FP_TININESS_AFTER_ROUNDING 0
+
 void __sfp_handle_exceptions (int);
 
 #define FP_HANDLE_EXCEPTIONS			\
Index: libgcc/config/nios2/sfp-machine.h
===================================================================
--- libgcc/config/nios2/sfp-machine.h	(revision 207735)
+++ libgcc/config/nios2/sfp-machine.h	(working copy)
@@ -63,6 +63,9 @@
     R##_c = FP_CLS_NAN;						\
   } while (0)
 
+/* Not checked.  */
+#define _FP_TININESS_AFTER_ROUNDING 0
+
 #define	__LITTLE_ENDIAN	1234
 #define	__BIG_ENDIAN	4321
 
Index: libgcc/config/mips/sfp-machine.h
===================================================================
--- libgcc/config/mips/sfp-machine.h	(revision 207735)
+++ libgcc/config/mips/sfp-machine.h	(working copy)
@@ -163,6 +163,8 @@
 #define FP_EX_INEXACT           (1 << 0)
 #endif
 
+#define _FP_TININESS_AFTER_ROUNDING 1
+
 #define	__LITTLE_ENDIAN	1234
 #define	__BIG_ENDIAN	4321
 
Index: libgcc/config/lm32/sfp-machine.h
===================================================================
--- libgcc/config/lm32/sfp-machine.h	(revision 207735)
+++ libgcc/config/lm32/sfp-machine.h	(working copy)
@@ -41,6 +41,9 @@
     R##_c = FP_CLS_NAN;						\
   } while (0)
 
+/* Not checked.  */
+#define _FP_TININESS_AFTER_ROUNDING 0
+
 #define	__LITTLE_ENDIAN	1234
 #define	__BIG_ENDIAN	4321
 
Index: libgcc/config/tilepro/sfp-machine.h
===================================================================
--- libgcc/config/tilepro/sfp-machine.h	(revision 207735)
+++ libgcc/config/tilepro/sfp-machine.h	(working copy)
@@ -45,6 +45,8 @@
     R##_c = FP_CLS_NAN;						\
   } while (0)
 
+#define _FP_TININESS_AFTER_ROUNDING 0
+
 #define	__LITTLE_ENDIAN	1234
 #define	__BIG_ENDIAN	4321
 
Index: libgcc/config/arm/sfp-machine.h
===================================================================
--- libgcc/config/arm/sfp-machine.h	(revision 207735)
+++ libgcc/config/arm/sfp-machine.h	(working copy)
@@ -48,6 +48,8 @@
     R##_c = FP_CLS_NAN;						\
   } while (0)
 
+#define _FP_TININESS_AFTER_ROUNDING 0
+
 #define	__LITTLE_ENDIAN	1234
 #define	__BIG_ENDIAN	4321
 
Index: libgcc/config/rs6000/sfp-machine.h
===================================================================
--- libgcc/config/rs6000/sfp-machine.h	(revision 207735)
+++ libgcc/config/rs6000/sfp-machine.h	(working copy)
@@ -46,6 +46,8 @@
     R##_c = FP_CLS_NAN;						\
   } while (0)
 
+#define _FP_TININESS_AFTER_ROUNDING 0
+
 #define	__LITTLE_ENDIAN	1234
 #define	__BIG_ENDIAN	4321
 
Index: libgcc/config/tilegx/sfp-machine32.h
===================================================================
--- libgcc/config/tilegx/sfp-machine32.h	(revision 207735)
+++ libgcc/config/tilegx/sfp-machine32.h	(working copy)
@@ -50,6 +50,8 @@
     R##_c = FP_CLS_NAN;						\
   } while (0)
 
+#define _FP_TININESS_AFTER_ROUNDING 0
+
 #define	__LITTLE_ENDIAN	1234
 #define	__BIG_ENDIAN	4321
 
Index: libgcc/config/tilegx/sfp-machine64.h
===================================================================
--- libgcc/config/tilegx/sfp-machine64.h	(revision 207735)
+++ libgcc/config/tilegx/sfp-machine64.h	(working copy)
@@ -50,6 +50,8 @@
     R##_c = FP_CLS_NAN;						\
   } while (0)
 
+#define _FP_TININESS_AFTER_ROUNDING 0
+
 #define	__LITTLE_ENDIAN	1234
 #define	__BIG_ENDIAN	4321
 
Index: libgcc/config/cris/sfp-machine.h
===================================================================
--- libgcc/config/cris/sfp-machine.h	(revision 207735)
+++ libgcc/config/cris/sfp-machine.h	(working copy)
@@ -67,6 +67,9 @@
     R##_c = FP_CLS_NAN;						\
   } while (0)
 
+/* Not checked.  */
+#define _FP_TININESS_AFTER_ROUNDING 0
+
 #define	__LITTLE_ENDIAN	1234
 #define	__BIG_ENDIAN	4321
 
Index: libgcc/config/ia64/sfp-machine.h
===================================================================
--- libgcc/config/ia64/sfp-machine.h	(revision 207735)
+++ libgcc/config/ia64/sfp-machine.h	(working copy)
@@ -57,6 +57,8 @@
 #define FP_EX_UNDERFLOW		0x10
 #define FP_EX_INEXACT		0x20
 
+#define _FP_TININESS_AFTER_ROUNDING 1
+
 void __sfp_handle_exceptions (int);
 
 #define FP_HANDLE_EXCEPTIONS			\
Index: libgcc/config/score/sfp-machine.h
===================================================================
--- libgcc/config/score/sfp-machine.h	(revision 207735)
+++ libgcc/config/score/sfp-machine.h	(working copy)
@@ -46,6 +46,9 @@
     R##_c = FP_CLS_NAN;						\
   } while (0)
 
+/* Not checked.  */
+#define _FP_TININESS_AFTER_ROUNDING 0
+
 #define	__LITTLE_ENDIAN	1234
 #define	__BIG_ENDIAN	4321
 
Index: libgcc/config/nds32/sfp-machine.h
===================================================================
--- libgcc/config/nds32/sfp-machine.h	(revision 207735)
+++ libgcc/config/nds32/sfp-machine.h	(working copy)
@@ -76,6 +76,9 @@
     R##_c = FP_CLS_NAN;						\
   } while (0)
 
+/* Not checked.  */
+#define _FP_TININESS_AFTER_ROUNDING 0
+
 #define	__LITTLE_ENDIAN	1234
 #define	__BIG_ENDIAN	4321
 
Index: libgcc/config/i386/sfp-machine.h
===================================================================
--- libgcc/config/i386/sfp-machine.h	(revision 207735)
+++ libgcc/config/i386/sfp-machine.h	(working copy)
@@ -65,6 +65,8 @@
 #define FP_ROUNDMODE		(_fcw & FP_RND_MASK)
 #endif
 
+#define _FP_TININESS_AFTER_ROUNDING 1
+
 #define	__LITTLE_ENDIAN	1234
 #define	__BIG_ENDIAN	4321
 
Index: libgcc/config/c6x/sfp-machine.h
===================================================================
--- libgcc/config/c6x/sfp-machine.h	(revision 207735)
+++ libgcc/config/c6x/sfp-machine.h	(working copy)
@@ -78,7 +78,10 @@
 # define __BYTE_ORDER __LITTLE_ENDIAN
 #endif
 
+/* Not checked.  */
+#define _FP_TININESS_AFTER_ROUNDING 0
 
+
 /* Define ALIASNAME as a strong alias for NAME.  */
 # define strong_alias(name, aliasname) _strong_alias(name, aliasname)
 # define _strong_alias(name, aliasname) \
Index: libgcc/soft-fp/floatuntitf.c
===================================================================
--- libgcc/soft-fp/floatuntitf.c	(revision 207735)
+++ libgcc/soft-fp/floatuntitf.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a 128bit unsigned integer to IEEE quad
-   Copyright (C) 2007-2013 Free Software Foundation, Inc.
+   Copyright (C) 2007-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Uros Bizjak (ubizjak@gmail.com).
 
Index: libgcc/soft-fp/eqdf2.c
===================================================================
--- libgcc/soft-fp/eqdf2.c	(revision 207735)
+++ libgcc/soft-fp/eqdf2.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return 0 iff a == b, 1 otherwise
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/fixunssfti.c
===================================================================
--- libgcc/soft-fp/fixunssfti.c	(revision 207735)
+++ libgcc/soft-fp/fixunssfti.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert IEEE single to 128bit unsigned integer
-   Copyright (C) 2007-2013 Free Software Foundation, Inc.
+   Copyright (C) 2007-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Uros Bizjak (ubizjak@gmail.com).
 
Index: libgcc/soft-fp/fixunsdfdi.c
===================================================================
--- libgcc/soft-fp/fixunsdfdi.c	(revision 207735)
+++ libgcc/soft-fp/fixunsdfdi.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a to 64bit unsigned integer
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/subsf3.c
===================================================================
--- libgcc/soft-fp/subsf3.c	(revision 207735)
+++ libgcc/soft-fp/subsf3.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a - b
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/subtf3.c
===================================================================
--- libgcc/soft-fp/subtf3.c	(revision 207735)
+++ libgcc/soft-fp/subtf3.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a - b
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/gesf2.c
===================================================================
--- libgcc/soft-fp/gesf2.c	(revision 207735)
+++ libgcc/soft-fp/gesf2.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return 0 iff a == b, 1 iff a > b, -2 iff a ? b, -1 iff a < b
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/getf2.c
===================================================================
--- libgcc/soft-fp/getf2.c	(revision 207735)
+++ libgcc/soft-fp/getf2.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return 0 iff a == b, 1 iff a > b, -2 iff a ? b, -1 iff a < b
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/mulsf3.c
===================================================================
--- libgcc/soft-fp/mulsf3.c	(revision 207735)
+++ libgcc/soft-fp/mulsf3.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a * b
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/op-common.h
===================================================================
--- libgcc/soft-fp/op-common.h	(revision 207735)
+++ libgcc/soft-fp/op-common.h	(working copy)
@@ -1,5 +1,5 @@
 /* Software floating-point emulation. Common operations.
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com),
 		  Jakub Jelinek (jj@ultra.linux.cz),
@@ -32,7 +32,7 @@
 #define _FP_DECL(wc, X)				\
   _FP_I_TYPE X##_c __attribute__ ((unused));	\
   _FP_I_TYPE X##_s __attribute__ ((unused));	\
-  _FP_I_TYPE X##_e;				\
+  _FP_I_TYPE X##_e __attribute__ ((unused));	\
   _FP_FRAC_DECL_##wc (X)
 
 /* Test whether the qNaN bit denotes a signaling NaN.  */
@@ -191,8 +191,22 @@
 #define _FP_PACK_SEMIRAW(fs, wc, X)				\
   do								\
     {								\
+      int _FP_PACK_SEMIRAW_is_tiny				\
+	= X##_e == 0 && !_FP_FRAC_ZEROP_##wc (X);		\
+      if (_FP_TININESS_AFTER_ROUNDING				\
+	  && _FP_PACK_SEMIRAW_is_tiny)				\
+	{							\
+	  FP_DECL_##fs (_FP_PACK_SEMIRAW_T);			\
+	  _FP_FRAC_COPY_##wc (_FP_PACK_SEMIRAW_T, X);		\
+	  _FP_PACK_SEMIRAW_T##_s = X##_s;			\
+	  _FP_PACK_SEMIRAW_T##_e = X##_e;			\
+	  _FP_FRAC_SLL_##wc (_FP_PACK_SEMIRAW_T, 1);		\
+	  _FP_ROUND (wc, _FP_PACK_SEMIRAW_T);			\
+	  if (_FP_FRAC_OVERP_##wc (fs, _FP_PACK_SEMIRAW_T))	\
+	    _FP_PACK_SEMIRAW_is_tiny = 0;			\
+	}							\
       _FP_ROUND (wc, X);					\
-      if (X##_e == 0 && !_FP_FRAC_ZEROP_##wc (X))		\
+      if (_FP_PACK_SEMIRAW_is_tiny)				\
 	{							\
 	  if ((FP_CUR_EXCEPTIONS & FP_EX_INEXACT)		\
 	      || (FP_TRAPPING_EXCEPTIONS & FP_EX_UNDERFLOW))	\
@@ -279,6 +293,17 @@
 	  else								\
 	    {								\
 	      /* we've got a denormalized number */			\
+	      int _FP_PACK_CANONICAL_is_tiny = 1;			\
+	      if (_FP_TININESS_AFTER_ROUNDING && X##_e == 0)		\
+		{							\
+		  FP_DECL_##fs (_FP_PACK_CANONICAL_T);			\
+		  _FP_FRAC_COPY_##wc (_FP_PACK_CANONICAL_T, X);		\
+		  _FP_PACK_CANONICAL_T##_s = X##_s;			\
+		  _FP_PACK_CANONICAL_T##_e = X##_e;			\
+		  _FP_ROUND (wc, _FP_PACK_CANONICAL_T);			\
+		  if (_FP_FRAC_OVERP_##wc (fs, _FP_PACK_CANONICAL_T))	\
+		    _FP_PACK_CANONICAL_is_tiny = 0;			\
+		}							\
 	      X##_e = -X##_e + 1;					\
 	      if (X##_e <= _FP_WFRACBITS_##fs)				\
 		{							\
@@ -296,8 +321,10 @@
 		      X##_e = 0;					\
 		      _FP_FRAC_SRL_##wc (X, _FP_WORKBITS);		\
 		    }							\
-		  if ((FP_CUR_EXCEPTIONS & FP_EX_INEXACT)		\
-		      || (FP_TRAPPING_EXCEPTIONS & FP_EX_UNDERFLOW))	\
+		  if (_FP_PACK_CANONICAL_is_tiny			\
+		      && ((FP_CUR_EXCEPTIONS & FP_EX_INEXACT)		\
+			  || (FP_TRAPPING_EXCEPTIONS			\
+			      & FP_EX_UNDERFLOW)))			\
 		    FP_SET_EXCEPTION (FP_EX_UNDERFLOW);			\
 		}							\
 	      else							\
Index: libgcc/soft-fp/multf3.c
===================================================================
--- libgcc/soft-fp/multf3.c	(revision 207735)
+++ libgcc/soft-fp/multf3.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a * b
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/floatsidf.c
===================================================================
--- libgcc/soft-fp/floatsidf.c	(revision 207735)
+++ libgcc/soft-fp/floatsidf.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a 32bit signed integer to IEEE double
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/fixsfti.c
===================================================================
--- libgcc/soft-fp/fixsfti.c	(revision 207735)
+++ libgcc/soft-fp/fixsfti.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert IEEE single to 128bit signed integer
-   Copyright (C) 2007-2013 Free Software Foundation, Inc.
+   Copyright (C) 2007-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Uros Bizjak (ubizjak@gmail.com).
 
Index: libgcc/soft-fp/extenddftf2.c
===================================================================
--- libgcc/soft-fp/extenddftf2.c	(revision 207735)
+++ libgcc/soft-fp/extenddftf2.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a converted to IEEE quad
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/fixdfdi.c
===================================================================
--- libgcc/soft-fp/fixdfdi.c	(revision 207735)
+++ libgcc/soft-fp/fixdfdi.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a to 64bit signed integer
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/floatundisf.c
===================================================================
--- libgcc/soft-fp/floatundisf.c	(revision 207735)
+++ libgcc/soft-fp/floatundisf.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a 64bit unsigned integer to IEEE single
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/eqsf2.c
===================================================================
--- libgcc/soft-fp/eqsf2.c	(revision 207735)
+++ libgcc/soft-fp/eqsf2.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return 0 iff a == b, 1 otherwise
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/eqtf2.c
===================================================================
--- libgcc/soft-fp/eqtf2.c	(revision 207735)
+++ libgcc/soft-fp/eqtf2.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return 0 iff a == b, 1 otherwise
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/op-2.h
===================================================================
--- libgcc/soft-fp/op-2.h	(revision 207735)
+++ libgcc/soft-fp/op-2.h	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Basic two-word fraction declaration and manipulation.
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com),
 		  Jakub Jelinek (jj@ultra.linux.cz),
Index: libgcc/soft-fp/fixunsdfti.c
===================================================================
--- libgcc/soft-fp/fixunsdfti.c	(revision 207735)
+++ libgcc/soft-fp/fixunsdfti.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert IEEE double to 128bit unsigned integer
-   Copyright (C) 2007-2013 Free Software Foundation, Inc.
+   Copyright (C) 2007-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Uros Bizjak (ubizjak@gmail.com).
 
Index: libgcc/soft-fp/fixunstfdi.c
===================================================================
--- libgcc/soft-fp/fixunstfdi.c	(revision 207735)
+++ libgcc/soft-fp/fixunstfdi.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a to 64bit unsigned integer
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/op-4.h
===================================================================
--- libgcc/soft-fp/op-4.h	(revision 207735)
+++ libgcc/soft-fp/op-4.h	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Basic four-word fraction declaration and manipulation.
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com),
 		  Jakub Jelinek (jj@ultra.linux.cz),
Index: libgcc/soft-fp/adddf3.c
===================================================================
--- libgcc/soft-fp/adddf3.c	(revision 207735)
+++ libgcc/soft-fp/adddf3.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a + b
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/op-8.h
===================================================================
--- libgcc/soft-fp/op-8.h	(revision 207735)
+++ libgcc/soft-fp/op-8.h	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Basic eight-word fraction declaration and manipulation.
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com),
 		  Jakub Jelinek (jj@ultra.linux.cz) and
Index: libgcc/soft-fp/floatsitf.c
===================================================================
--- libgcc/soft-fp/floatsitf.c	(revision 207735)
+++ libgcc/soft-fp/floatsitf.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a 32bit signed integer to IEEE quad
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/floatdidf.c
===================================================================
--- libgcc/soft-fp/floatdidf.c	(revision 207735)
+++ libgcc/soft-fp/floatdidf.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a 64bit signed integer to IEEE double
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/fixtfdi.c
===================================================================
--- libgcc/soft-fp/fixtfdi.c	(revision 207735)
+++ libgcc/soft-fp/fixtfdi.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a to 64bit signed integer
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/fixdfti.c
===================================================================
--- libgcc/soft-fp/fixdfti.c	(revision 207735)
+++ libgcc/soft-fp/fixdfti.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert IEEE double to 128bit signed integer
-   Copyright (C) 2007-2013 Free Software Foundation, Inc.
+   Copyright (C) 2007-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Uros Bizjak (ubizjak@gmail.com).
 
Index: libgcc/soft-fp/floatuntisf.c
===================================================================
--- libgcc/soft-fp/floatuntisf.c	(revision 207735)
+++ libgcc/soft-fp/floatuntisf.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a 128bit unsigned integer to IEEE single
-   Copyright (C) 2007-2013 Free Software Foundation, Inc.
+   Copyright (C) 2007-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Uros Bizjak (ubizjak@gmail.com).
 
Index: libgcc/soft-fp/extendxftf2.c
===================================================================
--- libgcc/soft-fp/extendxftf2.c	(revision 207735)
+++ libgcc/soft-fp/extendxftf2.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a converted to IEEE quad
-   Copyright (C) 2007-2013 Free Software Foundation, Inc.
+   Copyright (C) 2007-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Uros Bizjak (ubizjak@gmail.com).
 
Index: libgcc/soft-fp/fixunssfsi.c
===================================================================
--- libgcc/soft-fp/fixunssfsi.c	(revision 207735)
+++ libgcc/soft-fp/fixunssfsi.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a to 32bit unsigned integer
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/fixunstfti.c
===================================================================
--- libgcc/soft-fp/fixunstfti.c	(revision 207735)
+++ libgcc/soft-fp/fixunstfti.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert IEEE quad to 128bit unsigned integer
-   Copyright (C) 2007-2013 Free Software Foundation, Inc.
+   Copyright (C) 2007-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Uros Bizjak (ubizjak@gmail.com).
 
Index: libgcc/soft-fp/addsf3.c
===================================================================
--- libgcc/soft-fp/addsf3.c	(revision 207735)
+++ libgcc/soft-fp/addsf3.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a + b
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/addtf3.c
===================================================================
--- libgcc/soft-fp/addtf3.c	(revision 207735)
+++ libgcc/soft-fp/addtf3.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a + b
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/fixsfsi.c
===================================================================
--- libgcc/soft-fp/fixsfsi.c	(revision 207735)
+++ libgcc/soft-fp/fixsfsi.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a to 32bit signed integer
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/floattidf.c
===================================================================
--- libgcc/soft-fp/floattidf.c	(revision 207735)
+++ libgcc/soft-fp/floattidf.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a 128bit signed integer to IEEE double
-   Copyright (C) 2007-2013 Free Software Foundation, Inc.
+   Copyright (C) 2007-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Uros Bizjak (ubizjak@gmail.com).
 
Index: libgcc/soft-fp/floatditf.c
===================================================================
--- libgcc/soft-fp/floatditf.c	(revision 207735)
+++ libgcc/soft-fp/floatditf.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a 64bit signed integer to IEEE quad
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/fixtfti.c
===================================================================
--- libgcc/soft-fp/fixtfti.c	(revision 207735)
+++ libgcc/soft-fp/fixtfti.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert IEEE quad to 128bit signed integer
-   Copyright (C) 2007-2013 Free Software Foundation, Inc.
+   Copyright (C) 2007-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Uros Bizjak (ubizjak@gmail.com).
 
Index: libgcc/soft-fp/double.h
===================================================================
--- libgcc/soft-fp/double.h	(revision 207735)
+++ libgcc/soft-fp/double.h	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Definitions for IEEE Double Precision
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com),
 		  Jakub Jelinek (jj@ultra.linux.cz),
Index: libgcc/soft-fp/fixunsdfsi.c
===================================================================
--- libgcc/soft-fp/fixunsdfsi.c	(revision 207735)
+++ libgcc/soft-fp/fixunsdfsi.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a to 32bit unsigned integer
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/soft-fp.h
===================================================================
--- libgcc/soft-fp/soft-fp.h	(revision 207735)
+++ libgcc/soft-fp/soft-fp.h	(working copy)
@@ -1,5 +1,5 @@
 /* Software floating-point emulation.
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com),
 		  Jakub Jelinek (jj@ultra.linux.cz),
@@ -161,6 +161,9 @@
 # undef FP_ROUNDMODE
 # define FP_ROUNDMODE FP_RND_ZERO
 
+# undef _FP_TININESS_AFTER_ROUNDING
+# define _FP_TININESS_AFTER_ROUNDING 0
+
 #endif
 
 #define _FP_ROUND_NEAREST(wc, X)				\
Index: libgcc/soft-fp/unorddf2.c
===================================================================
--- libgcc/soft-fp/unorddf2.c	(revision 207735)
+++ libgcc/soft-fp/unorddf2.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return 1 iff a or b is a NaN, 0 otherwise.
-   Copyright (C) 2006-2013 Free Software Foundation, Inc.
+   Copyright (C) 2006-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Joseph Myers (joseph@codesourcery.com).
 
Index: libgcc/soft-fp/floatsisf.c
===================================================================
--- libgcc/soft-fp/floatsisf.c	(revision 207735)
+++ libgcc/soft-fp/floatsisf.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a 32bit signed integer to IEEE single
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/fixdfsi.c
===================================================================
--- libgcc/soft-fp/fixdfsi.c	(revision 207735)
+++ libgcc/soft-fp/fixdfsi.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a to 32bit signed integer
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/floattitf.c
===================================================================
--- libgcc/soft-fp/floattitf.c	(revision 207735)
+++ libgcc/soft-fp/floattitf.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a 128bit signed integer to IEEE quad
-   Copyright (C) 2007-2013 Free Software Foundation, Inc.
+   Copyright (C) 2007-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Uros Bizjak (ubizjak@gmail.com).
 
Index: libgcc/soft-fp/ledf2.c
===================================================================
--- libgcc/soft-fp/ledf2.c	(revision 207735)
+++ libgcc/soft-fp/ledf2.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return 0 iff a == b, 1 iff a > b, 2 iff a ? b, -1 iff a < b
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/quad.h
===================================================================
--- libgcc/soft-fp/quad.h	(revision 207735)
+++ libgcc/soft-fp/quad.h	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Definitions for IEEE Quad Precision.
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com),
 		  Jakub Jelinek (jj@ultra.linux.cz),
Index: libgcc/soft-fp/unordsf2.c
===================================================================
--- libgcc/soft-fp/unordsf2.c	(revision 207735)
+++ libgcc/soft-fp/unordsf2.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return 1 iff a or b is a NaN, 0 otherwise.
-   Copyright (C) 2006-2013 Free Software Foundation, Inc.
+   Copyright (C) 2006-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Joseph Myers (joseph@codesourcery.com).
 
Index: libgcc/soft-fp/fixunstfsi.c
===================================================================
--- libgcc/soft-fp/fixunstfsi.c	(revision 207735)
+++ libgcc/soft-fp/fixunstfsi.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a to 32bit unsigned integer
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/unordtf2.c
===================================================================
--- libgcc/soft-fp/unordtf2.c	(revision 207735)
+++ libgcc/soft-fp/unordtf2.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return 1 iff a or b is a NaN, 0 otherwise.
-   Copyright (C) 2006-2013 Free Software Foundation, Inc.
+   Copyright (C) 2006-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Joseph Myers (joseph@codesourcery.com).
 
Index: libgcc/soft-fp/floatdisf.c
===================================================================
--- libgcc/soft-fp/floatdisf.c	(revision 207735)
+++ libgcc/soft-fp/floatdisf.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a 64bit signed integer to IEEE single
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/lesf2.c
===================================================================
--- libgcc/soft-fp/lesf2.c	(revision 207735)
+++ libgcc/soft-fp/lesf2.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return 0 iff a == b, 1 iff a > b, 2 iff a ? b, -1 iff a < b
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/extendsfdf2.c
===================================================================
--- libgcc/soft-fp/extendsfdf2.c	(revision 207735)
+++ libgcc/soft-fp/extendsfdf2.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a converted to IEEE double
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/fixtfsi.c
===================================================================
--- libgcc/soft-fp/fixtfsi.c	(revision 207735)
+++ libgcc/soft-fp/fixtfsi.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a to 32bit signed integer
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/letf2.c
===================================================================
--- libgcc/soft-fp/letf2.c	(revision 207735)
+++ libgcc/soft-fp/letf2.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return 0 iff a == b, 1 iff a > b, 2 iff a ? b, -1 iff a < b
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/floatunsidf.c
===================================================================
--- libgcc/soft-fp/floatunsidf.c	(revision 207735)
+++ libgcc/soft-fp/floatunsidf.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a 32bit unsigned integer to IEEE double
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/divdf3.c
===================================================================
--- libgcc/soft-fp/divdf3.c	(revision 207735)
+++ libgcc/soft-fp/divdf3.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a / b
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/truncdfsf2.c
===================================================================
--- libgcc/soft-fp/truncdfsf2.c	(revision 207735)
+++ libgcc/soft-fp/truncdfsf2.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Truncate IEEE double into IEEE single
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/op-1.h
===================================================================
--- libgcc/soft-fp/op-1.h	(revision 207735)
+++ libgcc/soft-fp/op-1.h	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Basic one-word fraction declaration and manipulation.
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com),
 		  Jakub Jelinek (jj@ultra.linux.cz),
Index: libgcc/soft-fp/trunctfdf2.c
===================================================================
--- libgcc/soft-fp/trunctfdf2.c	(revision 207735)
+++ libgcc/soft-fp/trunctfdf2.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Truncate IEEE quad into IEEE double
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/floattisf.c
===================================================================
--- libgcc/soft-fp/floattisf.c	(revision 207735)
+++ libgcc/soft-fp/floattisf.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a 128bit signed integer to IEEE single
-   Copyright (C) 2007-2013 Free Software Foundation, Inc.
+   Copyright (C) 2007-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Uros Bizjak (ubizjak@gmail.com).
 
Index: libgcc/soft-fp/extendsftf2.c
===================================================================
--- libgcc/soft-fp/extendsftf2.c	(revision 207735)
+++ libgcc/soft-fp/extendsftf2.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a converted to IEEE quad
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/divsf3.c
===================================================================
--- libgcc/soft-fp/divsf3.c	(revision 207735)
+++ libgcc/soft-fp/divsf3.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a / b
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/floatunsitf.c
===================================================================
--- libgcc/soft-fp/floatunsitf.c	(revision 207735)
+++ libgcc/soft-fp/floatunsitf.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a 32bit unsigned integer to IEEE quad
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/divtf3.c
===================================================================
--- libgcc/soft-fp/divtf3.c	(revision 207735)
+++ libgcc/soft-fp/divtf3.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a / b
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/floatundidf.c
===================================================================
--- libgcc/soft-fp/floatundidf.c	(revision 207735)
+++ libgcc/soft-fp/floatundidf.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a 64bit unsigned integer to IEEE double
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/trunctfsf2.c
===================================================================
--- libgcc/soft-fp/trunctfsf2.c	(revision 207735)
+++ libgcc/soft-fp/trunctfsf2.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Truncate IEEE quad into IEEE single
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/extended.h
===================================================================
--- libgcc/soft-fp/extended.h	(revision 207735)
+++ libgcc/soft-fp/extended.h	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Definitions for IEEE Extended Precision.
-   Copyright (C) 1999-2013 Free Software Foundation, Inc.
+   Copyright (C) 1999-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Jakub Jelinek (jj@ultra.linux.cz).
 
Index: libgcc/soft-fp/trunctfxf2.c
===================================================================
--- libgcc/soft-fp/trunctfxf2.c	(revision 207735)
+++ libgcc/soft-fp/trunctfxf2.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Truncate IEEE quad into IEEE extended
-   Copyright (C) 2007-2013 Free Software Foundation, Inc.
+   Copyright (C) 2007-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Uros Bizjak (ubizjak@gmail.com).
 
Index: libgcc/soft-fp/negdf2.c
===================================================================
--- libgcc/soft-fp/negdf2.c	(revision 207735)
+++ libgcc/soft-fp/negdf2.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return -a
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/floatuntidf.c
===================================================================
--- libgcc/soft-fp/floatuntidf.c	(revision 207735)
+++ libgcc/soft-fp/floatuntidf.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a 128bit unsigned integer to IEEE double
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Uros Bizjak (ubizjak@gmail.com).
 
Index: libgcc/soft-fp/floatunditf.c
===================================================================
--- libgcc/soft-fp/floatunditf.c	(revision 207735)
+++ libgcc/soft-fp/floatunditf.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a 64bit unsigned integer to IEEE quad
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/fixunssfdi.c
===================================================================
--- libgcc/soft-fp/fixunssfdi.c	(revision 207735)
+++ libgcc/soft-fp/fixunssfdi.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a to 64bit unsigned integer
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/negsf2.c
===================================================================
--- libgcc/soft-fp/negsf2.c	(revision 207735)
+++ libgcc/soft-fp/negsf2.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return -a
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/negtf2.c
===================================================================
--- libgcc/soft-fp/negtf2.c	(revision 207735)
+++ libgcc/soft-fp/negtf2.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return -a
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/subdf3.c
===================================================================
--- libgcc/soft-fp/subdf3.c	(revision 207735)
+++ libgcc/soft-fp/subdf3.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a - b
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/single.h
===================================================================
--- libgcc/soft-fp/single.h	(revision 207735)
+++ libgcc/soft-fp/single.h	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Definitions for IEEE Single Precision.
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com),
 		  Jakub Jelinek (jj@ultra.linux.cz),
Index: libgcc/soft-fp/gedf2.c
===================================================================
--- libgcc/soft-fp/gedf2.c	(revision 207735)
+++ libgcc/soft-fp/gedf2.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return 0 iff a == b, 1 iff a > b, -2 iff a ? b, -1 iff a < b
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/muldf3.c
===================================================================
--- libgcc/soft-fp/muldf3.c	(revision 207735)
+++ libgcc/soft-fp/muldf3.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Return a * b
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/fixsfdi.c
===================================================================
--- libgcc/soft-fp/fixsfdi.c	(revision 207735)
+++ libgcc/soft-fp/fixsfdi.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a to 64bit signed integer
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: libgcc/soft-fp/floatunsisf.c
===================================================================
--- libgcc/soft-fp/floatunsisf.c	(revision 207735)
+++ libgcc/soft-fp/floatunsisf.c	(working copy)
@@ -1,6 +1,6 @@
 /* Software floating-point emulation.
    Convert a 32bit unsigned integer to IEEE single
-   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com) and
 		  Jakub Jelinek (jj@ultra.linux.cz).
Index: gcc/testsuite/gcc.dg/torture/float128-truncdf-underflow.c
===================================================================
--- gcc/testsuite/gcc.dg/torture/float128-truncdf-underflow.c	(revision 0)
+++ gcc/testsuite/gcc.dg/torture/float128-truncdf-underflow.c	(revision 0)
@@ -0,0 +1,27 @@
+/* Test truncation from __float128 to double uses after-rounding
+   tininess detection.  */
+
+/* { dg-do run { target i?86-*-* x86_64-*-* ia64-*-* } } */
+/* { dg-options "" } */
+/* { dg-require-effective-target fenv_exceptions } */
+
+#include <fenv.h>
+#include <stdlib.h>
+
+int
+main (void)
+{
+  volatile __float128 a = 0x0.fffffffffffffffp-1022q, b = 0x0.fffffffffffff8p-1022q;
+  volatile double r;
+  r = (double) a;
+  if (fetestexcept (FE_UNDERFLOW))
+    abort ();
+  if (r != 0x1p-1022)
+    abort ();
+  r = (double) b;
+  if (!fetestexcept (FE_UNDERFLOW))
+    abort ();
+  if (r != 0x1p-1022)
+    abort ();
+  exit (0);
+}
Index: gcc/testsuite/gcc.dg/torture/float128-truncsf-underflow.c
===================================================================
--- gcc/testsuite/gcc.dg/torture/float128-truncsf-underflow.c	(revision 0)
+++ gcc/testsuite/gcc.dg/torture/float128-truncsf-underflow.c	(revision 0)
@@ -0,0 +1,27 @@
+/* Test truncation from __float128 to float uses after-rounding
+   tininess detection.  */
+
+/* { dg-do run { target i?86-*-* x86_64-*-* ia64-*-* } } */
+/* { dg-options "" } */
+/* { dg-require-effective-target fenv_exceptions } */
+
+#include <fenv.h>
+#include <stdlib.h>
+
+int
+main (void)
+{
+  volatile __float128 a = 0x0.ffffffffffp-126q, b = 0x0.ffffffp-126q;
+  volatile float r;
+  r = (float) a;
+  if (fetestexcept (FE_UNDERFLOW))
+    abort ();
+  if (r != 0x1p-126f)
+    abort ();
+  r = (float) b;
+  if (!fetestexcept (FE_UNDERFLOW))
+    abort ();
+  if (r != 0x1p-126f)
+    abort ();
+  exit (0);
+}
Index: gcc/testsuite/gcc.dg/torture/float128-mul-underflow.c
===================================================================
--- gcc/testsuite/gcc.dg/torture/float128-mul-underflow.c	(revision 0)
+++ gcc/testsuite/gcc.dg/torture/float128-mul-underflow.c	(revision 0)
@@ -0,0 +1,21 @@
+/* Test __float128 multiplication uses after-rounding tininess
+   detection.  */
+
+/* { dg-do run { target i?86-*-* x86_64-*-* ia64-*-* } } */
+/* { dg-options "" } */
+/* { dg-require-effective-target fenv_exceptions } */
+
+#include <fenv.h>
+#include <stdlib.h>
+
+int
+main (void)
+{
+  volatile __float128 a = 0x1.fffffffffffffffp-16382q, b = 0x1.0000000000000008p-1q, c;
+  c = a * b;
+  if (fetestexcept (FE_UNDERFLOW))
+    abort ();
+  if (c != 0x1p-16382q)
+    abort ();
+  exit (0);
+}

-- 
Joseph S. Myers
joseph@codesourcery.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]