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