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