]>
Commit | Line | Data |
---|---|---|
b4c522fa | 1 | /* intrinsics.def -- Definitions for D compiler intrinsics. |
a945c346 | 2 | Copyright (C) 2014-2024 Free Software Foundation, Inc. |
b4c522fa IB |
3 | |
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) | |
7 | any later version. | |
8 | ||
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. | |
13 | ||
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/>. */ | |
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 | 44 | DEF_D_BUILTIN (INTRINSIC_NONE, BUILT_IN_NONE, 0, 0, 0) |
b4c522fa IB |
45 | |
46 | /* core.bitop intrinsics. */ | |
47 | ||
ef8f7e3f IB |
48 | DEF_D_LIB_BUILTIN (INTRINSIC_BSF, BUILT_IN_NONE, "bsf", "core.bitop", |
49 | "FNaNbNiNfkZi") | |
50 | DEF_D_LIB_BUILTIN (INTRINSIC_BSR, BUILT_IN_NONE, "bsr", "core.bitop", | |
51 | "FNaNbNiNfkZi") | |
52 | DEF_D_LIB_BUILTIN (INTRINSIC_BT, BUILT_IN_NONE, "bt", "core.bitop", | |
53 | "FNaNbNiMxPkkZi") | |
28c7a463 IB |
54 | DEF_D_BUILTIN (INTRINSIC_BTC, BUILT_IN_NONE, "btc", "core.bitop", |
55 | "FNaNbNiPkkZi") | |
56 | DEF_D_BUILTIN (INTRINSIC_BTR, BUILT_IN_NONE, "btr", "core.bitop", | |
57 | "FNaNbNiPkkZi") | |
58 | DEF_D_BUILTIN (INTRINSIC_BTS, BUILT_IN_NONE, "bts", "core.bitop", | |
59 | "FNaNbNiPkkZi") | |
ef8f7e3f IB |
60 | DEF_D_LIB_BUILTIN (INTRINSIC_BSF64, BUILT_IN_NONE, "bsf", "core.bitop", |
61 | "FNaNbNiNfmZi") | |
62 | DEF_D_LIB_BUILTIN (INTRINSIC_BSR64, BUILT_IN_NONE, "bsr", "core.bitop", | |
63 | "FNaNbNiNfmZi") | |
64 | DEF_D_LIB_BUILTIN (INTRINSIC_BT64, BUILT_IN_NONE, "bt", "core.bitop", | |
65 | "FNaNbNiMxPmmZi") | |
28c7a463 IB |
66 | DEF_D_BUILTIN (INTRINSIC_BTC64, BUILT_IN_NONE, "btc", "core.bitop", |
67 | "FNaNbNiPmmZi") | |
68 | DEF_D_BUILTIN (INTRINSIC_BTR64, BUILT_IN_NONE, "btr", "core.bitop", | |
69 | "FNaNbNiPmmZi") | |
70 | DEF_D_BUILTIN (INTRINSIC_BTS64, BUILT_IN_NONE, "bts", "core.bitop", | |
71 | "FNaNbNiPmmZi") | |
72 | ||
73 | DEF_D_BUILTIN (INTRINSIC_BSWAP16, BUILT_IN_BSWAP16, "byteswap", "core.bitop", | |
74 | "FNaNbNiNftZt") | |
75 | DEF_D_BUILTIN (INTRINSIC_BSWAP32, BUILT_IN_BSWAP32, "bswap", "core.bitop", | |
76 | "FNaNbNiNfkZk") | |
77 | DEF_D_BUILTIN (INTRINSIC_BSWAP64, BUILT_IN_BSWAP64, "bswap", "core.bitop", | |
78 | "FNaNbNiNfmZm") | |
79 | ||
ef8f7e3f IB |
80 | DEF_D_LIB_BUILTIN (INTRINSIC_POPCNT32, BUILT_IN_NONE, "popcnt", "core.bitop", |
81 | "FNaNbNiNfkZi") | |
82 | DEF_D_LIB_BUILTIN (INTRINSIC_POPCNT64, BUILT_IN_NONE, "popcnt", "core.bitop", | |
83 | "FNaNbNiNfmZi") | |
28c7a463 | 84 | |
ef8f7e3f IB |
85 | DEF_D_LIB_BUILTIN (INTRINSIC_ROL, BUILT_IN_NONE, "rol", "core.bitop", |
86 | "FNa@1TkZ@1T") | |
87 | DEF_D_LIB_BUILTIN (INTRINSIC_ROL_TIARG, BUILT_IN_NONE, "rol", "core.bitop", | |
88 | "FNa@1TZ@1T") | |
89 | DEF_D_LIB_BUILTIN (INTRINSIC_ROR, BUILT_IN_NONE, "ror", "core.bitop", | |
90 | "FNa@1TkZ@1T") | |
91 | DEF_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 |
96 | DEF_D_BUILTIN (INTRINSIC_VLOAD8, BUILT_IN_NONE, "volatileLoad", "core.volatile", |
97 | "FNbNiNfPhZh") | |
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") | |
b4c522fa IB |
112 | |
113 | /* core.checkedint intrinsics. */ | |
114 | ||
ef8f7e3f IB |
115 | DEF_D_LIB_BUILTIN (INTRINSIC_ADDS, BUILT_IN_NONE, "adds", "core.checkedint", |
116 | "FiiKbZi") | |
117 | DEF_D_LIB_BUILTIN (INTRINSIC_ADDSL, BUILT_IN_NONE, "adds", "core.checkedint", | |
118 | "FllKbZl") | |
119 | DEF_D_LIB_BUILTIN (INTRINSIC_ADDU, BUILT_IN_NONE, "addu", "core.checkedint", | |
120 | "FkkKbZk") | |
121 | DEF_D_LIB_BUILTIN (INTRINSIC_ADDUL, BUILT_IN_NONE, "addu", "core.checkedint", | |
122 | "FmmKbZm") | |
123 | DEF_D_LIB_BUILTIN (INTRINSIC_SUBS, BUILT_IN_NONE, "subs", "core.checkedint", | |
124 | "FiiKbZi") | |
125 | DEF_D_LIB_BUILTIN (INTRINSIC_SUBSL, BUILT_IN_NONE, "subs", "core.checkedint", | |
126 | "FllKbZl") | |
127 | DEF_D_LIB_BUILTIN (INTRINSIC_SUBU, BUILT_IN_NONE, "subu", "core.checkedint", | |
128 | "FkkKbZk") | |
129 | DEF_D_LIB_BUILTIN (INTRINSIC_SUBUL, BUILT_IN_NONE, "subu", "core.checkedint", | |
130 | "FmmKbZm") | |
131 | DEF_D_LIB_BUILTIN (INTRINSIC_MULS, BUILT_IN_NONE, "muls", "core.checkedint", | |
132 | "FiiKbZi") | |
133 | DEF_D_LIB_BUILTIN (INTRINSIC_MULSL, BUILT_IN_NONE, "muls", "core.checkedint", | |
134 | "FllKbZl") | |
135 | DEF_D_LIB_BUILTIN (INTRINSIC_MULU, BUILT_IN_NONE, "mulu", "core.checkedint", | |
136 | "FkkKbZk") | |
137 | DEF_D_LIB_BUILTIN (INTRINSIC_MULUI, BUILT_IN_NONE, "mulu", "core.checkedint", | |
138 | "FmkKbZm") | |
139 | DEF_D_LIB_BUILTIN (INTRINSIC_MULUL, BUILT_IN_NONE, "mulu", "core.checkedint", | |
140 | "FmmKbZm") | |
141 | DEF_D_LIB_BUILTIN (INTRINSIC_NEGS, BUILT_IN_NONE, "negs", "core.checkedint", | |
142 | "FiKbZi") | |
143 | DEF_D_LIB_BUILTIN (INTRINSIC_NEGSL, BUILT_IN_NONE, "negs", "core.checkedint", | |
144 | "FlKbZl") | |
b4c522fa IB |
145 | |
146 | /* core.math intrinsics. */ | |
147 | ||
28c7a463 IB |
148 | DEF_D_BUILTIN (INTRINSIC_COSF, BUILT_IN_COSF, "cos", "core.math", |
149 | "FNaNbNiNffZf") | |
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", | |
152 | "FNaNbNiNfeZe") | |
153 | DEF_D_BUILTIN (INTRINSIC_FABSF, BUILT_IN_FABSL, "fabs", "core.math", | |
154 | "FNaNbNiNffZf") | |
155 | DEF_D_BUILTIN (INTRINSIC_FABS, BUILT_IN_FABS, "fabs", "core.math", | |
156 | "FNaNbNiNfdZd") | |
157 | DEF_D_BUILTIN (INTRINSIC_FABSL, BUILT_IN_FABSL, "fabs", "core.math", | |
158 | "FNaNbNiNfeZe") | |
159 | DEF_D_BUILTIN (INTRINSIC_LDEXPF, BUILT_IN_LDEXPF, "ldexp", "core.math", | |
160 | "FNaNbNiNffiZf") | |
161 | DEF_D_BUILTIN (INTRINSIC_LDEXP, BUILT_IN_LDEXP, "ldexp", "core.math", | |
162 | "FNaNbNiNfdiZd") | |
163 | DEF_D_BUILTIN (INTRINSIC_LDEXPL, BUILT_IN_LDEXPL, "ldexp", "core.math", | |
164 | "FNaNbNiNfeiZe") | |
165 | DEF_D_BUILTIN (INTRINSIC_RINTF, BUILT_IN_RINTF, "rint", "core.math", | |
166 | "FNaNbNiNffZf") | |
167 | DEF_D_BUILTIN (INTRINSIC_RINT, BUILT_IN_RINT, "rint", "core.math", | |
168 | "FNaNbNiNfdZd") | |
169 | DEF_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_)'. */ |
174 | DEF_D_BUILTIN (INTRINSIC_RNDTOLF, BUILT_IN_LLROUNDF, "rndtol", "core.math", | |
175 | "FNaNbNiNffZl") | |
176 | DEF_D_BUILTIN (INTRINSIC_RNDTOL, BUILT_IN_LLROUND, "rndtol", "core.math", | |
177 | "FNaNbNiNfdZl") | |
178 | DEF_D_BUILTIN (INTRINSIC_RNDTOLL, BUILT_IN_LLROUNDL, "rndtol", "core.math", | |
179 | "FNaNbNiNfeZl") | |
180 | ||
181 | DEF_D_BUILTIN (INTRINSIC_SINF, BUILT_IN_SINF, "sin", "core.math", | |
182 | "FNaNbNiNffZf") | |
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", | |
185 | "FNaNbNiNfeZe") | |
186 | DEF_D_BUILTIN (INTRINSIC_SQRTF, BUILT_IN_SQRTF, "sqrt", "core.math", | |
187 | "FNaNbNiNffZf") | |
188 | DEF_D_BUILTIN (INTRINSIC_SQRT, BUILT_IN_SQRT, "sqrt", "core.math", | |
189 | "FNaNbNiNfdZd") | |
190 | DEF_D_BUILTIN (INTRINSIC_SQRTL, BUILT_IN_SQRTL, "sqrt", "core.math", | |
191 | "FNaNbNiNfeZe") | |
ef8f7e3f IB |
192 | DEF_D_LIB_BUILTIN (INTRINSIC_TOPRECF, BUILT_IN_NONE, "toPrec", "core.math", |
193 | "FfZ@1T") | |
194 | DEF_D_LIB_BUILTIN (INTRINSIC_TOPREC, BUILT_IN_NONE, "toPrec", "core.math", | |
195 | "FdZ@1T") | |
196 | DEF_D_LIB_BUILTIN (INTRINSIC_TOPRECL, BUILT_IN_NONE, "toPrec", "core.math", | |
197 | "FeZ@1T") | |
b4c522fa IB |
198 | |
199 | /* std.math intrinsics. */ | |
200 | ||
5fee5ec3 | 201 | DEF_CTFE_BUILTIN (INTRINSIC_TAN, BUILT_IN_TANL, "tan", "std.math.trigonometry", |
28c7a463 | 202 | "FNaNbNiNeeZe") |
5fee5ec3 IB |
203 | |
204 | DEF_CTFE_BUILTIN (INTRINSIC_ISNAN, BUILT_IN_ISNAN, "isNaN", "std.math.traits", | |
205 | "FNaNbNiNe@1XZb") | |
28c7a463 | 206 | DEF_CTFE_BUILTIN (INTRINSIC_ISINFINITY, BUILT_IN_ISINF, "isInfinity", |
5fee5ec3 IB |
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") | |
28c7a463 | 214 | |
5fee5ec3 | 215 | DEF_CTFE_BUILTIN (INTRINSIC_EXP, BUILT_IN_EXPL, "exp", "std.math.exponential", |
28c7a463 | 216 | "FNaNbNiNeeZe") |
5fee5ec3 IB |
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", | |
28c7a463 | 222 | "FNaNbNiNfeZe") |
5fee5ec3 IB |
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", | |
228 | "FNaNbNiNe@1F@1GZ@") | |
28c7a463 | 229 | |
5fee5ec3 IB |
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", | |
28c7a463 | 235 | "FNaNbNiNedZd") |
5fee5ec3 IB |
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", | |
28c7a463 | 239 | "FNaNbNiNefZf") |
5fee5ec3 | 240 | DEF_CTFE_BUILTIN (INTRINSIC_CEIL, BUILT_IN_CEIL, "ceil", "std.math.rounding", |
28c7a463 | 241 | "FNaNbNiNedZd") |
5fee5ec3 | 242 | DEF_CTFE_BUILTIN (INTRINSIC_CEILL, BUILT_IN_CEILL, "ceil", "std.math.rounding", |
28c7a463 | 243 | "FNaNbNiNeeZe") |
5fee5ec3 IB |
244 | DEF_CTFE_BUILTIN (INTRINSIC_TRUNC, BUILT_IN_TRUNCL, "trunc", |
245 | "std.math.rounding", "FNaNbNiNeeZe") | |
28c7a463 | 246 | |
5fee5ec3 | 247 | DEF_CTFE_BUILTIN (INTRINSIC_FMIN, BUILT_IN_FMINL, "fmin", "std.math.operations", |
28c7a463 | 248 | "FNaNbNiNfeeZe") |
5fee5ec3 | 249 | DEF_CTFE_BUILTIN (INTRINSIC_FMAX, BUILT_IN_FMAXL, "fmax", "std.math.operations", |
28c7a463 | 250 | "FNaNbNiNfeeZe") |
5fee5ec3 | 251 | DEF_CTFE_BUILTIN (INTRINSIC_FMA, BUILT_IN_FMAL, "fma", "std.math.operations", |
28c7a463 | 252 | "FNaNbNiNfeeeZe") |
b4c522fa IB |
253 | |
254 | /* core.stdc.stdarg intrinsics. */ | |
255 | ||
28c7a463 | 256 | DEF_D_BUILTIN (INTRINSIC_VA_ARG, BUILT_IN_NONE, "va_arg", "core.stdc.stdarg", |
5fee5ec3 | 257 | "FK@7va_listK@1TZv") |
28c7a463 | 258 | DEF_D_BUILTIN (INTRINSIC_C_VA_ARG, BUILT_IN_NONE, "va_arg", "core.stdc.stdarg", |
5fee5ec3 | 259 | "FK@7va_listZ@1T") |
28c7a463 | 260 | DEF_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 | ||
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", | |
270 | "F@2V0@2V1@1MZ@2V0") | |
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", | |
276 | "F@2V0@2V1@1MZ@2V0") | |
b93ae1a0 | 277 | |
b4c522fa IB |
278 | #undef DEF_D_BUILTIN |
279 | #undef DEF_CTFE_BUILTIN |