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