Daily bump.
[official-gcc.git] / libquadmath / sfp-machine.h
blob906a09e713955e97b7305883bf849ccd8bbaf917
1 /* libquadmath uses soft-fp only for sqrtq and only for
2 the positive finite case, so it doesn't care about
3 NaN representation, nor tininess after rounding vs.
4 before rounding, all it cares about is current rounding
5 mode and raising inexact exceptions. */
6 #if __SIZEOF_LONG__ == 8
7 #define _FP_W_TYPE_SIZE 64
8 #define _FP_I_TYPE long long
9 #define _FP_NANFRAC_Q _FP_QNANBIT_Q, 0
10 #else
11 #define _FP_W_TYPE_SIZE 32
12 #define _FP_I_TYPE int
13 #define _FP_NANFRAC_Q _FP_QNANBIT_Q, 0, 0, 0
14 #endif
15 #define _FP_W_TYPE unsigned _FP_I_TYPE
16 #define _FP_WS_TYPE signed _FP_I_TYPE
17 #define _FP_QNANNEGATEDP 0
18 #define _FP_NANSIGN_Q 1
19 #define _FP_KEEPNANFRACP 1
20 #define _FP_TININESS_AFTER_ROUNDING 0
21 #ifndef __BYTE_ORDER
22 #define __LITTLE_ENDIAN __ORDER_LITTLE_ENDIAN__
23 #define __BIG_ENDIAN __ORDER_BIG_ENDIAN__
24 #define __BYTE_ORDER __BYTE_ORDER__
25 #endif
26 #define _FP_DECL_EX \
27 unsigned int fp_roundmode __attribute__ ((unused)) = FP_RND_NEAREST;
28 #define FP_ROUNDMODE fp_roundmode
29 #define FP_INIT_ROUNDMODE \
30 do \
31 { \
32 switch (fegetround ()) \
33 { \
34 case FE_UPWARD: \
35 fp_roundmode = FP_RND_PINF; \
36 break; \
37 case FE_DOWNWARD: \
38 fp_roundmode = FP_RND_MINF; \
39 break; \
40 case FE_TOWARDZERO: \
41 fp_roundmode = FP_RND_ZERO; \
42 break; \
43 default: \
44 break; \
45 } \
46 } \
47 while (0)
48 #define FP_HANDLE_EXCEPTIONS \
49 do \
50 { \
51 if (_fex & FP_EX_INEXACT) \
52 { \
53 volatile double eight = 8.0; \
54 volatile double eps \
55 = DBL_EPSILON; \
56 eight += eps; \
57 } \
58 } \
59 while (0)