Files
acceptance-tests
data
debian
docs
external
Newtonsoft.Json
api-doc-tools
api-snapshot
aspnetwebstack
binary-reference-assemblies
bockbuild
boringssl
cecil
cecil-legacy
corefx
corert
helix-binaries
ikdasm
ikvm
illinker-test-assets
linker
llvm
bindings
cmake
docs
examples
include
lib
Analysis
AsmParser
BinaryFormat
Bitcode
CodeGen
DebugInfo
Demangle
ExecutionEngine
FuzzMutate
Fuzzer
IR
IRReader
LTO
LineEditor
Linker
MC
Object
ObjectYAML
Option
Passes
ProfileData
Support
TableGen
Target
AArch64
AMDGPU
ARC
ARM
AVR
BPF
Hexagon
Lanai
MSP430
Mips
NVPTX
Nios2
PowerPC
RISCV
Sparc
SystemZ
WebAssembly
Disassembler
InstPrinter
MCTargetDesc
TargetInfo
CMakeLists.txt
LLVMBuild.txt
README.txt
WebAssembly.h
WebAssembly.td
WebAssemblyArgumentMove.cpp
WebAssemblyAsmPrinter.cpp
WebAssemblyAsmPrinter.h
WebAssemblyCFGSort.cpp
WebAssemblyCFGStackify.cpp
WebAssemblyCallIndirectFixup.cpp
WebAssemblyExplicitLocals.cpp
WebAssemblyFastISel.cpp
WebAssemblyFixFunctionBitcasts.cpp
WebAssemblyFixIrreducibleControlFlow.cpp
WebAssemblyFrameLowering.cpp
WebAssemblyFrameLowering.h
WebAssemblyISD.def
WebAssemblyISelDAGToDAG.cpp
WebAssemblyISelLowering.cpp
WebAssemblyISelLowering.h
WebAssemblyInstrAtomics.td
WebAssemblyInstrCall.td
WebAssemblyInstrControl.td
WebAssemblyInstrConv.td
WebAssemblyInstrFloat.td
WebAssemblyInstrFormats.td
WebAssemblyInstrInfo.cpp
WebAssemblyInstrInfo.h
WebAssemblyInstrInfo.td
WebAssemblyInstrInteger.td
WebAssemblyInstrMemory.td
WebAssemblyInstrSIMD.td
WebAssemblyLowerBrUnless.cpp
WebAssemblyLowerEmscriptenEHSjLj.cpp
WebAssemblyLowerGlobalDtors.cpp
WebAssemblyMCInstLower.cpp
WebAssemblyMCInstLower.h
WebAssemblyMachineFunctionInfo.cpp
WebAssemblyMachineFunctionInfo.h
WebAssemblyOptimizeLiveIntervals.cpp
WebAssemblyOptimizeReturned.cpp
WebAssemblyPeephole.cpp
WebAssemblyPrepareForLiveIntervals.cpp
WebAssemblyRegColoring.cpp
WebAssemblyRegNumbering.cpp
WebAssemblyRegStackify.cpp
WebAssemblyRegisterInfo.cpp
WebAssemblyRegisterInfo.h
WebAssemblyRegisterInfo.td
WebAssemblyReplacePhysRegs.cpp
WebAssemblyRuntimeLibcallSignatures.cpp
WebAssemblyRuntimeLibcallSignatures.h
WebAssemblySelectionDAGInfo.cpp
WebAssemblySelectionDAGInfo.h
WebAssemblySetP2AlignOperands.cpp
WebAssemblyStoreResults.cpp
WebAssemblySubtarget.cpp
WebAssemblySubtarget.h
WebAssemblyTargetMachine.cpp
WebAssemblyTargetMachine.h
WebAssemblyTargetObjectFile.cpp
WebAssemblyTargetObjectFile.h
WebAssemblyTargetTransformInfo.cpp
WebAssemblyTargetTransformInfo.h
WebAssemblyUtilities.cpp
WebAssemblyUtilities.h
known_gcc_test_failures.txt
X86
XCore
CMakeLists.txt
LLVMBuild.txt
README.txt
Target.cpp
TargetIntrinsicInfo.cpp
TargetLoweringObjectFile.cpp
TargetMachine.cpp
TargetMachineC.cpp
Testing
ToolDrivers
Transforms
WindowsManifest
XRay
CMakeLists.txt
LLVMBuild.txt
projects
resources
runtimes
scripts
test
tools
unittests
utils
.arcconfig
.clang-format
.clang-tidy
.gitattributes
.gitignore
CMakeLists.txt
CODE_OWNERS.TXT
CREDITS.TXT
LICENSE.TXT
LLVMBuild.txt
README.txt
RELEASE_TESTERS.TXT
configure
llvm.spec.in
nuget-buildtasks
nunit-lite
roslyn-binaries
rx
xunit-binaries
how-to-bump-roslyn-binaries.md
ikvm-native
libgc
llvm
m4
man
mcs
mk
mono
msvc
po
runtime
samples
scripts
support
tools
COPYING.LIB
LICENSE
Makefile.am
Makefile.in
NEWS
README.md
acinclude.m4
aclocal.m4
autogen.sh
code_of_conduct.md
compile
config.guess
config.h.in
config.rpath
config.sub
configure.REMOVED.git-id
configure.ac.REMOVED.git-id
depcomp
install-sh
ltmain.sh.REMOVED.git-id
missing
mkinstalldirs
mono-uninstalled.pc.in
test-driver
winconfig.h
linux-packaging-mono/external/llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp

1330 lines
44 KiB
C++
Raw Normal View History

