Blame sysdeps/powerpc/bits/floatn.h

Packit Service 82fcde
/* Macros to control TS 18661-3 glibc features on powerpc.
Packit Service 82fcde
   Copyright (C) 2017-2018 Free Software Foundation, Inc.
Packit Service 82fcde
   This file is part of the GNU C Library.
Packit Service 82fcde
Packit Service 82fcde
   The GNU C Library is free software; you can redistribute it and/or
Packit Service 82fcde
   modify it under the terms of the GNU Lesser General Public
Packit Service 82fcde
   License as published by the Free Software Foundation; either
Packit Service 82fcde
   version 2.1 of the License, or (at your option) any later version.
Packit Service 82fcde
Packit Service 82fcde
   The GNU C Library is distributed in the hope that it will be useful,
Packit Service 82fcde
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 82fcde
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 82fcde
   Lesser General Public License for more details.
Packit Service 82fcde
Packit Service 82fcde
   You should have received a copy of the GNU Lesser General Public
Packit Service 82fcde
   License along with the GNU C Library; if not, see
Packit Service 82fcde
   <http://www.gnu.org/licenses/>.  */
Packit Service 82fcde
Packit Service 82fcde
#ifndef _BITS_FLOATN_H
Packit Service 82fcde
#define _BITS_FLOATN_H
Packit Service 82fcde
Packit Service 82fcde
#include <features.h>
Packit Service 82fcde
#include <bits/long-double.h>
Packit Service 82fcde
Packit Service 82fcde
/* Defined to 1 if the current compiler invocation provides a
Packit Service 82fcde
   floating-point type with the IEEE 754 binary128 format, and this glibc
Packit Service 82fcde
   includes corresponding *f128 interfaces for it.  */
Packit Service 82fcde
#if defined _ARCH_PWR8 && defined __LITTLE_ENDIAN__ && (_CALL_ELF == 2) \
Packit Service 82fcde
    && defined __FLOAT128__ && !defined __NO_LONG_DOUBLE_MATH
Packit Service 82fcde
# define __HAVE_FLOAT128 1
Packit Service 82fcde
#else
Packit Service 82fcde
# define __HAVE_FLOAT128 0
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
/* Defined to 1 if __HAVE_FLOAT128 is 1 and the type is ABI-distinct
Packit Service 82fcde
   from the default float, double and long double types in this glibc, i.e.
Packit Service 82fcde
   calls to the binary128 functions go to *f128 symbols instead of *l.  */
Packit Service 82fcde
#if __HAVE_FLOAT128
Packit Service 82fcde
# define __HAVE_DISTINCT_FLOAT128 1
Packit Service 82fcde
#else
Packit Service 82fcde
# define __HAVE_DISTINCT_FLOAT128 0
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
/* Defined to 1 if the current compiler invocation provides a
Packit Service 82fcde
   floating-point type with the right format for _Float64x, and this
Packit Service 82fcde
   glibc includes corresponding *f64x interfaces for it.  */
Packit Service 82fcde
#define __HAVE_FLOAT64X __HAVE_FLOAT128
Packit Service 82fcde
Packit Service 82fcde
/* Defined to 1 if __HAVE_FLOAT64X is 1 and _Float64x has the format
Packit Service 82fcde
   of long double.  Otherwise, if __HAVE_FLOAT64X is 1, _Float64x has
Packit Service 82fcde
   the format of _Float128, which must be different from that of long
Packit Service 82fcde
   double.  */
Packit Service 82fcde
#define __HAVE_FLOAT64X_LONG_DOUBLE 0
Packit Service 82fcde
Packit Service 82fcde
#ifndef __ASSEMBLER__
Packit Service 82fcde
Packit Service 82fcde
/* Defined to concatenate the literal suffix to be used with _Float128
Packit Service 82fcde
   types, if __HAVE_FLOAT128 is 1. */
