]> git.ipfire.org Git - thirdparty/glibc.git/blame - sysdeps/ieee754/ldbl-128/bits/floatn.h
Update copyright dates with scripts/update-copyrights
[thirdparty/glibc.git] / sysdeps / ieee754 / ldbl-128 / bits / floatn.h
CommitLineData
81325b12 1/* Macros to control TS 18661-3 glibc features on ldbl-128 platforms.
2b778ceb 2 Copyright (C) 2017-2021 Free Software Foundation, Inc.
81325b12
JM
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
5a82c748 17 <https://www.gnu.org/licenses/>. */
81325b12
JM
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
a23aa5b7
JM
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
015c6dc2
JM
53#ifndef __ASSEMBLER__
54
81325b12
JM
55/* Defined to concatenate the literal suffix to be used with _Float128
56 types, if __HAVE_FLOAT128 is 1. */
015c6dc2
JM
57# if __HAVE_FLOAT128
58# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
81325b12 59/* The literal suffix f128 exists only since GCC 7.0. */
015c6dc2
JM
60# define __f128(x) x##l
61# else
62# define __f128(x) x##f128
63# endif
81325b12 64# endif
81325b12
JM
65
66/* Defined to a complex binary128 type if __HAVE_FLOAT128 is 1. */
015c6dc2
JM
67# if __HAVE_FLOAT128
68# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
69# define __CFLOAT128 _Complex long double
70# else
71# define __CFLOAT128 _Complex _Float128
72# endif
81325b12 73# endif
81325b12
JM
74
75/* The remaining of this file provides support for older compilers. */
015c6dc2 76# if __HAVE_FLOAT128
81325b12
JM
77
78/* The type _Float128 exists only since GCC 7.0. */
015c6dc2 79# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
81325b12 80typedef long double _Float128;
015c6dc2 81# endif
81325b12
JM
82
83/* Various built-in functions do not exist before GCC 7.0. */
015c6dc2
JM
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
81325b12
JM
91# endif
92
015c6dc2 93#endif /* !__ASSEMBLER__. */
81325b12 94
797ba44b
JM
95#include <bits/floatn-common.h>
96
81325b12 97#endif /* _BITS_FLOATN_H */