2
0
mirror of git://sourceware.org/git/glibc.git synced 2025-04-12 14:21:18 +08:00

soft-fp: add macro FP_NO_EXCEPTIONS.

This commit is contained in:
Joseph Myers 2013-10-12 12:20:12 +00:00
parent 8399acaf7c
commit 8edc4a11cf
8 changed files with 48 additions and 12 deletions

@ -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

@ -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;
}

@ -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;
}

@ -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;
}

@ -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;
}

@ -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;
}

@ -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;
}

@ -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) \