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
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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
#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) \