17a7e6055SDimitry Andric // CodeGen/RuntimeLibcallSignatures.cpp - R.T. Lib. Call Signatures -*- C++ -*--
27a7e6055SDimitry Andric //
37a7e6055SDimitry Andric // The LLVM Compiler Infrastructure
47a7e6055SDimitry Andric //
57a7e6055SDimitry Andric // This file is distributed under the University of Illinois Open Source
67a7e6055SDimitry Andric // License. See LICENSE.TXT for details.
77a7e6055SDimitry Andric //
87a7e6055SDimitry Andric //===----------------------------------------------------------------------===//
97a7e6055SDimitry Andric ///
107a7e6055SDimitry Andric /// \file
114ba319b5SDimitry Andric /// This file contains signature information for runtime libcalls.
127a7e6055SDimitry Andric ///
137a7e6055SDimitry Andric /// CodeGen uses external symbols, which it refers to by name. The WebAssembly
147a7e6055SDimitry Andric /// target needs type information for all functions. This file contains a big
157a7e6055SDimitry Andric /// table providing type signatures for all runtime library functions that LLVM
167a7e6055SDimitry Andric /// uses.
177a7e6055SDimitry Andric ///
187a7e6055SDimitry Andric /// This is currently a fairly heavy-handed solution.
197a7e6055SDimitry Andric ///
207a7e6055SDimitry Andric //===----------------------------------------------------------------------===//
217a7e6055SDimitry Andric
227a7e6055SDimitry Andric #include "WebAssemblyRuntimeLibcallSignatures.h"
237a7e6055SDimitry Andric #include "WebAssemblySubtarget.h"
247a7e6055SDimitry Andric #include "llvm/CodeGen/RuntimeLibcalls.h"
254ba319b5SDimitry Andric #include "llvm/Support/ManagedStatic.h"
267a7e6055SDimitry Andric
277a7e6055SDimitry Andric using namespace llvm;
287a7e6055SDimitry Andric
297a7e6055SDimitry Andric namespace {
307a7e6055SDimitry Andric
317a7e6055SDimitry Andric enum RuntimeLibcallSignature {
327a7e6055SDimitry Andric func,
337a7e6055SDimitry Andric f32_func_f32,
347a7e6055SDimitry Andric f32_func_f64,
357a7e6055SDimitry Andric f32_func_i32,
367a7e6055SDimitry Andric f32_func_i64,
377a7e6055SDimitry Andric f32_func_i16,
387a7e6055SDimitry Andric f64_func_f32,
397a7e6055SDimitry Andric f64_func_f64,
407a7e6055SDimitry Andric f64_func_i32,
417a7e6055SDimitry Andric f64_func_i64,
427a7e6055SDimitry Andric i32_func_f32,
437a7e6055SDimitry Andric i32_func_f64,
447a7e6055SDimitry Andric i32_func_i32,
457a7e6055SDimitry Andric i64_func_f32,
467a7e6055SDimitry Andric i64_func_f64,
477a7e6055SDimitry Andric i64_func_i64,
487a7e6055SDimitry Andric f32_func_f32_f32,
497a7e6055SDimitry Andric f32_func_f32_i32,
507a7e6055SDimitry Andric f32_func_i64_i64,
517a7e6055SDimitry Andric f64_func_f64_f64,
527a7e6055SDimitry Andric f64_func_f64_i32,
537a7e6055SDimitry Andric f64_func_i64_i64,
547a7e6055SDimitry Andric i16_func_f32,
557a7e6055SDimitry Andric i8_func_i8_i8,
567a7e6055SDimitry Andric func_f32_iPTR_iPTR,
577a7e6055SDimitry Andric func_f64_iPTR_iPTR,
587a7e6055SDimitry Andric i16_func_i16_i16,
597a7e6055SDimitry Andric i32_func_f32_f32,
607a7e6055SDimitry Andric i32_func_f64_f64,
617a7e6055SDimitry Andric i32_func_i32_i32,
624ba319b5SDimitry Andric i32_func_i32_i32_iPTR,
637a7e6055SDimitry Andric i64_func_i64_i64,
644ba319b5SDimitry Andric i64_func_i64_i64_iPTR,
657a7e6055SDimitry Andric i64_i64_func_f32,
667a7e6055SDimitry Andric i64_i64_func_f64,
677a7e6055SDimitry Andric i16_i16_func_i16_i16,
687a7e6055SDimitry Andric i32_i32_func_i32_i32,
697a7e6055SDimitry Andric i64_i64_func_i64_i64,
707a7e6055SDimitry Andric i64_i64_func_i64_i64_i64_i64,
714ba319b5SDimitry Andric i64_i64_func_i64_i64_i64_i64_iPTR,
727a7e6055SDimitry Andric i64_i64_i64_i64_func_i64_i64_i64_i64,
737a7e6055SDimitry Andric i64_i64_func_i64_i64_i32,
747a7e6055SDimitry Andric iPTR_func_iPTR_i32_iPTR,
757a7e6055SDimitry Andric iPTR_func_iPTR_iPTR_iPTR,
767a7e6055SDimitry Andric f32_func_f32_f32_f32,
777a7e6055SDimitry Andric f64_func_f64_f64_f64,
787a7e6055SDimitry Andric func_i64_i64_iPTR_iPTR,
797a7e6055SDimitry Andric func_iPTR_f32,
807a7e6055SDimitry Andric func_iPTR_f64,
817a7e6055SDimitry Andric func_iPTR_i32,
827a7e6055SDimitry Andric func_iPTR_i64,
837a7e6055SDimitry Andric func_iPTR_i64_i64,
847a7e6055SDimitry Andric func_iPTR_i64_i64_i64_i64,
857a7e6055SDimitry Andric func_iPTR_i64_i64_i64_i64_i64_i64,
867a7e6055SDimitry Andric i32_func_i64_i64,
877a7e6055SDimitry Andric i32_func_i64_i64_i64_i64,
887a7e6055SDimitry Andric unsupported
897a7e6055SDimitry Andric };
907a7e6055SDimitry Andric
914ba319b5SDimitry Andric struct RuntimeLibcallSignatureTable {
924ba319b5SDimitry Andric std::vector<RuntimeLibcallSignature> Table;
934ba319b5SDimitry Andric
944ba319b5SDimitry Andric // Any newly-added libcalls will be unsupported by default.
RuntimeLibcallSignatureTable__anonc9fad5920111::RuntimeLibcallSignatureTable954ba319b5SDimitry Andric RuntimeLibcallSignatureTable() : Table(RTLIB::UNKNOWN_LIBCALL, unsupported) {
967a7e6055SDimitry Andric // Integer
974ba319b5SDimitry Andric Table[RTLIB::SHL_I16] = i16_func_i16_i16;
984ba319b5SDimitry Andric Table[RTLIB::SHL_I32] = i32_func_i32_i32;
994ba319b5SDimitry Andric Table[RTLIB::SHL_I64] = i64_func_i64_i64;
1004ba319b5SDimitry Andric Table[RTLIB::SHL_I128] = i64_i64_func_i64_i64_i32;
1014ba319b5SDimitry Andric Table[RTLIB::SRL_I16] = i16_func_i16_i16;
1024ba319b5SDimitry Andric Table[RTLIB::SRL_I32] = i32_func_i32_i32;
1034ba319b5SDimitry Andric Table[RTLIB::SRL_I64] = i64_func_i64_i64;
1044ba319b5SDimitry Andric Table[RTLIB::SRL_I128] = i64_i64_func_i64_i64_i32;
1054ba319b5SDimitry Andric Table[RTLIB::SRA_I16] = i16_func_i16_i16;
1064ba319b5SDimitry Andric Table[RTLIB::SRA_I32] = i32_func_i32_i32;
1074ba319b5SDimitry Andric Table[RTLIB::SRA_I64] = i64_func_i64_i64;
1084ba319b5SDimitry Andric Table[RTLIB::SRA_I128] = i64_i64_func_i64_i64_i32;
1094ba319b5SDimitry Andric Table[RTLIB::MUL_I8] = i8_func_i8_i8;
1104ba319b5SDimitry Andric Table[RTLIB::MUL_I16] = i16_func_i16_i16;
1114ba319b5SDimitry Andric Table[RTLIB::MUL_I32] = i32_func_i32_i32;
1124ba319b5SDimitry Andric Table[RTLIB::MUL_I64] = i64_func_i64_i64;
1134ba319b5SDimitry Andric Table[RTLIB::MUL_I128] = i64_i64_func_i64_i64_i64_i64;
1144ba319b5SDimitry Andric Table[RTLIB::MULO_I32] = i32_func_i32_i32_iPTR;
1154ba319b5SDimitry Andric Table[RTLIB::MULO_I64] = i64_func_i64_i64_iPTR;
1164ba319b5SDimitry Andric Table[RTLIB::MULO_I128] = i64_i64_func_i64_i64_i64_i64_iPTR;
1174ba319b5SDimitry Andric Table[RTLIB::SDIV_I8] = i8_func_i8_i8;
1184ba319b5SDimitry Andric Table[RTLIB::SDIV_I16] = i16_func_i16_i16;
1194ba319b5SDimitry Andric Table[RTLIB::SDIV_I32] = i32_func_i32_i32;
1204ba319b5SDimitry Andric Table[RTLIB::SDIV_I64] = i64_func_i64_i64;
1214ba319b5SDimitry Andric Table[RTLIB::SDIV_I128] = i64_i64_func_i64_i64_i64_i64;
1224ba319b5SDimitry Andric Table[RTLIB::UDIV_I8] = i8_func_i8_i8;
1234ba319b5SDimitry Andric Table[RTLIB::UDIV_I16] = i16_func_i16_i16;
1244ba319b5SDimitry Andric Table[RTLIB::UDIV_I32] = i32_func_i32_i32;
1254ba319b5SDimitry Andric Table[RTLIB::UDIV_I64] = i64_func_i64_i64;
1264ba319b5SDimitry Andric Table[RTLIB::UDIV_I128] = i64_i64_func_i64_i64_i64_i64;
1274ba319b5SDimitry Andric Table[RTLIB::SREM_I8] = i8_func_i8_i8;
1284ba319b5SDimitry Andric Table[RTLIB::SREM_I16] = i16_func_i16_i16;
1294ba319b5SDimitry Andric Table[RTLIB::SREM_I32] = i32_func_i32_i32;
1304ba319b5SDimitry Andric Table[RTLIB::SREM_I64] = i64_func_i64_i64;
1314ba319b5SDimitry Andric Table[RTLIB::SREM_I128] = i64_i64_func_i64_i64_i64_i64;
1324ba319b5SDimitry Andric Table[RTLIB::UREM_I8] = i8_func_i8_i8;
1334ba319b5SDimitry Andric Table[RTLIB::UREM_I16] = i16_func_i16_i16;
1344ba319b5SDimitry Andric Table[RTLIB::UREM_I32] = i32_func_i32_i32;
1354ba319b5SDimitry Andric Table[RTLIB::UREM_I64] = i64_func_i64_i64;
1364ba319b5SDimitry Andric Table[RTLIB::UREM_I128] = i64_i64_func_i64_i64_i64_i64;
1374ba319b5SDimitry Andric Table[RTLIB::SDIVREM_I8] = i8_func_i8_i8;
1384ba319b5SDimitry Andric Table[RTLIB::SDIVREM_I16] = i16_i16_func_i16_i16;
1394ba319b5SDimitry Andric Table[RTLIB::SDIVREM_I32] = i32_i32_func_i32_i32;
1404ba319b5SDimitry Andric Table[RTLIB::SDIVREM_I64] = i64_func_i64_i64;
1414ba319b5SDimitry Andric Table[RTLIB::SDIVREM_I128] = i64_i64_i64_i64_func_i64_i64_i64_i64;
1424ba319b5SDimitry Andric Table[RTLIB::UDIVREM_I8] = i8_func_i8_i8;
1434ba319b5SDimitry Andric Table[RTLIB::UDIVREM_I16] = i16_i16_func_i16_i16;
1444ba319b5SDimitry Andric Table[RTLIB::UDIVREM_I32] = i32_i32_func_i32_i32;
1454ba319b5SDimitry Andric Table[RTLIB::UDIVREM_I64] = i64_i64_func_i64_i64;
1464ba319b5SDimitry Andric Table[RTLIB::UDIVREM_I128] = i64_i64_i64_i64_func_i64_i64_i64_i64;
1474ba319b5SDimitry Andric Table[RTLIB::NEG_I32] = i32_func_i32;
1484ba319b5SDimitry Andric Table[RTLIB::NEG_I64] = i64_func_i64;
1497a7e6055SDimitry Andric
1504ba319b5SDimitry Andric // Floating-point.
1514ba319b5SDimitry Andric // All F80 and PPCF128 routines are unsupported.
1524ba319b5SDimitry Andric Table[RTLIB::ADD_F32] = f32_func_f32_f32;
1534ba319b5SDimitry Andric Table[RTLIB::ADD_F64] = f64_func_f64_f64;
1544ba319b5SDimitry Andric Table[RTLIB::ADD_F128] = func_iPTR_i64_i64_i64_i64;
1554ba319b5SDimitry Andric Table[RTLIB::SUB_F32] = f32_func_f32_f32;
1564ba319b5SDimitry Andric Table[RTLIB::SUB_F64] = f64_func_f64_f64;
1574ba319b5SDimitry Andric Table[RTLIB::SUB_F128] = func_iPTR_i64_i64_i64_i64;
1584ba319b5SDimitry Andric Table[RTLIB::MUL_F32] = f32_func_f32_f32;
1594ba319b5SDimitry Andric Table[RTLIB::MUL_F64] = f64_func_f64_f64;
1604ba319b5SDimitry Andric Table[RTLIB::MUL_F128] = func_iPTR_i64_i64_i64_i64;
1614ba319b5SDimitry Andric Table[RTLIB::DIV_F32] = f32_func_f32_f32;
1624ba319b5SDimitry Andric Table[RTLIB::DIV_F64] = f64_func_f64_f64;
1634ba319b5SDimitry Andric Table[RTLIB::DIV_F128] = func_iPTR_i64_i64_i64_i64;
1644ba319b5SDimitry Andric Table[RTLIB::REM_F32] = f32_func_f32_f32;
1654ba319b5SDimitry Andric Table[RTLIB::REM_F64] = f64_func_f64_f64;
1664ba319b5SDimitry Andric Table[RTLIB::REM_F128] = func_iPTR_i64_i64_i64_i64;
1674ba319b5SDimitry Andric Table[RTLIB::FMA_F32] = f32_func_f32_f32_f32;
1684ba319b5SDimitry Andric Table[RTLIB::FMA_F64] = f64_func_f64_f64_f64;
1694ba319b5SDimitry Andric Table[RTLIB::FMA_F128] = func_iPTR_i64_i64_i64_i64_i64_i64;
1704ba319b5SDimitry Andric Table[RTLIB::POWI_F32] = f32_func_f32_i32;
1714ba319b5SDimitry Andric Table[RTLIB::POWI_F64] = f64_func_f64_i32;
1724ba319b5SDimitry Andric Table[RTLIB::POWI_F128] = func_iPTR_i64_i64_i64_i64;
1734ba319b5SDimitry Andric Table[RTLIB::SQRT_F32] = f32_func_f32;
1744ba319b5SDimitry Andric Table[RTLIB::SQRT_F64] = f64_func_f64;
1754ba319b5SDimitry Andric Table[RTLIB::SQRT_F128] = func_iPTR_i64_i64;
1764ba319b5SDimitry Andric Table[RTLIB::LOG_F32] = f32_func_f32;
1774ba319b5SDimitry Andric Table[RTLIB::LOG_F64] = f64_func_f64;
1784ba319b5SDimitry Andric Table[RTLIB::LOG_F128] = func_iPTR_i64_i64;
1794ba319b5SDimitry Andric Table[RTLIB::LOG2_F32] = f32_func_f32;
1804ba319b5SDimitry Andric Table[RTLIB::LOG2_F64] = f64_func_f64;
1814ba319b5SDimitry Andric Table[RTLIB::LOG2_F128] = func_iPTR_i64_i64;
1824ba319b5SDimitry Andric Table[RTLIB::LOG10_F32] = f32_func_f32;
1834ba319b5SDimitry Andric Table[RTLIB::LOG10_F64] = f64_func_f64;
1844ba319b5SDimitry Andric Table[RTLIB::LOG10_F128] = func_iPTR_i64_i64;
1854ba319b5SDimitry Andric Table[RTLIB::EXP_F32] = f32_func_f32;
1864ba319b5SDimitry Andric Table[RTLIB::EXP_F64] = f64_func_f64;
1874ba319b5SDimitry Andric Table[RTLIB::EXP_F128] = func_iPTR_i64_i64;
1884ba319b5SDimitry Andric Table[RTLIB::EXP2_F32] = f32_func_f32;
1894ba319b5SDimitry Andric Table[RTLIB::EXP2_F64] = f64_func_f64;
1904ba319b5SDimitry Andric Table[RTLIB::EXP2_F128] = func_iPTR_i64_i64;
1914ba319b5SDimitry Andric Table[RTLIB::SIN_F32] = f32_func_f32;
1924ba319b5SDimitry Andric Table[RTLIB::SIN_F64] = f64_func_f64;
1934ba319b5SDimitry Andric Table[RTLIB::SIN_F128] = func_iPTR_i64_i64;
1944ba319b5SDimitry Andric Table[RTLIB::COS_F32] = f32_func_f32;
1954ba319b5SDimitry Andric Table[RTLIB::COS_F64] = f64_func_f64;
1964ba319b5SDimitry Andric Table[RTLIB::COS_F128] = func_iPTR_i64_i64;
1974ba319b5SDimitry Andric Table[RTLIB::SINCOS_F32] = func_f32_iPTR_iPTR;
1984ba319b5SDimitry Andric Table[RTLIB::SINCOS_F64] = func_f64_iPTR_iPTR;
1994ba319b5SDimitry Andric Table[RTLIB::SINCOS_F128] = func_i64_i64_iPTR_iPTR;
2004ba319b5SDimitry Andric Table[RTLIB::POW_F32] = f32_func_f32_f32;
2014ba319b5SDimitry Andric Table[RTLIB::POW_F64] = f64_func_f64_f64;
2024ba319b5SDimitry Andric Table[RTLIB::POW_F128] = func_iPTR_i64_i64_i64_i64;
2034ba319b5SDimitry Andric Table[RTLIB::CEIL_F32] = f32_func_f32;
2044ba319b5SDimitry Andric Table[RTLIB::CEIL_F64] = f64_func_f64;
2054ba319b5SDimitry Andric Table[RTLIB::CEIL_F128] = func_iPTR_i64_i64;
2064ba319b5SDimitry Andric Table[RTLIB::TRUNC_F32] = f32_func_f32;
2074ba319b5SDimitry Andric Table[RTLIB::TRUNC_F64] = f64_func_f64;
2084ba319b5SDimitry Andric Table[RTLIB::TRUNC_F128] = func_iPTR_i64_i64;
2094ba319b5SDimitry Andric Table[RTLIB::RINT_F32] = f32_func_f32;
2104ba319b5SDimitry Andric Table[RTLIB::RINT_F64] = f64_func_f64;
2114ba319b5SDimitry Andric Table[RTLIB::RINT_F128] = func_iPTR_i64_i64;
2124ba319b5SDimitry Andric Table[RTLIB::NEARBYINT_F32] = f32_func_f32;
2134ba319b5SDimitry Andric Table[RTLIB::NEARBYINT_F64] = f64_func_f64;
2144ba319b5SDimitry Andric Table[RTLIB::NEARBYINT_F128] = func_iPTR_i64_i64;
2154ba319b5SDimitry Andric Table[RTLIB::ROUND_F32] = f32_func_f32;
2164ba319b5SDimitry Andric Table[RTLIB::ROUND_F64] = f64_func_f64;
2174ba319b5SDimitry Andric Table[RTLIB::ROUND_F128] = func_iPTR_i64_i64;
2184ba319b5SDimitry Andric Table[RTLIB::FLOOR_F32] = f32_func_f32;
2194ba319b5SDimitry Andric Table[RTLIB::FLOOR_F64] = f64_func_f64;
2204ba319b5SDimitry Andric Table[RTLIB::FLOOR_F128] = func_iPTR_i64_i64;
2214ba319b5SDimitry Andric Table[RTLIB::COPYSIGN_F32] = f32_func_f32_f32;
2224ba319b5SDimitry Andric Table[RTLIB::COPYSIGN_F64] = f64_func_f64_f64;
2234ba319b5SDimitry Andric Table[RTLIB::COPYSIGN_F128] = func_iPTR_i64_i64_i64_i64;
2244ba319b5SDimitry Andric Table[RTLIB::FMIN_F32] = f32_func_f32_f32;
2254ba319b5SDimitry Andric Table[RTLIB::FMIN_F64] = f64_func_f64_f64;
2264ba319b5SDimitry Andric Table[RTLIB::FMIN_F128] = func_iPTR_i64_i64_i64_i64;
2274ba319b5SDimitry Andric Table[RTLIB::FMAX_F32] = f32_func_f32_f32;
2284ba319b5SDimitry Andric Table[RTLIB::FMAX_F64] = f64_func_f64_f64;
2294ba319b5SDimitry Andric Table[RTLIB::FMAX_F128] = func_iPTR_i64_i64_i64_i64;
2307a7e6055SDimitry Andric
2314ba319b5SDimitry Andric // Conversion
2324ba319b5SDimitry Andric // All F80 and PPCF128 routines are unspported.
2334ba319b5SDimitry Andric Table[RTLIB::FPEXT_F64_F128] = func_iPTR_f64;
2344ba319b5SDimitry Andric Table[RTLIB::FPEXT_F32_F128] = func_iPTR_f32;
2354ba319b5SDimitry Andric Table[RTLIB::FPEXT_F32_F64] = f64_func_f32;
2364ba319b5SDimitry Andric Table[RTLIB::FPEXT_F16_F32] = f32_func_i16;
2374ba319b5SDimitry Andric Table[RTLIB::FPROUND_F32_F16] = i16_func_f32;
2384ba319b5SDimitry Andric Table[RTLIB::FPROUND_F64_F32] = f32_func_f64;
2394ba319b5SDimitry Andric Table[RTLIB::FPROUND_F128_F32] = f32_func_i64_i64;
2404ba319b5SDimitry Andric Table[RTLIB::FPROUND_F128_F64] = f64_func_i64_i64;
2414ba319b5SDimitry Andric Table[RTLIB::FPTOSINT_F32_I32] = i32_func_f32;
2424ba319b5SDimitry Andric Table[RTLIB::FPTOSINT_F32_I64] = i64_func_f32;
2434ba319b5SDimitry Andric Table[RTLIB::FPTOSINT_F32_I128] = i64_i64_func_f32;
2444ba319b5SDimitry Andric Table[RTLIB::FPTOSINT_F64_I32] = i32_func_f64;
2454ba319b5SDimitry Andric Table[RTLIB::FPTOSINT_F64_I64] = i64_func_f64;
2464ba319b5SDimitry Andric Table[RTLIB::FPTOSINT_F64_I128] = i64_i64_func_f64;
2474ba319b5SDimitry Andric Table[RTLIB::FPTOSINT_F128_I32] = i32_func_i64_i64;
2484ba319b5SDimitry Andric Table[RTLIB::FPTOSINT_F128_I64] = i64_func_i64_i64;
2494ba319b5SDimitry Andric Table[RTLIB::FPTOSINT_F128_I128] = i64_i64_func_i64_i64;
2504ba319b5SDimitry Andric Table[RTLIB::FPTOUINT_F32_I32] = i32_func_f32;
2514ba319b5SDimitry Andric Table[RTLIB::FPTOUINT_F32_I64] = i64_func_f32;
2524ba319b5SDimitry Andric Table[RTLIB::FPTOUINT_F32_I128] = i64_i64_func_f32;
2534ba319b5SDimitry Andric Table[RTLIB::FPTOUINT_F64_I32] = i32_func_f64;
2544ba319b5SDimitry Andric Table[RTLIB::FPTOUINT_F64_I64] = i64_func_f64;
2554ba319b5SDimitry Andric Table[RTLIB::FPTOUINT_F64_I128] = i64_i64_func_f64;
2564ba319b5SDimitry Andric Table[RTLIB::FPTOUINT_F128_I32] = i32_func_i64_i64;
2574ba319b5SDimitry Andric Table[RTLIB::FPTOUINT_F128_I64] = i64_func_i64_i64;
2584ba319b5SDimitry Andric Table[RTLIB::FPTOUINT_F128_I128] = i64_i64_func_i64_i64;
2594ba319b5SDimitry Andric Table[RTLIB::SINTTOFP_I32_F32] = f32_func_i32;
2604ba319b5SDimitry Andric Table[RTLIB::SINTTOFP_I32_F64] = f64_func_i32;
2614ba319b5SDimitry Andric Table[RTLIB::SINTTOFP_I32_F128] = func_iPTR_i32;
2624ba319b5SDimitry Andric Table[RTLIB::SINTTOFP_I64_F32] = f32_func_i64;
2634ba319b5SDimitry Andric Table[RTLIB::SINTTOFP_I64_F64] = f64_func_i64;
2644ba319b5SDimitry Andric Table[RTLIB::SINTTOFP_I64_F128] = func_iPTR_i64;
2654ba319b5SDimitry Andric Table[RTLIB::SINTTOFP_I128_F32] = f32_func_i64_i64;
2664ba319b5SDimitry Andric Table[RTLIB::SINTTOFP_I128_F64] = f64_func_i64_i64;
2674ba319b5SDimitry Andric Table[RTLIB::SINTTOFP_I128_F128] = func_iPTR_i64_i64;
2684ba319b5SDimitry Andric Table[RTLIB::UINTTOFP_I32_F32] = f32_func_i32;
2694ba319b5SDimitry Andric Table[RTLIB::UINTTOFP_I32_F64] = f64_func_i64;
2704ba319b5SDimitry Andric Table[RTLIB::UINTTOFP_I32_F128] = func_iPTR_i32;
2714ba319b5SDimitry Andric Table[RTLIB::UINTTOFP_I64_F32] = f32_func_i64;
2724ba319b5SDimitry Andric Table[RTLIB::UINTTOFP_I64_F64] = f64_func_i64;
2734ba319b5SDimitry Andric Table[RTLIB::UINTTOFP_I64_F128] = func_iPTR_i64;
2744ba319b5SDimitry Andric Table[RTLIB::UINTTOFP_I128_F32] = f32_func_i64_i64;
2754ba319b5SDimitry Andric Table[RTLIB::UINTTOFP_I128_F64] = f64_func_i64_i64;
2764ba319b5SDimitry Andric Table[RTLIB::UINTTOFP_I128_F128] = func_iPTR_i64_i64;
2777a7e6055SDimitry Andric
2784ba319b5SDimitry Andric // Comparison
2794ba319b5SDimitry Andric // ALl F80 and PPCF128 routines are unsupported.
2804ba319b5SDimitry Andric Table[RTLIB::OEQ_F32] = i32_func_f32_f32;
2814ba319b5SDimitry Andric Table[RTLIB::OEQ_F64] = i32_func_f64_f64;
2824ba319b5SDimitry Andric Table[RTLIB::OEQ_F128] = i32_func_i64_i64_i64_i64;
2834ba319b5SDimitry Andric Table[RTLIB::UNE_F32] = i32_func_f32_f32;
2844ba319b5SDimitry Andric Table[RTLIB::UNE_F64] = i32_func_f64_f64;
2854ba319b5SDimitry Andric Table[RTLIB::UNE_F128] = i32_func_i64_i64_i64_i64;
2864ba319b5SDimitry Andric Table[RTLIB::OGE_F32] = i32_func_f32_f32;
2874ba319b5SDimitry Andric Table[RTLIB::OGE_F64] = i32_func_f64_f64;
2884ba319b5SDimitry Andric Table[RTLIB::OGE_F128] = i32_func_i64_i64_i64_i64;
2894ba319b5SDimitry Andric Table[RTLIB::OLT_F32] = i32_func_f32_f32;
2904ba319b5SDimitry Andric Table[RTLIB::OLT_F64] = i32_func_f64_f64;
2914ba319b5SDimitry Andric Table[RTLIB::OLT_F128] = i32_func_i64_i64_i64_i64;
2924ba319b5SDimitry Andric Table[RTLIB::OLE_F32] = i32_func_f32_f32;
2934ba319b5SDimitry Andric Table[RTLIB::OLE_F64] = i32_func_f64_f64;
2944ba319b5SDimitry Andric Table[RTLIB::OLE_F128] = i32_func_i64_i64_i64_i64;
2954ba319b5SDimitry Andric Table[RTLIB::OGT_F32] = i32_func_f32_f32;
2964ba319b5SDimitry Andric Table[RTLIB::OGT_F64] = i32_func_f64_f64;
2974ba319b5SDimitry Andric Table[RTLIB::OGT_F128] = i32_func_i64_i64_i64_i64;
2984ba319b5SDimitry Andric Table[RTLIB::UO_F32] = i32_func_f32_f32;
2994ba319b5SDimitry Andric Table[RTLIB::UO_F64] = i32_func_f64_f64;
3004ba319b5SDimitry Andric Table[RTLIB::UO_F128] = i32_func_i64_i64_i64_i64;
3014ba319b5SDimitry Andric // O_FXX has the weird property that it uses the same libcall name as UO_FXX
3024ba319b5SDimitry Andric // This breaks our name-based lookup. Fortunately only the UO family of
3034ba319b5SDimitry Andric // libcalls appears to be actually used.
3044ba319b5SDimitry Andric Table[RTLIB::O_F32] = unsupported;
3054ba319b5SDimitry Andric Table[RTLIB::O_F64] = unsupported;
3064ba319b5SDimitry Andric Table[RTLIB::O_F128] = unsupported;
3077a7e6055SDimitry Andric
3084ba319b5SDimitry Andric // Memory
3094ba319b5SDimitry Andric Table[RTLIB::MEMCPY] = iPTR_func_iPTR_iPTR_iPTR;
3104ba319b5SDimitry Andric Table[RTLIB::MEMSET] = iPTR_func_iPTR_i32_iPTR;
3114ba319b5SDimitry Andric Table[RTLIB::MEMMOVE] = iPTR_func_iPTR_iPTR_iPTR;
3127a7e6055SDimitry Andric
3134ba319b5SDimitry Andric // Element-wise Atomic memory
3144ba319b5SDimitry Andric // TODO: Fix these when we implement atomic support
3154ba319b5SDimitry Andric Table[RTLIB::MEMCPY_ELEMENT_UNORDERED_ATOMIC_1] = unsupported;
3164ba319b5SDimitry Andric Table[RTLIB::MEMCPY_ELEMENT_UNORDERED_ATOMIC_2] = unsupported;
3174ba319b5SDimitry Andric Table[RTLIB::MEMCPY_ELEMENT_UNORDERED_ATOMIC_4] = unsupported;
3184ba319b5SDimitry Andric Table[RTLIB::MEMCPY_ELEMENT_UNORDERED_ATOMIC_8] = unsupported;
3194ba319b5SDimitry Andric Table[RTLIB::MEMCPY_ELEMENT_UNORDERED_ATOMIC_16] = unsupported;
3204ba319b5SDimitry Andric Table[RTLIB::MEMMOVE_ELEMENT_UNORDERED_ATOMIC_1] = unsupported;
3214ba319b5SDimitry Andric Table[RTLIB::MEMMOVE_ELEMENT_UNORDERED_ATOMIC_2] = unsupported;
3224ba319b5SDimitry Andric Table[RTLIB::MEMMOVE_ELEMENT_UNORDERED_ATOMIC_4] = unsupported;
3234ba319b5SDimitry Andric Table[RTLIB::MEMMOVE_ELEMENT_UNORDERED_ATOMIC_8] = unsupported;
3244ba319b5SDimitry Andric Table[RTLIB::MEMMOVE_ELEMENT_UNORDERED_ATOMIC_16] = unsupported;
325c4394386SDimitry Andric
3264ba319b5SDimitry Andric Table[RTLIB::MEMSET_ELEMENT_UNORDERED_ATOMIC_1] = unsupported;
3274ba319b5SDimitry Andric Table[RTLIB::MEMSET_ELEMENT_UNORDERED_ATOMIC_2] = unsupported;
3284ba319b5SDimitry Andric Table[RTLIB::MEMSET_ELEMENT_UNORDERED_ATOMIC_4] = unsupported;
3294ba319b5SDimitry Andric Table[RTLIB::MEMSET_ELEMENT_UNORDERED_ATOMIC_8] = unsupported;
3304ba319b5SDimitry Andric Table[RTLIB::MEMSET_ELEMENT_UNORDERED_ATOMIC_16] = unsupported;
3317a7e6055SDimitry Andric
3327a7e6055SDimitry Andric // Atomic '__sync_*' libcalls.
3334ba319b5SDimitry Andric // TODO: Fix these when we implement atomic support
3344ba319b5SDimitry Andric Table[RTLIB::SYNC_VAL_COMPARE_AND_SWAP_1] = unsupported;
3354ba319b5SDimitry Andric Table[RTLIB::SYNC_VAL_COMPARE_AND_SWAP_2] = unsupported;
3364ba319b5SDimitry Andric Table[RTLIB::SYNC_VAL_COMPARE_AND_SWAP_4] = unsupported;
3374ba319b5SDimitry Andric Table[RTLIB::SYNC_VAL_COMPARE_AND_SWAP_8] = unsupported;
3384ba319b5SDimitry Andric Table[RTLIB::SYNC_VAL_COMPARE_AND_SWAP_16] = unsupported;
3394ba319b5SDimitry Andric Table[RTLIB::SYNC_LOCK_TEST_AND_SET_1] = unsupported;
3404ba319b5SDimitry Andric Table[RTLIB::SYNC_LOCK_TEST_AND_SET_2] = unsupported;
3414ba319b5SDimitry Andric Table[RTLIB::SYNC_LOCK_TEST_AND_SET_4] = unsupported;
3424ba319b5SDimitry Andric Table[RTLIB::SYNC_LOCK_TEST_AND_SET_8] = unsupported;
3434ba319b5SDimitry Andric Table[RTLIB::SYNC_LOCK_TEST_AND_SET_16] = unsupported;
3444ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_ADD_1] = unsupported;
3454ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_ADD_2] = unsupported;
3464ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_ADD_4] = unsupported;
3474ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_ADD_8] = unsupported;
3484ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_ADD_16] = unsupported;
3494ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_SUB_1] = unsupported;
3504ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_SUB_2] = unsupported;
3514ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_SUB_4] = unsupported;
3524ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_SUB_8] = unsupported;
3534ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_SUB_16] = unsupported;
3544ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_AND_1] = unsupported;
3554ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_AND_2] = unsupported;
3564ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_AND_4] = unsupported;
3574ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_AND_8] = unsupported;
3584ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_AND_16] = unsupported;
3594ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_OR_1] = unsupported;
3604ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_OR_2] = unsupported;
3614ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_OR_4] = unsupported;
3624ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_OR_8] = unsupported;
3634ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_OR_16] = unsupported;
3644ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_XOR_1] = unsupported;
3654ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_XOR_2] = unsupported;
3664ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_XOR_4] = unsupported;
3674ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_XOR_8] = unsupported;
3684ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_XOR_16] = unsupported;
3694ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_NAND_1] = unsupported;
3704ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_NAND_2] = unsupported;
3714ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_NAND_4] = unsupported;
3724ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_NAND_8] = unsupported;
3734ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_NAND_16] = unsupported;
3744ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_MAX_1] = unsupported;
3754ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_MAX_2] = unsupported;
3764ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_MAX_4] = unsupported;
3774ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_MAX_8] = unsupported;
3784ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_MAX_16] = unsupported;
3794ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_UMAX_1] = unsupported;
3804ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_UMAX_2] = unsupported;
3814ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_UMAX_4] = unsupported;
3824ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_UMAX_8] = unsupported;
3834ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_UMAX_16] = unsupported;
3844ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_MIN_1] = unsupported;
3854ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_MIN_2] = unsupported;
3864ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_MIN_4] = unsupported;
3874ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_MIN_8] = unsupported;
3884ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_MIN_16] = unsupported;
3894ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_UMIN_1] = unsupported;
3904ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_UMIN_2] = unsupported;
3914ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_UMIN_4] = unsupported;
3924ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_UMIN_8] = unsupported;
3934ba319b5SDimitry Andric Table[RTLIB::SYNC_FETCH_AND_UMIN_16] = unsupported;
3947a7e6055SDimitry Andric
3957a7e6055SDimitry Andric // Atomic '__atomic_*' libcalls.
3964ba319b5SDimitry Andric // TODO: Fix these when we implement atomic support
3974ba319b5SDimitry Andric Table[RTLIB::ATOMIC_LOAD] = unsupported;
3984ba319b5SDimitry Andric Table[RTLIB::ATOMIC_LOAD_1] = unsupported;
3994ba319b5SDimitry Andric Table[RTLIB::ATOMIC_LOAD_2] = unsupported;
4004ba319b5SDimitry Andric Table[RTLIB::ATOMIC_LOAD_4] = unsupported;
4014ba319b5SDimitry Andric Table[RTLIB::ATOMIC_LOAD_8] = unsupported;
4024ba319b5SDimitry Andric Table[RTLIB::ATOMIC_LOAD_16] = unsupported;
4037a7e6055SDimitry Andric
4044ba319b5SDimitry Andric Table[RTLIB::ATOMIC_STORE] = unsupported;
4054ba319b5SDimitry Andric Table[RTLIB::ATOMIC_STORE_1] = unsupported;
4064ba319b5SDimitry Andric Table[RTLIB::ATOMIC_STORE_2] = unsupported;
4074ba319b5SDimitry Andric Table[RTLIB::ATOMIC_STORE_4] = unsupported;
4084ba319b5SDimitry Andric Table[RTLIB::ATOMIC_STORE_8] = unsupported;
4094ba319b5SDimitry Andric Table[RTLIB::ATOMIC_STORE_16] = unsupported;
4107a7e6055SDimitry Andric
4114ba319b5SDimitry Andric Table[RTLIB::ATOMIC_EXCHANGE] = unsupported;
4124ba319b5SDimitry Andric Table[RTLIB::ATOMIC_EXCHANGE_1] = unsupported;
4134ba319b5SDimitry Andric Table[RTLIB::ATOMIC_EXCHANGE_2] = unsupported;
4144ba319b5SDimitry Andric Table[RTLIB::ATOMIC_EXCHANGE_4] = unsupported;
4154ba319b5SDimitry Andric Table[RTLIB::ATOMIC_EXCHANGE_8] = unsupported;
4164ba319b5SDimitry Andric Table[RTLIB::ATOMIC_EXCHANGE_16] = unsupported;
4177a7e6055SDimitry Andric
4184ba319b5SDimitry Andric Table[RTLIB::ATOMIC_COMPARE_EXCHANGE] = unsupported;
4194ba319b5SDimitry Andric Table[RTLIB::ATOMIC_COMPARE_EXCHANGE_1] = unsupported;
4204ba319b5SDimitry Andric Table[RTLIB::ATOMIC_COMPARE_EXCHANGE_2] = unsupported;
4214ba319b5SDimitry Andric Table[RTLIB::ATOMIC_COMPARE_EXCHANGE_4] = unsupported;
4224ba319b5SDimitry Andric Table[RTLIB::ATOMIC_COMPARE_EXCHANGE_8] = unsupported;
4234ba319b5SDimitry Andric Table[RTLIB::ATOMIC_COMPARE_EXCHANGE_16] = unsupported;
4247a7e6055SDimitry Andric
4254ba319b5SDimitry Andric Table[RTLIB::ATOMIC_FETCH_ADD_1] = unsupported;
4264ba319b5SDimitry Andric Table[RTLIB::ATOMIC_FETCH_ADD_2] = unsupported;
4274ba319b5SDimitry Andric Table[RTLIB::ATOMIC_FETCH_ADD_4] = unsupported;
4284ba319b5SDimitry Andric Table[RTLIB::ATOMIC_FETCH_ADD_8] = unsupported;
4294ba319b5SDimitry Andric Table[RTLIB::ATOMIC_FETCH_ADD_16] = unsupported;
4307a7e6055SDimitry Andric
4314ba319b5SDimitry Andric Table[RTLIB::ATOMIC_FETCH_SUB_1] = unsupported;
4324ba319b5SDimitry Andric Table[RTLIB::ATOMIC_FETCH_SUB_2] = unsupported;
4334ba319b5SDimitry Andric Table[RTLIB::ATOMIC_FETCH_SUB_4] = unsupported;
4344ba319b5SDimitry Andric Table[RTLIB::ATOMIC_FETCH_SUB_8] = unsupported;
4354ba319b5SDimitry Andric Table[RTLIB::ATOMIC_FETCH_SUB_16] = unsupported;
4367a7e6055SDimitry Andric
4374ba319b5SDimitry Andric Table[RTLIB::ATOMIC_FETCH_AND_1] = unsupported;
4384ba319b5SDimitry Andric Table[RTLIB::ATOMIC_FETCH_AND_2] = unsupported;
4394ba319b5SDimitry Andric Table[RTLIB::ATOMIC_FETCH_AND_4] = unsupported;
4404ba319b5SDimitry Andric Table[RTLIB::ATOMIC_FETCH_AND_8] = unsupported;
4414ba319b5SDimitry Andric Table[RTLIB::ATOMIC_FETCH_AND_16] = unsupported;
4427a7e6055SDimitry Andric
4434ba319b5SDimitry Andric Table[RTLIB::ATOMIC_FETCH_OR_1] = unsupported;
4444ba319b5SDimitry Andric Table[RTLIB::ATOMIC_FETCH_OR_2] = unsupported;
4454ba319b5SDimitry Andric Table[RTLIB::ATOMIC_FETCH_OR_4] = unsupported;
4464ba319b5SDimitry Andric Table[RTLIB::ATOMIC_FETCH_OR_8] = unsupported;
4474ba319b5SDimitry Andric Table[RTLIB::ATOMIC_FETCH_OR_16] = unsupported;
4487a7e6055SDimitry Andric
4494ba319b5SDimitry Andric Table[RTLIB::ATOMIC_FETCH_XOR_1] = unsupported;
4504ba319b5SDimitry Andric Table[RTLIB::ATOMIC_FETCH_XOR_2] = unsupported;
4514ba319b5SDimitry Andric Table[RTLIB::ATOMIC_FETCH_XOR_4] = unsupported;
4524ba319b5SDimitry Andric Table[RTLIB::ATOMIC_FETCH_XOR_8] = unsupported;
4534ba319b5SDimitry Andric Table[RTLIB::ATOMIC_FETCH_XOR_16] = unsupported;
4547a7e6055SDimitry Andric
4554ba319b5SDimitry Andric Table[RTLIB::ATOMIC_FETCH_NAND_1] = unsupported;
4564ba319b5SDimitry Andric Table[RTLIB::ATOMIC_FETCH_NAND_2] = unsupported;
4574ba319b5SDimitry Andric Table[RTLIB::ATOMIC_FETCH_NAND_4] = unsupported;
4584ba319b5SDimitry Andric Table[RTLIB::ATOMIC_FETCH_NAND_8] = unsupported;
4594ba319b5SDimitry Andric Table[RTLIB::ATOMIC_FETCH_NAND_16] = unsupported;
4604ba319b5SDimitry Andric }
4617a7e6055SDimitry Andric };
4627a7e6055SDimitry Andric
4634ba319b5SDimitry Andric ManagedStatic<RuntimeLibcallSignatureTable> RuntimeLibcallSignatures;
4647a7e6055SDimitry Andric
4654ba319b5SDimitry Andric // Maps libcall names to their RTLIB::Libcall number. Builds the map in a
4664ba319b5SDimitry Andric // constructor for use with ManagedStatic
4674ba319b5SDimitry Andric struct StaticLibcallNameMap {
4684ba319b5SDimitry Andric StringMap<RTLIB::Libcall> Map;
StaticLibcallNameMap__anonc9fad5920111::StaticLibcallNameMap4694ba319b5SDimitry Andric StaticLibcallNameMap() {
4704ba319b5SDimitry Andric static const std::pair<const char *, RTLIB::Libcall> NameLibcalls[] = {
4714ba319b5SDimitry Andric #define HANDLE_LIBCALL(code, name) {(const char *)name, RTLIB::code},
4724ba319b5SDimitry Andric #include "llvm/IR/RuntimeLibcalls.def"
4734ba319b5SDimitry Andric #undef HANDLE_LIBCALL
4747a7e6055SDimitry Andric };
4754ba319b5SDimitry Andric for (const auto &NameLibcall : NameLibcalls) {
4764ba319b5SDimitry Andric if (NameLibcall.first != nullptr &&
4774ba319b5SDimitry Andric RuntimeLibcallSignatures->Table[NameLibcall.second] != unsupported) {
4784ba319b5SDimitry Andric assert(Map.find(NameLibcall.first) == Map.end() &&
4794ba319b5SDimitry Andric "duplicate libcall names in name map");
4804ba319b5SDimitry Andric Map[NameLibcall.first] = NameLibcall.second;
4814ba319b5SDimitry Andric }
4824ba319b5SDimitry Andric }
4834ba319b5SDimitry Andric }
4844ba319b5SDimitry Andric };
4854ba319b5SDimitry Andric
4864ba319b5SDimitry Andric } // end anonymous namespace
4874ba319b5SDimitry Andric
GetLibcallSignature(const WebAssemblySubtarget & Subtarget,RTLIB::Libcall LC,SmallVectorImpl<wasm::ValType> & Rets,SmallVectorImpl<wasm::ValType> & Params)488*b5893f02SDimitry Andric void llvm::GetLibcallSignature(const WebAssemblySubtarget &Subtarget,
489*b5893f02SDimitry Andric RTLIB::Libcall LC,
490*b5893f02SDimitry Andric SmallVectorImpl<wasm::ValType> &Rets,
4917a7e6055SDimitry Andric SmallVectorImpl<wasm::ValType> &Params) {
4927a7e6055SDimitry Andric assert(Rets.empty());
4937a7e6055SDimitry Andric assert(Params.empty());
4947a7e6055SDimitry Andric
4954ba319b5SDimitry Andric wasm::ValType iPTR =
4964ba319b5SDimitry Andric Subtarget.hasAddr64() ? wasm::ValType::I64 : wasm::ValType::I32;
4977a7e6055SDimitry Andric
4984ba319b5SDimitry Andric auto &Table = RuntimeLibcallSignatures->Table;
4994ba319b5SDimitry Andric switch (Table[LC]) {
5007a7e6055SDimitry Andric case func:
5017a7e6055SDimitry Andric break;
5027a7e6055SDimitry Andric case f32_func_f32:
5037a7e6055SDimitry Andric Rets.push_back(wasm::ValType::F32);
5047a7e6055SDimitry Andric Params.push_back(wasm::ValType::F32);
5057a7e6055SDimitry Andric break;
5067a7e6055SDimitry Andric case f32_func_f64:
5077a7e6055SDimitry Andric Rets.push_back(wasm::ValType::F32);
5087a7e6055SDimitry Andric Params.push_back(wasm::ValType::F64);
5097a7e6055SDimitry Andric break;
5107a7e6055SDimitry Andric case f32_func_i32:
5117a7e6055SDimitry Andric Rets.push_back(wasm::ValType::F32);
5127a7e6055SDimitry Andric Params.push_back(wasm::ValType::I32);
5137a7e6055SDimitry Andric break;
5147a7e6055SDimitry Andric case f32_func_i64:
5157a7e6055SDimitry Andric Rets.push_back(wasm::ValType::F32);
5167a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
5177a7e6055SDimitry Andric break;
5187a7e6055SDimitry Andric case f32_func_i16:
5197a7e6055SDimitry Andric Rets.push_back(wasm::ValType::F32);
5207a7e6055SDimitry Andric Params.push_back(wasm::ValType::I32);
5217a7e6055SDimitry Andric break;
5227a7e6055SDimitry Andric case f64_func_f32:
5237a7e6055SDimitry Andric Rets.push_back(wasm::ValType::F64);
5247a7e6055SDimitry Andric Params.push_back(wasm::ValType::F32);
5257a7e6055SDimitry Andric break;
5267a7e6055SDimitry Andric case f64_func_f64:
5277a7e6055SDimitry Andric Rets.push_back(wasm::ValType::F64);
5287a7e6055SDimitry Andric Params.push_back(wasm::ValType::F64);
5297a7e6055SDimitry Andric break;
5307a7e6055SDimitry Andric case f64_func_i32:
5317a7e6055SDimitry Andric Rets.push_back(wasm::ValType::F64);
5327a7e6055SDimitry Andric Params.push_back(wasm::ValType::I32);
5337a7e6055SDimitry Andric break;
5347a7e6055SDimitry Andric case f64_func_i64:
5357a7e6055SDimitry Andric Rets.push_back(wasm::ValType::F64);
5367a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
5377a7e6055SDimitry Andric break;
5387a7e6055SDimitry Andric case i32_func_f32:
5397a7e6055SDimitry Andric Rets.push_back(wasm::ValType::I32);
5407a7e6055SDimitry Andric Params.push_back(wasm::ValType::F32);
5417a7e6055SDimitry Andric break;
5427a7e6055SDimitry Andric case i32_func_f64:
5437a7e6055SDimitry Andric Rets.push_back(wasm::ValType::I32);
5447a7e6055SDimitry Andric Params.push_back(wasm::ValType::F64);
5457a7e6055SDimitry Andric break;
5467a7e6055SDimitry Andric case i32_func_i32:
5477a7e6055SDimitry Andric Rets.push_back(wasm::ValType::I32);
5487a7e6055SDimitry Andric Params.push_back(wasm::ValType::I32);
5497a7e6055SDimitry Andric break;
5507a7e6055SDimitry Andric case i64_func_f32:
5517a7e6055SDimitry Andric Rets.push_back(wasm::ValType::I64);
5527a7e6055SDimitry Andric Params.push_back(wasm::ValType::F32);
5537a7e6055SDimitry Andric break;
5547a7e6055SDimitry Andric case i64_func_f64:
5557a7e6055SDimitry Andric Rets.push_back(wasm::ValType::I64);
5567a7e6055SDimitry Andric Params.push_back(wasm::ValType::F64);
5577a7e6055SDimitry Andric break;
5587a7e6055SDimitry Andric case i64_func_i64:
5597a7e6055SDimitry Andric Rets.push_back(wasm::ValType::I64);
5607a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
5617a7e6055SDimitry Andric break;
5627a7e6055SDimitry Andric case f32_func_f32_f32:
5637a7e6055SDimitry Andric Rets.push_back(wasm::ValType::F32);
5647a7e6055SDimitry Andric Params.push_back(wasm::ValType::F32);
5657a7e6055SDimitry Andric Params.push_back(wasm::ValType::F32);
5667a7e6055SDimitry Andric break;
5677a7e6055SDimitry Andric case f32_func_f32_i32:
5687a7e6055SDimitry Andric Rets.push_back(wasm::ValType::F32);
5697a7e6055SDimitry Andric Params.push_back(wasm::ValType::F32);
5707a7e6055SDimitry Andric Params.push_back(wasm::ValType::I32);
5717a7e6055SDimitry Andric break;
5727a7e6055SDimitry Andric case f32_func_i64_i64:
5737a7e6055SDimitry Andric Rets.push_back(wasm::ValType::F32);
5747a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
5757a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
5767a7e6055SDimitry Andric break;
5777a7e6055SDimitry Andric case f64_func_f64_f64:
5787a7e6055SDimitry Andric Rets.push_back(wasm::ValType::F64);
5797a7e6055SDimitry Andric Params.push_back(wasm::ValType::F64);
5807a7e6055SDimitry Andric Params.push_back(wasm::ValType::F64);
5817a7e6055SDimitry Andric break;
5827a7e6055SDimitry Andric case f64_func_f64_i32:
5837a7e6055SDimitry Andric Rets.push_back(wasm::ValType::F64);
5847a7e6055SDimitry Andric Params.push_back(wasm::ValType::F64);
5857a7e6055SDimitry Andric Params.push_back(wasm::ValType::I32);
5867a7e6055SDimitry Andric break;
5877a7e6055SDimitry Andric case f64_func_i64_i64:
5887a7e6055SDimitry Andric Rets.push_back(wasm::ValType::F64);
5897a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
5907a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
5917a7e6055SDimitry Andric break;
5927a7e6055SDimitry Andric case i16_func_f32:
5937a7e6055SDimitry Andric Rets.push_back(wasm::ValType::I32);
5947a7e6055SDimitry Andric Params.push_back(wasm::ValType::F32);
5957a7e6055SDimitry Andric break;
5967a7e6055SDimitry Andric case i8_func_i8_i8:
5977a7e6055SDimitry Andric Rets.push_back(wasm::ValType::I32);
5987a7e6055SDimitry Andric Params.push_back(wasm::ValType::I32);
5997a7e6055SDimitry Andric Params.push_back(wasm::ValType::I32);
6007a7e6055SDimitry Andric break;
6017a7e6055SDimitry Andric case func_f32_iPTR_iPTR:
6027a7e6055SDimitry Andric Params.push_back(wasm::ValType::F32);
6034ba319b5SDimitry Andric Params.push_back(iPTR);
6044ba319b5SDimitry Andric Params.push_back(iPTR);
6057a7e6055SDimitry Andric break;
6067a7e6055SDimitry Andric case func_f64_iPTR_iPTR:
6077a7e6055SDimitry Andric Params.push_back(wasm::ValType::F64);
6084ba319b5SDimitry Andric Params.push_back(iPTR);
6094ba319b5SDimitry Andric Params.push_back(iPTR);
6107a7e6055SDimitry Andric break;
6117a7e6055SDimitry Andric case i16_func_i16_i16:
6127a7e6055SDimitry Andric Rets.push_back(wasm::ValType::I32);
6137a7e6055SDimitry Andric Params.push_back(wasm::ValType::I32);
6147a7e6055SDimitry Andric Params.push_back(wasm::ValType::I32);
6157a7e6055SDimitry Andric break;
6167a7e6055SDimitry Andric case i32_func_f32_f32:
6177a7e6055SDimitry Andric Rets.push_back(wasm::ValType::I32);
6187a7e6055SDimitry Andric Params.push_back(wasm::ValType::F32);
6197a7e6055SDimitry Andric Params.push_back(wasm::ValType::F32);
6207a7e6055SDimitry Andric break;
6217a7e6055SDimitry Andric case i32_func_f64_f64:
6227a7e6055SDimitry Andric Rets.push_back(wasm::ValType::I32);
6237a7e6055SDimitry Andric Params.push_back(wasm::ValType::F64);
6247a7e6055SDimitry Andric Params.push_back(wasm::ValType::F64);
6257a7e6055SDimitry Andric break;
6267a7e6055SDimitry Andric case i32_func_i32_i32:
6277a7e6055SDimitry Andric Rets.push_back(wasm::ValType::I32);
6287a7e6055SDimitry Andric Params.push_back(wasm::ValType::I32);
6297a7e6055SDimitry Andric Params.push_back(wasm::ValType::I32);
6307a7e6055SDimitry Andric break;
6314ba319b5SDimitry Andric case i32_func_i32_i32_iPTR:
6324ba319b5SDimitry Andric Rets.push_back(wasm::ValType::I32);
6334ba319b5SDimitry Andric Params.push_back(wasm::ValType::I32);
6344ba319b5SDimitry Andric Params.push_back(wasm::ValType::I32);
6354ba319b5SDimitry Andric Params.push_back(iPTR);
6364ba319b5SDimitry Andric break;
6377a7e6055SDimitry Andric case i64_func_i64_i64:
6387a7e6055SDimitry Andric Rets.push_back(wasm::ValType::I64);
6397a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
6407a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
6417a7e6055SDimitry Andric break;
6424ba319b5SDimitry Andric case i64_func_i64_i64_iPTR:
6434ba319b5SDimitry Andric Rets.push_back(wasm::ValType::I64);
6444ba319b5SDimitry Andric Params.push_back(wasm::ValType::I64);
6454ba319b5SDimitry Andric Params.push_back(wasm::ValType::I64);
6464ba319b5SDimitry Andric Params.push_back(iPTR);
6474ba319b5SDimitry Andric break;
6487a7e6055SDimitry Andric case i64_i64_func_f32:
6497a7e6055SDimitry Andric #if 0 // TODO: Enable this when wasm gets multiple-return-value support.
6507a7e6055SDimitry Andric Rets.push_back(wasm::ValType::I64);
6517a7e6055SDimitry Andric Rets.push_back(wasm::ValType::I64);
6527a7e6055SDimitry Andric #else
6534ba319b5SDimitry Andric Params.push_back(iPTR);
6547a7e6055SDimitry Andric #endif
6557a7e6055SDimitry Andric Params.push_back(wasm::ValType::F32);
6567a7e6055SDimitry Andric break;
6577a7e6055SDimitry Andric case i64_i64_func_f64:
6587a7e6055SDimitry Andric #if 0 // TODO: Enable this when wasm gets multiple-return-value support.
6597a7e6055SDimitry Andric Rets.push_back(wasm::ValType::I64);
6607a7e6055SDimitry Andric Rets.push_back(wasm::ValType::I64);
6617a7e6055SDimitry Andric #else
6624ba319b5SDimitry Andric Params.push_back(iPTR);
6637a7e6055SDimitry Andric #endif
6647a7e6055SDimitry Andric Params.push_back(wasm::ValType::F64);
6657a7e6055SDimitry Andric break;
6667a7e6055SDimitry Andric case i16_i16_func_i16_i16:
6677a7e6055SDimitry Andric #if 0 // TODO: Enable this when wasm gets multiple-return-value support.
6687a7e6055SDimitry Andric Rets.push_back(wasm::ValType::I32);
6697a7e6055SDimitry Andric Rets.push_back(wasm::ValType::I32);
6707a7e6055SDimitry Andric #else
6714ba319b5SDimitry Andric Params.push_back(iPTR);
6727a7e6055SDimitry Andric #endif
6737a7e6055SDimitry Andric Params.push_back(wasm::ValType::I32);
6747a7e6055SDimitry Andric Params.push_back(wasm::ValType::I32);
6757a7e6055SDimitry Andric break;
6767a7e6055SDimitry Andric case i32_i32_func_i32_i32:
6777a7e6055SDimitry Andric #if 0 // TODO: Enable this when wasm gets multiple-return-value support.
6787a7e6055SDimitry Andric Rets.push_back(wasm::ValType::I32);
6797a7e6055SDimitry Andric Rets.push_back(wasm::ValType::I32);
6807a7e6055SDimitry Andric #else
6814ba319b5SDimitry Andric Params.push_back(iPTR);
6827a7e6055SDimitry Andric #endif
6837a7e6055SDimitry Andric Params.push_back(wasm::ValType::I32);
6847a7e6055SDimitry Andric Params.push_back(wasm::ValType::I32);
6857a7e6055SDimitry Andric break;
6867a7e6055SDimitry Andric case i64_i64_func_i64_i64:
6877a7e6055SDimitry Andric #if 0 // TODO: Enable this when wasm gets multiple-return-value support.
6887a7e6055SDimitry Andric Rets.push_back(wasm::ValType::I64);
6897a7e6055SDimitry Andric Rets.push_back(wasm::ValType::I64);
6907a7e6055SDimitry Andric #else
6914ba319b5SDimitry Andric Params.push_back(iPTR);
6927a7e6055SDimitry Andric #endif
6937a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
6947a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
6957a7e6055SDimitry Andric break;
6967a7e6055SDimitry Andric case i64_i64_func_i64_i64_i64_i64:
6977a7e6055SDimitry Andric #if 0 // TODO: Enable this when wasm gets multiple-return-value support.
6987a7e6055SDimitry Andric Rets.push_back(wasm::ValType::I64);
6997a7e6055SDimitry Andric Rets.push_back(wasm::ValType::I64);
7007a7e6055SDimitry Andric #else
7014ba319b5SDimitry Andric Params.push_back(iPTR);
7027a7e6055SDimitry Andric #endif
7037a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
7047a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
7057a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
7067a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
7077a7e6055SDimitry Andric break;
7084ba319b5SDimitry Andric case i64_i64_func_i64_i64_i64_i64_iPTR:
7094ba319b5SDimitry Andric #if 0 // TODO: Enable this when wasm gets multiple-return-value support.
7104ba319b5SDimitry Andric Rets.push_back(wasm::ValType::I64);
7114ba319b5SDimitry Andric Rets.push_back(wasm::ValType::I64);
7124ba319b5SDimitry Andric #else
7134ba319b5SDimitry Andric Params.push_back(iPTR);
7144ba319b5SDimitry Andric #endif
7154ba319b5SDimitry Andric Params.push_back(wasm::ValType::I64);
7164ba319b5SDimitry Andric Params.push_back(wasm::ValType::I64);
7174ba319b5SDimitry Andric Params.push_back(wasm::ValType::I64);
7184ba319b5SDimitry Andric Params.push_back(wasm::ValType::I64);
7194ba319b5SDimitry Andric Params.push_back(iPTR);
7204ba319b5SDimitry Andric break;
7217a7e6055SDimitry Andric case i64_i64_i64_i64_func_i64_i64_i64_i64:
7227a7e6055SDimitry Andric #if 0 // TODO: Enable this when wasm gets multiple-return-value support.
7237a7e6055SDimitry Andric Rets.push_back(wasm::ValType::I64);
7247a7e6055SDimitry Andric Rets.push_back(wasm::ValType::I64);
7257a7e6055SDimitry Andric Rets.push_back(wasm::ValType::I64);
7267a7e6055SDimitry Andric Rets.push_back(wasm::ValType::I64);
7277a7e6055SDimitry Andric #else
7284ba319b5SDimitry Andric Params.push_back(iPTR);
7297a7e6055SDimitry Andric #endif
7307a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
7317a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
7327a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
7337a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
7347a7e6055SDimitry Andric break;
7357a7e6055SDimitry Andric case i64_i64_func_i64_i64_i32:
7367a7e6055SDimitry Andric #if 0 // TODO: Enable this when wasm gets multiple-return-value support.
7377a7e6055SDimitry Andric Rets.push_back(wasm::ValType::I64);
7387a7e6055SDimitry Andric Rets.push_back(wasm::ValType::I64);
7397a7e6055SDimitry Andric Rets.push_back(wasm::ValType::I64);
7407a7e6055SDimitry Andric Rets.push_back(wasm::ValType::I64);
7417a7e6055SDimitry Andric #else
7424ba319b5SDimitry Andric Params.push_back(iPTR);
7437a7e6055SDimitry Andric #endif
7447a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
7457a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
7467a7e6055SDimitry Andric Params.push_back(wasm::ValType::I32);
7477a7e6055SDimitry Andric break;
7487a7e6055SDimitry Andric case iPTR_func_iPTR_i32_iPTR:
7494ba319b5SDimitry Andric Rets.push_back(iPTR);
7504ba319b5SDimitry Andric Params.push_back(iPTR);
7517a7e6055SDimitry Andric Params.push_back(wasm::ValType::I32);
7524ba319b5SDimitry Andric Params.push_back(iPTR);
7537a7e6055SDimitry Andric break;
7547a7e6055SDimitry Andric case iPTR_func_iPTR_iPTR_iPTR:
7554ba319b5SDimitry Andric Rets.push_back(iPTR);
7564ba319b5SDimitry Andric Params.push_back(iPTR);
7574ba319b5SDimitry Andric Params.push_back(iPTR);
7584ba319b5SDimitry Andric Params.push_back(iPTR);
7597a7e6055SDimitry Andric break;
7607a7e6055SDimitry Andric case f32_func_f32_f32_f32:
7617a7e6055SDimitry Andric Rets.push_back(wasm::ValType::F32);
7627a7e6055SDimitry Andric Params.push_back(wasm::ValType::F32);
7637a7e6055SDimitry Andric Params.push_back(wasm::ValType::F32);
7647a7e6055SDimitry Andric Params.push_back(wasm::ValType::F32);
7657a7e6055SDimitry Andric break;
7667a7e6055SDimitry Andric case f64_func_f64_f64_f64:
7677a7e6055SDimitry Andric Rets.push_back(wasm::ValType::F64);
7687a7e6055SDimitry Andric Params.push_back(wasm::ValType::F64);
7697a7e6055SDimitry Andric Params.push_back(wasm::ValType::F64);
7707a7e6055SDimitry Andric Params.push_back(wasm::ValType::F64);
7717a7e6055SDimitry Andric break;
7727a7e6055SDimitry Andric case func_i64_i64_iPTR_iPTR:
7737a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
7747a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
7754ba319b5SDimitry Andric Params.push_back(iPTR);
7764ba319b5SDimitry Andric Params.push_back(iPTR);
7777a7e6055SDimitry Andric break;
7787a7e6055SDimitry Andric case func_iPTR_f32:
7794ba319b5SDimitry Andric Params.push_back(iPTR);
7807a7e6055SDimitry Andric Params.push_back(wasm::ValType::F32);
7817a7e6055SDimitry Andric break;
7827a7e6055SDimitry Andric case func_iPTR_f64:
7834ba319b5SDimitry Andric Params.push_back(iPTR);
7847a7e6055SDimitry Andric Params.push_back(wasm::ValType::F64);
7857a7e6055SDimitry Andric break;
7867a7e6055SDimitry Andric case func_iPTR_i32:
7874ba319b5SDimitry Andric Params.push_back(iPTR);
7887a7e6055SDimitry Andric Params.push_back(wasm::ValType::I32);
7897a7e6055SDimitry Andric break;
7907a7e6055SDimitry Andric case func_iPTR_i64:
7914ba319b5SDimitry Andric Params.push_back(iPTR);
7927a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
7937a7e6055SDimitry Andric break;
7947a7e6055SDimitry Andric case func_iPTR_i64_i64:
7954ba319b5SDimitry Andric Params.push_back(iPTR);
7967a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
7977a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
7987a7e6055SDimitry Andric break;
7997a7e6055SDimitry Andric case func_iPTR_i64_i64_i64_i64:
8004ba319b5SDimitry Andric Params.push_back(iPTR);
8017a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
8027a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
8037a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
8047a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
8057a7e6055SDimitry Andric break;
8067a7e6055SDimitry Andric case func_iPTR_i64_i64_i64_i64_i64_i64:
8074ba319b5SDimitry Andric Params.push_back(iPTR);
8087a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
8097a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
8107a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
8117a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
8127a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
8137a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
8147a7e6055SDimitry Andric break;
8157a7e6055SDimitry Andric case i32_func_i64_i64:
8167a7e6055SDimitry Andric Rets.push_back(wasm::ValType::I32);
8177a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
8187a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
8197a7e6055SDimitry Andric break;
8207a7e6055SDimitry Andric case i32_func_i64_i64_i64_i64:
8217a7e6055SDimitry Andric Rets.push_back(wasm::ValType::I32);
8227a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
8237a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
8247a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
8257a7e6055SDimitry Andric Params.push_back(wasm::ValType::I64);
8267a7e6055SDimitry Andric break;
8277a7e6055SDimitry Andric case unsupported:
8287a7e6055SDimitry Andric llvm_unreachable("unsupported runtime library signature");
8297a7e6055SDimitry Andric }
8307a7e6055SDimitry Andric }
8317a7e6055SDimitry Andric
8324ba319b5SDimitry Andric static ManagedStatic<StaticLibcallNameMap> LibcallNameMap;
8334ba319b5SDimitry Andric // TODO: If the RTLIB::Libcall-taking flavor of GetSignature remains unsed
8344ba319b5SDimitry Andric // other than here, just roll its logic into this version.
GetLibcallSignature(const WebAssemblySubtarget & Subtarget,const char * Name,SmallVectorImpl<wasm::ValType> & Rets,SmallVectorImpl<wasm::ValType> & Params)835*b5893f02SDimitry Andric void llvm::GetLibcallSignature(const WebAssemblySubtarget &Subtarget,
836*b5893f02SDimitry Andric const char *Name,
8377a7e6055SDimitry Andric SmallVectorImpl<wasm::ValType> &Rets,
8387a7e6055SDimitry Andric SmallVectorImpl<wasm::ValType> &Params) {
8394ba319b5SDimitry Andric auto &Map = LibcallNameMap->Map;
8404ba319b5SDimitry Andric auto val = Map.find(Name);
8414ba319b5SDimitry Andric assert(val != Map.end() && "unexpected runtime library name");
842*b5893f02SDimitry Andric return GetLibcallSignature(Subtarget, val->second, Rets, Params);
8437a7e6055SDimitry Andric }
844