diff options
-rw-r--r-- | ChangeLog | 18 | ||||
-rw-r--r-- | soft-fp/floatditf.c | 3 | ||||
-rw-r--r-- | soft-fp/floatsidf.c | 3 | ||||
-rw-r--r-- | soft-fp/floatsitf.c | 3 | ||||
-rw-r--r-- | soft-fp/floatunditf.c | 3 | ||||
-rw-r--r-- | soft-fp/floatunsidf.c | 3 | ||||
-rw-r--r-- | soft-fp/floatunsitf.c | 3 | ||||
-rw-r--r-- | soft-fp/soft-fp.h | 24 |
8 files changed, 48 insertions, 12 deletions
diff --git a/ChangeLog b/ChangeLog index d8b9b7eab1..eb1a2c7dd0 100644 --- 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 diff --git a/soft-fp/floatditf.c b/soft-fp/floatditf.c index 68da6c60b0..7f5e3b0456 100644 --- a/soft-fp/floatditf.c +++ b/soft-fp/floatditf.c @@ -28,18 +28,17 @@ 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; } diff --git a/soft-fp/floatsidf.c b/soft-fp/floatsidf.c index ec578fba79..967a83fbfe 100644 --- a/soft-fp/floatsidf.c +++ b/soft-fp/floatsidf.c @@ -28,18 +28,17 @@ 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; } diff --git a/soft-fp/floatsitf.c b/soft-fp/floatsitf.c index 6e24b9ea63..a2c3451cf4 100644 --- a/soft-fp/floatsitf.c +++ b/soft-fp/floatsitf.c @@ -28,18 +28,17 @@ 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; } diff --git a/soft-fp/floatunditf.c b/soft-fp/floatunditf.c index fff73fdb67..e178dea304 100644 --- a/soft-fp/floatunditf.c +++ b/soft-fp/floatunditf.c @@ -28,19 +28,18 @@ 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; } diff --git a/soft-fp/floatunsidf.c b/soft-fp/floatunsidf.c index 548dc7c0c4..3d9656f5fc 100644 --- a/soft-fp/floatunsidf.c +++ b/soft-fp/floatunsidf.c @@ -28,18 +28,17 @@ 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; } diff --git a/soft-fp/floatunsitf.c b/soft-fp/floatunsitf.c index 1099c2ee84..e94ae926b7 100644 --- a/soft-fp/floatunsitf.c +++ b/soft-fp/floatunsitf.c @@ -28,19 +28,18 @@ 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; } diff --git a/soft-fp/soft-fp.h b/soft-fp/soft-fp.h index 8a22a11e20..d6c4b683b8 100644 --- a/soft-fp/soft-fp.h +++ b/soft-fp/soft-fp.h @@ -142,6 +142,30 @@ #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) \ |