Details | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line | 
|---|---|---|---|
| 14 | pmbaty | 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(SIN_F32, "sinf") | ||
| 186 | HANDLE_LIBCALL(SIN_F64, "sin") | ||
| 187 | HANDLE_LIBCALL(SIN_F80, "sinl") | ||
| 188 | HANDLE_LIBCALL(SIN_F128, "sinl") | ||
| 189 | HANDLE_LIBCALL(SIN_PPCF128, "sinl") | ||
| 190 | HANDLE_LIBCALL(COS_F32, "cosf") | ||
| 191 | HANDLE_LIBCALL(COS_F64, "cos") | ||
| 192 | HANDLE_LIBCALL(COS_F80, "cosl") | ||
| 193 | HANDLE_LIBCALL(COS_F128, "cosl") | ||
| 194 | HANDLE_LIBCALL(COS_PPCF128, "cosl") | ||
| 195 | HANDLE_LIBCALL(SINCOS_F32, nullptr) | ||
| 196 | HANDLE_LIBCALL(SINCOS_F64, nullptr) | ||
| 197 | HANDLE_LIBCALL(SINCOS_F80, nullptr) | ||
| 198 | HANDLE_LIBCALL(SINCOS_F128, nullptr) | ||
| 199 | HANDLE_LIBCALL(SINCOS_PPCF128, nullptr) | ||
| 200 | HANDLE_LIBCALL(SINCOS_STRET_F32, nullptr) | ||
| 201 | HANDLE_LIBCALL(SINCOS_STRET_F64, nullptr) | ||
| 202 | HANDLE_LIBCALL(POW_F32, "powf") | ||
| 203 | HANDLE_LIBCALL(POW_F64, "pow") | ||
| 204 | HANDLE_LIBCALL(POW_F80, "powl") | ||
| 205 | HANDLE_LIBCALL(POW_F128, "powl") | ||
| 206 | HANDLE_LIBCALL(POW_PPCF128, "powl") | ||
| 207 | HANDLE_LIBCALL(POW_FINITE_F32, "__powf_finite") | ||
| 208 | HANDLE_LIBCALL(POW_FINITE_F64, "__pow_finite") | ||
| 209 | HANDLE_LIBCALL(POW_FINITE_F80, "__powl_finite") | ||
| 210 | HANDLE_LIBCALL(POW_FINITE_F128, "__powl_finite") | ||
| 211 | HANDLE_LIBCALL(POW_FINITE_PPCF128, "__powl_finite") | ||
| 212 | HANDLE_LIBCALL(CEIL_F32, "ceilf") | ||
| 213 | HANDLE_LIBCALL(CEIL_F64, "ceil") | ||
| 214 | HANDLE_LIBCALL(CEIL_F80, "ceill") | ||
| 215 | HANDLE_LIBCALL(CEIL_F128, "ceill") | ||
| 216 | HANDLE_LIBCALL(CEIL_PPCF128, "ceill") | ||
| 217 | HANDLE_LIBCALL(TRUNC_F32, "truncf") | ||
| 218 | HANDLE_LIBCALL(TRUNC_F64, "trunc") | ||
| 219 | HANDLE_LIBCALL(TRUNC_F80, "truncl") | ||
| 220 | HANDLE_LIBCALL(TRUNC_F128, "truncl") | ||
| 221 | HANDLE_LIBCALL(TRUNC_PPCF128, "truncl") | ||
| 222 | HANDLE_LIBCALL(RINT_F32, "rintf") | ||
| 223 | HANDLE_LIBCALL(RINT_F64, "rint") | ||
| 224 | HANDLE_LIBCALL(RINT_F80, "rintl") | ||
| 225 | HANDLE_LIBCALL(RINT_F128, "rintl") | ||
| 226 | HANDLE_LIBCALL(RINT_PPCF128, "rintl") | ||
| 227 | HANDLE_LIBCALL(NEARBYINT_F32, "nearbyintf") | ||
| 228 | HANDLE_LIBCALL(NEARBYINT_F64, "nearbyint") | ||
| 229 | HANDLE_LIBCALL(NEARBYINT_F80, "nearbyintl") | ||
| 230 | HANDLE_LIBCALL(NEARBYINT_F128, "nearbyintl") | ||
| 231 | HANDLE_LIBCALL(NEARBYINT_PPCF128, "nearbyintl") | ||
| 232 | HANDLE_LIBCALL(ROUND_F32, "roundf") | ||
| 233 | HANDLE_LIBCALL(ROUND_F64, "round") | ||
| 234 | HANDLE_LIBCALL(ROUND_F80, "roundl") | ||
| 235 | HANDLE_LIBCALL(ROUND_F128, "roundl") | ||
| 236 | HANDLE_LIBCALL(ROUND_PPCF128, "roundl") | ||
| 237 | HANDLE_LIBCALL(ROUNDEVEN_F32, "roundevenf") | ||
| 238 | HANDLE_LIBCALL(ROUNDEVEN_F64, "roundeven") | ||
| 239 | HANDLE_LIBCALL(ROUNDEVEN_F80, "roundevenl") | ||
| 240 | HANDLE_LIBCALL(ROUNDEVEN_F128, "roundevenl") | ||
| 241 | HANDLE_LIBCALL(ROUNDEVEN_PPCF128, "roundevenl") | ||
| 242 | HANDLE_LIBCALL(FLOOR_F32, "floorf") | ||
| 243 | HANDLE_LIBCALL(FLOOR_F64, "floor") | ||
| 244 | HANDLE_LIBCALL(FLOOR_F80, "floorl") | ||
| 245 | HANDLE_LIBCALL(FLOOR_F128, "floorl") | ||
| 246 | HANDLE_LIBCALL(FLOOR_PPCF128, "floorl") | ||
| 247 | HANDLE_LIBCALL(COPYSIGN_F32, "copysignf") | ||
| 248 | HANDLE_LIBCALL(COPYSIGN_F64, "copysign") | ||
| 249 | HANDLE_LIBCALL(COPYSIGN_F80, "copysignl") | ||
| 250 | HANDLE_LIBCALL(COPYSIGN_F128, "copysignl") | ||
| 251 | HANDLE_LIBCALL(COPYSIGN_PPCF128, "copysignl") | ||
| 252 | HANDLE_LIBCALL(FMIN_F32, "fminf") | ||
| 253 | HANDLE_LIBCALL(FMIN_F64, "fmin") | ||
| 254 | HANDLE_LIBCALL(FMIN_F80, "fminl") | ||
| 255 | HANDLE_LIBCALL(FMIN_F128, "fminl") | ||
| 256 | HANDLE_LIBCALL(FMIN_PPCF128, "fminl") | ||
| 257 | HANDLE_LIBCALL(FMAX_F32, "fmaxf") | ||
| 258 | HANDLE_LIBCALL(FMAX_F64, "fmax") | ||
| 259 | HANDLE_LIBCALL(FMAX_F80, "fmaxl") | ||
| 260 | HANDLE_LIBCALL(FMAX_F128, "fmaxl") | ||
| 261 | HANDLE_LIBCALL(FMAX_PPCF128, "fmaxl") | ||
| 262 | HANDLE_LIBCALL(LROUND_F32, "lroundf") | ||
| 263 | HANDLE_LIBCALL(LROUND_F64, "lround") | ||
| 264 | HANDLE_LIBCALL(LROUND_F80, "lroundl") | ||
| 265 | HANDLE_LIBCALL(LROUND_F128, "lroundl") | ||
| 266 | HANDLE_LIBCALL(LROUND_PPCF128, "lroundl") | ||
| 267 | HANDLE_LIBCALL(LLROUND_F32, "llroundf") | ||
| 268 | HANDLE_LIBCALL(LLROUND_F64, "llround") | ||
| 269 | HANDLE_LIBCALL(LLROUND_F80, "llroundl") | ||
| 270 | HANDLE_LIBCALL(LLROUND_F128, "llroundl") | ||
| 271 | HANDLE_LIBCALL(LLROUND_PPCF128, "llroundl") | ||
| 272 | HANDLE_LIBCALL(LRINT_F32, "lrintf") | ||
| 273 | HANDLE_LIBCALL(LRINT_F64, "lrint") | ||
| 274 | HANDLE_LIBCALL(LRINT_F80, "lrintl") | ||
| 275 | HANDLE_LIBCALL(LRINT_F128, "lrintl") | ||
| 276 | HANDLE_LIBCALL(LRINT_PPCF128, "lrintl") | ||
| 277 | HANDLE_LIBCALL(LLRINT_F32, "llrintf") | ||
| 278 | HANDLE_LIBCALL(LLRINT_F64, "llrint") | ||
| 279 | HANDLE_LIBCALL(LLRINT_F80, "llrintl") | ||
| 280 | HANDLE_LIBCALL(LLRINT_F128, "llrintl") | ||
| 281 | HANDLE_LIBCALL(LLRINT_PPCF128, "llrintl") | ||
| 282 | |||
| 283 | // Conversion | ||
| 284 | HANDLE_LIBCALL(FPEXT_F32_PPCF128, "__gcc_stoq") | ||
| 285 | HANDLE_LIBCALL(FPEXT_F64_PPCF128, "__gcc_dtoq") | ||
| 286 | HANDLE_LIBCALL(FPEXT_F80_F128, "__extendxftf2") | ||
| 287 | HANDLE_LIBCALL(FPEXT_F64_F128, "__extenddftf2") | ||
| 288 | HANDLE_LIBCALL(FPEXT_F32_F128, "__extendsftf2") | ||
| 289 | HANDLE_LIBCALL(FPEXT_F16_F128, "__extendhftf2") | ||
| 290 | HANDLE_LIBCALL(FPEXT_F16_F80, "__extendhfxf2") | ||
| 291 | HANDLE_LIBCALL(FPEXT_F32_F64, "__extendsfdf2") | ||
| 292 | HANDLE_LIBCALL(FPEXT_F16_F64, "__extendhfdf2") | ||
| 293 | HANDLE_LIBCALL(FPEXT_F16_F32, "__gnu_h2f_ieee") | ||
| 294 | HANDLE_LIBCALL(FPROUND_F32_F16, "__gnu_f2h_ieee") | ||
| 295 | HANDLE_LIBCALL(FPROUND_F64_F16, "__truncdfhf2") | ||
| 296 | HANDLE_LIBCALL(FPROUND_F80_F16, "__truncxfhf2") | ||
| 297 | HANDLE_LIBCALL(FPROUND_F128_F16, "__trunctfhf2") | ||
| 298 | HANDLE_LIBCALL(FPROUND_PPCF128_F16, "__trunctfhf2") | ||
| 299 | HANDLE_LIBCALL(FPROUND_F32_BF16, "__truncsfbf2") | ||
| 300 | HANDLE_LIBCALL(FPROUND_F64_BF16, "__truncdfbf2") | ||
| 301 | HANDLE_LIBCALL(FPROUND_F64_F32, "__truncdfsf2") | ||
| 302 | HANDLE_LIBCALL(FPROUND_F80_F32, "__truncxfsf2") | ||
| 303 | HANDLE_LIBCALL(FPROUND_F128_F32, "__trunctfsf2") | ||
| 304 | HANDLE_LIBCALL(FPROUND_PPCF128_F32, "__gcc_qtos") | ||
| 305 | HANDLE_LIBCALL(FPROUND_F80_F64, "__truncxfdf2") | ||
| 306 | HANDLE_LIBCALL(FPROUND_F128_F64, "__trunctfdf2") | ||
| 307 | HANDLE_LIBCALL(FPROUND_PPCF128_F64, "__gcc_qtod") | ||
| 308 | HANDLE_LIBCALL(FPROUND_F128_F80, "__trunctfxf2") | ||
| 309 | HANDLE_LIBCALL(FPTOSINT_F16_I32, "__fixhfsi") | ||
| 310 | HANDLE_LIBCALL(FPTOSINT_F16_I64, "__fixhfdi") | ||
| 311 | HANDLE_LIBCALL(FPTOSINT_F16_I128, "__fixhfti") | ||
| 312 | HANDLE_LIBCALL(FPTOSINT_F32_I32, "__fixsfsi") | ||
| 313 | HANDLE_LIBCALL(FPTOSINT_F32_I64, "__fixsfdi") | ||
| 314 | HANDLE_LIBCALL(FPTOSINT_F32_I128, "__fixsfti") | ||
| 315 | HANDLE_LIBCALL(FPTOSINT_F64_I32, "__fixdfsi") | ||
| 316 | HANDLE_LIBCALL(FPTOSINT_F64_I64, "__fixdfdi") | ||
| 317 | HANDLE_LIBCALL(FPTOSINT_F64_I128, "__fixdfti") | ||
| 318 | HANDLE_LIBCALL(FPTOSINT_F80_I32, "__fixxfsi") | ||
| 319 | HANDLE_LIBCALL(FPTOSINT_F80_I64, "__fixxfdi") | ||
| 320 | HANDLE_LIBCALL(FPTOSINT_F80_I128, "__fixxfti") | ||
| 321 | HANDLE_LIBCALL(FPTOSINT_F128_I32, "__fixtfsi") | ||
| 322 | HANDLE_LIBCALL(FPTOSINT_F128_I64, "__fixtfdi") | ||
| 323 | HANDLE_LIBCALL(FPTOSINT_F128_I128, "__fixtfti") | ||
| 324 | HANDLE_LIBCALL(FPTOSINT_PPCF128_I32, "__gcc_qtou") | ||
| 325 | HANDLE_LIBCALL(FPTOSINT_PPCF128_I64, "__fixtfdi") | ||
| 326 | HANDLE_LIBCALL(FPTOSINT_PPCF128_I128, "__fixtfti") | ||
| 327 | HANDLE_LIBCALL(FPTOUINT_F16_I32, "__fixunshfsi") | ||
| 328 | HANDLE_LIBCALL(FPTOUINT_F16_I64, "__fixunshfdi") | ||
| 329 | HANDLE_LIBCALL(FPTOUINT_F16_I128, "__fixunshfti") | ||
| 330 | HANDLE_LIBCALL(FPTOUINT_F32_I32, "__fixunssfsi") | ||
| 331 | HANDLE_LIBCALL(FPTOUINT_F32_I64, "__fixunssfdi") | ||
| 332 | HANDLE_LIBCALL(FPTOUINT_F32_I128, "__fixunssfti") | ||
| 333 | HANDLE_LIBCALL(FPTOUINT_F64_I32, "__fixunsdfsi") | ||
| 334 | HANDLE_LIBCALL(FPTOUINT_F64_I64, "__fixunsdfdi") | ||
| 335 | HANDLE_LIBCALL(FPTOUINT_F64_I128, "__fixunsdfti") | ||
| 336 | HANDLE_LIBCALL(FPTOUINT_F80_I32, "__fixunsxfsi") | ||
| 337 | HANDLE_LIBCALL(FPTOUINT_F80_I64, "__fixunsxfdi") | ||
| 338 | HANDLE_LIBCALL(FPTOUINT_F80_I128, "__fixunsxfti") | ||
| 339 | HANDLE_LIBCALL(FPTOUINT_F128_I32, "__fixunstfsi") | ||
| 340 | HANDLE_LIBCALL(FPTOUINT_F128_I64, "__fixunstfdi") | ||
| 341 | HANDLE_LIBCALL(FPTOUINT_F128_I128, "__fixunstfti") | ||
| 342 | HANDLE_LIBCALL(FPTOUINT_PPCF128_I32, "__fixunstfsi") | ||
| 343 | HANDLE_LIBCALL(FPTOUINT_PPCF128_I64, "__fixunstfdi") | ||
| 344 | HANDLE_LIBCALL(FPTOUINT_PPCF128_I128, "__fixunstfti") | ||
| 345 | HANDLE_LIBCALL(SINTTOFP_I32_F16, "__floatsihf") | ||
| 346 | HANDLE_LIBCALL(SINTTOFP_I32_F32, "__floatsisf") | ||
| 347 | HANDLE_LIBCALL(SINTTOFP_I32_F64, "__floatsidf") | ||
| 348 | HANDLE_LIBCALL(SINTTOFP_I32_F80, "__floatsixf") | ||
| 349 | HANDLE_LIBCALL(SINTTOFP_I32_F128, "__floatsitf") | ||
| 350 | HANDLE_LIBCALL(SINTTOFP_I32_PPCF128, "__gcc_itoq") | ||
| 351 | HANDLE_LIBCALL(SINTTOFP_I64_F16, "__floatdihf") | ||
| 352 | HANDLE_LIBCALL(SINTTOFP_I64_F32, "__floatdisf") | ||
| 353 | HANDLE_LIBCALL(SINTTOFP_I64_F64, "__floatdidf") | ||
| 354 | HANDLE_LIBCALL(SINTTOFP_I64_F80, "__floatdixf") | ||
| 355 | HANDLE_LIBCALL(SINTTOFP_I64_F128, "__floatditf") | ||
| 356 | HANDLE_LIBCALL(SINTTOFP_I64_PPCF128, "__floatditf") | ||
| 357 | HANDLE_LIBCALL(SINTTOFP_I128_F16, "__floattihf") | ||
| 358 | HANDLE_LIBCALL(SINTTOFP_I128_F32, "__floattisf") | ||
| 359 | HANDLE_LIBCALL(SINTTOFP_I128_F64, "__floattidf") | ||
| 360 | HANDLE_LIBCALL(SINTTOFP_I128_F80, "__floattixf") | ||
| 361 | HANDLE_LIBCALL(SINTTOFP_I128_F128, "__floattitf") | ||
| 362 | HANDLE_LIBCALL(SINTTOFP_I128_PPCF128, "__floattitf") | ||
| 363 | HANDLE_LIBCALL(UINTTOFP_I32_F16, "__floatunsihf") | ||
| 364 | HANDLE_LIBCALL(UINTTOFP_I32_F32, "__floatunsisf") | ||
| 365 | HANDLE_LIBCALL(UINTTOFP_I32_F64, "__floatunsidf") | ||
| 366 | HANDLE_LIBCALL(UINTTOFP_I32_F80, "__floatunsixf") | ||
| 367 | HANDLE_LIBCALL(UINTTOFP_I32_F128, "__floatunsitf") | ||
| 368 | HANDLE_LIBCALL(UINTTOFP_I32_PPCF128, "__gcc_utoq") | ||
| 369 | HANDLE_LIBCALL(UINTTOFP_I64_F16, "__floatundihf") | ||
| 370 | HANDLE_LIBCALL(UINTTOFP_I64_F32, "__floatundisf") | ||
| 371 | HANDLE_LIBCALL(UINTTOFP_I64_F64, "__floatundidf") | ||
| 372 | HANDLE_LIBCALL(UINTTOFP_I64_F80, "__floatundixf") | ||
| 373 | HANDLE_LIBCALL(UINTTOFP_I64_F128, "__floatunditf") | ||
| 374 | HANDLE_LIBCALL(UINTTOFP_I64_PPCF128, "__floatunditf") | ||
| 375 | HANDLE_LIBCALL(UINTTOFP_I128_F16, "__floatuntihf") | ||
| 376 | HANDLE_LIBCALL(UINTTOFP_I128_F32, "__floatuntisf") | ||
| 377 | HANDLE_LIBCALL(UINTTOFP_I128_F64, "__floatuntidf") | ||
| 378 | HANDLE_LIBCALL(UINTTOFP_I128_F80, "__floatuntixf") | ||
| 379 | HANDLE_LIBCALL(UINTTOFP_I128_F128, "__floatuntitf") | ||
| 380 | HANDLE_LIBCALL(UINTTOFP_I128_PPCF128, "__floatuntitf") | ||
| 381 | HANDLE_LIBCALL(CONVERT_F128_PPCF128, "__extendkftf2") | ||
| 382 | HANDLE_LIBCALL(CONVERT_PPCF128_F128, "__trunctfkf2") | ||
| 383 | |||
| 384 | // Comparison | ||
| 385 | HANDLE_LIBCALL(OEQ_F32, "__eqsf2") | ||
| 386 | HANDLE_LIBCALL(OEQ_F64, "__eqdf2") | ||
| 387 | HANDLE_LIBCALL(OEQ_F128, "__eqtf2") | ||
| 388 | HANDLE_LIBCALL(OEQ_PPCF128, "__gcc_qeq") | ||
| 389 | HANDLE_LIBCALL(UNE_F32, "__nesf2") | ||
| 390 | HANDLE_LIBCALL(UNE_F64, "__nedf2") | ||
| 391 | HANDLE_LIBCALL(UNE_F128, "__netf2") | ||
| 392 | HANDLE_LIBCALL(UNE_PPCF128, "__gcc_qne") | ||
| 393 | HANDLE_LIBCALL(OGE_F32, "__gesf2") | ||
| 394 | HANDLE_LIBCALL(OGE_F64, "__gedf2") | ||
| 395 | HANDLE_LIBCALL(OGE_F128, "__getf2") | ||
| 396 | HANDLE_LIBCALL(OGE_PPCF128, "__gcc_qge") | ||
| 397 | HANDLE_LIBCALL(OLT_F32, "__ltsf2") | ||
| 398 | HANDLE_LIBCALL(OLT_F64, "__ltdf2") | ||
| 399 | HANDLE_LIBCALL(OLT_F128, "__lttf2") | ||
| 400 | HANDLE_LIBCALL(OLT_PPCF128, "__gcc_qlt") | ||
| 401 | HANDLE_LIBCALL(OLE_F32, "__lesf2") | ||
| 402 | HANDLE_LIBCALL(OLE_F64, "__ledf2") | ||
| 403 | HANDLE_LIBCALL(OLE_F128, "__letf2") | ||
| 404 | HANDLE_LIBCALL(OLE_PPCF128, "__gcc_qle") | ||
| 405 | HANDLE_LIBCALL(OGT_F32, "__gtsf2") | ||
| 406 | HANDLE_LIBCALL(OGT_F64, "__gtdf2") | ||
| 407 | HANDLE_LIBCALL(OGT_F128, "__gttf2") | ||
| 408 | HANDLE_LIBCALL(OGT_PPCF128, "__gcc_qgt") | ||
| 409 | HANDLE_LIBCALL(UO_F32, "__unordsf2") | ||
| 410 | HANDLE_LIBCALL(UO_F64, "__unorddf2") | ||
| 411 | HANDLE_LIBCALL(UO_F128, "__unordtf2") | ||
| 412 | HANDLE_LIBCALL(UO_PPCF128, "__gcc_qunord") | ||
| 413 | |||
| 414 | // Memory | ||
| 415 | HANDLE_LIBCALL(MEMCPY, "memcpy") | ||
| 416 | HANDLE_LIBCALL(MEMMOVE, "memmove") | ||
| 417 | HANDLE_LIBCALL(MEMSET, "memset") | ||
| 418 | HANDLE_LIBCALL(BZERO, nullptr) | ||
| 419 | |||
| 420 | // Element-wise unordered-atomic memory of different sizes | ||
| 421 | HANDLE_LIBCALL(MEMCPY_ELEMENT_UNORDERED_ATOMIC_1, "__llvm_memcpy_element_unordered_atomic_1") | ||
| 422 | HANDLE_LIBCALL(MEMCPY_ELEMENT_UNORDERED_ATOMIC_2, "__llvm_memcpy_element_unordered_atomic_2") | ||
| 423 | HANDLE_LIBCALL(MEMCPY_ELEMENT_UNORDERED_ATOMIC_4, "__llvm_memcpy_element_unordered_atomic_4") | ||
| 424 | HANDLE_LIBCALL(MEMCPY_ELEMENT_UNORDERED_ATOMIC_8, "__llvm_memcpy_element_unordered_atomic_8") | ||
| 425 | HANDLE_LIBCALL(MEMCPY_ELEMENT_UNORDERED_ATOMIC_16, "__llvm_memcpy_element_unordered_atomic_16") | ||
| 426 | HANDLE_LIBCALL(MEMMOVE_ELEMENT_UNORDERED_ATOMIC_1, "__llvm_memmove_element_unordered_atomic_1") | ||
| 427 | HANDLE_LIBCALL(MEMMOVE_ELEMENT_UNORDERED_ATOMIC_2, "__llvm_memmove_element_unordered_atomic_2") | ||
| 428 | HANDLE_LIBCALL(MEMMOVE_ELEMENT_UNORDERED_ATOMIC_4, "__llvm_memmove_element_unordered_atomic_4") | ||
| 429 | HANDLE_LIBCALL(MEMMOVE_ELEMENT_UNORDERED_ATOMIC_8, "__llvm_memmove_element_unordered_atomic_8") | ||
| 430 | HANDLE_LIBCALL(MEMMOVE_ELEMENT_UNORDERED_ATOMIC_16, "__llvm_memmove_element_unordered_atomic_16") | ||
| 431 | HANDLE_LIBCALL(MEMSET_ELEMENT_UNORDERED_ATOMIC_1, "__llvm_memset_element_unordered_atomic_1") | ||
| 432 | HANDLE_LIBCALL(MEMSET_ELEMENT_UNORDERED_ATOMIC_2, "__llvm_memset_element_unordered_atomic_2") | ||
| 433 | HANDLE_LIBCALL(MEMSET_ELEMENT_UNORDERED_ATOMIC_4, "__llvm_memset_element_unordered_atomic_4") | ||
| 434 | HANDLE_LIBCALL(MEMSET_ELEMENT_UNORDERED_ATOMIC_8, "__llvm_memset_element_unordered_atomic_8") | ||
| 435 | HANDLE_LIBCALL(MEMSET_ELEMENT_UNORDERED_ATOMIC_16, "__llvm_memset_element_unordered_atomic_16") | ||
| 436 | |||
| 437 | // Exception handling | ||
| 438 | HANDLE_LIBCALL(UNWIND_RESUME, "_Unwind_Resume") | ||
| 439 | HANDLE_LIBCALL(CXA_END_CLEANUP, "__cxa_end_cleanup") | ||
| 440 | |||
| 441 | // Note: there are two sets of atomics libcalls; see | ||
| 442 | // <https://llvm.org/docs/Atomics.html> for more info on the | ||
| 443 | // difference between them. | ||
| 444 | |||
| 445 | // Atomic '__sync_*' libcalls. | ||
| 446 | HANDLE_LIBCALL(SYNC_VAL_COMPARE_AND_SWAP_1, "__sync_val_compare_and_swap_1") | ||
| 447 | HANDLE_LIBCALL(SYNC_VAL_COMPARE_AND_SWAP_2, "__sync_val_compare_and_swap_2") | ||
| 448 | HANDLE_LIBCALL(SYNC_VAL_COMPARE_AND_SWAP_4, "__sync_val_compare_and_swap_4") | ||
| 449 | HANDLE_LIBCALL(SYNC_VAL_COMPARE_AND_SWAP_8, "__sync_val_compare_and_swap_8") | ||
| 450 | HANDLE_LIBCALL(SYNC_VAL_COMPARE_AND_SWAP_16, "__sync_val_compare_and_swap_16") | ||
| 451 | HANDLE_LIBCALL(SYNC_LOCK_TEST_AND_SET_1, "__sync_lock_test_and_set_1") | ||
| 452 | HANDLE_LIBCALL(SYNC_LOCK_TEST_AND_SET_2, "__sync_lock_test_and_set_2") | ||
| 453 | HANDLE_LIBCALL(SYNC_LOCK_TEST_AND_SET_4, "__sync_lock_test_and_set_4") | ||
| 454 | HANDLE_LIBCALL(SYNC_LOCK_TEST_AND_SET_8, "__sync_lock_test_and_set_8") | ||
| 455 | HANDLE_LIBCALL(SYNC_LOCK_TEST_AND_SET_16, "__sync_lock_test_and_set_16") | ||
| 456 | HANDLE_LIBCALL(SYNC_FETCH_AND_ADD_1, "__sync_fetch_and_add_1") | ||
| 457 | HANDLE_LIBCALL(SYNC_FETCH_AND_ADD_2, "__sync_fetch_and_add_2") | ||
| 458 | HANDLE_LIBCALL(SYNC_FETCH_AND_ADD_4, "__sync_fetch_and_add_4") | ||
| 459 | HANDLE_LIBCALL(SYNC_FETCH_AND_ADD_8, "__sync_fetch_and_add_8") | ||
| 460 | HANDLE_LIBCALL(SYNC_FETCH_AND_ADD_16, "__sync_fetch_and_add_16") | ||
| 461 | HANDLE_LIBCALL(SYNC_FETCH_AND_SUB_1, "__sync_fetch_and_sub_1") | ||
| 462 | HANDLE_LIBCALL(SYNC_FETCH_AND_SUB_2, "__sync_fetch_and_sub_2") | ||
| 463 | HANDLE_LIBCALL(SYNC_FETCH_AND_SUB_4, "__sync_fetch_and_sub_4") | ||
| 464 | HANDLE_LIBCALL(SYNC_FETCH_AND_SUB_8, "__sync_fetch_and_sub_8") | ||
| 465 | HANDLE_LIBCALL(SYNC_FETCH_AND_SUB_16, "__sync_fetch_and_sub_16") | ||
| 466 | HANDLE_LIBCALL(SYNC_FETCH_AND_AND_1, "__sync_fetch_and_and_1") | ||
| 467 | HANDLE_LIBCALL(SYNC_FETCH_AND_AND_2, "__sync_fetch_and_and_2") | ||
| 468 | HANDLE_LIBCALL(SYNC_FETCH_AND_AND_4, "__sync_fetch_and_and_4") | ||
| 469 | HANDLE_LIBCALL(SYNC_FETCH_AND_AND_8, "__sync_fetch_and_and_8") | ||
| 470 | HANDLE_LIBCALL(SYNC_FETCH_AND_AND_16, "__sync_fetch_and_and_16") | ||
| 471 | HANDLE_LIBCALL(SYNC_FETCH_AND_OR_1, "__sync_fetch_and_or_1") | ||
| 472 | HANDLE_LIBCALL(SYNC_FETCH_AND_OR_2, "__sync_fetch_and_or_2") | ||
| 473 | HANDLE_LIBCALL(SYNC_FETCH_AND_OR_4, "__sync_fetch_and_or_4") | ||
| 474 | HANDLE_LIBCALL(SYNC_FETCH_AND_OR_8, "__sync_fetch_and_or_8") | ||
| 475 | HANDLE_LIBCALL(SYNC_FETCH_AND_OR_16, "__sync_fetch_and_or_16") | ||
| 476 | HANDLE_LIBCALL(SYNC_FETCH_AND_XOR_1, "__sync_fetch_and_xor_1") | ||
| 477 | HANDLE_LIBCALL(SYNC_FETCH_AND_XOR_2, "__sync_fetch_and_xor_2") | ||
| 478 | HANDLE_LIBCALL(SYNC_FETCH_AND_XOR_4, "__sync_fetch_and_xor_4") | ||
| 479 | HANDLE_LIBCALL(SYNC_FETCH_AND_XOR_8, "__sync_fetch_and_xor_8") | ||
| 480 | HANDLE_LIBCALL(SYNC_FETCH_AND_XOR_16, "__sync_fetch_and_xor_16") | ||
| 481 | HANDLE_LIBCALL(SYNC_FETCH_AND_NAND_1, "__sync_fetch_and_nand_1") | ||
| 482 | HANDLE_LIBCALL(SYNC_FETCH_AND_NAND_2, "__sync_fetch_and_nand_2") | ||
| 483 | HANDLE_LIBCALL(SYNC_FETCH_AND_NAND_4, "__sync_fetch_and_nand_4") | ||
| 484 | HANDLE_LIBCALL(SYNC_FETCH_AND_NAND_8, "__sync_fetch_and_nand_8") | ||
| 485 | HANDLE_LIBCALL(SYNC_FETCH_AND_NAND_16, "__sync_fetch_and_nand_16") | ||
| 486 | HANDLE_LIBCALL(SYNC_FETCH_AND_MAX_1, "__sync_fetch_and_max_1") | ||
| 487 | HANDLE_LIBCALL(SYNC_FETCH_AND_MAX_2, "__sync_fetch_and_max_2") | ||
| 488 | HANDLE_LIBCALL(SYNC_FETCH_AND_MAX_4, "__sync_fetch_and_max_4") | ||
| 489 | HANDLE_LIBCALL(SYNC_FETCH_AND_MAX_8, "__sync_fetch_and_max_8") | ||
| 490 | HANDLE_LIBCALL(SYNC_FETCH_AND_MAX_16, "__sync_fetch_and_max_16") | ||
| 491 | HANDLE_LIBCALL(SYNC_FETCH_AND_UMAX_1, "__sync_fetch_and_umax_1") | ||
| 492 | HANDLE_LIBCALL(SYNC_FETCH_AND_UMAX_2, "__sync_fetch_and_umax_2") | ||
| 493 | HANDLE_LIBCALL(SYNC_FETCH_AND_UMAX_4, "__sync_fetch_and_umax_4") | ||
| 494 | HANDLE_LIBCALL(SYNC_FETCH_AND_UMAX_8, "__sync_fetch_and_umax_8") | ||
| 495 | HANDLE_LIBCALL(SYNC_FETCH_AND_UMAX_16, "__sync_fetch_and_umax_16") | ||
| 496 | HANDLE_LIBCALL(SYNC_FETCH_AND_MIN_1, "__sync_fetch_and_min_1") | ||
| 497 | HANDLE_LIBCALL(SYNC_FETCH_AND_MIN_2, "__sync_fetch_and_min_2") | ||
| 498 | HANDLE_LIBCALL(SYNC_FETCH_AND_MIN_4, "__sync_fetch_and_min_4") | ||
| 499 | HANDLE_LIBCALL(SYNC_FETCH_AND_MIN_8, "__sync_fetch_and_min_8") | ||
| 500 | HANDLE_LIBCALL(SYNC_FETCH_AND_MIN_16, "__sync_fetch_and_min_16") | ||
| 501 | HANDLE_LIBCALL(SYNC_FETCH_AND_UMIN_1, "__sync_fetch_and_umin_1") | ||
| 502 | HANDLE_LIBCALL(SYNC_FETCH_AND_UMIN_2, "__sync_fetch_and_umin_2") | ||
| 503 | HANDLE_LIBCALL(SYNC_FETCH_AND_UMIN_4, "__sync_fetch_and_umin_4") | ||
| 504 | HANDLE_LIBCALL(SYNC_FETCH_AND_UMIN_8, "__sync_fetch_and_umin_8") | ||
| 505 | HANDLE_LIBCALL(SYNC_FETCH_AND_UMIN_16, "__sync_fetch_and_umin_16") | ||
| 506 | |||
| 507 | // Atomic `__atomic_*' libcalls. | ||
| 508 | HANDLE_LIBCALL(ATOMIC_LOAD, "__atomic_load") | ||
| 509 | HANDLE_LIBCALL(ATOMIC_LOAD_1, "__atomic_load_1") | ||
| 510 | HANDLE_LIBCALL(ATOMIC_LOAD_2, "__atomic_load_2") | ||
| 511 | HANDLE_LIBCALL(ATOMIC_LOAD_4, "__atomic_load_4") | ||
| 512 | HANDLE_LIBCALL(ATOMIC_LOAD_8, "__atomic_load_8") | ||
| 513 | HANDLE_LIBCALL(ATOMIC_LOAD_16, "__atomic_load_16") | ||
| 514 | |||
| 515 | HANDLE_LIBCALL(ATOMIC_STORE, "__atomic_store") | ||
| 516 | HANDLE_LIBCALL(ATOMIC_STORE_1, "__atomic_store_1") | ||
| 517 | HANDLE_LIBCALL(ATOMIC_STORE_2, "__atomic_store_2") | ||
| 518 | HANDLE_LIBCALL(ATOMIC_STORE_4, "__atomic_store_4") | ||
| 519 | HANDLE_LIBCALL(ATOMIC_STORE_8, "__atomic_store_8") | ||
| 520 | HANDLE_LIBCALL(ATOMIC_STORE_16, "__atomic_store_16") | ||
| 521 | |||
| 522 | HANDLE_LIBCALL(ATOMIC_EXCHANGE, "__atomic_exchange") | ||
| 523 | HANDLE_LIBCALL(ATOMIC_EXCHANGE_1, "__atomic_exchange_1") | ||
| 524 | HANDLE_LIBCALL(ATOMIC_EXCHANGE_2, "__atomic_exchange_2") | ||
| 525 | HANDLE_LIBCALL(ATOMIC_EXCHANGE_4, "__atomic_exchange_4") | ||
| 526 | HANDLE_LIBCALL(ATOMIC_EXCHANGE_8, "__atomic_exchange_8") | ||
| 527 | HANDLE_LIBCALL(ATOMIC_EXCHANGE_16, "__atomic_exchange_16") | ||
| 528 | |||
| 529 | HANDLE_LIBCALL(ATOMIC_COMPARE_EXCHANGE, "__atomic_compare_exchange") | ||
| 530 | HANDLE_LIBCALL(ATOMIC_COMPARE_EXCHANGE_1, "__atomic_compare_exchange_1") | ||
| 531 | HANDLE_LIBCALL(ATOMIC_COMPARE_EXCHANGE_2, "__atomic_compare_exchange_2") | ||
| 532 | HANDLE_LIBCALL(ATOMIC_COMPARE_EXCHANGE_4, "__atomic_compare_exchange_4") | ||
| 533 | HANDLE_LIBCALL(ATOMIC_COMPARE_EXCHANGE_8, "__atomic_compare_exchange_8") | ||
| 534 | HANDLE_LIBCALL(ATOMIC_COMPARE_EXCHANGE_16, "__atomic_compare_exchange_16") | ||
| 535 | |||
| 536 | HANDLE_LIBCALL(ATOMIC_FETCH_ADD_1, "__atomic_fetch_add_1") | ||
| 537 | HANDLE_LIBCALL(ATOMIC_FETCH_ADD_2, "__atomic_fetch_add_2") | ||
| 538 | HANDLE_LIBCALL(ATOMIC_FETCH_ADD_4, "__atomic_fetch_add_4") | ||
| 539 | HANDLE_LIBCALL(ATOMIC_FETCH_ADD_8, "__atomic_fetch_add_8") | ||
| 540 | HANDLE_LIBCALL(ATOMIC_FETCH_ADD_16, "__atomic_fetch_add_16") | ||
| 541 | HANDLE_LIBCALL(ATOMIC_FETCH_SUB_1, "__atomic_fetch_sub_1") | ||
| 542 | HANDLE_LIBCALL(ATOMIC_FETCH_SUB_2, "__atomic_fetch_sub_2") | ||
| 543 | HANDLE_LIBCALL(ATOMIC_FETCH_SUB_4, "__atomic_fetch_sub_4") | ||
| 544 | HANDLE_LIBCALL(ATOMIC_FETCH_SUB_8, "__atomic_fetch_sub_8") | ||
| 545 | HANDLE_LIBCALL(ATOMIC_FETCH_SUB_16, "__atomic_fetch_sub_16") | ||
| 546 | HANDLE_LIBCALL(ATOMIC_FETCH_AND_1, "__atomic_fetch_and_1") | ||
| 547 | HANDLE_LIBCALL(ATOMIC_FETCH_AND_2, "__atomic_fetch_and_2") | ||
| 548 | HANDLE_LIBCALL(ATOMIC_FETCH_AND_4, "__atomic_fetch_and_4") | ||
| 549 | HANDLE_LIBCALL(ATOMIC_FETCH_AND_8, "__atomic_fetch_and_8") | ||
| 550 | HANDLE_LIBCALL(ATOMIC_FETCH_AND_16, "__atomic_fetch_and_16") | ||
| 551 | HANDLE_LIBCALL(ATOMIC_FETCH_OR_1, "__atomic_fetch_or_1") | ||
| 552 | HANDLE_LIBCALL(ATOMIC_FETCH_OR_2, "__atomic_fetch_or_2") | ||
| 553 | HANDLE_LIBCALL(ATOMIC_FETCH_OR_4, "__atomic_fetch_or_4") | ||
| 554 | HANDLE_LIBCALL(ATOMIC_FETCH_OR_8, "__atomic_fetch_or_8") | ||
| 555 | HANDLE_LIBCALL(ATOMIC_FETCH_OR_16, "__atomic_fetch_or_16") | ||
| 556 | HANDLE_LIBCALL(ATOMIC_FETCH_XOR_1, "__atomic_fetch_xor_1") | ||
| 557 | HANDLE_LIBCALL(ATOMIC_FETCH_XOR_2, "__atomic_fetch_xor_2") | ||
| 558 | HANDLE_LIBCALL(ATOMIC_FETCH_XOR_4, "__atomic_fetch_xor_4") | ||
| 559 | HANDLE_LIBCALL(ATOMIC_FETCH_XOR_8, "__atomic_fetch_xor_8") | ||
| 560 | HANDLE_LIBCALL(ATOMIC_FETCH_XOR_16, "__atomic_fetch_xor_16") | ||
| 561 | HANDLE_LIBCALL(ATOMIC_FETCH_NAND_1, "__atomic_fetch_nand_1") | ||
| 562 | HANDLE_LIBCALL(ATOMIC_FETCH_NAND_2, "__atomic_fetch_nand_2") | ||
| 563 | HANDLE_LIBCALL(ATOMIC_FETCH_NAND_4, "__atomic_fetch_nand_4") | ||
| 564 | HANDLE_LIBCALL(ATOMIC_FETCH_NAND_8, "__atomic_fetch_nand_8") | ||
| 565 | HANDLE_LIBCALL(ATOMIC_FETCH_NAND_16, "__atomic_fetch_nand_16") | ||
| 566 | |||
| 567 | // Out-of-line atomics libcalls | ||
| 568 | #define HLCALLS(A, N) \ | ||
| 569 | HANDLE_LIBCALL(A##N##_RELAX, nullptr) \ | ||
| 570 | HANDLE_LIBCALL(A##N##_ACQ, nullptr) \ | ||
| 571 | HANDLE_LIBCALL(A##N##_REL, nullptr) \ | ||
| 572 | HANDLE_LIBCALL(A##N##_ACQ_REL, nullptr) | ||
| 573 | #define HLCALL5(A) \ | ||
| 574 | HLCALLS(A, 1) HLCALLS(A, 2) HLCALLS(A, 4) HLCALLS(A, 8) HLCALLS(A, 16) | ||
| 575 | HLCALL5(OUTLINE_ATOMIC_CAS) | ||
| 576 | HLCALL5(OUTLINE_ATOMIC_SWP) | ||
| 577 | HLCALL5(OUTLINE_ATOMIC_LDADD) | ||
| 578 | HLCALL5(OUTLINE_ATOMIC_LDSET) | ||
| 579 | HLCALL5(OUTLINE_ATOMIC_LDCLR) | ||
| 580 | HLCALL5(OUTLINE_ATOMIC_LDEOR) | ||
| 581 | #undef HLCALLS | ||
| 582 | #undef HLCALL5 | ||
| 583 | |||
| 584 | // Stack Protector Fail | ||
| 585 | HANDLE_LIBCALL(STACKPROTECTOR_CHECK_FAIL, "__stack_chk_fail") | ||
| 586 | |||
| 587 | // Deoptimization | ||
| 588 | HANDLE_LIBCALL(DEOPTIMIZE, "__llvm_deoptimize") | ||
| 589 | |||
| 590 | // Return address | ||
| 591 | HANDLE_LIBCALL(RETURN_ADDRESS, nullptr) | ||
| 592 | |||
| 593 | HANDLE_LIBCALL(UNKNOWN_LIBCALL, nullptr) | ||
| 594 |