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