Packit Service 82fcde
# if __HAVE_FLOAT128
Packit Service 82fcde
#  if !__GNUC_PREREQ (7, 0) || defined __cplusplus
Packit Service 82fcde
/* The literal suffix (f128) exist for powerpc only since GCC 7.0.  */
Packit Service 82fcde
#   if __LDBL_MANT_DIG__ == 113
Packit Service 82fcde
#    define __f128(x) x##l
Packit Service 82fcde
#   else
Packit Service 82fcde
#    define __f128(x) x##q
Packit Service 82fcde
#   endif
Packit Service 82fcde
#  else
Packit Service 82fcde
#   define __f128(x) x##f128
Packit Service 82fcde
#  endif
Packit Service 82fcde
# endif
Packit Service 82fcde
Packit Service 82fcde
/* Defined to a complex binary128 type if __HAVE_FLOAT128 is 1.  */
Packit Service 82fcde
# if __HAVE_FLOAT128
Packit Service 82fcde
#  if __LDBL_MANT_DIG__ == 113 && defined __cplusplus
Packit Service 82fcde
typedef long double _Float128;
Packit Service 82fcde
#   define __CFLOAT128 _Complex long double
Packit Service 82fcde
#  elif !__GNUC_PREREQ (7, 0) || defined __cplusplus
Packit Service 82fcde
/* The type _Float128 exist for powerpc only since GCC 7.0.  */
Packit Service 82fcde
typedef __float128 _Float128;
Packit Service 82fcde
/* Add a typedef for older GCC and C++ compilers which don't natively support
Packit Service 82fcde
   _Complex _Float128.  */
Packit Service 82fcde
typedef _Complex float __cfloat128 __attribute__ ((__mode__ (__KC__)));
Packit Service 82fcde
#   define __CFLOAT128 __cfloat128
Packit Service 82fcde
#  else
Packit Service 82fcde
#   define __CFLOAT128 _Complex _Float128
Packit Service 82fcde
#  endif
Packit Service 82fcde
# endif
Packit Service 82fcde
Packit Service 82fcde
/* The remaining of this file provides support for older compilers.  */
Packit Service 82fcde
# if __HAVE_FLOAT128
Packit Service 82fcde
/* Builtin __builtin_huge_valf128 doesn't exist before GCC 7.0.  */
Packit Service 82fcde
#  if !__GNUC_PREREQ (7, 0)
Packit Service 82fcde
#   define __builtin_huge_valf128() ((_Float128) __builtin_huge_val ())
Packit Service 82fcde
#  endif
Packit Service 82fcde
Packit Service 82fcde
/* The following builtins (suffixed with 'q') are available in GCC >= 6.2,
Packit Service 82fcde
   which is the minimum version required for float128 support on powerpc64le.
Packit Service 82fcde
   Since GCC 7.0 the builtins suffixed with f128 are also available, then
Packit Service 82fcde
   there is no need to redefined them.  */
Packit Service 82fcde
#  if !__GNUC_PREREQ (7, 0)
Packit Service 82fcde
#   define __builtin_copysignf128 __builtin_copysignq
Packit Service 82fcde
#   define __builtin_fabsf128 __builtin_fabsq
Packit Service 82fcde
#   define __builtin_inff128 __builtin_infq
Packit Service 82fcde
#   define __builtin_nanf128 __builtin_nanq
Packit Service 82fcde
#   define __builtin_nansf128 __builtin_nansq
Packit Service 82fcde
#  endif
Packit Service 82fcde
Packit Service 82fcde
/* In math/math.h, __MATH_TG will expand signbit to __builtin_signbit*,
Packit Service 82fcde
   e.g.: __builtin_signbitf128, before GCC 6.  However, there has never
Packit Service 82fcde
   been a __builtin_signbitf128 in GCC and the type-generic builtin is
Packit Service 82fcde
   only available since GCC 6.  */
Packit Service 82fcde
#  if !__GNUC_PREREQ (6, 0)
Packit Service 82fcde
#   define __builtin_signbitf128 __signbitf128
Packit Service 82fcde
#  endif
Packit Service 82fcde
Packit Service 82fcde
# endif
Packit Service 82fcde
Packit Service 82fcde
#endif /* !__ASSEMBLER__.  */
Packit Service 82fcde
Packit Service 82fcde
#include <bits/floatn-common.h>
Packit Service 82fcde
Packit Service 82fcde
#endif /* _BITS_FLOATN_H */