soft-fp: add macro FP_NO_EXCEPTIONS.
authorJoseph Myers <joseph@codesourcery.com>
Sat, 12 Oct 2013 12:20:12 +0000 (12:20 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Sat, 12 Oct 2013 12:20:12 +0000 (12:20 +0000)
ChangeLog
soft-fp/floatditf.c
soft-fp/floatsidf.c
soft-fp/floatsitf.c
soft-fp/floatunditf.c
soft-fp/floatunsidf.c
soft-fp/floatunsitf.c
soft-fp/soft-fp.h

index d8b9b7e..eb1a2c7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,23 @@
 2013-10-12  Joseph Myers  <joseph@codesourcery.com>
 
+       * soft-fp/soft-fp.h [FP_NO_EXCEPTIONS] (FP_SET_EXCEPTION):
+       Undefine and redefine.
+       [FP_NO_EXCEPTIONS] (FP_CUR_EXCEPTIONS): Likewise.
+       [FP_NO_EXCEPTIONS] (FP_TRAPPING_EXCEPTIONS): Likewise.
+       [FP_NO_EXCEPTIONS] (FP_ROUNDMODE): Likewise.
+       * soft-fp/floatditf.c (FP_NO_EXCEPTIONS): Define macro.
+       (__floatditf): Don't use FP_DECL_EX or FP_HANDLE_EXCEPTIONS.
+       * soft-fp/floatsidf.c (FP_NO_EXCEPTIONS): Define macro.
+       (__floatsidf): Don't use FP_DECL_EX or FP_HANDLE_EXCEPTIONS.
+       * soft-fp/floatsitf.c (FP_NO_EXCEPTIONS): Define macro.
+       (__floatsitf): Don't use FP_DECL_EX or FP_HANDLE_EXCEPTIONS.
+       * soft-fp/floatunditf.c (FP_NO_EXCEPTIONS): Define macro.
+       (__floatunditf): Don't use FP_DECL_EX or FP_HANDLE_EXCEPTIONS.
+       * soft-fp/floatunsidf.c (FP_NO_EXCEPTIONS): Define macro.
+       (__floatunsidf): Don't use FP_DECL_EX or FP_HANDLE_EXCEPTIONS.
+       * soft-fp/floatunsitf.c (FP_NO_EXCEPTIONS): Define macro.
+       (__floatunsitf): Don't use FP_DECL_EX or FP_HANDLE_EXCEPTIONS.
+
        [BZ #16032]
        * soft-fp/op-2.h (_FP_DIV_MEAT_2_udiv): Shift numerator right
        without decrementing exponent if mantissa >= that for the
index 68da6c6..7f5e3b0 100644 (file)
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#define FP_NO_EXCEPTIONS
 #include "soft-fp.h"
 #include "quad.h"
 
 TFtype __floatditf(DItype i)
 {
-  FP_DECL_EX;
   FP_DECL_Q(A);
   TFtype a;
 
   FP_FROM_INT_Q(A, i, DI_BITS, UDItype);
   FP_PACK_RAW_Q(a, A);
-  FP_HANDLE_EXCEPTIONS;
 
   return a;
 }
index ec578fb..967a83f 100644 (file)
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#define FP_NO_EXCEPTIONS
 #include "soft-fp.h"
 #include "double.h"
 
 DFtype __floatsidf(SItype i)
 {
-  FP_DECL_EX;
   FP_DECL_D(A);
   DFtype a;
 
   FP_FROM_INT_D(A, i, SI_BITS, USItype);
   FP_PACK_RAW_D(a, A);
-  FP_HANDLE_EXCEPTIONS;
 
   return a;
 }
index 6e24b9e..a2c3451 100644 (file)
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#define FP_NO_EXCEPTIONS
 #include "soft-fp.h"
 #include "quad.h"
 
 TFtype __floatsitf(SItype i)
 {
-  FP_DECL_EX;
   FP_DECL_Q(A);
   TFtype a;
 
   FP_FROM_INT_Q(A, i, SI_BITS, USItype);
   FP_PACK_RAW_Q(a, A);
-  FP_HANDLE_EXCEPTIONS;
 
   return a;
 }
index fff73fd..e178dea 100644 (file)
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#define FP_NO_EXCEPTIONS
 #include "soft-fp.h"
 #include "quad.h"
 
 TFtype
 __floatunditf(UDItype i)
 {
-  FP_DECL_EX;
   FP_DECL_Q(A);
   TFtype a;
 
   FP_FROM_INT_Q(A, i, DI_BITS, UDItype);
   FP_PACK_RAW_Q(a, A);
-  FP_HANDLE_EXCEPTIONS;
 
   return a;
 }
index 548dc7c..3d9656f 100644 (file)
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#define FP_NO_EXCEPTIONS
 #include "soft-fp.h"
 #include "double.h"
 
 DFtype __floatunsidf(USItype i)
 {
-  FP_DECL_EX;
   FP_DECL_D(A);
   DFtype a;
 
   FP_FROM_INT_D(A, i, SI_BITS, USItype);
   FP_PACK_RAW_D(a, A);
-  FP_HANDLE_EXCEPTIONS;
 
   return a;
 }
index 1099c2e..e94ae92 100644 (file)
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#define FP_NO_EXCEPTIONS
 #include "soft-fp.h"
 #include "quad.h"
 
 TFtype
 __floatunsitf(USItype i)
 {
-  FP_DECL_EX;
   FP_DECL_Q(A);
   TFtype a;
 
   FP_FROM_INT_Q(A, i, SI_BITS, USItype);
   FP_PACK_RAW_Q(a, A);
-  FP_HANDLE_EXCEPTIONS;
 
   return a;
 }
index 8a22a11..d6c4b68 100644 (file)
 #define FP_TRAPPING_EXCEPTIONS 0
 #endif
 
+/* A file using soft-fp may define FP_NO_EXCEPTIONS before including
+   soft-fp.h to indicate that, although a macro used there could raise
+   exceptions, or do rounding and potentially thereby raise
+   exceptions, for some arguments, for the particular arguments used
+   in that file no exceptions or rounding can occur.  Such a file
+   should not itself use macros relating to handling exceptions and
+   rounding modes; this is only for indirect uses (in particular, in
+   _FP_FROM_INT and the macros it calls).  */
+#ifdef FP_NO_EXCEPTIONS
+
+#undef FP_SET_EXCEPTION
+#define FP_SET_EXCEPTION(ex) do {} while (0)
+
+#undef FP_CUR_EXCEPTIONS
+#define FP_CUR_EXCEPTIONS 0
+
+#undef FP_TRAPPING_EXCEPTIONS
+#define FP_TRAPPING_EXCEPTIONS 0
+
+#undef FP_ROUNDMODE
+#define FP_ROUNDMODE FP_RND_ZERO
+
+#endif
+
 #define _FP_ROUND_NEAREST(wc, X)                       \
 do {                                                   \
     if ((_FP_FRAC_LOW_##wc(X) & 15) != _FP_WORK_ROUND) \