]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/d/intrinsics.def
Update copyright years.
[thirdparty/gcc.git] / gcc / d / intrinsics.def
CommitLineData
b4c522fa 1/* intrinsics.def -- Definitions for D compiler intrinsics.
a945c346 2 Copyright (C) 2014-2024 Free Software Foundation, Inc.
b4c522fa
IB
3
4GCC is free software; you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation; either version 3, or (at your option)
7any later version.
8
9GCC is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with GCC; see the file COPYING3. If not see
16<http://www.gnu.org/licenses/>. */
17
ef8f7e3f 18/* DEF_D_INTRINSIC (CODE, BUILTIN, NAME, MODULE, DECO, CTFE, FALLBACK)
b4c522fa 19 CODE The enum code used to refer to this intrinsic.
6ee874f1
IB
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.
b4c522fa
IB
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.
ef8f7e3f 27 FALLBACK True if the function has a D runtime library implementation.
b4c522fa
IB
28
29 Used for declaring internally recognized functions that either map to a
30 GCC builtin, or are specially handled by the compiler. */
31
32/* A D built-in that has no runtime implementation. */
6ee874f1 33#define DEF_D_BUILTIN(C, B, N, M, D) \
ef8f7e3f
IB
34 DEF_D_INTRINSIC (C, B, N, M, D, false, false)
35
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)
b4c522fa
IB
39
40/* A D built-in that is specially recognized only during CTFE. */
6ee874f1 41#define DEF_CTFE_BUILTIN(C, B, N, M, D) \
ef8f7e3f 42 DEF_D_INTRINSIC (C, B, N, M, D, true, true)
b4c522fa 43
28c7a463 44DEF_D_BUILTIN (INTRINSIC_NONE, BUILT_IN_NONE, 0, 0, 0)
b4c522fa
IB
45
46/* core.bitop intrinsics. */
47
ef8f7e3f
IB
48DEF_D_LIB_BUILTIN (INTRINSIC_BSF, BUILT_IN_NONE, "bsf", "core.bitop",
49 "FNaNbNiNfkZi")
50DEF_D_LIB_BUILTIN (INTRINSIC_BSR, BUILT_IN_NONE, "bsr", "core.bitop",
51 "FNaNbNiNfkZi")
52DEF_D_LIB_BUILTIN (INTRINSIC_BT, BUILT_IN_NONE, "bt", "core.bitop",
53 "FNaNbNiMxPkkZi")
28c7a463
IB
54DEF_D_BUILTIN (INTRINSIC_BTC, BUILT_IN_NONE, "btc", "core.bitop",
55 "FNaNbNiPkkZi")
56DEF_D_BUILTIN (INTRINSIC_BTR, BUILT_IN_NONE, "btr", "core.bitop",
57 "FNaNbNiPkkZi")
58DEF_D_BUILTIN (INTRINSIC_BTS, BUILT_IN_NONE, "bts", "core.bitop",
59 "FNaNbNiPkkZi")
ef8f7e3f
IB
60DEF_D_LIB_BUILTIN (INTRINSIC_BSF64, BUILT_IN_NONE, "bsf", "core.bitop",
61 "FNaNbNiNfmZi")
62DEF_D_LIB_BUILTIN (INTRINSIC_BSR64, BUILT_IN_NONE, "bsr", "core.bitop",
63 "FNaNbNiNfmZi")
64DEF_D_LIB_BUILTIN (INTRINSIC_BT64, BUILT_IN_NONE, "bt", "core.bitop",
65 "FNaNbNiMxPmmZi")
28c7a463
IB
66DEF_D_BUILTIN (INTRINSIC_BTC64, BUILT_IN_NONE, "btc", "core.bitop",
67 "FNaNbNiPmmZi")
68DEF_D_BUILTIN (INTRINSIC_BTR64, BUILT_IN_NONE, "btr", "core.bitop",
69 "FNaNbNiPmmZi")
70DEF_D_BUILTIN (INTRINSIC_BTS64, BUILT_IN_NONE, "bts", "core.bitop",
71 "FNaNbNiPmmZi")
72
73DEF_D_BUILTIN (INTRINSIC_BSWAP16, BUILT_IN_BSWAP16, "byteswap", "core.bitop",
74 "FNaNbNiNftZt")
75DEF_D_BUILTIN (INTRINSIC_BSWAP32, BUILT_IN_BSWAP32, "bswap", "core.bitop",
76 "FNaNbNiNfkZk")
77DEF_D_BUILTIN (INTRINSIC_BSWAP64, BUILT_IN_BSWAP64, "bswap", "core.bitop",
78 "FNaNbNiNfmZm")
79
ef8f7e3f
IB
80DEF_D_LIB_BUILTIN (INTRINSIC_POPCNT32, BUILT_IN_NONE, "popcnt", "core.bitop",
81 "FNaNbNiNfkZi")
82DEF_D_LIB_BUILTIN (INTRINSIC_POPCNT64, BUILT_IN_NONE, "popcnt", "core.bitop",
83 "FNaNbNiNfmZi")
28c7a463 84
ef8f7e3f
IB
85DEF_D_LIB_BUILTIN (INTRINSIC_ROL, BUILT_IN_NONE, "rol", "core.bitop",
86 "FNa@1TkZ@1T")
87DEF_D_LIB_BUILTIN (INTRINSIC_ROL_TIARG, BUILT_IN_NONE, "rol", "core.bitop",
88 "FNa@1TZ@1T")
89DEF_D_LIB_BUILTIN (INTRINSIC_ROR, BUILT_IN_NONE, "ror", "core.bitop",
90 "FNa@1TkZ@1T")
91DEF_D_LIB_BUILTIN (INTRINSIC_ROR_TIARG, BUILT_IN_NONE, "ror", "core.bitop",
92 "FNa@1TZ@1T")
7d4ee8bc 93
c1d56e6a
IB
94/* core.volatile intrinsics. */
95
28c7a463
IB
96DEF_D_BUILTIN (INTRINSIC_VLOAD8, BUILT_IN_NONE, "volatileLoad", "core.volatile",
97 "FNbNiNfPhZh")
98DEF_D_BUILTIN (INTRINSIC_VLOAD16, BUILT_IN_NONE, "volatileLoad",
99 "core.volatile", "FNbNiNfPtZt")
100DEF_D_BUILTIN (INTRINSIC_VLOAD32, BUILT_IN_NONE, "volatileLoad",
101 "core.volatile", "FNbNiNfPkZk")
102DEF_D_BUILTIN (INTRINSIC_VLOAD64, BUILT_IN_NONE, "volatileLoad",
103 "core.volatile", "FNbNiNfPmZm")
104DEF_D_BUILTIN (INTRINSIC_VSTORE8, BUILT_IN_NONE, "volatileStore",
105 "core.volatile", "FNbNiNfPhhZv")
106DEF_D_BUILTIN (INTRINSIC_VSTORE16, BUILT_IN_NONE, "volatileStore",
107 "core.volatile", "FNbNiNfPttZv")
108DEF_D_BUILTIN (INTRINSIC_VSTORE32, BUILT_IN_NONE, "volatileStore",
109 "core.volatile", "FNbNiNfPkkZv")
110DEF_D_BUILTIN (INTRINSIC_VSTORE64, BUILT_IN_NONE, "volatileStore",
111 "core.volatile", "FNbNiNfPmmZv")
b4c522fa
IB
112
113/* core.checkedint intrinsics. */
114
ef8f7e3f
IB
115DEF_D_LIB_BUILTIN (INTRINSIC_ADDS, BUILT_IN_NONE, "adds", "core.checkedint",
116 "FiiKbZi")
117DEF_D_LIB_BUILTIN (INTRINSIC_ADDSL, BUILT_IN_NONE, "adds", "core.checkedint",
118 "FllKbZl")
119DEF_D_LIB_BUILTIN (INTRINSIC_ADDU, BUILT_IN_NONE, "addu", "core.checkedint",
120 "FkkKbZk")
121DEF_D_LIB_BUILTIN (INTRINSIC_ADDUL, BUILT_IN_NONE, "addu", "core.checkedint",
122 "FmmKbZm")
123DEF_D_LIB_BUILTIN (INTRINSIC_SUBS, BUILT_IN_NONE, "subs", "core.checkedint",
124 "FiiKbZi")
125DEF_D_LIB_BUILTIN (INTRINSIC_SUBSL, BUILT_IN_NONE, "subs", "core.checkedint",
126 "FllKbZl")
127DEF_D_LIB_BUILTIN (INTRINSIC_SUBU, BUILT_IN_NONE, "subu", "core.checkedint",
128 "FkkKbZk")
129DEF_D_LIB_BUILTIN (INTRINSIC_SUBUL, BUILT_IN_NONE, "subu", "core.checkedint",
130 "FmmKbZm")
131DEF_D_LIB_BUILTIN (INTRINSIC_MULS, BUILT_IN_NONE, "muls", "core.checkedint",
132 "FiiKbZi")
133DEF_D_LIB_BUILTIN (INTRINSIC_MULSL, BUILT_IN_NONE, "muls", "core.checkedint",
134 "FllKbZl")
135DEF_D_LIB_BUILTIN (INTRINSIC_MULU, BUILT_IN_NONE, "mulu", "core.checkedint",
136 "FkkKbZk")
137DEF_D_LIB_BUILTIN (INTRINSIC_MULUI, BUILT_IN_NONE, "mulu", "core.checkedint",
138 "FmkKbZm")
139DEF_D_LIB_BUILTIN (INTRINSIC_MULUL, BUILT_IN_NONE, "mulu", "core.checkedint",
140 "FmmKbZm")
141DEF_D_LIB_BUILTIN (INTRINSIC_NEGS, BUILT_IN_NONE, "negs", "core.checkedint",
142 "FiKbZi")
143DEF_D_LIB_BUILTIN (INTRINSIC_NEGSL, BUILT_IN_NONE, "negs", "core.checkedint",
144 "FlKbZl")
b4c522fa
IB
145
146/* core.math intrinsics. */
147
28c7a463
IB
148DEF_D_BUILTIN (INTRINSIC_COSF, BUILT_IN_COSF, "cos", "core.math",
149 "FNaNbNiNffZf")
150DEF_D_BUILTIN (INTRINSIC_COS, BUILT_IN_COS, "cos", "core.math", "FNaNbNiNfdZd")
151DEF_D_BUILTIN (INTRINSIC_COSL, BUILT_IN_COSL, "cos", "core.math",
152 "FNaNbNiNfeZe")
153DEF_D_BUILTIN (INTRINSIC_FABSF, BUILT_IN_FABSL, "fabs", "core.math",
154 "FNaNbNiNffZf")
155DEF_D_BUILTIN (INTRINSIC_FABS, BUILT_IN_FABS, "fabs", "core.math",
156 "FNaNbNiNfdZd")
157DEF_D_BUILTIN (INTRINSIC_FABSL, BUILT_IN_FABSL, "fabs", "core.math",
158 "FNaNbNiNfeZe")
159DEF_D_BUILTIN (INTRINSIC_LDEXPF, BUILT_IN_LDEXPF, "ldexp", "core.math",
160 "FNaNbNiNffiZf")
161DEF_D_BUILTIN (INTRINSIC_LDEXP, BUILT_IN_LDEXP, "ldexp", "core.math",
162 "FNaNbNiNfdiZd")
163DEF_D_BUILTIN (INTRINSIC_LDEXPL, BUILT_IN_LDEXPL, "ldexp", "core.math",
164 "FNaNbNiNfeiZe")
165DEF_D_BUILTIN (INTRINSIC_RINTF, BUILT_IN_RINTF, "rint", "core.math",
166 "FNaNbNiNffZf")
167DEF_D_BUILTIN (INTRINSIC_RINT, BUILT_IN_RINT, "rint", "core.math",
168 "FNaNbNiNfdZd")
169DEF_D_BUILTIN (INTRINSIC_RINTL, BUILT_IN_RINTL, "rint", "core.math",
170 "FNaNbNiNfeZe")
6ee874f1 171
9285e0f6 172/* Not sure if `llround{f,l}' stands as a good replacement for the expected
28c7a463
IB
173 behavior of `rndtol(INTRINSIC_)'. */
174DEF_D_BUILTIN (INTRINSIC_RNDTOLF, BUILT_IN_LLROUNDF, "rndtol", "core.math",
175 "FNaNbNiNffZl")
176DEF_D_BUILTIN (INTRINSIC_RNDTOL, BUILT_IN_LLROUND, "rndtol", "core.math",
177 "FNaNbNiNfdZl")
178DEF_D_BUILTIN (INTRINSIC_RNDTOLL, BUILT_IN_LLROUNDL, "rndtol", "core.math",
179 "FNaNbNiNfeZl")
180
181DEF_D_BUILTIN (INTRINSIC_SINF, BUILT_IN_SINF, "sin", "core.math",
182 "FNaNbNiNffZf")
183DEF_D_BUILTIN (INTRINSIC_SIN, BUILT_IN_SIN, "sin", "core.math", "FNaNbNiNfdZd")
184DEF_D_BUILTIN (INTRINSIC_SINL, BUILT_IN_SINL, "sin", "core.math",
185 "FNaNbNiNfeZe")
186DEF_D_BUILTIN (INTRINSIC_SQRTF, BUILT_IN_SQRTF, "sqrt", "core.math",
187 "FNaNbNiNffZf")
188DEF_D_BUILTIN (INTRINSIC_SQRT, BUILT_IN_SQRT, "sqrt", "core.math",
189 "FNaNbNiNfdZd")
190DEF_D_BUILTIN (INTRINSIC_SQRTL, BUILT_IN_SQRTL, "sqrt", "core.math",
191 "FNaNbNiNfeZe")
ef8f7e3f
IB
192DEF_D_LIB_BUILTIN (INTRINSIC_TOPRECF, BUILT_IN_NONE, "toPrec", "core.math",
193 "FfZ@1T")
194DEF_D_LIB_BUILTIN (INTRINSIC_TOPREC, BUILT_IN_NONE, "toPrec", "core.math",
195 "FdZ@1T")
196DEF_D_LIB_BUILTIN (INTRINSIC_TOPRECL, BUILT_IN_NONE, "toPrec", "core.math",
197 "FeZ@1T")
b4c522fa
IB
198
199/* std.math intrinsics. */
200
5fee5ec3 201DEF_CTFE_BUILTIN (INTRINSIC_TAN, BUILT_IN_TANL, "tan", "std.math.trigonometry",
28c7a463 202 "FNaNbNiNeeZe")
5fee5ec3
IB
203
204DEF_CTFE_BUILTIN (INTRINSIC_ISNAN, BUILT_IN_ISNAN, "isNaN", "std.math.traits",
205 "FNaNbNiNe@1XZb")
28c7a463 206DEF_CTFE_BUILTIN (INTRINSIC_ISINFINITY, BUILT_IN_ISINF, "isInfinity",
5fee5ec3
IB
207 "std.math.traits", "FNaNbNiNe@1XZb")
208DEF_CTFE_BUILTIN (INTRINSIC_ISFINITE, BUILT_IN_ISFINITE, "isFinite",
209 "std.math.traits", "FNaNbNiNe@1XZb")
210DEF_CTFE_BUILTIN (INTRINSIC_COPYSIGN, BUILT_IN_NONE, "copysign",
211 "std.math.traits", "FNaNbNiNe@1R@1XZ@1R")
212DEF_CTFE_BUILTIN (INTRINSIC_COPYSIGNI, BUILT_IN_NONE, "copysign",
213 "std.math.traits", "FNaNbNiNe@1X@1RZ@1R")
28c7a463 214
5fee5ec3 215DEF_CTFE_BUILTIN (INTRINSIC_EXP, BUILT_IN_EXPL, "exp", "std.math.exponential",
28c7a463 216 "FNaNbNiNeeZe")
5fee5ec3
IB
217DEF_CTFE_BUILTIN (INTRINSIC_EXPM1, BUILT_IN_EXPM1L, "expm1",
218 "std.math.exponential", "FNaNbNiNeeZe")
219DEF_CTFE_BUILTIN (INTRINSIC_EXP2, BUILT_IN_EXP2L, "exp2",
220 "std.math.exponential", "FNaNbNiNeeZe")
221DEF_CTFE_BUILTIN (INTRINSIC_LOG, BUILT_IN_LOGL, "log", "std.math.exponential",
28c7a463 222 "FNaNbNiNfeZe")
5fee5ec3
IB
223DEF_CTFE_BUILTIN (INTRINSIC_LOG2, BUILT_IN_LOG2L, "log2",
224 "std.math.exponential", "FNaNbNiNfeZe")
225DEF_CTFE_BUILTIN (INTRINSIC_LOG10, BUILT_IN_LOG10L, "log10",
226 "std.math.exponential", "FNaNbNiNfeZe")
227DEF_CTFE_BUILTIN (INTRINSIC_POW, BUILT_IN_NONE, "pow", "std.math.exponential",
228 "FNaNbNiNe@1F@1GZ@")
28c7a463 229
5fee5ec3
IB
230DEF_CTFE_BUILTIN (INTRINSIC_ROUND, BUILT_IN_ROUNDL, "round",
231 "std.math.rounding", "FNaNbNiNeeZe")
232DEF_CTFE_BUILTIN (INTRINSIC_FLOORF, BUILT_IN_FLOORF, "floor",
233 "std.math.rounding", "FNaNbNiNefZf")
234DEF_CTFE_BUILTIN (INTRINSIC_FLOOR, BUILT_IN_FLOOR, "floor", "std.math.rounding",
28c7a463 235 "FNaNbNiNedZd")
5fee5ec3
IB
236DEF_CTFE_BUILTIN (INTRINSIC_FLOORL, BUILT_IN_FLOORL, "floor",
237 "std.math.rounding", "FNaNbNiNeeZe")
238DEF_CTFE_BUILTIN (INTRINSIC_CEILF, BUILT_IN_CEILF, "ceil", "std.math.rounding",
28c7a463 239 "FNaNbNiNefZf")
5fee5ec3 240DEF_CTFE_BUILTIN (INTRINSIC_CEIL, BUILT_IN_CEIL, "ceil", "std.math.rounding",
28c7a463 241 "FNaNbNiNedZd")
5fee5ec3 242DEF_CTFE_BUILTIN (INTRINSIC_CEILL, BUILT_IN_CEILL, "ceil", "std.math.rounding",
28c7a463 243 "FNaNbNiNeeZe")
5fee5ec3
IB
244DEF_CTFE_BUILTIN (INTRINSIC_TRUNC, BUILT_IN_TRUNCL, "trunc",
245 "std.math.rounding", "FNaNbNiNeeZe")
28c7a463 246
5fee5ec3 247DEF_CTFE_BUILTIN (INTRINSIC_FMIN, BUILT_IN_FMINL, "fmin", "std.math.operations",
28c7a463 248 "FNaNbNiNfeeZe")
5fee5ec3 249DEF_CTFE_BUILTIN (INTRINSIC_FMAX, BUILT_IN_FMAXL, "fmax", "std.math.operations",
28c7a463 250 "FNaNbNiNfeeZe")
5fee5ec3 251DEF_CTFE_BUILTIN (INTRINSIC_FMA, BUILT_IN_FMAL, "fma", "std.math.operations",
28c7a463 252 "FNaNbNiNfeeeZe")
b4c522fa
IB
253
254/* core.stdc.stdarg intrinsics. */
255
28c7a463 256DEF_D_BUILTIN (INTRINSIC_VA_ARG, BUILT_IN_NONE, "va_arg", "core.stdc.stdarg",
5fee5ec3 257 "FK@7va_listK@1TZv")
28c7a463 258DEF_D_BUILTIN (INTRINSIC_C_VA_ARG, BUILT_IN_NONE, "va_arg", "core.stdc.stdarg",
5fee5ec3 259 "FK@7va_listZ@1T")
28c7a463 260DEF_D_BUILTIN (INTRINSIC_VASTART, BUILT_IN_NONE, "va_start", "core.stdc.stdarg",
5fee5ec3 261 "FJ@7va_listK@1TZv")
b4c522fa 262
b93ae1a0
IB
263/* gcc.simd intrinsics. */
264
265DEF_D_BUILTIN (INTRINSIC_LOADUNALIGNED, BUILT_IN_NONE, "loadUnaligned",
266 "gcc.simd", "FP@1VZ@1V")
267DEF_D_BUILTIN (INTRINSIC_STOREUNALIGNED, BUILT_IN_NONE, "storeUnaligned",
268 "gcc.simd", "FP@1V@1VZ@1V")
269DEF_D_BUILTIN (INTRINSIC_SHUFFLE, BUILT_IN_NONE, "shuffle", "gcc.simd",
270 "F@2V0@2V1@1MZ@2V0")
271DEF_D_BUILTIN (INTRINSIC_SHUFFLEVECTOR, BUILT_IN_NONE, "shufflevector",
272 "gcc.simd", "F@2V1@2V2@1MZNhH@1M@")
273DEF_D_BUILTIN (INTRINSIC_CONVERTVECTOR, BUILT_IN_NONE, "convertvector",
274 "gcc.simd", "F@1TZ@1V")
275DEF_D_BUILTIN (INTRINSIC_BLENDVECTOR, BUILT_IN_NONE, "blendvector", "gcc.simd",
276 "F@2V0@2V1@1MZ@2V0")
b93ae1a0 277
b4c522fa
IB
278#undef DEF_D_BUILTIN
279#undef DEF_CTFE_BUILTIN