Daily bump.
[official-gcc.git] / gcc / d / intrinsics.def
blobf5af2a5fe5c7aeedbf4f014de8608a55c695559b
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)
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)
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",
44 "FNaNbNiNfkZi")
45 DEF_D_BUILTIN (INTRINSIC_BSR, BUILT_IN_NONE, "bsr", "core.bitop",
46 "FNaNbNiNfkZi")
47 DEF_D_BUILTIN (INTRINSIC_BT, BUILT_IN_NONE, "bt", "core.bitop",
48 "FNaNbNiMxPkkZi")
49 DEF_D_BUILTIN (INTRINSIC_BTC, BUILT_IN_NONE, "btc", "core.bitop",
50 "FNaNbNiPkkZi")
51 DEF_D_BUILTIN (INTRINSIC_BTR, BUILT_IN_NONE, "btr", "core.bitop",
52 "FNaNbNiPkkZi")
53 DEF_D_BUILTIN (INTRINSIC_BTS, BUILT_IN_NONE, "bts", "core.bitop",
54 "FNaNbNiPkkZi")
55 DEF_D_BUILTIN (INTRINSIC_BSF64, BUILT_IN_NONE, "bsf", "core.bitop",
56 "FNaNbNiNfmZi")
57 DEF_D_BUILTIN (INTRINSIC_BSR64, BUILT_IN_NONE, "bsr", "core.bitop",
58 "FNaNbNiNfmZi")
59 DEF_D_BUILTIN (INTRINSIC_BT64, BUILT_IN_NONE, "bt", "core.bitop",
60 "FNaNbNiMxPmmZi")
61 DEF_D_BUILTIN (INTRINSIC_BTC64, BUILT_IN_NONE, "btc", "core.bitop",
62 "FNaNbNiPmmZi")
63 DEF_D_BUILTIN (INTRINSIC_BTR64, BUILT_IN_NONE, "btr", "core.bitop",
64 "FNaNbNiPmmZi")
65 DEF_D_BUILTIN (INTRINSIC_BTS64, BUILT_IN_NONE, "bts", "core.bitop",
66 "FNaNbNiPmmZi")
68 DEF_D_BUILTIN (INTRINSIC_BSWAP16, BUILT_IN_BSWAP16, "byteswap", "core.bitop",
69 "FNaNbNiNftZt")
70 DEF_D_BUILTIN (INTRINSIC_BSWAP32, BUILT_IN_BSWAP32, "bswap", "core.bitop",
71 "FNaNbNiNfkZk")
72 DEF_D_BUILTIN (INTRINSIC_BSWAP64, BUILT_IN_BSWAP64, "bswap", "core.bitop",
73 "FNaNbNiNfmZm")
75 DEF_D_BUILTIN (INTRINSIC_POPCNT32, BUILT_IN_NONE, "popcnt", "core.bitop",
76 "FNaNbNiNfkZi")
77 DEF_D_BUILTIN (INTRINSIC_POPCNT64, BUILT_IN_NONE, "popcnt", "core.bitop",
78 "FNaNbNiNfmZi")
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",
82 "FNaI1TZI1T")
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",
85 "FNaI1TZI1T")
87 /* core.volatile intrinsics. */
89 DEF_D_BUILTIN (INTRINSIC_VLOAD8, BUILT_IN_NONE, "volatileLoad", "core.volatile",
90 "FNbNiNfPhZh")
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",
109 "FiiKbZi")
110 DEF_D_BUILTIN (INTRINSIC_ADDSL, BUILT_IN_NONE, "adds", "core.checkedint",
111 "FllKbZl")
112 DEF_D_BUILTIN (INTRINSIC_ADDU, BUILT_IN_NONE, "addu", "core.checkedint",
113 "FkkKbZk")
114 DEF_D_BUILTIN (INTRINSIC_ADDUL, BUILT_IN_NONE, "addu", "core.checkedint",
115 "FmmKbZm")
116 DEF_D_BUILTIN (INTRINSIC_SUBS, BUILT_IN_NONE, "subs", "core.checkedint",
117 "FiiKbZi")
118 DEF_D_BUILTIN (INTRINSIC_SUBSL, BUILT_IN_NONE, "subs", "core.checkedint",
119 "FllKbZl")
120 DEF_D_BUILTIN (INTRINSIC_SUBU, BUILT_IN_NONE, "subu", "core.checkedint",
121 "FkkKbZk")
122 DEF_D_BUILTIN (INTRINSIC_SUBUL, BUILT_IN_NONE, "subu", "core.checkedint",
123 "FmmKbZm")
124 DEF_D_BUILTIN (INTRINSIC_MULS, BUILT_IN_NONE, "muls", "core.checkedint",
125 "FiiKbZi")
126 DEF_D_BUILTIN (INTRINSIC_MULSL, BUILT_IN_NONE, "muls", "core.checkedint",
127 "FllKbZl")
128 DEF_D_BUILTIN (INTRINSIC_MULU, BUILT_IN_NONE, "mulu", "core.checkedint",
129 "FkkKbZk")
130 DEF_D_BUILTIN (INTRINSIC_MULUI, BUILT_IN_NONE, "mulu", "core.checkedint",
131 "FmkKbZm")
132 DEF_D_BUILTIN (INTRINSIC_MULUL, BUILT_IN_NONE, "mulu", "core.checkedint",
133 "FmmKbZm")
134 DEF_D_BUILTIN (INTRINSIC_NEGS, BUILT_IN_NONE, "negs", "core.checkedint",
135 "FiKbZi")
136 DEF_D_BUILTIN (INTRINSIC_NEGSL, BUILT_IN_NONE, "negs", "core.checkedint",
137 "FlKbZl")
139 /* core.math intrinsics. */
141 DEF_D_BUILTIN (INTRINSIC_COSF, BUILT_IN_COSF, "cos", "core.math",
142 "FNaNbNiNffZf")
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",
145 "FNaNbNiNfeZe")
146 DEF_D_BUILTIN (INTRINSIC_FABSF, BUILT_IN_FABSL, "fabs", "core.math",
147 "FNaNbNiNffZf")
148 DEF_D_BUILTIN (INTRINSIC_FABS, BUILT_IN_FABS, "fabs", "core.math",
149 "FNaNbNiNfdZd")
150 DEF_D_BUILTIN (INTRINSIC_FABSL, BUILT_IN_FABSL, "fabs", "core.math",
151 "FNaNbNiNfeZe")
152 DEF_D_BUILTIN (INTRINSIC_LDEXPF, BUILT_IN_LDEXPF, "ldexp", "core.math",
153 "FNaNbNiNffiZf")
154 DEF_D_BUILTIN (INTRINSIC_LDEXP, BUILT_IN_LDEXP, "ldexp", "core.math",
155 "FNaNbNiNfdiZd")
156 DEF_D_BUILTIN (INTRINSIC_LDEXPL, BUILT_IN_LDEXPL, "ldexp", "core.math",
157 "FNaNbNiNfeiZe")
158 DEF_D_BUILTIN (INTRINSIC_RINTF, BUILT_IN_RINTF, "rint", "core.math",
159 "FNaNbNiNffZf")
160 DEF_D_BUILTIN (INTRINSIC_RINT, BUILT_IN_RINT, "rint", "core.math",
161 "FNaNbNiNfdZd")
162 DEF_D_BUILTIN (INTRINSIC_RINTL, BUILT_IN_RINTL, "rint", "core.math",
163 "FNaNbNiNfeZe")
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",
168 "FNaNbNiNffZl")
169 DEF_D_BUILTIN (INTRINSIC_RNDTOL, BUILT_IN_LLROUND, "rndtol", "core.math",
170 "FNaNbNiNfdZl")
171 DEF_D_BUILTIN (INTRINSIC_RNDTOLL, BUILT_IN_LLROUNDL, "rndtol", "core.math",
172 "FNaNbNiNfeZl")
174 DEF_D_BUILTIN (INTRINSIC_SINF, BUILT_IN_SINF, "sin", "core.math",
175 "FNaNbNiNffZf")
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",
178 "FNaNbNiNfeZe")
179 DEF_D_BUILTIN (INTRINSIC_SQRTF, BUILT_IN_SQRTF, "sqrt", "core.math",
180 "FNaNbNiNffZf")
181 DEF_D_BUILTIN (INTRINSIC_SQRT, BUILT_IN_SQRT, "sqrt", "core.math",
182 "FNaNbNiNfdZd")
183 DEF_D_BUILTIN (INTRINSIC_SQRTL, BUILT_IN_SQRTL, "sqrt", "core.math",
184 "FNaNbNiNfeZe")
185 DEF_D_BUILTIN (INTRINSIC_TOPRECF, BUILT_IN_NONE, "toPrec", "core.math",
186 "FfZI1T")
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",
189 "FeZI1T")
191 /* std.math intrinsics. */
193 DEF_CTFE_BUILTIN (INTRINSIC_TAN, BUILT_IN_TANL, "tan", "std.math",
194 "FNaNbNiNeeZe")
195 DEF_CTFE_BUILTIN (INTRINSIC_ISNAN, BUILT_IN_ISNAN, "isNaN", "std.math",
196 "FNaNbNiNeI1XZb")
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",
200 "FNaNbNiNeI1XZb")
202 DEF_CTFE_BUILTIN (INTRINSIC_EXP, BUILT_IN_EXPL, "exp", "std.math",
203 "FNaNbNiNeeZe")
204 DEF_CTFE_BUILTIN (INTRINSIC_EXPM1, BUILT_IN_EXPM1L, "expm1", "std.math",
205 "FNaNbNiNeeZe")
206 DEF_CTFE_BUILTIN (INTRINSIC_EXP2, BUILT_IN_EXP2L, "exp2", "std.math",
207 "FNaNbNiNeeZe")
209 DEF_CTFE_BUILTIN (INTRINSIC_LOG, BUILT_IN_LOGL, "log", "std.math",
210 "FNaNbNiNfeZe")
211 DEF_CTFE_BUILTIN (INTRINSIC_LOG2, BUILT_IN_LOG2L, "log2", "std.math",
212 "FNaNbNiNfeZe")
213 DEF_CTFE_BUILTIN (INTRINSIC_LOG10, BUILT_IN_LOG10L, "log10", "std.math",
214 "FNaNbNiNfeZe")
216 DEF_CTFE_BUILTIN (INTRINSIC_ROUND, BUILT_IN_ROUNDL, "round", "std.math",
217 "FNbNiNeeZe")
218 DEF_CTFE_BUILTIN (INTRINSIC_FLOORF, BUILT_IN_FLOORF, "floor", "std.math",
219 "FNaNbNiNefZf")
220 DEF_CTFE_BUILTIN (INTRINSIC_FLOOR, BUILT_IN_FLOOR, "floor", "std.math",
221 "FNaNbNiNedZd")
222 DEF_CTFE_BUILTIN (INTRINSIC_FLOORL, BUILT_IN_FLOORL, "floor", "std.math",
223 "FNaNbNiNeeZe")
224 DEF_CTFE_BUILTIN (INTRINSIC_CEILF, BUILT_IN_CEILF, "ceil", "std.math",
225 "FNaNbNiNefZf")
226 DEF_CTFE_BUILTIN (INTRINSIC_CEIL, BUILT_IN_CEIL, "ceil", "std.math",
227 "FNaNbNiNedZd")
228 DEF_CTFE_BUILTIN (INTRINSIC_CEILL, BUILT_IN_CEILL, "ceil", "std.math",
229 "FNaNbNiNeeZe")
231 DEF_CTFE_BUILTIN (INTRINSIC_TRUNC, BUILT_IN_TRUNCL, "trunc", "std.math",
232 "FNbNiNeeZe")
233 DEF_CTFE_BUILTIN (INTRINSIC_FMIN, BUILT_IN_FMINL, "fmin", "std.math",
234 "FNaNbNiNfeeZe")
235 DEF_CTFE_BUILTIN (INTRINSIC_FMAX, BUILT_IN_FMAXL, "fmax", "std.math",
236 "FNaNbNiNfeeZe")
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",
243 "FNaNbNiNeI1FI1GZ@")
244 DEF_CTFE_BUILTIN (INTRINSIC_FMA, BUILT_IN_FMAL, "fma", "std.math",
245 "FNaNbNiNfeeeZe")
247 /* core.stdc.stdarg intrinsics. */
249 DEF_D_BUILTIN (INTRINSIC_VA_ARG, BUILT_IN_NONE, "va_arg", "core.stdc.stdarg",
250 "FKI7va_listKI1TZv")
251 DEF_D_BUILTIN (INTRINSIC_C_VA_ARG, BUILT_IN_NONE, "va_arg", "core.stdc.stdarg",
252 "FKI7va_listZI1T")
253 DEF_D_BUILTIN (INTRINSIC_VASTART, BUILT_IN_NONE, "va_start", "core.stdc.stdarg",
254 "FJI7va_listKI1TZv")
256 #undef DEF_D_BUILTIN
257 #undef DEF_CTFE_BUILTIN