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