(root)/
glibc-2.38/
sysdeps/
mips/
ieee754/
bits/
floatn.h
       1  /* Macros to control TS 18661-3 glibc features on MIPS platforms.
       2     Copyright (C) 2017-2023 Free Software Foundation, Inc.
       3     This file is part of the GNU C Library.
       4  
       5     The GNU C Library is free software; you can redistribute it and/or
       6     modify it under the terms of the GNU Lesser General Public
       7     License as published by the Free Software Foundation; either
       8     version 2.1 of the License, or (at your option) any later version.
       9  
      10     The GNU C Library is distributed in the hope that it will be useful,
      11     but WITHOUT ANY WARRANTY; without even the implied warranty of
      12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      13     Lesser General Public License for more details.
      14  
      15     You should have received a copy of the GNU Lesser General Public
      16     License along with the GNU C Library; if not, see
      17     <https://www.gnu.org/licenses/>.  */
      18  
      19  #ifndef _BITS_FLOATN_H
      20  #define _BITS_FLOATN_H
      21  
      22  #include <features.h>
      23  #include <bits/long-double.h>
      24  
      25  /* Defined to 1 if the current compiler invocation provides a
      26     floating-point type with the IEEE 754 binary128 format, and this
      27     glibc includes corresponding *f128 interfaces for it.  */
      28  #ifndef __NO_LONG_DOUBLE_MATH
      29  # define __HAVE_FLOAT128 1
      30  #else
      31  /* glibc does not support _Float128 for platforms where long double is
      32     normally binary128 when building with long double as binary64.
      33     GCC's default for supported scalar modes does not support it either
      34     in that case.  */
      35  # define __HAVE_FLOAT128 0
      36  #endif
      37  
      38  /* Defined to 1 if __HAVE_FLOAT128 is 1 and the type is ABI-distinct
      39     from the default float, double and long double types in this glibc.  */
      40  #define __HAVE_DISTINCT_FLOAT128 0
      41  
      42  /* Defined to 1 if the current compiler invocation provides a
      43     floating-point type with the right format for _Float64x, and this
      44     glibc includes corresponding *f64x interfaces for it.  */
      45  #define __HAVE_FLOAT64X __HAVE_FLOAT128
      46  
      47  /* Defined to 1 if __HAVE_FLOAT64X is 1 and _Float64x has the format
      48     of long double.  Otherwise, if __HAVE_FLOAT64X is 1, _Float64x has
      49     the format of _Float128, which must be different from that of long
      50     double.  */
      51  #define __HAVE_FLOAT64X_LONG_DOUBLE __HAVE_FLOAT128
      52  
      53  #ifndef __ASSEMBLER__
      54  
      55  /* Defined to concatenate the literal suffix to be used with _Float128
      56     types, if __HAVE_FLOAT128 is 1. */
      57  # if __HAVE_FLOAT128
      58  #  if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
      59  /* The literal suffix f128 exists only since GCC 7.0.  */
      60  #   define __f128(x) x##l
      61  #  else
      62  #   define __f128(x) x##f128
      63  #  endif
      64  # endif
      65  
      66  /* Defined to a complex binary128 type if __HAVE_FLOAT128 is 1.  */
      67  # if __HAVE_FLOAT128
      68  #  if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
      69  #   define __CFLOAT128 _Complex long double
      70  #  else
      71  #   define __CFLOAT128 _Complex _Float128
      72  #  endif
      73  # endif
      74  
      75  /* The remaining of this file provides support for older compilers.  */
      76  # if __HAVE_FLOAT128
      77  
      78  /* The type _Float128 exists only since GCC 7.0.  */
      79  #  if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
      80  typedef long double _Float128;
      81  #  endif
      82  
      83  /* Various built-in functions do not exist before GCC 7.0.  */
      84  #  if !__GNUC_PREREQ (7, 0)
      85  #   define __builtin_huge_valf128() (__builtin_huge_vall ())
      86  #   define __builtin_inff128() (__builtin_infl ())
      87  #   define __builtin_nanf128(x) (__builtin_nanl (x))
      88  #   define __builtin_nansf128(x) (__builtin_nansl (x))
      89  #  endif
      90  
      91  # endif
      92  
      93  #endif /* !__ASSEMBLER__.  */
      94  
      95  #include <bits/floatn-common.h>
      96  
      97  #endif /* _BITS_FLOATN_H */