1 // CodeGen/RuntimeLibcallSignatures.cpp - R.T. Lib. Call Signatures -*- C++ -*-- 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 /// 10 /// \file 11 /// \brief This file contains signature information for runtime libcalls. 12 /// 13 /// CodeGen uses external symbols, which it refers to by name. The WebAssembly 14 /// target needs type information for all functions. This file contains a big 15 /// table providing type signatures for all runtime library functions that LLVM 16 /// uses. 17 /// 18 /// This is currently a fairly heavy-handed solution. 19 /// 20 //===----------------------------------------------------------------------===// 21 22 #include "WebAssemblyRuntimeLibcallSignatures.h" 23 #include "WebAssemblySubtarget.h" 24 #include "llvm/CodeGen/RuntimeLibcalls.h" 25 26 using namespace llvm; 27 28 namespace { 29 30 enum RuntimeLibcallSignature { 31 func, 32 f32_func_f32, 33 f32_func_f64, 34 f32_func_i32, 35 f32_func_i64, 36 f32_func_i16, 37 f64_func_f32, 38 f64_func_f64, 39 f64_func_i32, 40 f64_func_i64, 41 i32_func_f32, 42 i32_func_f64, 43 i32_func_i32, 44 i64_func_f32, 45 i64_func_f64, 46 i64_func_i64, 47 f32_func_f32_f32, 48 f32_func_f32_i32, 49 f32_func_i64_i64, 50 f64_func_f64_f64, 51 f64_func_f64_i32, 52 f64_func_i64_i64, 53 i16_func_f32, 54 i8_func_i8_i8, 55 func_f32_iPTR_iPTR, 56 func_f64_iPTR_iPTR, 57 i16_func_i16_i16, 58 i32_func_f32_f32, 59 i32_func_f64_f64, 60 i32_func_i32_i32, 61 i64_func_i64_i64, 62 i64_i64_func_f32, 63 i64_i64_func_f64, 64 i16_i16_func_i16_i16, 65 i32_i32_func_i32_i32, 66 i64_i64_func_i64_i64, 67 i64_i64_func_i64_i64_i64_i64, 68 i64_i64_i64_i64_func_i64_i64_i64_i64, 69 i64_i64_func_i64_i64_i32, 70 iPTR_func_iPTR_i32_iPTR, 71 iPTR_func_iPTR_iPTR_iPTR, 72 f32_func_f32_f32_f32, 73 f64_func_f64_f64_f64, 74 func_i64_i64_iPTR_iPTR, 75 func_iPTR_f32, 76 func_iPTR_f64, 77 func_iPTR_i32, 78 func_iPTR_i64, 79 func_iPTR_i64_i64, 80 func_iPTR_i64_i64_i64_i64, 81 func_iPTR_i64_i64_i64_i64_i64_i64, 82 i32_func_i64_i64, 83 i32_func_i64_i64_i64_i64, 84 unsupported 85 }; 86 87 } // end anonymous namespace 88 89 static const RuntimeLibcallSignature 90 RuntimeLibcallSignatures[RTLIB::UNKNOWN_LIBCALL] = { 91 // Integer 92 /* SHL_I16 */ i16_func_i16_i16, 93 /* SHL_I32 */ i32_func_i32_i32, 94 /* SHL_I64 */ i64_func_i64_i64, 95 /* SHL_I128 */ i64_i64_func_i64_i64_i32, 96 /* SRL_I16 */ i16_func_i16_i16, 97 /* SRL_I32 */ i32_func_i32_i32, 98 /* SRL_I64 */ i64_func_i64_i64, 99 /* SRL_I128 */ i64_i64_func_i64_i64_i32, 100 /* SRA_I16 */ i16_func_i16_i16, 101 /* SRA_I32 */ i32_func_i32_i32, 102 /* SRA_I64 */ i64_func_i64_i64, 103 /* SRA_I128 */ i64_i64_func_i64_i64_i32, 104 /* MUL_I8 */ i8_func_i8_i8, 105 /* MUL_I16 */ i16_func_i16_i16, 106 /* MUL_I32 */ i32_func_i32_i32, 107 /* MUL_I64 */ i64_func_i64_i64, 108 /* MUL_I128 */ i64_i64_func_i64_i64_i64_i64, 109 /* MULO_I32 */ i32_func_i32_i32, 110 /* MULO_I64 */ i64_func_i64_i64, 111 /* MULO_I128 */ i64_i64_func_i64_i64_i64_i64, 112 /* SDIV_I8 */ i8_func_i8_i8, 113 /* SDIV_I16 */ i16_func_i16_i16, 114 /* SDIV_I32 */ i32_func_i32_i32, 115 /* SDIV_I64 */ i64_func_i64_i64, 116 /* SDIV_I128 */ i64_i64_func_i64_i64_i64_i64, 117 /* UDIV_I8 */ i8_func_i8_i8, 118 /* UDIV_I16 */ i16_func_i16_i16, 119 /* UDIV_I32 */ i32_func_i32_i32, 120 /* UDIV_I64 */ i64_func_i64_i64, 121 /* UDIV_I128 */ i64_i64_func_i64_i64_i64_i64, 122 /* SREM_I8 */ i8_func_i8_i8, 123 /* SREM_I16 */ i16_func_i16_i16, 124 /* SREM_I32 */ i32_func_i32_i32, 125 /* SREM_I64 */ i64_func_i64_i64, 126 /* SREM_I128 */ i64_i64_func_i64_i64_i64_i64, 127 /* UREM_I8 */ i8_func_i8_i8, 128 /* UREM_I16 */ i16_func_i16_i16, 129 /* UREM_I32 */ i32_func_i32_i32, 130 /* UREM_I64 */ i64_func_i64_i64, 131 /* UREM_I128 */ i64_i64_func_i64_i64_i64_i64, 132 /* SDIVREM_I8 */ i8_func_i8_i8, 133 /* SDIVREM_I16 */ i16_i16_func_i16_i16, 134 /* SDIVREM_I32 */ i32_i32_func_i32_i32, 135 /* SDIVREM_I64 */ i64_func_i64_i64, 136 /* SDIVREM_I128 */ i64_i64_i64_i64_func_i64_i64_i64_i64, 137 /* UDIVREM_I8 */ i8_func_i8_i8, 138 /* UDIVREM_I16 */ i16_i16_func_i16_i16, 139 /* UDIVREM_I32 */ i32_i32_func_i32_i32, 140 /* UDIVREM_I64 */ i64_i64_func_i64_i64, 141 /* UDIVREM_I128 */ i64_i64_i64_i64_func_i64_i64_i64_i64, 142 /* NEG_I32 */ i32_func_i32, 143 /* NEG_I64 */ i64_func_i64, 144 145 // FLOATING POINT 146 /* ADD_F32 */ f32_func_f32_f32, 147 /* ADD_F64 */ f64_func_f64_f64, 148 /* ADD_F80 */ unsupported, 149 /* ADD_F128 */ func_iPTR_i64_i64_i64_i64, 150 /* ADD_PPCF128 */ unsupported, 151 /* SUB_F32 */ f32_func_f32_f32, 152 /* SUB_F64 */ f64_func_f64_f64, 153 /* SUB_F80 */ unsupported, 154 /* SUB_F128 */ func_iPTR_i64_i64_i64_i64, 155 /* SUB_PPCF128 */ unsupported, 156 /* MUL_F32 */ f32_func_f32_f32, 157 /* MUL_F64 */ f64_func_f64_f64, 158 /* MUL_F80 */ unsupported, 159 /* MUL_F128 */ func_iPTR_i64_i64_i64_i64, 160 /* MUL_PPCF128 */ unsupported, 161 /* DIV_F32 */ f32_func_f32_f32, 162 /* DIV_F64 */ f64_func_f64_f64, 163 /* DIV_F80 */ unsupported, 164 /* DIV_F128 */ func_iPTR_i64_i64_i64_i64, 165 /* DIV_PPCF128 */ unsupported, 166 /* REM_F32 */ f32_func_f32_f32, 167 /* REM_F64 */ f64_func_f64_f64, 168 /* REM_F80 */ unsupported, 169 /* REM_F128 */ func_iPTR_i64_i64_i64_i64, 170 /* REM_PPCF128 */ unsupported, 171 /* FMA_F32 */ f32_func_f32_f32_f32, 172 /* FMA_F64 */ f64_func_f64_f64_f64, 173 /* FMA_F80 */ unsupported, 174 /* FMA_F128 */ func_iPTR_i64_i64_i64_i64_i64_i64, 175 /* FMA_PPCF128 */ unsupported, 176 /* POWI_F32 */ f32_func_f32_i32, 177 /* POWI_F64 */ f64_func_f64_i32, 178 /* POWI_F80 */ unsupported, 179 /* POWI_F128 */ func_iPTR_i64_i64_i64_i64, 180 /* POWI_PPCF128 */ unsupported, 181 /* SQRT_F32 */ f32_func_f32, 182 /* SQRT_F64 */ f64_func_f64, 183 /* SQRT_F80 */ unsupported, 184 /* SQRT_F128 */ func_iPTR_i64_i64, 185 /* SQRT_PPCF128 */ unsupported, 186 /* LOG_F32 */ f32_func_f32, 187 /* LOG_F64 */ f64_func_f64, 188 /* LOG_F80 */ unsupported, 189 /* LOG_F128 */ func_iPTR_i64_i64, 190 /* LOG_PPCF128 */ unsupported, 191 /* LOG2_F32 */ f32_func_f32, 192 /* LOG2_F64 */ f64_func_f64, 193 /* LOG2_F80 */ unsupported, 194 /* LOG2_F128 */ func_iPTR_i64_i64, 195 /* LOG2_PPCF128 */ unsupported, 196 /* LOG10_F32 */ f32_func_f32, 197 /* LOG10_F64 */ f64_func_f64, 198 /* LOG10_F80 */ unsupported, 199 /* LOG10_F128 */ func_iPTR_i64_i64, 200 /* LOG10_PPCF128 */ unsupported, 201 /* EXP_F32 */ f32_func_f32, 202 /* EXP_F64 */ f64_func_f64, 203 /* EXP_F80 */ unsupported, 204 /* EXP_F128 */ func_iPTR_i64_i64, 205 /* EXP_PPCF128 */ unsupported, 206 /* EXP2_F32 */ f32_func_f32, 207 /* EXP2_F64 */ f64_func_f64, 208 /* EXP2_F80 */ unsupported, 209 /* EXP2_F128 */ func_iPTR_i64_i64, 210 /* EXP2_PPCF128 */ unsupported, 211 /* SIN_F32 */ f32_func_f32, 212 /* SIN_F64 */ f64_func_f64, 213 /* SIN_F80 */ unsupported, 214 /* SIN_F128 */ func_iPTR_i64_i64, 215 /* SIN_PPCF128 */ unsupported, 216 /* COS_F32 */ f32_func_f32, 217 /* COS_F64 */ f64_func_f64, 218 /* COS_F80 */ unsupported, 219 /* COS_F128 */ func_iPTR_i64_i64, 220 /* COS_PPCF128 */ unsupported, 221 /* SINCOS_F32 */ func_f32_iPTR_iPTR, 222 /* SINCOS_F64 */ func_f64_iPTR_iPTR, 223 /* SINCOS_F80 */ unsupported, 224 /* SINCOS_F128 */ func_i64_i64_iPTR_iPTR, 225 /* SINCOS_PPCF128 */ unsupported, 226 /* SINCOS_STRET_F32 */ unsupported, 227 /* SINCOS_STRET_F64 */ unsupported, 228 /* POW_F32 */ f32_func_f32_f32, 229 /* POW_F64 */ f64_func_f64_f64, 230 /* POW_F80 */ unsupported, 231 /* POW_F128 */ func_iPTR_i64_i64_i64_i64, 232 /* POW_PPCF128 */ unsupported, 233 /* CEIL_F32 */ f32_func_f32, 234 /* CEIL_F64 */ f64_func_f64, 235 /* CEIL_F80 */ unsupported, 236 /* CEIL_F128 */ func_iPTR_i64_i64, 237 /* CEIL_PPCF128 */ unsupported, 238 /* TRUNC_F32 */ f32_func_f32, 239 /* TRUNC_F64 */ f64_func_f64, 240 /* TRUNC_F80 */ unsupported, 241 /* TRUNC_F128 */ func_iPTR_i64_i64, 242 /* TRUNC_PPCF128 */ unsupported, 243 /* RINT_F32 */ f32_func_f32, 244 /* RINT_F64 */ f64_func_f64, 245 /* RINT_F80 */ unsupported, 246 /* RINT_F128 */ func_iPTR_i64_i64, 247 /* RINT_PPCF128 */ unsupported, 248 /* NEARBYINT_F32 */ f32_func_f32, 249 /* NEARBYINT_F64 */ f64_func_f64, 250 /* NEARBYINT_F80 */ unsupported, 251 /* NEARBYINT_F128 */ func_iPTR_i64_i64, 252 /* NEARBYINT_PPCF128 */ unsupported, 253 /* ROUND_F32 */ f32_func_f32, 254 /* ROUND_F64 */ f64_func_f64, 255 /* ROUND_F80 */ unsupported, 256 /* ROUND_F128 */ func_iPTR_i64_i64, 257 /* ROUND_PPCF128 */ unsupported, 258 /* FLOOR_F32 */ f32_func_f32, 259 /* FLOOR_F64 */ f64_func_f64, 260 /* FLOOR_F80 */ unsupported, 261 /* FLOOR_F128 */ func_iPTR_i64_i64, 262 /* FLOOR_PPCF128 */ unsupported, 263 /* COPYSIGN_F32 */ f32_func_f32_f32, 264 /* COPYSIGN_F64 */ f64_func_f64_f64, 265 /* COPYSIGN_F80 */ unsupported, 266 /* COPYSIGN_F128 */ func_iPTR_i64_i64_i64_i64, 267 /* COPYSIGN_PPCF128 */ unsupported, 268 /* FMIN_F32 */ f32_func_f32_f32, 269 /* FMIN_F64 */ f64_func_f64_f64, 270 /* FMIN_F80 */ unsupported, 271 /* FMIN_F128 */ func_iPTR_i64_i64_i64_i64, 272 /* FMIN_PPCF128 */ unsupported, 273 /* FMAX_F32 */ f32_func_f32_f32, 274 /* FMAX_F64 */ f64_func_f64_f64, 275 /* FMAX_F80 */ unsupported, 276 /* FMAX_F128 */ func_iPTR_i64_i64_i64_i64, 277 /* FMAX_PPCF128 */ unsupported, 278 279 // CONVERSION 280 /* FPEXT_F32_PPCF128 */ unsupported, 281 /* FPEXT_F64_PPCF128 */ unsupported, 282 /* FPEXT_F64_F128 */ func_iPTR_f64, 283 /* FPEXT_F32_F128 */ func_iPTR_f32, 284 /* FPEXT_F32_F64 */ f64_func_f32, 285 /* FPEXT_F16_F32 */ f32_func_i16, 286 /* FPROUND_F32_F16 */ i16_func_f32, 287 /* FPROUND_F64_F16 */ unsupported, 288 /* FPROUND_F80_F16 */ unsupported, 289 /* FPROUND_F128_F16 */ unsupported, 290 /* FPROUND_PPCF128_F16 */ unsupported, 291 /* FPROUND_F64_F32 */ f32_func_f64, 292 /* FPROUND_F80_F32 */ unsupported, 293 /* FPROUND_F128_F32 */ f32_func_i64_i64, 294 /* FPROUND_PPCF128_F32 */ unsupported, 295 /* FPROUND_F80_F64 */ unsupported, 296 /* FPROUND_F128_F64 */ f64_func_i64_i64, 297 /* FPROUND_PPCF128_F64 */ unsupported, 298 /* FPTOSINT_F32_I32 */ i32_func_f32, 299 /* FPTOSINT_F32_I64 */ i64_func_f32, 300 /* FPTOSINT_F32_I128 */ i64_i64_func_f32, 301 /* FPTOSINT_F64_I32 */ i32_func_f64, 302 /* FPTOSINT_F64_I64 */ i64_func_f64, 303 /* FPTOSINT_F64_I128 */ i64_i64_func_f64, 304 /* FPTOSINT_F80_I32 */ unsupported, 305 /* FPTOSINT_F80_I64 */ unsupported, 306 /* FPTOSINT_F80_I128 */ unsupported, 307 /* FPTOSINT_F128_I32 */ i32_func_i64_i64, 308 /* FPTOSINT_F128_I64 */ i64_func_i64_i64, 309 /* FPTOSINT_F128_I128 */ i64_i64_func_i64_i64, 310 /* FPTOSINT_PPCF128_I32 */ unsupported, 311 /* FPTOSINT_PPCF128_I64 */ unsupported, 312 /* FPTOSINT_PPCF128_I128 */ unsupported, 313 /* FPTOUINT_F32_I32 */ i32_func_f32, 314 /* FPTOUINT_F32_I64 */ i64_func_f32, 315 /* FPTOUINT_F32_I128 */ i64_i64_func_f32, 316 /* FPTOUINT_F64_I32 */ i32_func_f64, 317 /* FPTOUINT_F64_I64 */ i64_func_f64, 318 /* FPTOUINT_F64_I128 */ i64_i64_func_f64, 319 /* FPTOUINT_F80_I32 */ unsupported, 320 /* FPTOUINT_F80_I64 */ unsupported, 321 /* FPTOUINT_F80_I128 */ unsupported, 322 /* FPTOUINT_F128_I32 */ i32_func_i64_i64, 323 /* FPTOUINT_F128_I64 */ i64_func_i64_i64, 324 /* FPTOUINT_F128_I128 */ i64_i64_func_i64_i64, 325 /* FPTOUINT_PPCF128_I32 */ unsupported, 326 /* FPTOUINT_PPCF128_I64 */ unsupported, 327 /* FPTOUINT_PPCF128_I128 */ unsupported, 328 /* SINTTOFP_I32_F32 */ f32_func_i32, 329 /* SINTTOFP_I32_F64 */ f64_func_i32, 330 /* SINTTOFP_I32_F80 */ unsupported, 331 /* SINTTOFP_I32_F128 */ func_iPTR_i32, 332 /* SINTTOFP_I32_PPCF128 */ unsupported, 333 /* SINTTOFP_I64_F32 */ f32_func_i64, 334 /* SINTTOFP_I64_F64 */ f64_func_i64, 335 /* SINTTOFP_I64_F80 */ unsupported, 336 /* SINTTOFP_I64_F128 */ func_iPTR_i64, 337 /* SINTTOFP_I64_PPCF128 */ unsupported, 338 /* SINTTOFP_I128_F32 */ f32_func_i64_i64, 339 /* SINTTOFP_I128_F64 */ f64_func_i64_i64, 340 /* SINTTOFP_I128_F80 */ unsupported, 341 /* SINTTOFP_I128_F128 */ func_iPTR_i64_i64, 342 /* SINTTOFP_I128_PPCF128 */ unsupported, 343 /* UINTTOFP_I32_F32 */ f32_func_i32, 344 /* UINTTOFP_I32_F64 */ f64_func_i64, 345 /* UINTTOFP_I32_F80 */ unsupported, 346 /* UINTTOFP_I32_F128 */ func_iPTR_i32, 347 /* UINTTOFP_I32_PPCF128 */ unsupported, 348 /* UINTTOFP_I64_F32 */ f32_func_i64, 349 /* UINTTOFP_I64_F64 */ f64_func_i64, 350 /* UINTTOFP_I64_F80 */ unsupported, 351 /* UINTTOFP_I64_F128 */ func_iPTR_i64, 352 /* UINTTOFP_I64_PPCF128 */ unsupported, 353 /* UINTTOFP_I128_F32 */ f32_func_i64_i64, 354 /* UINTTOFP_I128_F64 */ f64_func_i64_i64, 355 /* UINTTOFP_I128_F80 */ unsupported, 356 /* UINTTOFP_I128_F128 */ func_iPTR_i64_i64, 357 /* UINTTOFP_I128_PPCF128 */ unsupported, 358 359 // COMPARISON 360 /* OEQ_F32 */ i32_func_f32_f32, 361 /* OEQ_F64 */ i32_func_f64_f64, 362 /* OEQ_F128 */ i32_func_i64_i64_i64_i64, 363 /* OEQ_PPCF128 */ unsupported, 364 /* UNE_F32 */ i32_func_f32_f32, 365 /* UNE_F64 */ i32_func_f64_f64, 366 /* UNE_F128 */ i32_func_i64_i64_i64_i64, 367 /* UNE_PPCF128 */ unsupported, 368 /* OGE_F32 */ i32_func_f32_f32, 369 /* OGE_F64 */ i32_func_f64_f64, 370 /* OGE_F128 */ i32_func_i64_i64_i64_i64, 371 /* OGE_PPCF128 */ unsupported, 372 /* OLT_F32 */ i32_func_f32_f32, 373 /* OLT_F64 */ i32_func_f64_f64, 374 /* OLT_F128 */ i32_func_i64_i64_i64_i64, 375 /* OLT_PPCF128 */ unsupported, 376 /* OLE_F32 */ i32_func_f32_f32, 377 /* OLE_F64 */ i32_func_f64_f64, 378 /* OLE_F128 */ i32_func_i64_i64_i64_i64, 379 /* OLE_PPCF128 */ unsupported, 380 /* OGT_F32 */ i32_func_f32_f32, 381 /* OGT_F64 */ i32_func_f64_f64, 382 /* OGT_F128 */ i32_func_i64_i64_i64_i64, 383 /* OGT_PPCF128 */ unsupported, 384 /* UO_F32 */ i32_func_f32_f32, 385 /* UO_F64 */ i32_func_f64_f64, 386 /* UO_F128 */ i32_func_i64_i64_i64_i64, 387 /* UO_PPCF128 */ unsupported, 388 /* O_F32 */ i32_func_f32_f32, 389 /* O_F64 */ i32_func_f64_f64, 390 /* O_F128 */ i32_func_i64_i64_i64_i64, 391 /* O_PPCF128 */ unsupported, 392 393 // MEMORY 394 /* MEMCPY */ iPTR_func_iPTR_iPTR_iPTR, 395 /* MEMMOVE */ iPTR_func_iPTR_iPTR_iPTR, 396 /* MEMSET */ iPTR_func_iPTR_i32_iPTR, 397 /* BZERO */ unsupported, 398 399 // ELEMENT-WISE ATOMIC MEMORY 400 /* MEMCPY_ELEMENT_UNORDERED_ATOMIC_1 */ unsupported, 401 /* MEMCPY_ELEMENT_UNORDERED_ATOMIC_2 */ unsupported, 402 /* MEMCPY_ELEMENT_UNORDERED_ATOMIC_4 */ unsupported, 403 /* MEMCPY_ELEMENT_UNORDERED_ATOMIC_8 */ unsupported, 404 /* MEMCPY_ELEMENT_UNORDERED_ATOMIC_16 */ unsupported, 405 /* MEMMOVE_ELEMENT_UNORDERED_ATOMIC_1 */ unsupported, 406 /* MEMMOVE_ELEMENT_UNORDERED_ATOMIC_2 */ unsupported, 407 /* MEMMOVE_ELEMENT_UNORDERED_ATOMIC_4 */ unsupported, 408 /* MEMMOVE_ELEMENT_UNORDERED_ATOMIC_8 */ unsupported, 409 /* MEMMOVE_ELEMENT_UNORDERED_ATOMIC_16 */ unsupported, 410 411 /* MEMSET_ELEMENT_UNORDERED_ATOMIC_1 */ unsupported, 412 /* MEMSET_ELEMENT_UNORDERED_ATOMIC_2 */ unsupported, 413 /* MEMSET_ELEMENT_UNORDERED_ATOMIC_4 */ unsupported, 414 /* MEMSET_ELEMENT_UNORDERED_ATOMIC_8 */ unsupported, 415 /* MEMSET_ELEMENT_UNORDERED_ATOMIC_16 */ unsupported, 416 417 // EXCEPTION HANDLING 418 /* UNWIND_RESUME */ unsupported, 419 420 // Note: there's two sets of atomics libcalls; see 421 // <http://llvm.org/docs/Atomics.html> for more info on the 422 // difference between them. 423 424 // Atomic '__sync_*' libcalls. 425 /* SYNC_VAL_COMPARE_AND_SWAP_1 */ unsupported, 426 /* SYNC_VAL_COMPARE_AND_SWAP_2 */ unsupported, 427 /* SYNC_VAL_COMPARE_AND_SWAP_4 */ unsupported, 428 /* SYNC_VAL_COMPARE_AND_SWAP_8 */ unsupported, 429 /* SYNC_VAL_COMPARE_AND_SWAP_16 */ unsupported, 430 /* SYNC_LOCK_TEST_AND_SET_1 */ unsupported, 431 /* SYNC_LOCK_TEST_AND_SET_2 */ unsupported, 432 /* SYNC_LOCK_TEST_AND_SET_4 */ unsupported, 433 /* SYNC_LOCK_TEST_AND_SET_8 */ unsupported, 434 /* SYNC_LOCK_TEST_AND_SET_16 */ unsupported, 435 /* SYNC_FETCH_AND_ADD_1 */ unsupported, 436 /* SYNC_FETCH_AND_ADD_2 */ unsupported, 437 /* SYNC_FETCH_AND_ADD_4 */ unsupported, 438 /* SYNC_FETCH_AND_ADD_8 */ unsupported, 439 /* SYNC_FETCH_AND_ADD_16 */ unsupported, 440 /* SYNC_FETCH_AND_SUB_1 */ unsupported, 441 /* SYNC_FETCH_AND_SUB_2 */ unsupported, 442 /* SYNC_FETCH_AND_SUB_4 */ unsupported, 443 /* SYNC_FETCH_AND_SUB_8 */ unsupported, 444 /* SYNC_FETCH_AND_SUB_16 */ unsupported, 445 /* SYNC_FETCH_AND_AND_1 */ unsupported, 446 /* SYNC_FETCH_AND_AND_2 */ unsupported, 447 /* SYNC_FETCH_AND_AND_4 */ unsupported, 448 /* SYNC_FETCH_AND_AND_8 */ unsupported, 449 /* SYNC_FETCH_AND_AND_16 */ unsupported, 450 /* SYNC_FETCH_AND_OR_1 */ unsupported, 451 /* SYNC_FETCH_AND_OR_2 */ unsupported, 452 /* SYNC_FETCH_AND_OR_4 */ unsupported, 453 /* SYNC_FETCH_AND_OR_8 */ unsupported, 454 /* SYNC_FETCH_AND_OR_16 */ unsupported, 455 /* SYNC_FETCH_AND_XOR_1 */ unsupported, 456 /* SYNC_FETCH_AND_XOR_2 */ unsupported, 457 /* SYNC_FETCH_AND_XOR_4 */ unsupported, 458 /* SYNC_FETCH_AND_XOR_8 */ unsupported, 459 /* SYNC_FETCH_AND_XOR_16 */ unsupported, 460 /* SYNC_FETCH_AND_NAND_1 */ unsupported, 461 /* SYNC_FETCH_AND_NAND_2 */ unsupported, 462 /* SYNC_FETCH_AND_NAND_4 */ unsupported, 463 /* SYNC_FETCH_AND_NAND_8 */ unsupported, 464 /* SYNC_FETCH_AND_NAND_16 */ unsupported, 465 /* SYNC_FETCH_AND_MAX_1 */ unsupported, 466 /* SYNC_FETCH_AND_MAX_2 */ unsupported, 467 /* SYNC_FETCH_AND_MAX_4 */ unsupported, 468 /* SYNC_FETCH_AND_MAX_8 */ unsupported, 469 /* SYNC_FETCH_AND_MAX_16 */ unsupported, 470 /* SYNC_FETCH_AND_UMAX_1 */ unsupported, 471 /* SYNC_FETCH_AND_UMAX_2 */ unsupported, 472 /* SYNC_FETCH_AND_UMAX_4 */ unsupported, 473 /* SYNC_FETCH_AND_UMAX_8 */ unsupported, 474 /* SYNC_FETCH_AND_UMAX_16 */ unsupported, 475 /* SYNC_FETCH_AND_MIN_1 */ unsupported, 476 /* SYNC_FETCH_AND_MIN_2 */ unsupported, 477 /* SYNC_FETCH_AND_MIN_4 */ unsupported, 478 /* SYNC_FETCH_AND_MIN_8 */ unsupported, 479 /* SYNC_FETCH_AND_MIN_16 */ unsupported, 480 /* SYNC_FETCH_AND_UMIN_1 */ unsupported, 481 /* SYNC_FETCH_AND_UMIN_2 */ unsupported, 482 /* SYNC_FETCH_AND_UMIN_4 */ unsupported, 483 /* SYNC_FETCH_AND_UMIN_8 */ unsupported, 484 /* SYNC_FETCH_AND_UMIN_16 */ unsupported, 485 486 // Atomic '__atomic_*' libcalls. 487 /* ATOMIC_LOAD */ unsupported, 488 /* ATOMIC_LOAD_1 */ unsupported, 489 /* ATOMIC_LOAD_2 */ unsupported, 490 /* ATOMIC_LOAD_4 */ unsupported, 491 /* ATOMIC_LOAD_8 */ unsupported, 492 /* ATOMIC_LOAD_16 */ unsupported, 493 494 /* ATOMIC_STORE */ unsupported, 495 /* ATOMIC_STORE_1 */ unsupported, 496 /* ATOMIC_STORE_2 */ unsupported, 497 /* ATOMIC_STORE_4 */ unsupported, 498 /* ATOMIC_STORE_8 */ unsupported, 499 /* ATOMIC_STORE_16 */ unsupported, 500 501 /* ATOMIC_EXCHANGE */ unsupported, 502 /* ATOMIC_EXCHANGE_1 */ unsupported, 503 /* ATOMIC_EXCHANGE_2 */ unsupported, 504 /* ATOMIC_EXCHANGE_4 */ unsupported, 505 /* ATOMIC_EXCHANGE_8 */ unsupported, 506 /* ATOMIC_EXCHANGE_16 */ unsupported, 507 508 /* ATOMIC_COMPARE_EXCHANGE */ unsupported, 509 /* ATOMIC_COMPARE_EXCHANGE_1 */ unsupported, 510 /* ATOMIC_COMPARE_EXCHANGE_2 */ unsupported, 511 /* ATOMIC_COMPARE_EXCHANGE_4 */ unsupported, 512 /* ATOMIC_COMPARE_EXCHANGE_8 */ unsupported, 513 /* ATOMIC_COMPARE_EXCHANGE_16 */ unsupported, 514 515 /* ATOMIC_FETCH_ADD_1 */ unsupported, 516 /* ATOMIC_FETCH_ADD_2 */ unsupported, 517 /* ATOMIC_FETCH_ADD_4 */ unsupported, 518 /* ATOMIC_FETCH_ADD_8 */ unsupported, 519 /* ATOMIC_FETCH_ADD_16 */ unsupported, 520 521 /* ATOMIC_FETCH_SUB_1 */ unsupported, 522 /* ATOMIC_FETCH_SUB_2 */ unsupported, 523 /* ATOMIC_FETCH_SUB_4 */ unsupported, 524 /* ATOMIC_FETCH_SUB_8 */ unsupported, 525 /* ATOMIC_FETCH_SUB_16 */ unsupported, 526 527 /* ATOMIC_FETCH_AND_1 */ unsupported, 528 /* ATOMIC_FETCH_AND_2 */ unsupported, 529 /* ATOMIC_FETCH_AND_4 */ unsupported, 530 /* ATOMIC_FETCH_AND_8 */ unsupported, 531 /* ATOMIC_FETCH_AND_16 */ unsupported, 532 533 /* ATOMIC_FETCH_OR_1 */ unsupported, 534 /* ATOMIC_FETCH_OR_2 */ unsupported, 535 /* ATOMIC_FETCH_OR_4 */ unsupported, 536 /* ATOMIC_FETCH_OR_8 */ unsupported, 537 /* ATOMIC_FETCH_OR_16 */ unsupported, 538 539 /* ATOMIC_FETCH_XOR_1 */ unsupported, 540 /* ATOMIC_FETCH_XOR_2 */ unsupported, 541 /* ATOMIC_FETCH_XOR_4 */ unsupported, 542 /* ATOMIC_FETCH_XOR_8 */ unsupported, 543 /* ATOMIC_FETCH_XOR_16 */ unsupported, 544 545 /* ATOMIC_FETCH_NAND_1 */ unsupported, 546 /* ATOMIC_FETCH_NAND_2 */ unsupported, 547 /* ATOMIC_FETCH_NAND_4 */ unsupported, 548 /* ATOMIC_FETCH_NAND_8 */ unsupported, 549 /* ATOMIC_FETCH_NAND_16 */ unsupported, 550 551 // Stack Protector Fail. 552 /* STACKPROTECTOR_CHECK_FAIL */ func, 553 554 // Deoptimization. 555 /* DEOPTIMIZE */ unsupported, 556 557 }; 558 559 static const char * 560 RuntimeLibcallNames[RTLIB::UNKNOWN_LIBCALL] = { 561 /* SHL_I16 */ "__ashlhi3", 562 /* SHL_I32 */ "__ashlsi3", 563 /* SHL_I64 */ "__ashldi3", 564 /* SHL_I128 */ "__ashlti3", 565 /* SRL_I16 */ "__lshrhi3", 566 /* SRL_I32 */ "__lshrsi3", 567 /* SRL_I64 */ "__lshrdi3", 568 /* SRL_I128 */ "__lshrti3", 569 /* SRA_I16 */ "__ashrhi3", 570 /* SRA_I32 */ "__ashrsi3", 571 /* SRA_I64 */ "__ashrdi3", 572 /* SRA_I128 */ "__ashrti3", 573 /* MUL_I8 */ "__mulqi3", 574 /* MUL_I16 */ "__mulhi3", 575 /* MUL_I32 */ "__mulsi3", 576 /* MUL_I64 */ "__muldi3", 577 /* MUL_I128 */ "__multi3", 578 /* MULO_I32 */ "__mulosi4", 579 /* MULO_I64 */ "__mulodi4", 580 /* MULO_I128 */ "__muloti4", 581 /* SDIV_I8 */ "__divqi3", 582 /* SDIV_I16 */ "__divhi3", 583 /* SDIV_I32 */ "__divsi3", 584 /* SDIV_I64 */ "__divdi3", 585 /* SDIV_I128 */ "__divti3", 586 /* UDIV_I8 */ "__udivqi3", 587 /* UDIV_I16 */ "__udivhi3", 588 /* UDIV_I32 */ "__udivsi3", 589 /* UDIV_I64 */ "__udivdi3", 590 /* UDIV_I128 */ "__udivti3", 591 /* SREM_I8 */ "__modqi3", 592 /* SREM_I16 */ "__modhi3", 593 /* SREM_I32 */ "__modsi3", 594 /* SREM_I64 */ "__moddi3", 595 /* SREM_I128 */ "__modti3", 596 /* UREM_I8 */ "__umodqi3", 597 /* UREM_I16 */ "__umodhi3", 598 /* UREM_I32 */ "__umodsi3", 599 /* UREM_I64 */ "__umoddi3", 600 /* UREM_I128 */ "__umodti3", 601 /* SDIVREM_I8 */ nullptr, 602 /* SDIVREM_I16 */ nullptr, 603 /* SDIVREM_I32 */ nullptr, 604 /* SDIVREM_I64 */ nullptr, 605 /* SDIVREM_I128 */ nullptr, 606 /* UDIVREM_I8 */ nullptr, 607 /* UDIVREM_I16 */ nullptr, 608 /* UDIVREM_I32 */ nullptr, 609 /* UDIVREM_I64 */ nullptr, 610 /* UDIVREM_I128 */ nullptr, 611 /* NEG_I32 */ "__negsi2", 612 /* NEG_I64 */ "__negdi2", 613 /* ADD_F32 */ "__addsf3", 614 /* ADD_F64 */ "__adddf3", 615 /* ADD_F80 */ nullptr, 616 /* ADD_F128 */ "__addtf3", 617 /* ADD_PPCF128 */ nullptr, 618 /* SUB_F32 */ "__subsf3", 619 /* SUB_F64 */ "__subdf3", 620 /* SUB_F80 */ nullptr, 621 /* SUB_F128 */ "__subtf3", 622 /* SUB_PPCF128 */ nullptr, 623 /* MUL_F32 */ "__mulsf3", 624 /* MUL_F64 */ "__muldf3", 625 /* MUL_F80 */ nullptr, 626 /* MUL_F128 */ "__multf3", 627 /* MUL_PPCF128 */ nullptr, 628 /* DIV_F32 */ "__divsf3", 629 /* DIV_F64 */ "__divdf3", 630 /* DIV_F80 */ nullptr, 631 /* DIV_F128 */ "__divtf3", 632 /* DIV_PPCF128 */ nullptr, 633 /* REM_F32 */ "fmodf", 634 /* REM_F64 */ "fmod", 635 /* REM_F80 */ nullptr, 636 /* REM_F128 */ "fmodl", 637 /* REM_PPCF128 */ nullptr, 638 /* FMA_F32 */ "fmaf", 639 /* FMA_F64 */ "fma", 640 /* FMA_F80 */ nullptr, 641 /* FMA_F128 */ "fmal", 642 /* FMA_PPCF128 */ nullptr, 643 /* POWI_F32 */ "__powisf2", 644 /* POWI_F64 */ "__powidf2", 645 /* POWI_F80 */ nullptr, 646 /* POWI_F128 */ "__powitf2", 647 /* POWI_PPCF128 */ nullptr, 648 /* SQRT_F32 */ "sqrtf", 649 /* SQRT_F64 */ "sqrt", 650 /* SQRT_F80 */ nullptr, 651 /* SQRT_F128 */ "sqrtl", 652 /* SQRT_PPCF128 */ nullptr, 653 /* LOG_F32 */ "logf", 654 /* LOG_F64 */ "log", 655 /* LOG_F80 */ nullptr, 656 /* LOG_F128 */ "logl", 657 /* LOG_PPCF128 */ nullptr, 658 /* LOG2_F32 */ "log2f", 659 /* LOG2_F64 */ "log2", 660 /* LOG2_F80 */ nullptr, 661 /* LOG2_F128 */ "log2l", 662 /* LOG2_PPCF128 */ nullptr, 663 /* LOG10_F32 */ "log10f", 664 /* LOG10_F64 */ "log10", 665 /* LOG10_F80 */ nullptr, 666 /* LOG10_F128 */ "log10l", 667 /* LOG10_PPCF128 */ nullptr, 668 /* EXP_F32 */ "expf", 669 /* EXP_F64 */ "exp", 670 /* EXP_F80 */ nullptr, 671 /* EXP_F128 */ "expl", 672 /* EXP_PPCF128 */ nullptr, 673 /* EXP2_F32 */ "exp2f", 674 /* EXP2_F64 */ "exp2", 675 /* EXP2_F80 */ nullptr, 676 /* EXP2_F128 */ "exp2l", 677 /* EXP2_PPCF128 */ nullptr, 678 /* SIN_F32 */ "sinf", 679 /* SIN_F64 */ "sin", 680 /* SIN_F80 */ nullptr, 681 /* SIN_F128 */ "sinl", 682 /* SIN_PPCF128 */ nullptr, 683 /* COS_F32 */ "cosf", 684 /* COS_F64 */ "cos", 685 /* COS_F80 */ nullptr, 686 /* COS_F128 */ "cosl", 687 /* COS_PPCF128 */ nullptr, 688 /* SINCOS_F32 */ "sincosf", 689 /* SINCOS_F64 */ "sincos", 690 /* SINCOS_F80 */ nullptr, 691 /* SINCOS_F128 */ "sincosl", 692 /* SINCOS_PPCF128 */ nullptr, 693 /* SINCOS_STRET_F32 */ nullptr, 694 /* SINCOS_STRET_F64 */ nullptr, 695 /* POW_F32 */ "powf", 696 /* POW_F64 */ "pow", 697 /* POW_F80 */ nullptr, 698 /* POW_F128 */ "powl", 699 /* POW_PPCF128 */ nullptr, 700 /* CEIL_F32 */ "ceilf", 701 /* CEIL_F64 */ "ceil", 702 /* CEIL_F80 */ nullptr, 703 /* CEIL_F128 */ "ceill", 704 /* CEIL_PPCF128 */ nullptr, 705 /* TRUNC_F32 */ "truncf", 706 /* TRUNC_F64 */ "trunc", 707 /* TRUNC_F80 */ nullptr, 708 /* TRUNC_F128 */ "truncl", 709 /* TRUNC_PPCF128 */ nullptr, 710 /* RINT_F32 */ "rintf", 711 /* RINT_F64 */ "rint", 712 /* RINT_F80 */ nullptr, 713 /* RINT_F128 */ "rintl", 714 /* RINT_PPCF128 */ nullptr, 715 /* NEARBYINT_F32 */ "nearbyintf", 716 /* NEARBYINT_F64 */ "nearbyint", 717 /* NEARBYINT_F80 */ nullptr, 718 /* NEARBYINT_F128 */ "nearbyintl", 719 /* NEARBYINT_PPCF128 */ nullptr, 720 /* ROUND_F32 */ "roundf", 721 /* ROUND_F64 */ "round", 722 /* ROUND_F80 */ nullptr, 723 /* ROUND_F128 */ "roundl", 724 /* ROUND_PPCF128 */ nullptr, 725 /* FLOOR_F32 */ "floorf", 726 /* FLOOR_F64 */ "floor", 727 /* FLOOR_F80 */ nullptr, 728 /* FLOOR_F128 */ "floorl", 729 /* FLOOR_PPCF128 */ nullptr, 730 /* COPYSIGN_F32 */ "copysignf", 731 /* COPYSIGN_F64 */ "copysign", 732 /* COPYSIGN_F80 */ nullptr, 733 /* COPYSIGN_F128 */ "copysignl", 734 /* COPYSIGN_PPCF128 */ nullptr, 735 /* FMIN_F32 */ "fminf", 736 /* FMIN_F64 */ "fmin", 737 /* FMIN_F80 */ nullptr, 738 /* FMIN_F128 */ "fminl", 739 /* FMIN_PPCF128 */ nullptr, 740 /* FMAX_F32 */ "fmaxf", 741 /* FMAX_F64 */ "fmax", 742 /* FMAX_F80 */ nullptr, 743 /* FMAX_F128 */ "fmaxl", 744 /* FMAX_PPCF128 */ nullptr, 745 /* FPEXT_F32_PPCF128 */ nullptr, 746 /* FPEXT_F64_PPCF128 */ nullptr, 747 /* FPEXT_F64_F128 */ "__extenddftf2", 748 /* FPEXT_F32_F128 */ "__extendsftf2", 749 /* FPEXT_F32_F64 */ "__extendsfdf2", 750 /* FPEXT_F16_F32 */ "__gnu_h2f_ieee", 751 /* FPROUND_F32_F16 */ "__gnu_f2h_ieee", 752 /* FPROUND_F64_F16 */ nullptr, 753 /* FPROUND_F80_F16 */ nullptr, 754 /* FPROUND_F128_F16 */ nullptr, 755 /* FPROUND_PPCF128_F16 */ nullptr, 756 /* FPROUND_F64_F32 */ "__truncdfsf2", 757 /* FPROUND_F80_F32 */ "__truncxfsf2", 758 /* FPROUND_F128_F32 */ "__trunctfsf2", 759 /* FPROUND_PPCF128_F32 */ nullptr, 760 /* FPROUND_F80_F64 */ "__truncxfdf2", 761 /* FPROUND_F128_F64 */ "__trunctfdf2", 762 /* FPROUND_PPCF128_F64 */ nullptr, 763 /* FPTOSINT_F32_I32 */ "__fixsfsi", 764 /* FPTOSINT_F32_I64 */ "__fixsfdi", 765 /* FPTOSINT_F32_I128 */ "__fixsfti", 766 /* FPTOSINT_F64_I32 */ "__fixdfsi", 767 /* FPTOSINT_F64_I64 */ "__fixdfdi", 768 /* FPTOSINT_F64_I128 */ "__fixdfti", 769 /* FPTOSINT_F80_I32 */ "__fixxfsi", 770 /* FPTOSINT_F80_I64 */ "__fixxfdi", 771 /* FPTOSINT_F80_I128 */ "__fixxfti", 772 /* FPTOSINT_F128_I32 */ "__fixtfsi", 773 /* FPTOSINT_F128_I64 */ "__fixtfdi", 774 /* FPTOSINT_F128_I128 */ "__fixtfti", 775 /* FPTOSINT_PPCF128_I32 */ nullptr, 776 /* FPTOSINT_PPCF128_I64 */ nullptr, 777 /* FPTOSINT_PPCF128_I128 */ nullptr, 778 /* FPTOUINT_F32_I32 */ "__fixunssfsi", 779 /* FPTOUINT_F32_I64 */ "__fixunssfdi", 780 /* FPTOUINT_F32_I128 */ "__fixunssfti", 781 /* FPTOUINT_F64_I32 */ "__fixunsdfsi", 782 /* FPTOUINT_F64_I64 */ "__fixunsdfdi", 783 /* FPTOUINT_F64_I128 */ "__fixunsdfti", 784 /* FPTOUINT_F80_I32 */ "__fixunsxfsi", 785 /* FPTOUINT_F80_I64 */ "__fixunsxfdi", 786 /* FPTOUINT_F80_I128 */ "__fixunsxfti", 787 /* FPTOUINT_F128_I32 */ "__fixunstfsi", 788 /* FPTOUINT_F128_I64 */ "__fixunstfdi", 789 /* FPTOUINT_F128_I128 */ "__fixunstfti", 790 /* FPTOUINT_PPCF128_I32 */ nullptr, 791 /* FPTOUINT_PPCF128_I64 */ nullptr, 792 /* FPTOUINT_PPCF128_I128 */ nullptr, 793 /* SINTTOFP_I32_F32 */ "__floatsisf", 794 /* SINTTOFP_I32_F64 */ "__floatsidf", 795 /* SINTTOFP_I32_F80 */ nullptr, 796 /* SINTTOFP_I32_F128 */ "__floatsitf", 797 /* SINTTOFP_I32_PPCF128 */ nullptr, 798 /* SINTTOFP_I64_F32 */ "__floatdisf", 799 /* SINTTOFP_I64_F64 */ "__floatdidf", 800 /* SINTTOFP_I64_F80 */ nullptr, 801 /* SINTTOFP_I64_F128 */ "__floatditf", 802 /* SINTTOFP_I64_PPCF128 */ nullptr, 803 /* SINTTOFP_I128_F32 */ "__floattisf", 804 /* SINTTOFP_I128_F64 */ "__floattidf", 805 /* SINTTOFP_I128_F80 */ nullptr, 806 /* SINTTOFP_I128_F128 */ "__floattitf", 807 /* SINTTOFP_I128_PPCF128 */ nullptr, 808 /* UINTTOFP_I32_F32 */ "__floatunsisf", 809 /* UINTTOFP_I32_F64 */ "__floatunsidf", 810 /* UINTTOFP_I32_F80 */ nullptr, 811 /* UINTTOFP_I32_F128 */ "__floatunsitf", 812 /* UINTTOFP_I32_PPCF128 */ nullptr, 813 /* UINTTOFP_I64_F32 */ "__floatundisf", 814 /* UINTTOFP_I64_F64 */ "__floatundidf", 815 /* UINTTOFP_I64_F80 */ nullptr, 816 /* UINTTOFP_I64_F128 */ "__floatunditf", 817 /* UINTTOFP_I64_PPCF128 */ nullptr, 818 /* UINTTOFP_I128_F32 */ "__floatuntisf", 819 /* UINTTOFP_I128_F64 */ "__floatuntidf", 820 /* UINTTOFP_I128_F80 */ nullptr, 821 /* UINTTOFP_I128_F128 */ "__floatuntitf", 822 /* UINTTOFP_I128_PPCF128 */ nullptr, 823 /* OEQ_F32 */ "__eqsf2", 824 /* OEQ_F64 */ "__eqdf2", 825 /* OEQ_F128 */ "__eqtf2", 826 /* OEQ_PPCF128 */ nullptr, 827 /* UNE_F32 */ "__nesf2", 828 /* UNE_F64 */ "__nedf2", 829 /* UNE_F128 */ "__netf2", 830 /* UNE_PPCF128 */ nullptr, 831 /* OGE_F32 */ "__gesf2", 832 /* OGE_F64 */ "__gedf2", 833 /* OGE_F128 */ "__getf2", 834 /* OGE_PPCF128 */ nullptr, 835 /* OLT_F32 */ "__ltsf2", 836 /* OLT_F64 */ "__ltdf2", 837 /* OLT_F128 */ "__lttf2", 838 /* OLT_PPCF128 */ nullptr, 839 /* OLE_F32 */ "__lesf2", 840 /* OLE_F64 */ "__ledf2", 841 /* OLE_F128 */ "__letf2", 842 /* OLE_PPCF128 */ nullptr, 843 /* OGT_F32 */ "__gtsf2", 844 /* OGT_F64 */ "__gtdf2", 845 /* OGT_F128 */ "__gttf2", 846 /* OGT_PPCF128 */ nullptr, 847 /* UO_F32 */ "__unordsf2", 848 /* UO_F64 */ "__unorddf2", 849 /* UO_F128 */ "__unordtf2", 850 /* UO_PPCF128 */ nullptr, 851 /* O_F32 */ "__unordsf2", 852 /* O_F64 */ "__unorddf2", 853 /* O_F128 */ "__unordtf2", 854 /* O_PPCF128 */ nullptr, 855 /* MEMCPY */ "memcpy", 856 /* MEMMOVE */ "memset", 857 /* MEMSET */ "memmove", 858 /* BZERO */ nullptr, 859 /* MEMCPY_ELEMENT_UNORDERED_ATOMIC_1 */ nullptr, 860 /* MEMCPY_ELEMENT_UNORDERED_ATOMIC_2 */ nullptr, 861 /* MEMCPY_ELEMENT_UNORDERED_ATOMIC_4 */ nullptr, 862 /* MEMCPY_ELEMENT_UNORDERED_ATOMIC_8 */ nullptr, 863 /* MEMCPY_ELEMENT_UNORDERED_ATOMIC_16 */ nullptr, 864 /* MEMMOVE_ELEMENT_UNORDERED_ATOMIC_1 */ nullptr, 865 /* MEMMOVE_ELEMENT_UNORDERED_ATOMIC_2 */ nullptr, 866 /* MEMMOVE_ELEMENT_UNORDERED_ATOMIC_4 */ nullptr, 867 /* MEMMOVE_ELEMENT_UNORDERED_ATOMIC_8 */ nullptr, 868 /* MEMMOVE_ELEMENT_UNORDERED_ATOMIC_16 */ nullptr, 869 /* MEMSET_ELEMENT_UNORDERED_ATOMIC_1 */ nullptr, 870 /* MEMSET_ELEMENT_UNORDERED_ATOMIC_2 */ nullptr, 871 /* MEMSET_ELEMENT_UNORDERED_ATOMIC_4 */ nullptr, 872 /* MEMSET_ELEMENT_UNORDERED_ATOMIC_8 */ nullptr, 873 /* MEMSET_ELEMENT_UNORDERED_ATOMIC_16 */ nullptr, 874 /* UNWIND_RESUME */ "_Unwind_Resume", 875 /* SYNC_VAL_COMPARE_AND_SWAP_1 */ "__sync_val_compare_and_swap_1", 876 /* SYNC_VAL_COMPARE_AND_SWAP_2 */ "__sync_val_compare_and_swap_2", 877 /* SYNC_VAL_COMPARE_AND_SWAP_4 */ "__sync_val_compare_and_swap_4", 878 /* SYNC_VAL_COMPARE_AND_SWAP_8 */ "__sync_val_compare_and_swap_8", 879 /* SYNC_VAL_COMPARE_AND_SWAP_16 */ "__sync_val_compare_and_swap_16", 880 /* SYNC_LOCK_TEST_AND_SET_1 */ "__sync_lock_test_and_set_1", 881 /* SYNC_LOCK_TEST_AND_SET_2 */ "__sync_lock_test_and_set_2", 882 /* SYNC_LOCK_TEST_AND_SET_4 */ "__sync_lock_test_and_set_4", 883 /* SYNC_LOCK_TEST_AND_SET_8 */ "__sync_lock_test_and_set_8", 884 /* SYNC_LOCK_TEST_AND_SET_16 */ "__sync_lock_test_and_set_16", 885 /* SYNC_FETCH_AND_ADD_1 */ "__sync_fetch_and_add_1", 886 /* SYNC_FETCH_AND_ADD_2 */ "__sync_fetch_and_add_2", 887 /* SYNC_FETCH_AND_ADD_4 */ "__sync_fetch_and_add_4", 888 /* SYNC_FETCH_AND_ADD_8 */ "__sync_fetch_and_add_8", 889 /* SYNC_FETCH_AND_ADD_16 */ "__sync_fetch_and_add_16", 890 /* SYNC_FETCH_AND_SUB_1 */ "__sync_fetch_and_sub_1", 891 /* SYNC_FETCH_AND_SUB_2 */ "__sync_fetch_and_sub_2", 892 /* SYNC_FETCH_AND_SUB_4 */ "__sync_fetch_and_sub_4", 893 /* SYNC_FETCH_AND_SUB_8 */ "__sync_fetch_and_sub_8", 894 /* SYNC_FETCH_AND_SUB_16 */ "__sync_fetch_and_sub_16", 895 /* SYNC_FETCH_AND_AND_1 */ "__sync_fetch_and_and_1", 896 /* SYNC_FETCH_AND_AND_2 */ "__sync_fetch_and_and_2", 897 /* SYNC_FETCH_AND_AND_4 */ "__sync_fetch_and_and_4", 898 /* SYNC_FETCH_AND_AND_8 */ "__sync_fetch_and_and_8", 899 /* SYNC_FETCH_AND_AND_16 */ "__sync_fetch_and_and_16", 900 /* SYNC_FETCH_AND_OR_1 */ "__sync_fetch_and_or_1", 901 /* SYNC_FETCH_AND_OR_2 */ "__sync_fetch_and_or_2", 902 /* SYNC_FETCH_AND_OR_4 */ "__sync_fetch_and_or_4", 903 /* SYNC_FETCH_AND_OR_8 */ "__sync_fetch_and_or_8", 904 /* SYNC_FETCH_AND_OR_16 */ "__sync_fetch_and_or_16", 905 /* SYNC_FETCH_AND_XOR_1 */ "__sync_fetch_and_xor_1", 906 /* SYNC_FETCH_AND_XOR_2 */ "__sync_fetch_and_xor_2", 907 /* SYNC_FETCH_AND_XOR_4 */ "__sync_fetch_and_xor_4", 908 /* SYNC_FETCH_AND_XOR_8 */ "__sync_fetch_and_xor_8", 909 /* SYNC_FETCH_AND_XOR_16 */ "__sync_fetch_and_xor_16", 910 /* SYNC_FETCH_AND_NAND_1 */ "__sync_fetch_and_nand_1", 911 /* SYNC_FETCH_AND_NAND_2 */ "__sync_fetch_and_nand_2", 912 /* SYNC_FETCH_AND_NAND_4 */ "__sync_fetch_and_nand_4", 913 /* SYNC_FETCH_AND_NAND_8 */ "__sync_fetch_and_nand_8", 914 /* SYNC_FETCH_AND_NAND_16 */ "__sync_fetch_and_nand_16", 915 /* SYNC_FETCH_AND_MAX_1 */ "__sync_fetch_and_max_1", 916 /* SYNC_FETCH_AND_MAX_2 */ "__sync_fetch_and_max_2", 917 /* SYNC_FETCH_AND_MAX_4 */ "__sync_fetch_and_max_4", 918 /* SYNC_FETCH_AND_MAX_8 */ "__sync_fetch_and_max_8", 919 /* SYNC_FETCH_AND_MAX_16 */ "__sync_fetch_and_max_16", 920 /* SYNC_FETCH_AND_UMAX_1 */ "__sync_fetch_and_umax_1", 921 /* SYNC_FETCH_AND_UMAX_2 */ "__sync_fetch_and_umax_2", 922 /* SYNC_FETCH_AND_UMAX_4 */ "__sync_fetch_and_umax_4", 923 /* SYNC_FETCH_AND_UMAX_8 */ "__sync_fetch_and_umax_8", 924 /* SYNC_FETCH_AND_UMAX_16 */ "__sync_fetch_and_umax_16", 925 /* SYNC_FETCH_AND_MIN_1 */ "__sync_fetch_and_min_1", 926 /* SYNC_FETCH_AND_MIN_2 */ "__sync_fetch_and_min_2", 927 /* SYNC_FETCH_AND_MIN_4 */ "__sync_fetch_and_min_4", 928 /* SYNC_FETCH_AND_MIN_8 */ "__sync_fetch_and_min_8", 929 /* SYNC_FETCH_AND_MIN_16 */ "__sync_fetch_and_min_16", 930 /* SYNC_FETCH_AND_UMIN_1 */ "__sync_fetch_and_umin_1", 931 /* SYNC_FETCH_AND_UMIN_2 */ "__sync_fetch_and_umin_2", 932 /* SYNC_FETCH_AND_UMIN_4 */ "__sync_fetch_and_umin_4", 933 /* SYNC_FETCH_AND_UMIN_8 */ "__sync_fetch_and_umin_8", 934 /* SYNC_FETCH_AND_UMIN_16 */ "__sync_fetch_and_umin_16", 935 936 /* ATOMIC_LOAD */ "__atomic_load", 937 /* ATOMIC_LOAD_1 */ "__atomic_load_1", 938 /* ATOMIC_LOAD_2 */ "__atomic_load_2", 939 /* ATOMIC_LOAD_4 */ "__atomic_load_4", 940 /* ATOMIC_LOAD_8 */ "__atomic_load_8", 941 /* ATOMIC_LOAD_16 */ "__atomic_load_16", 942 943 /* ATOMIC_STORE */ "__atomic_store", 944 /* ATOMIC_STORE_1 */ "__atomic_store_1", 945 /* ATOMIC_STORE_2 */ "__atomic_store_2", 946 /* ATOMIC_STORE_4 */ "__atomic_store_4", 947 /* ATOMIC_STORE_8 */ "__atomic_store_8", 948 /* ATOMIC_STORE_16 */ "__atomic_store_16", 949 950 /* ATOMIC_EXCHANGE */ "__atomic_exchange", 951 /* ATOMIC_EXCHANGE_1 */ "__atomic_exchange_1", 952 /* ATOMIC_EXCHANGE_2 */ "__atomic_exchange_2", 953 /* ATOMIC_EXCHANGE_4 */ "__atomic_exchange_4", 954 /* ATOMIC_EXCHANGE_8 */ "__atomic_exchange_8", 955 /* ATOMIC_EXCHANGE_16 */ "__atomic_exchange_16", 956 957 /* ATOMIC_COMPARE_EXCHANGE */ "__atomic_compare_exchange", 958 /* ATOMIC_COMPARE_EXCHANGE_1 */ "__atomic_compare_exchange_1", 959 /* ATOMIC_COMPARE_EXCHANGE_2 */ "__atomic_compare_exchange_2", 960 /* ATOMIC_COMPARE_EXCHANGE_4 */ "__atomic_compare_exchange_4", 961 /* ATOMIC_COMPARE_EXCHANGE_8 */ "__atomic_compare_exchange_8", 962 /* ATOMIC_COMPARE_EXCHANGE_16 */ "__atomic_compare_exchange_16", 963 964 /* ATOMIC_FETCH_ADD_1 */ "__atomic_fetch_add_1", 965 /* ATOMIC_FETCH_ADD_2 */ "__atomic_fetch_add_2", 966 /* ATOMIC_FETCH_ADD_4 */ "__atomic_fetch_add_4", 967 /* ATOMIC_FETCH_ADD_8 */ "__atomic_fetch_add_8", 968 /* ATOMIC_FETCH_ADD_16 */ "__atomic_fetch_add_16", 969 /* ATOMIC_FETCH_SUB_1 */ "__atomic_fetch_sub_1", 970 /* ATOMIC_FETCH_SUB_2 */ "__atomic_fetch_sub_2", 971 /* ATOMIC_FETCH_SUB_4 */ "__atomic_fetch_sub_4", 972 /* ATOMIC_FETCH_SUB_8 */ "__atomic_fetch_sub_8", 973 /* ATOMIC_FETCH_SUB_16 */ "__atomic_fetch_sub_16", 974 /* ATOMIC_FETCH_AND_1 */ "__atomic_fetch_and_1", 975 /* ATOMIC_FETCH_AND_2 */ "__atomic_fetch_and_2", 976 /* ATOMIC_FETCH_AND_4 */ "__atomic_fetch_and_4", 977 /* ATOMIC_FETCH_AND_8 */ "__atomic_fetch_and_8", 978 /* ATOMIC_FETCH_AND_16 */ "__atomic_fetch_and_16", 979 /* ATOMIC_FETCH_OR_1 */ "__atomic_fetch_or_1", 980 /* ATOMIC_FETCH_OR_2 */ "__atomic_fetch_or_2", 981 /* ATOMIC_FETCH_OR_4 */ "__atomic_fetch_or_4", 982 /* ATOMIC_FETCH_OR_8 */ "__atomic_fetch_or_8", 983 /* ATOMIC_FETCH_OR_16 */ "__atomic_fetch_or_16", 984 /* ATOMIC_FETCH_XOR_1 */ "__atomic_fetch_xor_1", 985 /* ATOMIC_FETCH_XOR_2 */ "__atomic_fetch_xor_2", 986 /* ATOMIC_FETCH_XOR_4 */ "__atomic_fetch_xor_4", 987 /* ATOMIC_FETCH_XOR_8 */ "__atomic_fetch_xor_8", 988 /* ATOMIC_FETCH_XOR_16 */ "__atomic_fetch_xor_16", 989 /* ATOMIC_FETCH_NAND_1 */ "__atomic_fetch_nand_1", 990 /* ATOMIC_FETCH_NAND_2 */ "__atomic_fetch_nand_2", 991 /* ATOMIC_FETCH_NAND_4 */ "__atomic_fetch_nand_4", 992 /* ATOMIC_FETCH_NAND_8 */ "__atomic_fetch_nand_8", 993 /* ATOMIC_FETCH_NAND_16 */ "__atomic_fetch_nand_16", 994 995 /* STACKPROTECTOR_CHECK_FAIL */ "__stack_chk_fail", 996 997 /* DEOPTIMIZE */ "__llvm_deoptimize", 998 }; 999 1000 void llvm::GetSignature(const WebAssemblySubtarget &Subtarget, 1001 RTLIB::Libcall LC, SmallVectorImpl<wasm::ValType> &Rets, 1002 SmallVectorImpl<wasm::ValType> &Params) { 1003 assert(Rets.empty()); 1004 assert(Params.empty()); 1005 1006 WebAssembly::ExprType iPTR = Subtarget.hasAddr64() ? 1007 WebAssembly::ExprType::I64 : 1008 WebAssembly::ExprType::I32; 1009 1010 switch (RuntimeLibcallSignatures[LC]) { 1011 case func: 1012 break; 1013 case f32_func_f32: 1014 Rets.push_back(wasm::ValType::F32); 1015 Params.push_back(wasm::ValType::F32); 1016 break; 1017 case f32_func_f64: 1018 Rets.push_back(wasm::ValType::F32); 1019 Params.push_back(wasm::ValType::F64); 1020 break; 1021 case f32_func_i32: 1022 Rets.push_back(wasm::ValType::F32); 1023 Params.push_back(wasm::ValType::I32); 1024 break; 1025 case f32_func_i64: 1026 Rets.push_back(wasm::ValType::F32); 1027 Params.push_back(wasm::ValType::I64); 1028 break; 1029 case f32_func_i16: 1030 Rets.push_back(wasm::ValType::F32); 1031 Params.push_back(wasm::ValType::I32); 1032 break; 1033 case f64_func_f32: 1034 Rets.push_back(wasm::ValType::F64); 1035 Params.push_back(wasm::ValType::F32); 1036 break; 1037 case f64_func_f64: 1038 Rets.push_back(wasm::ValType::F64); 1039 Params.push_back(wasm::ValType::F64); 1040 break; 1041 case f64_func_i32: 1042 Rets.push_back(wasm::ValType::F64); 1043 Params.push_back(wasm::ValType::I32); 1044 break; 1045 case f64_func_i64: 1046 Rets.push_back(wasm::ValType::F64); 1047 Params.push_back(wasm::ValType::I64); 1048 break; 1049 case i32_func_f32: 1050 Rets.push_back(wasm::ValType::I32); 1051 Params.push_back(wasm::ValType::F32); 1052 break; 1053 case i32_func_f64: 1054 Rets.push_back(wasm::ValType::I32); 1055 Params.push_back(wasm::ValType::F64); 1056 break; 1057 case i32_func_i32: 1058 Rets.push_back(wasm::ValType::I32); 1059 Params.push_back(wasm::ValType::I32); 1060 break; 1061 case i64_func_f32: 1062 Rets.push_back(wasm::ValType::I64); 1063 Params.push_back(wasm::ValType::F32); 1064 break; 1065 case i64_func_f64: 1066 Rets.push_back(wasm::ValType::I64); 1067 Params.push_back(wasm::ValType::F64); 1068 break; 1069 case i64_func_i64: 1070 Rets.push_back(wasm::ValType::I64); 1071 Params.push_back(wasm::ValType::I64); 1072 break; 1073 case f32_func_f32_f32: 1074 Rets.push_back(wasm::ValType::F32); 1075 Params.push_back(wasm::ValType::F32); 1076 Params.push_back(wasm::ValType::F32); 1077 break; 1078 case f32_func_f32_i32: 1079 Rets.push_back(wasm::ValType::F32); 1080 Params.push_back(wasm::ValType::F32); 1081 Params.push_back(wasm::ValType::I32); 1082 break; 1083 case f32_func_i64_i64: 1084 Rets.push_back(wasm::ValType::F32); 1085 Params.push_back(wasm::ValType::I64); 1086 Params.push_back(wasm::ValType::I64); 1087 break; 1088 case f64_func_f64_f64: 1089 Rets.push_back(wasm::ValType::F64); 1090 Params.push_back(wasm::ValType::F64); 1091 Params.push_back(wasm::ValType::F64); 1092 break; 1093 case f64_func_f64_i32: 1094 Rets.push_back(wasm::ValType::F64); 1095 Params.push_back(wasm::ValType::F64); 1096 Params.push_back(wasm::ValType::I32); 1097 break; 1098 case f64_func_i64_i64: 1099 Rets.push_back(wasm::ValType::F64); 1100 Params.push_back(wasm::ValType::I64); 1101 Params.push_back(wasm::ValType::I64); 1102 break; 1103 case i16_func_f32: 1104 Rets.push_back(wasm::ValType::I32); 1105 Params.push_back(wasm::ValType::F32); 1106 break; 1107 case i8_func_i8_i8: 1108 Rets.push_back(wasm::ValType::I32); 1109 Params.push_back(wasm::ValType::I32); 1110 Params.push_back(wasm::ValType::I32); 1111 break; 1112 case func_f32_iPTR_iPTR: 1113 Params.push_back(wasm::ValType::F32); 1114 Params.push_back(wasm::ValType(iPTR)); 1115 Params.push_back(wasm::ValType(iPTR)); 1116 break; 1117 case func_f64_iPTR_iPTR: 1118 Params.push_back(wasm::ValType::F64); 1119 Params.push_back(wasm::ValType(iPTR)); 1120 Params.push_back(wasm::ValType(iPTR)); 1121 break; 1122 case i16_func_i16_i16: 1123 Rets.push_back(wasm::ValType::I32); 1124 Params.push_back(wasm::ValType::I32); 1125 Params.push_back(wasm::ValType::I32); 1126 break; 1127 case i32_func_f32_f32: 1128 Rets.push_back(wasm::ValType::I32); 1129 Params.push_back(wasm::ValType::F32); 1130 Params.push_back(wasm::ValType::F32); 1131 break; 1132 case i32_func_f64_f64: 1133 Rets.push_back(wasm::ValType::I32); 1134 Params.push_back(wasm::ValType::F64); 1135 Params.push_back(wasm::ValType::F64); 1136 break; 1137 case i32_func_i32_i32: 1138 Rets.push_back(wasm::ValType::I32); 1139 Params.push_back(wasm::ValType::I32); 1140 Params.push_back(wasm::ValType::I32); 1141 break; 1142 case i64_func_i64_i64: 1143 Rets.push_back(wasm::ValType::I64); 1144 Params.push_back(wasm::ValType::I64); 1145 Params.push_back(wasm::ValType::I64); 1146 break; 1147 case i64_i64_func_f32: 1148 #if 0 // TODO: Enable this when wasm gets multiple-return-value support. 1149 Rets.push_back(wasm::ValType::I64); 1150 Rets.push_back(wasm::ValType::I64); 1151 #else 1152 Params.push_back(wasm::ValType(iPTR)); 1153 #endif 1154 Params.push_back(wasm::ValType::F32); 1155 break; 1156 case i64_i64_func_f64: 1157 #if 0 // TODO: Enable this when wasm gets multiple-return-value support. 1158 Rets.push_back(wasm::ValType::I64); 1159 Rets.push_back(wasm::ValType::I64); 1160 #else 1161 Params.push_back(wasm::ValType(iPTR)); 1162 #endif 1163 Params.push_back(wasm::ValType::F64); 1164 break; 1165 case i16_i16_func_i16_i16: 1166 #if 0 // TODO: Enable this when wasm gets multiple-return-value support. 1167 Rets.push_back(wasm::ValType::I32); 1168 Rets.push_back(wasm::ValType::I32); 1169 #else 1170 Params.push_back(wasm::ValType(iPTR)); 1171 #endif 1172 Params.push_back(wasm::ValType::I32); 1173 Params.push_back(wasm::ValType::I32); 1174 break; 1175 case i32_i32_func_i32_i32: 1176 #if 0 // TODO: Enable this when wasm gets multiple-return-value support. 1177 Rets.push_back(wasm::ValType::I32); 1178 Rets.push_back(wasm::ValType::I32); 1179 #else 1180 Params.push_back(wasm::ValType(iPTR)); 1181 #endif 1182 Params.push_back(wasm::ValType::I32); 1183 Params.push_back(wasm::ValType::I32); 1184 break; 1185 case i64_i64_func_i64_i64: 1186 #if 0 // TODO: Enable this when wasm gets multiple-return-value support. 1187 Rets.push_back(wasm::ValType::I64); 1188 Rets.push_back(wasm::ValType::I64); 1189 #else 1190 Params.push_back(wasm::ValType(iPTR)); 1191 #endif 1192 Params.push_back(wasm::ValType::I64); 1193 Params.push_back(wasm::ValType::I64); 1194 break; 1195 case i64_i64_func_i64_i64_i64_i64: 1196 #if 0 // TODO: Enable this when wasm gets multiple-return-value support. 1197 Rets.push_back(wasm::ValType::I64); 1198 Rets.push_back(wasm::ValType::I64); 1199 #else 1200 Params.push_back(wasm::ValType(iPTR)); 1201 #endif 1202 Params.push_back(wasm::ValType::I64); 1203 Params.push_back(wasm::ValType::I64); 1204 Params.push_back(wasm::ValType::I64); 1205 Params.push_back(wasm::ValType::I64); 1206 break; 1207 case i64_i64_i64_i64_func_i64_i64_i64_i64: 1208 #if 0 // TODO: Enable this when wasm gets multiple-return-value support. 1209 Rets.push_back(wasm::ValType::I64); 1210 Rets.push_back(wasm::ValType::I64); 1211 Rets.push_back(wasm::ValType::I64); 1212 Rets.push_back(wasm::ValType::I64); 1213 #else 1214 Params.push_back(wasm::ValType(iPTR)); 1215 #endif 1216 Params.push_back(wasm::ValType::I64); 1217 Params.push_back(wasm::ValType::I64); 1218 Params.push_back(wasm::ValType::I64); 1219 Params.push_back(wasm::ValType::I64); 1220 break; 1221 case i64_i64_func_i64_i64_i32: 1222 #if 0 // TODO: Enable this when wasm gets multiple-return-value support. 1223 Rets.push_back(wasm::ValType::I64); 1224 Rets.push_back(wasm::ValType::I64); 1225 Rets.push_back(wasm::ValType::I64); 1226 Rets.push_back(wasm::ValType::I64); 1227 #else 1228 Params.push_back(wasm::ValType(iPTR)); 1229 #endif 1230 Params.push_back(wasm::ValType::I64); 1231 Params.push_back(wasm::ValType::I64); 1232 Params.push_back(wasm::ValType::I32); 1233 break; 1234 case iPTR_func_iPTR_i32_iPTR: 1235 Rets.push_back(wasm::ValType(iPTR)); 1236 Params.push_back(wasm::ValType(iPTR)); 1237 Params.push_back(wasm::ValType::I32); 1238 Params.push_back(wasm::ValType(iPTR)); 1239 break; 1240 case iPTR_func_iPTR_iPTR_iPTR: 1241 Rets.push_back(wasm::ValType(iPTR)); 1242 Params.push_back(wasm::ValType(iPTR)); 1243 Params.push_back(wasm::ValType(iPTR)); 1244 Params.push_back(wasm::ValType(iPTR)); 1245 break; 1246 case f32_func_f32_f32_f32: 1247 Rets.push_back(wasm::ValType::F32); 1248 Params.push_back(wasm::ValType::F32); 1249 Params.push_back(wasm::ValType::F32); 1250 Params.push_back(wasm::ValType::F32); 1251 break; 1252 case f64_func_f64_f64_f64: 1253 Rets.push_back(wasm::ValType::F64); 1254 Params.push_back(wasm::ValType::F64); 1255 Params.push_back(wasm::ValType::F64); 1256 Params.push_back(wasm::ValType::F64); 1257 break; 1258 case func_i64_i64_iPTR_iPTR: 1259 Params.push_back(wasm::ValType::I64); 1260 Params.push_back(wasm::ValType::I64); 1261 Params.push_back(wasm::ValType(iPTR)); 1262 Params.push_back(wasm::ValType(iPTR)); 1263 break; 1264 case func_iPTR_f32: 1265 Params.push_back(wasm::ValType(iPTR)); 1266 Params.push_back(wasm::ValType::F32); 1267 break; 1268 case func_iPTR_f64: 1269 Params.push_back(wasm::ValType(iPTR)); 1270 Params.push_back(wasm::ValType::F64); 1271 break; 1272 case func_iPTR_i32: 1273 Params.push_back(wasm::ValType(iPTR)); 1274 Params.push_back(wasm::ValType::I32); 1275 break; 1276 case func_iPTR_i64: 1277 Params.push_back(wasm::ValType(iPTR)); 1278 Params.push_back(wasm::ValType::I64); 1279 break; 1280 case func_iPTR_i64_i64: 1281 Params.push_back(wasm::ValType(iPTR)); 1282 Params.push_back(wasm::ValType::I64); 1283 Params.push_back(wasm::ValType::I64); 1284 break; 1285 case func_iPTR_i64_i64_i64_i64: 1286 Params.push_back(wasm::ValType(iPTR)); 1287 Params.push_back(wasm::ValType::I64); 1288 Params.push_back(wasm::ValType::I64); 1289 Params.push_back(wasm::ValType::I64); 1290 Params.push_back(wasm::ValType::I64); 1291 break; 1292 case func_iPTR_i64_i64_i64_i64_i64_i64: 1293 Params.push_back(wasm::ValType(iPTR)); 1294 Params.push_back(wasm::ValType::I64); 1295 Params.push_back(wasm::ValType::I64); 1296 Params.push_back(wasm::ValType::I64); 1297 Params.push_back(wasm::ValType::I64); 1298 Params.push_back(wasm::ValType::I64); 1299 Params.push_back(wasm::ValType::I64); 1300 break; 1301 case i32_func_i64_i64: 1302 Rets.push_back(wasm::ValType::I32); 1303 Params.push_back(wasm::ValType::I64); 1304 Params.push_back(wasm::ValType::I64); 1305 break; 1306 case i32_func_i64_i64_i64_i64: 1307 Rets.push_back(wasm::ValType::I32); 1308 Params.push_back(wasm::ValType::I64); 1309 Params.push_back(wasm::ValType::I64); 1310 Params.push_back(wasm::ValType::I64); 1311 Params.push_back(wasm::ValType::I64); 1312 break; 1313 case unsupported: 1314 llvm_unreachable("unsupported runtime library signature"); 1315 } 1316 } 1317 1318 void llvm::GetSignature(const WebAssemblySubtarget &Subtarget, const char *Name, 1319 SmallVectorImpl<wasm::ValType> &Rets, 1320 SmallVectorImpl<wasm::ValType> &Params) { 1321 assert(strcmp(RuntimeLibcallNames[RTLIB::DEOPTIMIZE], "__llvm_deoptimize") == 1322 0); 1323 1324 for (size_t i = 0, e = RTLIB::UNKNOWN_LIBCALL; i < e; ++i) 1325 if (RuntimeLibcallNames[i] && strcmp(RuntimeLibcallNames[i], Name) == 0) 1326 return GetSignature(Subtarget, RTLIB::Libcall(i), Rets, Params); 1327 1328 llvm_unreachable("unexpected runtime library name"); 1329 } 1330