Blame sysdeps/powerpc/powerpc64/le/fpu/sfp-machine.h

Packit Service 82fcde
#define _FP_W_TYPE_SIZE		64
Packit Service 82fcde
#define _FP_W_TYPE		unsigned long long
Packit Service 82fcde
#define _FP_WS_TYPE		signed long long
Packit Service 82fcde
#define _FP_I_TYPE		long long
Packit Service 82fcde
Packit Service 82fcde
typedef int TItype __attribute__ ((mode (TI)));
Packit Service 82fcde
typedef unsigned int UTItype __attribute__ ((mode (TI)));
Packit Service 82fcde
Packit Service 82fcde
#define TI_BITS (__CHAR_BIT__ * (int)sizeof(TItype))
Packit Service 82fcde
Packit Service 82fcde
/* The type of the result of a floating point comparison.  This must
Packit Service 82fcde
   match `__libgcc_cmp_return__' in GCC for the target.  */
Packit Service 82fcde
typedef int __gcc_CMPtype __attribute__ ((mode (__libgcc_cmp_return__)));
Packit Service 82fcde
#define CMPtype __gcc_CMPtype
Packit Service 82fcde
Packit Service 82fcde
#define _FP_MUL_MEAT_S(R,X,Y)				\
Packit Service 82fcde
  _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm)
Packit Service 82fcde
Packit Service 82fcde
#define _FP_MUL_MEAT_D(R,X,Y)				\
Packit Service 82fcde
  _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm)
Packit Service 82fcde
#define _FP_MUL_MEAT_Q(R,X,Y)				\
Packit Service 82fcde
  _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm)
Packit Service 82fcde
Packit Service 82fcde
#define _FP_DIV_MEAT_S(R,X,Y)	_FP_DIV_MEAT_1_loop(S,R,X,Y)
Packit Service 82fcde
Packit Service 82fcde
#define _FP_DIV_MEAT_D(R,X,Y)	_FP_DIV_MEAT_1_udiv(D,R,X,Y)
Packit Service 82fcde
#define _FP_DIV_MEAT_Q(R,X,Y)   _FP_DIV_MEAT_2_udiv(Q,R,X,Y)
Packit Service 82fcde
Packit Service 82fcde
#define _FP_NANFRAC_S		((_FP_QNANBIT_S << 1) - 1)
Packit Service 82fcde
Packit Service 82fcde
#define _FP_NANFRAC_D		((_FP_QNANBIT_D << 1) - 1)
Packit Service 82fcde
#define _FP_NANFRAC_Q		((_FP_QNANBIT_Q << 1) - 1), -1
Packit Service 82fcde
Packit Service 82fcde
#define _FP_NANSIGN_S		0
Packit Service 82fcde
#define _FP_NANSIGN_D		0
Packit Service 82fcde
#define _FP_NANSIGN_Q		0
Packit Service 82fcde
Packit Service 82fcde
#define _FP_KEEPNANFRACP 1
Packit Service 82fcde
#define _FP_QNANNEGATEDP 0
Packit Service 82fcde
Packit Service 82fcde
/* Someone please check this.  */
Packit Service 82fcde
#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP)			\
Packit Service 82fcde
  do {								\
Packit Service 82fcde
    if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs)		\
Packit Service 82fcde
	&& !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs))	\
Packit Service 82fcde
      {								\
Packit Service 82fcde
	R##_s = Y##_s;						\
Packit Service 82fcde
	_FP_FRAC_COPY_##wc(R,Y);				\
Packit Service 82fcde
      }								\
Packit Service 82fcde
    else							\
Packit Service 82fcde
      {								\
Packit Service 82fcde
	R##_s = X##_s;						\
Packit Service 82fcde
	_FP_FRAC_COPY_##wc(R,X);				\
Packit Service 82fcde
      }								\
Packit Service 82fcde
    R##_c = FP_CLS_NAN;						\
Packit Service 82fcde
  } while (0)
