summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/WebAssembly
diff options
context:
space:
mode:
authorDerek Schuff <dschuff@google.com>2017-03-14 20:23:22 +0000
committerDerek Schuff <dschuff@google.com>2017-03-14 20:23:22 +0000
commite2688c432fcffff53d7d356d7530a0b139c16286 (patch)
tree2b97e836032eaecdaf9f998154ef61ff141975cd /llvm/lib/Target/WebAssembly
parent265ca535ab1c208749c05fbbb2d18ddd0047dd65 (diff)
downloadbcm5719-llvm-e2688c432fcffff53d7d356d7530a0b139c16286.tar.gz
bcm5719-llvm-e2688c432fcffff53d7d356d7530a0b139c16286.zip
[WebAssembly] Use LEB encoding for value types
Previously we were using the encoded LEB hex values for the value types. This change uses the decoded negative value and the LEB encoder to write them out. Differential Revision: https://reviews.llvm.org/D30847 Patch by Sam Clegg llvm-svn: 297777
Diffstat (limited to 'llvm/lib/Target/WebAssembly')
-rw-r--r--llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.cpp10
-rw-r--r--llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.h42
-rw-r--r--llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyTargetStreamer.cpp18
-rw-r--r--llvm/lib/Target/WebAssembly/WebAssemblyMCInstLower.cpp36
-rw-r--r--llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.cpp358
-rw-r--r--llvm/lib/Target/WebAssembly/WebAssemblyRuntimeLibcallSignatures.h9
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
OpenPOWER on IntegriCloud