1 | //===-- llvm/RuntimeLibcalls.def - File that describes libcalls -*- C++ -*-===// |
2 | // |
3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
4 | // See https://llvm.org/LICENSE.txt for license information. |
5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
6 | // |
7 | //===----------------------------------------------------------------------===// |
8 | // |
9 | // This file defines all of the runtime library calls the backend can emit. |
10 | // The various long double types cannot be merged, because 80-bit library |
11 | // functions use "xf" and 128-bit use "tf". |
12 | // |
13 | // When adding PPCF128 functions here, note that their names generally need |
14 | // to be overridden for Darwin with the xxx$LDBL128 form. See |
15 | // PPCISelLowering.cpp. |
16 | // |
17 | //===----------------------------------------------------------------------===// |
18 | |
19 | // NOTE: NO INCLUDE GUARD DESIRED! |
20 | |
21 | // Provide definitions of macros so that users of this file do not have to |
22 | // define everything to use it... |
23 | |
24 | // Declare the enumerator for each libcall, along with its default name. Some |
25 | // libcalls have different names on particular OSes or architectures. These |
26 | // are set in InitLibcalls() in TargetLoweringBase.cpp and/or by targets |
27 | // using TargetLoweringBase::setLibcallName() |
28 | #ifndef HANDLE_LIBCALL |
29 | #error "HANDLE_LIBCALL must be defined" |
30 | #endif |
31 | |
32 | // Integer |
33 | HANDLE_LIBCALL(SHL_I16, "__ashlhi3" ) |
34 | HANDLE_LIBCALL(SHL_I32, "__ashlsi3" ) |
35 | HANDLE_LIBCALL(SHL_I64, "__ashldi3" ) |
36 | HANDLE_LIBCALL(SHL_I128, "__ashlti3" ) |
37 | HANDLE_LIBCALL(SRL_I16, "__lshrhi3" ) |
38 | HANDLE_LIBCALL(SRL_I32, "__lshrsi3" ) |
39 | HANDLE_LIBCALL(SRL_I64, "__lshrdi3" ) |
40 | HANDLE_LIBCALL(SRL_I128, "__lshrti3" ) |
41 | HANDLE_LIBCALL(SRA_I16, "__ashrhi3" ) |
42 | HANDLE_LIBCALL(SRA_I32, "__ashrsi3" ) |
43 | HANDLE_LIBCALL(SRA_I64, "__ashrdi3" ) |
44 | HANDLE_LIBCALL(SRA_I128, "__ashrti3" ) |
45 | HANDLE_LIBCALL(MUL_I8, "__mulqi3" ) |
46 | HANDLE_LIBCALL(MUL_I16, "__mulhi3" ) |
47 | HANDLE_LIBCALL(MUL_I32, "__mulsi3" ) |
48 | HANDLE_LIBCALL(MUL_I64, "__muldi3" ) |
49 | HANDLE_LIBCALL(MUL_I128, "__multi3" ) |
50 | HANDLE_LIBCALL(MULO_I32, "__mulosi4" ) |
51 | HANDLE_LIBCALL(MULO_I64, "__mulodi4" ) |
52 | HANDLE_LIBCALL(MULO_I128, "__muloti4" ) |
53 | HANDLE_LIBCALL(SDIV_I8, "__divqi3" ) |
54 | HANDLE_LIBCALL(SDIV_I16, "__divhi3" ) |
55 | HANDLE_LIBCALL(SDIV_I32, "__divsi3" ) |
56 | HANDLE_LIBCALL(SDIV_I64, "__divdi3" ) |
57 | HANDLE_LIBCALL(SDIV_I128, "__divti3" ) |
58 | HANDLE_LIBCALL(UDIV_I8, "__udivqi3" ) |
59 | HANDLE_LIBCALL(UDIV_I16, "__udivhi3" ) |
60 | HANDLE_LIBCALL(UDIV_I32, "__udivsi3" ) |
61 | HANDLE_LIBCALL(UDIV_I64, "__udivdi3" ) |
62 | HANDLE_LIBCALL(UDIV_I128, "__udivti3" ) |
63 | HANDLE_LIBCALL(SREM_I8, "__modqi3" ) |
64 | HANDLE_LIBCALL(SREM_I16, "__modhi3" ) |
65 | HANDLE_LIBCALL(SREM_I32, "__modsi3" ) |
66 | HANDLE_LIBCALL(SREM_I64, "__moddi3" ) |
67 | HANDLE_LIBCALL(SREM_I128, "__modti3" ) |
68 | HANDLE_LIBCALL(UREM_I8, "__umodqi3" ) |
69 | HANDLE_LIBCALL(UREM_I16, "__umodhi3" ) |
70 | HANDLE_LIBCALL(UREM_I32, "__umodsi3" ) |
71 | HANDLE_LIBCALL(UREM_I64, "__umoddi3" ) |
72 | HANDLE_LIBCALL(UREM_I128, "__umodti3" ) |
73 | HANDLE_LIBCALL(SDIVREM_I8, nullptr) |
74 | HANDLE_LIBCALL(SDIVREM_I16, nullptr) |
75 | HANDLE_LIBCALL(SDIVREM_I32, nullptr) |
76 | HANDLE_LIBCALL(SDIVREM_I64, nullptr) |
77 | HANDLE_LIBCALL(SDIVREM_I128, nullptr) |
78 | HANDLE_LIBCALL(UDIVREM_I8, nullptr) |
79 | HANDLE_LIBCALL(UDIVREM_I16, nullptr) |
80 | HANDLE_LIBCALL(UDIVREM_I32, nullptr) |
81 | HANDLE_LIBCALL(UDIVREM_I64, nullptr) |
82 | HANDLE_LIBCALL(UDIVREM_I128, nullptr) |
83 | HANDLE_LIBCALL(NEG_I32, "__negsi2" ) |
84 | HANDLE_LIBCALL(NEG_I64, "__negdi2" ) |
85 | HANDLE_LIBCALL(CTLZ_I32, "__clzsi2" ) |
86 | HANDLE_LIBCALL(CTLZ_I64, "__clzdi2" ) |
87 | HANDLE_LIBCALL(CTLZ_I128, "__clzti2" ) |
88 | |
89 | // Floating-point |
90 | HANDLE_LIBCALL(ADD_F32, "__addsf3" ) |
91 | HANDLE_LIBCALL(ADD_F64, "__adddf3" ) |
92 | HANDLE_LIBCALL(ADD_F80, "__addxf3" ) |
93 | HANDLE_LIBCALL(ADD_F128, "__addtf3" ) |
94 | HANDLE_LIBCALL(ADD_PPCF128, "__gcc_qadd" ) |
95 | HANDLE_LIBCALL(SUB_F32, "__subsf3" ) |
96 | HANDLE_LIBCALL(SUB_F64, "__subdf3" ) |
97 | HANDLE_LIBCALL(SUB_F80, "__subxf3" ) |
98 | HANDLE_LIBCALL(SUB_F128, "__subtf3" ) |
99 | HANDLE_LIBCALL(SUB_PPCF128, "__gcc_qsub" ) |
100 | HANDLE_LIBCALL(MUL_F32, "__mulsf3" ) |
101 | HANDLE_LIBCALL(MUL_F64, "__muldf3" ) |
102 | HANDLE_LIBCALL(MUL_F80, "__mulxf3" ) |
103 | HANDLE_LIBCALL(MUL_F128, "__multf3" ) |
104 | HANDLE_LIBCALL(MUL_PPCF128, "__gcc_qmul" ) |
105 | HANDLE_LIBCALL(DIV_F32, "__divsf3" ) |
106 | HANDLE_LIBCALL(DIV_F64, "__divdf3" ) |
107 | HANDLE_LIBCALL(DIV_F80, "__divxf3" ) |
108 | HANDLE_LIBCALL(DIV_F128, "__divtf3" ) |
109 | HANDLE_LIBCALL(DIV_PPCF128, "__gcc_qdiv" ) |
110 | HANDLE_LIBCALL(REM_F32, "fmodf" ) |
111 | HANDLE_LIBCALL(REM_F64, "fmod" ) |
112 | HANDLE_LIBCALL(REM_F80, "fmodl" ) |
113 | HANDLE_LIBCALL(REM_F128, "fmodl" ) |
114 | HANDLE_LIBCALL(REM_PPCF128, "fmodl" ) |
115 | HANDLE_LIBCALL(FMA_F32, "fmaf" ) |
116 | HANDLE_LIBCALL(FMA_F64, "fma" ) |
117 | HANDLE_LIBCALL(FMA_F80, "fmal" ) |
118 | HANDLE_LIBCALL(FMA_F128, "fmal" ) |
119 | HANDLE_LIBCALL(FMA_PPCF128, "fmal" ) |
120 | HANDLE_LIBCALL(POWI_F32, "__powisf2" ) |
121 | HANDLE_LIBCALL(POWI_F64, "__powidf2" ) |
122 | HANDLE_LIBCALL(POWI_F80, "__powixf2" ) |
123 | HANDLE_LIBCALL(POWI_F128, "__powitf2" ) |
124 | HANDLE_LIBCALL(POWI_PPCF128, "__powitf2" ) |
125 | HANDLE_LIBCALL(SQRT_F32, "sqrtf" ) |
126 | HANDLE_LIBCALL(SQRT_F64, "sqrt" ) |
127 | HANDLE_LIBCALL(SQRT_F80, "sqrtl" ) |
128 | HANDLE_LIBCALL(SQRT_F128, "sqrtl" ) |
129 | HANDLE_LIBCALL(SQRT_PPCF128, "sqrtl" ) |
130 | HANDLE_LIBCALL(CBRT_F32, "cbrtf" ) |
131 | HANDLE_LIBCALL(CBRT_F64, "cbrt" ) |
132 | HANDLE_LIBCALL(CBRT_F80, "cbrtl" ) |
133 | HANDLE_LIBCALL(CBRT_F128, "cbrtl" ) |
134 | HANDLE_LIBCALL(CBRT_PPCF128, "cbrtl" ) |
135 | HANDLE_LIBCALL(LOG_F32, "logf" ) |
136 | HANDLE_LIBCALL(LOG_F64, "log" ) |
137 | HANDLE_LIBCALL(LOG_F80, "logl" ) |
138 | HANDLE_LIBCALL(LOG_F128, "logl" ) |
139 | HANDLE_LIBCALL(LOG_PPCF128, "logl" ) |
140 | HANDLE_LIBCALL(LOG_FINITE_F32, "__logf_finite" ) |
141 | HANDLE_LIBCALL(LOG_FINITE_F64, "__log_finite" ) |
142 | HANDLE_LIBCALL(LOG_FINITE_F80, "__logl_finite" ) |
143 | HANDLE_LIBCALL(LOG_FINITE_F128, "__logl_finite" ) |
144 | HANDLE_LIBCALL(LOG_FINITE_PPCF128, "__logl_finite" ) |
145 | HANDLE_LIBCALL(LOG2_F32, "log2f" ) |
146 | HANDLE_LIBCALL(LOG2_F64, "log2" ) |
147 | HANDLE_LIBCALL(LOG2_F80, "log2l" ) |
148 | HANDLE_LIBCALL(LOG2_F128, "log2l" ) |
149 | HANDLE_LIBCALL(LOG2_PPCF128, "log2l" ) |
150 | HANDLE_LIBCALL(LOG2_FINITE_F32, "__log2f_finite" ) |
151 | HANDLE_LIBCALL(LOG2_FINITE_F64, "__log2_finite" ) |
152 | HANDLE_LIBCALL(LOG2_FINITE_F80, "__log2l_finite" ) |
153 | HANDLE_LIBCALL(LOG2_FINITE_F128, "__log2l_finite" ) |
154 | HANDLE_LIBCALL(LOG2_FINITE_PPCF128, "__log2l_finite" ) |
155 | HANDLE_LIBCALL(LOG10_F32, "log10f" ) |
156 | HANDLE_LIBCALL(LOG10_F64, "log10" ) |
157 | HANDLE_LIBCALL(LOG10_F80, "log10l" ) |
158 | HANDLE_LIBCALL(LOG10_F128, "log10l" ) |
159 | HANDLE_LIBCALL(LOG10_PPCF128, "log10l" ) |
160 | HANDLE_LIBCALL(LOG10_FINITE_F32, "__log10f_finite" ) |
161 | HANDLE_LIBCALL(LOG10_FINITE_F64, "__log10_finite" ) |
162 | HANDLE_LIBCALL(LOG10_FINITE_F80, "__log10l_finite" ) |
163 | HANDLE_LIBCALL(LOG10_FINITE_F128, "__log10l_finite" ) |
164 | HANDLE_LIBCALL(LOG10_FINITE_PPCF128, "__log10l_finite" ) |
165 | HANDLE_LIBCALL(EXP_F32, "expf" ) |
166 | HANDLE_LIBCALL(EXP_F64, "exp" ) |
167 | HANDLE_LIBCALL(EXP_F80, "expl" ) |
168 | HANDLE_LIBCALL(EXP_F128, "expl" ) |
169 | HANDLE_LIBCALL(EXP_PPCF128, "expl" ) |
170 | HANDLE_LIBCALL(EXP_FINITE_F32, "__expf_finite" ) |
171 | HANDLE_LIBCALL(EXP_FINITE_F64, "__exp_finite" ) |
172 | HANDLE_LIBCALL(EXP_FINITE_F80, "__expl_finite" ) |
173 | HANDLE_LIBCALL(EXP_FINITE_F128, "__expl_finite" ) |
174 | HANDLE_LIBCALL(EXP_FINITE_PPCF128, "__expl_finite" ) |
175 | HANDLE_LIBCALL(EXP2_F32, "exp2f" ) |
176 | HANDLE_LIBCALL(EXP2_F64, "exp2" ) |
177 | HANDLE_LIBCALL(EXP2_F80, "exp2l" ) |
178 | HANDLE_LIBCALL(EXP2_F128, "exp2l" ) |
179 | HANDLE_LIBCALL(EXP2_PPCF128, "exp2l" ) |
180 | HANDLE_LIBCALL(EXP2_FINITE_F32, "__exp2f_finite" ) |
181 | HANDLE_LIBCALL(EXP2_FINITE_F64, "__exp2_finite" ) |
182 | HANDLE_LIBCALL(EXP2_FINITE_F80, "__exp2l_finite" ) |
183 | HANDLE_LIBCALL(EXP2_FINITE_F128, "__exp2l_finite" ) |
184 | HANDLE_LIBCALL(EXP2_FINITE_PPCF128, "__exp2l_finite" ) |
185 | HANDLE_LIBCALL(EXP10_F32, "exp10f" ) |
186 | HANDLE_LIBCALL(EXP10_F64, "exp10" ) |
187 | HANDLE_LIBCALL(EXP10_F80, "exp10l" ) |
188 | HANDLE_LIBCALL(EXP10_F128, "exp10l" ) |
189 | HANDLE_LIBCALL(EXP10_PPCF128, "exp10l" ) |
190 | HANDLE_LIBCALL(SIN_F32, "sinf" ) |
191 | HANDLE_LIBCALL(SIN_F64, "sin" ) |
192 | HANDLE_LIBCALL(SIN_F80, "sinl" ) |
193 | HANDLE_LIBCALL(SIN_F128, "sinl" ) |
194 | HANDLE_LIBCALL(SIN_PPCF128, "sinl" ) |
195 | HANDLE_LIBCALL(COS_F32, "cosf" ) |
196 | HANDLE_LIBCALL(COS_F64, "cos" ) |
197 | HANDLE_LIBCALL(COS_F80, "cosl" ) |
198 | HANDLE_LIBCALL(COS_F128, "cosl" ) |
199 | HANDLE_LIBCALL(COS_PPCF128, "cosl" ) |
200 | HANDLE_LIBCALL(SINCOS_F32, nullptr) |
201 | HANDLE_LIBCALL(SINCOS_F64, nullptr) |
202 | HANDLE_LIBCALL(SINCOS_F80, nullptr) |
203 | HANDLE_LIBCALL(SINCOS_F128, nullptr) |
204 | HANDLE_LIBCALL(SINCOS_PPCF128, nullptr) |
205 | HANDLE_LIBCALL(SINCOS_STRET_F32, nullptr) |
206 | HANDLE_LIBCALL(SINCOS_STRET_F64, nullptr) |
207 | HANDLE_LIBCALL(POW_F32, "powf" ) |
208 | HANDLE_LIBCALL(POW_F64, "pow" ) |
209 | HANDLE_LIBCALL(POW_F80, "powl" ) |
210 | HANDLE_LIBCALL(POW_F128, "powl" ) |
211 | HANDLE_LIBCALL(POW_PPCF128, "powl" ) |
212 | HANDLE_LIBCALL(POW_FINITE_F32, "__powf_finite" ) |
213 | HANDLE_LIBCALL(POW_FINITE_F64, "__pow_finite" ) |
214 | HANDLE_LIBCALL(POW_FINITE_F80, "__powl_finite" ) |
215 | HANDLE_LIBCALL(POW_FINITE_F128, "__powl_finite" ) |
216 | HANDLE_LIBCALL(POW_FINITE_PPCF128, "__powl_finite" ) |
217 | HANDLE_LIBCALL(CEIL_F32, "ceilf" ) |
218 | HANDLE_LIBCALL(CEIL_F64, "ceil" ) |
219 | HANDLE_LIBCALL(CEIL_F80, "ceill" ) |
220 | HANDLE_LIBCALL(CEIL_F128, "ceill" ) |
221 | HANDLE_LIBCALL(CEIL_PPCF128, "ceill" ) |
222 | HANDLE_LIBCALL(TRUNC_F32, "truncf" ) |
223 | HANDLE_LIBCALL(TRUNC_F64, "trunc" ) |
224 | HANDLE_LIBCALL(TRUNC_F80, "truncl" ) |
225 | HANDLE_LIBCALL(TRUNC_F128, "truncl" ) |
226 | HANDLE_LIBCALL(TRUNC_PPCF128, "truncl" ) |
227 | HANDLE_LIBCALL(RINT_F32, "rintf" ) |
228 | HANDLE_LIBCALL(RINT_F64, "rint" ) |
229 | HANDLE_LIBCALL(RINT_F80, "rintl" ) |
230 | HANDLE_LIBCALL(RINT_F128, "rintl" ) |
231 | HANDLE_LIBCALL(RINT_PPCF128, "rintl" ) |
232 | HANDLE_LIBCALL(NEARBYINT_F32, "nearbyintf" ) |
233 | HANDLE_LIBCALL(NEARBYINT_F64, "nearbyint" ) |
234 | HANDLE_LIBCALL(NEARBYINT_F80, "nearbyintl" ) |
235 | HANDLE_LIBCALL(NEARBYINT_F128, "nearbyintl" ) |
236 | HANDLE_LIBCALL(NEARBYINT_PPCF128, "nearbyintl" ) |
237 | HANDLE_LIBCALL(ROUND_F32, "roundf" ) |
238 | HANDLE_LIBCALL(ROUND_F64, "round" ) |
239 | HANDLE_LIBCALL(ROUND_F80, "roundl" ) |
240 | HANDLE_LIBCALL(ROUND_F128, "roundl" ) |
241 | HANDLE_LIBCALL(ROUND_PPCF128, "roundl" ) |
242 | HANDLE_LIBCALL(ROUNDEVEN_F32, "roundevenf" ) |
243 | HANDLE_LIBCALL(ROUNDEVEN_F64, "roundeven" ) |
244 | HANDLE_LIBCALL(ROUNDEVEN_F80, "roundevenl" ) |
245 | HANDLE_LIBCALL(ROUNDEVEN_F128, "roundevenl" ) |
246 | HANDLE_LIBCALL(ROUNDEVEN_PPCF128, "roundevenl" ) |
247 | HANDLE_LIBCALL(FLOOR_F32, "floorf" ) |
248 | HANDLE_LIBCALL(FLOOR_F64, "floor" ) |
249 | HANDLE_LIBCALL(FLOOR_F80, "floorl" ) |
250 | HANDLE_LIBCALL(FLOOR_F128, "floorl" ) |
251 | HANDLE_LIBCALL(FLOOR_PPCF128, "floorl" ) |
252 | HANDLE_LIBCALL(COPYSIGN_F32, "copysignf" ) |
253 | HANDLE_LIBCALL(COPYSIGN_F64, "copysign" ) |
254 | HANDLE_LIBCALL(COPYSIGN_F80, "copysignl" ) |
255 | HANDLE_LIBCALL(COPYSIGN_F128, "copysignl" ) |
256 | HANDLE_LIBCALL(COPYSIGN_PPCF128, "copysignl" ) |
257 | HANDLE_LIBCALL(FMIN_F32, "fminf" ) |
258 | HANDLE_LIBCALL(FMIN_F64, "fmin" ) |
259 | HANDLE_LIBCALL(FMIN_F80, "fminl" ) |
260 | HANDLE_LIBCALL(FMIN_F128, "fminl" ) |
261 | HANDLE_LIBCALL(FMIN_PPCF128, "fminl" ) |
262 | HANDLE_LIBCALL(FMAX_F32, "fmaxf" ) |
263 | HANDLE_LIBCALL(FMAX_F64, "fmax" ) |
264 | HANDLE_LIBCALL(FMAX_F80, "fmaxl" ) |
265 | HANDLE_LIBCALL(FMAX_F128, "fmaxl" ) |
266 | HANDLE_LIBCALL(FMAX_PPCF128, "fmaxl" ) |
267 | HANDLE_LIBCALL(LROUND_F32, "lroundf" ) |
268 | HANDLE_LIBCALL(LROUND_F64, "lround" ) |
269 | HANDLE_LIBCALL(LROUND_F80, "lroundl" ) |
270 | HANDLE_LIBCALL(LROUND_F128, "lroundl" ) |
271 | HANDLE_LIBCALL(LROUND_PPCF128, "lroundl" ) |
272 | HANDLE_LIBCALL(LLROUND_F32, "llroundf" ) |
273 | HANDLE_LIBCALL(LLROUND_F64, "llround" ) |
274 | HANDLE_LIBCALL(LLROUND_F80, "llroundl" ) |
275 | HANDLE_LIBCALL(LLROUND_F128, "llroundl" ) |
276 | HANDLE_LIBCALL(LLROUND_PPCF128, "llroundl" ) |
277 | HANDLE_LIBCALL(LRINT_F32, "lrintf" ) |
278 | HANDLE_LIBCALL(LRINT_F64, "lrint" ) |
279 | HANDLE_LIBCALL(LRINT_F80, "lrintl" ) |
280 | HANDLE_LIBCALL(LRINT_F128, "lrintl" ) |
281 | HANDLE_LIBCALL(LRINT_PPCF128, "lrintl" ) |
282 | HANDLE_LIBCALL(LLRINT_F32, "llrintf" ) |
283 | HANDLE_LIBCALL(LLRINT_F64, "llrint" ) |
284 | HANDLE_LIBCALL(LLRINT_F80, "llrintl" ) |
285 | HANDLE_LIBCALL(LLRINT_F128, "llrintl" ) |
286 | HANDLE_LIBCALL(LLRINT_PPCF128, "llrintl" ) |
287 | HANDLE_LIBCALL(LDEXP_F32, "ldexpf" ) |
288 | HANDLE_LIBCALL(LDEXP_F64, "ldexp" ) |
289 | HANDLE_LIBCALL(LDEXP_F80, "ldexpl" ) |
290 | HANDLE_LIBCALL(LDEXP_F128, "ldexpl" ) |
291 | HANDLE_LIBCALL(LDEXP_PPCF128, "ldexpl" ) |
292 | HANDLE_LIBCALL(FREXP_F32, "frexpf" ) |
293 | HANDLE_LIBCALL(FREXP_F64, "frexp" ) |
294 | HANDLE_LIBCALL(FREXP_F80, "frexpl" ) |
295 | HANDLE_LIBCALL(FREXP_F128, "frexpl" ) |
296 | HANDLE_LIBCALL(FREXP_PPCF128, "frexpl" ) |
297 | |
298 | // Floating point environment |
299 | HANDLE_LIBCALL(FEGETENV, "fegetenv" ) |
300 | HANDLE_LIBCALL(FESETENV, "fesetenv" ) |
301 | |
302 | // Floating point control modes |
303 | HANDLE_LIBCALL(FEGETMODE, "fegetmode" ) |
304 | HANDLE_LIBCALL(FESETMODE, "fesetmode" ) |
305 | |
306 | // Conversion |
307 | HANDLE_LIBCALL(FPEXT_F32_PPCF128, "__gcc_stoq" ) |
308 | HANDLE_LIBCALL(FPEXT_F64_PPCF128, "__gcc_dtoq" ) |
309 | HANDLE_LIBCALL(FPEXT_F80_F128, "__extendxftf2" ) |
310 | HANDLE_LIBCALL(FPEXT_F64_F128, "__extenddftf2" ) |
311 | HANDLE_LIBCALL(FPEXT_F32_F128, "__extendsftf2" ) |
312 | HANDLE_LIBCALL(FPEXT_F16_F128, "__extendhftf2" ) |
313 | HANDLE_LIBCALL(FPEXT_F16_F80, "__extendhfxf2" ) |
314 | HANDLE_LIBCALL(FPEXT_F32_F64, "__extendsfdf2" ) |
315 | HANDLE_LIBCALL(FPEXT_F16_F64, "__extendhfdf2" ) |
316 | HANDLE_LIBCALL(FPEXT_F16_F32, "__gnu_h2f_ieee" ) |
317 | HANDLE_LIBCALL(FPROUND_F32_F16, "__gnu_f2h_ieee" ) |
318 | HANDLE_LIBCALL(FPROUND_F64_F16, "__truncdfhf2" ) |
319 | HANDLE_LIBCALL(FPROUND_F80_F16, "__truncxfhf2" ) |
320 | HANDLE_LIBCALL(FPROUND_F128_F16, "__trunctfhf2" ) |
321 | HANDLE_LIBCALL(FPROUND_PPCF128_F16, "__trunctfhf2" ) |
322 | HANDLE_LIBCALL(FPROUND_F32_BF16, "__truncsfbf2" ) |
323 | HANDLE_LIBCALL(FPROUND_F64_BF16, "__truncdfbf2" ) |
324 | HANDLE_LIBCALL(FPROUND_F64_F32, "__truncdfsf2" ) |
325 | HANDLE_LIBCALL(FPROUND_F80_F32, "__truncxfsf2" ) |
326 | HANDLE_LIBCALL(FPROUND_F128_F32, "__trunctfsf2" ) |
327 | HANDLE_LIBCALL(FPROUND_PPCF128_F32, "__gcc_qtos" ) |
328 | HANDLE_LIBCALL(FPROUND_F80_F64, "__truncxfdf2" ) |
329 | HANDLE_LIBCALL(FPROUND_F128_F64, "__trunctfdf2" ) |
330 | HANDLE_LIBCALL(FPROUND_PPCF128_F64, "__gcc_qtod" ) |
331 | HANDLE_LIBCALL(FPROUND_F128_F80, "__trunctfxf2" ) |
332 | HANDLE_LIBCALL(FPTOSINT_F16_I32, "__fixhfsi" ) |
333 | HANDLE_LIBCALL(FPTOSINT_F16_I64, "__fixhfdi" ) |
334 | HANDLE_LIBCALL(FPTOSINT_F16_I128, "__fixhfti" ) |
335 | HANDLE_LIBCALL(FPTOSINT_F32_I32, "__fixsfsi" ) |
336 | HANDLE_LIBCALL(FPTOSINT_F32_I64, "__fixsfdi" ) |
337 | HANDLE_LIBCALL(FPTOSINT_F32_I128, "__fixsfti" ) |
338 | HANDLE_LIBCALL(FPTOSINT_F64_I32, "__fixdfsi" ) |
339 | HANDLE_LIBCALL(FPTOSINT_F64_I64, "__fixdfdi" ) |
340 | HANDLE_LIBCALL(FPTOSINT_F64_I128, "__fixdfti" ) |
341 | HANDLE_LIBCALL(FPTOSINT_F80_I32, "__fixxfsi" ) |
342 | HANDLE_LIBCALL(FPTOSINT_F80_I64, "__fixxfdi" ) |
343 | HANDLE_LIBCALL(FPTOSINT_F80_I128, "__fixxfti" ) |
344 | HANDLE_LIBCALL(FPTOSINT_F128_I32, "__fixtfsi" ) |
345 | HANDLE_LIBCALL(FPTOSINT_F128_I64, "__fixtfdi" ) |
346 | HANDLE_LIBCALL(FPTOSINT_F128_I128, "__fixtfti" ) |
347 | HANDLE_LIBCALL(FPTOSINT_PPCF128_I32, "__gcc_qtou" ) |
348 | HANDLE_LIBCALL(FPTOSINT_PPCF128_I64, "__fixtfdi" ) |
349 | HANDLE_LIBCALL(FPTOSINT_PPCF128_I128, "__fixtfti" ) |
350 | HANDLE_LIBCALL(FPTOUINT_F16_I32, "__fixunshfsi" ) |
351 | HANDLE_LIBCALL(FPTOUINT_F16_I64, "__fixunshfdi" ) |
352 | HANDLE_LIBCALL(FPTOUINT_F16_I128, "__fixunshfti" ) |
353 | HANDLE_LIBCALL(FPTOUINT_F32_I32, "__fixunssfsi" ) |
354 | HANDLE_LIBCALL(FPTOUINT_F32_I64, "__fixunssfdi" ) |
355 | HANDLE_LIBCALL(FPTOUINT_F32_I128, "__fixunssfti" ) |
356 | HANDLE_LIBCALL(FPTOUINT_F64_I32, "__fixunsdfsi" ) |
357 | HANDLE_LIBCALL(FPTOUINT_F64_I64, "__fixunsdfdi" ) |
358 | HANDLE_LIBCALL(FPTOUINT_F64_I128, "__fixunsdfti" ) |
359 | HANDLE_LIBCALL(FPTOUINT_F80_I32, "__fixunsxfsi" ) |
360 | HANDLE_LIBCALL(FPTOUINT_F80_I64, "__fixunsxfdi" ) |
361 | HANDLE_LIBCALL(FPTOUINT_F80_I128, "__fixunsxfti" ) |
362 | HANDLE_LIBCALL(FPTOUINT_F128_I32, "__fixunstfsi" ) |
363 | HANDLE_LIBCALL(FPTOUINT_F128_I64, "__fixunstfdi" ) |
364 | HANDLE_LIBCALL(FPTOUINT_F128_I128, "__fixunstfti" ) |
365 | HANDLE_LIBCALL(FPTOUINT_PPCF128_I32, "__fixunstfsi" ) |
366 | HANDLE_LIBCALL(FPTOUINT_PPCF128_I64, "__fixunstfdi" ) |
367 | HANDLE_LIBCALL(FPTOUINT_PPCF128_I128, "__fixunstfti" ) |
368 | HANDLE_LIBCALL(SINTTOFP_I32_F16, "__floatsihf" ) |
369 | HANDLE_LIBCALL(SINTTOFP_I32_F32, "__floatsisf" ) |
370 | HANDLE_LIBCALL(SINTTOFP_I32_F64, "__floatsidf" ) |
371 | HANDLE_LIBCALL(SINTTOFP_I32_F80, "__floatsixf" ) |
372 | HANDLE_LIBCALL(SINTTOFP_I32_F128, "__floatsitf" ) |
373 | HANDLE_LIBCALL(SINTTOFP_I32_PPCF128, "__gcc_itoq" ) |
374 | HANDLE_LIBCALL(SINTTOFP_I64_F16, "__floatdihf" ) |
375 | HANDLE_LIBCALL(SINTTOFP_I64_F32, "__floatdisf" ) |
376 | HANDLE_LIBCALL(SINTTOFP_I64_F64, "__floatdidf" ) |
377 | HANDLE_LIBCALL(SINTTOFP_I64_F80, "__floatdixf" ) |
378 | HANDLE_LIBCALL(SINTTOFP_I64_F128, "__floatditf" ) |
379 | HANDLE_LIBCALL(SINTTOFP_I64_PPCF128, "__floatditf" ) |
380 | HANDLE_LIBCALL(SINTTOFP_I128_F16, "__floattihf" ) |
381 | HANDLE_LIBCALL(SINTTOFP_I128_F32, "__floattisf" ) |
382 | HANDLE_LIBCALL(SINTTOFP_I128_F64, "__floattidf" ) |
383 | HANDLE_LIBCALL(SINTTOFP_I128_F80, "__floattixf" ) |
384 | HANDLE_LIBCALL(SINTTOFP_I128_F128, "__floattitf" ) |
385 | HANDLE_LIBCALL(SINTTOFP_I128_PPCF128, "__floattitf" ) |
386 | HANDLE_LIBCALL(UINTTOFP_I32_F16, "__floatunsihf" ) |
387 | HANDLE_LIBCALL(UINTTOFP_I32_F32, "__floatunsisf" ) |
388 | HANDLE_LIBCALL(UINTTOFP_I32_F64, "__floatunsidf" ) |
389 | HANDLE_LIBCALL(UINTTOFP_I32_F80, "__floatunsixf" ) |
390 | HANDLE_LIBCALL(UINTTOFP_I32_F128, "__floatunsitf" ) |
391 | HANDLE_LIBCALL(UINTTOFP_I32_PPCF128, "__gcc_utoq" ) |
392 | HANDLE_LIBCALL(UINTTOFP_I64_F16, "__floatundihf" ) |
393 | HANDLE_LIBCALL(UINTTOFP_I64_F32, "__floatundisf" ) |
394 | HANDLE_LIBCALL(UINTTOFP_I64_F64, "__floatundidf" ) |
395 | HANDLE_LIBCALL(UINTTOFP_I64_F80, "__floatundixf" ) |
396 | HANDLE_LIBCALL(UINTTOFP_I64_F128, "__floatunditf" ) |
397 | HANDLE_LIBCALL(UINTTOFP_I64_PPCF128, "__floatunditf" ) |
398 | HANDLE_LIBCALL(UINTTOFP_I128_F16, "__floatuntihf" ) |
399 | HANDLE_LIBCALL(UINTTOFP_I128_F32, "__floatuntisf" ) |
400 | HANDLE_LIBCALL(UINTTOFP_I128_F64, "__floatuntidf" ) |
401 | HANDLE_LIBCALL(UINTTOFP_I128_F80, "__floatuntixf" ) |
402 | HANDLE_LIBCALL(UINTTOFP_I128_F128, "__floatuntitf" ) |
403 | HANDLE_LIBCALL(UINTTOFP_I128_PPCF128, "__floatuntitf" ) |
404 | HANDLE_LIBCALL(CONVERT_F128_PPCF128, "__extendkftf2" ) |
405 | HANDLE_LIBCALL(CONVERT_PPCF128_F128, "__trunctfkf2" ) |
406 | |
407 | // Comparison |
408 | HANDLE_LIBCALL(OEQ_F32, "__eqsf2" ) |
409 | HANDLE_LIBCALL(OEQ_F64, "__eqdf2" ) |
410 | HANDLE_LIBCALL(OEQ_F128, "__eqtf2" ) |
411 | HANDLE_LIBCALL(OEQ_PPCF128, "__gcc_qeq" ) |
412 | HANDLE_LIBCALL(UNE_F32, "__nesf2" ) |
413 | HANDLE_LIBCALL(UNE_F64, "__nedf2" ) |
414 | HANDLE_LIBCALL(UNE_F128, "__netf2" ) |
415 | HANDLE_LIBCALL(UNE_PPCF128, "__gcc_qne" ) |
416 | HANDLE_LIBCALL(OGE_F32, "__gesf2" ) |
417 | HANDLE_LIBCALL(OGE_F64, "__gedf2" ) |
418 | HANDLE_LIBCALL(OGE_F128, "__getf2" ) |
419 | HANDLE_LIBCALL(OGE_PPCF128, "__gcc_qge" ) |
420 | HANDLE_LIBCALL(OLT_F32, "__ltsf2" ) |
421 | HANDLE_LIBCALL(OLT_F64, "__ltdf2" ) |
422 | HANDLE_LIBCALL(OLT_F128, "__lttf2" ) |
423 | HANDLE_LIBCALL(OLT_PPCF128, "__gcc_qlt" ) |
424 | HANDLE_LIBCALL(OLE_F32, "__lesf2" ) |
425 | HANDLE_LIBCALL(OLE_F64, "__ledf2" ) |
426 | HANDLE_LIBCALL(OLE_F128, "__letf2" ) |
427 | HANDLE_LIBCALL(OLE_PPCF128, "__gcc_qle" ) |
428 | HANDLE_LIBCALL(OGT_F32, "__gtsf2" ) |
429 | HANDLE_LIBCALL(OGT_F64, "__gtdf2" ) |
430 | HANDLE_LIBCALL(OGT_F128, "__gttf2" ) |
431 | HANDLE_LIBCALL(OGT_PPCF128, "__gcc_qgt" ) |
432 | HANDLE_LIBCALL(UO_F32, "__unordsf2" ) |
433 | HANDLE_LIBCALL(UO_F64, "__unorddf2" ) |
434 | HANDLE_LIBCALL(UO_F128, "__unordtf2" ) |
435 | HANDLE_LIBCALL(UO_PPCF128, "__gcc_qunord" ) |
436 | |
437 | // Memory |
438 | HANDLE_LIBCALL(MEMCPY, "memcpy" ) |
439 | HANDLE_LIBCALL(MEMMOVE, "memmove" ) |
440 | HANDLE_LIBCALL(MEMSET, "memset" ) |
441 | // DSEPass can emit calloc if it finds a pair of malloc/memset |
442 | HANDLE_LIBCALL(CALLOC, "calloc" ) |
443 | HANDLE_LIBCALL(BZERO, nullptr) |
444 | |
445 | // Element-wise unordered-atomic memory of different sizes |
446 | HANDLE_LIBCALL(MEMCPY_ELEMENT_UNORDERED_ATOMIC_1, "__llvm_memcpy_element_unordered_atomic_1" ) |
447 | HANDLE_LIBCALL(MEMCPY_ELEMENT_UNORDERED_ATOMIC_2, "__llvm_memcpy_element_unordered_atomic_2" ) |
448 | HANDLE_LIBCALL(MEMCPY_ELEMENT_UNORDERED_ATOMIC_4, "__llvm_memcpy_element_unordered_atomic_4" ) |
449 | HANDLE_LIBCALL(MEMCPY_ELEMENT_UNORDERED_ATOMIC_8, "__llvm_memcpy_element_unordered_atomic_8" ) |
450 | HANDLE_LIBCALL(MEMCPY_ELEMENT_UNORDERED_ATOMIC_16, "__llvm_memcpy_element_unordered_atomic_16" ) |
451 | HANDLE_LIBCALL(MEMMOVE_ELEMENT_UNORDERED_ATOMIC_1, "__llvm_memmove_element_unordered_atomic_1" ) |
452 | HANDLE_LIBCALL(MEMMOVE_ELEMENT_UNORDERED_ATOMIC_2, "__llvm_memmove_element_unordered_atomic_2" ) |
453 | HANDLE_LIBCALL(MEMMOVE_ELEMENT_UNORDERED_ATOMIC_4, "__llvm_memmove_element_unordered_atomic_4" ) |
454 | HANDLE_LIBCALL(MEMMOVE_ELEMENT_UNORDERED_ATOMIC_8, "__llvm_memmove_element_unordered_atomic_8" ) |
455 | HANDLE_LIBCALL(MEMMOVE_ELEMENT_UNORDERED_ATOMIC_16, "__llvm_memmove_element_unordered_atomic_16" ) |
456 | HANDLE_LIBCALL(MEMSET_ELEMENT_UNORDERED_ATOMIC_1, "__llvm_memset_element_unordered_atomic_1" ) |
457 | HANDLE_LIBCALL(MEMSET_ELEMENT_UNORDERED_ATOMIC_2, "__llvm_memset_element_unordered_atomic_2" ) |
458 | HANDLE_LIBCALL(MEMSET_ELEMENT_UNORDERED_ATOMIC_4, "__llvm_memset_element_unordered_atomic_4" ) |
459 | HANDLE_LIBCALL(MEMSET_ELEMENT_UNORDERED_ATOMIC_8, "__llvm_memset_element_unordered_atomic_8" ) |
460 | HANDLE_LIBCALL(MEMSET_ELEMENT_UNORDERED_ATOMIC_16, "__llvm_memset_element_unordered_atomic_16" ) |
461 | |
462 | // Exception handling |
463 | HANDLE_LIBCALL(UNWIND_RESUME, "_Unwind_Resume" ) |
464 | HANDLE_LIBCALL(CXA_END_CLEANUP, "__cxa_end_cleanup" ) |
465 | |
466 | // Note: there are two sets of atomics libcalls; see |
467 | // <https://llvm.org/docs/Atomics.html> for more info on the |
468 | // difference between them. |
469 | |
470 | // Atomic '__sync_*' libcalls. |
471 | HANDLE_LIBCALL(SYNC_VAL_COMPARE_AND_SWAP_1, "__sync_val_compare_and_swap_1" ) |
472 | HANDLE_LIBCALL(SYNC_VAL_COMPARE_AND_SWAP_2, "__sync_val_compare_and_swap_2" ) |
473 | HANDLE_LIBCALL(SYNC_VAL_COMPARE_AND_SWAP_4, "__sync_val_compare_and_swap_4" ) |
474 | HANDLE_LIBCALL(SYNC_VAL_COMPARE_AND_SWAP_8, "__sync_val_compare_and_swap_8" ) |
475 | HANDLE_LIBCALL(SYNC_VAL_COMPARE_AND_SWAP_16, "__sync_val_compare_and_swap_16" ) |
476 | HANDLE_LIBCALL(SYNC_LOCK_TEST_AND_SET_1, "__sync_lock_test_and_set_1" ) |
477 | HANDLE_LIBCALL(SYNC_LOCK_TEST_AND_SET_2, "__sync_lock_test_and_set_2" ) |
478 | HANDLE_LIBCALL(SYNC_LOCK_TEST_AND_SET_4, "__sync_lock_test_and_set_4" ) |
479 | HANDLE_LIBCALL(SYNC_LOCK_TEST_AND_SET_8, "__sync_lock_test_and_set_8" ) |
480 | HANDLE_LIBCALL(SYNC_LOCK_TEST_AND_SET_16, "__sync_lock_test_and_set_16" ) |
481 | HANDLE_LIBCALL(SYNC_FETCH_AND_ADD_1, "__sync_fetch_and_add_1" ) |
482 | HANDLE_LIBCALL(SYNC_FETCH_AND_ADD_2, "__sync_fetch_and_add_2" ) |
483 | HANDLE_LIBCALL(SYNC_FETCH_AND_ADD_4, "__sync_fetch_and_add_4" ) |
484 | HANDLE_LIBCALL(SYNC_FETCH_AND_ADD_8, "__sync_fetch_and_add_8" ) |
485 | HANDLE_LIBCALL(SYNC_FETCH_AND_ADD_16, "__sync_fetch_and_add_16" ) |
486 | HANDLE_LIBCALL(SYNC_FETCH_AND_SUB_1, "__sync_fetch_and_sub_1" ) |
487 | HANDLE_LIBCALL(SYNC_FETCH_AND_SUB_2, "__sync_fetch_and_sub_2" ) |
488 | HANDLE_LIBCALL(SYNC_FETCH_AND_SUB_4, "__sync_fetch_and_sub_4" ) |
489 | HANDLE_LIBCALL(SYNC_FETCH_AND_SUB_8, "__sync_fetch_and_sub_8" ) |
490 | HANDLE_LIBCALL(SYNC_FETCH_AND_SUB_16, "__sync_fetch_and_sub_16" ) |
491 | HANDLE_LIBCALL(SYNC_FETCH_AND_AND_1, "__sync_fetch_and_and_1" ) |
492 | HANDLE_LIBCALL(SYNC_FETCH_AND_AND_2, "__sync_fetch_and_and_2" ) |
493 | HANDLE_LIBCALL(SYNC_FETCH_AND_AND_4, "__sync_fetch_and_and_4" ) |
494 | HANDLE_LIBCALL(SYNC_FETCH_AND_AND_8, "__sync_fetch_and_and_8" ) |
495 | HANDLE_LIBCALL(SYNC_FETCH_AND_AND_16, "__sync_fetch_and_and_16" ) |
496 | HANDLE_LIBCALL(SYNC_FETCH_AND_OR_1, "__sync_fetch_and_or_1" ) |
497 | HANDLE_LIBCALL(SYNC_FETCH_AND_OR_2, "__sync_fetch_and_or_2" ) |
498 | HANDLE_LIBCALL(SYNC_FETCH_AND_OR_4, "__sync_fetch_and_or_4" ) |
499 | HANDLE_LIBCALL(SYNC_FETCH_AND_OR_8, "__sync_fetch_and_or_8" ) |
500 | HANDLE_LIBCALL(SYNC_FETCH_AND_OR_16, "__sync_fetch_and_or_16" ) |
501 | HANDLE_LIBCALL(SYNC_FETCH_AND_XOR_1, "__sync_fetch_and_xor_1" ) |
502 | HANDLE_LIBCALL(SYNC_FETCH_AND_XOR_2, "__sync_fetch_and_xor_2" ) |
503 | HANDLE_LIBCALL(SYNC_FETCH_AND_XOR_4, "__sync_fetch_and_xor_4" ) |
504 | HANDLE_LIBCALL(SYNC_FETCH_AND_XOR_8, "__sync_fetch_and_xor_8" ) |
505 | HANDLE_LIBCALL(SYNC_FETCH_AND_XOR_16, "__sync_fetch_and_xor_16" ) |
506 | HANDLE_LIBCALL(SYNC_FETCH_AND_NAND_1, "__sync_fetch_and_nand_1" ) |
507 | HANDLE_LIBCALL(SYNC_FETCH_AND_NAND_2, "__sync_fetch_and_nand_2" ) |
508 | HANDLE_LIBCALL(SYNC_FETCH_AND_NAND_4, "__sync_fetch_and_nand_4" ) |
509 | HANDLE_LIBCALL(SYNC_FETCH_AND_NAND_8, "__sync_fetch_and_nand_8" ) |
510 | HANDLE_LIBCALL(SYNC_FETCH_AND_NAND_16, "__sync_fetch_and_nand_16" ) |
511 | HANDLE_LIBCALL(SYNC_FETCH_AND_MAX_1, "__sync_fetch_and_max_1" ) |
512 | HANDLE_LIBCALL(SYNC_FETCH_AND_MAX_2, "__sync_fetch_and_max_2" ) |
513 | HANDLE_LIBCALL(SYNC_FETCH_AND_MAX_4, "__sync_fetch_and_max_4" ) |
514 | HANDLE_LIBCALL(SYNC_FETCH_AND_MAX_8, "__sync_fetch_and_max_8" ) |
515 | HANDLE_LIBCALL(SYNC_FETCH_AND_MAX_16, "__sync_fetch_and_max_16" ) |
516 | HANDLE_LIBCALL(SYNC_FETCH_AND_UMAX_1, "__sync_fetch_and_umax_1" ) |
517 | HANDLE_LIBCALL(SYNC_FETCH_AND_UMAX_2, "__sync_fetch_and_umax_2" ) |
518 | HANDLE_LIBCALL(SYNC_FETCH_AND_UMAX_4, "__sync_fetch_and_umax_4" ) |
519 | HANDLE_LIBCALL(SYNC_FETCH_AND_UMAX_8, "__sync_fetch_and_umax_8" ) |
520 | HANDLE_LIBCALL(SYNC_FETCH_AND_UMAX_16, "__sync_fetch_and_umax_16" ) |
521 | HANDLE_LIBCALL(SYNC_FETCH_AND_MIN_1, "__sync_fetch_and_min_1" ) |
522 | HANDLE_LIBCALL(SYNC_FETCH_AND_MIN_2, "__sync_fetch_and_min_2" ) |
523 | HANDLE_LIBCALL(SYNC_FETCH_AND_MIN_4, "__sync_fetch_and_min_4" ) |
524 | HANDLE_LIBCALL(SYNC_FETCH_AND_MIN_8, "__sync_fetch_and_min_8" ) |
525 | HANDLE_LIBCALL(SYNC_FETCH_AND_MIN_16, "__sync_fetch_and_min_16" ) |
526 | HANDLE_LIBCALL(SYNC_FETCH_AND_UMIN_1, "__sync_fetch_and_umin_1" ) |
527 | HANDLE_LIBCALL(SYNC_FETCH_AND_UMIN_2, "__sync_fetch_and_umin_2" ) |
528 | HANDLE_LIBCALL(SYNC_FETCH_AND_UMIN_4, "__sync_fetch_and_umin_4" ) |
529 | HANDLE_LIBCALL(SYNC_FETCH_AND_UMIN_8, "__sync_fetch_and_umin_8" ) |
530 | HANDLE_LIBCALL(SYNC_FETCH_AND_UMIN_16, "__sync_fetch_and_umin_16" ) |
531 | |
532 | // Atomic `__atomic_*' libcalls. |
533 | HANDLE_LIBCALL(ATOMIC_LOAD, "__atomic_load" ) |
534 | HANDLE_LIBCALL(ATOMIC_LOAD_1, "__atomic_load_1" ) |
535 | HANDLE_LIBCALL(ATOMIC_LOAD_2, "__atomic_load_2" ) |
536 | HANDLE_LIBCALL(ATOMIC_LOAD_4, "__atomic_load_4" ) |
537 | HANDLE_LIBCALL(ATOMIC_LOAD_8, "__atomic_load_8" ) |
538 | HANDLE_LIBCALL(ATOMIC_LOAD_16, "__atomic_load_16" ) |
539 | |
540 | HANDLE_LIBCALL(ATOMIC_STORE, "__atomic_store" ) |
541 | HANDLE_LIBCALL(ATOMIC_STORE_1, "__atomic_store_1" ) |
542 | HANDLE_LIBCALL(ATOMIC_STORE_2, "__atomic_store_2" ) |
543 | HANDLE_LIBCALL(ATOMIC_STORE_4, "__atomic_store_4" ) |
544 | HANDLE_LIBCALL(ATOMIC_STORE_8, "__atomic_store_8" ) |
545 | HANDLE_LIBCALL(ATOMIC_STORE_16, "__atomic_store_16" ) |
546 | |
547 | HANDLE_LIBCALL(ATOMIC_EXCHANGE, "__atomic_exchange" ) |
548 | HANDLE_LIBCALL(ATOMIC_EXCHANGE_1, "__atomic_exchange_1" ) |
549 | HANDLE_LIBCALL(ATOMIC_EXCHANGE_2, "__atomic_exchange_2" ) |
550 | HANDLE_LIBCALL(ATOMIC_EXCHANGE_4, "__atomic_exchange_4" ) |
551 | HANDLE_LIBCALL(ATOMIC_EXCHANGE_8, "__atomic_exchange_8" ) |
552 | HANDLE_LIBCALL(ATOMIC_EXCHANGE_16, "__atomic_exchange_16" ) |
553 | |
554 | HANDLE_LIBCALL(ATOMIC_COMPARE_EXCHANGE, "__atomic_compare_exchange" ) |
555 | HANDLE_LIBCALL(ATOMIC_COMPARE_EXCHANGE_1, "__atomic_compare_exchange_1" ) |
556 | HANDLE_LIBCALL(ATOMIC_COMPARE_EXCHANGE_2, "__atomic_compare_exchange_2" ) |
557 | HANDLE_LIBCALL(ATOMIC_COMPARE_EXCHANGE_4, "__atomic_compare_exchange_4" ) |
558 | HANDLE_LIBCALL(ATOMIC_COMPARE_EXCHANGE_8, "__atomic_compare_exchange_8" ) |
559 | HANDLE_LIBCALL(ATOMIC_COMPARE_EXCHANGE_16, "__atomic_compare_exchange_16" ) |
560 | |
561 | HANDLE_LIBCALL(ATOMIC_FETCH_ADD_1, "__atomic_fetch_add_1" ) |
562 | HANDLE_LIBCALL(ATOMIC_FETCH_ADD_2, "__atomic_fetch_add_2" ) |
563 | HANDLE_LIBCALL(ATOMIC_FETCH_ADD_4, "__atomic_fetch_add_4" ) |
564 | HANDLE_LIBCALL(ATOMIC_FETCH_ADD_8, "__atomic_fetch_add_8" ) |
565 | HANDLE_LIBCALL(ATOMIC_FETCH_ADD_16, "__atomic_fetch_add_16" ) |
566 | HANDLE_LIBCALL(ATOMIC_FETCH_SUB_1, "__atomic_fetch_sub_1" ) |
567 | HANDLE_LIBCALL(ATOMIC_FETCH_SUB_2, "__atomic_fetch_sub_2" ) |
568 | HANDLE_LIBCALL(ATOMIC_FETCH_SUB_4, "__atomic_fetch_sub_4" ) |
569 | HANDLE_LIBCALL(ATOMIC_FETCH_SUB_8, "__atomic_fetch_sub_8" ) |
570 | HANDLE_LIBCALL(ATOMIC_FETCH_SUB_16, "__atomic_fetch_sub_16" ) |
571 | HANDLE_LIBCALL(ATOMIC_FETCH_AND_1, "__atomic_fetch_and_1" ) |
572 | HANDLE_LIBCALL(ATOMIC_FETCH_AND_2, "__atomic_fetch_and_2" ) |
573 | HANDLE_LIBCALL(ATOMIC_FETCH_AND_4, "__atomic_fetch_and_4" ) |
574 | HANDLE_LIBCALL(ATOMIC_FETCH_AND_8, "__atomic_fetch_and_8" ) |
575 | HANDLE_LIBCALL(ATOMIC_FETCH_AND_16, "__atomic_fetch_and_16" ) |
576 | HANDLE_LIBCALL(ATOMIC_FETCH_OR_1, "__atomic_fetch_or_1" ) |
577 | HANDLE_LIBCALL(ATOMIC_FETCH_OR_2, "__atomic_fetch_or_2" ) |
578 | HANDLE_LIBCALL(ATOMIC_FETCH_OR_4, "__atomic_fetch_or_4" ) |
579 | HANDLE_LIBCALL(ATOMIC_FETCH_OR_8, "__atomic_fetch_or_8" ) |
580 | HANDLE_LIBCALL(ATOMIC_FETCH_OR_16, "__atomic_fetch_or_16" ) |
581 | HANDLE_LIBCALL(ATOMIC_FETCH_XOR_1, "__atomic_fetch_xor_1" ) |
582 | HANDLE_LIBCALL(ATOMIC_FETCH_XOR_2, "__atomic_fetch_xor_2" ) |
583 | HANDLE_LIBCALL(ATOMIC_FETCH_XOR_4, "__atomic_fetch_xor_4" ) |
584 | HANDLE_LIBCALL(ATOMIC_FETCH_XOR_8, "__atomic_fetch_xor_8" ) |
585 | HANDLE_LIBCALL(ATOMIC_FETCH_XOR_16, "__atomic_fetch_xor_16" ) |
586 | HANDLE_LIBCALL(ATOMIC_FETCH_NAND_1, "__atomic_fetch_nand_1" ) |
587 | HANDLE_LIBCALL(ATOMIC_FETCH_NAND_2, "__atomic_fetch_nand_2" ) |
588 | HANDLE_LIBCALL(ATOMIC_FETCH_NAND_4, "__atomic_fetch_nand_4" ) |
589 | HANDLE_LIBCALL(ATOMIC_FETCH_NAND_8, "__atomic_fetch_nand_8" ) |
590 | HANDLE_LIBCALL(ATOMIC_FETCH_NAND_16, "__atomic_fetch_nand_16" ) |
591 | |
592 | // Out-of-line atomics libcalls |
593 | #define HLCALLS(A, N) \ |
594 | HANDLE_LIBCALL(A##N##_RELAX, nullptr) \ |
595 | HANDLE_LIBCALL(A##N##_ACQ, nullptr) \ |
596 | HANDLE_LIBCALL(A##N##_REL, nullptr) \ |
597 | HANDLE_LIBCALL(A##N##_ACQ_REL, nullptr) |
598 | #define HLCALL5(A) \ |
599 | HLCALLS(A, 1) HLCALLS(A, 2) HLCALLS(A, 4) HLCALLS(A, 8) HLCALLS(A, 16) |
600 | HLCALL5(OUTLINE_ATOMIC_CAS) |
601 | HLCALL5(OUTLINE_ATOMIC_SWP) |
602 | HLCALL5(OUTLINE_ATOMIC_LDADD) |
603 | HLCALL5(OUTLINE_ATOMIC_LDSET) |
604 | HLCALL5(OUTLINE_ATOMIC_LDCLR) |
605 | HLCALL5(OUTLINE_ATOMIC_LDEOR) |
606 | #undef HLCALLS |
607 | #undef HLCALL5 |
608 | |
609 | // Stack Protector Fail |
610 | HANDLE_LIBCALL(STACKPROTECTOR_CHECK_FAIL, "__stack_chk_fail" ) |
611 | |
612 | // Deoptimization |
613 | HANDLE_LIBCALL(DEOPTIMIZE, "__llvm_deoptimize" ) |
614 | |
615 | // Return address |
616 | HANDLE_LIBCALL(RETURN_ADDRESS, nullptr) |
617 | |
618 | HANDLE_LIBCALL(UNKNOWN_LIBCALL, nullptr) |
619 | |
620 | |