1 /* intrinsics.def
-- Definitions for D compiler intrinsics.
2 Copyright (C
) 2014-2024 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
, FALLBACK
)
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.
27 FALLBACK True if the function has a D runtime library implementation.
29 Used for declaring internally recognized functions that either map to a
30 GCC builtin
, or are specially handled by the compiler.
*/
32 /* A D built
-in that has no runtime implementation.
*/
33 #define
DEF_D_BUILTIN(C
, B
, N
, M
, D
) \
34 DEF_D_INTRINSIC (C
, B
, N
, M
, D
, false
, false
)
36 /* A D built
-in that has a runtime implementation.
*/
37 #define
DEF_D_LIB_BUILTIN(C
, B
, N
, M
, D
) \
38 DEF_D_INTRINSIC (C
, B
, N
, M
, D
, false
, true
)
40 /* A D built
-in that is specially recognized only during CTFE.
*/
41 #define
DEF_CTFE_BUILTIN(C
, B
, N
, M
, D
) \
42 DEF_D_INTRINSIC (C
, B
, N
, M
, D
, true
, true
)
44 DEF_D_BUILTIN (INTRINSIC_NONE
, BUILT_IN_NONE
, 0, 0, 0)
46 /* core.bitop intrinsics.
*/
48 DEF_D_LIB_BUILTIN (INTRINSIC_BSF
, BUILT_IN_NONE
, "bsf", "core.bitop",
50 DEF_D_LIB_BUILTIN (INTRINSIC_BSR
, BUILT_IN_NONE
, "bsr", "core.bitop",
52 DEF_D_LIB_BUILTIN (INTRINSIC_BT
, BUILT_IN_NONE
, "bt", "core.bitop",
54 DEF_D_BUILTIN (INTRINSIC_BTC
, BUILT_IN_NONE
, "btc", "core.bitop",
56 DEF_D_BUILTIN (INTRINSIC_BTR
, BUILT_IN_NONE
, "btr", "core.bitop",
58 DEF_D_BUILTIN (INTRINSIC_BTS
, BUILT_IN_NONE
, "bts", "core.bitop",
60 DEF_D_LIB_BUILTIN (INTRINSIC_BSF64
, BUILT_IN_NONE
, "bsf", "core.bitop",
62 DEF_D_LIB_BUILTIN (INTRINSIC_BSR64
, BUILT_IN_NONE
, "bsr", "core.bitop",
64 DEF_D_LIB_BUILTIN (INTRINSIC_BT64
, BUILT_IN_NONE
, "bt", "core.bitop",
66 DEF_D_BUILTIN (INTRINSIC_BTC64
, BUILT_IN_NONE
, "btc", "core.bitop",
68 DEF_D_BUILTIN (INTRINSIC_BTR64
, BUILT_IN_NONE
, "btr", "core.bitop",
70 DEF_D_BUILTIN (INTRINSIC_BTS64
, BUILT_IN_NONE
, "bts", "core.bitop",
73 DEF_D_BUILTIN (INTRINSIC_BSWAP16
, BUILT_IN_BSWAP16
, "byteswap", "core.bitop",
75 DEF_D_BUILTIN (INTRINSIC_BSWAP32
, BUILT_IN_BSWAP32
, "bswap", "core.bitop",
77 DEF_D_BUILTIN (INTRINSIC_BSWAP64
, BUILT_IN_BSWAP64
, "bswap", "core.bitop",
80 DEF_D_LIB_BUILTIN (INTRINSIC_POPCNT32
, BUILT_IN_NONE
, "popcnt", "core.bitop",
82 DEF_D_LIB_BUILTIN (INTRINSIC_POPCNT64
, BUILT_IN_NONE
, "popcnt", "core.bitop",
85 DEF_D_LIB_BUILTIN (INTRINSIC_ROL
, BUILT_IN_NONE
, "rol", "core.bitop",
87 DEF_D_LIB_BUILTIN (INTRINSIC_ROL_TIARG
, BUILT_IN_NONE
, "rol", "core.bitop",
89 DEF_D_LIB_BUILTIN (INTRINSIC_ROR
, BUILT_IN_NONE
, "ror", "core.bitop",
91 DEF_D_LIB_BUILTIN (INTRINSIC_ROR_TIARG
, BUILT_IN_NONE
, "ror", "core.bitop",
94 /* core.volatile intrinsics.
*/
96 DEF_D_BUILTIN (INTRINSIC_VLOAD8
, BUILT_IN_NONE
, "volatileLoad", "core.volatile",
98 DEF_D_BUILTIN (INTRINSIC_VLOAD16
, BUILT_IN_NONE
, "volatileLoad",
99 "core.volatile", "FNbNiNfPtZt")
100 DEF_D_BUILTIN (INTRINSIC_VLOAD32
, BUILT_IN_NONE
, "volatileLoad",
101 "core.volatile", "FNbNiNfPkZk")
102 DEF_D_BUILTIN (INTRINSIC_VLOAD64
, BUILT_IN_NONE
, "volatileLoad",
103 "core.volatile", "FNbNiNfPmZm")
104 DEF_D_BUILTIN (INTRINSIC_VSTORE8
, BUILT_IN_NONE
, "volatileStore",
105 "core.volatile", "FNbNiNfPhhZv")
106 DEF_D_BUILTIN (INTRINSIC_VSTORE16
, BUILT_IN_NONE
, "volatileStore",
107 "core.volatile", "FNbNiNfPttZv")
108 DEF_D_BUILTIN (INTRINSIC_VSTORE32
, BUILT_IN_NONE
, "volatileStore",
109 "core.volatile", "FNbNiNfPkkZv")
110 DEF_D_BUILTIN (INTRINSIC_VSTORE64
, BUILT_IN_NONE
, "volatileStore",
111 "core.volatile", "FNbNiNfPmmZv")
113 /* core.checkedint intrinsics.
*/
115 DEF_D_LIB_BUILTIN (INTRINSIC_ADDS
, BUILT_IN_NONE
, "adds", "core.checkedint",
117 DEF_D_LIB_BUILTIN (INTRINSIC_ADDSL
, BUILT_IN_NONE
, "adds", "core.checkedint",
119 DEF_D_LIB_BUILTIN (INTRINSIC_ADDU
, BUILT_IN_NONE
, "addu", "core.checkedint",
121 DEF_D_LIB_BUILTIN (INTRINSIC_ADDUL
, BUILT_IN_NONE
, "addu", "core.checkedint",
123 DEF_D_LIB_BUILTIN (INTRINSIC_SUBS
, BUILT_IN_NONE
, "subs", "core.checkedint",
125 DEF_D_LIB_BUILTIN (INTRINSIC_SUBSL
, BUILT_IN_NONE
, "subs", "core.checkedint",
127 DEF_D_LIB_BUILTIN (INTRINSIC_SUBU
, BUILT_IN_NONE
, "subu", "core.checkedint",
129 DEF_D_LIB_BUILTIN (INTRINSIC_SUBUL
, BUILT_IN_NONE
, "subu", "core.checkedint",
131 DEF_D_LIB_BUILTIN (INTRINSIC_MULS
, BUILT_IN_NONE
, "muls", "core.checkedint",
133 DEF_D_LIB_BUILTIN (INTRINSIC_MULSL
, BUILT_IN_NONE
, "muls", "core.checkedint",
135 DEF_D_LIB_BUILTIN (INTRINSIC_MULU
, BUILT_IN_NONE
, "mulu", "core.checkedint",
137 DEF_D_LIB_BUILTIN (INTRINSIC_MULUI
, BUILT_IN_NONE
, "mulu", "core.checkedint",
139 DEF_D_LIB_BUILTIN (INTRINSIC_MULUL
, BUILT_IN_NONE
, "mulu", "core.checkedint",
141 DEF_D_LIB_BUILTIN (INTRINSIC_NEGS
, BUILT_IN_NONE
, "negs", "core.checkedint",
143 DEF_D_LIB_BUILTIN (INTRINSIC_NEGSL
, BUILT_IN_NONE
, "negs", "core.checkedint",
146 /* core.math intrinsics.
*/
148 DEF_D_BUILTIN (INTRINSIC_COSF
, BUILT_IN_COSF
, "cos", "core.math",
150 DEF_D_BUILTIN (INTRINSIC_COS
, BUILT_IN_COS
, "cos", "core.math", "FNaNbNiNfdZd")
151 DEF_D_BUILTIN (INTRINSIC_COSL
, BUILT_IN_COSL
, "cos", "core.math",
153 DEF_D_BUILTIN (INTRINSIC_FABSF
, BUILT_IN_FABSL
, "fabs", "core.math",
155 DEF_D_BUILTIN (INTRINSIC_FABS
, BUILT_IN_FABS
, "fabs", "core.math",
157 DEF_D_BUILTIN (INTRINSIC_FABSL
, BUILT_IN_FABSL
, "fabs", "core.math",
159 DEF_D_BUILTIN (INTRINSIC_LDEXPF
, BUILT_IN_LDEXPF
, "ldexp", "core.math",
161 DEF_D_BUILTIN (INTRINSIC_LDEXP
, BUILT_IN_LDEXP
, "ldexp", "core.math",
163 DEF_D_BUILTIN (INTRINSIC_LDEXPL
, BUILT_IN_LDEXPL
, "ldexp", "core.math",
165 DEF_D_BUILTIN (INTRINSIC_RINTF
, BUILT_IN_RINTF
, "rint", "core.math",
167 DEF_D_BUILTIN (INTRINSIC_RINT
, BUILT_IN_RINT
, "rint", "core.math",
169 DEF_D_BUILTIN (INTRINSIC_RINTL
, BUILT_IN_RINTL
, "rint", "core.math",
172 /* Not sure if `llround
{f
,l
}' stands as a good replacement for the expected
173 behavior of `rndtol(INTRINSIC_)'.
*/
174 DEF_D_BUILTIN (INTRINSIC_RNDTOLF
, BUILT_IN_LLROUNDF
, "rndtol", "core.math",
176 DEF_D_BUILTIN (INTRINSIC_RNDTOL
, BUILT_IN_LLROUND
, "rndtol", "core.math",
178 DEF_D_BUILTIN (INTRINSIC_RNDTOLL
, BUILT_IN_LLROUNDL
, "rndtol", "core.math",
181 DEF_D_BUILTIN (INTRINSIC_SINF
, BUILT_IN_SINF
, "sin", "core.math",
183 DEF_D_BUILTIN (INTRINSIC_SIN
, BUILT_IN_SIN
, "sin", "core.math", "FNaNbNiNfdZd")
184 DEF_D_BUILTIN (INTRINSIC_SINL
, BUILT_IN_SINL
, "sin", "core.math",
186 DEF_D_BUILTIN (INTRINSIC_SQRTF
, BUILT_IN_SQRTF
, "sqrt", "core.math",
188 DEF_D_BUILTIN (INTRINSIC_SQRT
, BUILT_IN_SQRT
, "sqrt", "core.math",
190 DEF_D_BUILTIN (INTRINSIC_SQRTL
, BUILT_IN_SQRTL
, "sqrt", "core.math",
192 DEF_D_LIB_BUILTIN (INTRINSIC_TOPRECF
, BUILT_IN_NONE
, "toPrec", "core.math",
194 DEF_D_LIB_BUILTIN (INTRINSIC_TOPREC
, BUILT_IN_NONE
, "toPrec", "core.math",
196 DEF_D_LIB_BUILTIN (INTRINSIC_TOPRECL
, BUILT_IN_NONE
, "toPrec", "core.math",
199 /* std.math intrinsics.
*/
201 DEF_CTFE_BUILTIN (INTRINSIC_TAN
, BUILT_IN_TANL
, "tan", "std.math.trigonometry",
204 DEF_CTFE_BUILTIN (INTRINSIC_ISNAN
, BUILT_IN_ISNAN
, "isNaN", "std.math.traits",
206 DEF_CTFE_BUILTIN (INTRINSIC_ISINFINITY
, BUILT_IN_ISINF
, "isInfinity",
207 "std.math.traits", "FNaNbNiNe@1XZb")
208 DEF_CTFE_BUILTIN (INTRINSIC_ISFINITE
, BUILT_IN_ISFINITE
, "isFinite",
209 "std.math.traits", "FNaNbNiNe@1XZb")
210 DEF_CTFE_BUILTIN (INTRINSIC_COPYSIGN
, BUILT_IN_NONE
, "copysign",
211 "std.math.traits", "FNaNbNiNe@1R@1XZ@1R")
212 DEF_CTFE_BUILTIN (INTRINSIC_COPYSIGNI
, BUILT_IN_NONE
, "copysign",
213 "std.math.traits", "FNaNbNiNe@1X@1RZ@1R")
215 DEF_CTFE_BUILTIN (INTRINSIC_EXP
, BUILT_IN_EXPL
, "exp", "std.math.exponential",
217 DEF_CTFE_BUILTIN (INTRINSIC_EXPM1
, BUILT_IN_EXPM1L
, "expm1",
218 "std.math.exponential", "FNaNbNiNeeZe")
219 DEF_CTFE_BUILTIN (INTRINSIC_EXP2
, BUILT_IN_EXP2L
, "exp2",
220 "std.math.exponential", "FNaNbNiNeeZe")
221 DEF_CTFE_BUILTIN (INTRINSIC_LOG
, BUILT_IN_LOGL
, "log", "std.math.exponential",
223 DEF_CTFE_BUILTIN (INTRINSIC_LOG2
, BUILT_IN_LOG2L
, "log2",
224 "std.math.exponential", "FNaNbNiNfeZe")
225 DEF_CTFE_BUILTIN (INTRINSIC_LOG10
, BUILT_IN_LOG10L
, "log10",
226 "std.math.exponential", "FNaNbNiNfeZe")
227 DEF_CTFE_BUILTIN (INTRINSIC_POW
, BUILT_IN_NONE
, "pow", "std.math.exponential",
230 DEF_CTFE_BUILTIN (INTRINSIC_ROUND
, BUILT_IN_ROUNDL
, "round",
231 "std.math.rounding", "FNaNbNiNeeZe")
232 DEF_CTFE_BUILTIN (INTRINSIC_FLOORF
, BUILT_IN_FLOORF
, "floor",
233 "std.math.rounding", "FNaNbNiNefZf")
234 DEF_CTFE_BUILTIN (INTRINSIC_FLOOR
, BUILT_IN_FLOOR
, "floor", "std.math.rounding",
236 DEF_CTFE_BUILTIN (INTRINSIC_FLOORL
, BUILT_IN_FLOORL
, "floor",
237 "std.math.rounding", "FNaNbNiNeeZe")
238 DEF_CTFE_BUILTIN (INTRINSIC_CEILF
, BUILT_IN_CEILF
, "ceil", "std.math.rounding",
240 DEF_CTFE_BUILTIN (INTRINSIC_CEIL
, BUILT_IN_CEIL
, "ceil", "std.math.rounding",
242 DEF_CTFE_BUILTIN (INTRINSIC_CEILL
, BUILT_IN_CEILL
, "ceil", "std.math.rounding",
244 DEF_CTFE_BUILTIN (INTRINSIC_TRUNC
, BUILT_IN_TRUNCL
, "trunc",
245 "std.math.rounding", "FNaNbNiNeeZe")
247 DEF_CTFE_BUILTIN (INTRINSIC_FMIN
, BUILT_IN_FMINL
, "fmin", "std.math.operations",
249 DEF_CTFE_BUILTIN (INTRINSIC_FMAX
, BUILT_IN_FMAXL
, "fmax", "std.math.operations",
251 DEF_CTFE_BUILTIN (INTRINSIC_FMA
, BUILT_IN_FMAL
, "fma", "std.math.operations",
254 /* core.stdc.stdarg intrinsics.
*/
256 DEF_D_BUILTIN (INTRINSIC_VA_ARG
, BUILT_IN_NONE
, "va_arg", "core.stdc.stdarg",
258 DEF_D_BUILTIN (INTRINSIC_C_VA_ARG
, BUILT_IN_NONE
, "va_arg", "core.stdc.stdarg",
260 DEF_D_BUILTIN (INTRINSIC_VASTART
, BUILT_IN_NONE
, "va_start", "core.stdc.stdarg",
263 /* gcc.simd intrinsics.
*/
265 DEF_D_BUILTIN (INTRINSIC_LOADUNALIGNED
, BUILT_IN_NONE
, "loadUnaligned",
266 "gcc.simd", "FP@1VZ@1V")
267 DEF_D_BUILTIN (INTRINSIC_STOREUNALIGNED
, BUILT_IN_NONE
, "storeUnaligned",
268 "gcc.simd", "FP@1V@1VZ@1V")
269 DEF_D_BUILTIN (INTRINSIC_SHUFFLE
, BUILT_IN_NONE
, "shuffle", "gcc.simd",
271 DEF_D_BUILTIN (INTRINSIC_SHUFFLEVECTOR
, BUILT_IN_NONE
, "shufflevector",
272 "gcc.simd", "F@2V1@2V2@1MZNhH@1M@")
273 DEF_D_BUILTIN (INTRINSIC_CONVERTVECTOR
, BUILT_IN_NONE
, "convertvector",
274 "gcc.simd", "F@1TZ@1V")
275 DEF_D_BUILTIN (INTRINSIC_BLENDVECTOR
, BUILT_IN_NONE
, "blendvector", "gcc.simd",
279 #undef DEF_CTFE_BUILTIN