1 /* intrinsics.def
-- Definitions for D compiler intrinsics.
2 Copyright (C
) 2014-2021 Free Software Foundation
, Inc.
4 GCC is free software
; you can redistribute it and
/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation
; either version
3, or (at your option
)
9 GCC is distributed in the hope that it will be useful
,
10 but WITHOUT ANY WARRANTY
; without even the implied warranty of
11 MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with GCC
; see the file COPYING3. If not see
16 <http
://www.gnu.org
/licenses
/>.
*/
18 /* DEF_D_INTRINSIC (CODE
, BUILTIN
, NAME
, MODULE, DECO
, CTFE
)
19 CODE The enum code used to refer to this intrinsic.
20 BUILTIN The enum code used to reference the function DECL_FUNCTION_CODE
,
21 if the intrinsic can be mapped
1:1 to a GCC built
-in.
22 NAME The name of this intrinsic as a string.
23 MODULE The name of the module which the intrinsic belongs to as a string.
24 DECO The function signature decoration of the intrinsic.
25 CTFE True if the function is only handled as a built
-in during CTFE
,
26 otherwise the runtime implementation is used.
28 Used for declaring internally recognized functions that either map to a
29 GCC builtin
, or are specially handled by the compiler.
*/
31 /* A D built
-in that has no runtime implementation.
*/
32 #define
DEF_D_BUILTIN(C
, B
, N
, M
, D
) \
33 DEF_D_INTRINSIC (C
, B
, N
, M
, D
, false
)
35 /* A D built
-in that is specially recognized only during CTFE.
*/
36 #define
DEF_CTFE_BUILTIN(C
, B
, N
, M
, D
) \
37 DEF_D_INTRINSIC (C
, B
, N
, M
, D
, true
)
39 DEF_D_BUILTIN (INTRINSIC_NONE
, BUILT_IN_NONE
, 0, 0, 0)
41 /* core.bitop intrinsics.
*/
43 DEF_D_BUILTIN (INTRINSIC_BSF
, BUILT_IN_NONE
, "bsf", "core.bitop",
45 DEF_D_BUILTIN (INTRINSIC_BSR
, BUILT_IN_NONE
, "bsr", "core.bitop",
47 DEF_D_BUILTIN (INTRINSIC_BT
, BUILT_IN_NONE
, "bt", "core.bitop",
49 DEF_D_BUILTIN (INTRINSIC_BTC
, BUILT_IN_NONE
, "btc", "core.bitop",
51 DEF_D_BUILTIN (INTRINSIC_BTR
, BUILT_IN_NONE
, "btr", "core.bitop",
53 DEF_D_BUILTIN (INTRINSIC_BTS
, BUILT_IN_NONE
, "bts", "core.bitop",
55 DEF_D_BUILTIN (INTRINSIC_BSF64
, BUILT_IN_NONE
, "bsf", "core.bitop",
57 DEF_D_BUILTIN (INTRINSIC_BSR64
, BUILT_IN_NONE
, "bsr", "core.bitop",
59 DEF_D_BUILTIN (INTRINSIC_BT64
, BUILT_IN_NONE
, "bt", "core.bitop",
61 DEF_D_BUILTIN (INTRINSIC_BTC64
, BUILT_IN_NONE
, "btc", "core.bitop",
63 DEF_D_BUILTIN (INTRINSIC_BTR64
, BUILT_IN_NONE
, "btr", "core.bitop",
65 DEF_D_BUILTIN (INTRINSIC_BTS64
, BUILT_IN_NONE
, "bts", "core.bitop",
68 DEF_D_BUILTIN (INTRINSIC_BSWAP16
, BUILT_IN_BSWAP16
, "byteswap", "core.bitop",
70 DEF_D_BUILTIN (INTRINSIC_BSWAP32
, BUILT_IN_BSWAP32
, "bswap", "core.bitop",
72 DEF_D_BUILTIN (INTRINSIC_BSWAP64
, BUILT_IN_BSWAP64
, "bswap", "core.bitop",
75 DEF_D_BUILTIN (INTRINSIC_POPCNT32
, BUILT_IN_NONE
, "popcnt", "core.bitop",
77 DEF_D_BUILTIN (INTRINSIC_POPCNT64
, BUILT_IN_NONE
, "popcnt", "core.bitop",
80 DEF_D_BUILTIN (INTRINSIC_ROL
, BUILT_IN_NONE
, "rol", "core.bitop", "FNaI1TkZI1T")
81 DEF_D_BUILTIN (INTRINSIC_ROL_TIARG
, BUILT_IN_NONE
, "rol", "core.bitop",
83 DEF_D_BUILTIN (INTRINSIC_ROR
, BUILT_IN_NONE
, "ror", "core.bitop", "FNaI1TkZI1T")
84 DEF_D_BUILTIN (INTRINSIC_ROR_TIARG
, BUILT_IN_NONE
, "ror", "core.bitop",
87 /* core.volatile intrinsics.
*/
89 DEF_D_BUILTIN (INTRINSIC_VLOAD8
, BUILT_IN_NONE
, "volatileLoad", "core.volatile",
91 DEF_D_BUILTIN (INTRINSIC_VLOAD16
, BUILT_IN_NONE
, "volatileLoad",
92 "core.volatile", "FNbNiNfPtZt")
93 DEF_D_BUILTIN (INTRINSIC_VLOAD32
, BUILT_IN_NONE
, "volatileLoad",
94 "core.volatile", "FNbNiNfPkZk")
95 DEF_D_BUILTIN (INTRINSIC_VLOAD64
, BUILT_IN_NONE
, "volatileLoad",
96 "core.volatile", "FNbNiNfPmZm")
97 DEF_D_BUILTIN (INTRINSIC_VSTORE8
, BUILT_IN_NONE
, "volatileStore",
98 "core.volatile", "FNbNiNfPhhZv")
99 DEF_D_BUILTIN (INTRINSIC_VSTORE16
, BUILT_IN_NONE
, "volatileStore",
100 "core.volatile", "FNbNiNfPttZv")
101 DEF_D_BUILTIN (INTRINSIC_VSTORE32
, BUILT_IN_NONE
, "volatileStore",
102 "core.volatile", "FNbNiNfPkkZv")
103 DEF_D_BUILTIN (INTRINSIC_VSTORE64
, BUILT_IN_NONE
, "volatileStore",
104 "core.volatile", "FNbNiNfPmmZv")
106 /* core.checkedint intrinsics.
*/
108 DEF_D_BUILTIN (INTRINSIC_ADDS
, BUILT_IN_NONE
, "adds", "core.checkedint",
110 DEF_D_BUILTIN (INTRINSIC_ADDSL
, BUILT_IN_NONE
, "adds", "core.checkedint",
112 DEF_D_BUILTIN (INTRINSIC_ADDU
, BUILT_IN_NONE
, "addu", "core.checkedint",
114 DEF_D_BUILTIN (INTRINSIC_ADDUL
, BUILT_IN_NONE
, "addu", "core.checkedint",
116 DEF_D_BUILTIN (INTRINSIC_SUBS
, BUILT_IN_NONE
, "subs", "core.checkedint",
118 DEF_D_BUILTIN (INTRINSIC_SUBSL
, BUILT_IN_NONE
, "subs", "core.checkedint",
120 DEF_D_BUILTIN (INTRINSIC_SUBU
, BUILT_IN_NONE
, "subu", "core.checkedint",
122 DEF_D_BUILTIN (INTRINSIC_SUBUL
, BUILT_IN_NONE
, "subu", "core.checkedint",
124 DEF_D_BUILTIN (INTRINSIC_MULS
, BUILT_IN_NONE
, "muls", "core.checkedint",
126 DEF_D_BUILTIN (INTRINSIC_MULSL
, BUILT_IN_NONE
, "muls", "core.checkedint",
128 DEF_D_BUILTIN (INTRINSIC_MULU
, BUILT_IN_NONE
, "mulu", "core.checkedint",
130 DEF_D_BUILTIN (INTRINSIC_MULUI
, BUILT_IN_NONE
, "mulu", "core.checkedint",
132 DEF_D_BUILTIN (INTRINSIC_MULUL
, BUILT_IN_NONE
, "mulu", "core.checkedint",
134 DEF_D_BUILTIN (INTRINSIC_NEGS
, BUILT_IN_NONE
, "negs", "core.checkedint",
136 DEF_D_BUILTIN (INTRINSIC_NEGSL
, BUILT_IN_NONE
, "negs", "core.checkedint",
139 /* core.math intrinsics.
*/
141 DEF_D_BUILTIN (INTRINSIC_COSF
, BUILT_IN_COSF
, "cos", "core.math",
143 DEF_D_BUILTIN (INTRINSIC_COS
, BUILT_IN_COS
, "cos", "core.math", "FNaNbNiNfdZd")
144 DEF_D_BUILTIN (INTRINSIC_COSL
, BUILT_IN_COSL
, "cos", "core.math",
146 DEF_D_BUILTIN (INTRINSIC_FABSF
, BUILT_IN_FABSL
, "fabs", "core.math",
148 DEF_D_BUILTIN (INTRINSIC_FABS
, BUILT_IN_FABS
, "fabs", "core.math",
150 DEF_D_BUILTIN (INTRINSIC_FABSL
, BUILT_IN_FABSL
, "fabs", "core.math",
152 DEF_D_BUILTIN (INTRINSIC_LDEXPF
, BUILT_IN_LDEXPF
, "ldexp", "core.math",
154 DEF_D_BUILTIN (INTRINSIC_LDEXP
, BUILT_IN_LDEXP
, "ldexp", "core.math",
156 DEF_D_BUILTIN (INTRINSIC_LDEXPL
, BUILT_IN_LDEXPL
, "ldexp", "core.math",
158 DEF_D_BUILTIN (INTRINSIC_RINTF
, BUILT_IN_RINTF
, "rint", "core.math",
160 DEF_D_BUILTIN (INTRINSIC_RINT
, BUILT_IN_RINT
, "rint", "core.math",
162 DEF_D_BUILTIN (INTRINSIC_RINTL
, BUILT_IN_RINTL
, "rint", "core.math",
165 /* Not sure if `llround
{f
,l
}' stands as a good replacement for the expected
166 behavior of `rndtol(INTRINSIC_)'.
*/
167 DEF_D_BUILTIN (INTRINSIC_RNDTOLF
, BUILT_IN_LLROUNDF
, "rndtol", "core.math",
169 DEF_D_BUILTIN (INTRINSIC_RNDTOL
, BUILT_IN_LLROUND
, "rndtol", "core.math",
171 DEF_D_BUILTIN (INTRINSIC_RNDTOLL
, BUILT_IN_LLROUNDL
, "rndtol", "core.math",
174 DEF_D_BUILTIN (INTRINSIC_SINF
, BUILT_IN_SINF
, "sin", "core.math",
176 DEF_D_BUILTIN (INTRINSIC_SIN
, BUILT_IN_SIN
, "sin", "core.math", "FNaNbNiNfdZd")
177 DEF_D_BUILTIN (INTRINSIC_SINL
, BUILT_IN_SINL
, "sin", "core.math",
179 DEF_D_BUILTIN (INTRINSIC_SQRTF
, BUILT_IN_SQRTF
, "sqrt", "core.math",
181 DEF_D_BUILTIN (INTRINSIC_SQRT
, BUILT_IN_SQRT
, "sqrt", "core.math",
183 DEF_D_BUILTIN (INTRINSIC_SQRTL
, BUILT_IN_SQRTL
, "sqrt", "core.math",
185 DEF_D_BUILTIN (INTRINSIC_TOPRECF
, BUILT_IN_NONE
, "toPrec", "core.math",
187 DEF_D_BUILTIN (INTRINSIC_TOPREC
, BUILT_IN_NONE
, "toPrec", "core.math", "FdZI1T")
188 DEF_D_BUILTIN (INTRINSIC_TOPRECL
, BUILT_IN_NONE
, "toPrec", "core.math",
191 /* std.math intrinsics.
*/
193 DEF_CTFE_BUILTIN (INTRINSIC_TAN
, BUILT_IN_TANL
, "tan", "std.math",
195 DEF_CTFE_BUILTIN (INTRINSIC_ISNAN
, BUILT_IN_ISNAN
, "isNaN", "std.math",
197 DEF_CTFE_BUILTIN (INTRINSIC_ISINFINITY
, BUILT_IN_ISINF
, "isInfinity",
198 "std.math", "FNaNbNiNeI1XZb")
199 DEF_CTFE_BUILTIN (INTRINSIC_ISFINITE
, BUILT_IN_ISFINITE
, "isFinite", "std.math",
202 DEF_CTFE_BUILTIN (INTRINSIC_EXP
, BUILT_IN_EXPL
, "exp", "std.math",
204 DEF_CTFE_BUILTIN (INTRINSIC_EXPM1
, BUILT_IN_EXPM1L
, "expm1", "std.math",
206 DEF_CTFE_BUILTIN (INTRINSIC_EXP2
, BUILT_IN_EXP2L
, "exp2", "std.math",
209 DEF_CTFE_BUILTIN (INTRINSIC_LOG
, BUILT_IN_LOGL
, "log", "std.math",
211 DEF_CTFE_BUILTIN (INTRINSIC_LOG2
, BUILT_IN_LOG2L
, "log2", "std.math",
213 DEF_CTFE_BUILTIN (INTRINSIC_LOG10
, BUILT_IN_LOG10L
, "log10", "std.math",
216 DEF_CTFE_BUILTIN (INTRINSIC_ROUND
, BUILT_IN_ROUNDL
, "round", "std.math",
218 DEF_CTFE_BUILTIN (INTRINSIC_FLOORF
, BUILT_IN_FLOORF
, "floor", "std.math",
220 DEF_CTFE_BUILTIN (INTRINSIC_FLOOR
, BUILT_IN_FLOOR
, "floor", "std.math",
222 DEF_CTFE_BUILTIN (INTRINSIC_FLOORL
, BUILT_IN_FLOORL
, "floor", "std.math",
224 DEF_CTFE_BUILTIN (INTRINSIC_CEILF
, BUILT_IN_CEILF
, "ceil", "std.math",
226 DEF_CTFE_BUILTIN (INTRINSIC_CEIL
, BUILT_IN_CEIL
, "ceil", "std.math",
228 DEF_CTFE_BUILTIN (INTRINSIC_CEILL
, BUILT_IN_CEILL
, "ceil", "std.math",
231 DEF_CTFE_BUILTIN (INTRINSIC_TRUNC
, BUILT_IN_TRUNCL
, "trunc", "std.math",
233 DEF_CTFE_BUILTIN (INTRINSIC_FMIN
, BUILT_IN_FMINL
, "fmin", "std.math",
235 DEF_CTFE_BUILTIN (INTRINSIC_FMAX
, BUILT_IN_FMAXL
, "fmax", "std.math",
237 DEF_CTFE_BUILTIN (INTRINSIC_COPYSIGN
, BUILT_IN_NONE
, "copysign", "std.math",
238 "FNaNbNiNeI1RI1XZI1R")
239 DEF_CTFE_BUILTIN (INTRINSIC_COPYSIGNI
, BUILT_IN_NONE
, "copysign", "std.math",
240 "FNaNbNiNeI1XI1RZI1R")
242 DEF_CTFE_BUILTIN (INTRINSIC_POW
, BUILT_IN_NONE
, "pow", "std.math",
244 DEF_CTFE_BUILTIN (INTRINSIC_FMA
, BUILT_IN_FMAL
, "fma", "std.math",
247 /* core.stdc.stdarg intrinsics.
*/
249 DEF_D_BUILTIN (INTRINSIC_VA_ARG
, BUILT_IN_NONE
, "va_arg", "core.stdc.stdarg",
251 DEF_D_BUILTIN (INTRINSIC_C_VA_ARG
, BUILT_IN_NONE
, "va_arg", "core.stdc.stdarg",
253 DEF_D_BUILTIN (INTRINSIC_VASTART
, BUILT_IN_NONE
, "va_start", "core.stdc.stdarg",
257 #undef DEF_CTFE_BUILTIN