tetl
0.1.0
Embedded Template Library
Loading...
Searching...
No Matches
builtin_functions.hpp
Go to the documentation of this file.
1
// SPDX-License-Identifier: BSL-1.0
2
// SPDX-FileCopyrightText: Copyright (C) 2019 Tobias Hienzsch
3
4
#
ifndef
TETL_CONFIG_BUILTIN_FUNCTIONS_HPP
5
#
define
TETL_CONFIG_BUILTIN_FUNCTIONS_HPP
6
7
#
if
__has_builtin
(
__builtin_COLUMN
)
8
#
define
TETL_BUILTIN_COLUMN
(
)
__builtin_COLUMN
(
)
9
#
else
10
#
define
TETL_BUILTIN_COLUMN
(
)
0
11
#
endif
12
13
#
if
__has_builtin
(
__builtin_LINE
)
14
#
define
TETL_BUILTIN_LINE
(
)
__builtin_LINE
(
)
15
#
else
16
#
define
TETL_BUILTIN_LINE
(
)
0
17
#
endif
18
19
#
if
__has_builtin
(
__builtin_FILE
)
20
#
define
TETL_BUILTIN_FILE
(
)
__builtin_FILE
(
)
21
#
else
22
#
define
TETL_BUILTIN_FILE
(
)
__FILE__
23
#
endif
24
25
#
if
__has_builtin
(
__builtin_FUNCTION
)
26
#
define
TETL_BUILTIN_FUNCTION
(
)
__builtin_FUNCTION
(
)
27
#
else
28
#
define
TETL_BUILTIN_FUNCTION
(
)
""
29
#
endif
30
31
// UNREACHABLE
32
#
if
__has_builtin
(
__builtin_unreachable
)
33
#
define
TETL_BUILTIN_UNREACHABLE
__builtin_unreachable
(
)
34
#
elif
defined
(
TETL_COMPILER_MSVC
)
35
#
define
TETL_BUILTIN_UNREACHABLE
__assume
(
false
)
36
#
else
37
// https://stackoverflow.com/questions/6031819/emulating-gccs-builtin-unreachable
38
// Answer from user iammilind.
39
#
define
TETL_BUILTIN_UNREACHABLE
40
{
41
struct
etl_builtin_unreachable_t
{
42
etl_builtin_unreachable_t
&
operator
=
(
etl_builtin_unreachable_t
const
&
)
;
43
}
x
;
44
x
=
x
;
45
}
46
#
endif
47
48
// NAN
49
#
if
__has_builtin
(
__builtin_nanf
)
or
defined
(
TETL_COMPILER_MSVC
)
or
defined
(
TETL_COMPILER_GCC
)
50
#
define
TETL_BUILTIN_NANF
(
arg
)
(
__builtin_nanf
(
arg
)
)
51
#
else
52
#
define
TETL_BUILTIN_NANF
(
arg
)
(
0.0F
/
0.0F
)
53
#
endif
54
55
#
if
__has_builtin
(
__builtin_nan
)
or
defined
(
TETL_COMPILER_MSVC
)
or
defined
(
TETL_COMPILER_GCC
)
56
#
define
TETL_BUILTIN_NAN
(
arg
)
(
__builtin_nan
(
arg
)
)
57
#
else
58
#
define
TETL_BUILTIN_NAN
(
0.0
/
0.0
)
59
#
endif
60
61
#
if
__has_builtin
(
__builtin_nanl
)
or
defined
(
TETL_COMPILER_GCC
)
62
#
define
TETL_BUILTIN_NANL
(
arg
)
(
__builtin_nanl
(
arg
)
)
63
#
elif
defined
(
TETL_COMPILER_MSVC
)
64
#
define
TETL_BUILTIN_NANL
(
arg
)
(
__builtin_nan
(
arg
)
)
65
#
else
66
#
define
TETL_BUILTIN_NANL
(
arg
)
(
0.0L
/
0.0L
)
67
#
endif
68
69
// SIGNALING NAN
70
#
if
__has_builtin
(
__builtin_nansf
)
or
defined
(
TETL_COMPILER_MSVC
)
or
defined
(
TETL_COMPILER_GCC
)
71
#
define
TETL_BUILTIN_NANSF
(
arg
)
(
__builtin_nansf
(
arg
)
)
72
#
else
73
#
define
TETL_BUILTIN_NANSF
(
arg
)
(
0.0F
/
0.0F
)
74
#
endif
75
76
#
if
__has_builtin
(
__builtin_nans
)
or
defined
(
TETL_COMPILER_MSVC
)
or
defined
(
TETL_COMPILER_GCC
)
77
#
define
TETL_BUILTIN_NANS
(
arg
)
(
__builtin_nans
(
arg
)
)
78
#
else
79
#
define
TETL_BUILTIN_NANS
(
arg
)
(
0.0
/
0.0
)
80
#
endif
81
82
#
if
__has_builtin
(
__builtin_nansl
)
or
defined
(
TETL_COMPILER_GCC
)
83
#
define
TETL_BUILTIN_NANSL
(
arg
)
(
__builtin_nansl
(
arg
)
)
84
#
elif
defined
(
TETL_COMPILER_MSVC
)
85
#
define
TETL_BUILTIN_NANSL
(
arg
)
(
__builtin_nans
(
arg
)
)
86
#
else
87
#
define
TETL_BUILTIN_NANSL
(
arg
)
(
0.0L
/
0.0L
)
88
#
endif
89
90
// HUGE VAL
91
#
if
__has_builtin
(
__builtin_huge_valf
)
or
defined
(
TETL_COMPILER_MSVC
)
or
defined
(
TETL_COMPILER_GCC
)
92
#
define
TETL_BUILTIN_HUGE_VALF
(
__builtin_huge_valf
(
)
)
93
#
else
94
#
define
TETL_BUILTIN_HUGE_VALF
(
1.0F
/
0.0F
)
95
#
endif
96
97
#
if
__has_builtin
(
__builtin_huge_val
)
or
defined
(
TETL_COMPILER_MSVC
)
or
defined
(
TETL_COMPILER_GCC
)
98
#
define
TETL_BUILTIN_HUGE_VAL
(
__builtin_huge_val
(
)
)
99
#
else
100
#
define
TETL_BUILTIN_HUGE_VAL
(
1.0
/
0.0
)
101
#
endif
102
103
#
if
__has_builtin
(
__builtin_huge_vall
)
or
defined
(
TETL_COMPILER_GCC
)
104
#
define
TETL_BUILTIN_HUGE_VALL
(
__builtin_huge_vall
(
)
)
105
#
elif
defined
(
TETL_COMPILER_MSVC
)
106
#
define
TETL_BUILTIN_HUGE_VALL
(
__builtin_huge_val
(
)
)
107
#
else
108
#
define
TETL_BUILTIN_HUGE_VALL
(
1.0L
/
0.0L
)
109
#
endif
110
111
#
if
defined
(
TETL_COMPILER_CLANG
)
or
defined
(
TETL_COMPILER_MSVC
)
112
#
define
TETL_BUILTIN_INT_SEQ
(
T
,
N
)
__make_integer_seq
<
integer_sequence
,
T
,
N
>
113
#
else
114
#
define
TETL_BUILTIN_INT_SEQ
(
T
,
N
)
integer_sequence
<
T
,
__integer_pack
(
N
)
...
>
115
#
endif
116
117
#
endif
// TETL_CONFIG_BUILTIN_FUNCTIONS_HPP
include
etl
_config
builtin_functions.hpp
Generated on Sun Sep 7 2025 19:14:53 for tetl by
1.9.8