Skip several gcc.dg/builtin-dynamic-object-size tests on hppa*-*-hpux*
[official-gcc.git] / gcc / d / intrinsics.def
blob24c9830c7e3ef880f7177d0e8cb6a17a04e63930
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)
7 any later version.
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",
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")
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")
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")
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")
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")
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")
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")
94 /* core.volatile intrinsics. */
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")
113 /* core.checkedint intrinsics. */
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")
146 /* core.math intrinsics. */
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")
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",
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")
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")
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")
199 /* std.math intrinsics. */
201 DEF_CTFE_BUILTIN (INTRINSIC_TAN, BUILT_IN_TANL, "tan", "std.math.trigonometry",
202 "FNaNbNiNeeZe")
204 DEF_CTFE_BUILTIN (INTRINSIC_ISNAN, BUILT_IN_ISNAN, "isNaN", "std.math.traits",
205 "FNaNbNiNe@1XZb")
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",
216 "FNaNbNiNeeZe")
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",
222 "FNaNbNiNfeZe")
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@")
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",
235 "FNaNbNiNedZd")
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",
239 "FNaNbNiNefZf")
240 DEF_CTFE_BUILTIN (INTRINSIC_CEIL, BUILT_IN_CEIL, "ceil", "std.math.rounding",
241 "FNaNbNiNedZd")
242 DEF_CTFE_BUILTIN (INTRINSIC_CEILL, BUILT_IN_CEILL, "ceil", "std.math.rounding",
243 "FNaNbNiNeeZe")
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",
248 "FNaNbNiNfeeZe")
249 DEF_CTFE_BUILTIN (INTRINSIC_FMAX, BUILT_IN_FMAXL, "fmax", "std.math.operations",
250 "FNaNbNiNfeeZe")
251 DEF_CTFE_BUILTIN (INTRINSIC_FMA, BUILT_IN_FMAL, "fma", "std.math.operations",
252 "FNaNbNiNfeeeZe")
254 /* core.stdc.stdarg intrinsics. */
256 DEF_D_BUILTIN (INTRINSIC_VA_ARG, BUILT_IN_NONE, "va_arg", "core.stdc.stdarg",
257 "FK@7va_listK@1TZv")
258 DEF_D_BUILTIN (INTRINSIC_C_VA_ARG, BUILT_IN_NONE, "va_arg", "core.stdc.stdarg",
259 "FK@7va_listZ@1T")
260 DEF_D_BUILTIN (INTRINSIC_VASTART, BUILT_IN_NONE, "va_start", "core.stdc.stdarg",
261 "FJ@7va_listK@1TZv")
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",
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")
278 #undef DEF_D_BUILTIN
279 #undef DEF_CTFE_BUILTIN