// CodeGen/RuntimeLibcallSignatures.cpp - R.T. Lib. Call Signatures -*- C++ -*--
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
///
/// \file
/// \brief This file contains signature information for runtime libcalls.
///
/// CodeGen uses external symbols, which it refers to by name. The WebAssembly
/// target needs type information for all functions. This file contains a big
/// table providing type signatures for all runtime library functions that LLVM
/// uses.
///
/// This is currently a fairly heavy-handed solution.
///
//===----------------------------------------------------------------------===//
#include "WebAssemblyRuntimeLibcallSignatures.h"
#include "WebAssemblySubtarget.h"
#include "llvm/CodeGen/RuntimeLibcalls.h"
using namespace llvm;
namespace {
enum RuntimeLibcallSignature {
func,
f32_func_f32,
f32_func_f64,
f32_func_i32,
f32_func_i64,
f32_func_i16,
f64_func_f32,
f64_func_f64,
f64_func_i32,
f64_func_i64,
i32_func_f32,
i32_func_f64,
i32_func_i32,
i64_func_f32,
i64_func_f64,
i64_func_i64,
f32_func_f32_f32,
f32_func_f32_i32,
f32_func_i64_i64,
f64_func_f64_f64,
f64_func_f64_i32,
f64_func_i64_i64,
i16_func_f32,
i8_func_i8_i8,
func_f32_iPTR_iPTR,
func_f64_iPTR_iPTR,
i16_func_i16_i16,
i32_func_f32_f32,
i32_func_f64_f64,
i32_func_i32_i32,
i64_func_i64_i64,
i64_i64_func_f32,
i64_i64_func_f64,
i16_i16_func_i16_i16,
i32_i32_func_i32_i32,
i64_i64_func_i64_i64,
i64_i64_func_i64_i64_i64_i64,
i64_i64_i64_i64_func_i64_i64_i64_i64,
i64_i64_func_i64_i64_i32,
iPTR_func_iPTR_i32_iPTR,
iPTR_func_iPTR_iPTR_iPTR,
f32_func_f32_f32_f32,
f64_func_f64_f64_f64,
func_i64_i64_iPTR_iPTR,
func_iPTR_f32,
func_iPTR_f64,
func_iPTR_i32,
func_iPTR_i64,
func_iPTR_i64_i64,
func_iPTR_i64_i64_i64_i64,
func_iPTR_i64_i64_i64_i64_i64_i64,
i32_func_i64_i64,
i32_func_i64_i64_i64_i64,
unsupported
};
} // end anonymous namespace
static const RuntimeLibcallSignature
RuntimeLibcallSignatures[RTLIB::UNKNOWN_LIBCALL] = {
// Integer
/* SHL_I16 */ i16_func_i16_i16,
/* SHL_I32 */ i32_func_i32_i32,
/* SHL_I64 */ i64_func_i64_i64,
/* SHL_I128 */ i64_i64_func_i64_i64_i32,
/* SRL_I16 */ i16_func_i16_i16,
/* SRL_I32 */ i32_func_i32_i32,
/* SRL_I64 */ i64_func_i64_i64,
/* SRL_I128 */ i64_i64_func_i64_i64_i32,
/* SRA_I16 */ i16_func_i16_i16,
/* SRA_I32 */ i32_func_i32_i32,
/* SRA_I64 */ i64_func_i64_i64,
/* SRA_I128 */ i64_i64_func_i64_i64_i32,
/* MUL_I8 */ i8_func_i8_i8,
/* MUL_I16 */ i16_func_i16_i16,
/* MUL_I32 */ i32_func_i32_i32,
/* MUL_I64 */ i64_func_i64_i64,
/* MUL_I128 */ i64_i64_func_i64_i64_i64_i64,
/* MULO_I32 */ i32_func_i32_i32,
/* MULO_I64 */ i64_func_i64_i64,
/* MULO_I128 */ i64_i64_func_i64_i64_i64_i64,
/* SDIV_I8 */ i8_func_i8_i8,
/* SDIV_I16 */ i16_func_i16_i16,
/* SDIV_I32 */ i32_func_i32_i32,
/* SDIV_I64 */ i64_func_i64_i64,
/* SDIV_I128 */ i64_i64_func_i64_i64_i64_i64,
/* UDIV_I8 */ i8_func_i8_i8,
/* UDIV_I16 */ i16_func_i16_i16,
/* UDIV_I32 */ i32_func_i32_i32,
/* UDIV_I64 */ i64_func_i64_i64,
/* UDIV_I128 */ i64_i64_func_i64_i64_i64_i64,
/* SREM_I8 */ i8_func_i8_i8,
/* SREM_I16 */ i16_func_i16_i16,
/* SREM_I32 */ i32_func_i32_i32,
/* SREM_I64 */ i64_func_i64_i64,
/* SREM_I128 */ i64_i64_func_i64_i64_i64_i64,
/* UREM_I8 */ i8_func_i8_i8,
/* UREM_I16 */ i16_func_i16_i16,
/* UREM_I32 */ i32_func_i32_i32,
/* UREM_I64 */ i64_func_i64_i64,
/* UREM_I128 */ i64_i64_func_i64_i64_i64_i64,
/* SDIVREM_I8 */ i8_func_i8_i8,
/* SDIVREM_I16 */ i16_i16_func_i16_i16,
/* SDIVREM_I32 */ i32_i32_func_i32_i32,
/* SDIVREM_I64 */ i64_func_i64_i64,
/* SDIVREM_I128 */ i64_i64_i64_i64_func_i64_i64_i64_i64,
/* UDIVREM_I8 */ i8_func_i8_i8,
/* UDIVREM_I16 */ i16_i16_func_i16_i16,
/* UDIVREM_I32 */ i32_i32_func_i32_i32,
/* UDIVREM_I64 */ i64_i64_func_i64_i64,
/* UDIVREM_I128 */ i64_i64_i64_i64_func_i64_i64_i64_i64,
/* NEG_I32 */ i32_func_i32,
/* NEG_I64 */ i64_func_i64,
// FLOATING POINT
/* ADD_F32 */ f32_func_f32_f32,
/* ADD_F64 */ f64_func_f64_f64,
/* ADD_F80 */ unsupported,
/* ADD_F128 */ func_iPTR_i64_i64_i64_i64,
/* ADD_PPCF128 */ unsupported,
/* SUB_F32 */ f32_func_f32_f32,
/* SUB_F64 */ f64_func_f64_f64,
/* SUB_F80 */ unsupported,
/* SUB_F128 */ func_iPTR_i64_i64_i64_i64,
/* SUB_PPCF128 */ unsupported,
/* MUL_F32 */ f32_func_f32_f32,
/* MUL_F64 */ f64_func_f64_f64,
/* MUL_F80 */ unsupported,
/* MUL_F128 */ func_iPTR_i64_i64_i64_i64,
/* MUL_PPCF128 */ unsupported,
/* DIV_F32 */ f32_func_f32_f32,
/* DIV_F64 */ f64_func_f64_f64,
/* DIV_F80 */ unsupported,
/* DIV_F128 */ func_iPTR_i64_i64_i64_i64,
/* DIV_PPCF128 */ unsupported,
/* REM_F32 */ f32_func_f32_f32,
/* REM_F64 */ f64_func_f64_f64,
/* REM_F80 */ unsupported,
/* REM_F128 */ func_iPTR_i64_i64_i64_i64,
/* REM_PPCF128 */ unsupported,
/* FMA_F32 */ f32_func_f32_f32_f32,
/* FMA_F64 */ f64_func_f64_f64_f64,
/* FMA_F80 */ unsupported,
/* FMA_F128 */ func_iPTR_i64_i64_i64_i64_i64_i64,
/* FMA_PPCF128 */ unsupported,
/* POWI_F32 */ f32_func_f32_i32,
/* POWI_F64 */ f64_func_f64_i32,
/* POWI_F80 */ unsupported,
/* POWI_F128 */ func_iPTR_i64_i64_i64_i64,
/* POWI_PPCF128 */ unsupported,
/* SQRT_F32 */ f32_func_f32,
/* SQRT_F64 */ f64_func_f64,
/* SQRT_F80 */ unsupported,
/* SQRT_F128 */ func_iPTR_i64_i64,
/* SQRT_PPCF128 */ unsupported,
/* LOG_F32 */ f32_func_f32,
/* LOG_F64 */ f64_func_f64,
/* LOG_F80 */ unsupported,
/* LOG_F128 */ func_iPTR_i64_i64,
/* LOG_PPCF128 */ unsupported,
/* LOG2_F32 */ f32_func_f32,
/* LOG2_F64 */ f64_func_f64,
/* LOG2_F80 */ unsupported,
/* LOG2_F128 */ func_iPTR_i64_i64,
/* LOG2_PPCF128 */ unsupported,
/* LOG10_F32 */ f32_func_f32,
/* LOG10_F64 */ f64_func_f64,
/* LOG10_F80 */ unsupported,
/* LOG10_F128 */ func_iPTR_i64_i64,
/* LOG10_PPCF128 */ unsupported,
/* EXP_F32 */ f32_func_f32,
/* EXP_F64 */ f64_func_f64,
/* EXP_F80 */ unsupported,
/* EXP_F128 */ func_iPTR_i64_i64,
/* EXP_PPCF128 */ unsupported,
/* EXP2_F32 */ f32_func_f32,
/* EXP2_F64 */ f64_func_f64,
/* EXP2_F80 */ unsupported,
/* EXP2_F128 */ func_iPTR_i64_i64,
/* EXP2_PPCF128 */ unsupported,
/* SIN_F32 */ f32_func_f32,
/* SIN_F64 */ f64_func_f64,
/* SIN_F80 */ unsupported,
/* SIN_F128 */ func_iPTR_i64_i64,
/* SIN_PPCF128 */ unsupported,
/* COS_F32 */ f32_func_f32,
/* COS_F64 */ f64_func_f64,
/* COS_F80 */ unsupported,
/* COS_F128 */ func_iPTR_i64_i64,
/* COS_PPCF128 */ unsupported,
/* SINCOS_F32 */ func_f32_iPTR_iPTR,
/* SINCOS_F64 */ func_f64_iPTR_iPTR,
/* SINCOS_F80 */ unsupported,
/* SINCOS_F128 */ func_i64_i64_iPTR_iPTR,
/* SINCOS_PPCF128 */ unsupported,
/* SINCOS_STRET_F32 */ unsupported,
/* SINCOS_STRET_F64 */ unsupported,
/* POW_F32 */ f32_func_f32_f32,
/* POW_F64 */ f64_func_f64_f64,
/* POW_F80 */ unsupported,
/* POW_F128 */ func_iPTR_i64_i64_i64_i64,
/* POW_PPCF128 */ unsupported,
/* CEIL_F32 */ f32_func_f32,
/* CEIL_F64 */ f64_func_f64,
/* CEIL_F80 */ unsupported,
/* CEIL_F128 */ func_iPTR_i64_i64,
/* CEIL_PPCF128 */ unsupported,
/* TRUNC_F32 */ f32_func_f32,
/* TRUNC_F64 */ f64_func_f64,
/* TRUNC_F80 */ unsupported,
/* TRUNC_F128 */ func_iPTR_i64_i64,
/* TRUNC_PPCF128 */ unsupported,
/* RINT_F32 */ f32_func_f32,
/* RINT_F64 */ f64_func_f64,
/* RINT_F80 */ unsupported,
/* RINT_F128 */ func_iPTR_i64_i64,
/* RINT_PPCF128 */ unsupported,
/* NEARBYINT_F32 */ f32_func_f32,
/* NEARBYINT_F64 */ f64_func_f64,
/* NEARBYINT_F80 */ unsupported,
/* NEARBYINT_F128 */ func_iPTR_i64_i64,
/* NEARBYINT_PPCF128 */ unsupported,
/* ROUND_F32 */ f32_func_f32,
/* ROUND_F64 */ f64_func_f64,
/* ROUND_F80 */ unsupported,
/* ROUND_F128 */ func_iPTR_i64_i64,
/* ROUND_PPCF128 */ unsupported,
/* FLOOR_F32 */ f32_func_f32,
/* FLOOR_F64 */ f64_func_f64,
/* FLOOR_F80 */ unsupported,
/* FLOOR_F128 */ func_iPTR_i64_i64,
/* FLOOR_PPCF128 */ unsupported,
/* COPYSIGN_F32 */ f32_func_f32_f32,
/* COPYSIGN_F64 */ f64_func_f64_f64,
/* COPYSIGN_F80 */ unsupported,
/* COPYSIGN_F128 */ func_iPTR_i64_i64_i64_i64,
/* COPYSIGN_PPCF128 */ unsupported,
/* FMIN_F32 */ f32_func_f32_f32,
/* FMIN_F64 */ f64_func_f64_f64,
/* FMIN_F80 */ unsupported,
/* FMIN_F128 */ func_iPTR_i64_i64_i64_i64,
/* FMIN_PPCF128 */ unsupported,
/* FMAX_F32 */ f32_func_f32_f32,
/* FMAX_F64 */ f64_func_f64_f64,
/* FMAX_F80 */ unsupported,
/* FMAX_F128 */ func_iPTR_i64_i64_i64_i64,
/* FMAX_PPCF128 */ unsupported,
// CONVERSION
/* FPEXT_F32_PPCF128 */ unsupported,
/* FPEXT_F64_PPCF128 */ unsupported,
/* FPEXT_F64_F128 */ func_iPTR_f64,
/* FPEXT_F32_F128 */ func_iPTR_f32,
/* FPEXT_F32_F64 */ f64_func_f32,
/* FPEXT_F16_F32 */ f32_func_i16,
/* FPROUND_F32_F16 */ i16_func_f32,
/* FPROUND_F64_F16 */ unsupported,
/* FPROUND_F80_F16 */ unsupported,
/* FPROUND_F128_F16 */ unsupported,
/* FPROUND_PPCF128_F16 */ unsupported,
/* FPROUND_F64_F32 */ f32_func_f64,
/* FPROUND_F80_F32 */ unsupported,
/* FPROUND_F128_F32 */ f32_func_i64_i64,
/* FPROUND_PPCF128_F32 */ unsupported,
/* FPROUND_F80_F64 */ unsupported,
/* FPROUND_F128_F64 */ f64_func_i64_i64,
/* FPROUND_PPCF128_F64 */ unsupported,
/* FPTOSINT_F32_I32 */ i32_func_f32,
/* FPTOSINT_F32_I64 */ i64_func_f32,
/* FPTOSINT_F32_I128 */ i64_i64_func_f32,
/* FPTOSINT_F64_I32 */ i32_func_f64,
/* FPTOSINT_F64_I64 */ i64_func_f64,
/* FPTOSINT_F64_I128 */ i64_i64_func_f64,
/* FPTOSINT_F80_I32 */ unsupported,
/* FPTOSINT_F80_I64 */ unsupported,
/* FPTOSINT_F80_I128 */ unsupported,
/* FPTOSINT_F128_I32 */ i32_func_i64_i64,
/* FPTOSINT_F128_I64 */ i64_func_i64_i64,
/* FPTOSINT_F128_I128 */ i64_i64_func_i64_i64,
/* FPTOSINT_PPCF128_I32 */ unsupported,
/* FPTOSINT_PPCF128_I64 */ unsupported,
/* FPTOSINT_PPCF128_I128 */ unsupported,
/* FPTOUINT_F32_I32 */ i32_func_f32,
/* FPTOUINT_F32_I64 */ i64_func_f32,
/* FPTOUINT_F32_I128 */ i64_i64_func_f32,
/* FPTOUINT_F64_I32 */ i32_func_f64,
/* FPTOUINT_F64_I64 */ i64_func_f64,
/* FPTOUINT_F64_I128 */ i64_i64_func_f64,
/* FPTOUINT_F80_I32 */ unsupported,
/* FPTOUINT_F80_I64 */ unsupported,
/* FPTOUINT_F80_I128 */ unsupported,
/* FPTOUINT_F128_I32 */ i32_func_i64_i64,
/* FPTOUINT_F128_I64 */ i64_func_i64_i64,
/* FPTOUINT_F128_I128 */ i64_i64_func_i64_i64,
/* FPTOUINT_PPCF128_I32 */ unsupported,
/* FPTOUINT_PPCF128_I64 */ unsupported,
/* FPTOUINT_PPCF128_I128 */ unsupported,
/* SINTTOFP_I32_F32 */ f32_func_i32,
/* SINTTOFP_I32_F64 */ f64_func_i32,
/* SINTTOFP_I32_F80 */ unsupported,
/* SINTTOFP_I32_F128 */ func_iPTR_i32,
/* SINTTOFP_I32_PPCF128 */ unsupported,
/* SINTTOFP_I64_F32 */ f32_func_i64,
/* SINTTOFP_I64_F64 */ f64_func_i64,
/* SINTTOFP_I64_F80 */ unsupported,
/* SINTTOFP_I64_F128 */ func_iPTR_i64,
/* SINTTOFP_I64_PPCF128 */ unsupported,
/* SINTTOFP_I128_F32 */ f32_func_i64_i64,
/* SINTTOFP_I128_F64 */ f64_func_i64_i64,
/* SINTTOFP_I128_F80 */ unsupported,
/* SINTTOFP_I128_F128 */ func_iPTR_i64_i64,
/* SINTTOFP_I128_PPCF128 */ unsupported,
/* UINTTOFP_I32_F32 */ f32_func_i32,
/* UINTTOFP_I32_F64 */ f64_func_i64,
/* UINTTOFP_I32_F80 */ unsupported,
/* UINTTOFP_I32_F128 */ func_iPTR_i32,
/* UINTTOFP_I32_PPCF128 */ unsupported,
/* UINTTOFP_I64_F32 */ f32_func_i64,
/* UINTTOFP_I64_F64 */ f64_func_i64,
/* UINTTOFP_I64_F80 */ unsupported,
/* UINTTOFP_I64_F128 */ func_iPTR_i64,
/* UINTTOFP_I64_PPCF128 */ unsupported,
/* UINTTOFP_I128_F32 */ f32_func_i64_i64,
/* UINTTOFP_I128_F64 */ f64_func_i64_i64,
/* UINTTOFP_I128_F80 */ unsupported,
/* UINTTOFP_I128_F128 */ func_iPTR_i64_i64,
/* UINTTOFP_I128_PPCF128 */ unsupported,
// COMPARISON
/* OEQ_F32 */ i32_func_f32_f32,
/* OEQ_F64 */ i32_func_f64_f64,
/* OEQ_F128 */ i32_func_i64_i64_i64_i64,
/* OEQ_PPCF128 */ unsupported,
/* UNE_F32 */ i32_func_f32_f32,
/* UNE_F64 */ i32_func_f64_f64,
/* UNE_F128 */ i32_func_i64_i64_i64_i64,
/* UNE_PPCF128 */ unsupported,
/* OGE_F32 */ i32_func_f32_f32,
/* OGE_F64 */ i32_func_f64_f64,
/* OGE_F128 */ i32_func_i64_i64_i64_i64,
/* OGE_PPCF128 */ unsupported,
/* OLT_F32 */ i32_func_f32_f32,
/* OLT_F64 */ i32_func_f64_f64,
/* OLT_F128 */ i32_func_i64_i64_i64_i64,
/* OLT_PPCF128 */ unsupported,
/* OLE_F32 */ i32_func_f32_f32,
/* OLE_F64 */ i32_func_f64_f64,
/* OLE_F128 */ i32_func_i64_i64_i64_i64,
/* OLE_PPCF128 */ unsupported,
/* OGT_F32 */ i32_func_f32_f32,
/* OGT_F64 */ i32_func_f64_f64,
/* OGT_F128 */ i32_func_i64_i64_i64_i64,
/* OGT_PPCF128 */ unsupported,
/* UO_F32 */ i32_func_f32_f32,
/* UO_F64 */ i32_func_f64_f64,
/* UO_F128 */ i32_func_i64_i64_i64_i64,
/* UO_PPCF128 */ unsupported,
/* O_F32 */ i32_func_f32_f32,
/* O_F64 */ i32_func_f64_f64,
/* O_F128 */ i32_func_i64_i64_i64_i64,
/* O_PPCF128 */ unsupported,
// MEMORY
/* MEMCPY */ iPTR_func_iPTR_iPTR_iPTR,
/* MEMMOVE */ iPTR_func_iPTR_iPTR_iPTR,
/* MEMSET */ iPTR_func_iPTR_i32_iPTR,
/* BZERO */ unsupported,
// ELEMENT-WISE ATOMIC MEMORY
/* MEMCPY_ELEMENT_UNORDERED_ATOMIC_1 */ unsupported,
/* MEMCPY_ELEMENT_UNORDERED_ATOMIC_2 */ unsupported,
/* MEMCPY_ELEMENT_UNORDERED_ATOMIC_4 */ unsupported,
/* MEMCPY_ELEMENT_UNORDERED_ATOMIC_8 */ unsupported,
/* MEMCPY_ELEMENT_UNORDERED_ATOMIC_16 */ unsupported,
/* MEMMOVE_ELEMENT_UNORDERED_ATOMIC_1 */ unsupported,
/* MEMMOVE_ELEMENT_UNORDERED_ATOMIC_2 */ unsupported,
/* MEMMOVE_ELEMENT_UNORDERED_ATOMIC_4 */ unsupported,
/* MEMMOVE_ELEMENT_UNORDERED_ATOMIC_8 */ unsupported,
/* MEMMOVE_ELEMENT_UNORDERED_ATOMIC_16 */ unsupported,
/* MEMSET_ELEMENT_UNORDERED_ATOMIC_1 */ unsupported,
/* MEMSET_ELEMENT_UNORDERED_ATOMIC_2 */ unsupported,
/* MEMSET_ELEMENT_UNORDERED_ATOMIC_4 */ unsupported,
/* MEMSET_ELEMENT_UNORDERED_ATOMIC_8 */ unsupported,
/* MEMSET_ELEMENT_UNORDERED_ATOMIC_16 */ unsupported,
// EXCEPTION HANDLING
/* UNWIND_RESUME */ unsupported,
// Note: there's two sets of atomics libcalls; see
// <http://llvm.org/docs/Atomics.html> for more info on the
// difference between them.
// Atomic '__sync_*' libcalls.
/* SYNC_VAL_COMPARE_AND_SWAP_1 */ unsupported,
/* SYNC_VAL_COMPARE_AND_SWAP_2 */ unsupported,
/* SYNC_VAL_COMPARE_AND_SWAP_4 */ unsupported,
/* SYNC_VAL_COMPARE_AND_SWAP_8 */ unsupported,
/* SYNC_VAL_COMPARE_AND_SWAP_16 */ unsupported,
/* SYNC_LOCK_TEST_AND_SET_1 */ unsupported,
/* SYNC_LOCK_TEST_AND_SET_2 */ unsupported,
/* SYNC_LOCK_TEST_AND_SET_4 */ unsupported,
/* SYNC_LOCK_TEST_AND_SET_8 */ unsupported,
/* SYNC_LOCK_TEST_AND_SET_16 */ unsupported,
/* SYNC_FETCH_AND_ADD_1 */ unsupported,
/* SYNC_FETCH_AND_ADD_2 */ unsupported,
/* SYNC_FETCH_AND_ADD_4 */ unsupported,
/* SYNC_FETCH_AND_ADD_8 */ unsupported,
/* SYNC_FETCH_AND_ADD_16 */ unsupported,
/* SYNC_FETCH_AND_SUB_1 */ unsupported,
/* SYNC_FETCH_AND_SUB_2 */ unsupported,
/* SYNC_FETCH_AND_SUB_4 */ unsupported,
/* SYNC_FETCH_AND_SUB_8 */ unsupported,
/* SYNC_FETCH_AND_SUB_16 */ unsupported,
/* SYNC_FETCH_AND_AND_1 */ unsupported,
/* SYNC_FETCH_AND_AND_2 */ unsupported,
/* SYNC_FETCH_AND_AND_4 */ unsupported,
/* SYNC_FETCH_AND_AND_8 */ unsupported,
/* SYNC_FETCH_AND_AND_16 */ unsupported,
/* SYNC_FETCH_AND_OR_1 */ unsupported,
/* SYNC_FETCH_AND_OR_2 */ unsupported,
/* SYNC_FETCH_AND_OR_4 */ unsupported,
/* SYNC_FETCH_AND_OR_8 */ unsupported,
/* SYNC_FETCH_AND_OR_16 */ unsupported,
/* SYNC_FETCH_AND_XOR_1 */ unsupported,
/* SYNC_FETCH_AND_XOR_2 */ unsupported,
/* SYNC_FETCH_AND_XOR_4 */ unsupported,
/* SYNC_FETCH_AND_XOR_8 */ unsupported,
/* SYNC_FETCH_AND_XOR_16 */ unsupported,
/* SYNC_FETCH_AND_NAND_1 */ unsupported,
/* SYNC_FETCH_AND_NAND_2 */ unsupported,
/* SYNC_FETCH_AND_NAND_4 */ unsupported,
/* SYNC_FETCH_AND_NAND_8 */ unsupported,
/* SYNC_FETCH_AND_NAND_16 */ unsupported,
/* SYNC_FETCH_AND_MAX_1 */ unsupported,
/* SYNC_FETCH_AND_MAX_2 */ unsupported,
/* SYNC_FETCH_AND_MAX_4 */ unsupported,
/* SYNC_FETCH_AND_MAX_8 */ unsupported,
/* SYNC_FETCH_AND_MAX_16 */ unsupported,
/* SYNC_FETCH_AND_UMAX_1 */ unsupported,
/* SYNC_FETCH_AND_UMAX_2 */ unsupported,
/* SYNC_FETCH_AND_UMAX_4 */ unsupported,
/* SYNC_FETCH_AND_UMAX_8 */ unsupported,
/* SYNC_FETCH_AND_UMAX_16 */ unsupported,
/* SYNC_FETCH_AND_MIN_1 */ unsupported,
/* SYNC_FETCH_AND_MIN_2 */ unsupported,
/* SYNC_FETCH_AND_MIN_4 */ unsupported,
/* SYNC_FETCH_AND_MIN_8 */ unsupported,
/* SYNC_FETCH_AND_MIN_16 */ unsupported,
/* SYNC_FETCH_AND_UMIN_1 */ unsupported,
/* SYNC_FETCH_AND_UMIN_2 */ unsupported,
/* SYNC_FETCH_AND_UMIN_4 */ unsupported,
/* SYNC_FETCH_AND_UMIN_8 */ unsupported,
/* SYNC_FETCH_AND_UMIN_16 */ unsupported,
// Atomic '__atomic_*' libcalls.
/* ATOMIC_LOAD */ unsupported,
/* ATOMIC_LOAD_1 */ unsupported,
/* ATOMIC_LOAD_2 */ unsupported,
/* ATOMIC_LOAD_4 */ unsupported,
/* ATOMIC_LOAD_8 */ unsupported,
/* ATOMIC_LOAD_16 */ unsupported,
/* ATOMIC_STORE */ unsupported,
/* ATOMIC_STORE_1 */ unsupported,
/* ATOMIC_STORE_2 */ unsupported,
/* ATOMIC_STORE_4 */ unsupported,
/* ATOMIC_STORE_8 */ unsupported,
/* ATOMIC_STORE_16 */ unsupported,
/* ATOMIC_EXCHANGE */ unsupported,
/* ATOMIC_EXCHANGE_1 */ unsupported,
/* ATOMIC_EXCHANGE_2 */ unsupported,
/* ATOMIC_EXCHANGE_4 */ unsupported,
/* ATOMIC_EXCHANGE_8 */ unsupported,
/* ATOMIC_EXCHANGE_16 */ unsupported,
/* ATOMIC_COMPARE_EXCHANGE */ unsupported,
/* ATOMIC_COMPARE_EXCHANGE_1 */ unsupported,
/* ATOMIC_COMPARE_EXCHANGE_2 */ unsupported,
/* ATOMIC_COMPARE_EXCHANGE_4 */ unsupported,
/* ATOMIC_COMPARE_EXCHANGE_8 */ unsupported,
/* ATOMIC_COMPARE_EXCHANGE_16 */ unsupported,
/* ATOMIC_FETCH_ADD_1 */ unsupported,
/* ATOMIC_FETCH_ADD_2 */ unsupported,
/* ATOMIC_FETCH_ADD_4 */ unsupported,
/* ATOMIC_FETCH_ADD_8 */ unsupported,
/* ATOMIC_FETCH_ADD_16 */ unsupported,
/* ATOMIC_FETCH_SUB_1 */ unsupported,
/* ATOMIC_FETCH_SUB_2 */ unsupported,
/* ATOMIC_FETCH_SUB_4 */ unsupported,
/* ATOMIC_FETCH_SUB_8 */ unsupported,
/* ATOMIC_FETCH_SUB_16 */ unsupported,
/* ATOMIC_FETCH_AND_1 */ unsupported,
/* ATOMIC_FETCH_AND_2 */ unsupported,
/* ATOMIC_FETCH_AND_4 */ unsupported,
/* ATOMIC_FETCH_AND_8 */ unsupported,
/* ATOMIC_FETCH_AND_16 */ unsupported,
/* ATOMIC_FETCH_OR_1 */ unsupported,
/* ATOMIC_FETCH_OR_2 */ unsupported,
/* ATOMIC_FETCH_OR_4 */ unsupported,
/* ATOMIC_FETCH_OR_8 */ unsupported,
/* ATOMIC_FETCH_OR_16 */ unsupported,
/* ATOMIC_FETCH_XOR_1 */ unsupported,
/* ATOMIC_FETCH_XOR_2 */ unsupported,
/* ATOMIC_FETCH_XOR_4 */ unsupported,
/* ATOMIC_FETCH_XOR_8 */ unsupported,
/* ATOMIC_FETCH_XOR_16 */ unsupported,
/* ATOMIC_FETCH_NAND_1 */ unsupported,
/* ATOMIC_FETCH_NAND_2 */ unsupported,
/* ATOMIC_FETCH_NAND_4 */ unsupported,
/* ATOMIC_FETCH_NAND_8 */ unsupported,
/* ATOMIC_FETCH_NAND_16 */ unsupported,
// Stack Protector Fail.
/* STACKPROTECTOR_CHECK_FAIL */ func,
// Deoptimization.
/* DEOPTIMIZE */ unsupported,
};
static const char *
RuntimeLibcallNames[RTLIB::UNKNOWN_LIBCALL] = {
/* SHL_I16 */ "__ashlhi3",
/* SHL_I32 */ "__ashlsi3",
/* SHL_I64 */ "__ashldi3",
/* SHL_I128 */ "__ashlti3",
/* SRL_I16 */ "__lshrhi3",
/* SRL_I32 */ "__lshrsi3",
/* SRL_I64 */ "__lshrdi3",
/* SRL_I128 */ "__lshrti3",
/* SRA_I16 */ "__ashrhi3",
/* SRA_I32 */ "__ashrsi3",
/* SRA_I64 */ "__ashrdi3",
/* SRA_I128 */ "__ashrti3",
/* MUL_I8 */ "__mulqi3",
/* MUL_I16 */ "__mulhi3",
/* MUL_I32 */ "__mulsi3",
/* MUL_I64 */ "__muldi3",
/* MUL_I128 */ "__multi3",
/* MULO_I32 */ "__mulosi4",
/* MULO_I64 */ "__mulodi4",
/* MULO_I128 */ "__muloti4",
/* SDIV_I8 */ "__divqi3",
/* SDIV_I16 */ "__divhi3",
/* SDIV_I32 */ "__divsi3",
/* SDIV_I64 */ "__divdi3",
/* SDIV_I128 */ "__divti3",
/* UDIV_I8 */ "__udivqi3",
/* UDIV_I16 */ "__udivhi3",
/* UDIV_I32 */ "__udivsi3",
/* UDIV_I64 */ "__udivdi3",
/* UDIV_I128 */ "__udivti3",
/* SREM_I8 */ "__modqi3",
/* SREM_I16 */ "__modhi3",
/* SREM_I32 */ "__modsi3",
/* SREM_I64 */ "__moddi3",
/* SREM_I128 */ "__modti3",
/* UREM_I8 */ "__umodqi3",
/* UREM_I16 */ "__umodhi3",
/* UREM_I32 */ "__umodsi3",
/* UREM_I64 */ "__umoddi3",
/* UREM_I128 */ "__umodti3",
/* SDIVREM_I8 */ nullptr,
/* SDIVREM_I16 */ nullptr,
/* SDIVREM_I32 */ nullptr,
/* SDIVREM_I64 */ nullptr,
/* SDIVREM_I128 */ nullptr,
/* UDIVREM_I8 */ nullptr,
/* UDIVREM_I16 */ nullptr,
/* UDIVREM_I32 */ nullptr,
/* UDIVREM_I64 */ nullptr,
/* UDIVREM_I128 */ nullptr,
/* NEG_I32 */ "__negsi2",
/* NEG_I64 */ "__negdi2",
/* ADD_F32 */ "__addsf3",
/* ADD_F64 */ "__adddf3",
/* ADD_F80 */ nullptr,
/* ADD_F128 */ "__addtf3",
/* ADD_PPCF128 */ nullptr,
/* SUB_F32 */ "__subsf3",
/* SUB_F64 */ "__subdf3",
/* SUB_F80 */ nullptr,
/* SUB_F128 */ "__subtf3",
/* SUB_PPCF128 */ nullptr,
/* MUL_F32 */ "__mulsf3",
/* MUL_F64 */ "__muldf3",
/* MUL_F80 */ nullptr,
/* MUL_F128 */ "__multf3",
/* MUL_PPCF128 */ nullptr,
/* DIV_F32 */ "__divsf3",
/* DIV_F64 */ "__divdf3",
/* DIV_F80 */ nullptr,
/* DIV_F128 */ "__divtf3",
/* DIV_PPCF128 */ nullptr,
/* REM_F32 */ "fmodf",
/* REM_F64 */ "fmod",
/* REM_F80 */ nullptr,
/* REM_F128 */ "fmodl",
/* REM_PPCF128 */ nullptr,
/* FMA_F32 */ "fmaf",
/* FMA_F64 */ "fma",
/* FMA_F80 */ nullptr,
/* FMA_F128 */ "fmal",
/* FMA_PPCF128 */ nullptr,
/* POWI_F32 */ "__powisf2",
/* POWI_F64 */ "__powidf2",
/* POWI_F80 */ nullptr,
/* POWI_F128 */ "__powitf2",
/* POWI_PPCF128 */ nullptr,
/* SQRT_F32 */ "sqrtf",
/* SQRT_F64 */ "sqrt",
/* SQRT_F80 */ nullptr,
/* SQRT_F128 */ "sqrtl",
/* SQRT_PPCF128 */ nullptr,
/* LOG_F32 */ "logf",
/* LOG_F64 */ "log",
/* LOG_F80 */ nullptr,
/* LOG_F128 */ "logl",
/* LOG_PPCF128 */ nullptr,
/* LOG2_F32 */ "log2f",
/* LOG2_F64 */ "log2",
/* LOG2_F80 */ nullptr,
/* LOG2_F128 */ "log2l",
/* LOG2_PPCF128 */ nullptr,
/* LOG10_F32 */ "log10f",
/* LOG10_F64 */ "log10",
/* LOG10_F80 */ nullptr,
/* LOG10_F128 */ "log10l",
/* LOG10_PPCF128 */ nullptr,
/* EXP_F32 */ "expf",
/* EXP_F64 */ "exp",
/* EXP_F80 */ nullptr,
/* EXP_F128 */ "expl",
/* EXP_PPCF128 */ nullptr,
/* EXP2_F32 */ "exp2f",
/* EXP2_F64 */ "exp2",
/* EXP2_F80 */ nullptr,
/* EXP2_F128 */ "exp2l",
/* EXP2_PPCF128 */ nullptr,
/* SIN_F32 */ "sinf",
/* SIN_F64 */ "sin",
/* SIN_F80 */ nullptr,
/* SIN_F128 */ "sinl",
/* SIN_PPCF128 */ nullptr,
/* COS_F32 */ "cosf",
/* COS_F64 */ "cos",
/* COS_F80 */ nullptr,
/* COS_F128 */ "cosl",
/* COS_PPCF128 */ nullptr,
/* SINCOS_F32 */ "sincosf",
/* SINCOS_F64 */ "sincos",
/* SINCOS_F80 */ nullptr,
/* SINCOS_F128 */ "sincosl",
/* SINCOS_PPCF128 */ nullptr,
/* SINCOS_STRET_F32 */ nullptr,
/* SINCOS_STRET_F64 */ nullptr,
/* POW_F32 */ "powf",
/* POW_F64 */ "pow",
/* POW_F80 */ nullptr,
/* POW_F128 */ "powl",
/* POW_PPCF128 */ nullptr,
/* CEIL_F32 */ "ceilf",
/* CEIL_F64 */ "ceil",
/* CEIL_F80 */ nullptr,
/* CEIL_F128 */ "ceill",
/* CEIL_PPCF128 */ nullptr,
/* TRUNC_F32 */ "truncf",
/* TRUNC_F64 */ "trunc",
/* TRUNC_F80 */ nullptr,
/* TRUNC_F128 */ "truncl",
/* TRUNC_PPCF128 */ nullptr,
/* RINT_F32 */ "rintf",
/* RINT_F64 */ "rint",
/* RINT_F80 */ nullptr,
/* RINT_F128 */ "rintl",
/* RINT_PPCF128 */ nullptr,
/* NEARBYINT_F32 */ "nearbyintf",
/* NEARBYINT_F64 */ "nearbyint",
/* NEARBYINT_F80 */ nullptr,
/* NEARBYINT_F128 */ "nearbyintl",
/* NEARBYINT_PPCF128 */ nullptr,
/* ROUND_F32 */ "roundf",
/* ROUND_F64 */ "round",
/* ROUND_F80 */ nullptr,
/* ROUND_F128 */ "roundl",
/* ROUND_PPCF128 */ nullptr,
/* FLOOR_F32 */ "floorf",
/* FLOOR_F64 */ "floor",
/* FLOOR_F80 */ nullptr,
/* FLOOR_F128 */ "floorl",
/* FLOOR_PPCF128 */ nullptr,
/* COPYSIGN_F32 */ "copysignf",
/* COPYSIGN_F64 */ "copysign",
/* COPYSIGN_F80 */ nullptr,
/* COPYSIGN_F128 */ "copysignl",
/* COPYSIGN_PPCF128 */ nullptr,
/* FMIN_F32 */ "fminf",
/* FMIN_F64 */ "fmin",
/* FMIN_F80 */ nullptr,
/* FMIN_F128 */ "fminl",
/* FMIN_PPCF128 */ nullptr,
/* FMAX_F32 */ "fmaxf",
/* FMAX_F64 */ "fmax",
/* FMAX_F80 */ nullptr,
/* FMAX_F128 */ "fmaxl",
/* FMAX_PPCF128 */ nullptr,
/* FPEXT_F32_PPCF128 */ nullptr,
/* FPEXT_F64_PPCF128 */ nullptr,
/* FPEXT_F64_F128 */ "__extenddftf2",
/* FPEXT_F32_F128 */ "__extendsftf2",
/* FPEXT_F32_F64 */ "__extendsfdf2",
/* FPEXT_F16_F32 */ "__gnu_h2f_ieee",
/* FPROUND_F32_F16 */ "__gnu_f2h_ieee",
/* FPROUND_F64_F16 */ nullptr,
/* FPROUND_F80_F16 */ nullptr,
/* FPROUND_F128_F16 */ nullptr,
/* FPROUND_PPCF128_F16 */ nullptr,
/* FPROUND_F64_F32 */ "__truncdfsf2",
/* FPROUND_F80_F32 */ "__truncxfsf2",
/* FPROUND_F128_F32 */ "__trunctfsf2",
/* FPROUND_PPCF128_F32 */ nullptr,
/* FPROUND_F80_F64 */ "__truncxfdf2",
/* FPROUND_F128_F64 */ "__trunctfdf2",
/* FPROUND_PPCF128_F64 */ nullptr,
/* FPTOSINT_F32_I32 */ "__fixsfsi",
/* FPTOSINT_F32_I64 */ "__fixsfdi",
/* FPTOSINT_F32_I128 */ "__fixsfti",
/* FPTOSINT_F64_I32 */ "__fixdfsi",
/* FPTOSINT_F64_I64 */ "__fixdfdi",
/* FPTOSINT_F64_I128 */ "__fixdfti",
/* FPTOSINT_F80_I32 */ "__fixxfsi",
/* FPTOSINT_F80_I64 */ "__fixxfdi",
/* FPTOSINT_F80_I128 */ "__fixxfti",
/* FPTOSINT_F128_I32 */ "__fixtfsi",
/* FPTOSINT_F128_I64 */ "__fixtfdi",
/* FPTOSINT_F128_I128 */ "__fixtfti",
/* FPTOSINT_PPCF128_I32 */ nullptr,
/* FPTOSINT_PPCF128_I64 */ nullptr,
/* FPTOSINT_PPCF128_I128 */ nullptr,
/* FPTOUINT_F32_I32 */ "__fixunssfsi",
/* FPTOUINT_F32_I64 */ "__fixunssfdi",
/* FPTOUINT_F32_I128 */ "__fixunssfti",
/* FPTOUINT_F64_I32 */ "__fixunsdfsi",
/* FPTOUINT_F64_I64 */ "__fixunsdfdi",
/* FPTOUINT_F64_I128 */ "__fixunsdfti",
/* FPTOUINT_F80_I32 */ "__fixunsxfsi",
/* FPTOUINT_F80_I64 */ "__fixunsxfdi",
/* FPTOUINT_F80_I128 */ "__fixunsxfti",
/* FPTOUINT_F128_I32 */ "__fixunstfsi",
/* FPTOUINT_F128_I64 */ "__fixunstfdi",
/* FPTOUINT_F128_I128 */ "__fixunstfti",
/* FPTOUINT_PPCF128_I32 */ nullptr,
/* FPTOUINT_PPCF128_I64 */ nullptr,
/* FPTOUINT_PPCF128_I128 */ nullptr,
/* SINTTOFP_I32_F32 */ "__floatsisf",
/* SINTTOFP_I32_F64 */ "__floatsidf",
/* SINTTOFP_I32_F80 */ nullptr,
/* SINTTOFP_I32_F128 */ "__floatsitf",
/* SINTTOFP_I32_PPCF128 */ nullptr,
/* SINTTOFP_I64_F32 */ "__floatdisf",
/* SINTTOFP_I64_F64 */ "__floatdidf",
/* SINTTOFP_I64_F80 */ nullptr,
/* SINTTOFP_I64_F128 */ "__floatditf",
/* SINTTOFP_I64_PPCF128 */ nullptr,
/* SINTTOFP_I128_F32 */ "__floattisf",
/* SINTTOFP_I128_F64 */ "__floattidf",
/* SINTTOFP_I128_F80 */ nullptr,
/* SINTTOFP_I128_F128 */ "__floattitf",
/* SINTTOFP_I128_PPCF128 */ nullptr,
/* UINTTOFP_I32_F32 */ "__floatunsisf",
/* UINTTOFP_I32_F64 */ "__floatunsidf",
/* UINTTOFP_I32_F80 */ nullptr,
/* UINTTOFP_I32_F128 */ "__floatunsitf",
/* UINTTOFP_I32_PPCF128 */ nullptr,
/* UINTTOFP_I64_F32 */ "__floatundisf",
/* UINTTOFP_I64_F64 */ "__floatundidf",
/* UINTTOFP_I64_F80 */ nullptr,
/* UINTTOFP_I64_F128 */ "__floatunditf",
/* UINTTOFP_I64_PPCF128 */ nullptr,
/* UINTTOFP_I128_F32 */ "__floatuntisf",
/* UINTTOFP_I128_F64 */ "__floatuntidf",
/* UINTTOFP_I128_F80 */ nullptr,
/* UINTTOFP_I128_F128 */ "__floatuntitf",
/* UINTTOFP_I128_PPCF128 */ nullptr,
/* OEQ_F32 */ "__eqsf2",
/* OEQ_F64 */ "__eqdf2",
/* OEQ_F128 */ "__eqtf2",
/* OEQ_PPCF128 */ nullptr,
/* UNE_F32 */ "__nesf2",
/* UNE_F64 */ "__nedf2",
/* UNE_F128 */ "__netf2",
/* UNE_PPCF128 */ nullptr,
/* OGE_F32 */ "__gesf2",
/* OGE_F64 */ "__gedf2",
/* OGE_F128 */ "__getf2",
/* OGE_PPCF128 */ nullptr,
/* OLT_F32 */ "__ltsf2",
/* OLT_F64 */ "__ltdf2",
/* OLT_F128 */ "__lttf2",
/* OLT_PPCF128 */ nullptr,
/* OLE_F32 */ "__lesf2",
/* OLE_F64 */ "__ledf2",
/* OLE_F128 */ "__letf2",
/* OLE_PPCF128 */ nullptr,
/* OGT_F32 */ "__gtsf2",
/* OGT_F64 */ "__gtdf2",
/* OGT_F128 */ "__gttf2",
/* OGT_PPCF128 */ nullptr,
/* UO_F32 */ "__unordsf2",
/* UO_F64 */ "__unorddf2",
/* UO_F128 */ "__unordtf2",
/* UO_PPCF128 */ nullptr,
/* O_F32 */ "__unordsf2",
/* O_F64 */ "__unorddf2",
/* O_F128 */ "__unordtf2",
/* O_PPCF128 */ nullptr,
/* MEMCPY */ "memcpy",
/* MEMMOVE */ "memset",
/* MEMSET */ "memmove",
/* BZERO */ nullptr,
/* MEMCPY_ELEMENT_UNORDERED_ATOMIC_1 */ nullptr,
/* MEMCPY_ELEMENT_UNORDERED_ATOMIC_2 */ nullptr,
/* MEMCPY_ELEMENT_UNORDERED_ATOMIC_4 */ nullptr,
/* MEMCPY_ELEMENT_UNORDERED_ATOMIC_8 */ nullptr,
/* MEMCPY_ELEMENT_UNORDERED_ATOMIC_16 */ nullptr,
/* MEMMOVE_ELEMENT_UNORDERED_ATOMIC_1 */ nullptr,
/* MEMMOVE_ELEMENT_UNORDERED_ATOMIC_2 */ nullptr,
/* MEMMOVE_ELEMENT_UNORDERED_ATOMIC_4 */ nullptr,
/* MEMMOVE_ELEMENT_UNORDERED_ATOMIC_8 */ nullptr,
/* MEMMOVE_ELEMENT_UNORDERED_ATOMIC_16 */ nullptr,
/* MEMSET_ELEMENT_UNORDERED_ATOMIC_1 */ nullptr,
/* MEMSET_ELEMENT_UNORDERED_ATOMIC_2 */ nullptr,
/* MEMSET_ELEMENT_UNORDERED_ATOMIC_4 */ nullptr,
/* MEMSET_ELEMENT_UNORDERED_ATOMIC_8 */ nullptr,
/* MEMSET_ELEMENT_UNORDERED_ATOMIC_16 */ nullptr,
/* UNWIND_RESUME */ "_Unwind_Resume",
/* SYNC_VAL_COMPARE_AND_SWAP_1 */ "__sync_val_compare_and_swap_1",
/* SYNC_VAL_COMPARE_AND_SWAP_2 */ "__sync_val_compare_and_swap_2",
/* SYNC_VAL_COMPARE_AND_SWAP_4 */ "__sync_val_compare_and_swap_4",
/* SYNC_VAL_COMPARE_AND_SWAP_8 */ "__sync_val_compare_and_swap_8",
/* SYNC_VAL_COMPARE_AND_SWAP_16 */ "__sync_val_compare_and_swap_16",
/* SYNC_LOCK_TEST_AND_SET_1 */ "__sync_lock_test_and_set_1",
/* SYNC_LOCK_TEST_AND_SET_2 */ "__sync_lock_test_and_set_2",
/* SYNC_LOCK_TEST_AND_SET_4 */ "__sync_lock_test_and_set_4",
/* SYNC_LOCK_TEST_AND_SET_8 */ "__sync_lock_test_and_set_8",
/* SYNC_LOCK_TEST_AND_SET_16 */ "__sync_lock_test_and_set_16",
/* SYNC_FETCH_AND_ADD_1 */ "__sync_fetch_and_add_1",
/* SYNC_FETCH_AND_ADD_2 */ "__sync_fetch_and_add_2",
/* SYNC_FETCH_AND_ADD_4 */ "__sync_fetch_and_add_4",
/* SYNC_FETCH_AND_ADD_8 */ "__sync_fetch_and_add_8",
/* SYNC_FETCH_AND_ADD_16 */ "__sync_fetch_and_add_16",
/* SYNC_FETCH_AND_SUB_1 */ "__sync_fetch_and_sub_1",
/* SYNC_FETCH_AND_SUB_2 */ "__sync_fetch_and_sub_2",
/* SYNC_FETCH_AND_SUB_4 */ "__sync_fetch_and_sub_4",
/* SYNC_FETCH_AND_SUB_8 */ "__sync_fetch_and_sub_8",
/* SYNC_FETCH_AND_SUB_16 */ "__sync_fetch_and_sub_16",
/* SYNC_FETCH_AND_AND_1 */ "__sync_fetch_and_and_1",
/* SYNC_FETCH_AND_AND_2 */ "__sync_fetch_and_and_2",
/* SYNC_FETCH_AND_AND_4 */ "__sync_fetch_and_and_4",
/* SYNC_FETCH_AND_AND_8 */ "__sync_fetch_and_and_8",
/* SYNC_FETCH_AND_AND_16 */ "__sync_fetch_and_and_16",
/* SYNC_FETCH_AND_OR_1 */ "__sync_fetch_and_or_1",
/* SYNC_FETCH_AND_OR_2 */ "__sync_fetch_and_or_2",
/* SYNC_FETCH_AND_OR_4 */ "__sync_fetch_and_or_4",
/* SYNC_FETCH_AND_OR_8 */ "__sync_fetch_and_or_8",
/* SYNC_FETCH_AND_OR_16 */ "__sync_fetch_and_or_16",
/* SYNC_FETCH_AND_XOR_1 */ "__sync_fetch_and_xor_1",
/* SYNC_FETCH_AND_XOR_2 */ "__sync_fetch_and_xor_2",
/* SYNC_FETCH_AND_XOR_4 */ "__sync_fetch_and_xor_4",
/* SYNC_FETCH_AND_XOR_8 */ "__sync_fetch_and_xor_8",
/* SYNC_FETCH_AND_XOR_16 */ "__sync_fetch_and_xor_16",
/* SYNC_FETCH_AND_NAND_1 */ "__sync_fetch_and_nand_1",
/* SYNC_FETCH_AND_NAND_2 */ "__sync_fetch_and_nand_2",
/* SYNC_FETCH_AND_NAND_4 */ "__sync_fetch_and_nand_4",
/* SYNC_FETCH_AND_NAND_8 */ "__sync_fetch_and_nand_8",
/* SYNC_FETCH_AND_NAND_16 */ "__sync_fetch_and_nand_16",
/* SYNC_FETCH_AND_MAX_1 */ "__sync_fetch_and_max_1",
/* SYNC_FETCH_AND_MAX_2 */ "__sync_fetch_and_max_2",
/* SYNC_FETCH_AND_MAX_4 */ "__sync_fetch_and_max_4",
/* SYNC_FETCH_AND_MAX_8 */ "__sync_fetch_and_max_8",
/* SYNC_FETCH_AND_MAX_16 */ "__sync_fetch_and_max_16",
/* SYNC_FETCH_AND_UMAX_1 */ "__sync_fetch_and_umax_1",
/* SYNC_FETCH_AND_UMAX_2 */ "__sync_fetch_and_umax_2",
/* SYNC_FETCH_AND_UMAX_4 */ "__sync_fetch_and_umax_4",
/* SYNC_FETCH_AND_UMAX_8 */ "__sync_fetch_and_umax_8",
/* SYNC_FETCH_AND_UMAX_16 */ "__sync_fetch_and_umax_16",
/* SYNC_FETCH_AND_MIN_1 */ "__sync_fetch_and_min_1",
/* SYNC_FETCH_AND_MIN_2 */ "__sync_fetch_and_min_2",
/* SYNC_FETCH_AND_MIN_4 */ "__sync_fetch_and_min_4",
/* SYNC_FETCH_AND_MIN_8 */ "__sync_fetch_and_min_8",
/* SYNC_FETCH_AND_MIN_16 */ "__sync_fetch_and_min_16",
/* SYNC_FETCH_AND_UMIN_1 */ "__sync_fetch_and_umin_1",
/* SYNC_FETCH_AND_UMIN_2 */ "__sync_fetch_and_umin_2",
/* SYNC_FETCH_AND_UMIN_4 */ "__sync_fetch_and_umin_4",
/* SYNC_FETCH_AND_UMIN_8 */ "__sync_fetch_and_umin_8",
/* SYNC_FETCH_AND_UMIN_16 */ "__sync_fetch_and_umin_16",
/* ATOMIC_LOAD */ "__atomic_load",
/* ATOMIC_LOAD_1 */ "__atomic_load_1",
/* ATOMIC_LOAD_2 */ "__atomic_load_2",
/* ATOMIC_LOAD_4 */ "__atomic_load_4",
/* ATOMIC_LOAD_8 */ "__atomic_load_8",
/* ATOMIC_LOAD_16 */ "__atomic_load_16",
/* ATOMIC_STORE */ "__atomic_store",
/* ATOMIC_STORE_1 */ "__atomic_store_1",
/* ATOMIC_STORE_2 */ "__atomic_store_2",
/* ATOMIC_STORE_4 */ "__atomic_store_4",
/* ATOMIC_STORE_8 */ "__atomic_store_8",
/* ATOMIC_STORE_16 */ "__atomic_store_16",
/* ATOMIC_EXCHANGE */ "__atomic_exchange",
/* ATOMIC_EXCHANGE_1 */ "__atomic_exchange_1",
/* ATOMIC_EXCHANGE_2 */ "__atomic_exchange_2",
/* ATOMIC_EXCHANGE_4 */ "__atomic_exchange_4",
/* ATOMIC_EXCHANGE_8 */ "__atomic_exchange_8",
/* ATOMIC_EXCHANGE_16 */ "__atomic_exchange_16",
/* ATOMIC_COMPARE_EXCHANGE */ "__atomic_compare_exchange",
/* ATOMIC_COMPARE_EXCHANGE_1 */ "__atomic_compare_exchange_1",
/* ATOMIC_COMPARE_EXCHANGE_2 */ "__atomic_compare_exchange_2",
/* ATOMIC_COMPARE_EXCHANGE_4 */ "__atomic_compare_exchange_4",
/* ATOMIC_COMPARE_EXCHANGE_8 */ "__atomic_compare_exchange_8",
/* ATOMIC_COMPARE_EXCHANGE_16 */ "__atomic_compare_exchange_16",
/* ATOMIC_FETCH_ADD_1 */ "__atomic_fetch_add_1",
/* ATOMIC_FETCH_ADD_2 */ "__atomic_fetch_add_2",
/* ATOMIC_FETCH_ADD_4 */ "__atomic_fetch_add_4",
/* ATOMIC_FETCH_ADD_8 */ "__atomic_fetch_add_8",
/* ATOMIC_FETCH_ADD_16 */ "__atomic_fetch_add_16",
/* ATOMIC_FETCH_SUB_1 */ "__atomic_fetch_sub_1",
/* ATOMIC_FETCH_SUB_2 */ "__atomic_fetch_sub_2",
/* ATOMIC_FETCH_SUB_4 */ "__atomic_fetch_sub_4",
/* ATOMIC_FETCH_SUB_8 */ "__atomic_fetch_sub_8",
/* ATOMIC_FETCH_SUB_16 */ "__atomic_fetch_sub_16",
/* ATOMIC_FETCH_AND_1 */ "__atomic_fetch_and_1",
/* ATOMIC_FETCH_AND_2 */ "__atomic_fetch_and_2",
/* ATOMIC_FETCH_AND_4 */ "__atomic_fetch_and_4",
/* ATOMIC_FETCH_AND_8 */ "__atomic_fetch_and_8",
/* ATOMIC_FETCH_AND_16 */ "__atomic_fetch_and_16",
/* ATOMIC_FETCH_OR_1 */ "__atomic_fetch_or_1",
/* ATOMIC_FETCH_OR_2 */ "__atomic_fetch_or_2",
/* ATOMIC_FETCH_OR_4 */ "__atomic_fetch_or_4",
/* ATOMIC_FETCH_OR_8 */ "__atomic_fetch_or_8",
/* ATOMIC_FETCH_OR_16 */ "__atomic_fetch_or_16",
/* ATOMIC_FETCH_XOR_1 */ "__atomic_fetch_xor_1",
/* ATOMIC_FETCH_XOR_2 */ "__atomic_fetch_xor_2",
/* ATOMIC_FETCH_XOR_4 */ "__atomic_fetch_xor_4",
/* ATOMIC_FETCH_XOR_8 */ "__atomic_fetch_xor_8",
/* ATOMIC_FETCH_XOR_16 */ "__atomic_fetch_xor_16",
/* ATOMIC_FETCH_NAND_1 */ "__atomic_fetch_nand_1",
/* ATOMIC_FETCH_NAND_2 */ "__atomic_fetch_nand_2",
/* ATOMIC_FETCH_NAND_4 */ "__atomic_fetch_nand_4",
/* ATOMIC_FETCH_NAND_8 */ "__atomic_fetch_nand_8",
/* ATOMIC_FETCH_NAND_16 */ "__atomic_fetch_nand_16",
/* STACKPROTECTOR_CHECK_FAIL */ "__stack_chk_fail",
/* DEOPTIMIZE */ "__llvm_deoptimize",
};
void llvm::GetSignature(const WebAssemblySubtarget &Subtarget,
RTLIB::Libcall LC, SmallVectorImpl<wasm::ValType> &Rets,
SmallVectorImpl<wasm::ValType> &Params) {
assert(Rets.empty());
assert(Params.empty());
WebAssembly::ExprType iPTR = Subtarget.hasAddr64() ?
WebAssembly::ExprType::I64 :
WebAssembly::ExprType::I32;
switch (RuntimeLibcallSignatures[LC]) {
case func:
break;
case f32_func_f32:
Rets.push_back(wasm::ValType::F32);
Params.push_back(wasm::ValType::F32);
break;
case f32_func_f64:
Rets.push_back(wasm::ValType::F32);
Params.push_back(wasm::ValType::F64);
break;
case f32_func_i32:
Rets.push_back(wasm::ValType::F32);
Params.push_back(wasm::ValType::I32);
break;
case f32_func_i64:
Rets.push_back(wasm::ValType::F32);
Params.push_back(wasm::ValType::I64);
break;
case f32_func_i16:
Rets.push_back(wasm::ValType::F32);
Params.push_back(wasm::ValType::I32);
break;
case f64_func_f32:
Rets.push_back(wasm::ValType::F64);
Params.push_back(wasm::ValType::F32);
break;
case f64_func_f64:
Rets.push_back(wasm::ValType::F64);
Params.push_back(wasm::ValType::F64);
break;
case f64_func_i32:
Rets.push_back(wasm::ValType::F64);
Params.push_back(wasm::ValType::I32);
break;
case f64_func_i64:
Rets.push_back(wasm::ValType::F64);
Params.push_back(wasm::ValType::I64);
break;
case i32_func_f32:
Rets.push_back(wasm::ValType::I32);
Params.push_back(wasm::ValType::F32);
break;
case i32_func_f64:
Rets.push_back(wasm::ValType::I32);
Params.push_back(wasm::ValType::F64);
break;
case i32_func_i32:
Rets.push_back(wasm::ValType::I32);
Params.push_back(wasm::ValType::I32);
break;
case i64_func_f32:
Rets.push_back(wasm::ValType::I64);
Params.push_back(wasm::ValType::F32);
break;
case i64_func_f64:
Rets.push_back(wasm::ValType::I64);
Params.push_back(wasm::ValType::F64);
break;
case i64_func_i64:
Rets.push_back(wasm::ValType::I64);
Params.push_back(wasm::ValType::I64);
break;
case f32_func_f32_f32:
Rets.push_back(wasm::ValType::F32);
Params.push_back(wasm::ValType::F32);
Params.push_back(wasm::ValType::F32);
break;
case f32_func_f32_i32:
Rets.push_back(wasm::ValType::F32);
Params.push_back(wasm::ValType::F32);
Params.push_back(wasm::ValType::I32);
break;
case f32_func_i64_i64:
Rets.push_back(wasm::ValType::F32);
Params.push_back(wasm::ValType::I64);
Params.push_back(wasm::ValType::I64);
break;
case f64_func_f64_f64:
Rets.push_back(wasm::ValType::F64);
Params.push_back(wasm::ValType::F64);
Params.push_back(wasm::ValType::F64);
break;
case f64_func_f64_i32:
Rets.push_back(wasm::ValType::F64);
Params.push_back(wasm::ValType::F64);
Params.push_back(wasm::ValType::I32);
break;
case f64_func_i64_i64:
Rets.push_back(wasm::ValType::F64);
Params.push_back(wasm::ValType::I64);
Params.push_back(wasm::ValType::I64);
break;
case i16_func_f32:
Rets.push_back(wasm::ValType::I32);
Params.push_back(wasm::ValType::F32);
break;
case i8_func_i8_i8:
Rets.push_back(wasm::ValType::I32);
Params.push_back(wasm::ValType::I32);
Params.push_back(wasm::ValType::I32);
break;
case func_f32_iPTR_iPTR:
Params.push_back(wasm::ValType::F32);
Params.push_back(wasm::ValType(iPTR));
Params.push_back(wasm::ValType(iPTR));
break;
case func_f64_iPTR_iPTR:
Params.push_back(wasm::ValType::F64);
Params.push_back(wasm::ValType(iPTR));
Params.push_back(wasm::ValType(iPTR));
break;
case i16_func_i16_i16:
Rets.push_back(wasm::ValType::I32);
Params.push_back(wasm::ValType::I32);
Params.push_back(wasm::ValType::I32);
break;
case i32_func_f32_f32:
Rets.push_back(wasm::ValType::I32);
Params.push_back(wasm::ValType::F32);
Params.push_back(wasm::ValType::F32);
break;
case i32_func_f64_f64:
Rets.push_back(wasm::ValType::I32);
Params.push_back(wasm::ValType::F64);
Params.push_back(wasm::ValType::F64);
break;
case i32_func_i32_i32:
Rets.push_back(wasm::ValType::I32);
Params.push_back(wasm::ValType::I32);
Params.push_back(wasm::ValType::I32);
break;
case i64_func_i64_i64:
Rets.push_back(wasm::ValType::I64);
Params.push_back(wasm::ValType::I64);
Params.push_back(wasm::ValType::I64);
break;
case i64_i64_func_f32:
#if 0 // TODO: Enable this when wasm gets multiple-return-value support.
Rets.push_back(wasm::ValType::I64);
Rets.push_back(wasm::ValType::I64);
#else
Params.push_back(wasm::ValType(iPTR));
#endif
Params.push_back(wasm::ValType::F32);
break;
case i64_i64_func_f64:
#if 0 // TODO: Enable this when wasm gets multiple-return-value support.
Rets.push_back(wasm::ValType::I64);
Rets.push_back(wasm::ValType::I64);
#else
Params.push_back(wasm::ValType(iPTR));
#endif
Params.push_back(wasm::ValType::F64);
break;
case i16_i16_func_i16_i16:
#if 0 // TODO: Enable this when wasm gets multiple-return-value support.
Rets.push_back(wasm::ValType::I32);
Rets.push_back(wasm::ValType::I32);
#else
Params.push_back(wasm::ValType(iPTR));
#endif
Params.push_back(wasm::ValType::I32);
Params.push_back(wasm::ValType::I32);
break;
case i32_i32_func_i32_i32:
#if 0 // TODO: Enable this when wasm gets multiple-return-value support.
Rets.push_back(wasm::ValType::I32);
Rets.push_back(wasm::ValType::I32);
#else
Params.push_back(wasm::ValType(iPTR));
#endif
Params.push_back(wasm::ValType::I32);
Params.push_back(wasm::ValType::I32);
break;
case i64_i64_func_i64_i64:
#if 0 // TODO: Enable this when wasm gets multiple-return-value support.
Rets.push_back(wasm::ValType::I64);
Rets.push_back(wasm::ValType::I64);
#else
Params.push_back(wasm::ValType(iPTR));
#endif
Params.push_back(wasm::ValType::I64);
Params.push_back(wasm::ValType::I64);
break;
case i64_i64_func_i64_i64_i64_i64:
#if 0 // TODO: Enable this when wasm gets multiple-return-value support.
Rets.push_back(wasm::ValType::I64);
Rets.push_back(wasm::ValType::I64);
#else
Params.push_back(wasm::ValType(iPTR));
#endif
Params.push_back(wasm::ValType::I64);
Params.push_back(wasm::ValType::I64);
Params.push_back(wasm::ValType::I64);
Params.push_back(wasm::ValType::I64);
break;
case i64_i64_i64_i64_func_i64_i64_i64_i64:
#if 0 // TODO: Enable this when wasm gets multiple-return-value support.
Rets.push_back(wasm::ValType::I64);
Rets.push_back(wasm::ValType::I64);
Rets.push_back(wasm::ValType::I64);
Rets.push_back(wasm::ValType::I64);
#else
Params.push_back(wasm::ValType(iPTR));
#endif
Params.push_back(wasm::ValType::I64);
Params.push_back(wasm::ValType::I64);
Params.push_back(wasm::ValType::I64);
Params.push_back(wasm::ValType::I64);
break;
case i64_i64_func_i64_i64_i32:
#if 0 // TODO: Enable this when wasm gets multiple-return-value support.
Rets.push_back(wasm::ValType::I64);
Rets.push_back(wasm::ValType::I64);
Rets.push_back(wasm::ValType::I64);
Rets.push_back(wasm::ValType::I64);
#else
Params.push_back(wasm::ValType(iPTR));
#endif
Params.push_back(wasm::ValType::I64);
Params.push_back(wasm::ValType::I64);
Params.push_back(wasm::ValType::I32);
break;
case iPTR_func_iPTR_i32_iPTR:
Rets.push_back(wasm::ValType(iPTR));
Params.push_back(wasm::ValType(iPTR));
Params.push_back(wasm::ValType::I32);
Params.push_back(wasm::ValType(iPTR));
break;
case iPTR_func_iPTR_iPTR_iPTR:
Rets.push_back(wasm::ValType(iPTR));
Params.push_back(wasm::ValType(iPTR));
Params.push_back(wasm::ValType(iPTR));
Params.push_back(wasm::ValType(iPTR));
break;
case f32_func_f32_f32_f32:
Rets.push_back(wasm::ValType::F32);
Params.push_back(wasm::ValType::F32);
Params.push_back(wasm::ValType::F32);
Params.push_back(wasm::ValType::F32);
break;
case f64_func_f64_f64_f64:
Rets.push_back(wasm::ValType::F64);
Params.push_back(wasm::ValType::F64);
Params.push_back(wasm::ValType::F64);
Params.push_back(wasm::ValType::F64);
break;
case func_i64_i64_iPTR_iPTR:
Params.push_back(wasm::ValType::I64);
Params.push_back(wasm::ValType::I64);
Params.push_back(wasm::ValType(iPTR));
Params.push_back(wasm::ValType(iPTR));
break;
case func_iPTR_f32:
Params.push_back(wasm::ValType(iPTR));
Params.push_back(wasm::ValType::F32);
break;
case func_iPTR_f64:
Params.push_back(wasm::ValType(iPTR));
Params.push_back(wasm::ValType::F64);
break;
case func_iPTR_i32:
Params.push_back(wasm::ValType(iPTR));
Params.push_back(wasm::ValType::I32);
break;
case func_iPTR_i64:
Params.push_back(wasm::ValType(iPTR));
Params.push_back(wasm::ValType::I64);
break;
case func_iPTR_i64_i64:
Params.push_back(wasm::ValType(iPTR));
Params.push_back(wasm::ValType::I64);
Params.push_back(wasm::ValType::I64);
break;
case func_iPTR_i64_i64_i64_i64:
Params.push_back(wasm::ValType(iPTR));
Params.push_back(wasm::ValType::I64);
Params.push_back(wasm::ValType::I64);
Params.push_back(wasm::ValType::I64);
Params.push_back(wasm::ValType::I64);
break;
case func_iPTR_i64_i64_i64_i64_i64_i64:
Params.push_back(wasm::ValType(iPTR));
Params.push_back(wasm::ValType::I64);
Params.push_back(wasm::ValType::I64);
Params.push_back(wasm::ValType::I64);
Params.push_back(wasm::ValType::I64);
Params.push_back(wasm::ValType::I64);
Params.push_back(wasm::ValType::I64);
break;
case i32_func_i64_i64:
Rets.push_back(wasm::ValType::I32);
Params.push_back(wasm::ValType::I64);
Params.push_back(wasm::ValType::I64);
break;
case i32_func_i64_i64_i64_i64:
Rets.push_back(wasm::ValType::I32);
Params.push_back(wasm::ValType::I64);
Params.push_back(wasm::ValType::I64);
Params.push_back(wasm::ValType::I64);
Params.push_back(wasm::ValType::I64);
break;
case unsupported:
llvm_unreachable("unsupported runtime library signature");
}
}
void llvm::GetSignature(const WebAssemblySubtarget &Subtarget, const char *Name,
SmallVectorImpl<wasm::ValType> &Rets,
SmallVectorImpl<wasm::ValType> &Params) {
assert(strcmp(RuntimeLibcallNames[RTLIB::DEOPTIMIZE], "__llvm_deoptimize") ==
0);
for (size_t i = 0, e = RTLIB::UNKNOWN_LIBCALL; i < e; ++i)
if (RuntimeLibcallNames[i] && strcmp(RuntimeLibcallNames[i], Name) == 0)
return GetSignature(Subtarget, RTLIB::Libcall(i), Rets, Params);
llvm_unreachable("unexpected runtime library name");
}