]>
git.ipfire.org Git - thirdparty/glibc.git/blob - sysdeps/ieee754/ldbl-128/bits/floatn.h
1 /* Macros to control TS 18661-3 glibc features on ldbl-128 platforms.
2 Copyright (C) 2017-2018 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
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.
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.
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 <http://www.gnu.org/licenses/>. */
19 #ifndef _BITS_FLOATN_H
20 #define _BITS_FLOATN_H
23 #include <bits/long-double.h>
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
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
35 # define __HAVE_FLOAT128 0
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
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
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
51 #define __HAVE_FLOAT64X_LONG_DOUBLE __HAVE_FLOAT128
55 /* Defined to concatenate the literal suffix to be used with _Float128
56 types, if __HAVE_FLOAT128 is 1. */
58 # if !__GNUC_PREREQ (7, 0) || defined __cplusplus
59 /* The literal suffix f128 exists only since GCC 7.0. */
60 # define __f128(x) x##l
62 # define __f128(x) x##f128
66 /* Defined to a complex binary128 type if __HAVE_FLOAT128 is 1. */
68 # if !__GNUC_PREREQ (7, 0) || defined __cplusplus
69 # define __CFLOAT128 _Complex long double
71 # define __CFLOAT128 _Complex _Float128
75 /* The remaining of this file provides support for older compilers. */
78 /* The type _Float128 exists only since GCC 7.0. */
79 # if !__GNUC_PREREQ (7, 0) || defined __cplusplus
80 typedef long double _Float128
;
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))
93 #endif /* !__ASSEMBLER__. */
95 #include <bits/floatn-common.h>
97 #endif /* _BITS_FLOATN_H */