/*  DO NOT EDIT THIS FILE.

    It has been auto-edited by fixincludes from:

	"fixinc/tests/inc/bits/floatn.h"

    This had to be done to correct non-standard usages in the
    original, manufacturer supplied header file.  */



#if defined( GLIBC_CXX_FLOATN_1_CHECK )
#  if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
/* The literal suffix f128 exists only since GCC 7.0.  */
#   define __f128(x) x##l
#  else
#   define __f128(x) x##f128
#  endif
#  if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
/* The literal suffix (f128) exist for powerpc only since GCC 7.0.  */
#   if __LDBL_MANT_DIG__ == 113
#    define __f128(x) x##l
#   else
#    define __f128(x) x##q
#   endif
#  else
#   define __f128(x) x##f128
#  endif
#  if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
#   ifdef __NO_LONG_DOUBLE_MATH
#    define __f64(x) x##l
#   else
#    define __f64(x) x
#   endif
#  else
#   define __f64(x) x##f64
#  endif
#endif  /* GLIBC_CXX_FLOATN_1_CHECK */


#if defined( GLIBC_CXX_FLOATN_2_CHECK )
#  if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
typedef float _Float16 __attribute__ ((__mode__ (__HF__)));
#  endif
#  if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
typedef __float128 _Float128;
#  endif
#  if 0
#  elif !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
typedef __float128 _Float128;
#  endif
#endif  /* GLIBC_CXX_FLOATN_2_CHECK */


#if defined( GLIBC_CXX_FLOATN_3_CHECK )
#  if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
#   define __CFLOAT128 _Complex long double
#  else
#   define __CFLOAT128 _Complex _Float128
#  endif
#  if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
/* Add a typedef for older GCC compilers which don't natively support
   _Complex _Float128.  */
typedef _Complex float __cfloat128 __attribute__ ((__mode__ (__TC__)));
#   define __CFLOAT128 __cfloat128
#  else
#   define __CFLOAT128 _Complex _Float128
#  endif
#  if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
#   ifdef __NO_LONG_DOUBLE_MATH
#    define __CFLOAT64 _Complex long double
#   else
#    define __CFLOAT64 _Complex double
#   endif
#  else
#   define __CFLOAT64 _Complex _Float64
#  endif
#endif  /* GLIBC_CXX_FLOATN_3_CHECK */


#if defined( GLIBC_CXX_FLOATN_4_CHECK )
#  if __LDBL_MANT_DIG__ == 113 && defined __cplusplus && !__GNUC_PREREQ (13, 0)
typedef long double _Float128;
#   define __CFLOAT128 _Complex long double
#  endif
#endif  /* GLIBC_CXX_FLOATN_4_CHECK */


#if defined( GLIBC_CXX_FLOATN_5_CHECK )
#  if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
#   error "_Float128X supported but no constant suffix"
#  endif
#  if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
#   error "_Float128x supported but no type"
#  endif
#endif  /* GLIBC_CXX_FLOATN_5_CHECK */
