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