Packit Service 82fcde
Packit Service 82fcde
#define _FP_TININESS_AFTER_ROUNDING 0
Packit Service 82fcde
Packit Service 82fcde
#define	__LITTLE_ENDIAN	1234
Packit Service 82fcde
#define	__BIG_ENDIAN	4321
Packit Service 82fcde
#define	__BYTE_ORDER	__LITTLE_ENDIAN
Packit Service 82fcde
Packit Service 82fcde
/* Only provide exception support if we have hardware floating point using
Packit Service 82fcde
   floating point registers and we can execute the mtfsf instruction.  This
Packit Service 82fcde
   would only be true if we are using the emulation routines for IEEE 128-bit
Packit Service 82fcde
   floating point on pre-ISA 3.0 machines without the IEEE 128-bit floating
Packit Service 82fcde
   point support.  */
Packit Service 82fcde
Packit Service 82fcde
#ifdef __FLOAT128__
Packit Service 82fcde
#define ISA_BIT(x) (1LL << (63 - x))
Packit Service 82fcde
Packit Service 82fcde
/* Use the same bits of the FPSCR.  */
Packit Service 82fcde
# define FP_EX_INVALID		ISA_BIT(34)
Packit Service 82fcde
# define FP_EX_OVERFLOW		ISA_BIT(35)
Packit Service 82fcde
# define FP_EX_UNDERFLOW	ISA_BIT(36)
Packit Service 82fcde
# define FP_EX_DIVZERO		ISA_BIT(37)
Packit Service 82fcde
# define FP_EX_INEXACT		ISA_BIT(38)
Packit Service 82fcde
# define FP_EX_ALL		(FP_EX_INVALID | FP_EX_OVERFLOW		\
Packit Service 82fcde
				 | FP_EX_UNDERFLOW | FP_EX_DIVZERO	\
Packit Service 82fcde
				 | FP_EX_INEXACT)
Packit Service 82fcde
Packit Service 82fcde
void __sfp_handle_exceptions (int);
Packit Service 82fcde
Packit Service 82fcde
# define FP_HANDLE_EXCEPTIONS			\
Packit Service 82fcde
  do {						\
Packit Service 82fcde
    if (__builtin_expect (_fex, 0))		\
Packit Service 82fcde
      __sfp_handle_exceptions (_fex);		\
Packit Service 82fcde
  } while (0);
Packit Service 82fcde
Packit Service 82fcde
/* The FP_EX_* bits track whether the exception has occurred.  This macro
Packit Service 82fcde
   must set the FP_EX_* bits of those exceptions which are configured to
Packit Service 82fcde
   trap.  The FPSCR bit which indicates this is 22 ISA bits above the
Packit Service 82fcde
   respective FP_EX_* bit.  Note, the ISA labels bits from msb to lsb,
Packit Service 82fcde
   so 22 ISA bits above is 22 bits below when counted from the lsb.  */
Packit Service 82fcde
# define FP_TRAPPING_EXCEPTIONS ((_fpscr.i << 22) & FP_EX_ALL)
Packit Service 82fcde
Packit Service 82fcde
# define FP_RND_NEAREST	0x0
Packit Service 82fcde
# define FP_RND_ZERO	0x1
Packit Service 82fcde
# define FP_RND_PINF	0x2
Packit Service 82fcde
# define FP_RND_MINF	0x3
Packit Service 82fcde
# define FP_RND_MASK	0x3
Packit Service 82fcde
Packit Service 82fcde
# define _FP_DECL_EX \
Packit Service 82fcde
  union { unsigned long long i; double d; } _fpscr __attribute__ ((unused)) = \
Packit Service 82fcde
	{ .i = FP_RND_NEAREST }
Packit Service 82fcde
Packit Service 82fcde
#define FP_INIT_ROUNDMODE			\
Packit Service 82fcde
  do {						\
Packit Service 82fcde
    __asm__ __volatile__ ("mffs %0"		\
Packit Service 82fcde
			  : "=f" (_fpscr.d));	\
Packit Service 82fcde
  } while (0)
Packit Service 82fcde
Packit Service 82fcde
# define FP_ROUNDMODE	(_fpscr.i & FP_RND_MASK)
Packit Service 82fcde
#endif	/* !__FLOAT128__ */