diff options
Diffstat (limited to 'llvm/lib/Target/WebAssembly')
6 files changed, 222 insertions, 251 deletions
diff --git a/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.cpp b/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.cpp index 9ccaf433b5d..9fd3ec81c25 100644 --- a/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.cpp +++ b/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.cpp @@ -141,12 +141,12 @@ extern "C" void LLVMInitializeWebAssemblyTargetMC() { } } -WebAssembly::ValType WebAssembly::toValType(const MVT &Ty) { +wasm::ValType WebAssembly::toValType(const MVT &Ty) { switch (Ty.SimpleTy) { - case MVT::i32: return WebAssembly::ValType::I32; - case MVT::i64: return WebAssembly::ValType::I64; - case MVT::f32: return WebAssembly::ValType::F32; - case MVT::f64: return WebAssembly::ValType::F64; + case MVT::i32: return wasm::ValType::I32; + case MVT::i64: return wasm::ValType::I64; + case MVT::f32: return wasm::ValType::F32; + case MVT::f64: return wasm::ValType::F64; default: llvm_unreachable("unexpected type"); } } diff --git a/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.h b/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.h index 1108f5f5a32..795658ca96b 100644 --- a/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.h +++ b/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.h @@ -17,6 +17,7 @@ #include "llvm/MC/MCInstrDesc.h" #include "llvm/Support/DataTypes.h" +#include "llvm/Support/Wasm.h" namespace llvm { @@ -149,40 +150,25 @@ static const unsigned StoreP2AlignOperandNo = 0; /// This is used to indicate block signatures. enum class ExprType { - Void = 0x40, - I32 = 0x7f, - I64 = 0x7e, - F32 = 0x7d, - F64 = 0x7c, - I8x16 = 0x7b, - I16x8 = 0x7a, - I32x4 = 0x79, - F32x4 = 0x78, - B8x16 = 0x77, - B16x8 = 0x76, - B32x4 = 0x75 -}; - -/// This is used to indicate local types. -enum class ValType { - I32 = 0x7f, - I64 = 0x7e, - F32 = 0x7d, - F64 = 0x7c, - I8x16 = 0x7b, - I16x8 = 0x7a, - I32x4 = 0x79, - F32x4 = 0x78, - B8x16 = 0x77, - B16x8 = 0x76, - B32x4 = 0x75 + Void = -0x40, + I32 = -0x01, + I64 = -0x02, + F32 = -0x03, + F64 = -0x04, + I8x16 = -0x05, + I16x8 = -0x06, + I32x4 = -0x07, + F32x4 = -0x08, + B8x16 = -0x09, + B16x8 = -0x0a, + B32x4 = -0x0b }; /// Instruction opcodes emitted via means other than CodeGen. static const unsigned Nop = 0x01; static const unsigned End = 0x0b; -ValType toValType(const MVT &Ty); +wasm::ValType toValType(const MVT &Ty); } // end namespace WebAssembly } // end namespace llvm diff --git a/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.cpp b/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.cpp index 5a285935e2b..a499cc23a6b 100644 --- a/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.cpp +++ b/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.cpp @@ -152,30 +152,20 @@ void WebAssemblyTargetELFStreamer::emitIndirectFunctionType( void WebAssemblyTargetELFStreamer::emitGlobalImport(StringRef name) { } -static unsigned MVT2WasmType(MVT Ty) { - switch (Ty.SimpleTy) { - case MVT::i32: return wasm::WASM_TYPE_I32; - case MVT::i64: return wasm::WASM_TYPE_I64; - case MVT::f32: return wasm::WASM_TYPE_F32; - case MVT::f64: return wasm::WASM_TYPE_F64; - default: llvm_unreachable("unsupported type"); - } -} - void WebAssemblyTargetWasmStreamer::emitParam(MCSymbol *Symbol, ArrayRef<MVT> Types) { - SmallVector<unsigned, 4> Params; + SmallVector<wasm::ValType, 4> Params; for (MVT Ty : Types) - Params.push_back(MVT2WasmType(Ty)); + Params.push_back(WebAssembly::toValType(Ty)); cast<MCSymbolWasm>(Symbol)->setParams(std::move(Params)); } void WebAssemblyTargetWasmStreamer::emitResult(MCSymbol *Symbol, ArrayRef<MVT> Types) { - SmallVector<unsigned, 4> Returns; + SmallVector<wasm::ValType, 4> Returns; for (MVT Ty : Types) - Returns.push_back(MVT2WasmType(Ty)); + Returns.push_back(WebAssembly::toValType(Ty)); cast<MCSymbolWasm>(Symbol)->setReturns(std::move(Returns)); } diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyMCInstLower.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyMCInstLower.cpp index 354662d9d3d..ff186eb9150 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyMCInstLower.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyMCInstLower.cpp @@ -45,32 +45,32 @@ WebAssemblyMCInstLower::GetGlobalAddressSymbol(const MachineOperand &MO) const { const TargetMachine &TM = MF.getTarget(); const Function &CurrentFunc = *MF.getFunction(); - SmallVector<unsigned, 4> Returns; - SmallVector<unsigned, 4> Params; + SmallVector<wasm::ValType, 4> Returns; + SmallVector<wasm::ValType, 4> Params; - WebAssembly::ValType iPTR = + wasm::ValType iPTR = MF.getSubtarget<WebAssemblySubtarget>().hasAddr64() ? - WebAssembly::ValType::I64 : - WebAssembly::ValType::I32; + wasm::ValType::I64 : + wasm::ValType::I32; SmallVector<MVT, 4> ResultMVTs; ComputeLegalValueVTs(CurrentFunc, TM, FuncTy->getReturnType(), ResultMVTs); // WebAssembly can't currently handle returning tuples. if (ResultMVTs.size() <= 1) for (MVT ResultMVT : ResultMVTs) - Returns.push_back(unsigned(WebAssembly::toValType(ResultMVT))); + Returns.push_back(WebAssembly::toValType(ResultMVT)); else - Params.push_back(unsigned(iPTR)); + Params.push_back(iPTR); for (Type *Ty : FuncTy->params()) { SmallVector<MVT, 4> ParamMVTs; ComputeLegalValueVTs(CurrentFunc, TM, Ty, ParamMVTs); for (MVT ParamMVT : ParamMVTs) - Params.push_back(unsigned(WebAssembly::toValType(ParamMVT))); + Params.push_back(WebAssembly::toValType(ParamMVT)); } if (FuncTy->isVarArg()) - Params.push_back(unsigned(iPTR)); + Params.push_back(iPTR); WasmSym->setReturns(std::move(Returns)); WasmSym->setParams(std::move(Params)); @@ -95,8 +95,8 @@ MCSymbol *WebAssemblyMCInstLower::GetExternalSymbolSymbol( if (strcmp(Name, "__stack_pointer") == 0) return WasmSym; - SmallVector<unsigned, 4> Returns; - SmallVector<unsigned, 4> Params; + SmallVector<wasm::ValType, 4> Returns; + SmallVector<wasm::ValType, 4> Params; GetSignature(Subtarget, Name, Returns, Params); WasmSym->setReturns(std::move(Returns)); @@ -128,15 +128,15 @@ MCOperand WebAssemblyMCInstLower::LowerSymbolOperand(MCSymbol *Sym, } // Return the WebAssembly type associated with the given register class. -static unsigned getType(const TargetRegisterClass *RC) { +static wasm::ValType getType(const TargetRegisterClass *RC) { if (RC == &WebAssembly::I32RegClass) - return unsigned(WebAssembly::ExprType::I32); + return wasm::ValType::I32; if (RC == &WebAssembly::I64RegClass) - return unsigned(WebAssembly::ExprType::I64); + return wasm::ValType::I64; if (RC == &WebAssembly::F32RegClass) - return unsigned(WebAssembly::ExprType::F32); + return wasm::ValType::F32; if (RC == &WebAssembly::F64RegClass) - return unsigned(WebAssembly::ExprType::F64); + return wasm::ValType::F64; llvm_unreachable("Unexpected register class"); } @@ -172,8 +172,8 @@ void WebAssemblyMCInstLower::Lower(const MachineInstr *MI, if (Info.OperandType == WebAssembly::OPERAND_TYPEINDEX) { MCSymbol *Sym = Printer.createTempSymbol("typeindex"); if (!isa<MCSymbolELF>(Sym)) { - SmallVector<unsigned, 4> Returns; - SmallVector<unsigned, 4> Params; + SmallVector<wasm::ValType, 4> Returns; + SmallVector<wasm::ValType, 4> Params; const MachineRegisterInfo &MRI = MI->getParent()->getParent()->getRegInfo(); diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp index 974aa52ec5d..c02ef4a1c39 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp @@ -971,10 +971,8 @@ RuntimeLibcallNames[RTLIB::UNKNOWN_LIBCALL] = { }; void llvm::GetSignature(const WebAssemblySubtarget &Subtarget, - RTLIB::Libcall LC, - SmallVectorImpl<unsigned> &Rets, - SmallVectorImpl<unsigned> &Params) -{ + RTLIB::Libcall LC, SmallVectorImpl<wasm::ValType> &Rets, + SmallVectorImpl<wasm::ValType> &Params) { assert(Rets.empty()); assert(Params.empty()); @@ -986,315 +984,313 @@ void llvm::GetSignature(const WebAssemblySubtarget &Subtarget, case func: break; case f32_func_f32: - Rets.push_back(unsigned(WebAssembly::ExprType::F32)); - Params.push_back(unsigned(WebAssembly::ExprType::F32)); + Rets.push_back(wasm::ValType::F32); + Params.push_back(wasm::ValType::F32); break; case f32_func_f64: - Rets.push_back(unsigned(WebAssembly::ExprType::F32)); - Params.push_back(unsigned(WebAssembly::ExprType::F64)); + Rets.push_back(wasm::ValType::F32); + Params.push_back(wasm::ValType::F64); break; case f32_func_i32: - Rets.push_back(unsigned(WebAssembly::ExprType::F32)); - Params.push_back(unsigned(WebAssembly::ExprType::I32)); + Rets.push_back(wasm::ValType::F32); + Params.push_back(wasm::ValType::I32); break; case f32_func_i64: - Rets.push_back(unsigned(WebAssembly::ExprType::F32)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); + Rets.push_back(wasm::ValType::F32); + Params.push_back(wasm::ValType::I64); break; case f32_func_i16: - Rets.push_back(unsigned(WebAssembly::ExprType::F32)); - Params.push_back(unsigned(WebAssembly::ExprType::I32)); + Rets.push_back(wasm::ValType::F32); + Params.push_back(wasm::ValType::I32); break; case f64_func_f32: - Rets.push_back(unsigned(WebAssembly::ExprType::F64)); - Params.push_back(unsigned(WebAssembly::ExprType::F32)); + Rets.push_back(wasm::ValType::F64); + Params.push_back(wasm::ValType::F32); break; case f64_func_f64: - Rets.push_back(unsigned(WebAssembly::ExprType::F64)); - Params.push_back(unsigned(WebAssembly::ExprType::F64)); + Rets.push_back(wasm::ValType::F64); + Params.push_back(wasm::ValType::F64); break; case f64_func_i32: - Rets.push_back(unsigned(WebAssembly::ExprType::F64)); - Params.push_back(unsigned(WebAssembly::ExprType::I32)); + Rets.push_back(wasm::ValType::F64); + Params.push_back(wasm::ValType::I32); break; case f64_func_i64: - Rets.push_back(unsigned(WebAssembly::ExprType::F64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); + Rets.push_back(wasm::ValType::F64); + Params.push_back(wasm::ValType::I64); break; case i32_func_f32: - Rets.push_back(unsigned(WebAssembly::ExprType::I32)); - Params.push_back(unsigned(WebAssembly::ExprType::F32)); + Rets.push_back(wasm::ValType::I32); + Params.push_back(wasm::ValType::F32); break; case i32_func_f64: - Rets.push_back(unsigned(WebAssembly::ExprType::I32)); - Params.push_back(unsigned(WebAssembly::ExprType::F64)); + Rets.push_back(wasm::ValType::I32); + Params.push_back(wasm::ValType::F64); break; case i32_func_i32: - Rets.push_back(unsigned(WebAssembly::ExprType::I32)); - Params.push_back(unsigned(WebAssembly::ExprType::I32)); + Rets.push_back(wasm::ValType::I32); + Params.push_back(wasm::ValType::I32); break; case i64_func_f32: - Rets.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::F32)); + Rets.push_back(wasm::ValType::I64); + Params.push_back(wasm::ValType::F32); break; case i64_func_f64: - Rets.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::F64)); + Rets.push_back(wasm::ValType::I64); + Params.push_back(wasm::ValType::F64); break; case i64_func_i64: - Rets.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); + Rets.push_back(wasm::ValType::I64); + Params.push_back(wasm::ValType::I64); break; case f32_func_f32_f32: - Rets.push_back(unsigned(WebAssembly::ExprType::F32)); - Params.push_back(unsigned(WebAssembly::ExprType::F32)); - Params.push_back(unsigned(WebAssembly::ExprType::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(unsigned(WebAssembly::ExprType::F32)); - Params.push_back(unsigned(WebAssembly::ExprType::F32)); - Params.push_back(unsigned(WebAssembly::ExprType::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(unsigned(WebAssembly::ExprType::F32)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::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(unsigned(WebAssembly::ExprType::F64)); - Params.push_back(unsigned(WebAssembly::ExprType::F64)); - Params.push_back(unsigned(WebAssembly::ExprType::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(unsigned(WebAssembly::ExprType::F64)); - Params.push_back(unsigned(WebAssembly::ExprType::F64)); - Params.push_back(unsigned(WebAssembly::ExprType::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(unsigned(WebAssembly::ExprType::F64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::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(unsigned(WebAssembly::ExprType::I32)); - Params.push_back(unsigned(WebAssembly::ExprType::F32)); + Rets.push_back(wasm::ValType::I32); + Params.push_back(wasm::ValType::F32); break; case i8_func_i8_i8: - Rets.push_back(unsigned(WebAssembly::ExprType::I32)); - Params.push_back(unsigned(WebAssembly::ExprType::I32)); - Params.push_back(unsigned(WebAssembly::ExprType::I32)); + 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(unsigned(WebAssembly::ExprType::F32)); - Params.push_back(unsigned(iPTR)); - Params.push_back(unsigned(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(unsigned(WebAssembly::ExprType::F64)); - Params.push_back(unsigned(iPTR)); - Params.push_back(unsigned(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(unsigned(WebAssembly::ExprType::I32)); - Params.push_back(unsigned(WebAssembly::ExprType::I32)); - Params.push_back(unsigned(WebAssembly::ExprType::I32)); + 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(unsigned(WebAssembly::ExprType::I32)); - Params.push_back(unsigned(WebAssembly::ExprType::F32)); - Params.push_back(unsigned(WebAssembly::ExprType::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(unsigned(WebAssembly::ExprType::I32)); - Params.push_back(unsigned(WebAssembly::ExprType::F64)); - Params.push_back(unsigned(WebAssembly::ExprType::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(unsigned(WebAssembly::ExprType::I32)); - Params.push_back(unsigned(WebAssembly::ExprType::I32)); - Params.push_back(unsigned(WebAssembly::ExprType::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(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::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(unsigned(WebAssembly::ExprType::I64)); - Rets.push_back(unsigned(WebAssembly::ExprType::I64)); + Rets.push_back(wasm::ValType::I64); + Rets.push_back(wasm::ValType::I64); #else - Params.push_back(unsigned(iPTR)); + Params.push_back(wasm::ValType(iPTR)); #endif - Params.push_back(unsigned(WebAssembly::ExprType::F32)); + 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(unsigned(WebAssembly::ExprType::I64)); - Rets.push_back(unsigned(WebAssembly::ExprType::I64)); + Rets.push_back(wasm::ValType::I64); + Rets.push_back(wasm::ValType::I64); #else - Params.push_back(unsigned(iPTR)); + Params.push_back(wasm::ValType(iPTR)); #endif - Params.push_back(unsigned(WebAssembly::ExprType::F64)); + 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(unsigned(WebAssembly::ExprType::I32)); - Rets.push_back(unsigned(WebAssembly::ExprType::I32)); + Rets.push_back(wasm::ValType::I32); + Rets.push_back(wasm::ValType::I32); #else - Params.push_back(unsigned(iPTR)); + Params.push_back(wasm::ValType(iPTR)); #endif - Params.push_back(unsigned(WebAssembly::ExprType::I32)); - Params.push_back(unsigned(WebAssembly::ExprType::I32)); + 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(unsigned(WebAssembly::ExprType::I32)); - Rets.push_back(unsigned(WebAssembly::ExprType::I32)); + Rets.push_back(wasm::ValType::I32); + Rets.push_back(wasm::ValType::I32); #else - Params.push_back(unsigned(iPTR)); + Params.push_back(wasm::ValType(iPTR)); #endif - Params.push_back(unsigned(WebAssembly::ExprType::I32)); - Params.push_back(unsigned(WebAssembly::ExprType::I32)); + 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(unsigned(WebAssembly::ExprType::I64)); - Rets.push_back(unsigned(WebAssembly::ExprType::I64)); + Rets.push_back(wasm::ValType::I64); + Rets.push_back(wasm::ValType::I64); #else - Params.push_back(unsigned(iPTR)); + Params.push_back(wasm::ValType(iPTR)); #endif - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); + 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(unsigned(WebAssembly::ExprType::I64)); - Rets.push_back(unsigned(WebAssembly::ExprType::I64)); + Rets.push_back(wasm::ValType::I64); + Rets.push_back(wasm::ValType::I64); #else - Params.push_back(unsigned(iPTR)); + Params.push_back(wasm::ValType(iPTR)); #endif - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::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 i64_i64_i64_i64_func_i64_i64_i64_i64: #if 0 // TODO: Enable this when wasm gets multiple-return-value support. - Rets.push_back(unsigned(WebAssembly::ExprType::I64)); - Rets.push_back(unsigned(WebAssembly::ExprType::I64)); - Rets.push_back(unsigned(WebAssembly::ExprType::I64)); - Rets.push_back(unsigned(WebAssembly::ExprType::I64)); + 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(unsigned(iPTR)); + Params.push_back(wasm::ValType(iPTR)); #endif - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::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 i64_i64_func_i64_i64_i32: #if 0 // TODO: Enable this when wasm gets multiple-return-value support. - Rets.push_back(unsigned(WebAssembly::ExprType::I64)); - Rets.push_back(unsigned(WebAssembly::ExprType::I64)); - Rets.push_back(unsigned(WebAssembly::ExprType::I64)); - Rets.push_back(unsigned(WebAssembly::ExprType::I64)); + 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(unsigned(iPTR)); + Params.push_back(wasm::ValType(iPTR)); #endif - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I32)); + 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(unsigned(iPTR)); - Params.push_back(unsigned(iPTR)); - Params.push_back(unsigned(WebAssembly::ExprType::I32)); - Params.push_back(unsigned(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(unsigned(iPTR)); - Params.push_back(unsigned(iPTR)); - Params.push_back(unsigned(iPTR)); - Params.push_back(unsigned(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(unsigned(WebAssembly::ExprType::F32)); - Params.push_back(unsigned(WebAssembly::ExprType::F32)); - Params.push_back(unsigned(WebAssembly::ExprType::F32)); - Params.push_back(unsigned(WebAssembly::ExprType::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(unsigned(WebAssembly::ExprType::F64)); - Params.push_back(unsigned(WebAssembly::ExprType::F64)); - Params.push_back(unsigned(WebAssembly::ExprType::F64)); - Params.push_back(unsigned(WebAssembly::ExprType::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(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(iPTR)); - Params.push_back(unsigned(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(unsigned(iPTR)); - Params.push_back(unsigned(WebAssembly::ExprType::F32)); + Params.push_back(wasm::ValType(iPTR)); + Params.push_back(wasm::ValType::F32); break; case func_iPTR_f64: - Params.push_back(unsigned(iPTR)); - Params.push_back(unsigned(WebAssembly::ExprType::F64)); + Params.push_back(wasm::ValType(iPTR)); + Params.push_back(wasm::ValType::F64); break; case func_iPTR_i32: - Params.push_back(unsigned(iPTR)); - Params.push_back(unsigned(WebAssembly::ExprType::I32)); + Params.push_back(wasm::ValType(iPTR)); + Params.push_back(wasm::ValType::I32); break; case func_iPTR_i64: - Params.push_back(unsigned(iPTR)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); + Params.push_back(wasm::ValType(iPTR)); + Params.push_back(wasm::ValType::I64); break; case func_iPTR_i64_i64: - Params.push_back(unsigned(iPTR)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::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(unsigned(iPTR)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::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(unsigned(iPTR)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::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(unsigned(WebAssembly::ExprType::I32)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::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(unsigned(WebAssembly::ExprType::I32)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::I64)); - Params.push_back(unsigned(WebAssembly::ExprType::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<unsigned> &Rets, - SmallVectorImpl<unsigned> &Params) -{ +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); diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.h b/llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.h index 690ca86a8df..12906760478 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.h +++ b/llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.h @@ -25,13 +25,12 @@ class WebAssemblySubtarget; extern void GetSignature(const WebAssemblySubtarget &Subtarget, RTLIB::Libcall LC, - SmallVectorImpl<unsigned> &Rets, - SmallVectorImpl<unsigned> &Params); + SmallVectorImpl<wasm::ValType> &Rets, + SmallVectorImpl<wasm::ValType> &Params); extern void GetSignature(const WebAssemblySubtarget &Subtarget, - const char *Name, - SmallVectorImpl<unsigned> &Rets, - SmallVectorImpl<unsigned> &Params); + const char *Name, SmallVectorImpl<wasm::ValType> &Rets, + SmallVectorImpl<wasm::ValType> &Params); } // end namespace llvm |