summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/binary-reader-interpreter.cc74
-rw-r--r--src/binary-reader-ir.cc40
-rw-r--r--src/binary-reader-logging.cc33
-rw-r--r--src/binary-reader-logging.h12
-rw-r--r--src/binary-reader-nop.h20
-rw-r--r--src/binary-reader.cc103
-rw-r--r--src/binary-reader.h12
-rw-r--r--src/binary-writer.cc54
-rw-r--r--src/expr-visitor.cc17
-rw-r--r--src/expr-visitor.h10
-rw-r--r--src/interpreter.cc222
-rw-r--r--src/interpreter.h25
-rw-r--r--src/ir.h8
-rw-r--r--src/opcode.cc79
-rw-r--r--src/opcode.def458
-rw-r--r--src/opcode.h8
-rw-r--r--src/prebuilt/wast-lexer-gen.cc4507
-rw-r--r--src/token.cc4
-rw-r--r--src/token.h6
-rw-r--r--src/type-checker.cc42
-rw-r--r--src/type-checker.h9
-rw-r--r--src/validator.cc52
-rw-r--r--src/wast-lexer.cc65
-rw-r--r--src/wast-parser.cc72
-rw-r--r--src/wast-parser.h2
-rw-r--r--src/wat-writer.cc60
26 files changed, 4146 insertions, 1848 deletions
diff --git a/src/binary-reader-interpreter.cc b/src/binary-reader-interpreter.cc
index 19969c4e..258ffc5f 100644
--- a/src/binary-reader-interpreter.cc
+++ b/src/binary-reader-interpreter.cc
@@ -136,6 +136,18 @@ class BinaryReaderInterpreter : public BinaryReaderNop {
wabt::Result OnLocalDeclCount(Index count) override;
wabt::Result OnLocalDecl(Index decl_index, Index count, Type type) override;
+ wabt::Result OnAtomicLoadExpr(Opcode opcode,
+ uint32_t alignment_log2,
+ Address offset) override;
+ wabt::Result OnAtomicStoreExpr(Opcode opcode,
+ uint32_t alignment_log2,
+ Address offset) override;
+ wabt::Result OnAtomicRmwExpr(Opcode opcode,
+ uint32_t alignment_log2,
+ Address offset) override;
+ wabt::Result OnAtomicRmwCmpxchgExpr(Opcode opcode,
+ uint32_t alignment_log2,
+ Address offset) override;
wabt::Result OnBinaryExpr(wabt::Opcode opcode) override;
wabt::Result OnBlockExpr(Index num_types, Type* sig_types) override;
wabt::Result OnBrExpr(Index depth) override;
@@ -243,6 +255,8 @@ class BinaryReaderInterpreter : public BinaryReaderNop {
const Limits* actual_limits);
wabt::Result CheckHasMemory(wabt::Opcode opcode);
wabt::Result CheckAlign(uint32_t alignment_log2, Address natural_alignment);
+ wabt::Result CheckAtomicAlign(uint32_t alignment_log2,
+ Address natural_alignment);
wabt::Result AppendExport(Module* module,
ExternalKind kind,
@@ -1121,12 +1135,72 @@ wabt::Result BinaryReaderInterpreter::CheckAlign(uint32_t alignment_log2,
return wabt::Result::Ok;
}
+wabt::Result BinaryReaderInterpreter::CheckAtomicAlign(
+ uint32_t alignment_log2,
+ Address natural_alignment) {
+ if (alignment_log2 >= 32 || (1U << alignment_log2) != natural_alignment) {
+ PrintError("alignment must be equal to natural alignment (%u)",
+ natural_alignment);
+ return wabt::Result::Error;
+ }
+ return wabt::Result::Ok;
+}
+
wabt::Result BinaryReaderInterpreter::OnUnaryExpr(wabt::Opcode opcode) {
CHECK_RESULT(typechecker_.OnUnary(opcode));
CHECK_RESULT(EmitOpcode(opcode));
return wabt::Result::Ok;
}
+wabt::Result BinaryReaderInterpreter::OnAtomicLoadExpr(Opcode opcode,
+ uint32_t alignment_log2,
+ Address offset) {
+ CHECK_RESULT(CheckHasMemory(opcode));
+ CHECK_RESULT(CheckAtomicAlign(alignment_log2, opcode.GetMemorySize()));
+ CHECK_RESULT(typechecker_.OnAtomicLoad(opcode));
+ CHECK_RESULT(EmitOpcode(opcode));
+ CHECK_RESULT(EmitI32(module_->memory_index));
+ CHECK_RESULT(EmitI32(offset));
+ return wabt::Result::Ok;
+}
+
+wabt::Result BinaryReaderInterpreter::OnAtomicStoreExpr(Opcode opcode,
+ uint32_t alignment_log2,
+ Address offset) {
+ CHECK_RESULT(CheckHasMemory(opcode));
+ CHECK_RESULT(CheckAtomicAlign(alignment_log2, opcode.GetMemorySize()));
+ CHECK_RESULT(typechecker_.OnAtomicStore(opcode));
+ CHECK_RESULT(EmitOpcode(opcode));
+ CHECK_RESULT(EmitI32(module_->memory_index));
+ CHECK_RESULT(EmitI32(offset));
+ return wabt::Result::Ok;
+}
+
+wabt::Result BinaryReaderInterpreter::OnAtomicRmwExpr(Opcode opcode,
+ uint32_t alignment_log2,
+ Address offset) {
+ CHECK_RESULT(CheckHasMemory(opcode));
+ CHECK_RESULT(CheckAtomicAlign(alignment_log2, opcode.GetMemorySize()));
+ CHECK_RESULT(typechecker_.OnAtomicRmw(opcode));
+ CHECK_RESULT(EmitOpcode(opcode));
+ CHECK_RESULT(EmitI32(module_->memory_index));
+ CHECK_RESULT(EmitI32(offset));
+ return wabt::Result::Ok;
+}
+
+wabt::Result BinaryReaderInterpreter::OnAtomicRmwCmpxchgExpr(
+ Opcode opcode,
+ uint32_t alignment_log2,
+ Address offset) {
+ CHECK_RESULT(CheckHasMemory(opcode));
+ CHECK_RESULT(CheckAtomicAlign(alignment_log2, opcode.GetMemorySize()));
+ CHECK_RESULT(typechecker_.OnAtomicRmwCmpxchg(opcode));
+ CHECK_RESULT(EmitOpcode(opcode));
+ CHECK_RESULT(EmitI32(module_->memory_index));
+ CHECK_RESULT(EmitI32(offset));
+ return wabt::Result::Ok;
+}
+
wabt::Result BinaryReaderInterpreter::OnBinaryExpr(wabt::Opcode opcode) {
CHECK_RESULT(typechecker_.OnBinary(opcode));
CHECK_RESULT(EmitOpcode(opcode));
diff --git a/src/binary-reader-ir.cc b/src/binary-reader-ir.cc
index 70dc4fbf..f37b4ddb 100644
--- a/src/binary-reader-ir.cc
+++ b/src/binary-reader-ir.cc
@@ -116,6 +116,18 @@ class BinaryReaderIR : public BinaryReaderNop {
Result BeginFunctionBody(Index index) override;
Result OnLocalDecl(Index decl_index, Index count, Type type) override;
+ Result OnAtomicLoadExpr(Opcode opcode,
+ uint32_t alignment_log2,
+ Address offset) override;
+ Result OnAtomicStoreExpr(Opcode opcode,
+ uint32_t alignment_log2,
+ Address offset) override;
+ Result OnAtomicRmwExpr(Opcode opcode,
+ uint32_t alignment_log2,
+ Address offset) override;
+ Result OnAtomicRmwCmpxchgExpr(Opcode opcode,
+ uint32_t alignment_log2,
+ Address offset) override;
Result OnBinaryExpr(Opcode opcode) override;
Result OnBlockExpr(Index num_types, Type* sig_types) override;
Result OnBrExpr(Index depth) override;
@@ -509,6 +521,34 @@ Result BinaryReaderIR::OnLocalDecl(Index decl_index, Index count, Type type) {
return Result::Ok;
}
+Result BinaryReaderIR::OnAtomicLoadExpr(Opcode opcode,
+ uint32_t alignment_log2,
+ Address offset) {
+ return AppendExpr(
+ MakeUnique<AtomicLoadExpr>(opcode, 1 << alignment_log2, offset));
+}
+
+Result BinaryReaderIR::OnAtomicStoreExpr(Opcode opcode,
+ uint32_t alignment_log2,
+ Address offset) {
+ return AppendExpr(
+ MakeUnique<AtomicStoreExpr>(opcode, 1 << alignment_log2, offset));
+}
+
+Result BinaryReaderIR::OnAtomicRmwExpr(Opcode opcode,
+ uint32_t alignment_log2,
+ Address offset) {
+ return AppendExpr(
+ MakeUnique<AtomicRmwExpr>(opcode, 1 << alignment_log2, offset));
+}
+
+Result BinaryReaderIR::OnAtomicRmwCmpxchgExpr(Opcode opcode,
+ uint32_t alignment_log2,
+ Address offset) {
+ return AppendExpr(
+ MakeUnique<AtomicRmwCmpxchgExpr>(opcode, 1 << alignment_log2, offset));
+}
+
Result BinaryReaderIR::OnBinaryExpr(Opcode opcode) {
return AppendExpr(MakeUnique<BinaryExpr>(opcode, GetLocation()));
}
diff --git a/src/binary-reader-logging.cc b/src/binary-reader-logging.cc
index 71352611..7e4e19b3 100644
--- a/src/binary-reader-logging.cc
+++ b/src/binary-reader-logging.cc
@@ -322,15 +322,6 @@ Result BinaryReaderLogging::OnIfExpr(Index num_types, Type* sig_types) {
return reader_->OnIfExpr(num_types, sig_types);
}
-Result BinaryReaderLogging::OnLoadExpr(Opcode opcode,
- uint32_t alignment_log2,
- Address offset) {
- LOGF("OnLoadExpr(opcode: \"%s\" (%u), align log2: %u, offset: %" PRIaddress
- ")\n",
- opcode.GetName(), opcode.GetCode(), alignment_log2, offset);
- return reader_->OnLoadExpr(opcode, alignment_log2, offset);
-}
-
Result BinaryReaderLogging::OnLoopExpr(Index num_types, Type* sig_types) {
LOGF("OnLoopExpr(sig: ");
LogTypes(num_types, sig_types);
@@ -338,15 +329,6 @@ Result BinaryReaderLogging::OnLoopExpr(Index num_types, Type* sig_types) {
return reader_->OnLoopExpr(num_types, sig_types);
}
-Result BinaryReaderLogging::OnStoreExpr(Opcode opcode,
- uint32_t alignment_log2,
- Address offset) {
- LOGF("OnStoreExpr(opcode: \"%s\" (%u), align log2: %u, offset: %" PRIaddress
- ")\n",
- opcode.GetName(), opcode.GetCode(), alignment_log2, offset);
- return reader_->OnStoreExpr(opcode, alignment_log2, offset);
-}
-
Result BinaryReaderLogging::OnTryExpr(Index num_types, Type* sig_types) {
LOGF("OnTryExpr(sig: ");
LogTypes(num_types, sig_types);
@@ -494,6 +476,15 @@ Result BinaryReaderLogging::OnSymbolInfo(string_view name, uint32_t flags) {
return reader_->name(opcode); \
}
+#define DEFINE_LOAD_STORE_OPCODE(name) \
+ Result BinaryReaderLogging::name(Opcode opcode, uint32_t alignment_log2, \
+ Address offset) { \
+ LOGF(#name "(opcode: \"%s\" (%u), align log2: %u, offset: %" PRIaddress \
+ ")\n", \
+ opcode.GetName(), opcode.GetCode(), alignment_log2, offset); \
+ return reader_->name(opcode, alignment_log2, offset); \
+ }
+
#define DEFINE0(name) \
Result BinaryReaderLogging::name() { \
LOGF(#name "\n"); \
@@ -545,6 +536,10 @@ DEFINE_INDEX(OnFunctionBodyCount)
DEFINE_INDEX(BeginFunctionBody)
DEFINE_INDEX(EndFunctionBody)
DEFINE_INDEX(OnLocalDeclCount)
+DEFINE_LOAD_STORE_OPCODE(OnAtomicLoadExpr);
+DEFINE_LOAD_STORE_OPCODE(OnAtomicRmwExpr);
+DEFINE_LOAD_STORE_OPCODE(OnAtomicRmwCmpxchgExpr);
+DEFINE_LOAD_STORE_OPCODE(OnAtomicStoreExpr);
DEFINE_OPCODE(OnBinaryExpr)
DEFINE_INDEX_DESC(OnCallExpr, "func_index")
DEFINE_INDEX_DESC(OnCallIndirectExpr, "sig_index")
@@ -559,12 +554,14 @@ DEFINE0(OnEndExpr)
DEFINE_INDEX_DESC(OnGetGlobalExpr, "index")
DEFINE_INDEX_DESC(OnGetLocalExpr, "index")
DEFINE0(OnGrowMemoryExpr)
+DEFINE_LOAD_STORE_OPCODE(OnLoadExpr);
DEFINE0(OnNopExpr)
DEFINE_INDEX_DESC(OnRethrowExpr, "depth");
DEFINE0(OnReturnExpr)
DEFINE0(OnSelectExpr)
DEFINE_INDEX_DESC(OnSetGlobalExpr, "index")
DEFINE_INDEX_DESC(OnSetLocalExpr, "index")
+DEFINE_LOAD_STORE_OPCODE(OnStoreExpr);
DEFINE_INDEX_DESC(OnTeeLocalExpr, "index")
DEFINE_INDEX_DESC(OnThrowExpr, "except_index")
DEFINE0(OnUnreachableExpr)
diff --git a/src/binary-reader-logging.h b/src/binary-reader-logging.h
index 813501fd..fe80843e 100644
--- a/src/binary-reader-logging.h
+++ b/src/binary-reader-logging.h
@@ -133,6 +133,18 @@ class BinaryReaderLogging : public BinaryReaderDelegate {
Result OnOpcodeF32(uint32_t value) override;
Result OnOpcodeF64(uint64_t value) override;
Result OnOpcodeBlockSig(Index num_types, Type* sig_types) override;
+ Result OnAtomicLoadExpr(Opcode opcode,
+ uint32_t alignment_log2,
+ Address offset) override;
+ Result OnAtomicStoreExpr(Opcode opcode,
+ uint32_t alignment_log2,
+ Address offset) override;
+ Result OnAtomicRmwExpr(Opcode opcode,
+ uint32_t alignment_log2,
+ Address offset) override;
+ Result OnAtomicRmwCmpxchgExpr(Opcode opcode,
+ uint32_t alignment_log2,
+ Address offset) override;
Result OnBinaryExpr(Opcode opcode) override;
Result OnBlockExpr(Index num_types, Type* sig_types) override;
Result OnBrExpr(Index depth) override;
diff --git a/src/binary-reader-nop.h b/src/binary-reader-nop.h
index 2fa57bbd..90b91d2c 100644
--- a/src/binary-reader-nop.h
+++ b/src/binary-reader-nop.h
@@ -175,6 +175,26 @@ class BinaryReaderNop : public BinaryReaderDelegate {
Result OnOpcodeBlockSig(Index num_types, Type* sig_types) override {
return Result::Ok;
}
+ Result OnAtomicLoadExpr(Opcode opcode,
+ uint32_t alignment_log2,
+ Address offset) override {
+ return Result::Ok;
+ }
+ Result OnAtomicStoreExpr(Opcode opcode,
+ uint32_t alignment_log2,
+ Address offset) override {
+ return Result::Ok;
+ }
+ Result OnAtomicRmwExpr(Opcode opcode,
+ uint32_t alignment_log2,
+ Address offset) override {
+ return Result::Ok;
+ }
+ Result OnAtomicRmwCmpxchgExpr(Opcode opcode,
+ uint32_t alignment_log2,
+ Address offset) override {
+ return Result::Ok;
+ }
Result OnBinaryExpr(Opcode opcode) override { return Result::Ok; }
Result OnBlockExpr(Index num_types, Type* sig_types) override {
return Result::Ok;
diff --git a/src/binary-reader.cc b/src/binary-reader.cc
index f1049466..f9eaeacd 100644
--- a/src/binary-reader.cc
+++ b/src/binary-reader.cc
@@ -1100,6 +1100,109 @@ Result BinaryReader::ReadFunctionBody(Offset end_offset) {
CALLBACK0(OnOpcodeBare);
break;
+ case Opcode::I32AtomicLoad8U:
+ case Opcode::I32AtomicLoad16U:
+ case Opcode::I64AtomicLoad8U:
+ case Opcode::I64AtomicLoad16U:
+ case Opcode::I64AtomicLoad32U:
+ case Opcode::I32AtomicLoad:
+ case Opcode::I64AtomicLoad: {
+ uint32_t alignment_log2;
+ CHECK_RESULT(ReadU32Leb128(&alignment_log2, "load alignment"));
+ Address offset;
+ CHECK_RESULT(ReadU32Leb128(&offset, "load offset"));
+
+ CALLBACK(OnAtomicLoadExpr, opcode, alignment_log2, offset);
+ CALLBACK(OnOpcodeUint32Uint32, alignment_log2, offset);
+ break;
+ }
+
+ case Opcode::I32AtomicStore8:
+ case Opcode::I32AtomicStore16:
+ case Opcode::I64AtomicStore8:
+ case Opcode::I64AtomicStore16:
+ case Opcode::I64AtomicStore32:
+ case Opcode::I32AtomicStore:
+ case Opcode::I64AtomicStore: {
+ uint32_t alignment_log2;
+ CHECK_RESULT(ReadU32Leb128(&alignment_log2, "store alignment"));
+ Address offset;
+ CHECK_RESULT(ReadU32Leb128(&offset, "store offset"));
+
+ CALLBACK(OnAtomicStoreExpr, opcode, alignment_log2, offset);
+ CALLBACK(OnOpcodeUint32Uint32, alignment_log2, offset);
+ break;
+ }
+
+ case Opcode::I32AtomicRmwAdd:
+ case Opcode::I64AtomicRmwAdd:
+ case Opcode::I32AtomicRmw8UAdd:
+ case Opcode::I32AtomicRmw16UAdd:
+ case Opcode::I64AtomicRmw8UAdd:
+ case Opcode::I64AtomicRmw16UAdd:
+ case Opcode::I64AtomicRmw32UAdd:
+ case Opcode::I32AtomicRmwSub:
+ case Opcode::I64AtomicRmwSub:
+ case Opcode::I32AtomicRmw8USub:
+ case Opcode::I32AtomicRmw16USub:
+ case Opcode::I64AtomicRmw8USub:
+ case Opcode::I64AtomicRmw16USub:
+ case Opcode::I64AtomicRmw32USub:
+ case Opcode::I32AtomicRmwAnd:
+ case Opcode::I64AtomicRmwAnd:
+ case Opcode::I32AtomicRmw8UAnd:
+ case Opcode::I32AtomicRmw16UAnd:
+ case Opcode::I64AtomicRmw8UAnd:
+ case Opcode::I64AtomicRmw16UAnd:
+ case Opcode::I64AtomicRmw32UAnd:
+ case Opcode::I32AtomicRmwOr:
+ case Opcode::I64AtomicRmwOr:
+ case Opcode::I32AtomicRmw8UOr:
+ case Opcode::I32AtomicRmw16UOr:
+ case Opcode::I64AtomicRmw8UOr:
+ case Opcode::I64AtomicRmw16UOr:
+ case Opcode::I64AtomicRmw32UOr:
+ case Opcode::I32AtomicRmwXor:
+ case Opcode::I64AtomicRmwXor:
+ case Opcode::I32AtomicRmw8UXor:
+ case Opcode::I32AtomicRmw16UXor:
+ case Opcode::I64AtomicRmw8UXor:
+ case Opcode::I64AtomicRmw16UXor:
+ case Opcode::I64AtomicRmw32UXor:
+ case Opcode::I32AtomicRmwXchg:
+ case Opcode::I64AtomicRmwXchg:
+ case Opcode::I32AtomicRmw8UXchg:
+ case Opcode::I32AtomicRmw16UXchg:
+ case Opcode::I64AtomicRmw8UXchg:
+ case Opcode::I64AtomicRmw16UXchg:
+ case Opcode::I64AtomicRmw32UXchg: {
+ uint32_t alignment_log2;
+ CHECK_RESULT(ReadU32Leb128(&alignment_log2, "memory alignment"));
+ Address offset;
+ CHECK_RESULT(ReadU32Leb128(&offset, "memory offset"));
+
+ CALLBACK(OnAtomicRmwExpr, opcode, alignment_log2, offset);
+ CALLBACK(OnOpcodeUint32Uint32, alignment_log2, offset);
+ break;
+ }
+
+ case Opcode::I32AtomicRmwCmpxchg:
+ case Opcode::I64AtomicRmwCmpxchg:
+ case Opcode::I32AtomicRmw8UCmpxchg:
+ case Opcode::I32AtomicRmw16UCmpxchg:
+ case Opcode::I64AtomicRmw8UCmpxchg:
+ case Opcode::I64AtomicRmw16UCmpxchg:
+ case Opcode::I64AtomicRmw32UCmpxchg: {
+ uint32_t alignment_log2;
+ CHECK_RESULT(ReadU32Leb128(&alignment_log2, "memory alignment"));
+ Address offset;
+ CHECK_RESULT(ReadU32Leb128(&offset, "memory offset"));
+
+ CALLBACK(OnAtomicRmwCmpxchgExpr, opcode, alignment_log2, offset);
+ CALLBACK(OnOpcodeUint32Uint32, alignment_log2, offset);
+ break;
+ }
+
default:
return ReportUnexpectedOpcode(opcode);
}
diff --git a/src/binary-reader.h b/src/binary-reader.h
index 0494ffd3..71cf9d35 100644
--- a/src/binary-reader.h
+++ b/src/binary-reader.h
@@ -176,6 +176,18 @@ class BinaryReaderDelegate {
virtual Result OnOpcodeF32(uint32_t value) = 0;
virtual Result OnOpcodeF64(uint64_t value) = 0;
virtual Result OnOpcodeBlockSig(Index num_types, Type* sig_types) = 0;
+ virtual Result OnAtomicLoadExpr(Opcode opcode,
+ uint32_t alignment_log2,
+ Address offset) = 0;
+ virtual Result OnAtomicStoreExpr(Opcode opcode,
+ uint32_t alignment_log2,
+ Address offset) = 0;
+ virtual Result OnAtomicRmwExpr(Opcode opcode,
+ uint32_t alignment_log2,
+ Address offset) = 0;
+ virtual Result OnAtomicRmwCmpxchgExpr(Opcode opcode,
+ uint32_t alignment_log2,
+ Address offset) = 0;
virtual Result OnBinaryExpr(Opcode opcode) = 0;
virtual Result OnBlockExpr(Index num_types, Type* sig_types) = 0;
virtual Result OnBrExpr(Index depth) = 0;
diff --git a/src/binary-writer.cc b/src/binary-writer.cc
index ed2b4f38..ad039677 100644
--- a/src/binary-writer.cc
+++ b/src/binary-writer.cc
@@ -123,6 +123,11 @@ class BinaryWriter {
void WriteU32Leb128WithReloc(Index index,
const char* desc,
RelocType reloc_type);
+ template <typename T>
+ void WriteLoadStoreExpr(const Module* module,
+ const Func* func,
+ const Expr* expr,
+ const char* desc);
void WriteExpr(const Module* module, const Func* func, const Expr* expr);
void WriteExprList(const Module* module,
const Func* func,
@@ -324,10 +329,35 @@ Index BinaryWriter::GetLocalIndex(const Func* func, const Var& var) {
}
}
+template <typename T>
+void BinaryWriter::WriteLoadStoreExpr(const Module* module,
+ const Func* func,
+ const Expr* expr,
+ const char* desc) {
+ auto* typed_expr = cast<T>(expr);
+ WriteOpcode(stream_, typed_expr->opcode);
+ Address align = typed_expr->opcode.GetAlignment(typed_expr->align);
+ stream_->WriteU8(log2_u32(align), "alignment");
+ WriteU32Leb128(stream_, typed_expr->offset, desc);
+}
+
void BinaryWriter::WriteExpr(const Module* module,
const Func* func,
const Expr* expr) {
switch (expr->type()) {
+ case ExprType::AtomicLoad:
+ WriteLoadStoreExpr<AtomicLoadExpr>(module, func, expr, "memory offset");
+ break;
+ case ExprType::AtomicRmw:
+ WriteLoadStoreExpr<AtomicRmwExpr>(module, func, expr, "memory offset");
+ break;
+ case ExprType::AtomicRmwCmpxchg:
+ WriteLoadStoreExpr<AtomicRmwCmpxchgExpr>(module, func, expr,
+ "memory offset");
+ break;
+ case ExprType::AtomicStore:
+ WriteLoadStoreExpr<AtomicStoreExpr>(module, func, expr, "memory offset");
+ break;
case ExprType::Binary:
WriteOpcode(stream_, cast<BinaryExpr>(expr)->opcode);
break;
@@ -348,7 +378,7 @@ void BinaryWriter::WriteExpr(const Module* module,
"break depth");
break;
case ExprType::BrTable: {
- auto br_table_expr = cast<BrTableExpr>(expr);
+ auto* br_table_expr = cast<BrTableExpr>(expr);
WriteOpcode(stream_, Opcode::BrTable);
WriteU32Leb128(stream_, br_table_expr->targets.size(), "num targets");
Index depth;
@@ -429,7 +459,7 @@ void BinaryWriter::WriteExpr(const Module* module,
WriteU32Leb128(stream_, 0, "grow_memory reserved");
break;
case ExprType::If: {
- auto if_expr = cast<IfExpr>(expr);
+ auto* if_expr = cast<IfExpr>(expr);
WriteOpcode(stream_, Opcode::If);
write_inline_signature_type(stream_, if_expr->true_.sig);
WriteExprList(module, func, if_expr->true_.exprs);
@@ -440,14 +470,9 @@ void BinaryWriter::WriteExpr(const Module* module,
WriteOpcode(stream_, Opcode::End);
break;
}
- case ExprType::Load: {
- auto load_expr = cast<LoadExpr>(expr);
- WriteOpcode(stream_, load_expr->opcode);
- Address align = load_expr->opcode.GetAlignment(load_expr->align);
- stream_->WriteU8(log2_u32(align), "alignment");
- WriteU32Leb128(stream_, load_expr->offset, "load offset");
+ case ExprType::Load:
+ WriteLoadStoreExpr<LoadExpr>(module, func, expr, "load offset");
break;
- }
case ExprType::Loop:
WriteOpcode(stream_, Opcode::Loop);
write_inline_signature_type(stream_, cast<LoopExpr>(expr)->block.sig);
@@ -480,14 +505,9 @@ void BinaryWriter::WriteExpr(const Module* module,
WriteU32Leb128(stream_, index, "local index");
break;
}
- case ExprType::Store: {
- auto store_expr = cast<StoreExpr>(expr);
- WriteOpcode(stream_, store_expr->opcode);
- Address align = store_expr->opcode.GetAlignment(store_expr->align);
- stream_->WriteU8(log2_u32(align), "alignment");
- WriteU32Leb128(stream_, store_expr->offset, "store offset");
+ case ExprType::Store:
+ WriteLoadStoreExpr<StoreExpr>(module, func, expr, "store offset");
break;
- }
case ExprType::TeeLocal: {
Index index = GetLocalIndex(func, cast<TeeLocalExpr>(expr)->var);
WriteOpcode(stream_, Opcode::TeeLocal);
@@ -500,7 +520,7 @@ void BinaryWriter::WriteExpr(const Module* module,
"throw exception");
break;
case ExprType::TryBlock: {
- auto try_expr = cast<TryExpr>(expr);
+ auto* try_expr = cast<TryExpr>(expr);
WriteOpcode(stream_, Opcode::Try);
write_inline_signature_type(stream_, try_expr->block.sig);
WriteExprList(module, func, try_expr->block.exprs);
diff --git a/src/expr-visitor.cc b/src/expr-visitor.cc
index 9d0d211d..8975a43d 100644
--- a/src/expr-visitor.cc
+++ b/src/expr-visitor.cc
@@ -25,6 +25,23 @@ ExprVisitor::ExprVisitor(Delegate* delegate) : delegate_(delegate) {}
Result ExprVisitor::VisitExpr(Expr* expr) {
switch (expr->type()) {
+ case ExprType::AtomicLoad:
+ CHECK_RESULT(delegate_->OnAtomicLoadExpr(cast<AtomicLoadExpr>(expr)));
+ break;
+
+ case ExprType::AtomicStore:
+ CHECK_RESULT(delegate_->OnAtomicStoreExpr(cast<AtomicStoreExpr>(expr)));
+ break;
+
+ case ExprType::AtomicRmw:
+ CHECK_RESULT(delegate_->OnAtomicRmwExpr(cast<AtomicRmwExpr>(expr)));
+ break;
+
+ case ExprType::AtomicRmwCmpxchg:
+ CHECK_RESULT(
+ delegate_->OnAtomicRmwCmpxchgExpr(cast<AtomicRmwCmpxchgExpr>(expr)));
+ break;
+
case ExprType::Binary:
CHECK_RESULT(delegate_->OnBinaryExpr(cast<BinaryExpr>(expr)));
break;
diff --git a/src/expr-visitor.h b/src/expr-visitor.h
index d7023c27..2c110cd8 100644
--- a/src/expr-visitor.h
+++ b/src/expr-visitor.h
@@ -77,6 +77,10 @@ class ExprVisitor::Delegate {
virtual Result OnCatchExpr(TryExpr*, Catch*) = 0;
virtual Result OnThrowExpr(ThrowExpr*) = 0;
virtual Result OnRethrowExpr(RethrowExpr*) = 0;
+ virtual Result OnAtomicLoadExpr(AtomicLoadExpr*) = 0;
+ virtual Result OnAtomicStoreExpr(AtomicStoreExpr*) = 0;
+ virtual Result OnAtomicRmwExpr(AtomicRmwExpr*) = 0;
+ virtual Result OnAtomicRmwCmpxchgExpr(AtomicRmwCmpxchgExpr*) = 0;
};
class ExprVisitor::DelegateNop : public ExprVisitor::Delegate {
@@ -117,6 +121,12 @@ class ExprVisitor::DelegateNop : public ExprVisitor::Delegate {
Result OnCatchExpr(TryExpr*, Catch*) override { return Result::Ok; }
Result OnThrowExpr(ThrowExpr*) override { return Result::Ok; }
Result OnRethrowExpr(RethrowExpr*) override { return Result::Ok; }
+ Result OnAtomicLoadExpr(AtomicLoadExpr*) override { return Result::Ok; }
+ Result OnAtomicStoreExpr(AtomicStoreExpr*) override { return Result::Ok; }
+ Result OnAtomicRmwExpr(AtomicRmwExpr*) override { return Result::Ok; }
+ Result OnAtomicRmwCmpxchgExpr(AtomicRmwCmpxchgExpr*) override {
+ return Result::Ok;
+ }
};
} // namespace wabt
diff --git a/src/interpreter.cc b/src/interpreter.cc
index d6f58578..04810409 100644
--- a/src/interpreter.cc
+++ b/src/interpreter.cc
@@ -590,6 +590,28 @@ Memory* Thread::ReadMemory(const uint8_t** pc) {
return &env_->memories_[memory_index];
}
+template <typename MemType>
+Result Thread::GetAccessAddress(const uint8_t** pc, void** out_address) {
+ Memory* memory = ReadMemory(pc);
+ uint64_t addr = static_cast<uint64_t>(Pop<uint32_t>()) + ReadU32(pc);
+ TRAP_IF(addr + sizeof(MemType) > memory->data.size(),
+ MemoryAccessOutOfBounds);
+ *out_address = memory->data.data() + static_cast<IstreamOffset>(addr);
+ return Result::Ok;
+}
+
+template <typename MemType>
+Result Thread::GetAtomicAccessAddress(const uint8_t** pc, void** out_address) {
+ Memory* memory = ReadMemory(pc);
+ uint64_t addr = static_cast<uint64_t>(Pop<uint32_t>()) + ReadU32(pc);
+ TRAP_IF(addr + sizeof(MemType) > memory->data.size(),
+ MemoryAccessOutOfBounds);
+ uint32_t addr_align = addr != 0 ? (1 << wabt_ctz_u32(addr)) : UINT32_MAX;
+ TRAP_IF(addr_align < sizeof(MemType), AtomicMemoryAccessUnaligned);
+ *out_address = memory->data.data() + static_cast<IstreamOffset>(addr);
+ return Result::Ok;
+}
+
Value& Thread::Top() {
return Pick(1);
}
@@ -645,6 +667,16 @@ IstreamOffset Thread::PopCall() {
return *--call_stack_top_;
}
+template <typename T>
+void LoadFromMemory(T* dst, const void* src) {
+ memcpy(dst, src, sizeof(T));
+}
+
+template <typename T>
+void StoreToMemory(void* dst, T value) {
+ memcpy(dst, &value, sizeof(T));
+}
+
template <typename MemType, typename ResultType>
Result Thread::Load(const uint8_t** pc) {
typedef typename ExtendMemType<ResultType, MemType>::type ExtendedType;
@@ -652,29 +684,73 @@ Result Thread::Load(const uint8_t** pc) {
std::is_floating_point<ExtendedType>::value,
"Extended type should be float iff MemType is float");
- Memory* memory = ReadMemory(pc);
- uint64_t offset = static_cast<uint64_t>(Pop<uint32_t>()) + ReadU32(pc);
+ void* src;
+ CHECK_TRAP(GetAccessAddress<MemType>(pc, &src));
MemType value;
- TRAP_IF(offset + sizeof(value) > memory->data.size(),
- MemoryAccessOutOfBounds);
- void* src = memory->data.data() + static_cast<IstreamOffset>(offset);
- memcpy(&value, src, sizeof(value));
+ LoadFromMemory<MemType>(&value, src);
return Push<ResultType>(static_cast<ExtendedType>(value));
}
template <typename MemType, typename ResultType>
Result Thread::Store(const uint8_t** pc) {
typedef typename WrapMemType<ResultType, MemType>::type WrappedType;
- Memory* memory = ReadMemory(pc);
WrappedType value = PopRep<ResultType>();
- uint64_t offset = static_cast<uint64_t>(Pop<uint32_t>()) + ReadU32(pc);
- TRAP_IF(offset + sizeof(value) > memory->data.size(),
- MemoryAccessOutOfBounds);
- void* dst = memory->data.data() + static_cast<IstreamOffset>(offset);
- memcpy(dst, &value, sizeof(value));
+ void* dst;
+ CHECK_TRAP(GetAccessAddress<MemType>(pc, &dst));
+ StoreToMemory<WrappedType>(dst, value);
return Result::Ok;
}
+template <typename MemType, typename ResultType>
+Result Thread::AtomicLoad(const uint8_t** pc) {
+ typedef typename ExtendMemType<ResultType, MemType>::type ExtendedType;
+ static_assert(!std::is_floating_point<MemType>::value,
+ "AtomicLoad type can't be float");
+ void* src;
+ CHECK_TRAP(GetAtomicAccessAddress<MemType>(pc, &src));
+ MemType value;
+ LoadFromMemory<MemType>(&value, src);
+ return Push<ResultType>(static_cast<ExtendedType>(value));
+}
+
+template <typename MemType, typename ResultType>
+Result Thread::AtomicStore(const uint8_t** pc) {
+ typedef typename WrapMemType<ResultType, MemType>::type WrappedType;
+ WrappedType value = PopRep<ResultType>();
+ void* dst;
+ CHECK_TRAP(GetAtomicAccessAddress<MemType>(pc, &dst));
+ StoreToMemory<WrappedType>(dst, value);
+ return Result::Ok;
+}
+
+template <typename MemType, typename ResultType>
+Result Thread::AtomicRmw(BinopFunc<ResultType, ResultType> func,
+ const uint8_t** pc) {
+ typedef typename ExtendMemType<ResultType, MemType>::type ExtendedType;
+ MemType rhs = PopRep<ResultType>();
+ void* addr;
+ CHECK_TRAP(GetAtomicAccessAddress<MemType>(pc, &addr));
+ MemType read;
+ LoadFromMemory<MemType>(&read, addr);
+ StoreToMemory<MemType>(addr, func(read, rhs));
+ return Push<ResultType>(static_cast<ExtendedType>(read));
+}
+
+template <typename MemType, typename ResultType>
+Result Thread::AtomicRmwCmpxchg(const uint8_t** pc) {
+ typedef typename ExtendMemType<ResultType, MemType>::type ExtendedType;
+ MemType replace = PopRep<ResultType>();
+ MemType expect = PopRep<ResultType>();
+ void* addr;
+ CHECK_TRAP(GetAtomicAccessAddress<MemType>(pc, &addr));
+ MemType read;
+ LoadFromMemory<MemType>(&read, addr);
+ if (read == expect) {
+ StoreToMemory<MemType>(addr, replace);
+ }
+ return Push<ResultType>(static_cast<ExtendedType>(read));
+}
+
template <typename R, typename T>
Result Thread::Unop(UnopFunc<R, T> func) {
auto value = PopRep<T>();
@@ -1056,6 +1132,12 @@ ValueTypeRep<T> IntExtendS(ValueTypeRep<T> v_rep) {
return ToRep(static_cast<TS>(Bitcast<E>(static_cast<EU>(v_rep))));
}
+// i{32,64}.atomic.rmw(8,16,32}_u.xchg
+template <typename T>
+ValueTypeRep<T> Xchg(ValueTypeRep<T> lhs_rep, ValueTypeRep<T> rhs_rep) {
+ return rhs_rep;
+}
+
bool Environment::FuncSignaturesAreEqual(Index sig_index_0,
Index sig_index_1) const {
if (sig_index_0 == sig_index_1)
@@ -1394,6 +1476,122 @@ Result Thread::Run(int num_instructions, IstreamOffset* call_stack_return_top) {
CHECK_TRAP(Store<double>(&pc));
break;
+ case Opcode::I32AtomicLoad8U:
+ CHECK_TRAP(AtomicLoad<uint8_t, uint32_t>(&pc));
+ break;
+
+ case Opcode::I32AtomicLoad16U:
+ CHECK_TRAP(AtomicLoad<uint16_t, uint32_t>(&pc));
+ break;
+
+ case Opcode::I64AtomicLoad8U:
+ CHECK_TRAP(AtomicLoad<uint8_t, uint64_t>(&pc));
+ break;
+
+ case Opcode::I64AtomicLoad16U:
+ CHECK_TRAP(AtomicLoad<uint16_t, uint64_t>(&pc));
+ break;
+
+ case Opcode::I64AtomicLoad32U:
+ CHECK_TRAP(AtomicLoad<uint32_t, uint64_t>(&pc));
+ break;
+
+ case Opcode::I32AtomicLoad:
+ CHECK_TRAP(AtomicLoad<uint32_t>(&pc));
+ break;
+
+ case Opcode::I64AtomicLoad:
+ CHECK_TRAP(AtomicLoad<uint64_t>(&pc));
+ break;
+
+ case Opcode::I32AtomicStore8:
+ CHECK_TRAP(AtomicStore<uint8_t, uint32_t>(&pc));
+ break;
+
+ case Opcode::I32AtomicStore16:
+ CHECK_TRAP(AtomicStore<uint16_t, uint32_t>(&pc));
+ break;
+
+ case Opcode::I64AtomicStore8:
+ CHECK_TRAP(AtomicStore<uint8_t, uint64_t>(&pc));
+ break;
+
+ case Opcode::I64AtomicStore16:
+ CHECK_TRAP(AtomicStore<uint16_t, uint64_t>(&pc));
+ break;
+
+ case Opcode::I64AtomicStore32:
+ CHECK_TRAP(AtomicStore<uint32_t, uint64_t>(&pc));
+ break;
+
+ case Opcode::I32AtomicStore:
+ CHECK_TRAP(AtomicStore<uint32_t>(&pc));
+ break;
+
+ case Opcode::I64AtomicStore:
+ CHECK_TRAP(AtomicStore<uint64_t>(&pc));
+ break;
+
+#define ATOMIC_RMW(rmwop, func) \
+ case Opcode::I32AtomicRmw##rmwop: \
+ CHECK_TRAP(AtomicRmw<uint32_t, uint32_t>(func<uint32_t>, &pc)); \
+ break; \
+ case Opcode::I64AtomicRmw##rmwop: \
+ CHECK_TRAP(AtomicRmw<uint64_t, uint64_t>(func<uint64_t>, &pc)); \
+ break; \
+ case Opcode::I32AtomicRmw8U##rmwop: \
+ CHECK_TRAP(AtomicRmw<uint8_t, uint32_t>(func<uint32_t>, &pc)); \
+ break; \
+ case Opcode::I32AtomicRmw16U##rmwop: \
+ CHECK_TRAP(AtomicRmw<uint16_t, uint32_t>(func<uint32_t>, &pc)); \
+ break; \
+ case Opcode::I64AtomicRmw8U##rmwop: \
+ CHECK_TRAP(AtomicRmw<uint8_t, uint64_t>(func<uint64_t>, &pc)); \
+ break; \
+ case Opcode::I64AtomicRmw16U##rmwop: \
+ CHECK_TRAP(AtomicRmw<uint16_t, uint64_t>(func<uint64_t>, &pc)); \
+ break; \
+ case Opcode::I64AtomicRmw32U##rmwop: \
+ CHECK_TRAP(AtomicRmw<uint32_t, uint64_t>(func<uint64_t>, &pc)); \
+ break /* no semicolon */
+
+ ATOMIC_RMW(Add, Add);
+ ATOMIC_RMW(Sub, Sub);
+ ATOMIC_RMW(And, IntAnd);
+ ATOMIC_RMW(Or, IntOr);
+ ATOMIC_RMW(Xor, IntXor);
+ ATOMIC_RMW(Xchg, Xchg);
+
+#undef ATOMIC_RMW
+
+ case Opcode::I32AtomicRmwCmpxchg:
+ CHECK_TRAP(AtomicRmwCmpxchg<uint32_t, uint32_t>(&pc));
+ break;
+
+ case Opcode::I64AtomicRmwCmpxchg:
+ CHECK_TRAP(AtomicRmwCmpxchg<uint64_t, uint64_t>(&pc));
+ break;
+
+ case Opcode::I32AtomicRmw8UCmpxchg:
+ CHECK_TRAP(AtomicRmwCmpxchg<uint8_t, uint32_t>(&pc));
+ break;
+
+ case Opcode::I32AtomicRmw16UCmpxchg:
+ CHECK_TRAP(AtomicRmwCmpxchg<uint16_t, uint32_t>(&pc));
+ break;
+
+ case Opcode::I64AtomicRmw8UCmpxchg:
+ CHECK_TRAP(AtomicRmwCmpxchg<uint8_t, uint64_t>(&pc));
+ break;
+
+ case Opcode::I64AtomicRmw16UCmpxchg:
+ CHECK_TRAP(AtomicRmwCmpxchg<uint16_t, uint64_t>(&pc));
+ break;
+
+ case Opcode::I64AtomicRmw32UCmpxchg:
+ CHECK_TRAP(AtomicRmwCmpxchg<uint32_t, uint64_t>(&pc));
+ break;
+
case Opcode::CurrentMemory:
CHECK_TRAP(Push<uint32_t>(ReadMemory(&pc)->page_limits.initial));
break;
diff --git a/src/interpreter.h b/src/interpreter.h
index 178fad19..cccf5897 100644
--- a/src/interpreter.h
+++ b/src/interpreter.h
@@ -38,6 +38,8 @@ namespace interpreter {
V(Returned, "returned") \
/* memory access is out of bounds */ \
V(TrapMemoryAccessOutOfBounds, "out of bounds memory access") \
+ /* atomic memory access is unaligned */ \
+ V(TrapAtomicMemoryAccessUnaligned, "atomic memory access is unaligned") \
/* converting from float -> int would overflow int */ \
V(TrapIntegerOverflow, "integer overflow") \
/* dividend is zero in integer divide */ \
@@ -495,6 +497,10 @@ class Thread {
void Trace(Stream*);
Memory* ReadMemory(const uint8_t** pc);
+ template <typename MemType>
+ Result GetAccessAddress(const uint8_t** pc, void** out_address);
+ template <typename MemType>
+ Result GetAtomicAccessAddress(const uint8_t** pc, void** out_address);
Value& Top();
Value& Pick(Index depth);
@@ -523,16 +529,25 @@ class Thread {
Result PushCall(const uint8_t* pc) WABT_WARN_UNUSED;
IstreamOffset PopCall();
- template <typename MemType, typename ResultType = MemType>
- Result Load(const uint8_t** pc) WABT_WARN_UNUSED;
- template <typename MemType, typename ResultType = MemType>
- Result Store(const uint8_t** pc) WABT_WARN_UNUSED;
-
template <typename R, typename T> using UnopFunc = R(T);
template <typename R, typename T> using UnopTrapFunc = Result(T, R*);
template <typename R, typename T> using BinopFunc = R(T, T);
template <typename R, typename T> using BinopTrapFunc = Result(T, T, R*);
+ template <typename MemType, typename ResultType = MemType>
+ Result Load(const uint8_t** pc) WABT_WARN_UNUSED;
+ template <typename MemType, typename ResultType = MemType>
+ Result Store(const uint8_t** pc) WABT_WARN_UNUSED;
+ template <typename MemType, typename ResultType = MemType>
+ Result AtomicLoad(const uint8_t** pc) WABT_WARN_UNUSED;
+ template <typename MemType, typename ResultType = MemType>
+ Result AtomicStore(const uint8_t** pc) WABT_WARN_UNUSED;
+ template <typename MemType, typename ResultType = MemType>
+ Result AtomicRmw(BinopFunc<ResultType, ResultType>,
+ const uint8_t** pc) WABT_WARN_UNUSED;
+ template <typename MemType, typename ResultType = MemType>
+ Result AtomicRmwCmpxchg(const uint8_t** pc) WABT_WARN_UNUSED;
+
template <typename R, typename T = R>
Result Unop(UnopFunc<R, T> func) WABT_WARN_UNUSED;
template <typename R, typename T = R>
diff --git a/src/ir.h b/src/ir.h
index 1417b29c..d2646c03 100644
--- a/src/ir.h
+++ b/src/ir.h
@@ -114,6 +114,10 @@ struct Const {
typedef std::vector<Const> ConstVector;
enum class ExprType {
+ AtomicLoad,
+ AtomicStore,
+ AtomicRmw,
+ AtomicRmwCmpxchg,
Binary,
Block,
Br,
@@ -315,6 +319,10 @@ class LoadStoreExpr : public ExprMixin<TypeEnum> {
typedef LoadStoreExpr<ExprType::Load> LoadExpr;
typedef LoadStoreExpr<ExprType::Store> StoreExpr;
+typedef LoadStoreExpr<ExprType::AtomicLoad> AtomicLoadExpr;
+typedef LoadStoreExpr<ExprType::AtomicStore> AtomicStoreExpr;
+typedef LoadStoreExpr<ExprType::AtomicRmw> AtomicRmwExpr;
+typedef LoadStoreExpr<ExprType::AtomicRmwCmpxchg> AtomicRmwCmpxchgExpr;
struct Exception {
Exception() = default;
diff --git a/src/opcode.cc b/src/opcode.cc
index 3afd61ba..cadb4987 100644
--- a/src/opcode.cc
+++ b/src/opcode.cc
@@ -24,14 +24,17 @@ namespace wabt {
// static
Opcode::Info Opcode::infos_[] = {
-#define WABT_OPCODE(rtype, type1, type2, mem_size, prefix, code, Name, text) \
- {text, Type::rtype, Type::type1, Type::type2, \
- mem_size, prefix, code, PrefixCode(prefix, code)},
+#define WABT_OPCODE(rtype, type1, type2, type3, mem_size, prefix, code, Name, \
+ text) \
+ {text, Type::rtype, Type::type1, \
+ Type::type2, Type::type3, mem_size, \
+ prefix, code, PrefixCode(prefix, code)},
#include "src/opcode.def"
#undef WABT_OPCODE
};
-#define WABT_OPCODE(rtype, type1, type2, mem_size, prefix, code, Name, text) \
+#define WABT_OPCODE(rtype, type1, type2, type3, mem_size, prefix, code, Name, \
+ text) \
/* static */ Opcode Opcode::Name##_Opcode(Opcode::Name);
#include "src/opcode.def"
#undef WABT_OPCODE
@@ -66,8 +69,9 @@ Opcode::Info Opcode::GetInfo() const {
uint32_t code;
DecodeInvalidOpcode(enum_, &prefix, &code);
const Info invalid_info = {
- "<invalid>", Type::Void, Type::Void, Type::Void,
- 0, prefix, code, PrefixCode(prefix, code),
+ "<invalid>", Type::Void, Type::Void,
+ Type::Void, Type::Void, 0,
+ prefix, code, PrefixCode(prefix, code),
};
return invalid_info;
}
@@ -107,6 +111,69 @@ bool Opcode::IsEnabled(const Features& features) const {
case Opcode::I64Extend8S:
case Opcode::I64Extend16S:
case Opcode::I64Extend32S:
+ case Opcode::I32AtomicLoad:
+ case Opcode::I64AtomicLoad:
+ case Opcode::I32AtomicLoad8U:
+ case Opcode::I32AtomicLoad16U:
+ case Opcode::I64AtomicLoad8U:
+ case Opcode::I64AtomicLoad16U:
+ case Opcode::I64AtomicLoad32U:
+ case Opcode::I32AtomicStore:
+ case Opcode::I64AtomicStore:
+ case Opcode::I32AtomicStore8:
+ case Opcode::I32AtomicStore16:
+ case Opcode::I64AtomicStore8:
+ case Opcode::I64AtomicStore16:
+ case Opcode::I64AtomicStore32:
+ case Opcode::I32AtomicRmwAdd:
+ case Opcode::I64AtomicRmwAdd:
+ case Opcode::I32AtomicRmw8UAdd:
+ case Opcode::I32AtomicRmw16UAdd:
+ case Opcode::I64AtomicRmw8UAdd:
+ case Opcode::I64AtomicRmw16UAdd:
+ case Opcode::I64AtomicRmw32UAdd:
+ case Opcode::I32AtomicRmwSub:
+ case Opcode::I64AtomicRmwSub:
+ case Opcode::I32AtomicRmw8USub:
+ case Opcode::I32AtomicRmw16USub:
+ case Opcode::I64AtomicRmw8USub:
+ case Opcode::I64AtomicRmw16USub:
+ case Opcode::I64AtomicRmw32USub:
+ case Opcode::I32AtomicRmwAnd:
+ case Opcode::I64AtomicRmwAnd:
+ case Opcode::I32AtomicRmw8UAnd:
+ case Opcode::I32AtomicRmw16UAnd:
+ case Opcode::I64AtomicRmw8UAnd:
+ case Opcode::I64AtomicRmw16UAnd:
+ case Opcode::I64AtomicRmw32UAnd:
+ case Opcode::I32AtomicRmwOr:
+ case Opcode::I64AtomicRmwOr:
+ case Opcode::I32AtomicRmw8UOr:
+ case Opcode::I32AtomicRmw16UOr:
+ case Opcode::I64AtomicRmw8UOr:
+ case Opcode::I64AtomicRmw16UOr:
+ case Opcode::I64AtomicRmw32UOr:
+ case Opcode::I32AtomicRmwXor:
+ case Opcode::I64AtomicRmwXor:
+ case Opcode::I32AtomicRmw8UXor:
+ case Opcode::I32AtomicRmw16UXor:
+ case Opcode::I64AtomicRmw8UXor:
+ case Opcode::I64AtomicRmw16UXor:
+ case Opcode::I64AtomicRmw32UXor:
+ case Opcode::I32AtomicRmwXchg:
+ case Opcode::I64AtomicRmwXchg:
+ case Opcode::I32AtomicRmw8UXchg:
+ case Opcode::I32AtomicRmw16UXchg:
+ case Opcode::I64AtomicRmw8UXchg:
+ case Opcode::I64AtomicRmw16UXchg:
+ case Opcode::I64AtomicRmw32UXchg:
+ case Opcode::I32AtomicRmwCmpxchg:
+ case Opcode::I64AtomicRmwCmpxchg:
+ case Opcode::I32AtomicRmw8UCmpxchg:
+ case Opcode::I32AtomicRmw16UCmpxchg:
+ case Opcode::I64AtomicRmw8UCmpxchg:
+ case Opcode::I64AtomicRmw16UCmpxchg:
+ case Opcode::I64AtomicRmw32UCmpxchg:
return features.threads_enabled();
// Interpreter opcodes are never "enabled".
diff --git a/src/opcode.def b/src/opcode.def
index 7ecf1d1d..a263f21b 100644
--- a/src/opcode.def
+++ b/src/opcode.def
@@ -24,212 +24,276 @@
* tr: result type
* t1: type of the 1st parameter
* t2: type of the 2nd parameter
+ * t3: type of the 3rd parameter
* m: memory size of the operation, if any
* prefix: the 1-byte opcode prefix, if any
* code: opcode
* Name: used to generate the opcode enum
* text: a string of the opcode name in the text format
*
- * tr t1 t2 m prefix code Name text
- * ===================================================== */
+ * tr t1 t2 t3 m prefix code Name text
+ * ========================================================== */
-WABT_OPCODE(___, ___, ___, 0, 0, 0x00, Unreachable, "unreachable")
-WABT_OPCODE(___, ___, ___, 0, 0, 0x01, Nop, "nop")
-WABT_OPCODE(___, ___, ___, 0, 0, 0x02, Block, "block")
-WABT_OPCODE(___, ___, ___, 0, 0, 0x03, Loop, "loop")
-WABT_OPCODE(___, ___, ___, 0, 0, 0x04, If, "if")
-WABT_OPCODE(___, ___, ___, 0, 0, 0x05, Else, "else")
-WABT_OPCODE(___, ___, ___, 0, 0, 0x06, Try, "try")
-WABT_OPCODE(___, ___, ___, 0, 0, 0x07, Catch, "catch")
-WABT_OPCODE(___, ___, ___, 0, 0, 0x08, Throw, "throw")
-WABT_OPCODE(___, ___, ___, 0, 0, 0x09, Rethrow, "rethrow")
-WABT_OPCODE(___, ___, ___, 0, 0, 0x0a, CatchAll, "catch_all")
-WABT_OPCODE(___, ___, ___, 0, 0, 0x0b, End, "end")
-WABT_OPCODE(___, ___, ___, 0, 0, 0x0c, Br, "br")
-WABT_OPCODE(___, ___, ___, 0, 0, 0x0d, BrIf, "br_if")
-WABT_OPCODE(___, ___, ___, 0, 0, 0x0e, BrTable, "br_table")
-WABT_OPCODE(___, ___, ___, 0, 0, 0x0f, Return, "return")
-WABT_OPCODE(___, ___, ___, 0, 0, 0x10, Call, "call")
-WABT_OPCODE(___, ___, ___, 0, 0, 0x11, CallIndirect, "call_indirect")
-WABT_OPCODE(___, ___, ___, 0, 0, 0x1a, Drop, "drop")
-WABT_OPCODE(___, ___, ___, 0, 0, 0x1b, Select, "select")
-WABT_OPCODE(___, ___, ___, 0, 0, 0x20, GetLocal, "get_local")
-WABT_OPCODE(___, ___, ___, 0, 0, 0x21, SetLocal, "set_local")
-WABT_OPCODE(___, ___, ___, 0, 0, 0x22, TeeLocal, "tee_local")
-WABT_OPCODE(___, ___, ___, 0, 0, 0x23, GetGlobal, "get_global")
-WABT_OPCODE(___, ___, ___, 0, 0, 0x24, SetGlobal, "set_global")
-WABT_OPCODE(I32, I32, ___, 4, 0, 0x28, I32Load, "i32.load")
-WABT_OPCODE(I64, I32, ___, 8, 0, 0x29, I64Load, "i64.load")
-WABT_OPCODE(F32, I32, ___, 4, 0, 0x2a, F32Load, "f32.load")
-WABT_OPCODE(F64, I32, ___, 8, 0, 0x2b, F64Load, "f64.load")
-WABT_OPCODE(I32, I32, ___, 1, 0, 0x2c, I32Load8S, "i32.load8_s")
-WABT_OPCODE(I32, I32, ___, 1, 0, 0x2d, I32Load8U, "i32.load8_u")
-WABT_OPCODE(I32, I32, ___, 2, 0, 0x2e, I32Load16S, "i32.load16_s")
-WABT_OPCODE(I32, I32, ___, 2, 0, 0x2f, I32Load16U, "i32.load16_u")
-WABT_OPCODE(I64, I32, ___, 1, 0, 0x30, I64Load8S, "i64.load8_s")
-WABT_OPCODE(I64, I32, ___, 1, 0, 0x31, I64Load8U, "i64.load8_u")
-WABT_OPCODE(I64, I32, ___, 2, 0, 0x32, I64Load16S, "i64.load16_s")
-WABT_OPCODE(I64, I32, ___, 2, 0, 0x33, I64Load16U, "i64.load16_u")
-WABT_OPCODE(I64, I32, ___, 4, 0, 0x34, I64Load32S, "i64.load32_s")
-WABT_OPCODE(I64, I32, ___, 4, 0, 0x35, I64Load32U, "i64.load32_u")
-WABT_OPCODE(___, I32, I32, 4, 0, 0x36, I32Store, "i32.store")
-WABT_OPCODE(___, I32, I64, 8, 0, 0x37, I64Store, "i64.store")
-WABT_OPCODE(___, I32, F32, 4, 0, 0x38, F32Store, "f32.store")
-WABT_OPCODE(___, I32, F64, 8, 0, 0x39, F64Store, "f64.store")
-WABT_OPCODE(___, I32, I32, 1, 0, 0x3a, I32Store8, "i32.store8")
-WABT_OPCODE(___, I32, I32, 2, 0, 0x3b, I32Store16, "i32.store16")
-WABT_OPCODE(___, I32, I64, 1, 0, 0x3c, I64Store8, "i64.store8")
-WABT_OPCODE(___, I32, I64, 2, 0, 0x3d, I64Store16, "i64.store16")
-WABT_OPCODE(___, I32, I64, 4, 0, 0x3e, I64Store32, "i64.store32")
-WABT_OPCODE(I32, ___, ___, 0, 0, 0x3f, CurrentMemory, "current_memory")
-WABT_OPCODE(I32, I32, ___, 0, 0, 0x40, GrowMemory, "grow_memory")
-WABT_OPCODE(I32, ___, ___, 0, 0, 0x41, I32Const, "i32.const")
-WABT_OPCODE(I64, ___, ___, 0, 0, 0x42, I64Const, "i64.const")
-WABT_OPCODE(F32, ___, ___, 0, 0, 0x43, F32Const, "f32.const")
-WABT_OPCODE(F64, ___, ___, 0, 0, 0x44, F64Const, "f64.const")
-WABT_OPCODE(I32, I32, ___, 0, 0, 0x45, I32Eqz, "i32.eqz")
-WABT_OPCODE(I32, I32, I32, 0, 0, 0x46, I32Eq, "i32.eq")
-WABT_OPCODE(I32, I32, I32, 0, 0, 0x47, I32Ne, "i32.ne")
-WABT_OPCODE(I32, I32, I32, 0, 0, 0x48, I32LtS, "i32.lt_s")
-WABT_OPCODE(I32, I32, I32, 0, 0, 0x49, I32LtU, "i32.lt_u")
-WABT_OPCODE(I32, I32, I32, 0, 0, 0x4a, I32GtS, "i32.gt_s")
-WABT_OPCODE(I32, I32, I32, 0, 0, 0x4b, I32GtU, "i32.gt_u")
-WABT_OPCODE(I32, I32, I32, 0, 0, 0x4c, I32LeS, "i32.le_s")
-WABT_OPCODE(I32, I32, I32, 0, 0, 0x4d, I32LeU, "i32.le_u")
-WABT_OPCODE(I32, I32, I32, 0, 0, 0x4e, I32GeS, "i32.ge_s")
-WABT_OPCODE(I32, I32, I32, 0, 0, 0x4f, I32GeU, "i32.ge_u")
-WABT_OPCODE(I32, I64, ___, 0, 0, 0x50, I64Eqz, "i64.eqz")
-WABT_OPCODE(I32, I64, I64, 0, 0, 0x51, I64Eq, "i64.eq")
-WABT_OPCODE(I32, I64, I64, 0, 0, 0x52, I64Ne, "i64.ne")
-WABT_OPCODE(I32, I64, I64, 0, 0, 0x53, I64LtS, "i64.lt_s")
-WABT_OPCODE(I32, I64, I64, 0, 0, 0x54, I64LtU, "i64.lt_u")
-WABT_OPCODE(I32, I64, I64, 0, 0, 0x55, I64GtS, "i64.gt_s")
-WABT_OPCODE(I32, I64, I64, 0, 0, 0x56, I64GtU, "i64.gt_u")
-WABT_OPCODE(I32, I64, I64, 0, 0, 0x57, I64LeS, "i64.le_s")
-WABT_OPCODE(I32, I64, I64, 0, 0, 0x58, I64LeU, "i64.le_u")
-WABT_OPCODE(I32, I64, I64, 0, 0, 0x59, I64GeS, "i64.ge_s")
-WABT_OPCODE(I32, I64, I64, 0, 0, 0x5a, I64GeU, "i64.ge_u")
-WABT_OPCODE(I32, F32, F32, 0, 0, 0x5b, F32Eq, "f32.eq")
-WABT_OPCODE(I32, F32, F32, 0, 0, 0x5c, F32Ne, "f32.ne")
-WABT_OPCODE(I32, F32, F32, 0, 0, 0x5d, F32Lt, "f32.lt")
-WABT_OPCODE(I32, F32, F32, 0, 0, 0x5e, F32Gt, "f32.gt")
-WABT_OPCODE(I32, F32, F32, 0, 0, 0x5f, F32Le, "f32.le")
-WABT_OPCODE(I32, F32, F32, 0, 0, 0x60, F32Ge, "f32.ge")
-WABT_OPCODE(I32, F64, F64, 0, 0, 0x61, F64Eq, "f64.eq")
-WABT_OPCODE(I32, F64, F64, 0, 0, 0x62, F64Ne, "f64.ne")
-WABT_OPCODE(I32, F64, F64, 0, 0, 0x63, F64Lt, "f64.lt")
-WABT_OPCODE(I32, F64, F64, 0, 0, 0x64, F64Gt, "f64.gt")
-WABT_OPCODE(I32, F64, F64, 0, 0, 0x65, F64Le, "f64.le")
-WABT_OPCODE(I32, F64, F64, 0, 0, 0x66, F64Ge, "f64.ge")
-WABT_OPCODE(I32, I32, ___, 0, 0, 0x67, I32Clz, "i32.clz")
-WABT_OPCODE(I32, I32, ___, 0, 0, 0x68, I32Ctz, "i32.ctz")
-WABT_OPCODE(I32, I32, ___, 0, 0, 0x69, I32Popcnt, "i32.popcnt")
-WABT_OPCODE(I32, I32, I32, 0, 0, 0x6a, I32Add, "i32.add")
-WABT_OPCODE(I32, I32, I32, 0, 0, 0x6b, I32Sub, "i32.sub")
-WABT_OPCODE(I32, I32, I32, 0, 0, 0x6c, I32Mul, "i32.mul")
-WABT_OPCODE(I32, I32, I32, 0, 0, 0x6d, I32DivS, "i32.div_s")
-WABT_OPCODE(I32, I32, I32, 0, 0, 0x6e, I32DivU, "i32.div_u")
-WABT_OPCODE(I32, I32, I32, 0, 0, 0x6f, I32RemS, "i32.rem_s")
-WABT_OPCODE(I32, I32, I32, 0, 0, 0x70, I32RemU, "i32.rem_u")
-WABT_OPCODE(I32, I32, I32, 0, 0, 0x71, I32And, "i32.and")
-WABT_OPCODE(I32, I32, I32, 0, 0, 0x72, I32Or, "i32.or")
-WABT_OPCODE(I32, I32, I32, 0, 0, 0x73, I32Xor, "i32.xor")
-WABT_OPCODE(I32, I32, I32, 0, 0, 0x74, I32Shl, "i32.shl")
-WABT_OPCODE(I32, I32, I32, 0, 0, 0x75, I32ShrS, "i32.shr_s")
-WABT_OPCODE(I32, I32, I32, 0, 0, 0x76, I32ShrU, "i32.shr_u")
-WABT_OPCODE(I32, I32, I32, 0, 0, 0x77, I32Rotl, "i32.rotl")
-WABT_OPCODE(I32, I32, I32, 0, 0, 0x78, I32Rotr, "i32.rotr")
-WABT_OPCODE(I64, I64, ___, 0, 0, 0x79, I64Clz, "i64.clz")
-WABT_OPCODE(I64, I64, ___, 0, 0, 0x7a, I64Ctz, "i64.ctz")
-WABT_OPCODE(I64, I64, ___, 0, 0, 0x7b, I64Popcnt, "i64.popcnt")
-WABT_OPCODE(I64, I64, I64, 0, 0, 0x7c, I64Add, "i64.add")
-WABT_OPCODE(I64, I64, I64, 0, 0, 0x7d, I64Sub, "i64.sub")
-WABT_OPCODE(I64, I64, I64, 0, 0, 0x7e, I64Mul, "i64.mul")
-WABT_OPCODE(I64, I64, I64, 0, 0, 0x7f, I64DivS, "i64.div_s")
-WABT_OPCODE(I64, I64, I64, 0, 0, 0x80, I64DivU, "i64.div_u")
-WABT_OPCODE(I64, I64, I64, 0, 0, 0x81, I64RemS, "i64.rem_s")
-WABT_OPCODE(I64, I64, I64, 0, 0, 0x82, I64RemU, "i64.rem_u")
-WABT_OPCODE(I64, I64, I64, 0, 0, 0x83, I64And, "i64.and")
-WABT_OPCODE(I64, I64, I64, 0, 0, 0x84, I64Or, "i64.or")
-WABT_OPCODE(I64, I64, I64, 0, 0, 0x85, I64Xor, "i64.xor")
-WABT_OPCODE(I64, I64, I64, 0, 0, 0x86, I64Shl, "i64.shl")
-WABT_OPCODE(I64, I64, I64, 0, 0, 0x87, I64ShrS, "i64.shr_s")
-WABT_OPCODE(I64, I64, I64, 0, 0, 0x88, I64ShrU, "i64.shr_u")
-WABT_OPCODE(I64, I64, I64, 0, 0, 0x89, I64Rotl, "i64.rotl")
-WABT_OPCODE(I64, I64, I64, 0, 0, 0x8a, I64Rotr, "i64.rotr")
-WABT_OPCODE(F32, F32, F32, 0, 0, 0x8b, F32Abs, "f32.abs")
-WABT_OPCODE(F32, F32, F32, 0, 0, 0x8c, F32Neg, "f32.neg")
-WABT_OPCODE(F32, F32, F32, 0, 0, 0x8d, F32Ceil, "f32.ceil")
-WABT_OPCODE(F32, F32, F32, 0, 0, 0x8e, F32Floor, "f32.floor")
-WABT_OPCODE(F32, F32, F32, 0, 0, 0x8f, F32Trunc, "f32.trunc")
-WABT_OPCODE(F32, F32, F32, 0, 0, 0x90, F32Nearest, "f32.nearest")
-WABT_OPCODE(F32, F32, F32, 0, 0, 0x91, F32Sqrt, "f32.sqrt")
-WABT_OPCODE(F32, F32, F32, 0, 0, 0x92, F32Add, "f32.add")
-WABT_OPCODE(F32, F32, F32, 0, 0, 0x93, F32Sub, "f32.sub")
-WABT_OPCODE(F32, F32, F32, 0, 0, 0x94, F32Mul, "f32.mul")
-WABT_OPCODE(F32, F32, F32, 0, 0, 0x95, F32Div, "f32.div")
-WABT_OPCODE(F32, F32, F32, 0, 0, 0x96, F32Min, "f32.min")
-WABT_OPCODE(F32, F32, F32, 0, 0, 0x97, F32Max, "f32.max")
-WABT_OPCODE(F32, F32, F32, 0, 0, 0x98, F32Copysign, "f32.copysign")
-WABT_OPCODE(F64, F64, F64, 0, 0, 0x99, F64Abs, "f64.abs")
-WABT_OPCODE(F64, F64, F64, 0, 0, 0x9a, F64Neg, "f64.neg")
-WABT_OPCODE(F64, F64, F64, 0, 0, 0x9b, F64Ceil, "f64.ceil")
-WABT_OPCODE(F64, F64, F64, 0, 0, 0x9c, F64Floor, "f64.floor")
-WABT_OPCODE(F64, F64, F64, 0, 0, 0x9d, F64Trunc, "f64.trunc")
-WABT_OPCODE(F64, F64, F64, 0, 0, 0x9e, F64Nearest, "f64.nearest")
-WABT_OPCODE(F64, F64, F64, 0, 0, 0x9f, F64Sqrt, "f64.sqrt")
-WABT_OPCODE(F64, F64, F64, 0, 0, 0xa0, F64Add, "f64.add")
-WABT_OPCODE(F64, F64, F64, 0, 0, 0xa1, F64Sub, "f64.sub")
-WABT_OPCODE(F64, F64, F64, 0, 0, 0xa2, F64Mul, "f64.mul")
-WABT_OPCODE(F64, F64, F64, 0, 0, 0xa3, F64Div, "f64.div")
-WABT_OPCODE(F64, F64, F64, 0, 0, 0xa4, F64Min, "f64.min")
-WABT_OPCODE(F64, F64, F64, 0, 0, 0xa5, F64Max, "f64.max")
-WABT_OPCODE(F64, F64, F64, 0, 0, 0xa6, F64Copysign, "f64.copysign")
-WABT_OPCODE(I32, I64, ___, 0, 0, 0xa7, I32WrapI64, "i32.wrap/i64")
-WABT_OPCODE(I32, F32, ___, 0, 0, 0xa8, I32TruncSF32, "i32.trunc_s/f32")
-WABT_OPCODE(I32, F32, ___, 0, 0, 0xa9, I32TruncUF32, "i32.trunc_u/f32")
-WABT_OPCODE(I32, F64, ___, 0, 0, 0xaa, I32TruncSF64, "i32.trunc_s/f64")
-WABT_OPCODE(I32, F64, ___, 0, 0, 0xab, I32TruncUF64, "i32.trunc_u/f64")
-WABT_OPCODE(I64, I32, ___, 0, 0, 0xac, I64ExtendSI32, "i64.extend_s/i32")
-WABT_OPCODE(I64, I32, ___, 0, 0, 0xad, I64ExtendUI32, "i64.extend_u/i32")
-WABT_OPCODE(I64, F32, ___, 0, 0, 0xae, I64TruncSF32, "i64.trunc_s/f32")
-WABT_OPCODE(I64, F32, ___, 0, 0, 0xaf, I64TruncUF32, "i64.trunc_u/f32")
-WABT_OPCODE(I64, F64, ___, 0, 0, 0xb0, I64TruncSF64, "i64.trunc_s/f64")
-WABT_OPCODE(I64, F64, ___, 0, 0, 0xb1, I64TruncUF64, "i64.trunc_u/f64")
-WABT_OPCODE(F32, I32, ___, 0, 0, 0xb2, F32ConvertSI32, "f32.convert_s/i32")
-WABT_OPCODE(F32, I32, ___, 0, 0, 0xb3, F32ConvertUI32, "f32.convert_u/i32")
-WABT_OPCODE(F32, I64, ___, 0, 0, 0xb4, F32ConvertSI64, "f32.convert_s/i64")
-WABT_OPCODE(F32, I64, ___, 0, 0, 0xb5, F32ConvertUI64, "f32.convert_u/i64")
-WABT_OPCODE(F32, F64, ___, 0, 0, 0xb6, F32DemoteF64, "f32.demote/f64")
-WABT_OPCODE(F64, I32, ___, 0, 0, 0xb7, F64ConvertSI32, "f64.convert_s/i32")
-WABT_OPCODE(F64, I32, ___, 0, 0, 0xb8, F64ConvertUI32, "f64.convert_u/i32")
-WABT_OPCODE(F64, I64, ___, 0, 0, 0xb9, F64ConvertSI64, "f64.convert_s/i64")
-WABT_OPCODE(F64, I64, ___, 0, 0, 0xba, F64ConvertUI64, "f64.convert_u/i64")
-WABT_OPCODE(F64, F32, ___, 0, 0, 0xbb, F64PromoteF32, "f64.promote/f32")
-WABT_OPCODE(I32, F32, ___, 0, 0, 0xbc, I32ReinterpretF32, "i32.reinterpret/f32")
-WABT_OPCODE(I64, F64, ___, 0, 0, 0xbd, I64ReinterpretF64, "i64.reinterpret/f64")
-WABT_OPCODE(F32, I32, ___, 0, 0, 0xbe, F32ReinterpretI32, "f32.reinterpret/i32")
-WABT_OPCODE(F64, I64, ___, 0, 0, 0xbf, F64ReinterpretI64, "f64.reinterpret/i64")
+WABT_OPCODE(___, ___, ___, ___, 0, 0, 0x00, Unreachable, "unreachable")
+WABT_OPCODE(___, ___, ___, ___, 0, 0, 0x01, Nop, "nop")
+WABT_OPCODE(___, ___, ___, ___, 0, 0, 0x02, Block, "block")
+WABT_OPCODE(___, ___, ___, ___, 0, 0, 0x03, Loop, "loop")
+WABT_OPCODE(___, ___, ___, ___, 0, 0, 0x04, If, "if")
+WABT_OPCODE(___, ___, ___, ___, 0, 0, 0x05, Else, "else")
+WABT_OPCODE(___, ___, ___, ___, 0, 0, 0x06, Try, "try")
+WABT_OPCODE(___, ___, ___, ___, 0, 0, 0x07, Catch, "catch")
+WABT_OPCODE(___, ___, ___, ___, 0, 0, 0x08, Throw, "throw")
+WABT_OPCODE(___, ___, ___, ___, 0, 0, 0x09, Rethrow, "rethrow")
+WABT_OPCODE(___, ___, ___, ___, 0, 0, 0x0a, CatchAll, "catch_all")
+WABT_OPCODE(___, ___, ___, ___, 0, 0, 0x0b, End, "end")
+WABT_OPCODE(___, ___, ___, ___, 0, 0, 0x0c, Br, "br")
+WABT_OPCODE(___, ___, ___, ___, 0, 0, 0x0d, BrIf, "br_if")
+WABT_OPCODE(___, ___, ___, ___, 0, 0, 0x0e, BrTable, "br_table")
+WABT_OPCODE(___, ___, ___, ___, 0, 0, 0x0f, Return, "return")
+WABT_OPCODE(___, ___, ___, ___, 0, 0, 0x10, Call, "call")
+WABT_OPCODE(___, ___, ___, ___, 0, 0, 0x11, CallIndirect, "call_indirect")
+WABT_OPCODE(___, ___, ___, ___, 0, 0, 0x1a, Drop, "drop")
+WABT_OPCODE(___, ___, ___, ___, 0, 0, 0x1b, Select, "select")
+WABT_OPCODE(___, ___, ___, ___, 0, 0, 0x20, GetLocal, "get_local")
+WABT_OPCODE(___, ___, ___, ___, 0, 0, 0x21, SetLocal, "set_local")
+WABT_OPCODE(___, ___, ___, ___, 0, 0, 0x22, TeeLocal, "tee_local")
+WABT_OPCODE(___, ___, ___, ___, 0, 0, 0x23, GetGlobal, "get_global")
+WABT_OPCODE(___, ___, ___, ___, 0, 0, 0x24, SetGlobal, "set_global")
+WABT_OPCODE(I32, I32, ___, ___, 4, 0, 0x28, I32Load, "i32.load")
+WABT_OPCODE(I64, I32, ___, ___, 8, 0, 0x29, I64Load, "i64.load")
+WABT_OPCODE(F32, I32, ___, ___, 4, 0, 0x2a, F32Load, "f32.load")
+WABT_OPCODE(F64, I32, ___, ___, 8, 0, 0x2b, F64Load, "f64.load")
+WABT_OPCODE(I32, I32, ___, ___, 1, 0, 0x2c, I32Load8S, "i32.load8_s")
+WABT_OPCODE(I32, I32, ___, ___, 1, 0, 0x2d, I32Load8U, "i32.load8_u")
+WABT_OPCODE(I32, I32, ___, ___, 2, 0, 0x2e, I32Load16S, "i32.load16_s")
+WABT_OPCODE(I32, I32, ___, ___, 2, 0, 0x2f, I32Load16U, "i32.load16_u")
+WABT_OPCODE(I64, I32, ___, ___, 1, 0, 0x30, I64Load8S, "i64.load8_s")
+WABT_OPCODE(I64, I32, ___, ___, 1, 0, 0x31, I64Load8U, "i64.load8_u")
+WABT_OPCODE(I64, I32, ___, ___, 2, 0, 0x32, I64Load16S, "i64.load16_s")
+WABT_OPCODE(I64, I32, ___, ___, 2, 0, 0x33, I64Load16U, "i64.load16_u")
+WABT_OPCODE(I64, I32, ___, ___, 4, 0, 0x34, I64Load32S, "i64.load32_s")
+WABT_OPCODE(I64, I32, ___, ___, 4, 0, 0x35, I64Load32U, "i64.load32_u")
+WABT_OPCODE(___, I32, I32, ___, 4, 0, 0x36, I32Store, "i32.store")
+WABT_OPCODE(___, I32, I64, ___, 8, 0, 0x37, I64Store, "i64.store")
+WABT_OPCODE(___, I32, F32, ___, 4, 0, 0x38, F32Store, "f32.store")
+WABT_OPCODE(___, I32, F64, ___, 8, 0, 0x39, F64Store, "f64.store")
+WABT_OPCODE(___, I32, I32, ___, 1, 0, 0x3a, I32Store8, "i32.store8")
+WABT_OPCODE(___, I32, I32, ___, 2, 0, 0x3b, I32Store16, "i32.store16")
+WABT_OPCODE(___, I32, I64, ___, 1, 0, 0x3c, I64Store8, "i64.store8")
+WABT_OPCODE(___, I32, I64, ___, 2, 0, 0x3d, I64Store16, "i64.store16")
+WABT_OPCODE(___, I32, I64, ___, 4, 0, 0x3e, I64Store32, "i64.store32")
+WABT_OPCODE(I32, ___, ___, ___, 0, 0, 0x3f, CurrentMemory, "current_memory")
+WABT_OPCODE(I32, I32, ___, ___, 0, 0, 0x40, GrowMemory, "grow_memory")
+WABT_OPCODE(I32, ___, ___, ___, 0, 0, 0x41, I32Const, "i32.const")
+WABT_OPCODE(I64, ___, ___, ___, 0, 0, 0x42, I64Const, "i64.const")
+WABT_OPCODE(F32, ___, ___, ___, 0, 0, 0x43, F32Const, "f32.const")
+WABT_OPCODE(F64, ___, ___, ___, 0, 0, 0x44, F64Const, "f64.const")
+WABT_OPCODE(I32, I32, ___, ___, 0, 0, 0x45, I32Eqz, "i32.eqz")
+WABT_OPCODE(I32, I32, I32, ___, 0, 0, 0x46, I32Eq, "i32.eq")
+WABT_OPCODE(I32, I32, I32, ___, 0, 0, 0x47, I32Ne, "i32.ne")
+WABT_OPCODE(I32, I32, I32, ___, 0, 0, 0x48, I32LtS, "i32.lt_s")
+WABT_OPCODE(I32, I32, I32, ___, 0, 0, 0x49, I32LtU, "i32.lt_u")
+WABT_OPCODE(I32, I32, I32, ___, 0, 0, 0x4a, I32GtS, "i32.gt_s")
+WABT_OPCODE(I32, I32, I32, ___, 0, 0, 0x4b, I32GtU, "i32.gt_u")
+WABT_OPCODE(I32, I32, I32, ___, 0, 0, 0x4c, I32LeS, "i32.le_s")
+WABT_OPCODE(I32, I32, I32, ___, 0, 0, 0x4d, I32LeU, "i32.le_u")
+WABT_OPCODE(I32, I32, I32, ___, 0, 0, 0x4e, I32GeS, "i32.ge_s")
+WABT_OPCODE(I32, I32, I32, ___, 0, 0, 0x4f, I32GeU, "i32.ge_u")
+WABT_OPCODE(I32, I64, ___, ___, 0, 0, 0x50, I64Eqz, "i64.eqz")
+WABT_OPCODE(I32, I64, I64, ___, 0, 0, 0x51, I64Eq, "i64.eq")
+WABT_OPCODE(I32, I64, I64, ___, 0, 0, 0x52, I64Ne, "i64.ne")
+WABT_OPCODE(I32, I64, I64, ___, 0, 0, 0x53, I64LtS, "i64.lt_s")
+WABT_OPCODE(I32, I64, I64, ___, 0, 0, 0x54, I64LtU, "i64.lt_u")
+WABT_OPCODE(I32, I64, I64, ___, 0, 0, 0x55, I64GtS, "i64.gt_s")
+WABT_OPCODE(I32, I64, I64, ___, 0, 0, 0x56, I64GtU, "i64.gt_u")
+WABT_OPCODE(I32, I64, I64, ___, 0, 0, 0x57, I64LeS, "i64.le_s")
+WABT_OPCODE(I32, I64, I64, ___, 0, 0, 0x58, I64LeU, "i64.le_u")
+WABT_OPCODE(I32, I64, I64, ___, 0, 0, 0x59, I64GeS, "i64.ge_s")
+WABT_OPCODE(I32, I64, I64, ___, 0, 0, 0x5a, I64GeU, "i64.ge_u")
+WABT_OPCODE(I32, F32, F32, ___, 0, 0, 0x5b, F32Eq, "f32.eq")
+WABT_OPCODE(I32, F32, F32, ___, 0, 0, 0x5c, F32Ne, "f32.ne")
+WABT_OPCODE(I32, F32, F32, ___, 0, 0, 0x5d, F32Lt, "f32.lt")
+WABT_OPCODE(I32, F32, F32, ___, 0, 0, 0x5e, F32Gt, "f32.gt")
+WABT_OPCODE(I32, F32, F32, ___, 0, 0, 0x5f, F32Le, "f32.le")
+WABT_OPCODE(I32, F32, F32, ___, 0, 0, 0x60, F32Ge, "f32.ge")
+WABT_OPCODE(I32, F64, F64, ___, 0, 0, 0x61, F64Eq, "f64.eq")
+WABT_OPCODE(I32, F64, F64, ___, 0, 0, 0x62, F64Ne, "f64.ne")
+WABT_OPCODE(I32, F64, F64, ___, 0, 0, 0x63, F64Lt, "f64.lt")
+WABT_OPCODE(I32, F64, F64, ___, 0, 0, 0x64, F64Gt, "f64.gt")
+WABT_OPCODE(I32, F64, F64, ___, 0, 0, 0x65, F64Le, "f64.le")
+WABT_OPCODE(I32, F64, F64, ___, 0, 0, 0x66, F64Ge, "f64.ge")
+WABT_OPCODE(I32, I32, ___, ___, 0, 0, 0x67, I32Clz, "i32.clz")
+WABT_OPCODE(I32, I32, ___, ___, 0, 0, 0x68, I32Ctz, "i32.ctz")
+WABT_OPCODE(I32, I32, ___, ___, 0, 0, 0x69, I32Popcnt, "i32.popcnt")
+WABT_OPCODE(I32, I32, I32, ___, 0, 0, 0x6a, I32Add, "i32.add")
+WABT_OPCODE(I32, I32, I32, ___, 0, 0, 0x6b, I32Sub, "i32.sub")
+WABT_OPCODE(I32, I32, I32, ___, 0, 0, 0x6c, I32Mul, "i32.mul")
+WABT_OPCODE(I32, I32, I32, ___, 0, 0, 0x6d, I32DivS, "i32.div_s")
+WABT_OPCODE(I32, I32, I32, ___, 0, 0, 0x6e, I32DivU, "i32.div_u")
+WABT_OPCODE(I32, I32, I32, ___, 0, 0, 0x6f, I32RemS, "i32.rem_s")
+WABT_OPCODE(I32, I32, I32, ___, 0, 0, 0x70, I32RemU, "i32.rem_u")
+WABT_OPCODE(I32, I32, I32, ___, 0, 0, 0x71, I32And, "i32.and")
+WABT_OPCODE(I32, I32, I32, ___, 0, 0, 0x72, I32Or, "i32.or")
+WABT_OPCODE(I32, I32, I32, ___, 0, 0, 0x73, I32Xor, "i32.xor")
+WABT_OPCODE(I32, I32, I32, ___, 0, 0, 0x74, I32Shl, "i32.shl")
+WABT_OPCODE(I32, I32, I32, ___, 0, 0, 0x75, I32ShrS, "i32.shr_s")
+WABT_OPCODE(I32, I32, I32, ___, 0, 0, 0x76, I32ShrU, "i32.shr_u")
+WABT_OPCODE(I32, I32, I32, ___, 0, 0, 0x77, I32Rotl, "i32.rotl")
+WABT_OPCODE(I32, I32, I32, ___, 0, 0, 0x78, I32Rotr, "i32.rotr")
+WABT_OPCODE(I64, I64, ___, ___, 0, 0, 0x79, I64Clz, "i64.clz")
+WABT_OPCODE(I64, I64, ___, ___, 0, 0, 0x7a, I64Ctz, "i64.ctz")
+WABT_OPCODE(I64, I64, ___, ___, 0, 0, 0x7b, I64Popcnt, "i64.popcnt")
+WABT_OPCODE(I64, I64, I64, ___, 0, 0, 0x7c, I64Add, "i64.add")
+WABT_OPCODE(I64, I64, I64, ___, 0, 0, 0x7d, I64Sub, "i64.sub")
+WABT_OPCODE(I64, I64, I64, ___, 0, 0, 0x7e, I64Mul, "i64.mul")
+WABT_OPCODE(I64, I64, I64, ___, 0, 0, 0x7f, I64DivS, "i64.div_s")
+WABT_OPCODE(I64, I64, I64, ___, 0, 0, 0x80, I64DivU, "i64.div_u")
+WABT_OPCODE(I64, I64, I64, ___, 0, 0, 0x81, I64RemS, "i64.rem_s")
+WABT_OPCODE(I64, I64, I64, ___, 0, 0, 0x82, I64RemU, "i64.rem_u")
+WABT_OPCODE(I64, I64, I64, ___, 0, 0, 0x83, I64And, "i64.and")
+WABT_OPCODE(I64, I64, I64, ___, 0, 0, 0x84, I64Or, "i64.or")
+WABT_OPCODE(I64, I64, I64, ___, 0, 0, 0x85, I64Xor, "i64.xor")
+WABT_OPCODE(I64, I64, I64, ___, 0, 0, 0x86, I64Shl, "i64.shl")
+WABT_OPCODE(I64, I64, I64, ___, 0, 0, 0x87, I64ShrS, "i64.shr_s")
+WABT_OPCODE(I64, I64, I64, ___, 0, 0, 0x88, I64ShrU, "i64.shr_u")
+WABT_OPCODE(I64, I64, I64, ___, 0, 0, 0x89, I64Rotl, "i64.rotl")
+WABT_OPCODE(I64, I64, I64, ___, 0, 0, 0x8a, I64Rotr, "i64.rotr")
+WABT_OPCODE(F32, F32, F32, ___, 0, 0, 0x8b, F32Abs, "f32.abs")
+WABT_OPCODE(F32, F32, F32, ___, 0, 0, 0x8c, F32Neg, "f32.neg")
+WABT_OPCODE(F32, F32, F32, ___, 0, 0, 0x8d, F32Ceil, "f32.ceil")
+WABT_OPCODE(F32, F32, F32, ___, 0, 0, 0x8e, F32Floor, "f32.floor")
+WABT_OPCODE(F32, F32, F32, ___, 0, 0, 0x8f, F32Trunc, "f32.trunc")
+WABT_OPCODE(F32, F32, F32, ___, 0, 0, 0x90, F32Nearest, "f32.nearest")
+WABT_OPCODE(F32, F32, F32, ___, 0, 0, 0x91, F32Sqrt, "f32.sqrt")
+WABT_OPCODE(F32, F32, F32, ___, 0, 0, 0x92, F32Add, "f32.add")
+WABT_OPCODE(F32, F32, F32, ___, 0, 0, 0x93, F32Sub, "f32.sub")
+WABT_OPCODE(F32, F32, F32, ___, 0, 0, 0x94, F32Mul, "f32.mul")
+WABT_OPCODE(F32, F32, F32, ___, 0, 0, 0x95, F32Div, "f32.div")
+WABT_OPCODE(F32, F32, F32, ___, 0, 0, 0x96, F32Min, "f32.min")
+WABT_OPCODE(F32, F32, F32, ___, 0, 0, 0x97, F32Max, "f32.max")
+WABT_OPCODE(F32, F32, F32, ___, 0, 0, 0x98, F32Copysign, "f32.copysign")
+WABT_OPCODE(F64, F64, F64, ___, 0, 0, 0x99, F64Abs, "f64.abs")
+WABT_OPCODE(F64, F64, F64, ___, 0, 0, 0x9a, F64Neg, "f64.neg")
+WABT_OPCODE(F64, F64, F64, ___, 0, 0, 0x9b, F64Ceil, "f64.ceil")
+WABT_OPCODE(F64, F64, F64, ___, 0, 0, 0x9c, F64Floor, "f64.floor")
+WABT_OPCODE(F64, F64, F64, ___, 0, 0, 0x9d, F64Trunc, "f64.trunc")
+WABT_OPCODE(F64, F64, F64, ___, 0, 0, 0x9e, F64Nearest, "f64.nearest")
+WABT_OPCODE(F64, F64, F64, ___, 0, 0, 0x9f, F64Sqrt, "f64.sqrt")
+WABT_OPCODE(F64, F64, F64, ___, 0, 0, 0xa0, F64Add, "f64.add")
+WABT_OPCODE(F64, F64, F64, ___, 0, 0, 0xa1, F64Sub, "f64.sub")
+WABT_OPCODE(F64, F64, F64, ___, 0, 0, 0xa2, F64Mul, "f64.mul")
+WABT_OPCODE(F64, F64, F64, ___, 0, 0, 0xa3, F64Div, "f64.div")
+WABT_OPCODE(F64, F64, F64, ___, 0, 0, 0xa4, F64Min, "f64.min")
+WABT_OPCODE(F64, F64, F64, ___, 0, 0, 0xa5, F64Max, "f64.max")
+WABT_OPCODE(F64, F64, F64, ___, 0, 0, 0xa6, F64Copysign, "f64.copysign")
+WABT_OPCODE(I32, I64, ___, ___, 0, 0, 0xa7, I32WrapI64, "i32.wrap/i64")
+WABT_OPCODE(I32, F32, ___, ___, 0, 0, 0xa8, I32TruncSF32, "i32.trunc_s/f32")
+WABT_OPCODE(I32, F32, ___, ___, 0, 0, 0xa9, I32TruncUF32, "i32.trunc_u/f32")
+WABT_OPCODE(I32, F64, ___, ___, 0, 0, 0xaa, I32TruncSF64, "i32.trunc_s/f64")
+WABT_OPCODE(I32, F64, ___, ___, 0, 0, 0xab, I32TruncUF64, "i32.trunc_u/f64")
+WABT_OPCODE(I64, I32, ___, ___, 0, 0, 0xac, I64ExtendSI32, "i64.extend_s/i32")
+WABT_OPCODE(I64, I32, ___, ___, 0, 0, 0xad, I64ExtendUI32, "i64.extend_u/i32")
+WABT_OPCODE(I64, F32, ___, ___, 0, 0, 0xae, I64TruncSF32, "i64.trunc_s/f32")
+WABT_OPCODE(I64, F32, ___, ___, 0, 0, 0xaf, I64TruncUF32, "i64.trunc_u/f32")
+WABT_OPCODE(I64, F64, ___, ___, 0, 0, 0xb0, I64TruncSF64, "i64.trunc_s/f64")
+WABT_OPCODE(I64, F64, ___, ___, 0, 0, 0xb1, I64TruncUF64, "i64.trunc_u/f64")
+WABT_OPCODE(F32, I32, ___, ___, 0, 0, 0xb2, F32ConvertSI32, "f32.convert_s/i32")
+WABT_OPCODE(F32, I32, ___, ___, 0, 0, 0xb3, F32ConvertUI32, "f32.convert_u/i32")
+WABT_OPCODE(F32, I64, ___, ___, 0, 0, 0xb4, F32ConvertSI64, "f32.convert_s/i64")
+WABT_OPCODE(F32, I64, ___, ___, 0, 0, 0xb5, F32ConvertUI64, "f32.convert_u/i64")
+WABT_OPCODE(F32, F64, ___, ___, 0, 0, 0xb6, F32DemoteF64, "f32.demote/f64")
+WABT_OPCODE(F64, I32, ___, ___, 0, 0, 0xb7, F64ConvertSI32, "f64.convert_s/i32")
+WABT_OPCODE(F64, I32, ___, ___, 0, 0, 0xb8, F64ConvertUI32, "f64.convert_u/i32")
+WABT_OPCODE(F64, I64, ___, ___, 0, 0, 0xb9, F64ConvertSI64, "f64.convert_s/i64")
+WABT_OPCODE(F64, I64, ___, ___, 0, 0, 0xba, F64ConvertUI64, "f64.convert_u/i64")
+WABT_OPCODE(F64, F32, ___, ___, 0, 0, 0xbb, F64PromoteF32, "f64.promote/f32")
+WABT_OPCODE(I32, F32, ___, ___, 0, 0, 0xbc, I32ReinterpretF32, "i32.reinterpret/f32")
+WABT_OPCODE(I64, F64, ___, ___, 0, 0, 0xbd, I64ReinterpretF64, "i64.reinterpret/f64")
+WABT_OPCODE(F32, I32, ___, ___, 0, 0, 0xbe, F32ReinterpretI32, "f32.reinterpret/i32")
+WABT_OPCODE(F64, I64, ___, ___, 0, 0, 0xbf, F64ReinterpretI64, "f64.reinterpret/i64")
-WABT_OPCODE(I32, I32, ___, 0, 0, 0xC0, I32Extend8S, "i32.extend8_s")
-WABT_OPCODE(I32, I32, ___, 0, 0, 0xC1, I32Extend16S, "i32.extend16_s")
-WABT_OPCODE(I64, I64, ___, 0, 0, 0xC2, I64Extend8S, "i64.extend8_s")
-WABT_OPCODE(I64, I64, ___, 0, 0, 0xC3, I64Extend16S, "i64.extend16_s")
-WABT_OPCODE(I64, I64, ___, 0, 0, 0xC4, I64Extend32S, "i64.extend32_s")
+WABT_OPCODE(I32, I32, ___, ___, 0, 0, 0xC0, I32Extend8S, "i32.extend8_s")
+WABT_OPCODE(I32, I32, ___, ___, 0, 0, 0xC1, I32Extend16S, "i32.extend16_s")
+WABT_OPCODE(I64, I64, ___, ___, 0, 0, 0xC2, I64Extend8S, "i64.extend8_s")
+WABT_OPCODE(I64, I64, ___, ___, 0, 0, 0xC3, I64Extend16S, "i64.extend16_s")
+WABT_OPCODE(I64, I64, ___, ___, 0, 0, 0xC4, I64Extend32S, "i64.extend32_s")
/* Interpreter-only opcodes */
-WABT_OPCODE(___, ___, ___, 0, 0, 0xe0, InterpreterAlloca, "alloca")
-WABT_OPCODE(___, ___, ___, 0, 0, 0xe1, InterpreterBrUnless, "br_unless")
-WABT_OPCODE(___, ___, ___, 0, 0, 0xe2, InterpreterCallHost, "call_host")
-WABT_OPCODE(___, ___, ___, 0, 0, 0xe3, InterpreterData, "data")
-WABT_OPCODE(___, ___, ___, 0, 0, 0xe4, InterpreterDropKeep, "drop_keep")
+WABT_OPCODE(___, ___, ___, ___, 0, 0, 0xe0, InterpreterAlloca, "alloca")
+WABT_OPCODE(___, ___, ___, ___, 0, 0, 0xe1, InterpreterBrUnless, "br_unless")
+WABT_OPCODE(___, ___, ___, ___, 0, 0, 0xe2, InterpreterCallHost, "call_host")
+WABT_OPCODE(___, ___, ___, ___, 0, 0, 0xe3, InterpreterData, "data")
+WABT_OPCODE(___, ___, ___, ___, 0, 0, 0xe4, InterpreterDropKeep, "drop_keep")
-WABT_OPCODE(I32, F32, ___, 0, 0xfc, 0x00, I32TruncSSatF32, "i32.trunc_s:sat/f32")
-WABT_OPCODE(I32, F32, ___, 0, 0xfc, 0x01, I32TruncUSatF32, "i32.trunc_u:sat/f32")
-WABT_OPCODE(I32, F64, ___, 0, 0xfc, 0x02, I32TruncSSatF64, "i32.trunc_s:sat/f64")
-WABT_OPCODE(I32, F64, ___, 0, 0xfc, 0x03, I32TruncUSatF64, "i32.trunc_u:sat/f64")
-WABT_OPCODE(I64, F32, ___, 0, 0xfc, 0x04, I64TruncSSatF32, "i64.trunc_s:sat/f32")
-WABT_OPCODE(I64, F32, ___, 0, 0xfc, 0x05, I64TruncUSatF32, "i64.trunc_u:sat/f32")
-WABT_OPCODE(I64, F64, ___, 0, 0xfc, 0x06, I64TruncSSatF64, "i64.trunc_s:sat/f64")
-WABT_OPCODE(I64, F64, ___, 0, 0xfc, 0x07, I64TruncUSatF64, "i64.trunc_u:sat/f64")
+WABT_OPCODE(I32, F32, ___, ___, 0, 0xfc, 0x00, I32TruncSSatF32, "i32.trunc_s:sat/f32")
+WABT_OPCODE(I32, F32, ___, ___, 0, 0xfc, 0x01, I32TruncUSatF32, "i32.trunc_u:sat/f32")
+WABT_OPCODE(I32, F64, ___, ___, 0, 0xfc, 0x02, I32TruncSSatF64, "i32.trunc_s:sat/f64")
+WABT_OPCODE(I32, F64, ___, ___, 0, 0xfc, 0x03, I32TruncUSatF64, "i32.trunc_u:sat/f64")
+WABT_OPCODE(I64, F32, ___, ___, 0, 0xfc, 0x04, I64TruncSSatF32, "i64.trunc_s:sat/f32")
+WABT_OPCODE(I64, F32, ___, ___, 0, 0xfc, 0x05, I64TruncUSatF32, "i64.trunc_u:sat/f32")
+WABT_OPCODE(I64, F64, ___, ___, 0, 0xfc, 0x06, I64TruncSSatF64, "i64.trunc_s:sat/f64")
+WABT_OPCODE(I64, F64, ___, ___, 0, 0xfc, 0x07, I64TruncUSatF64, "i64.trunc_u:sat/f64")
+WABT_OPCODE(I32, I32, ___, ___, 4, 0xfe, 0x10, I32AtomicLoad, "i32.atomic.load")
+WABT_OPCODE(I64, I32, ___, ___, 8, 0xfe, 0x11, I64AtomicLoad, "i64.atomic.load")
+WABT_OPCODE(I32, I32, ___, ___, 1, 0xfe, 0x12, I32AtomicLoad8U, "i32.atomic.load8_u")
+WABT_OPCODE(I32, I32, ___, ___, 2, 0xfe, 0x13, I32AtomicLoad16U, "i32.atomic.load16_u")
+WABT_OPCODE(I64, I32, ___, ___, 1, 0xfe, 0x14, I64AtomicLoad8U, "i64.atomic.load8_u")
+WABT_OPCODE(I64, I32, ___, ___, 2, 0xfe, 0x15, I64AtomicLoad16U, "i64.atomic.load16_u")
+WABT_OPCODE(I64, I32, ___, ___, 4, 0xfe, 0x16, I64AtomicLoad32U, "i64.atomic.load32_u")
+WABT_OPCODE(___, I32, I32, ___, 4, 0xfe, 0x17, I32AtomicStore, "i32.atomic.store")
+WABT_OPCODE(___, I32, I64, ___, 8, 0xfe, 0x18, I64AtomicStore, "i64.atomic.store")
+WABT_OPCODE(___, I32, I32, ___, 1, 0xfe, 0x19, I32AtomicStore8, "i32.atomic.store8")
+WABT_OPCODE(___, I32, I32, ___, 2, 0xfe, 0x1a, I32AtomicStore16, "i32.atomic.store16")
+WABT_OPCODE(___, I32, I64, ___, 1, 0xfe, 0x1b, I64AtomicStore8, "i64.atomic.store8")
+WABT_OPCODE(___, I32, I64, ___, 2, 0xfe, 0x1c, I64AtomicStore16, "i64.atomic.store16")
+WABT_OPCODE(___, I32, I64, ___, 4, 0xfe, 0x1d, I64AtomicStore32, "i64.atomic.store32")
+WABT_OPCODE(I32, I32, I32, ___, 4, 0xfe, 0x1e, I32AtomicRmwAdd, "i32.atomic.rmw.add")
+WABT_OPCODE(I64, I32, I64, ___, 8, 0xfe, 0x1f, I64AtomicRmwAdd, "i64.atomic.rmw.add")
+WABT_OPCODE(I32, I32, I32, ___, 1, 0xfe, 0x20, I32AtomicRmw8UAdd, "i32.atomic.rmw8_u.add")
+WABT_OPCODE(I32, I32, I32, ___, 2, 0xfe, 0x21, I32AtomicRmw16UAdd, "i32.atomic.rmw16_u.add")
+WABT_OPCODE(I64, I32, I64, ___, 1, 0xfe, 0x22, I64AtomicRmw8UAdd, "i64.atomic.rmw8_u.add")
+WABT_OPCODE(I64, I32, I64, ___, 2, 0xfe, 0x23, I64AtomicRmw16UAdd, "i64.atomic.rmw16_u.add")
+WABT_OPCODE(I64, I32, I64, ___, 4, 0xfe, 0x24, I64AtomicRmw32UAdd, "i64.atomic.rmw32_u.add")
+WABT_OPCODE(I32, I32, I32, ___, 4, 0xfe, 0x25, I32AtomicRmwSub, "i32.atomic.rmw.sub")
+WABT_OPCODE(I64, I32, I64, ___, 8, 0xfe, 0x26, I64AtomicRmwSub, "i64.atomic.rmw.sub")
+WABT_OPCODE(I32, I32, I32, ___, 1, 0xfe, 0x27, I32AtomicRmw8USub, "i32.atomic.rmw8_u.sub")
+WABT_OPCODE(I32, I32, I32, ___, 2, 0xfe, 0x28, I32AtomicRmw16USub, "i32.atomic.rmw16_u.sub")
+WABT_OPCODE(I64, I32, I64, ___, 1, 0xfe, 0x29, I64AtomicRmw8USub, "i64.atomic.rmw8_u.sub")
+WABT_OPCODE(I64, I32, I64, ___, 2, 0xfe, 0x2a, I64AtomicRmw16USub, "i64.atomic.rmw16_u.sub")
+WABT_OPCODE(I64, I32, I64, ___, 4, 0xfe, 0x2b, I64AtomicRmw32USub, "i64.atomic.rmw32_u.sub")
+WABT_OPCODE(I32, I32, I32, ___, 4, 0xfe, 0x2c, I32AtomicRmwAnd, "i32.atomic.rmw.and")
+WABT_OPCODE(I64, I32, I64, ___, 8, 0xfe, 0x2d, I64AtomicRmwAnd, "i64.atomic.rmw.and")
+WABT_OPCODE(I32, I32, I32, ___, 1, 0xfe, 0x2e, I32AtomicRmw8UAnd, "i32.atomic.rmw8_u.and")
+WABT_OPCODE(I32, I32, I32, ___, 2, 0xfe, 0x2f, I32AtomicRmw16UAnd, "i32.atomic.rmw16_u.and")
+WABT_OPCODE(I64, I32, I64, ___, 1, 0xfe, 0x30, I64AtomicRmw8UAnd, "i64.atomic.rmw8_u.and")
+WABT_OPCODE(I64, I32, I64, ___, 2, 0xfe, 0x31, I64AtomicRmw16UAnd, "i64.atomic.rmw16_u.and")
+WABT_OPCODE(I64, I32, I64, ___, 4, 0xfe, 0x32, I64AtomicRmw32UAnd, "i64.atomic.rmw32_u.and")
+WABT_OPCODE(I32, I32, I32, ___, 4, 0xfe, 0x33, I32AtomicRmwOr, "i32.atomic.rmw.or")
+WABT_OPCODE(I64, I32, I64, ___, 8, 0xfe, 0x34, I64AtomicRmwOr, "i64.atomic.rmw.or")
+WABT_OPCODE(I32, I32, I32, ___, 1, 0xfe, 0x35, I32AtomicRmw8UOr, "i32.atomic.rmw8_u.or")
+WABT_OPCODE(I32, I32, I32, ___, 2, 0xfe, 0x36, I32AtomicRmw16UOr, "i32.atomic.rmw16_u.or")
+WABT_OPCODE(I64, I32, I64, ___, 1, 0xfe, 0x37, I64AtomicRmw8UOr, "i64.atomic.rmw8_u.or")
+WABT_OPCODE(I64, I32, I64, ___, 2, 0xfe, 0x38, I64AtomicRmw16UOr, "i64.atomic.rmw16_u.or")
+WABT_OPCODE(I64, I32, I64, ___, 4, 0xfe, 0x39, I64AtomicRmw32UOr, "i64.atomic.rmw32_u.or")
+WABT_OPCODE(I32, I32, I32, ___, 4, 0xfe, 0x3a, I32AtomicRmwXor, "i32.atomic.rmw.xor")
+WABT_OPCODE(I64, I32, I64, ___, 8, 0xfe, 0x3b, I64AtomicRmwXor, "i64.atomic.rmw.xor")
+WABT_OPCODE(I32, I32, I32, ___, 1, 0xfe, 0x3c, I32AtomicRmw8UXor, "i32.atomic.rmw8_u.xor")
+WABT_OPCODE(I32, I32, I32, ___, 2, 0xfe, 0x3d, I32AtomicRmw16UXor, "i32.atomic.rmw16_u.xor")
+WABT_OPCODE(I64, I32, I64, ___, 1, 0xfe, 0x3e, I64AtomicRmw8UXor, "i64.atomic.rmw8_u.xor")
+WABT_OPCODE(I64, I32, I64, ___, 2, 0xfe, 0x3f, I64AtomicRmw16UXor, "i64.atomic.rmw16_u.xor")
+WABT_OPCODE(I64, I32, I64, ___, 4, 0xfe, 0x40, I64AtomicRmw32UXor, "i64.atomic.rmw32_u.xor")
+WABT_OPCODE(I32, I32, I32, ___, 4, 0xfe, 0x41, I32AtomicRmwXchg, "i32.atomic.rmw.xchg")
+WABT_OPCODE(I64, I32, I64, ___, 8, 0xfe, 0x42, I64AtomicRmwXchg, "i64.atomic.rmw.xchg")
+WABT_OPCODE(I32, I32, I32, ___, 1, 0xfe, 0x43, I32AtomicRmw8UXchg, "i32.atomic.rmw8_u.xchg")
+WABT_OPCODE(I32, I32, I32, ___, 2, 0xfe, 0x44, I32AtomicRmw16UXchg, "i32.atomic.rmw16_u.xchg")
+WABT_OPCODE(I64, I32, I64, ___, 1, 0xfe, 0x45, I64AtomicRmw8UXchg, "i64.atomic.rmw8_u.xchg")
+WABT_OPCODE(I64, I32, I64, ___, 2, 0xfe, 0x46, I64AtomicRmw16UXchg, "i64.atomic.rmw16_u.xchg")
+WABT_OPCODE(I64, I32, I64, ___, 4, 0xfe, 0x47, I64AtomicRmw32UXchg, "i64.atomic.rmw32_u.xchg")
+WABT_OPCODE(I32, I32, I32, I32, 4, 0xfe, 0x48, I32AtomicRmwCmpxchg, "i32.atomic.rmw.cmpxchg")
+WABT_OPCODE(I64, I32, I64, I64, 8, 0xfe, 0x49, I64AtomicRmwCmpxchg, "i64.atomic.rmw.cmpxchg")
+WABT_OPCODE(I32, I32, I32, I32, 1, 0xfe, 0x4a, I32AtomicRmw8UCmpxchg, "i32.atomic.rmw8_u.cmpxchg")
+WABT_OPCODE(I32, I32, I32, I32, 2, 0xfe, 0x4b, I32AtomicRmw16UCmpxchg, "i32.atomic.rmw16_u.cmpxchg")
+WABT_OPCODE(I64, I32, I64, I64, 1, 0xfe, 0x4c, I64AtomicRmw8UCmpxchg, "i64.atomic.rmw8_u.cmpxchg")
+WABT_OPCODE(I64, I32, I64, I64, 2, 0xfe, 0x4d, I64AtomicRmw16UCmpxchg, "i64.atomic.rmw16_u.cmpxchg")
+WABT_OPCODE(I64, I32, I64, I64, 4, 0xfe, 0x4e, I64AtomicRmw32UCmpxchg, "i64.atomic.rmw32_u.cmpxchg")
diff --git a/src/opcode.h b/src/opcode.h
index f91f3278..9ee282e4 100644
--- a/src/opcode.h
+++ b/src/opcode.h
@@ -29,7 +29,8 @@ struct Opcode {
// NOTE: this enum does not match the binary encoding.
//
enum Enum : uint32_t {
-#define WABT_OPCODE(rtype, type1, type2, mem_size, prefix, code, Name, text) \
+#define WABT_OPCODE(rtype, type1, type2, type3, mem_size, prefix, code, Name, \
+ text) \
Name,
#include "src/opcode.def"
#undef WABT_OPCODE
@@ -37,7 +38,8 @@ struct Opcode {
};
// Static opcode objects.
-#define WABT_OPCODE(rtype, type1, type2, mem_size, prefix, code, Name, text) \
+#define WABT_OPCODE(rtype, type1, type2, type3, mem_size, prefix, code, Name, \
+ text) \
static Opcode Name##_Opcode;
#include "src/opcode.def"
#undef WABT_OPCODE
@@ -56,6 +58,7 @@ struct Opcode {
Type GetResultType() const { return GetInfo().result_type; }
Type GetParamType1() const { return GetInfo().param1_type; }
Type GetParamType2() const { return GetInfo().param2_type; }
+ Type GetParamType3() const { return GetInfo().param3_type; }
Address GetMemorySize() const { return GetInfo().memory_size; }
// Return 1 if |alignment| matches the alignment of |opcode|, or if
@@ -81,6 +84,7 @@ struct Opcode {
Type result_type;
Type param1_type;
Type param2_type;
+ Type param3_type;
Address memory_size;
uint8_t prefix;
uint32_t code;
diff --git a/src/prebuilt/wast-lexer-gen.cc b/src/prebuilt/wast-lexer-gen.cc
index dcc92359..c05fa791 100644
--- a/src/prebuilt/wast-lexer-gen.cc
+++ b/src/prebuilt/wast-lexer-gen.cc
@@ -450,12 +450,12 @@ YYCOND_BLOCK_COMMENT:
yy34:
++cursor_;
yy35:
-#line 491 "src/wast-lexer.cc"
+#line 556 "src/wast-lexer.cc"
{ continue; }
#line 456 "src/prebuilt/wast-lexer-gen.cc"
yy36:
++cursor_;
-#line 490 "src/wast-lexer.cc"
+#line 555 "src/wast-lexer.cc"
{ NEWLINE; continue; }
#line 461 "src/prebuilt/wast-lexer-gen.cc"
yy38:
@@ -469,7 +469,7 @@ yy39:
yy40:
++cursor_;
yy41:
-#line 492 "src/wast-lexer.cc"
+#line 557 "src/wast-lexer.cc"
{ MAYBE_MALFORMED_UTF8(" in block comment"); }
#line 475 "src/prebuilt/wast-lexer-gen.cc"
yy42:
@@ -504,12 +504,12 @@ yy47:
goto yy41;
yy48:
++cursor_;
-#line 486 "src/wast-lexer.cc"
+#line 551 "src/wast-lexer.cc"
{ COMMENT_NESTING++; continue; }
#line 510 "src/prebuilt/wast-lexer-gen.cc"
yy50:
++cursor_;
-#line 487 "src/wast-lexer.cc"
+#line 552 "src/wast-lexer.cc"
{ if (--COMMENT_NESTING == 0)
BEGIN(YYCOND_i);
continue; }
@@ -602,19 +602,19 @@ yy57:
if (yych <= 0xF4) goto yy76;
}
yy59:
-#line 484 "src/wast-lexer.cc"
+#line 549 "src/wast-lexer.cc"
{ continue; }
#line 608 "src/prebuilt/wast-lexer-gen.cc"
yy60:
++cursor_;
BEGIN(YYCOND_i);
-#line 483 "src/wast-lexer.cc"
+#line 548 "src/wast-lexer.cc"
{ NEWLINE; continue; }
#line 614 "src/prebuilt/wast-lexer-gen.cc"
yy62:
++cursor_;
yy63:
-#line 497 "src/wast-lexer.cc"
+#line 562 "src/wast-lexer.cc"
{ MAYBE_MALFORMED_UTF8(""); }
#line 620 "src/prebuilt/wast-lexer-gen.cc"
yy64:
@@ -837,7 +837,7 @@ YYCOND_i:
yy79:
++cursor_;
yy80:
-#line 496 "src/wast-lexer.cc"
+#line 561 "src/wast-lexer.cc"
{ ERROR("unexpected char"); continue; }
#line 843 "src/prebuilt/wast-lexer-gen.cc"
yy81:
@@ -847,12 +847,12 @@ yy81:
if (yybm[0+yych] & 4) {
goto yy81;
}
-#line 494 "src/wast-lexer.cc"
+#line 559 "src/wast-lexer.cc"
{ continue; }
#line 853 "src/prebuilt/wast-lexer-gen.cc"
yy84:
++cursor_;
-#line 493 "src/wast-lexer.cc"
+#line 558 "src/wast-lexer.cc"
{ NEWLINE; continue; }
#line 858 "src/prebuilt/wast-lexer-gen.cc"
yy86:
@@ -864,7 +864,7 @@ yy87:
goto yy86;
}
yy88:
-#line 495 "src/wast-lexer.cc"
+#line 560 "src/wast-lexer.cc"
{ RETURN_TEXT(Reserved); }
#line 870 "src/prebuilt/wast-lexer-gen.cc"
yy89:
@@ -1137,7 +1137,7 @@ yy119:
yy120:
++cursor_;
yy121:
-#line 497 "src/wast-lexer.cc"
+#line 562 "src/wast-lexer.cc"
{ MAYBE_MALFORMED_UTF8(""); }
#line 1143 "src/prebuilt/wast-lexer-gen.cc"
yy122:
@@ -1306,13 +1306,13 @@ yy141:
if (yych <= ';') goto yy142;
if (yych <= '}') goto yy86;
yy142:
-#line 479 "src/wast-lexer.cc"
+#line 544 "src/wast-lexer.cc"
{ RETURN_TEXT(Var); }
#line 1312 "src/prebuilt/wast-lexer-gen.cc"
yy143:
++cursor_;
BEGIN(YYCOND_BLOCK_COMMENT);
-#line 485 "src/wast-lexer.cc"
+#line 550 "src/wast-lexer.cc"
{ COMMENT_NESTING = 1; continue; }
#line 1318 "src/prebuilt/wast-lexer-gen.cc"
yy145:
@@ -1486,7 +1486,7 @@ yy155:
yy156:
++cursor_;
BEGIN(YYCOND_LINE_COMMENT);
-#line 482 "src/wast-lexer.cc"
+#line 547 "src/wast-lexer.cc"
{ continue; }
#line 1492 "src/prebuilt/wast-lexer-gen.cc"
yy158:
@@ -2019,7 +2019,7 @@ yy238:
}
}
yy239:
-#line 465 "src/wast-lexer.cc"
+#line 530 "src/wast-lexer.cc"
{ RETURN(Get); }
#line 2025 "src/prebuilt/wast-lexer-gen.cc"
yy240:
@@ -2206,7 +2206,7 @@ yy274:
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
-#line 474 "src/wast-lexer.cc"
+#line 539 "src/wast-lexer.cc"
{ RETURN_OPCODE0(Try); }
#line 2212 "src/prebuilt/wast-lexer-gen.cc"
yy276:
@@ -2398,7 +2398,7 @@ yy295:
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
-#line 458 "src/wast-lexer.cc"
+#line 523 "src/wast-lexer.cc"
{ RETURN(Data); }
#line 2404 "src/prebuilt/wast-lexer-gen.cc"
yy297:
@@ -2414,7 +2414,7 @@ yy299:
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
-#line 457 "src/wast-lexer.cc"
+#line 522 "src/wast-lexer.cc"
{ RETURN(Elem); }
#line 2420 "src/prebuilt/wast-lexer-gen.cc"
yy301:
@@ -2473,7 +2473,7 @@ yy307:
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
-#line 446 "src/wast-lexer.cc"
+#line 511 "src/wast-lexer.cc"
{ RETURN(Func); }
#line 2479 "src/prebuilt/wast-lexer-gen.cc"
yy309:
@@ -2630,7 +2630,7 @@ yy338:
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
-#line 445 "src/wast-lexer.cc"
+#line 510 "src/wast-lexer.cc"
{ RETURN(Type); }
#line 2636 "src/prebuilt/wast-lexer-gen.cc"
yy340:
@@ -2787,7 +2787,7 @@ yy356:
}
}
yy357:
-#line 475 "src/wast-lexer.cc"
+#line 540 "src/wast-lexer.cc"
{ RETURN_OPCODE0(Catch); }
#line 2793 "src/prebuilt/wast-lexer-gen.cc"
yy358:
@@ -2963,275 +2963,285 @@ yy389:
goto yy87;
yy390:
yych = *++cursor_;
- if (yych == 'd') goto yy522;
- if (yych == 'n') goto yy523;
- goto yy87;
+ if (yych <= 'm') {
+ if (yych == 'd') goto yy522;
+ goto yy87;
+ } else {
+ if (yych <= 'n') goto yy523;
+ if (yych == 't') goto yy524;
+ goto yy87;
+ }
yy391:
yych = *++cursor_;
if (yych <= 'n') {
- if (yych == 'l') goto yy524;
+ if (yych == 'l') goto yy525;
goto yy87;
} else {
- if (yych <= 'o') goto yy525;
- if (yych == 't') goto yy526;
+ if (yych <= 'o') goto yy526;
+ if (yych == 't') goto yy527;
goto yy87;
}
yy392:
yych = *++cursor_;
- if (yych == 'i') goto yy527;
+ if (yych == 'i') goto yy528;
goto yy87;
yy393:
yych = *++cursor_;
- if (yych == 'q') goto yy528;
- if (yych == 'x') goto yy530;
+ if (yych == 'q') goto yy529;
+ if (yych == 'x') goto yy531;
goto yy87;
yy394:
yych = *++cursor_;
- if (yych == 'e') goto yy531;
- if (yych == 't') goto yy532;
+ if (yych == 'e') goto yy532;
+ if (yych == 't') goto yy533;
goto yy87;
yy395:
yych = *++cursor_;
if (yych <= 'n') {
- if (yych == 'e') goto yy533;
+ if (yych == 'e') goto yy534;
goto yy87;
} else {
- if (yych <= 'o') goto yy534;
- if (yych == 't') goto yy535;
+ if (yych <= 'o') goto yy535;
+ if (yych == 't') goto yy536;
goto yy87;
}
yy396:
yych = *++cursor_;
- if (yych == 'u') goto yy536;
+ if (yych == 'u') goto yy537;
goto yy87;
yy397:
yych = *++cursor_;
- if (yych == 'e') goto yy537;
+ if (yych == 'e') goto yy538;
goto yy87;
yy398:
yych = *++cursor_;
- if (yych == 'r') goto yy539;
+ if (yych == 'r') goto yy540;
goto yy87;
yy399:
yych = *++cursor_;
- if (yych == 'o') goto yy541;
+ if (yych == 'o') goto yy542;
goto yy87;
yy400:
yych = *++cursor_;
- if (yych == 'e') goto yy542;
- if (yych == 'o') goto yy543;
+ if (yych == 'e') goto yy543;
+ if (yych == 'o') goto yy544;
goto yy87;
yy401:
yych = *++cursor_;
if (yych <= 's') {
- if (yych == 'h') goto yy544;
+ if (yych == 'h') goto yy545;
goto yy87;
} else {
- if (yych <= 't') goto yy545;
- if (yych <= 'u') goto yy546;
+ if (yych <= 't') goto yy546;
+ if (yych <= 'u') goto yy547;
goto yy87;
}
yy402:
yych = *++cursor_;
- if (yych == 'r') goto yy547;
+ if (yych == 'r') goto yy548;
goto yy87;
yy403:
yych = *++cursor_;
- if (yych == 'r') goto yy548;
+ if (yych == 'r') goto yy549;
goto yy87;
yy404:
yych = *++cursor_;
- if (yych == 'o') goto yy549;
+ if (yych == 'o') goto yy550;
goto yy87;
yy405:
yych = *++cursor_;
- if (yych == 'd') goto yy550;
- if (yych == 'n') goto yy551;
- goto yy87;
+ if (yych <= 'm') {
+ if (yych == 'd') goto yy551;
+ goto yy87;
+ } else {
+ if (yych <= 'n') goto yy552;
+ if (yych == 't') goto yy553;
+ goto yy87;
+ }
yy406:
yych = *++cursor_;
if (yych <= 'n') {
- if (yych == 'l') goto yy552;
+ if (yych == 'l') goto yy554;
goto yy87;
} else {
- if (yych <= 'o') goto yy553;
- if (yych == 't') goto yy554;
+ if (yych <= 'o') goto yy555;
+ if (yych == 't') goto yy556;
goto yy87;
}
yy407:
yych = *++cursor_;
- if (yych == 'i') goto yy555;
+ if (yych == 'i') goto yy557;
goto yy87;
yy408:
yych = *++cursor_;
- if (yych == 'q') goto yy556;
- if (yych == 'x') goto yy558;
+ if (yych == 'q') goto yy558;
+ if (yych == 'x') goto yy560;
goto yy87;
yy409:
yych = *++cursor_;
- if (yych == 'e') goto yy559;
- if (yych == 't') goto yy560;
+ if (yych == 'e') goto yy561;
+ if (yych == 't') goto yy562;
goto yy87;
yy410:
yych = *++cursor_;
if (yych <= 'n') {
- if (yych == 'e') goto yy561;
+ if (yych == 'e') goto yy563;
goto yy87;
} else {
- if (yych <= 'o') goto yy562;
- if (yych == 't') goto yy563;
+ if (yych <= 'o') goto yy564;
+ if (yych == 't') goto yy565;
goto yy87;
}
yy411:
yych = *++cursor_;
- if (yych == 'u') goto yy564;
+ if (yych == 'u') goto yy566;
goto yy87;
yy412:
yych = *++cursor_;
- if (yych == 'e') goto yy565;
+ if (yych == 'e') goto yy567;
goto yy87;
yy413:
yych = *++cursor_;
- if (yych == 'r') goto yy567;
+ if (yych == 'r') goto yy569;
goto yy87;
yy414:
yych = *++cursor_;
- if (yych == 'o') goto yy569;
+ if (yych == 'o') goto yy571;
goto yy87;
yy415:
yych = *++cursor_;
- if (yych == 'e') goto yy570;
- if (yych == 'o') goto yy571;
+ if (yych == 'e') goto yy572;
+ if (yych == 'o') goto yy573;
goto yy87;
yy416:
yych = *++cursor_;
if (yych <= 's') {
- if (yych == 'h') goto yy572;
+ if (yych == 'h') goto yy574;
goto yy87;
} else {
- if (yych <= 't') goto yy573;
- if (yych <= 'u') goto yy574;
+ if (yych <= 't') goto yy575;
+ if (yych <= 'u') goto yy576;
goto yy87;
}
yy417:
yych = *++cursor_;
- if (yych == 'r') goto yy575;
+ if (yych == 'r') goto yy577;
goto yy87;
yy418:
yych = *++cursor_;
- if (yych == 'o') goto yy576;
+ if (yych == 'o') goto yy578;
goto yy87;
yy419:
yych = *++cursor_;
- if (yych == 't') goto yy577;
+ if (yych == 't') goto yy579;
goto yy87;
yy420:
yych = *++cursor_;
- if (yych == 'e') goto yy579;
+ if (yych == 'e') goto yy581;
goto yy87;
yy421:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
-#line 449 "src/wast-lexer.cc"
+#line 514 "src/wast-lexer.cc"
{ RETURN(Local); }
-#line 3140 "src/prebuilt/wast-lexer-gen.cc"
+#line 3150 "src/prebuilt/wast-lexer-gen.cc"
yy423:
yych = *++cursor_;
- if (yych == 'y') goto yy581;
+ if (yych == 'y') goto yy583;
goto yy87;
yy424:
yych = *++cursor_;
- if (yych == 'e') goto yy583;
+ if (yych == 'e') goto yy585;
goto yy87;
yy425:
yych = *++cursor_;
- if (yych == 'x') goto yy585;
+ if (yych == 'x') goto yy587;
goto yy87;
yy426:
yych = *++cursor_;
- if (yych == 't') goto yy586;
+ if (yych == 't') goto yy588;
goto yy87;
yy427:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
-#line 447 "src/wast-lexer.cc"
+#line 512 "src/wast-lexer.cc"
{ RETURN(Param); }
-#line 3164 "src/prebuilt/wast-lexer-gen.cc"
+#line 3174 "src/prebuilt/wast-lexer-gen.cc"
yy429:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
-#line 453 "src/wast-lexer.cc"
+#line 518 "src/wast-lexer.cc"
{ RETURN(Quote); }
-#line 3172 "src/prebuilt/wast-lexer-gen.cc"
+#line 3182 "src/prebuilt/wast-lexer-gen.cc"
yy431:
yych = *++cursor_;
- if (yych == 't') goto yy588;
+ if (yych == 't') goto yy590;
goto yy87;
yy432:
yych = *++cursor_;
- if (yych == 't') goto yy589;
+ if (yych == 't') goto yy591;
goto yy87;
yy433:
yych = *++cursor_;
- if (yych == 'o') goto yy591;
+ if (yych == 'o') goto yy593;
goto yy87;
yy434:
yych = *++cursor_;
- if (yych == 'n') goto yy592;
+ if (yych == 'n') goto yy594;
goto yy87;
yy435:
yych = *++cursor_;
- if (yych == 't') goto yy594;
+ if (yych == 't') goto yy596;
goto yy87;
yy436:
yych = *++cursor_;
- if (yych == 'l') goto yy596;
+ if (yych == 'l') goto yy598;
goto yy87;
yy437:
yych = *++cursor_;
- if (yych == 'o') goto yy597;
+ if (yych == 'o') goto yy599;
goto yy87;
yy438:
yych = *++cursor_;
- if (yych == 'd') goto yy598;
+ if (yych == 'd') goto yy600;
goto yy87;
yy439:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
-#line 456 "src/wast-lexer.cc"
+#line 521 "src/wast-lexer.cc"
{ RETURN(Start); }
-#line 3212 "src/prebuilt/wast-lexer-gen.cc"
+#line 3222 "src/prebuilt/wast-lexer-gen.cc"
yy441:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
-#line 454 "src/wast-lexer.cc"
+#line 519 "src/wast-lexer.cc"
{ RETURN(Table); }
-#line 3220 "src/prebuilt/wast-lexer-gen.cc"
+#line 3230 "src/prebuilt/wast-lexer-gen.cc"
yy443:
yych = *++cursor_;
- if (yych == 'o') goto yy600;
+ if (yych == 'o') goto yy602;
goto yy87;
yy444:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
-#line 477 "src/wast-lexer.cc"
+#line 542 "src/wast-lexer.cc"
{ RETURN_OPCODE0(Throw); }
-#line 3232 "src/prebuilt/wast-lexer-gen.cc"
+#line 3242 "src/prebuilt/wast-lexer-gen.cc"
yy446:
yych = *++cursor_;
- if (yych == 'c') goto yy601;
+ if (yych == 'c') goto yy603;
goto yy87;
yy447:
++cursor_;
@@ -3262,81 +3272,81 @@ yy447:
yy448:
yych = *++cursor_;
if (yych <= '/') goto yy87;
- if (yych <= '0') goto yy602;
- if (yych <= '9') goto yy604;
+ if (yych <= '0') goto yy604;
+ if (yych <= '9') goto yy606;
goto yy87;
yy449:
yych = *++cursor_;
- if (yych == 'c') goto yy606;
+ if (yych == 'c') goto yy608;
goto yy87;
yy450:
yych = *++cursor_;
- if (yych == '_') goto yy608;
+ if (yych == '_') goto yy610;
goto yy87;
yy451:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
-#line 452 "src/wast-lexer.cc"
+#line 517 "src/wast-lexer.cc"
{ RETURN(Bin); }
-#line 3284 "src/prebuilt/wast-lexer-gen.cc"
+#line 3294 "src/prebuilt/wast-lexer-gen.cc"
yy453:
yych = *++cursor_;
- if (yych == 'l') goto yy609;
+ if (yych == 'l') goto yy611;
goto yy87;
yy454:
yych = *++cursor_;
- if (yych == 'n') goto yy610;
+ if (yych == 'n') goto yy612;
goto yy87;
yy455:
yych = *++cursor_;
- if (yych == 'a') goto yy611;
+ if (yych == 'a') goto yy613;
goto yy87;
yy456:
yych = *++cursor_;
- if (yych == 't') goto yy612;
+ if (yych == 't') goto yy614;
goto yy87;
yy457:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
-#line 462 "src/wast-lexer.cc"
+#line 527 "src/wast-lexer.cc"
{ RETURN(Except); }
-#line 3308 "src/prebuilt/wast-lexer-gen.cc"
+#line 3318 "src/prebuilt/wast-lexer-gen.cc"
yy459:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
-#line 461 "src/wast-lexer.cc"
+#line 526 "src/wast-lexer.cc"
{ RETURN(Export); }
-#line 3316 "src/prebuilt/wast-lexer-gen.cc"
+#line 3326 "src/prebuilt/wast-lexer-gen.cc"
yy461:
yych = *++cursor_;
- if (yych == 's') goto yy613;
+ if (yych == 's') goto yy615;
goto yy87;
yy462:
yych = *++cursor_;
- if (yych == 'd') goto yy615;
+ if (yych == 'd') goto yy617;
goto yy87;
yy463:
yych = *++cursor_;
- if (yych == 'i') goto yy617;
+ if (yych == 'i') goto yy619;
goto yy87;
yy464:
yych = *++cursor_;
- if (yych == 'n') goto yy618;
- if (yych == 'p') goto yy619;
+ if (yych == 'n') goto yy620;
+ if (yych == 'p') goto yy621;
goto yy87;
yy465:
yych = *++cursor_;
- if (yych == 'm') goto yy620;
+ if (yych == 'm') goto yy622;
goto yy87;
yy466:
yych = *++cursor_;
- if (yych == 'v') goto yy621;
+ if (yych == 'v') goto yy623;
goto yy87;
yy467:
++cursor_;
@@ -3345,10 +3355,10 @@ yy467:
}
#line 396 "src/wast-lexer.cc"
{ RETURN_OPCODE(Compare, F32Eq); }
-#line 3349 "src/prebuilt/wast-lexer-gen.cc"
+#line 3359 "src/prebuilt/wast-lexer-gen.cc"
yy469:
yych = *++cursor_;
- if (yych == 'o') goto yy623;
+ if (yych == 'o') goto yy625;
goto yy87;
yy470:
++cursor_;
@@ -3357,7 +3367,7 @@ yy470:
}
#line 406 "src/wast-lexer.cc"
{ RETURN_OPCODE(Compare, F32Ge); }
-#line 3361 "src/prebuilt/wast-lexer-gen.cc"
+#line 3371 "src/prebuilt/wast-lexer-gen.cc"
yy472:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
@@ -3365,7 +3375,7 @@ yy472:
}
#line 404 "src/wast-lexer.cc"
{ RETURN_OPCODE(Compare, F32Gt); }
-#line 3369 "src/prebuilt/wast-lexer-gen.cc"
+#line 3379 "src/prebuilt/wast-lexer-gen.cc"
yy474:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
@@ -3373,10 +3383,10 @@ yy474:
}
#line 402 "src/wast-lexer.cc"
{ RETURN_OPCODE(Compare, F32Le); }
-#line 3377 "src/prebuilt/wast-lexer-gen.cc"
+#line 3387 "src/prebuilt/wast-lexer-gen.cc"
yy476:
yych = *++cursor_;
- if (yych == 'a') goto yy624;
+ if (yych == 'a') goto yy626;
goto yy87;
yy477:
++cursor_;
@@ -3385,18 +3395,18 @@ yy477:
}
#line 400 "src/wast-lexer.cc"
{ RETURN_OPCODE(Compare, F32Lt); }
-#line 3389 "src/prebuilt/wast-lexer-gen.cc"
+#line 3399 "src/prebuilt/wast-lexer-gen.cc"
yy479:
yych = *++cursor_;
- if (yych == 'x') goto yy625;
+ if (yych == 'x') goto yy627;
goto yy87;
yy480:
yych = *++cursor_;
- if (yych == 'n') goto yy627;
+ if (yych == 'n') goto yy629;
goto yy87;
yy481:
yych = *++cursor_;
- if (yych == 'l') goto yy629;
+ if (yych == 'l') goto yy631;
goto yy87;
yy482:
++cursor_;
@@ -3411,56 +3421,56 @@ yy482:
if (yych <= 'a') {
if (yych <= ';') goto yy483;
if (yych <= '`') goto yy86;
- goto yy631;
+ goto yy633;
} else {
- if (yych == 'g') goto yy632;
+ if (yych == 'g') goto yy634;
if (yych <= '~') goto yy86;
}
}
yy483:
#line 398 "src/wast-lexer.cc"
{ RETURN_OPCODE(Compare, F32Ne); }
-#line 3424 "src/prebuilt/wast-lexer-gen.cc"
+#line 3434 "src/prebuilt/wast-lexer-gen.cc"
yy484:
yych = *++cursor_;
- if (yych == 'i') goto yy634;
+ if (yych == 'i') goto yy636;
goto yy87;
yy485:
yych = *++cursor_;
- if (yych == 'r') goto yy635;
+ if (yych == 'r') goto yy637;
goto yy87;
yy486:
yych = *++cursor_;
- if (yych == 'o') goto yy636;
+ if (yych == 'o') goto yy638;
goto yy87;
yy487:
yych = *++cursor_;
- if (yych == 'b') goto yy637;
+ if (yych == 'b') goto yy639;
goto yy87;
yy488:
yych = *++cursor_;
- if (yych == 'u') goto yy639;
+ if (yych == 'u') goto yy641;
goto yy87;
yy489:
yych = *++cursor_;
- if (yych == 's') goto yy640;
+ if (yych == 's') goto yy642;
goto yy87;
yy490:
yych = *++cursor_;
- if (yych == 'd') goto yy642;
+ if (yych == 'd') goto yy644;
goto yy87;
yy491:
yych = *++cursor_;
- if (yych == 'i') goto yy644;
+ if (yych == 'i') goto yy646;
goto yy87;
yy492:
yych = *++cursor_;
- if (yych == 'n') goto yy645;
- if (yych == 'p') goto yy646;
+ if (yych == 'n') goto yy647;
+ if (yych == 'p') goto yy648;
goto yy87;
yy493:
yych = *++cursor_;
- if (yych == 'v') goto yy647;
+ if (yych == 'v') goto yy649;
goto yy87;
yy494:
++cursor_;
@@ -3469,10 +3479,10 @@ yy494:
}
#line 397 "src/wast-lexer.cc"
{ RETURN_OPCODE(Compare, F64Eq); }
-#line 3473 "src/prebuilt/wast-lexer-gen.cc"
+#line 3483 "src/prebuilt/wast-lexer-gen.cc"
yy496:
yych = *++cursor_;
- if (yych == 'o') goto yy649;
+ if (yych == 'o') goto yy651;
goto yy87;
yy497:
++cursor_;
@@ -3481,7 +3491,7 @@ yy497:
}
#line 407 "src/wast-lexer.cc"
{ RETURN_OPCODE(Compare, F64Ge); }
-#line 3485 "src/prebuilt/wast-lexer-gen.cc"
+#line 3495 "src/prebuilt/wast-lexer-gen.cc"
yy499:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
@@ -3489,7 +3499,7 @@ yy499:
}
#line 405 "src/wast-lexer.cc"
{ RETURN_OPCODE(Compare, F64Gt); }
-#line 3493 "src/prebuilt/wast-lexer-gen.cc"
+#line 3503 "src/prebuilt/wast-lexer-gen.cc"
yy501:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
@@ -3497,10 +3507,10 @@ yy501:
}
#line 403 "src/wast-lexer.cc"
{ RETURN_OPCODE(Compare, F64Le); }
-#line 3501 "src/prebuilt/wast-lexer-gen.cc"
+#line 3511 "src/prebuilt/wast-lexer-gen.cc"
yy503:
yych = *++cursor_;
- if (yych == 'a') goto yy650;
+ if (yych == 'a') goto yy652;
goto yy87;
yy504:
++cursor_;
@@ -3509,18 +3519,18 @@ yy504:
}
#line 401 "src/wast-lexer.cc"
{ RETURN_OPCODE(Compare, F64Lt); }
-#line 3513 "src/prebuilt/wast-lexer-gen.cc"
+#line 3523 "src/prebuilt/wast-lexer-gen.cc"
yy506:
yych = *++cursor_;
- if (yych == 'x') goto yy651;
+ if (yych == 'x') goto yy653;
goto yy87;
yy507:
yych = *++cursor_;
- if (yych == 'n') goto yy653;
+ if (yych == 'n') goto yy655;
goto yy87;
yy508:
yych = *++cursor_;
- if (yych == 'l') goto yy655;
+ if (yych == 'l') goto yy657;
goto yy87;
yy509:
++cursor_;
@@ -3535,343 +3545,351 @@ yy509:
if (yych <= 'a') {
if (yych <= ';') goto yy510;
if (yych <= '`') goto yy86;
- goto yy657;
+ goto yy659;
} else {
- if (yych == 'g') goto yy658;
+ if (yych == 'g') goto yy660;
if (yych <= '~') goto yy86;
}
}
yy510:
#line 399 "src/wast-lexer.cc"
{ RETURN_OPCODE(Compare, F64Ne); }
-#line 3548 "src/prebuilt/wast-lexer-gen.cc"
+#line 3558 "src/prebuilt/wast-lexer-gen.cc"
yy511:
yych = *++cursor_;
- if (yych == 'o') goto yy660;
+ if (yych == 'o') goto yy662;
goto yy87;
yy512:
yych = *++cursor_;
- if (yych == 'i') goto yy661;
+ if (yych == 'i') goto yy663;
goto yy87;
yy513:
yych = *++cursor_;
- if (yych == 'r') goto yy662;
+ if (yych == 'r') goto yy664;
goto yy87;
yy514:
yych = *++cursor_;
- if (yych == 'o') goto yy663;
+ if (yych == 'o') goto yy665;
goto yy87;
yy515:
yych = *++cursor_;
- if (yych == 'b') goto yy664;
+ if (yych == 'b') goto yy666;
goto yy87;
yy516:
yych = *++cursor_;
- if (yych == 'u') goto yy666;
+ if (yych == 'u') goto yy668;
goto yy87;
yy517:
yych = *++cursor_;
- if (yych == 'o') goto yy667;
+ if (yych == 'o') goto yy669;
goto yy87;
yy518:
yych = *++cursor_;
- if (yych == 'c') goto yy668;
+ if (yych == 'c') goto yy670;
goto yy87;
yy519:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
-#line 450 "src/wast-lexer.cc"
+#line 515 "src/wast-lexer.cc"
{ RETURN(Global); }
-#line 3588 "src/prebuilt/wast-lexer-gen.cc"
+#line 3598 "src/prebuilt/wast-lexer-gen.cc"
yy521:
yych = *++cursor_;
- if (yych == 'e') goto yy669;
+ if (yych == 'e') goto yy671;
goto yy87;
yy522:
yych = *++cursor_;
- if (yych == 'd') goto yy670;
+ if (yych == 'd') goto yy672;
goto yy87;
yy523:
yych = *++cursor_;
- if (yych == 'd') goto yy672;
+ if (yych == 'd') goto yy674;
goto yy87;
yy524:
yych = *++cursor_;
- if (yych == 'z') goto yy674;
+ if (yych == 'o') goto yy676;
goto yy87;
yy525:
yych = *++cursor_;
- if (yych == 'n') goto yy676;
+ if (yych == 'z') goto yy677;
goto yy87;
yy526:
yych = *++cursor_;
- if (yych == 'z') goto yy677;
+ if (yych == 'n') goto yy679;
goto yy87;
yy527:
yych = *++cursor_;
- if (yych == 'v') goto yy679;
+ if (yych == 'z') goto yy680;
goto yy87;
yy528:
+ yych = *++cursor_;
+ if (yych == 'v') goto yy682;
+ goto yy87;
+yy529:
++cursor_;
if ((yych = *cursor_) <= ')') {
if (yych <= '!') {
if (yych >= '!') goto yy86;
} else {
- if (yych <= '"') goto yy529;
+ if (yych <= '"') goto yy530;
if (yych <= '\'') goto yy86;
}
} else {
if (yych <= 'y') {
if (yych != ';') goto yy86;
} else {
- if (yych <= 'z') goto yy680;
+ if (yych <= 'z') goto yy683;
if (yych <= '~') goto yy86;
}
}
-yy529:
+yy530:
#line 376 "src/wast-lexer.cc"
{ RETURN_OPCODE(Compare, I32Eq); }
-#line 3637 "src/prebuilt/wast-lexer-gen.cc"
-yy530:
- yych = *++cursor_;
- if (yych == 't') goto yy682;
- goto yy87;
+#line 3651 "src/prebuilt/wast-lexer-gen.cc"
yy531:
yych = *++cursor_;
- if (yych == '_') goto yy683;
+ if (yych == 't') goto yy685;
goto yy87;
yy532:
yych = *++cursor_;
- if (yych == '_') goto yy684;
+ if (yych == '_') goto yy686;
goto yy87;
yy533:
yych = *++cursor_;
- if (yych == '_') goto yy685;
+ if (yych == '_') goto yy687;
goto yy87;
yy534:
yych = *++cursor_;
- if (yych == 'a') goto yy686;
+ if (yych == '_') goto yy688;
goto yy87;
yy535:
yych = *++cursor_;
- if (yych == '_') goto yy687;
+ if (yych == 'a') goto yy689;
goto yy87;
yy536:
yych = *++cursor_;
- if (yych == 'l') goto yy688;
+ if (yych == '_') goto yy690;
goto yy87;
yy537:
+ yych = *++cursor_;
+ if (yych == 'l') goto yy691;
+ goto yy87;
+yy538:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 378 "src/wast-lexer.cc"
{ RETURN_OPCODE(Compare, I32Ne); }
-#line 3673 "src/prebuilt/wast-lexer-gen.cc"
-yy539:
+#line 3687 "src/prebuilt/wast-lexer-gen.cc"
+yy540:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 348 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, I32Or); }
-#line 3681 "src/prebuilt/wast-lexer-gen.cc"
-yy541:
- yych = *++cursor_;
- if (yych == 'p') goto yy690;
- goto yy87;
+#line 3695 "src/prebuilt/wast-lexer-gen.cc"
yy542:
yych = *++cursor_;
- if (yych == 'i') goto yy691;
- if (yych == 'm') goto yy692;
+ if (yych == 'p') goto yy693;
goto yy87;
yy543:
yych = *++cursor_;
- if (yych == 't') goto yy693;
+ if (yych == 'i') goto yy694;
+ if (yych == 'm') goto yy695;
goto yy87;
yy544:
yych = *++cursor_;
- if (yych == 'l') goto yy694;
- if (yych == 'r') goto yy696;
+ if (yych == 't') goto yy696;
goto yy87;
yy545:
yych = *++cursor_;
- if (yych == 'o') goto yy697;
+ if (yych == 'l') goto yy697;
+ if (yych == 'r') goto yy699;
goto yy87;
yy546:
yych = *++cursor_;
- if (yych == 'b') goto yy698;
+ if (yych == 'o') goto yy700;
goto yy87;
yy547:
yych = *++cursor_;
- if (yych == 'u') goto yy700;
+ if (yych == 'b') goto yy701;
goto yy87;
yy548:
yych = *++cursor_;
- if (yych == 'a') goto yy701;
+ if (yych == 'u') goto yy703;
goto yy87;
yy549:
yych = *++cursor_;
- if (yych == 'r') goto yy702;
+ if (yych == 'a') goto yy704;
goto yy87;
yy550:
yych = *++cursor_;
- if (yych == 'd') goto yy704;
+ if (yych == 'r') goto yy705;
goto yy87;
yy551:
yych = *++cursor_;
- if (yych == 'd') goto yy706;
+ if (yych == 'd') goto yy707;
goto yy87;
yy552:
yych = *++cursor_;
- if (yych == 'z') goto yy708;
+ if (yych == 'd') goto yy709;
goto yy87;
yy553:
yych = *++cursor_;
- if (yych == 'n') goto yy710;
+ if (yych == 'o') goto yy711;
goto yy87;
yy554:
yych = *++cursor_;
- if (yych == 'z') goto yy711;
+ if (yych == 'z') goto yy712;
goto yy87;
yy555:
yych = *++cursor_;
- if (yych == 'v') goto yy713;
+ if (yych == 'n') goto yy714;
goto yy87;
yy556:
+ yych = *++cursor_;
+ if (yych == 'z') goto yy715;
+ goto yy87;
+yy557:
+ yych = *++cursor_;
+ if (yych == 'v') goto yy717;
+ goto yy87;
+yy558:
++cursor_;
if ((yych = *cursor_) <= ')') {
if (yych <= '!') {
if (yych >= '!') goto yy86;
} else {
- if (yych <= '"') goto yy557;
+ if (yych <= '"') goto yy559;
if (yych <= '\'') goto yy86;
}
} else {
if (yych <= 'y') {
if (yych != ';') goto yy86;
} else {
- if (yych <= 'z') goto yy714;
+ if (yych <= 'z') goto yy718;
if (yych <= '~') goto yy86;
}
}
-yy557:
+yy559:
#line 377 "src/wast-lexer.cc"
{ RETURN_OPCODE(Compare, I64Eq); }
-#line 3764 "src/prebuilt/wast-lexer-gen.cc"
-yy558:
- yych = *++cursor_;
- if (yych == 't') goto yy716;
- goto yy87;
-yy559:
- yych = *++cursor_;
- if (yych == '_') goto yy717;
- goto yy87;
+#line 3782 "src/prebuilt/wast-lexer-gen.cc"
yy560:
yych = *++cursor_;
- if (yych == '_') goto yy718;
+ if (yych == 't') goto yy720;
goto yy87;
yy561:
yych = *++cursor_;
- if (yych == '_') goto yy719;
+ if (yych == '_') goto yy721;
goto yy87;
yy562:
yych = *++cursor_;
- if (yych == 'a') goto yy720;
+ if (yych == '_') goto yy722;
goto yy87;
yy563:
yych = *++cursor_;
- if (yych == '_') goto yy721;
+ if (yych == '_') goto yy723;
goto yy87;
yy564:
yych = *++cursor_;
- if (yych == 'l') goto yy722;
+ if (yych == 'a') goto yy724;
goto yy87;
yy565:
+ yych = *++cursor_;
+ if (yych == '_') goto yy725;
+ goto yy87;
+yy566:
+ yych = *++cursor_;
+ if (yych == 'l') goto yy726;
+ goto yy87;
+yy567:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 379 "src/wast-lexer.cc"
{ RETURN_OPCODE(Compare, I64Ne); }
-#line 3800 "src/prebuilt/wast-lexer-gen.cc"
-yy567:
+#line 3818 "src/prebuilt/wast-lexer-gen.cc"
+yy569:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 349 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, I64Or); }
-#line 3808 "src/prebuilt/wast-lexer-gen.cc"
-yy569:
- yych = *++cursor_;
- if (yych == 'p') goto yy724;
- goto yy87;
-yy570:
- yych = *++cursor_;
- if (yych == 'i') goto yy725;
- if (yych == 'm') goto yy726;
- goto yy87;
+#line 3826 "src/prebuilt/wast-lexer-gen.cc"
yy571:
yych = *++cursor_;
- if (yych == 't') goto yy727;
+ if (yych == 'p') goto yy728;
goto yy87;
yy572:
yych = *++cursor_;
- if (yych == 'l') goto yy728;
- if (yych == 'r') goto yy730;
+ if (yych == 'i') goto yy729;
+ if (yych == 'm') goto yy730;
goto yy87;
yy573:
yych = *++cursor_;
- if (yych == 'o') goto yy731;
+ if (yych == 't') goto yy731;
goto yy87;
yy574:
yych = *++cursor_;
- if (yych == 'b') goto yy732;
+ if (yych == 'l') goto yy732;
+ if (yych == 'r') goto yy734;
goto yy87;
yy575:
yych = *++cursor_;
- if (yych == 'u') goto yy734;
+ if (yych == 'o') goto yy735;
goto yy87;
yy576:
yych = *++cursor_;
- if (yych == 'r') goto yy735;
+ if (yych == 'b') goto yy736;
goto yy87;
yy577:
+ yych = *++cursor_;
+ if (yych == 'u') goto yy738;
+ goto yy87;
+yy578:
+ yych = *++cursor_;
+ if (yych == 'r') goto yy739;
+ goto yy87;
+yy579:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
-#line 460 "src/wast-lexer.cc"
+#line 525 "src/wast-lexer.cc"
{ RETURN(Import); }
-#line 3850 "src/prebuilt/wast-lexer-gen.cc"
-yy579:
+#line 3868 "src/prebuilt/wast-lexer-gen.cc"
+yy581:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
-#line 464 "src/wast-lexer.cc"
+#line 529 "src/wast-lexer.cc"
{ RETURN(Invoke); }
-#line 3858 "src/prebuilt/wast-lexer-gen.cc"
-yy581:
+#line 3876 "src/prebuilt/wast-lexer-gen.cc"
+yy583:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
-#line 455 "src/wast-lexer.cc"
+#line 520 "src/wast-lexer.cc"
{ RETURN(Memory); }
-#line 3866 "src/prebuilt/wast-lexer-gen.cc"
-yy583:
+#line 3884 "src/prebuilt/wast-lexer-gen.cc"
+yy585:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
-#line 451 "src/wast-lexer.cc"
+#line 516 "src/wast-lexer.cc"
{ RETURN(Module); }
-#line 3874 "src/prebuilt/wast-lexer-gen.cc"
-yy585:
+#line 3892 "src/prebuilt/wast-lexer-gen.cc"
+yy587:
++cursor_;
if (limit_ <= cursor_) FILL(1);
yych = *cursor_;
@@ -3883,690 +3901,698 @@ yy585:
if (yych <= '\'') goto yy86;
if (yych <= ')') goto yy88;
if (yych <= '/') goto yy86;
- goto yy737;
+ goto yy741;
}
} else {
if (yych <= 'F') {
if (yych == ';') goto yy88;
if (yych <= '@') goto yy86;
- goto yy737;
+ goto yy741;
} else {
if (yych <= '`') goto yy86;
- if (yych <= 'f') goto yy737;
+ if (yych <= 'f') goto yy741;
if (yych <= '~') goto yy86;
goto yy88;
}
}
-yy586:
+yy588:
++cursor_;
if ((yych = *cursor_) <= ')') {
if (yych <= '!') {
if (yych >= '!') goto yy86;
} else {
- if (yych <= '"') goto yy587;
+ if (yych <= '"') goto yy589;
if (yych <= '\'') goto yy86;
}
} else {
if (yych <= '<') {
if (yych != ';') goto yy86;
} else {
- if (yych <= '=') goto yy739;
+ if (yych <= '=') goto yy743;
if (yych <= '~') goto yy86;
}
}
-yy587:
-#line 459 "src/wast-lexer.cc"
+yy589:
+#line 524 "src/wast-lexer.cc"
{ RETURN(Offset); }
-#line 3921 "src/prebuilt/wast-lexer-gen.cc"
-yy588:
+#line 3939 "src/prebuilt/wast-lexer-gen.cc"
+yy590:
yych = *++cursor_;
- if (yych == 'e') goto yy740;
+ if (yych == 'e') goto yy744;
goto yy87;
-yy589:
+yy591:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
-#line 448 "src/wast-lexer.cc"
+#line 513 "src/wast-lexer.cc"
{ RETURN(Result); }
-#line 3933 "src/prebuilt/wast-lexer-gen.cc"
-yy591:
+#line 3951 "src/prebuilt/wast-lexer-gen.cc"
+yy593:
yych = *++cursor_;
- if (yych == 'w') goto yy741;
+ if (yych == 'w') goto yy745;
goto yy87;
-yy592:
+yy594:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 270 "src/wast-lexer.cc"
{ RETURN_OPCODE0(Return); }
-#line 3945 "src/prebuilt/wast-lexer-gen.cc"
-yy594:
+#line 3963 "src/prebuilt/wast-lexer-gen.cc"
+yy596:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 441 "src/wast-lexer.cc"
{ RETURN_OPCODE0(Select); }
-#line 3953 "src/prebuilt/wast-lexer-gen.cc"
-yy596:
+#line 3971 "src/prebuilt/wast-lexer-gen.cc"
+yy598:
yych = *++cursor_;
- if (yych == 'o') goto yy743;
+ if (yych == 'o') goto yy747;
goto yy87;
-yy597:
+yy599:
yych = *++cursor_;
- if (yych == 'c') goto yy744;
+ if (yych == 'c') goto yy748;
goto yy87;
-yy598:
+yy600:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
-#line 480 "src/wast-lexer.cc"
+#line 545 "src/wast-lexer.cc"
{ RETURN(Shared); }
-#line 3969 "src/prebuilt/wast-lexer-gen.cc"
-yy600:
+#line 3987 "src/prebuilt/wast-lexer-gen.cc"
+yy602:
yych = *++cursor_;
- if (yych == 'c') goto yy745;
+ if (yych == 'c') goto yy749;
goto yy87;
-yy601:
+yy603:
yych = *++cursor_;
- if (yych == 'h') goto yy746;
+ if (yych == 'h') goto yy750;
goto yy87;
-yy602:
+yy604:
++cursor_;
if ((yych = *cursor_) <= '9') {
if (yych <= '"') {
if (yych == '!') goto yy86;
} else {
if (yych <= '\'') goto yy86;
- if (yych <= ')') goto yy603;
+ if (yych <= ')') goto yy605;
if (yych <= '/') goto yy86;
- goto yy604;
+ goto yy606;
}
} else {
if (yych <= '_') {
- if (yych == ';') goto yy603;
+ if (yych == ';') goto yy605;
if (yych <= '^') goto yy86;
- goto yy747;
+ goto yy751;
} else {
- if (yych == 'x') goto yy748;
+ if (yych == 'x') goto yy752;
if (yych <= '~') goto yy86;
}
}
-yy603:
+yy605:
#line 300 "src/wast-lexer.cc"
{ RETURN_TEXT_AT(AlignEqNat, 6); }
-#line 4002 "src/prebuilt/wast-lexer-gen.cc"
-yy604:
+#line 4020 "src/prebuilt/wast-lexer-gen.cc"
+yy606:
++cursor_;
if (limit_ <= cursor_) FILL(1);
yych = *cursor_;
if (yych <= '/') {
if (yych <= '"') {
if (yych == '!') goto yy86;
- goto yy603;
+ goto yy605;
} else {
if (yych <= '\'') goto yy86;
- if (yych <= ')') goto yy603;
+ if (yych <= ')') goto yy605;
goto yy86;
}
} else {
if (yych <= ';') {
- if (yych <= '9') goto yy604;
+ if (yych <= '9') goto yy606;
if (yych <= ':') goto yy86;
- goto yy603;
+ goto yy605;
} else {
- if (yych == '_') goto yy747;
+ if (yych == '_') goto yy751;
if (yych <= '~') goto yy86;
- goto yy603;
+ goto yy605;
}
}
-yy606:
+yy608:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 255 "src/wast-lexer.cc"
{ RETURN(Anyfunc); }
-#line 4034 "src/prebuilt/wast-lexer-gen.cc"
-yy608:
+#line 4052 "src/prebuilt/wast-lexer-gen.cc"
+yy610:
yych = *++cursor_;
switch (yych) {
- case 'e': goto yy749;
- case 'i': goto yy750;
- case 'm': goto yy751;
- case 'r': goto yy752;
- case 't': goto yy753;
- case 'u': goto yy754;
+ case 'e': goto yy753;
+ case 'i': goto yy754;
+ case 'm': goto yy755;
+ case 'r': goto yy756;
+ case 't': goto yy757;
+ case 'u': goto yy758;
default: goto yy87;
}
-yy609:
+yy611:
yych = *++cursor_;
- if (yych == 'e') goto yy755;
+ if (yych == 'e') goto yy759;
goto yy87;
-yy610:
+yy612:
yych = *++cursor_;
- if (yych == 'd') goto yy757;
+ if (yych == 'd') goto yy761;
goto yy87;
-yy611:
+yy613:
yych = *++cursor_;
- if (yych == 'l') goto yy758;
+ if (yych == 'l') goto yy762;
goto yy87;
-yy612:
+yy614:
yych = *++cursor_;
- if (yych == '_') goto yy759;
+ if (yych == '_') goto yy763;
goto yy87;
-yy613:
+yy615:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 315 "src/wast-lexer.cc"
{ RETURN_OPCODE(Unary, F32Abs); }
-#line 4069 "src/prebuilt/wast-lexer-gen.cc"
-yy615:
+#line 4087 "src/prebuilt/wast-lexer-gen.cc"
+yy617:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 362 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, F32Add); }
-#line 4077 "src/prebuilt/wast-lexer-gen.cc"
-yy617:
+#line 4095 "src/prebuilt/wast-lexer-gen.cc"
+yy619:
yych = *++cursor_;
- if (yych == 'l') goto yy760;
+ if (yych == 'l') goto yy764;
goto yy87;
-yy618:
+yy620:
yych = *++cursor_;
- if (yych == 's') goto yy762;
- if (yych == 'v') goto yy763;
+ if (yych == 's') goto yy766;
+ if (yych == 'v') goto yy767;
goto yy87;
-yy619:
+yy621:
yych = *++cursor_;
- if (yych == 'y') goto yy764;
+ if (yych == 'y') goto yy768;
goto yy87;
-yy620:
+yy622:
yych = *++cursor_;
- if (yych == 'o') goto yy765;
+ if (yych == 'o') goto yy769;
goto yy87;
-yy621:
+yy623:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 368 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, F32Div); }
-#line 4102 "src/prebuilt/wast-lexer-gen.cc"
-yy623:
+#line 4120 "src/prebuilt/wast-lexer-gen.cc"
+yy625:
yych = *++cursor_;
- if (yych == 'o') goto yy766;
+ if (yych == 'o') goto yy770;
goto yy87;
-yy624:
+yy626:
yych = *++cursor_;
- if (yych == 'd') goto yy767;
+ if (yych == 'd') goto yy771;
goto yy87;
-yy625:
+yy627:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 372 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, F32Max); }
-#line 4118 "src/prebuilt/wast-lexer-gen.cc"
-yy627:
+#line 4136 "src/prebuilt/wast-lexer-gen.cc"
+yy629:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 370 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, F32Min); }
-#line 4126 "src/prebuilt/wast-lexer-gen.cc"
-yy629:
+#line 4144 "src/prebuilt/wast-lexer-gen.cc"
+yy631:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 366 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, F32Mul); }
-#line 4134 "src/prebuilt/wast-lexer-gen.cc"
-yy631:
+#line 4152 "src/prebuilt/wast-lexer-gen.cc"
+yy633:
yych = *++cursor_;
- if (yych == 'r') goto yy769;
+ if (yych == 'r') goto yy773;
goto yy87;
-yy632:
+yy634:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 313 "src/wast-lexer.cc"
{ RETURN_OPCODE(Unary, F32Neg); }
-#line 4146 "src/prebuilt/wast-lexer-gen.cc"
-yy634:
+#line 4164 "src/prebuilt/wast-lexer-gen.cc"
+yy636:
yych = *++cursor_;
- if (yych == 'n') goto yy770;
+ if (yych == 'n') goto yy774;
goto yy87;
-yy635:
+yy637:
yych = *++cursor_;
- if (yych == 't') goto yy771;
+ if (yych == 't') goto yy775;
goto yy87;
-yy636:
+yy638:
yych = *++cursor_;
- if (yych == 'r') goto yy773;
+ if (yych == 'r') goto yy777;
goto yy87;
-yy637:
+yy639:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 364 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, F32Sub); }
-#line 4166 "src/prebuilt/wast-lexer-gen.cc"
-yy639:
+#line 4184 "src/prebuilt/wast-lexer-gen.cc"
+yy641:
yych = *++cursor_;
- if (yych == 'n') goto yy774;
+ if (yych == 'n') goto yy778;
goto yy87;
-yy640:
+yy642:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 316 "src/wast-lexer.cc"
{ RETURN_OPCODE(Unary, F64Abs); }
-#line 4178 "src/prebuilt/wast-lexer-gen.cc"
-yy642:
+#line 4196 "src/prebuilt/wast-lexer-gen.cc"
+yy644:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 363 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, F64Add); }
-#line 4186 "src/prebuilt/wast-lexer-gen.cc"
-yy644:
+#line 4204 "src/prebuilt/wast-lexer-gen.cc"
+yy646:
yych = *++cursor_;
- if (yych == 'l') goto yy775;
+ if (yych == 'l') goto yy779;
goto yy87;
-yy645:
+yy647:
yych = *++cursor_;
- if (yych == 's') goto yy777;
- if (yych == 'v') goto yy778;
+ if (yych == 's') goto yy781;
+ if (yych == 'v') goto yy782;
goto yy87;
-yy646:
+yy648:
yych = *++cursor_;
- if (yych == 'y') goto yy779;
+ if (yych == 'y') goto yy783;
goto yy87;
-yy647:
+yy649:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 369 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, F64Div); }
-#line 4207 "src/prebuilt/wast-lexer-gen.cc"
-yy649:
+#line 4225 "src/prebuilt/wast-lexer-gen.cc"
+yy651:
yych = *++cursor_;
- if (yych == 'o') goto yy780;
+ if (yych == 'o') goto yy784;
goto yy87;
-yy650:
+yy652:
yych = *++cursor_;
- if (yych == 'd') goto yy781;
+ if (yych == 'd') goto yy785;
goto yy87;
-yy651:
+yy653:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 373 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, F64Max); }
-#line 4223 "src/prebuilt/wast-lexer-gen.cc"
-yy653:
+#line 4241 "src/prebuilt/wast-lexer-gen.cc"
+yy655:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 371 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, F64Min); }
-#line 4231 "src/prebuilt/wast-lexer-gen.cc"
-yy655:
+#line 4249 "src/prebuilt/wast-lexer-gen.cc"
+yy657:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 367 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, F64Mul); }
-#line 4239 "src/prebuilt/wast-lexer-gen.cc"
-yy657:
+#line 4257 "src/prebuilt/wast-lexer-gen.cc"
+yy659:
yych = *++cursor_;
- if (yych == 'r') goto yy783;
+ if (yych == 'r') goto yy787;
goto yy87;
-yy658:
+yy660:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 314 "src/wast-lexer.cc"
{ RETURN_OPCODE(Unary, F64Neg); }
-#line 4251 "src/prebuilt/wast-lexer-gen.cc"
-yy660:
+#line 4269 "src/prebuilt/wast-lexer-gen.cc"
+yy662:
yych = *++cursor_;
- if (yych == 'm') goto yy784;
+ if (yych == 'm') goto yy788;
goto yy87;
-yy661:
+yy663:
yych = *++cursor_;
- if (yych == 'n') goto yy785;
+ if (yych == 'n') goto yy789;
goto yy87;
-yy662:
+yy664:
yych = *++cursor_;
- if (yych == 't') goto yy786;
+ if (yych == 't') goto yy790;
goto yy87;
-yy663:
+yy665:
yych = *++cursor_;
- if (yych == 'r') goto yy788;
+ if (yych == 'r') goto yy792;
goto yy87;
-yy664:
+yy666:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 365 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, F64Sub); }
-#line 4275 "src/prebuilt/wast-lexer-gen.cc"
-yy666:
+#line 4293 "src/prebuilt/wast-lexer-gen.cc"
+yy668:
yych = *++cursor_;
- if (yych == 'n') goto yy789;
+ if (yych == 'n') goto yy793;
goto yy87;
-yy667:
+yy669:
yych = *++cursor_;
- if (yych == 'b') goto yy790;
+ if (yych == 'b') goto yy794;
goto yy87;
-yy668:
+yy670:
yych = *++cursor_;
- if (yych == 'a') goto yy791;
+ if (yych == 'a') goto yy795;
goto yy87;
-yy669:
+yy671:
yych = *++cursor_;
- if (yych == 'm') goto yy792;
+ if (yych == 'm') goto yy796;
goto yy87;
-yy670:
+yy672:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 332 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, I32Add); }
-#line 4299 "src/prebuilt/wast-lexer-gen.cc"
-yy672:
+#line 4317 "src/prebuilt/wast-lexer-gen.cc"
+yy674:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 346 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, I32And); }
-#line 4307 "src/prebuilt/wast-lexer-gen.cc"
-yy674:
+#line 4325 "src/prebuilt/wast-lexer-gen.cc"
+yy676:
+ yych = *++cursor_;
+ if (yych == 'm') goto yy797;
+ goto yy87;
+yy677:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 307 "src/wast-lexer.cc"
{ RETURN_OPCODE(Unary, I32Clz); }
-#line 4315 "src/prebuilt/wast-lexer-gen.cc"
-yy676:
+#line 4337 "src/prebuilt/wast-lexer-gen.cc"
+yy679:
yych = *++cursor_;
- if (yych == 's') goto yy793;
+ if (yych == 's') goto yy798;
goto yy87;
-yy677:
+yy680:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 309 "src/wast-lexer.cc"
{ RETURN_OPCODE(Unary, I32Ctz); }
-#line 4327 "src/prebuilt/wast-lexer-gen.cc"
-yy679:
+#line 4349 "src/prebuilt/wast-lexer-gen.cc"
+yy682:
yych = *++cursor_;
- if (yych == '_') goto yy794;
+ if (yych == '_') goto yy799;
goto yy87;
-yy680:
+yy683:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 305 "src/wast-lexer.cc"
{ RETURN_OPCODE(Convert, I32Eqz); }
-#line 4339 "src/prebuilt/wast-lexer-gen.cc"
-yy682:
+#line 4361 "src/prebuilt/wast-lexer-gen.cc"
+yy685:
yych = *++cursor_;
- if (yych == 'e') goto yy795;
+ if (yych == 'e') goto yy800;
goto yy87;
-yy683:
+yy686:
yych = *++cursor_;
- if (yych == 's') goto yy796;
- if (yych == 'u') goto yy798;
+ if (yych == 's') goto yy801;
+ if (yych == 'u') goto yy803;
goto yy87;
-yy684:
+yy687:
yych = *++cursor_;
- if (yych == 's') goto yy800;
- if (yych == 'u') goto yy802;
+ if (yych == 's') goto yy805;
+ if (yych == 'u') goto yy807;
goto yy87;
-yy685:
+yy688:
yych = *++cursor_;
- if (yych == 's') goto yy804;
- if (yych == 'u') goto yy806;
+ if (yych == 's') goto yy809;
+ if (yych == 'u') goto yy811;
goto yy87;
-yy686:
+yy689:
yych = *++cursor_;
- if (yych == 'd') goto yy808;
+ if (yych == 'd') goto yy813;
goto yy87;
-yy687:
+yy690:
yych = *++cursor_;
- if (yych == 's') goto yy810;
- if (yych == 'u') goto yy812;
+ if (yych == 's') goto yy815;
+ if (yych == 'u') goto yy817;
goto yy87;
-yy688:
+yy691:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 336 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, I32Mul); }
-#line 4375 "src/prebuilt/wast-lexer-gen.cc"
-yy690:
+#line 4397 "src/prebuilt/wast-lexer-gen.cc"
+yy693:
yych = *++cursor_;
- if (yych == 'c') goto yy814;
+ if (yych == 'c') goto yy819;
goto yy87;
-yy691:
+yy694:
yych = *++cursor_;
- if (yych == 'n') goto yy815;
+ if (yych == 'n') goto yy820;
goto yy87;
-yy692:
+yy695:
yych = *++cursor_;
- if (yych == '_') goto yy816;
+ if (yych == '_') goto yy821;
goto yy87;
-yy693:
+yy696:
yych = *++cursor_;
- if (yych == 'l') goto yy817;
- if (yych == 'r') goto yy819;
+ if (yych == 'l') goto yy822;
+ if (yych == 'r') goto yy824;
goto yy87;
-yy694:
+yy697:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 352 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, I32Shl); }
-#line 4400 "src/prebuilt/wast-lexer-gen.cc"
-yy696:
+#line 4422 "src/prebuilt/wast-lexer-gen.cc"
+yy699:
yych = *++cursor_;
- if (yych == '_') goto yy821;
+ if (yych == '_') goto yy826;
goto yy87;
-yy697:
+yy700:
yych = *++cursor_;
- if (yych == 'r') goto yy822;
+ if (yych == 'r') goto yy827;
goto yy87;
-yy698:
+yy701:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 334 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, I32Sub); }
-#line 4416 "src/prebuilt/wast-lexer-gen.cc"
-yy700:
+#line 4438 "src/prebuilt/wast-lexer-gen.cc"
+yy703:
yych = *++cursor_;
- if (yych == 'n') goto yy823;
+ if (yych == 'n') goto yy828;
goto yy87;
-yy701:
+yy704:
yych = *++cursor_;
- if (yych == 'p') goto yy824;
+ if (yych == 'p') goto yy829;
goto yy87;
-yy702:
+yy705:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 350 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, I32Xor); }
-#line 4432 "src/prebuilt/wast-lexer-gen.cc"
-yy704:
+#line 4454 "src/prebuilt/wast-lexer-gen.cc"
+yy707:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 333 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, I64Add); }
-#line 4440 "src/prebuilt/wast-lexer-gen.cc"
-yy706:
+#line 4462 "src/prebuilt/wast-lexer-gen.cc"
+yy709:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 347 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, I64And); }
-#line 4448 "src/prebuilt/wast-lexer-gen.cc"
-yy708:
+#line 4470 "src/prebuilt/wast-lexer-gen.cc"
+yy711:
+ yych = *++cursor_;
+ if (yych == 'm') goto yy830;
+ goto yy87;
+yy712:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 308 "src/wast-lexer.cc"
{ RETURN_OPCODE(Unary, I64Clz); }
-#line 4456 "src/prebuilt/wast-lexer-gen.cc"
-yy710:
+#line 4482 "src/prebuilt/wast-lexer-gen.cc"
+yy714:
yych = *++cursor_;
- if (yych == 's') goto yy825;
+ if (yych == 's') goto yy831;
goto yy87;
-yy711:
+yy715:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 310 "src/wast-lexer.cc"
{ RETURN_OPCODE(Unary, I64Ctz); }
-#line 4468 "src/prebuilt/wast-lexer-gen.cc"
-yy713:
+#line 4494 "src/prebuilt/wast-lexer-gen.cc"
+yy717:
yych = *++cursor_;
- if (yych == '_') goto yy826;
+ if (yych == '_') goto yy832;
goto yy87;
-yy714:
+yy718:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 306 "src/wast-lexer.cc"
{ RETURN_OPCODE(Convert, I64Eqz); }
-#line 4480 "src/prebuilt/wast-lexer-gen.cc"
-yy716:
+#line 4506 "src/prebuilt/wast-lexer-gen.cc"
+yy720:
yych = *++cursor_;
- if (yych == 'e') goto yy827;
+ if (yych == 'e') goto yy833;
goto yy87;
-yy717:
+yy721:
yych = *++cursor_;
- if (yych == 's') goto yy828;
- if (yych == 'u') goto yy830;
+ if (yych == 's') goto yy834;
+ if (yych == 'u') goto yy836;
goto yy87;
-yy718:
+yy722:
yych = *++cursor_;
- if (yych == 's') goto yy832;
- if (yych == 'u') goto yy834;
+ if (yych == 's') goto yy838;
+ if (yych == 'u') goto yy840;
goto yy87;
-yy719:
+yy723:
yych = *++cursor_;
- if (yych == 's') goto yy836;
- if (yych == 'u') goto yy838;
+ if (yych == 's') goto yy842;
+ if (yych == 'u') goto yy844;
goto yy87;
-yy720:
+yy724:
yych = *++cursor_;
- if (yych == 'd') goto yy840;
+ if (yych == 'd') goto yy846;
goto yy87;
-yy721:
+yy725:
yych = *++cursor_;
- if (yych == 's') goto yy842;
- if (yych == 'u') goto yy844;
+ if (yych == 's') goto yy848;
+ if (yych == 'u') goto yy850;
goto yy87;
-yy722:
+yy726:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 337 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, I64Mul); }
-#line 4516 "src/prebuilt/wast-lexer-gen.cc"
-yy724:
+#line 4542 "src/prebuilt/wast-lexer-gen.cc"
+yy728:
yych = *++cursor_;
- if (yych == 'c') goto yy846;
+ if (yych == 'c') goto yy852;
goto yy87;
-yy725:
+yy729:
yych = *++cursor_;
- if (yych == 'n') goto yy847;
+ if (yych == 'n') goto yy853;
goto yy87;
-yy726:
+yy730:
yych = *++cursor_;
- if (yych == '_') goto yy848;
+ if (yych == '_') goto yy854;
goto yy87;
-yy727:
+yy731:
yych = *++cursor_;
- if (yych == 'l') goto yy849;
- if (yych == 'r') goto yy851;
+ if (yych == 'l') goto yy855;
+ if (yych == 'r') goto yy857;
goto yy87;
-yy728:
+yy732:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 353 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, I64Shl); }
-#line 4541 "src/prebuilt/wast-lexer-gen.cc"
-yy730:
+#line 4567 "src/prebuilt/wast-lexer-gen.cc"
+yy734:
yych = *++cursor_;
- if (yych == '_') goto yy853;
+ if (yych == '_') goto yy859;
goto yy87;
-yy731:
+yy735:
yych = *++cursor_;
- if (yych == 'r') goto yy854;
+ if (yych == 'r') goto yy860;
goto yy87;
-yy732:
+yy736:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 335 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, I64Sub); }
-#line 4557 "src/prebuilt/wast-lexer-gen.cc"
-yy734:
+#line 4583 "src/prebuilt/wast-lexer-gen.cc"
+yy738:
yych = *++cursor_;
- if (yych == 'n') goto yy855;
+ if (yych == 'n') goto yy861;
goto yy87;
-yy735:
+yy739:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 351 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, I64Xor); }
-#line 4569 "src/prebuilt/wast-lexer-gen.cc"
-yy737:
+#line 4595 "src/prebuilt/wast-lexer-gen.cc"
+yy741:
++cursor_;
if (limit_ <= cursor_) FILL(1);
yych = *cursor_;
@@ -4578,61 +4604,61 @@ yy737:
} else {
if (yych <= ')') goto yy257;
if (yych <= '/') goto yy86;
- if (yych <= '9') goto yy737;
+ if (yych <= '9') goto yy741;
goto yy86;
}
} else {
if (yych <= '^') {
if (yych <= ';') goto yy257;
if (yych <= '@') goto yy86;
- if (yych <= 'F') goto yy737;
+ if (yych <= 'F') goto yy741;
goto yy86;
} else {
if (yych <= '`') {
- if (yych <= '_') goto yy585;
+ if (yych <= '_') goto yy587;
goto yy86;
} else {
- if (yych <= 'f') goto yy737;
+ if (yych <= 'f') goto yy741;
if (yych <= '~') goto yy86;
goto yy257;
}
}
}
-yy739:
+yy743:
yych = *++cursor_;
if (yych <= '/') goto yy87;
- if (yych <= '0') goto yy856;
- if (yych <= '9') goto yy858;
+ if (yych <= '0') goto yy862;
+ if (yych <= '9') goto yy864;
goto yy87;
-yy740:
+yy744:
yych = *++cursor_;
- if (yych == 'r') goto yy860;
+ if (yych == 'r') goto yy866;
goto yy87;
-yy741:
+yy745:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
-#line 478 "src/wast-lexer.cc"
+#line 543 "src/wast-lexer.cc"
{ RETURN_OPCODE0(Rethrow); }
-#line 4619 "src/prebuilt/wast-lexer-gen.cc"
-yy743:
+#line 4645 "src/prebuilt/wast-lexer-gen.cc"
+yy747:
yych = *++cursor_;
- if (yych == 'b') goto yy862;
+ if (yych == 'b') goto yy868;
goto yy87;
-yy744:
+yy748:
yych = *++cursor_;
- if (yych == 'a') goto yy863;
+ if (yych == 'a') goto yy869;
goto yy87;
-yy745:
+yy749:
yych = *++cursor_;
- if (yych == 'a') goto yy864;
+ if (yych == 'a') goto yy870;
goto yy87;
-yy746:
+yy750:
yych = *++cursor_;
- if (yych == 'a') goto yy865;
+ if (yych == 'a') goto yy871;
goto yy87;
-yy747:
+yy751:
++cursor_;
if (limit_ <= cursor_) FILL(1);
yych = *cursor_;
@@ -4648,7 +4674,7 @@ yy747:
} else {
if (yych <= ':') {
if (yych <= '/') goto yy86;
- if (yych <= '9') goto yy604;
+ if (yych <= '9') goto yy606;
goto yy86;
} else {
if (yych <= ';') goto yy88;
@@ -4656,7 +4682,7 @@ yy747:
goto yy88;
}
}
-yy748:
+yy752:
++cursor_;
if (limit_ <= cursor_) FILL(1);
yych = *cursor_;
@@ -4668,258 +4694,262 @@ yy748:
if (yych <= '\'') goto yy86;
if (yych <= ')') goto yy88;
if (yych <= '/') goto yy86;
- goto yy866;
+ goto yy872;
}
} else {
if (yych <= 'F') {
if (yych == ';') goto yy88;
if (yych <= '@') goto yy86;
- goto yy866;
+ goto yy872;
} else {
if (yych <= '`') goto yy86;
- if (yych <= 'f') goto yy866;
+ if (yych <= 'f') goto yy872;
if (yych <= '~') goto yy86;
goto yy88;
}
}
-yy749:
+yy753:
yych = *++cursor_;
- if (yych == 'x') goto yy868;
+ if (yych == 'x') goto yy874;
goto yy87;
-yy750:
+yy754:
yych = *++cursor_;
- if (yych == 'n') goto yy869;
+ if (yych == 'n') goto yy875;
goto yy87;
-yy751:
+yy755:
yych = *++cursor_;
- if (yych == 'a') goto yy870;
+ if (yych == 'a') goto yy876;
goto yy87;
-yy752:
+yy756:
yych = *++cursor_;
- if (yych == 'e') goto yy871;
+ if (yych == 'e') goto yy877;
goto yy87;
-yy753:
+yy757:
yych = *++cursor_;
- if (yych == 'r') goto yy872;
+ if (yych == 'r') goto yy878;
goto yy87;
-yy754:
+yy758:
yych = *++cursor_;
- if (yych == 'n') goto yy873;
+ if (yych == 'n') goto yy879;
goto yy87;
-yy755:
+yy759:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 265 "src/wast-lexer.cc"
{ RETURN_OPCODE0(BrTable); }
-#line 4717 "src/prebuilt/wast-lexer-gen.cc"
-yy757:
+#line 4743 "src/prebuilt/wast-lexer-gen.cc"
+yy761:
yych = *++cursor_;
- if (yych == 'i') goto yy874;
+ if (yych == 'i') goto yy880;
goto yy87;
-yy758:
+yy762:
yych = *++cursor_;
- if (yych == 'l') goto yy875;
+ if (yych == 'l') goto yy881;
goto yy87;
-yy759:
+yy763:
yych = *++cursor_;
- if (yych == 'm') goto yy877;
+ if (yych == 'm') goto yy883;
goto yy87;
-yy760:
+yy764:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 319 "src/wast-lexer.cc"
{ RETURN_OPCODE(Unary, F32Ceil); }
-#line 4737 "src/prebuilt/wast-lexer-gen.cc"
-yy762:
+#line 4763 "src/prebuilt/wast-lexer-gen.cc"
+yy766:
yych = *++cursor_;
- if (yych == 't') goto yy878;
+ if (yych == 't') goto yy884;
goto yy87;
-yy763:
+yy767:
yych = *++cursor_;
- if (yych == 'e') goto yy880;
+ if (yych == 'e') goto yy886;
goto yy87;
-yy764:
+yy768:
yych = *++cursor_;
- if (yych == 's') goto yy881;
+ if (yych == 's') goto yy887;
goto yy87;
-yy765:
+yy769:
yych = *++cursor_;
- if (yych == 't') goto yy882;
+ if (yych == 't') goto yy888;
goto yy87;
-yy766:
+yy770:
yych = *++cursor_;
- if (yych == 'r') goto yy883;
+ if (yych == 'r') goto yy889;
goto yy87;
-yy767:
+yy771:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 278 "src/wast-lexer.cc"
{ RETURN_OPCODE(Load, F32Load); }
-#line 4765 "src/prebuilt/wast-lexer-gen.cc"
-yy769:
+#line 4791 "src/prebuilt/wast-lexer-gen.cc"
+yy773:
yych = *++cursor_;
- if (yych == 'e') goto yy885;
+ if (yych == 'e') goto yy891;
goto yy87;
-yy770:
+yy774:
yych = *++cursor_;
- if (yych == 't') goto yy886;
+ if (yych == 't') goto yy892;
goto yy87;
-yy771:
+yy775:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 317 "src/wast-lexer.cc"
{ RETURN_OPCODE(Unary, F32Sqrt); }
-#line 4781 "src/prebuilt/wast-lexer-gen.cc"
-yy773:
+#line 4807 "src/prebuilt/wast-lexer-gen.cc"
+yy777:
yych = *++cursor_;
- if (yych == 'e') goto yy887;
+ if (yych == 'e') goto yy893;
goto yy87;
-yy774:
+yy778:
yych = *++cursor_;
- if (yych == 'c') goto yy889;
+ if (yych == 'c') goto yy895;
goto yy87;
-yy775:
+yy779:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 320 "src/wast-lexer.cc"
{ RETURN_OPCODE(Unary, F64Ceil); }
-#line 4797 "src/prebuilt/wast-lexer-gen.cc"
-yy777:
+#line 4823 "src/prebuilt/wast-lexer-gen.cc"
+yy781:
yych = *++cursor_;
- if (yych == 't') goto yy891;
+ if (yych == 't') goto yy897;
goto yy87;
-yy778:
+yy782:
yych = *++cursor_;
- if (yych == 'e') goto yy893;
+ if (yych == 'e') goto yy899;
goto yy87;
-yy779:
+yy783:
yych = *++cursor_;
- if (yych == 's') goto yy894;
+ if (yych == 's') goto yy900;
goto yy87;
-yy780:
+yy784:
yych = *++cursor_;
- if (yych == 'r') goto yy895;
+ if (yych == 'r') goto yy901;
goto yy87;
-yy781:
+yy785:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 279 "src/wast-lexer.cc"
{ RETURN_OPCODE(Load, F64Load); }
-#line 4821 "src/prebuilt/wast-lexer-gen.cc"
-yy783:
+#line 4847 "src/prebuilt/wast-lexer-gen.cc"
+yy787:
yych = *++cursor_;
- if (yych == 'e') goto yy897;
+ if (yych == 'e') goto yy903;
goto yy87;
-yy784:
+yy788:
yych = *++cursor_;
- if (yych == 'o') goto yy898;
+ if (yych == 'o') goto yy904;
goto yy87;
-yy785:
+yy789:
yych = *++cursor_;
- if (yych == 't') goto yy899;
+ if (yych == 't') goto yy905;
goto yy87;
-yy786:
+yy790:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 318 "src/wast-lexer.cc"
{ RETURN_OPCODE(Unary, F64Sqrt); }
-#line 4841 "src/prebuilt/wast-lexer-gen.cc"
-yy788:
+#line 4867 "src/prebuilt/wast-lexer-gen.cc"
+yy792:
yych = *++cursor_;
- if (yych == 'e') goto yy900;
+ if (yych == 'e') goto yy906;
goto yy87;
-yy789:
+yy793:
yych = *++cursor_;
- if (yych == 'c') goto yy902;
+ if (yych == 'c') goto yy908;
goto yy87;
-yy790:
+yy794:
yych = *++cursor_;
- if (yych == 'a') goto yy904;
+ if (yych == 'a') goto yy910;
goto yy87;
-yy791:
+yy795:
yych = *++cursor_;
- if (yych == 'l') goto yy905;
+ if (yych == 'l') goto yy911;
goto yy87;
-yy792:
+yy796:
yych = *++cursor_;
- if (yych == 'o') goto yy907;
+ if (yych == 'o') goto yy913;
goto yy87;
-yy793:
+yy797:
yych = *++cursor_;
- if (yych == 't') goto yy908;
+ if (yych == 'i') goto yy914;
goto yy87;
-yy794:
+yy798:
yych = *++cursor_;
- if (yych == 's') goto yy910;
- if (yych == 'u') goto yy912;
+ if (yych == 't') goto yy915;
goto yy87;
-yy795:
+yy799:
yych = *++cursor_;
- if (yych == 'n') goto yy914;
+ if (yych == 's') goto yy917;
+ if (yych == 'u') goto yy919;
goto yy87;
-yy796:
+yy800:
+ yych = *++cursor_;
+ if (yych == 'n') goto yy921;
+ goto yy87;
+yy801:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 392 "src/wast-lexer.cc"
{ RETURN_OPCODE(Compare, I32GeS); }
-#line 4882 "src/prebuilt/wast-lexer-gen.cc"
-yy798:
+#line 4912 "src/prebuilt/wast-lexer-gen.cc"
+yy803:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 394 "src/wast-lexer.cc"
{ RETURN_OPCODE(Compare, I32GeU); }
-#line 4890 "src/prebuilt/wast-lexer-gen.cc"
-yy800:
+#line 4920 "src/prebuilt/wast-lexer-gen.cc"
+yy805:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 388 "src/wast-lexer.cc"
{ RETURN_OPCODE(Compare, I32GtS); }
-#line 4898 "src/prebuilt/wast-lexer-gen.cc"
-yy802:
+#line 4928 "src/prebuilt/wast-lexer-gen.cc"
+yy807:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 390 "src/wast-lexer.cc"
{ RETURN_OPCODE(Compare, I32GtU); }
-#line 4906 "src/prebuilt/wast-lexer-gen.cc"
-yy804:
+#line 4936 "src/prebuilt/wast-lexer-gen.cc"
+yy809:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 384 "src/wast-lexer.cc"
{ RETURN_OPCODE(Compare, I32LeS); }
-#line 4914 "src/prebuilt/wast-lexer-gen.cc"
-yy806:
+#line 4944 "src/prebuilt/wast-lexer-gen.cc"
+yy811:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 386 "src/wast-lexer.cc"
{ RETURN_OPCODE(Compare, I32LeU); }
-#line 4922 "src/prebuilt/wast-lexer-gen.cc"
-yy808:
+#line 4952 "src/prebuilt/wast-lexer-gen.cc"
+yy813:
++cursor_;
if ((yych = *cursor_) <= '0') {
if (yych <= '"') {
@@ -4930,566 +4960,574 @@ yy808:
}
} else {
if (yych <= '8') {
- if (yych <= '1') goto yy915;
+ if (yych <= '1') goto yy922;
if (yych <= '7') goto yy86;
- goto yy916;
+ goto yy923;
} else {
- if (yych == ';') goto yy809;
+ if (yych == ';') goto yy814;
if (yych <= '~') goto yy86;
}
}
-yy809:
+yy814:
#line 276 "src/wast-lexer.cc"
{ RETURN_OPCODE(Load, I32Load); }
-#line 4945 "src/prebuilt/wast-lexer-gen.cc"
-yy810:
+#line 4975 "src/prebuilt/wast-lexer-gen.cc"
+yy815:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 380 "src/wast-lexer.cc"
{ RETURN_OPCODE(Compare, I32LtS); }
-#line 4953 "src/prebuilt/wast-lexer-gen.cc"
-yy812:
+#line 4983 "src/prebuilt/wast-lexer-gen.cc"
+yy817:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 382 "src/wast-lexer.cc"
{ RETURN_OPCODE(Compare, I32LtU); }
-#line 4961 "src/prebuilt/wast-lexer-gen.cc"
-yy814:
+#line 4991 "src/prebuilt/wast-lexer-gen.cc"
+yy819:
yych = *++cursor_;
- if (yych == 'n') goto yy917;
+ if (yych == 'n') goto yy924;
goto yy87;
-yy815:
+yy820:
yych = *++cursor_;
- if (yych == 't') goto yy918;
+ if (yych == 't') goto yy925;
goto yy87;
-yy816:
+yy821:
yych = *++cursor_;
- if (yych == 's') goto yy919;
- if (yych == 'u') goto yy921;
+ if (yych == 's') goto yy926;
+ if (yych == 'u') goto yy928;
goto yy87;
-yy817:
+yy822:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 358 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, I32Rotl); }
-#line 4982 "src/prebuilt/wast-lexer-gen.cc"
-yy819:
+#line 5012 "src/prebuilt/wast-lexer-gen.cc"
+yy824:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 360 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, I32Rotr); }
-#line 4990 "src/prebuilt/wast-lexer-gen.cc"
-yy821:
+#line 5020 "src/prebuilt/wast-lexer-gen.cc"
+yy826:
yych = *++cursor_;
- if (yych == 's') goto yy923;
- if (yych == 'u') goto yy925;
+ if (yych == 's') goto yy930;
+ if (yych == 'u') goto yy932;
goto yy87;
-yy822:
+yy827:
yych = *++cursor_;
- if (yych == 'e') goto yy927;
+ if (yych == 'e') goto yy934;
goto yy87;
-yy823:
+yy828:
yych = *++cursor_;
- if (yych == 'c') goto yy929;
+ if (yych == 'c') goto yy936;
goto yy87;
-yy824:
+yy829:
yych = *++cursor_;
- if (yych == '/') goto yy930;
+ if (yych == '/') goto yy937;
goto yy87;
-yy825:
+yy830:
yych = *++cursor_;
- if (yych == 't') goto yy931;
+ if (yych == 'i') goto yy938;
goto yy87;
-yy826:
+yy831:
yych = *++cursor_;
- if (yych == 's') goto yy933;
- if (yych == 'u') goto yy935;
+ if (yych == 't') goto yy939;
goto yy87;
-yy827:
+yy832:
yych = *++cursor_;
- if (yych == 'n') goto yy937;
+ if (yych == 's') goto yy941;
+ if (yych == 'u') goto yy943;
goto yy87;
-yy828:
+yy833:
+ yych = *++cursor_;
+ if (yych == 'n') goto yy945;
+ goto yy87;
+yy834:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 393 "src/wast-lexer.cc"
{ RETURN_OPCODE(Compare, I64GeS); }
-#line 5028 "src/prebuilt/wast-lexer-gen.cc"
-yy830:
+#line 5062 "src/prebuilt/wast-lexer-gen.cc"
+yy836:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 395 "src/wast-lexer.cc"
{ RETURN_OPCODE(Compare, I64GeU); }
-#line 5036 "src/prebuilt/wast-lexer-gen.cc"
-yy832:
+#line 5070 "src/prebuilt/wast-lexer-gen.cc"
+yy838:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 389 "src/wast-lexer.cc"
{ RETURN_OPCODE(Compare, I64GtS); }
-#line 5044 "src/prebuilt/wast-lexer-gen.cc"
-yy834:
+#line 5078 "src/prebuilt/wast-lexer-gen.cc"
+yy840:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 391 "src/wast-lexer.cc"
{ RETURN_OPCODE(Compare, I64GtU); }
-#line 5052 "src/prebuilt/wast-lexer-gen.cc"
-yy836:
+#line 5086 "src/prebuilt/wast-lexer-gen.cc"
+yy842:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 385 "src/wast-lexer.cc"
{ RETURN_OPCODE(Compare, I64LeS); }
-#line 5060 "src/prebuilt/wast-lexer-gen.cc"
-yy838:
+#line 5094 "src/prebuilt/wast-lexer-gen.cc"
+yy844:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 387 "src/wast-lexer.cc"
{ RETURN_OPCODE(Compare, I64LeU); }
-#line 5068 "src/prebuilt/wast-lexer-gen.cc"
-yy840:
+#line 5102 "src/prebuilt/wast-lexer-gen.cc"
+yy846:
++cursor_;
if ((yych = *cursor_) <= '1') {
if (yych <= '"') {
if (yych == '!') goto yy86;
} else {
if (yych <= '\'') goto yy86;
- if (yych <= ')') goto yy841;
+ if (yych <= ')') goto yy847;
if (yych <= '0') goto yy86;
- goto yy938;
+ goto yy946;
}
} else {
if (yych <= '8') {
- if (yych == '3') goto yy939;
+ if (yych == '3') goto yy947;
if (yych <= '7') goto yy86;
- goto yy940;
+ goto yy948;
} else {
- if (yych == ';') goto yy841;
+ if (yych == ';') goto yy847;
if (yych <= '~') goto yy86;
}
}
-yy841:
+yy847:
#line 277 "src/wast-lexer.cc"
{ RETURN_OPCODE(Load, I64Load); }
-#line 5093 "src/prebuilt/wast-lexer-gen.cc"
-yy842:
+#line 5127 "src/prebuilt/wast-lexer-gen.cc"
+yy848:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 381 "src/wast-lexer.cc"
{ RETURN_OPCODE(Compare, I64LtS); }
-#line 5101 "src/prebuilt/wast-lexer-gen.cc"
-yy844:
+#line 5135 "src/prebuilt/wast-lexer-gen.cc"
+yy850:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 383 "src/wast-lexer.cc"
{ RETURN_OPCODE(Compare, I64LtU); }
-#line 5109 "src/prebuilt/wast-lexer-gen.cc"
-yy846:
+#line 5143 "src/prebuilt/wast-lexer-gen.cc"
+yy852:
yych = *++cursor_;
- if (yych == 'n') goto yy941;
+ if (yych == 'n') goto yy949;
goto yy87;
-yy847:
+yy853:
yych = *++cursor_;
- if (yych == 't') goto yy942;
+ if (yych == 't') goto yy950;
goto yy87;
-yy848:
+yy854:
yych = *++cursor_;
- if (yych == 's') goto yy943;
- if (yych == 'u') goto yy945;
+ if (yych == 's') goto yy951;
+ if (yych == 'u') goto yy953;
goto yy87;
-yy849:
+yy855:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 359 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, I64Rotl); }
-#line 5130 "src/prebuilt/wast-lexer-gen.cc"
-yy851:
+#line 5164 "src/prebuilt/wast-lexer-gen.cc"
+yy857:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 361 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, I64Rotr); }
-#line 5138 "src/prebuilt/wast-lexer-gen.cc"
-yy853:
+#line 5172 "src/prebuilt/wast-lexer-gen.cc"
+yy859:
yych = *++cursor_;
- if (yych == 's') goto yy947;
- if (yych == 'u') goto yy949;
+ if (yych == 's') goto yy955;
+ if (yych == 'u') goto yy957;
goto yy87;
-yy854:
+yy860:
yych = *++cursor_;
- if (yych == 'e') goto yy951;
+ if (yych == 'e') goto yy959;
goto yy87;
-yy855:
+yy861:
yych = *++cursor_;
- if (yych == 'c') goto yy953;
+ if (yych == 'c') goto yy961;
goto yy87;
-yy856:
+yy862:
++cursor_;
if ((yych = *cursor_) <= '9') {
if (yych <= '"') {
if (yych == '!') goto yy86;
} else {
if (yych <= '\'') goto yy86;
- if (yych <= ')') goto yy857;
+ if (yych <= ')') goto yy863;
if (yych <= '/') goto yy86;
- goto yy858;
+ goto yy864;
}
} else {
if (yych <= '_') {
- if (yych == ';') goto yy857;
+ if (yych == ';') goto yy863;
if (yych <= '^') goto yy86;
- goto yy954;
+ goto yy962;
} else {
- if (yych == 'x') goto yy955;
+ if (yych == 'x') goto yy963;
if (yych <= '~') goto yy86;
}
}
-yy857:
+yy863:
#line 299 "src/wast-lexer.cc"
{ RETURN_TEXT_AT(OffsetEqNat, 7); }
-#line 5176 "src/prebuilt/wast-lexer-gen.cc"
-yy858:
+#line 5210 "src/prebuilt/wast-lexer-gen.cc"
+yy864:
++cursor_;
if (limit_ <= cursor_) FILL(1);
yych = *cursor_;
if (yych <= '/') {
if (yych <= '"') {
if (yych == '!') goto yy86;
- goto yy857;
+ goto yy863;
} else {
if (yych <= '\'') goto yy86;
- if (yych <= ')') goto yy857;
+ if (yych <= ')') goto yy863;
goto yy86;
}
} else {
if (yych <= ';') {
- if (yych <= '9') goto yy858;
+ if (yych <= '9') goto yy864;
if (yych <= ':') goto yy86;
- goto yy857;
+ goto yy863;
} else {
- if (yych == '_') goto yy954;
+ if (yych == '_') goto yy962;
if (yych <= '~') goto yy86;
- goto yy857;
+ goto yy863;
}
}
-yy860:
+yy866:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
-#line 463 "src/wast-lexer.cc"
+#line 528 "src/wast-lexer.cc"
{ RETURN(Register); }
-#line 5208 "src/prebuilt/wast-lexer-gen.cc"
-yy862:
+#line 5242 "src/prebuilt/wast-lexer-gen.cc"
+yy868:
yych = *++cursor_;
- if (yych == 'a') goto yy956;
+ if (yych == 'a') goto yy964;
goto yy87;
-yy863:
+yy869:
yych = *++cursor_;
- if (yych == 'l') goto yy957;
+ if (yych == 'l') goto yy965;
goto yy87;
-yy864:
+yy870:
yych = *++cursor_;
- if (yych == 'l') goto yy959;
+ if (yych == 'l') goto yy967;
goto yy87;
-yy865:
+yy871:
yych = *++cursor_;
- if (yych == 'b') goto yy961;
+ if (yych == 'b') goto yy969;
goto yy87;
-yy866:
+yy872:
++cursor_;
if (limit_ <= cursor_) FILL(1);
yych = *cursor_;
if (yych <= ':') {
if (yych <= '\'') {
if (yych == '!') goto yy86;
- if (yych <= '"') goto yy603;
+ if (yych <= '"') goto yy605;
goto yy86;
} else {
- if (yych <= ')') goto yy603;
+ if (yych <= ')') goto yy605;
if (yych <= '/') goto yy86;
- if (yych <= '9') goto yy866;
+ if (yych <= '9') goto yy872;
goto yy86;
}
} else {
if (yych <= '^') {
- if (yych <= ';') goto yy603;
+ if (yych <= ';') goto yy605;
if (yych <= '@') goto yy86;
- if (yych <= 'F') goto yy866;
+ if (yych <= 'F') goto yy872;
goto yy86;
} else {
if (yych <= '`') {
- if (yych <= '_') goto yy748;
+ if (yych <= '_') goto yy752;
goto yy86;
} else {
- if (yych <= 'f') goto yy866;
+ if (yych <= 'f') goto yy872;
if (yych <= '~') goto yy86;
- goto yy603;
+ goto yy605;
}
}
}
-yy868:
+yy874:
yych = *++cursor_;
- if (yych == 'h') goto yy962;
+ if (yych == 'h') goto yy970;
goto yy87;
-yy869:
+yy875:
yych = *++cursor_;
- if (yych == 'v') goto yy963;
+ if (yych == 'v') goto yy971;
goto yy87;
-yy870:
+yy876:
yych = *++cursor_;
- if (yych == 'l') goto yy964;
+ if (yych == 'l') goto yy972;
goto yy87;
-yy871:
+yy877:
yych = *++cursor_;
- if (yych == 't') goto yy965;
+ if (yych == 't') goto yy973;
goto yy87;
-yy872:
+yy878:
yych = *++cursor_;
- if (yych == 'a') goto yy966;
+ if (yych == 'a') goto yy974;
goto yy87;
-yy873:
+yy879:
yych = *++cursor_;
- if (yych == 'l') goto yy967;
+ if (yych == 'l') goto yy975;
goto yy87;
-yy874:
+yy880:
yych = *++cursor_;
- if (yych == 'r') goto yy968;
+ if (yych == 'r') goto yy976;
goto yy87;
-yy875:
+yy881:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
-#line 476 "src/wast-lexer.cc"
+#line 541 "src/wast-lexer.cc"
{ RETURN_OPCODE0(CatchAll); }
-#line 5292 "src/prebuilt/wast-lexer-gen.cc"
-yy877:
+#line 5326 "src/prebuilt/wast-lexer-gen.cc"
+yy883:
yych = *++cursor_;
- if (yych == 'e') goto yy969;
+ if (yych == 'e') goto yy977;
goto yy87;
-yy878:
+yy884:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 303 "src/wast-lexer.cc"
{ RETURN_OPCODE(Const, F32Const); }
-#line 5304 "src/prebuilt/wast-lexer-gen.cc"
-yy880:
+#line 5338 "src/prebuilt/wast-lexer-gen.cc"
+yy886:
yych = *++cursor_;
- if (yych == 'r') goto yy970;
+ if (yych == 'r') goto yy978;
goto yy87;
-yy881:
+yy887:
yych = *++cursor_;
- if (yych == 'i') goto yy971;
+ if (yych == 'i') goto yy979;
goto yy87;
-yy882:
+yy888:
yych = *++cursor_;
- if (yych == 'e') goto yy972;
+ if (yych == 'e') goto yy980;
goto yy87;
-yy883:
+yy889:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 321 "src/wast-lexer.cc"
{ RETURN_OPCODE(Unary, F32Floor); }
-#line 5324 "src/prebuilt/wast-lexer-gen.cc"
-yy885:
+#line 5358 "src/prebuilt/wast-lexer-gen.cc"
+yy891:
yych = *++cursor_;
- if (yych == 's') goto yy973;
+ if (yych == 's') goto yy981;
goto yy87;
-yy886:
+yy892:
yych = *++cursor_;
- if (yych == 'e') goto yy974;
+ if (yych == 'e') goto yy982;
goto yy87;
-yy887:
+yy893:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 282 "src/wast-lexer.cc"
{ RETURN_OPCODE(Store, F32Store); }
-#line 5340 "src/prebuilt/wast-lexer-gen.cc"
-yy889:
+#line 5374 "src/prebuilt/wast-lexer-gen.cc"
+yy895:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 323 "src/wast-lexer.cc"
{ RETURN_OPCODE(Unary, F32Trunc); }
-#line 5348 "src/prebuilt/wast-lexer-gen.cc"
-yy891:
+#line 5382 "src/prebuilt/wast-lexer-gen.cc"
+yy897:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 304 "src/wast-lexer.cc"
{ RETURN_OPCODE(Const, F64Const); }
-#line 5356 "src/prebuilt/wast-lexer-gen.cc"
-yy893:
+#line 5390 "src/prebuilt/wast-lexer-gen.cc"
+yy899:
yych = *++cursor_;
- if (yych == 'r') goto yy975;
+ if (yych == 'r') goto yy983;
goto yy87;
-yy894:
+yy900:
yych = *++cursor_;
- if (yych == 'i') goto yy976;
+ if (yych == 'i') goto yy984;
goto yy87;
-yy895:
+yy901:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 322 "src/wast-lexer.cc"
{ RETURN_OPCODE(Unary, F64Floor); }
-#line 5372 "src/prebuilt/wast-lexer-gen.cc"
-yy897:
+#line 5406 "src/prebuilt/wast-lexer-gen.cc"
+yy903:
yych = *++cursor_;
- if (yych == 's') goto yy977;
+ if (yych == 's') goto yy985;
goto yy87;
-yy898:
+yy904:
yych = *++cursor_;
- if (yych == 't') goto yy978;
+ if (yych == 't') goto yy986;
goto yy87;
-yy899:
+yy905:
yych = *++cursor_;
- if (yych == 'e') goto yy979;
+ if (yych == 'e') goto yy987;
goto yy87;
-yy900:
+yy906:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 283 "src/wast-lexer.cc"
{ RETURN_OPCODE(Store, F64Store); }
-#line 5392 "src/prebuilt/wast-lexer-gen.cc"
-yy902:
+#line 5426 "src/prebuilt/wast-lexer-gen.cc"
+yy908:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 324 "src/wast-lexer.cc"
{ RETURN_OPCODE(Unary, F64Trunc); }
-#line 5400 "src/prebuilt/wast-lexer-gen.cc"
-yy904:
+#line 5434 "src/prebuilt/wast-lexer-gen.cc"
+yy910:
yych = *++cursor_;
- if (yych == 'l') goto yy980;
+ if (yych == 'l') goto yy988;
goto yy87;
-yy905:
+yy911:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 271 "src/wast-lexer.cc"
{ RETURN_OPCODE0(GetLocal); }
-#line 5412 "src/prebuilt/wast-lexer-gen.cc"
-yy907:
+#line 5446 "src/prebuilt/wast-lexer-gen.cc"
+yy913:
yych = *++cursor_;
- if (yych == 'r') goto yy982;
+ if (yych == 'r') goto yy990;
goto yy87;
-yy908:
+yy914:
+ yych = *++cursor_;
+ if (yych == 'c') goto yy991;
+ goto yy87;
+yy915:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 301 "src/wast-lexer.cc"
{ RETURN_OPCODE(Const, I32Const); }
-#line 5424 "src/prebuilt/wast-lexer-gen.cc"
-yy910:
+#line 5462 "src/prebuilt/wast-lexer-gen.cc"
+yy917:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 338 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, I32DivS); }
-#line 5432 "src/prebuilt/wast-lexer-gen.cc"
-yy912:
+#line 5470 "src/prebuilt/wast-lexer-gen.cc"
+yy919:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 340 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, I32DivU); }
-#line 5440 "src/prebuilt/wast-lexer-gen.cc"
-yy914:
+#line 5478 "src/prebuilt/wast-lexer-gen.cc"
+yy921:
yych = *++cursor_;
- if (yych == 'd') goto yy983;
+ if (yych == 'd') goto yy992;
goto yy87;
-yy915:
+yy922:
yych = *++cursor_;
- if (yych == '6') goto yy984;
+ if (yych == '6') goto yy993;
goto yy87;
-yy916:
+yy923:
yych = *++cursor_;
- if (yych == '_') goto yy985;
+ if (yych == '_') goto yy994;
goto yy87;
-yy917:
+yy924:
yych = *++cursor_;
- if (yych == 't') goto yy986;
+ if (yych == 't') goto yy995;
goto yy87;
-yy918:
+yy925:
yych = *++cursor_;
- if (yych == 'e') goto yy988;
+ if (yych == 'e') goto yy997;
goto yy87;
-yy919:
+yy926:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 342 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, I32RemS); }
-#line 5468 "src/prebuilt/wast-lexer-gen.cc"
-yy921:
+#line 5506 "src/prebuilt/wast-lexer-gen.cc"
+yy928:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 344 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, I32RemU); }
-#line 5476 "src/prebuilt/wast-lexer-gen.cc"
-yy923:
+#line 5514 "src/prebuilt/wast-lexer-gen.cc"
+yy930:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 354 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, I32ShrS); }
-#line 5484 "src/prebuilt/wast-lexer-gen.cc"
-yy925:
+#line 5522 "src/prebuilt/wast-lexer-gen.cc"
+yy932:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 356 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, I32ShrU); }
-#line 5492 "src/prebuilt/wast-lexer-gen.cc"
-yy927:
+#line 5530 "src/prebuilt/wast-lexer-gen.cc"
+yy934:
++cursor_;
if ((yych = *cursor_) <= '0') {
if (yych <= '"') {
@@ -5500,136 +5538,140 @@ yy927:
}
} else {
if (yych <= '8') {
- if (yych <= '1') goto yy989;
+ if (yych <= '1') goto yy998;
if (yych <= '7') goto yy86;
- goto yy990;
+ goto yy999;
} else {
- if (yych == ';') goto yy928;
+ if (yych == ';') goto yy935;
if (yych <= '~') goto yy86;
}
}
-yy928:
+yy935:
#line 280 "src/wast-lexer.cc"
{ RETURN_OPCODE(Store, I32Store); }
-#line 5515 "src/prebuilt/wast-lexer-gen.cc"
-yy929:
+#line 5553 "src/prebuilt/wast-lexer-gen.cc"
+yy936:
yych = *++cursor_;
- if (yych == '_') goto yy992;
+ if (yych == '_') goto yy1001;
goto yy87;
-yy930:
+yy937:
+ yych = *++cursor_;
+ if (yych == 'i') goto yy1002;
+ goto yy87;
+yy938:
yych = *++cursor_;
- if (yych == 'i') goto yy993;
+ if (yych == 'c') goto yy1003;
goto yy87;
-yy931:
+yy939:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 302 "src/wast-lexer.cc"
{ RETURN_OPCODE(Const, I64Const); }
-#line 5531 "src/prebuilt/wast-lexer-gen.cc"
-yy933:
+#line 5573 "src/prebuilt/wast-lexer-gen.cc"
+yy941:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 339 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, I64DivS); }
-#line 5539 "src/prebuilt/wast-lexer-gen.cc"
-yy935:
+#line 5581 "src/prebuilt/wast-lexer-gen.cc"
+yy943:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 341 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, I64DivU); }
-#line 5547 "src/prebuilt/wast-lexer-gen.cc"
-yy937:
+#line 5589 "src/prebuilt/wast-lexer-gen.cc"
+yy945:
yych = *++cursor_;
- if (yych == 'd') goto yy994;
+ if (yych == 'd') goto yy1004;
goto yy87;
-yy938:
+yy946:
yych = *++cursor_;
- if (yych == '6') goto yy995;
+ if (yych == '6') goto yy1005;
goto yy87;
-yy939:
+yy947:
yych = *++cursor_;
- if (yych == '2') goto yy996;
+ if (yych == '2') goto yy1006;
goto yy87;
-yy940:
+yy948:
yych = *++cursor_;
- if (yych == '_') goto yy997;
+ if (yych == '_') goto yy1007;
goto yy87;
-yy941:
+yy949:
yych = *++cursor_;
- if (yych == 't') goto yy998;
+ if (yych == 't') goto yy1008;
goto yy87;
-yy942:
+yy950:
yych = *++cursor_;
- if (yych == 'e') goto yy1000;
+ if (yych == 'e') goto yy1010;
goto yy87;
-yy943:
+yy951:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 343 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, I64RemS); }
-#line 5579 "src/prebuilt/wast-lexer-gen.cc"
-yy945:
+#line 5621 "src/prebuilt/wast-lexer-gen.cc"
+yy953:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 345 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, I64RemU); }
-#line 5587 "src/prebuilt/wast-lexer-gen.cc"
-yy947:
+#line 5629 "src/prebuilt/wast-lexer-gen.cc"
+yy955:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 355 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, I64ShrS); }
-#line 5595 "src/prebuilt/wast-lexer-gen.cc"
-yy949:
+#line 5637 "src/prebuilt/wast-lexer-gen.cc"
+yy957:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 357 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, I64ShrU); }
-#line 5603 "src/prebuilt/wast-lexer-gen.cc"
-yy951:
+#line 5645 "src/prebuilt/wast-lexer-gen.cc"
+yy959:
++cursor_;
if ((yych = *cursor_) <= '1') {
if (yych <= '"') {
if (yych == '!') goto yy86;
} else {
if (yych <= '\'') goto yy86;
- if (yych <= ')') goto yy952;
+ if (yych <= ')') goto yy960;
if (yych <= '0') goto yy86;
- goto yy1001;
+ goto yy1011;
}
} else {
if (yych <= '8') {
- if (yych == '3') goto yy1002;
+ if (yych == '3') goto yy1012;
if (yych <= '7') goto yy86;
- goto yy1003;
+ goto yy1013;
} else {
- if (yych == ';') goto yy952;
+ if (yych == ';') goto yy960;
if (yych <= '~') goto yy86;
}
}
-yy952:
+yy960:
#line 281 "src/wast-lexer.cc"
{ RETURN_OPCODE(Store, I64Store); }
-#line 5628 "src/prebuilt/wast-lexer-gen.cc"
-yy953:
+#line 5670 "src/prebuilt/wast-lexer-gen.cc"
+yy961:
yych = *++cursor_;
- if (yych == '_') goto yy1005;
+ if (yych == '_') goto yy1015;
goto yy87;
-yy954:
+yy962:
++cursor_;
if (limit_ <= cursor_) FILL(1);
yych = *cursor_;
@@ -5645,7 +5687,7 @@ yy954:
} else {
if (yych <= ':') {
if (yych <= '/') goto yy86;
- if (yych <= '9') goto yy858;
+ if (yych <= '9') goto yy864;
goto yy86;
} else {
if (yych <= ';') goto yy88;
@@ -5653,7 +5695,7 @@ yy954:
goto yy88;
}
}
-yy955:
+yy963:
++cursor_;
if (limit_ <= cursor_) FILL(1);
yych = *cursor_;
@@ -5665,1639 +5707,2994 @@ yy955:
if (yych <= '\'') goto yy86;
if (yych <= ')') goto yy88;
if (yych <= '/') goto yy86;
- goto yy1006;
+ goto yy1016;
}
} else {
if (yych <= 'F') {
if (yych == ';') goto yy88;
if (yych <= '@') goto yy86;
- goto yy1006;
+ goto yy1016;
} else {
if (yych <= '`') goto yy86;
- if (yych <= 'f') goto yy1006;
+ if (yych <= 'f') goto yy1016;
if (yych <= '~') goto yy86;
goto yy88;
}
}
-yy956:
+yy964:
yych = *++cursor_;
- if (yych == 'l') goto yy1008;
+ if (yych == 'l') goto yy1018;
goto yy87;
-yy957:
+yy965:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 272 "src/wast-lexer.cc"
{ RETURN_OPCODE0(SetLocal); }
-#line 5694 "src/prebuilt/wast-lexer-gen.cc"
-yy959:
+#line 5736 "src/prebuilt/wast-lexer-gen.cc"
+yy967:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 273 "src/wast-lexer.cc"
{ RETURN_OPCODE0(TeeLocal); }
-#line 5702 "src/prebuilt/wast-lexer-gen.cc"
-yy961:
+#line 5744 "src/prebuilt/wast-lexer-gen.cc"
+yy969:
yych = *++cursor_;
- if (yych == 'l') goto yy1010;
+ if (yych == 'l') goto yy1020;
goto yy87;
-yy962:
+yy970:
yych = *++cursor_;
- if (yych == 'a') goto yy1011;
+ if (yych == 'a') goto yy1021;
goto yy87;
-yy963:
+yy971:
yych = *++cursor_;
- if (yych == 'a') goto yy1012;
+ if (yych == 'a') goto yy1022;
goto yy87;
-yy964:
+yy972:
yych = *++cursor_;
- if (yych == 'f') goto yy1013;
+ if (yych == 'f') goto yy1023;
goto yy87;
-yy965:
+yy973:
yych = *++cursor_;
- if (yych == 'u') goto yy1014;
+ if (yych == 'u') goto yy1024;
goto yy87;
-yy966:
+yy974:
yych = *++cursor_;
- if (yych == 'p') goto yy1015;
+ if (yych == 'p') goto yy1025;
goto yy87;
-yy967:
+yy975:
yych = *++cursor_;
- if (yych == 'i') goto yy1017;
+ if (yych == 'i') goto yy1027;
goto yy87;
-yy968:
+yy976:
yych = *++cursor_;
- if (yych == 'e') goto yy1018;
+ if (yych == 'e') goto yy1028;
goto yy87;
-yy969:
+yy977:
yych = *++cursor_;
- if (yych == 'm') goto yy1019;
+ if (yych == 'm') goto yy1029;
goto yy87;
-yy970:
+yy978:
yych = *++cursor_;
- if (yych == 't') goto yy1020;
+ if (yych == 't') goto yy1030;
goto yy87;
-yy971:
+yy979:
yych = *++cursor_;
- if (yych == 'g') goto yy1021;
+ if (yych == 'g') goto yy1031;
goto yy87;
-yy972:
+yy980:
yych = *++cursor_;
- if (yych == '/') goto yy1022;
+ if (yych == '/') goto yy1032;
goto yy87;
-yy973:
+yy981:
yych = *++cursor_;
- if (yych == 't') goto yy1023;
+ if (yych == 't') goto yy1033;
goto yy87;
-yy974:
+yy982:
yych = *++cursor_;
- if (yych == 'r') goto yy1025;
+ if (yych == 'r') goto yy1035;
goto yy87;
-yy975:
+yy983:
yych = *++cursor_;
- if (yych == 't') goto yy1026;
+ if (yych == 't') goto yy1036;
goto yy87;
-yy976:
+yy984:
yych = *++cursor_;
- if (yych == 'g') goto yy1027;
+ if (yych == 'g') goto yy1037;
goto yy87;
-yy977:
+yy985:
yych = *++cursor_;
- if (yych == 't') goto yy1028;
+ if (yych == 't') goto yy1038;
goto yy87;
-yy978:
+yy986:
yych = *++cursor_;
- if (yych == 'e') goto yy1030;
+ if (yych == 'e') goto yy1040;
goto yy87;
-yy979:
+yy987:
yych = *++cursor_;
- if (yych == 'r') goto yy1031;
+ if (yych == 'r') goto yy1041;
goto yy87;
-yy980:
+yy988:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 274 "src/wast-lexer.cc"
{ RETURN_OPCODE0(GetGlobal); }
-#line 5786 "src/prebuilt/wast-lexer-gen.cc"
-yy982:
+#line 5828 "src/prebuilt/wast-lexer-gen.cc"
+yy990:
yych = *++cursor_;
- if (yych == 'y') goto yy1032;
+ if (yych == 'y') goto yy1042;
goto yy87;
-yy983:
+yy991:
yych = *++cursor_;
- if (yych == '1') goto yy1034;
- if (yych == '8') goto yy1035;
+ if (yych == '.') goto yy1044;
goto yy87;
-yy984:
+yy992:
yych = *++cursor_;
- if (yych == '_') goto yy1036;
+ if (yych == '1') goto yy1045;
+ if (yych == '8') goto yy1046;
goto yy87;
-yy985:
+yy993:
yych = *++cursor_;
- if (yych == 's') goto yy1037;
- if (yych == 'u') goto yy1039;
+ if (yych == '_') goto yy1047;
goto yy87;
-yy986:
+yy994:
+ yych = *++cursor_;
+ if (yych == 's') goto yy1048;
+ if (yych == 'u') goto yy1050;
+ goto yy87;
+yy995:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 311 "src/wast-lexer.cc"
{ RETURN_OPCODE(Unary, I32Popcnt); }
-#line 5812 "src/prebuilt/wast-lexer-gen.cc"
-yy988:
+#line 5858 "src/prebuilt/wast-lexer-gen.cc"
+yy997:
yych = *++cursor_;
- if (yych == 'r') goto yy1041;
+ if (yych == 'r') goto yy1052;
goto yy87;
-yy989:
+yy998:
yych = *++cursor_;
- if (yych == '6') goto yy1042;
+ if (yych == '6') goto yy1053;
goto yy87;
-yy990:
+yy999:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 294 "src/wast-lexer.cc"
{ RETURN_OPCODE(Store, I32Store8); }
-#line 5828 "src/prebuilt/wast-lexer-gen.cc"
-yy992:
+#line 5874 "src/prebuilt/wast-lexer-gen.cc"
+yy1001:
yych = *++cursor_;
- if (yych == 's') goto yy1044;
- if (yych == 'u') goto yy1045;
+ if (yych == 's') goto yy1055;
+ if (yych == 'u') goto yy1056;
goto yy87;
-yy993:
+yy1002:
yych = *++cursor_;
- if (yych == '6') goto yy1046;
+ if (yych == '6') goto yy1057;
goto yy87;
-yy994:
+yy1003:
+ yych = *++cursor_;
+ if (yych == '.') goto yy1058;
+ goto yy87;
+yy1004:
yych = *++cursor_;
if (yych <= '3') {
- if (yych == '1') goto yy1047;
+ if (yych == '1') goto yy1059;
if (yych <= '2') goto yy87;
- goto yy1048;
+ goto yy1060;
} else {
if (yych <= '8') {
if (yych <= '7') goto yy87;
- goto yy1049;
+ goto yy1061;
} else {
- if (yych == '_') goto yy1050;
+ if (yych == '_') goto yy1062;
goto yy87;
}
}
-yy995:
+yy1005:
yych = *++cursor_;
- if (yych == '_') goto yy1051;
+ if (yych == '_') goto yy1063;
goto yy87;
-yy996:
+yy1006:
yych = *++cursor_;
- if (yych == '_') goto yy1052;
+ if (yych == '_') goto yy1064;
goto yy87;
-yy997:
+yy1007:
yych = *++cursor_;
- if (yych == 's') goto yy1053;
- if (yych == 'u') goto yy1055;
+ if (yych == 's') goto yy1065;
+ if (yych == 'u') goto yy1067;
goto yy87;
-yy998:
+yy1008:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 312 "src/wast-lexer.cc"
{ RETURN_OPCODE(Unary, I64Popcnt); }
-#line 5873 "src/prebuilt/wast-lexer-gen.cc"
-yy1000:
+#line 5923 "src/prebuilt/wast-lexer-gen.cc"
+yy1010:
yych = *++cursor_;
- if (yych == 'r') goto yy1057;
+ if (yych == 'r') goto yy1069;
goto yy87;
-yy1001:
+yy1011:
yych = *++cursor_;
- if (yych == '6') goto yy1058;
+ if (yych == '6') goto yy1070;
goto yy87;
-yy1002:
+yy1012:
yych = *++cursor_;
- if (yych == '2') goto yy1060;
+ if (yych == '2') goto yy1072;
goto yy87;
-yy1003:
+yy1013:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 295 "src/wast-lexer.cc"
{ RETURN_OPCODE(Store, I64Store8); }
-#line 5893 "src/prebuilt/wast-lexer-gen.cc"
-yy1005:
+#line 5943 "src/prebuilt/wast-lexer-gen.cc"
+yy1015:
yych = *++cursor_;
- if (yych == 's') goto yy1062;
- if (yych == 'u') goto yy1063;
+ if (yych == 's') goto yy1074;
+ if (yych == 'u') goto yy1075;
goto yy87;
-yy1006:
+yy1016:
++cursor_;
if (limit_ <= cursor_) FILL(1);
yych = *cursor_;
if (yych <= ':') {
if (yych <= '\'') {
if (yych == '!') goto yy86;
- if (yych <= '"') goto yy857;
+ if (yych <= '"') goto yy863;
goto yy86;
} else {
- if (yych <= ')') goto yy857;
+ if (yych <= ')') goto yy863;
if (yych <= '/') goto yy86;
- if (yych <= '9') goto yy1006;
+ if (yych <= '9') goto yy1016;
goto yy86;
}
} else {
if (yych <= '^') {
- if (yych <= ';') goto yy857;
+ if (yych <= ';') goto yy863;
if (yych <= '@') goto yy86;
- if (yych <= 'F') goto yy1006;
+ if (yych <= 'F') goto yy1016;
goto yy86;
} else {
if (yych <= '`') {
- if (yych <= '_') goto yy955;
+ if (yych <= '_') goto yy963;
goto yy86;
} else {
- if (yych <= 'f') goto yy1006;
+ if (yych <= 'f') goto yy1016;
if (yych <= '~') goto yy86;
- goto yy857;
+ goto yy863;
}
}
}
-yy1008:
+yy1018:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 275 "src/wast-lexer.cc"
{ RETURN_OPCODE0(SetGlobal); }
-#line 5938 "src/prebuilt/wast-lexer-gen.cc"
-yy1010:
+#line 5988 "src/prebuilt/wast-lexer-gen.cc"
+yy1020:
yych = *++cursor_;
- if (yych == 'e') goto yy1064;
+ if (yych == 'e') goto yy1076;
goto yy87;
-yy1011:
+yy1021:
yych = *++cursor_;
- if (yych == 'u') goto yy1066;
+ if (yych == 'u') goto yy1078;
goto yy87;
-yy1012:
+yy1022:
yych = *++cursor_;
- if (yych == 'l') goto yy1067;
+ if (yych == 'l') goto yy1079;
goto yy87;
-yy1013:
+yy1023:
yych = *++cursor_;
- if (yych == 'o') goto yy1068;
+ if (yych == 'o') goto yy1080;
goto yy87;
-yy1014:
+yy1024:
yych = *++cursor_;
- if (yych == 'r') goto yy1069;
+ if (yych == 'r') goto yy1081;
goto yy87;
-yy1015:
+yy1025:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
-#line 472 "src/wast-lexer.cc"
+#line 537 "src/wast-lexer.cc"
{ RETURN(AssertTrap); }
-#line 5966 "src/prebuilt/wast-lexer-gen.cc"
-yy1017:
+#line 6016 "src/prebuilt/wast-lexer-gen.cc"
+yy1027:
yych = *++cursor_;
- if (yych == 'n') goto yy1070;
+ if (yych == 'n') goto yy1082;
goto yy87;
-yy1018:
+yy1028:
yych = *++cursor_;
- if (yych == 'c') goto yy1071;
+ if (yych == 'c') goto yy1083;
goto yy87;
-yy1019:
+yy1029:
yych = *++cursor_;
- if (yych == 'o') goto yy1072;
+ if (yych == 'o') goto yy1084;
goto yy87;
-yy1020:
+yy1030:
yych = *++cursor_;
- if (yych == '_') goto yy1073;
+ if (yych == '_') goto yy1085;
goto yy87;
-yy1021:
+yy1031:
yych = *++cursor_;
- if (yych == 'n') goto yy1074;
+ if (yych == 'n') goto yy1086;
goto yy87;
-yy1022:
+yy1032:
yych = *++cursor_;
- if (yych == 'f') goto yy1076;
+ if (yych == 'f') goto yy1088;
goto yy87;
-yy1023:
+yy1033:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 325 "src/wast-lexer.cc"
{ RETURN_OPCODE(Unary, F32Nearest); }
-#line 5998 "src/prebuilt/wast-lexer-gen.cc"
-yy1025:
+#line 6048 "src/prebuilt/wast-lexer-gen.cc"
+yy1035:
yych = *++cursor_;
- if (yych == 'p') goto yy1077;
+ if (yych == 'p') goto yy1089;
goto yy87;
-yy1026:
+yy1036:
yych = *++cursor_;
- if (yych == '_') goto yy1078;
+ if (yych == '_') goto yy1090;
goto yy87;
-yy1027:
+yy1037:
yych = *++cursor_;
- if (yych == 'n') goto yy1079;
+ if (yych == 'n') goto yy1091;
goto yy87;
-yy1028:
+yy1038:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 326 "src/wast-lexer.cc"
{ RETURN_OPCODE(Unary, F64Nearest); }
-#line 6018 "src/prebuilt/wast-lexer-gen.cc"
-yy1030:
+#line 6068 "src/prebuilt/wast-lexer-gen.cc"
+yy1040:
yych = *++cursor_;
- if (yych == '/') goto yy1081;
+ if (yych == '/') goto yy1093;
goto yy87;
-yy1031:
+yy1041:
yych = *++cursor_;
- if (yych == 'p') goto yy1082;
+ if (yych == 'p') goto yy1094;
goto yy87;
-yy1032:
+yy1042:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 444 "src/wast-lexer.cc"
{ RETURN_OPCODE0(GrowMemory); }
-#line 6034 "src/prebuilt/wast-lexer-gen.cc"
-yy1034:
+#line 6084 "src/prebuilt/wast-lexer-gen.cc"
+yy1044:
yych = *++cursor_;
- if (yych == '6') goto yy1083;
+ if (yych <= 'q') {
+ if (yych == 'l') goto yy1095;
+ goto yy87;
+ } else {
+ if (yych <= 'r') goto yy1096;
+ if (yych <= 's') goto yy1097;
+ goto yy87;
+ }
+yy1045:
+ yych = *++cursor_;
+ if (yych == '6') goto yy1098;
goto yy87;
-yy1035:
+yy1046:
yych = *++cursor_;
- if (yych == '_') goto yy1084;
+ if (yych == '_') goto yy1099;
goto yy87;
-yy1036:
+yy1047:
yych = *++cursor_;
- if (yych == 's') goto yy1085;
- if (yych == 'u') goto yy1087;
+ if (yych == 's') goto yy1100;
+ if (yych == 'u') goto yy1102;
goto yy87;
-yy1037:
+yy1048:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 284 "src/wast-lexer.cc"
{ RETURN_OPCODE(Load, I32Load8S); }
-#line 6055 "src/prebuilt/wast-lexer-gen.cc"
-yy1039:
+#line 6115 "src/prebuilt/wast-lexer-gen.cc"
+yy1050:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 286 "src/wast-lexer.cc"
{ RETURN_OPCODE(Load, I32Load8U); }
-#line 6063 "src/prebuilt/wast-lexer-gen.cc"
-yy1041:
+#line 6123 "src/prebuilt/wast-lexer-gen.cc"
+yy1052:
yych = *++cursor_;
- if (yych == 'p') goto yy1089;
+ if (yych == 'p') goto yy1104;
goto yy87;
-yy1042:
+yy1053:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 296 "src/wast-lexer.cc"
{ RETURN_OPCODE(Store, I32Store16); }
-#line 6075 "src/prebuilt/wast-lexer-gen.cc"
-yy1044:
+#line 6135 "src/prebuilt/wast-lexer-gen.cc"
+yy1055:
yych = *++cursor_;
- if (yych == '/') goto yy1090;
- if (yych == ':') goto yy1091;
+ if (yych == '/') goto yy1105;
+ if (yych == ':') goto yy1106;
goto yy87;
-yy1045:
+yy1056:
yych = *++cursor_;
- if (yych == '/') goto yy1092;
- if (yych == ':') goto yy1093;
+ if (yych == '/') goto yy1107;
+ if (yych == ':') goto yy1108;
goto yy87;
-yy1046:
+yy1057:
yych = *++cursor_;
- if (yych == '4') goto yy1094;
+ if (yych == '4') goto yy1109;
goto yy87;
-yy1047:
+yy1058:
+ yych = *++cursor_;
+ if (yych <= 'q') {
+ if (yych == 'l') goto yy1111;
+ goto yy87;
+ } else {
+ if (yych <= 'r') goto yy1112;
+ if (yych <= 's') goto yy1113;
+ goto yy87;
+ }
+yy1059:
yych = *++cursor_;
- if (yych == '6') goto yy1096;
+ if (yych == '6') goto yy1114;
goto yy87;
-yy1048:
+yy1060:
yych = *++cursor_;
- if (yych == '2') goto yy1097;
+ if (yych == '2') goto yy1115;
goto yy87;
-yy1049:
+yy1061:
yych = *++cursor_;
- if (yych == '_') goto yy1098;
+ if (yych == '_') goto yy1116;
goto yy87;
-yy1050:
+yy1062:
yych = *++cursor_;
- if (yych == 's') goto yy1099;
- if (yych == 'u') goto yy1100;
+ if (yych == 's') goto yy1117;
+ if (yych == 'u') goto yy1118;
goto yy87;
-yy1051:
+yy1063:
yych = *++cursor_;
- if (yych == 's') goto yy1101;
- if (yych == 'u') goto yy1103;
+ if (yych == 's') goto yy1119;
+ if (yych == 'u') goto yy1121;
goto yy87;
-yy1052:
+yy1064:
yych = *++cursor_;
- if (yych == 's') goto yy1105;
- if (yych == 'u') goto yy1107;
+ if (yych == 's') goto yy1123;
+ if (yych == 'u') goto yy1125;
goto yy87;
-yy1053:
+yy1065:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 285 "src/wast-lexer.cc"
{ RETURN_OPCODE(Load, I64Load8S); }
-#line 6124 "src/prebuilt/wast-lexer-gen.cc"
-yy1055:
+#line 6194 "src/prebuilt/wast-lexer-gen.cc"
+yy1067:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 287 "src/wast-lexer.cc"
{ RETURN_OPCODE(Load, I64Load8U); }
-#line 6132 "src/prebuilt/wast-lexer-gen.cc"
-yy1057:
+#line 6202 "src/prebuilt/wast-lexer-gen.cc"
+yy1069:
yych = *++cursor_;
- if (yych == 'p') goto yy1109;
+ if (yych == 'p') goto yy1127;
goto yy87;
-yy1058:
+yy1070:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 297 "src/wast-lexer.cc"
{ RETURN_OPCODE(Store, I64Store16); }
-#line 6144 "src/prebuilt/wast-lexer-gen.cc"
-yy1060:
+#line 6214 "src/prebuilt/wast-lexer-gen.cc"
+yy1072:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 298 "src/wast-lexer.cc"
{ RETURN_OPCODE(Store, I64Store32); }
-#line 6152 "src/prebuilt/wast-lexer-gen.cc"
-yy1062:
+#line 6222 "src/prebuilt/wast-lexer-gen.cc"
+yy1074:
yych = *++cursor_;
- if (yych == '/') goto yy1110;
- if (yych == ':') goto yy1111;
+ if (yych == '/') goto yy1128;
+ if (yych == ':') goto yy1129;
goto yy87;
-yy1063:
+yy1075:
yych = *++cursor_;
- if (yych == '/') goto yy1112;
- if (yych == ':') goto yy1113;
+ if (yych == '/') goto yy1130;
+ if (yych == ':') goto yy1131;
goto yy87;
-yy1064:
+yy1076:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 442 "src/wast-lexer.cc"
{ RETURN_OPCODE0(Unreachable); }
-#line 6170 "src/prebuilt/wast-lexer-gen.cc"
-yy1066:
+#line 6240 "src/prebuilt/wast-lexer-gen.cc"
+yy1078:
yych = *++cursor_;
- if (yych == 's') goto yy1114;
+ if (yych == 's') goto yy1132;
goto yy87;
-yy1067:
+yy1079:
yych = *++cursor_;
- if (yych == 'i') goto yy1115;
+ if (yych == 'i') goto yy1133;
goto yy87;
-yy1068:
+yy1080:
yych = *++cursor_;
- if (yych == 'r') goto yy1116;
+ if (yych == 'r') goto yy1134;
goto yy87;
-yy1069:
+yy1081:
yych = *++cursor_;
- if (yych == 'n') goto yy1117;
+ if (yych == 'n') goto yy1135;
goto yy87;
-yy1070:
+yy1082:
yych = *++cursor_;
- if (yych == 'k') goto yy1119;
+ if (yych == 'k') goto yy1137;
goto yy87;
-yy1071:
+yy1083:
yych = *++cursor_;
- if (yych == 't') goto yy1120;
+ if (yych == 't') goto yy1138;
goto yy87;
-yy1072:
+yy1084:
yych = *++cursor_;
- if (yych == 'r') goto yy1122;
+ if (yych == 'r') goto yy1140;
goto yy87;
-yy1073:
+yy1085:
yych = *++cursor_;
- if (yych == 's') goto yy1123;
- if (yych == 'u') goto yy1124;
+ if (yych == 's') goto yy1141;
+ if (yych == 'u') goto yy1142;
goto yy87;
-yy1074:
+yy1086:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 374 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, F32Copysign); }
-#line 6211 "src/prebuilt/wast-lexer-gen.cc"
-yy1076:
+#line 6281 "src/prebuilt/wast-lexer-gen.cc"
+yy1088:
yych = *++cursor_;
- if (yych == '6') goto yy1125;
+ if (yych == '6') goto yy1143;
goto yy87;
-yy1077:
+yy1089:
yych = *++cursor_;
- if (yych == 'r') goto yy1126;
+ if (yych == 'r') goto yy1144;
goto yy87;
-yy1078:
+yy1090:
yych = *++cursor_;
- if (yych == 's') goto yy1127;
- if (yych == 'u') goto yy1128;
+ if (yych == 's') goto yy1145;
+ if (yych == 'u') goto yy1146;
goto yy87;
-yy1079:
+yy1091:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 375 "src/wast-lexer.cc"
{ RETURN_OPCODE(Binary, F64Copysign); }
-#line 6232 "src/prebuilt/wast-lexer-gen.cc"
-yy1081:
+#line 6302 "src/prebuilt/wast-lexer-gen.cc"
+yy1093:
yych = *++cursor_;
- if (yych == 'f') goto yy1129;
+ if (yych == 'f') goto yy1147;
goto yy87;
-yy1082:
+yy1094:
yych = *++cursor_;
- if (yych == 'r') goto yy1130;
+ if (yych == 'r') goto yy1148;
goto yy87;
-yy1083:
+yy1095:
yych = *++cursor_;
- if (yych == '_') goto yy1131;
+ if (yych == 'o') goto yy1149;
goto yy87;
-yy1084:
+yy1096:
yych = *++cursor_;
- if (yych == 's') goto yy1132;
+ if (yych == 'm') goto yy1150;
goto yy87;
-yy1085:
+yy1097:
+ yych = *++cursor_;
+ if (yych == 't') goto yy1151;
+ goto yy87;
+yy1098:
+ yych = *++cursor_;
+ if (yych == '_') goto yy1152;
+ goto yy87;
+yy1099:
+ yych = *++cursor_;
+ if (yych == 's') goto yy1153;
+ goto yy87;
+yy1100:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 288 "src/wast-lexer.cc"
{ RETURN_OPCODE(Load, I32Load16S); }
-#line 6256 "src/prebuilt/wast-lexer-gen.cc"
-yy1087:
+#line 6338 "src/prebuilt/wast-lexer-gen.cc"
+yy1102:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 290 "src/wast-lexer.cc"
{ RETURN_OPCODE(Load, I32Load16U); }
-#line 6264 "src/prebuilt/wast-lexer-gen.cc"
-yy1089:
+#line 6346 "src/prebuilt/wast-lexer-gen.cc"
+yy1104:
yych = *++cursor_;
- if (yych == 'r') goto yy1134;
+ if (yych == 'r') goto yy1155;
goto yy87;
-yy1090:
+yy1105:
yych = *++cursor_;
- if (yych == 'f') goto yy1135;
+ if (yych == 'f') goto yy1156;
goto yy87;
-yy1091:
+yy1106:
yych = *++cursor_;
- if (yych == 's') goto yy1136;
+ if (yych == 's') goto yy1157;
goto yy87;
-yy1092:
+yy1107:
yych = *++cursor_;
- if (yych == 'f') goto yy1137;
+ if (yych == 'f') goto yy1158;
goto yy87;
-yy1093:
+yy1108:
yych = *++cursor_;
- if (yych == 's') goto yy1138;
+ if (yych == 's') goto yy1159;
goto yy87;
-yy1094:
+yy1109:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 410 "src/wast-lexer.cc"
{ RETURN_OPCODE(Convert, I32WrapI64); }
-#line 6292 "src/prebuilt/wast-lexer-gen.cc"
-yy1096:
+#line 6374 "src/prebuilt/wast-lexer-gen.cc"
+yy1111:
yych = *++cursor_;
- if (yych == '_') goto yy1139;
+ if (yych == 'o') goto yy1160;
goto yy87;
-yy1097:
+yy1112:
yych = *++cursor_;
- if (yych == '_') goto yy1140;
+ if (yych == 'm') goto yy1161;
goto yy87;
-yy1098:
+yy1113:
yych = *++cursor_;
- if (yych == 's') goto yy1141;
+ if (yych == 't') goto yy1162;
goto yy87;
-yy1099:
+yy1114:
yych = *++cursor_;
- if (yych == '/') goto yy1143;
+ if (yych == '_') goto yy1163;
goto yy87;
-yy1100:
+yy1115:
yych = *++cursor_;
- if (yych == '/') goto yy1144;
+ if (yych == '_') goto yy1164;
goto yy87;
-yy1101:
+yy1116:
+ yych = *++cursor_;
+ if (yych == 's') goto yy1165;
+ goto yy87;
+yy1117:
+ yych = *++cursor_;
+ if (yych == '/') goto yy1167;
+ goto yy87;
+yy1118:
+ yych = *++cursor_;
+ if (yych == '/') goto yy1168;
+ goto yy87;
+yy1119:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 289 "src/wast-lexer.cc"
{ RETURN_OPCODE(Load, I64Load16S); }
-#line 6320 "src/prebuilt/wast-lexer-gen.cc"
-yy1103:
+#line 6414 "src/prebuilt/wast-lexer-gen.cc"
+yy1121:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 291 "src/wast-lexer.cc"
{ RETURN_OPCODE(Load, I64Load16U); }
-#line 6328 "src/prebuilt/wast-lexer-gen.cc"
-yy1105:
+#line 6422 "src/prebuilt/wast-lexer-gen.cc"
+yy1123:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 292 "src/wast-lexer.cc"
{ RETURN_OPCODE(Load, I64Load32S); }
-#line 6336 "src/prebuilt/wast-lexer-gen.cc"
-yy1107:
+#line 6430 "src/prebuilt/wast-lexer-gen.cc"
+yy1125:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 293 "src/wast-lexer.cc"
{ RETURN_OPCODE(Load, I64Load32U); }
-#line 6344 "src/prebuilt/wast-lexer-gen.cc"
-yy1109:
+#line 6438 "src/prebuilt/wast-lexer-gen.cc"
+yy1127:
yych = *++cursor_;
- if (yych == 'r') goto yy1145;
+ if (yych == 'r') goto yy1169;
goto yy87;
-yy1110:
+yy1128:
yych = *++cursor_;
- if (yych == 'f') goto yy1146;
+ if (yych == 'f') goto yy1170;
goto yy87;
-yy1111:
+yy1129:
yych = *++cursor_;
- if (yych == 's') goto yy1147;
+ if (yych == 's') goto yy1171;
goto yy87;
-yy1112:
+yy1130:
yych = *++cursor_;
- if (yych == 'f') goto yy1148;
+ if (yych == 'f') goto yy1172;
goto yy87;
-yy1113:
+yy1131:
yych = *++cursor_;
- if (yych == 's') goto yy1149;
+ if (yych == 's') goto yy1173;
goto yy87;
-yy1114:
+yy1132:
yych = *++cursor_;
- if (yych == 't') goto yy1150;
+ if (yych == 't') goto yy1174;
goto yy87;
-yy1115:
+yy1133:
yych = *++cursor_;
- if (yych == 'd') goto yy1151;
+ if (yych == 'd') goto yy1175;
goto yy87;
-yy1116:
+yy1134:
yych = *++cursor_;
- if (yych == 'm') goto yy1153;
+ if (yych == 'm') goto yy1177;
goto yy87;
-yy1117:
+yy1135:
++cursor_;
if ((yych = *cursor_) <= ')') {
if (yych <= '!') {
if (yych >= '!') goto yy86;
} else {
- if (yych <= '"') goto yy1118;
+ if (yych <= '"') goto yy1136;
if (yych <= '\'') goto yy86;
}
} else {
if (yych <= '^') {
if (yych != ';') goto yy86;
} else {
- if (yych <= '_') goto yy1154;
+ if (yych <= '_') goto yy1178;
if (yych <= '~') goto yy86;
}
}
-yy1118:
-#line 469 "src/wast-lexer.cc"
+yy1136:
+#line 534 "src/wast-lexer.cc"
{ RETURN(AssertReturn); }
-#line 6397 "src/prebuilt/wast-lexer-gen.cc"
-yy1119:
+#line 6491 "src/prebuilt/wast-lexer-gen.cc"
+yy1137:
yych = *++cursor_;
- if (yych == 'a') goto yy1155;
+ if (yych == 'a') goto yy1179;
goto yy87;
-yy1120:
+yy1138:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 267 "src/wast-lexer.cc"
{ RETURN_OPCODE0(CallIndirect); }
-#line 6409 "src/prebuilt/wast-lexer-gen.cc"
-yy1122:
+#line 6503 "src/prebuilt/wast-lexer-gen.cc"
+yy1140:
yych = *++cursor_;
- if (yych == 'y') goto yy1156;
+ if (yych == 'y') goto yy1180;
goto yy87;
-yy1123:
+yy1141:
yych = *++cursor_;
- if (yych == '/') goto yy1158;
+ if (yych == '/') goto yy1182;
goto yy87;
-yy1124:
+yy1142:
yych = *++cursor_;
- if (yych == '/') goto yy1159;
+ if (yych == '/') goto yy1183;
goto yy87;
-yy1125:
+yy1143:
yych = *++cursor_;
- if (yych == '4') goto yy1160;
+ if (yych == '4') goto yy1184;
goto yy87;
-yy1126:
+yy1144:
yych = *++cursor_;
- if (yych == 'e') goto yy1162;
+ if (yych == 'e') goto yy1186;
goto yy87;
-yy1127:
+yy1145:
yych = *++cursor_;
- if (yych == '/') goto yy1163;
+ if (yych == '/') goto yy1187;
goto yy87;
-yy1128:
+yy1146:
yych = *++cursor_;
- if (yych == '/') goto yy1164;
+ if (yych == '/') goto yy1188;
goto yy87;
-yy1129:
+yy1147:
yych = *++cursor_;
- if (yych == '3') goto yy1165;
+ if (yych == '3') goto yy1189;
goto yy87;
-yy1130:
+yy1148:
yych = *++cursor_;
- if (yych == 'e') goto yy1166;
+ if (yych == 'e') goto yy1190;
goto yy87;
-yy1131:
+yy1149:
yych = *++cursor_;
- if (yych == 's') goto yy1167;
+ if (yych == 'a') goto yy1191;
goto yy87;
-yy1132:
+yy1150:
+ yych = *++cursor_;
+ if (yych == 'w') goto yy1192;
+ goto yy87;
+yy1151:
+ yych = *++cursor_;
+ if (yych == 'o') goto yy1193;
+ goto yy87;
+yy1152:
+ yych = *++cursor_;
+ if (yych == 's') goto yy1194;
+ goto yy87;
+yy1153:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 327 "src/wast-lexer.cc"
{ RETURN_OPCODE(Unary, I32Extend8S); }
-#line 6457 "src/prebuilt/wast-lexer-gen.cc"
-yy1134:
+#line 6563 "src/prebuilt/wast-lexer-gen.cc"
+yy1155:
yych = *++cursor_;
- if (yych == 'e') goto yy1169;
+ if (yych == 'e') goto yy1196;
goto yy87;
-yy1135:
+yy1156:
yych = *++cursor_;
- if (yych == '3') goto yy1170;
- if (yych == '6') goto yy1171;
+ if (yych == '3') goto yy1197;
+ if (yych == '6') goto yy1198;
goto yy87;
-yy1136:
+yy1157:
yych = *++cursor_;
- if (yych == 'a') goto yy1172;
+ if (yych == 'a') goto yy1199;
goto yy87;
-yy1137:
+yy1158:
yych = *++cursor_;
- if (yych == '3') goto yy1173;
- if (yych == '6') goto yy1174;
+ if (yych == '3') goto yy1200;
+ if (yych == '6') goto yy1201;
goto yy87;
-yy1138:
+yy1159:
yych = *++cursor_;
- if (yych == 'a') goto yy1175;
+ if (yych == 'a') goto yy1202;
goto yy87;
-yy1139:
+yy1160:
yych = *++cursor_;
- if (yych == 's') goto yy1176;
+ if (yych == 'a') goto yy1203;
goto yy87;
-yy1140:
+yy1161:
yych = *++cursor_;
- if (yych == 's') goto yy1178;
+ if (yych == 'w') goto yy1204;
goto yy87;
-yy1141:
+yy1162:
+ yych = *++cursor_;
+ if (yych == 'o') goto yy1205;
+ goto yy87;
+yy1163:
+ yych = *++cursor_;
+ if (yych == 's') goto yy1206;
+ goto yy87;
+yy1164:
+ yych = *++cursor_;
+ if (yych == 's') goto yy1208;
+ goto yy87;
+yy1165:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 329 "src/wast-lexer.cc"
{ RETURN_OPCODE(Unary, I64Extend8S); }
-#line 6495 "src/prebuilt/wast-lexer-gen.cc"
-yy1143:
+#line 6613 "src/prebuilt/wast-lexer-gen.cc"
+yy1167:
yych = *++cursor_;
- if (yych == 'i') goto yy1180;
+ if (yych == 'i') goto yy1210;
goto yy87;
-yy1144:
+yy1168:
yych = *++cursor_;
- if (yych == 'i') goto yy1181;
+ if (yych == 'i') goto yy1211;
goto yy87;
-yy1145:
+yy1169:
yych = *++cursor_;
- if (yych == 'e') goto yy1182;
+ if (yych == 'e') goto yy1212;
goto yy87;
-yy1146:
+yy1170:
yych = *++cursor_;
- if (yych == '3') goto yy1183;
- if (yych == '6') goto yy1184;
+ if (yych == '3') goto yy1213;
+ if (yych == '6') goto yy1214;
goto yy87;
-yy1147:
+yy1171:
yych = *++cursor_;
- if (yych == 'a') goto yy1185;
+ if (yych == 'a') goto yy1215;
goto yy87;
-yy1148:
+yy1172:
yych = *++cursor_;
- if (yych == '3') goto yy1186;
- if (yych == '6') goto yy1187;
+ if (yych == '3') goto yy1216;
+ if (yych == '6') goto yy1217;
goto yy87;
-yy1149:
+yy1173:
yych = *++cursor_;
- if (yych == 'a') goto yy1188;
+ if (yych == 'a') goto yy1218;
goto yy87;
-yy1150:
+yy1174:
yych = *++cursor_;
- if (yych == 'i') goto yy1189;
+ if (yych == 'i') goto yy1219;
goto yy87;
-yy1151:
+yy1175:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
-#line 467 "src/wast-lexer.cc"
+#line 532 "src/wast-lexer.cc"
{ RETURN(AssertInvalid); }
-#line 6537 "src/prebuilt/wast-lexer-gen.cc"
-yy1153:
+#line 6655 "src/prebuilt/wast-lexer-gen.cc"
+yy1177:
yych = *++cursor_;
- if (yych == 'e') goto yy1190;
+ if (yych == 'e') goto yy1220;
goto yy87;
-yy1154:
+yy1178:
yych = *++cursor_;
- if (yych == 'a') goto yy1191;
- if (yych == 'c') goto yy1192;
+ if (yych == 'a') goto yy1221;
+ if (yych == 'c') goto yy1222;
goto yy87;
-yy1155:
+yy1179:
yych = *++cursor_;
- if (yych == 'b') goto yy1193;
+ if (yych == 'b') goto yy1223;
goto yy87;
-yy1156:
+yy1180:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 443 "src/wast-lexer.cc"
{ RETURN_OPCODE0(CurrentMemory); }
-#line 6558 "src/prebuilt/wast-lexer-gen.cc"
-yy1158:
+#line 6676 "src/prebuilt/wast-lexer-gen.cc"
+yy1182:
yych = *++cursor_;
- if (yych == 'i') goto yy1194;
+ if (yych == 'i') goto yy1224;
goto yy87;
-yy1159:
+yy1183:
yych = *++cursor_;
- if (yych == 'i') goto yy1195;
+ if (yych == 'i') goto yy1225;
goto yy87;
-yy1160:
+yy1184:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 436 "src/wast-lexer.cc"
{ RETURN_OPCODE(Convert, F32DemoteF64); }
-#line 6574 "src/prebuilt/wast-lexer-gen.cc"
-yy1162:
+#line 6692 "src/prebuilt/wast-lexer-gen.cc"
+yy1186:
yych = *++cursor_;
- if (yych == 't') goto yy1196;
+ if (yych == 't') goto yy1226;
goto yy87;
-yy1163:
+yy1187:
yych = *++cursor_;
- if (yych == 'i') goto yy1197;
+ if (yych == 'i') goto yy1227;
goto yy87;
-yy1164:
+yy1188:
yych = *++cursor_;
- if (yych == 'i') goto yy1198;
+ if (yych == 'i') goto yy1228;
goto yy87;
-yy1165:
+yy1189:
yych = *++cursor_;
- if (yych == '2') goto yy1199;
+ if (yych == '2') goto yy1229;
goto yy87;
-yy1166:
+yy1190:
yych = *++cursor_;
- if (yych == 't') goto yy1201;
+ if (yych == 't') goto yy1231;
goto yy87;
-yy1167:
+yy1191:
+ yych = *++cursor_;
+ if (yych == 'd') goto yy1232;
+ goto yy87;
+yy1192:
+ yych = *++cursor_;
+ if (yych <= '0') {
+ if (yych == '.') goto yy1234;
+ goto yy87;
+ } else {
+ if (yych <= '1') goto yy1235;
+ if (yych == '8') goto yy1236;
+ goto yy87;
+ }
+yy1193:
+ yych = *++cursor_;
+ if (yych == 'r') goto yy1237;
+ goto yy87;
+yy1194:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 328 "src/wast-lexer.cc"
{ RETURN_OPCODE(Unary, I32Extend16S); }
-#line 6602 "src/prebuilt/wast-lexer-gen.cc"
-yy1169:
+#line 6738 "src/prebuilt/wast-lexer-gen.cc"
+yy1196:
yych = *++cursor_;
- if (yych == 't') goto yy1202;
+ if (yych == 't') goto yy1238;
goto yy87;
-yy1170:
+yy1197:
yych = *++cursor_;
- if (yych == '2') goto yy1203;
+ if (yych == '2') goto yy1239;
goto yy87;
-yy1171:
+yy1198:
yych = *++cursor_;
- if (yych == '4') goto yy1205;
+ if (yych == '4') goto yy1241;
goto yy87;
-yy1172:
+yy1199:
yych = *++cursor_;
- if (yych == 't') goto yy1207;
+ if (yych == 't') goto yy1243;
goto yy87;
-yy1173:
+yy1200:
yych = *++cursor_;
- if (yych == '2') goto yy1208;
+ if (yych == '2') goto yy1244;
goto yy87;
-yy1174:
+yy1201:
yych = *++cursor_;
- if (yych == '4') goto yy1210;
+ if (yych == '4') goto yy1246;
goto yy87;
-yy1175:
+yy1202:
yych = *++cursor_;
- if (yych == 't') goto yy1212;
+ if (yych == 't') goto yy1248;
goto yy87;
-yy1176:
+yy1203:
+ yych = *++cursor_;
+ if (yych == 'd') goto yy1249;
+ goto yy87;
+yy1204:
+ yych = *++cursor_;
+ switch (yych) {
+ case '.': goto yy1251;
+ case '1': goto yy1252;
+ case '3': goto yy1253;
+ case '8': goto yy1254;
+ default: goto yy87;
+ }
+yy1205:
+ yych = *++cursor_;
+ if (yych == 'r') goto yy1255;
+ goto yy87;
+yy1206:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 330 "src/wast-lexer.cc"
{ RETURN_OPCODE(Unary, I64Extend16S); }
-#line 6638 "src/prebuilt/wast-lexer-gen.cc"
-yy1178:
+#line 6791 "src/prebuilt/wast-lexer-gen.cc"
+yy1208:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 331 "src/wast-lexer.cc"
{ RETURN_OPCODE(Unary, I64Extend32S); }
-#line 6646 "src/prebuilt/wast-lexer-gen.cc"
-yy1180:
+#line 6799 "src/prebuilt/wast-lexer-gen.cc"
+yy1210:
yych = *++cursor_;
- if (yych == '3') goto yy1213;
+ if (yych == '3') goto yy1256;
goto yy87;
-yy1181:
+yy1211:
yych = *++cursor_;
- if (yych == '3') goto yy1214;
+ if (yych == '3') goto yy1257;
goto yy87;
-yy1182:
+yy1212:
yych = *++cursor_;
- if (yych == 't') goto yy1215;
+ if (yych == 't') goto yy1258;
goto yy87;
-yy1183:
+yy1213:
yych = *++cursor_;
- if (yych == '2') goto yy1216;
+ if (yych == '2') goto yy1259;
goto yy87;
-yy1184:
+yy1214:
yych = *++cursor_;
- if (yych == '4') goto yy1218;
+ if (yych == '4') goto yy1261;
goto yy87;
-yy1185:
+yy1215:
yych = *++cursor_;
- if (yych == 't') goto yy1220;
+ if (yych == 't') goto yy1263;
goto yy87;
-yy1186:
+yy1216:
yych = *++cursor_;
- if (yych == '2') goto yy1221;
+ if (yych == '2') goto yy1264;
goto yy87;
-yy1187:
+yy1217:
yych = *++cursor_;
- if (yych == '4') goto yy1223;
+ if (yych == '4') goto yy1266;
goto yy87;
-yy1188:
+yy1218:
yych = *++cursor_;
- if (yych == 't') goto yy1225;
+ if (yych == 't') goto yy1268;
goto yy87;
-yy1189:
+yy1219:
yych = *++cursor_;
- if (yych == 'o') goto yy1226;
+ if (yych == 'o') goto yy1269;
goto yy87;
-yy1190:
+yy1220:
yych = *++cursor_;
- if (yych == 'd') goto yy1227;
+ if (yych == 'd') goto yy1270;
goto yy87;
-yy1191:
+yy1221:
yych = *++cursor_;
- if (yych == 'r') goto yy1229;
+ if (yych == 'r') goto yy1272;
goto yy87;
-yy1192:
+yy1222:
yych = *++cursor_;
- if (yych == 'a') goto yy1230;
+ if (yych == 'a') goto yy1273;
goto yy87;
-yy1193:
+yy1223:
yych = *++cursor_;
- if (yych == 'l') goto yy1231;
+ if (yych == 'l') goto yy1274;
goto yy87;
-yy1194:
+yy1224:
yych = *++cursor_;
- if (yych == '3') goto yy1232;
- if (yych == '6') goto yy1233;
+ if (yych == '3') goto yy1275;
+ if (yych == '6') goto yy1276;
goto yy87;
-yy1195:
+yy1225:
yych = *++cursor_;
- if (yych == '3') goto yy1234;
- if (yych == '6') goto yy1235;
+ if (yych == '3') goto yy1277;
+ if (yych == '6') goto yy1278;
goto yy87;
-yy1196:
+yy1226:
yych = *++cursor_;
- if (yych == '/') goto yy1236;
+ if (yych == '/') goto yy1279;
goto yy87;
-yy1197:
+yy1227:
yych = *++cursor_;
- if (yych == '3') goto yy1237;
- if (yych == '6') goto yy1238;
+ if (yych == '3') goto yy1280;
+ if (yych == '6') goto yy1281;
goto yy87;
-yy1198:
+yy1228:
yych = *++cursor_;
- if (yych == '3') goto yy1239;
- if (yych == '6') goto yy1240;
+ if (yych == '3') goto yy1282;
+ if (yych == '6') goto yy1283;
goto yy87;
-yy1199:
+yy1229:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 435 "src/wast-lexer.cc"
{ RETURN_OPCODE(Convert, F64PromoteF32); }
-#line 6734 "src/prebuilt/wast-lexer-gen.cc"
-yy1201:
+#line 6887 "src/prebuilt/wast-lexer-gen.cc"
+yy1231:
yych = *++cursor_;
- if (yych == '/') goto yy1241;
+ if (yych == '/') goto yy1284;
goto yy87;
-yy1202:
+yy1232:
+ ++cursor_;
+ if ((yych = *cursor_) <= '0') {
+ if (yych <= '"') {
+ if (yych == '!') goto yy86;
+ } else {
+ if (yych <= '\'') goto yy86;
+ if (yych >= '*') goto yy86;
+ }
+ } else {
+ if (yych <= '8') {
+ if (yych <= '1') goto yy1285;
+ if (yych <= '7') goto yy86;
+ goto yy1286;
+ } else {
+ if (yych == ';') goto yy1233;
+ if (yych <= '~') goto yy86;
+ }
+ }
+yy1233:
+#line 446 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicLoad, I32AtomicLoad); }
+#line 6914 "src/prebuilt/wast-lexer-gen.cc"
+yy1234:
+ yych = *++cursor_;
+ switch (yych) {
+ case 'a': goto yy1287;
+ case 'c': goto yy1288;
+ case 'o': goto yy1289;
+ case 's': goto yy1290;
+ case 'x': goto yy1291;
+ default: goto yy87;
+ }
+yy1235:
yych = *++cursor_;
- if (yych == '/') goto yy1242;
+ if (yych == '6') goto yy1292;
goto yy87;
-yy1203:
+yy1236:
+ yych = *++cursor_;
+ if (yych == '_') goto yy1293;
+ goto yy87;
+yy1237:
+ yych = *++cursor_;
+ if (yych == 'e') goto yy1294;
+ goto yy87;
+yy1238:
+ yych = *++cursor_;
+ if (yych == '/') goto yy1296;
+ goto yy87;
+yy1239:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 411 "src/wast-lexer.cc"
{ RETURN_OPCODE(Convert, I32TruncSF32); }
-#line 6750 "src/prebuilt/wast-lexer-gen.cc"
-yy1205:
+#line 6948 "src/prebuilt/wast-lexer-gen.cc"
+yy1241:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 413 "src/wast-lexer.cc"
{ RETURN_OPCODE(Convert, I32TruncSF64); }
-#line 6758 "src/prebuilt/wast-lexer-gen.cc"
-yy1207:
+#line 6956 "src/prebuilt/wast-lexer-gen.cc"
+yy1243:
yych = *++cursor_;
- if (yych == '/') goto yy1243;
+ if (yych == '/') goto yy1297;
goto yy87;
-yy1208:
+yy1244:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 415 "src/wast-lexer.cc"
{ RETURN_OPCODE(Convert, I32TruncUF32); }
-#line 6770 "src/prebuilt/wast-lexer-gen.cc"
-yy1210:
+#line 6968 "src/prebuilt/wast-lexer-gen.cc"
+yy1246:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 417 "src/wast-lexer.cc"
{ RETURN_OPCODE(Convert, I32TruncUF64); }
-#line 6778 "src/prebuilt/wast-lexer-gen.cc"
-yy1212:
+#line 6976 "src/prebuilt/wast-lexer-gen.cc"
+yy1248:
yych = *++cursor_;
- if (yych == '/') goto yy1244;
+ if (yych == '/') goto yy1298;
goto yy87;
-yy1213:
+yy1249:
+ ++cursor_;
+ if ((yych = *cursor_) <= '1') {
+ if (yych <= '"') {
+ if (yych == '!') goto yy86;
+ } else {
+ if (yych <= '\'') goto yy86;
+ if (yych <= ')') goto yy1250;
+ if (yych <= '0') goto yy86;
+ goto yy1299;
+ }
+ } else {
+ if (yych <= '8') {
+ if (yych == '3') goto yy1300;
+ if (yych <= '7') goto yy86;
+ goto yy1301;
+ } else {
+ if (yych == ';') goto yy1250;
+ if (yych <= '~') goto yy86;
+ }
+ }
+yy1250:
+#line 447 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicLoad, I64AtomicLoad); }
+#line 7005 "src/prebuilt/wast-lexer-gen.cc"
+yy1251:
yych = *++cursor_;
- if (yych == '2') goto yy1245;
+ switch (yych) {
+ case 'a': goto yy1302;
+ case 'c': goto yy1303;
+ case 'o': goto yy1304;
+ case 's': goto yy1305;
+ case 'x': goto yy1306;
+ default: goto yy87;
+ }
+yy1252:
+ yych = *++cursor_;
+ if (yych == '6') goto yy1307;
goto yy87;
-yy1214:
+yy1253:
yych = *++cursor_;
- if (yych == '2') goto yy1247;
+ if (yych == '2') goto yy1308;
goto yy87;
-yy1215:
+yy1254:
yych = *++cursor_;
- if (yych == '/') goto yy1249;
+ if (yych == '_') goto yy1309;
goto yy87;
-yy1216:
+yy1255:
+ yych = *++cursor_;
+ if (yych == 'e') goto yy1310;
+ goto yy87;
+yy1256:
+ yych = *++cursor_;
+ if (yych == '2') goto yy1312;
+ goto yy87;
+yy1257:
+ yych = *++cursor_;
+ if (yych == '2') goto yy1314;
+ goto yy87;
+yy1258:
+ yych = *++cursor_;
+ if (yych == '/') goto yy1316;
+ goto yy87;
+yy1259:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 412 "src/wast-lexer.cc"
{ RETURN_OPCODE(Convert, I64TruncSF32); }
-#line 6802 "src/prebuilt/wast-lexer-gen.cc"
-yy1218:
+#line 7051 "src/prebuilt/wast-lexer-gen.cc"
+yy1261:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 414 "src/wast-lexer.cc"
{ RETURN_OPCODE(Convert, I64TruncSF64); }
-#line 6810 "src/prebuilt/wast-lexer-gen.cc"
-yy1220:
+#line 7059 "src/prebuilt/wast-lexer-gen.cc"
+yy1263:
yych = *++cursor_;
- if (yych == '/') goto yy1250;
+ if (yych == '/') goto yy1317;
goto yy87;
-yy1221:
+yy1264:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 416 "src/wast-lexer.cc"
{ RETURN_OPCODE(Convert, I64TruncUF32); }
-#line 6822 "src/prebuilt/wast-lexer-gen.cc"
-yy1223:
+#line 7071 "src/prebuilt/wast-lexer-gen.cc"
+yy1266:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 418 "src/wast-lexer.cc"
{ RETURN_OPCODE(Convert, I64TruncUF64); }
-#line 6830 "src/prebuilt/wast-lexer-gen.cc"
-yy1225:
+#line 7079 "src/prebuilt/wast-lexer-gen.cc"
+yy1268:
yych = *++cursor_;
- if (yych == '/') goto yy1251;
+ if (yych == '/') goto yy1318;
goto yy87;
-yy1226:
+yy1269:
yych = *++cursor_;
- if (yych == 'n') goto yy1252;
+ if (yych == 'n') goto yy1319;
goto yy87;
-yy1227:
+yy1270:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
-#line 466 "src/wast-lexer.cc"
+#line 531 "src/wast-lexer.cc"
{ RETURN(AssertMalformed); }
-#line 6846 "src/prebuilt/wast-lexer-gen.cc"
-yy1229:
+#line 7095 "src/prebuilt/wast-lexer-gen.cc"
+yy1272:
yych = *++cursor_;
- if (yych == 'i') goto yy1254;
+ if (yych == 'i') goto yy1321;
goto yy87;
-yy1230:
+yy1273:
yych = *++cursor_;
- if (yych == 'n') goto yy1255;
+ if (yych == 'n') goto yy1322;
goto yy87;
-yy1231:
+yy1274:
yych = *++cursor_;
- if (yych == 'e') goto yy1256;
+ if (yych == 'e') goto yy1323;
goto yy87;
-yy1232:
+yy1275:
yych = *++cursor_;
- if (yych == '2') goto yy1258;
+ if (yych == '2') goto yy1325;
goto yy87;
-yy1233:
+yy1276:
yych = *++cursor_;
- if (yych == '4') goto yy1260;
+ if (yych == '4') goto yy1327;
goto yy87;
-yy1234:
+yy1277:
yych = *++cursor_;
- if (yych == '2') goto yy1262;
+ if (yych == '2') goto yy1329;
goto yy87;
-yy1235:
+yy1278:
yych = *++cursor_;
- if (yych == '4') goto yy1264;
+ if (yych == '4') goto yy1331;
goto yy87;
-yy1236:
+yy1279:
yych = *++cursor_;
- if (yych == 'i') goto yy1266;
+ if (yych == 'i') goto yy1333;
goto yy87;
-yy1237:
+yy1280:
yych = *++cursor_;
- if (yych == '2') goto yy1267;
+ if (yych == '2') goto yy1334;
goto yy87;
-yy1238:
+yy1281:
yych = *++cursor_;
- if (yych == '4') goto yy1269;
+ if (yych == '4') goto yy1336;
goto yy87;
-yy1239:
+yy1282:
yych = *++cursor_;
- if (yych == '2') goto yy1271;
+ if (yych == '2') goto yy1338;
goto yy87;
-yy1240:
+yy1283:
yych = *++cursor_;
- if (yych == '4') goto yy1273;
+ if (yych == '4') goto yy1340;
goto yy87;
-yy1241:
+yy1284:
+ yych = *++cursor_;
+ if (yych == 'i') goto yy1342;
+ goto yy87;
+yy1285:
yych = *++cursor_;
- if (yych == 'i') goto yy1275;
+ if (yych == '6') goto yy1343;
goto yy87;
-yy1242:
+yy1286:
yych = *++cursor_;
- if (yych == 'f') goto yy1276;
+ if (yych == '_') goto yy1344;
goto yy87;
-yy1243:
+yy1287:
yych = *++cursor_;
- if (yych == 'f') goto yy1277;
+ if (yych == 'd') goto yy1345;
+ if (yych == 'n') goto yy1346;
goto yy87;
-yy1244:
+yy1288:
+ yych = *++cursor_;
+ if (yych == 'm') goto yy1347;
+ goto yy87;
+yy1289:
+ yych = *++cursor_;
+ if (yych == 'r') goto yy1348;
+ goto yy87;
+yy1290:
+ yych = *++cursor_;
+ if (yych == 'u') goto yy1350;
+ goto yy87;
+yy1291:
+ yych = *++cursor_;
+ if (yych == 'c') goto yy1351;
+ if (yych == 'o') goto yy1352;
+ goto yy87;
+yy1292:
+ yych = *++cursor_;
+ if (yych == '_') goto yy1353;
+ goto yy87;
+yy1293:
+ yych = *++cursor_;
+ if (yych == 'u') goto yy1354;
+ goto yy87;
+yy1294:
+ ++cursor_;
+ if ((yych = *cursor_) <= '0') {
+ if (yych <= '"') {
+ if (yych == '!') goto yy86;
+ } else {
+ if (yych <= '\'') goto yy86;
+ if (yych >= '*') goto yy86;
+ }
+ } else {
+ if (yych <= '8') {
+ if (yych <= '1') goto yy1355;
+ if (yych <= '7') goto yy86;
+ goto yy1356;
+ } else {
+ if (yych == ';') goto yy1295;
+ if (yych <= '~') goto yy86;
+ }
+ }
+yy1295:
+#line 453 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicStore, I32AtomicStore); }
+#line 7208 "src/prebuilt/wast-lexer-gen.cc"
+yy1296:
+ yych = *++cursor_;
+ if (yych == 'f') goto yy1358;
+ goto yy87;
+yy1297:
+ yych = *++cursor_;
+ if (yych == 'f') goto yy1359;
+ goto yy87;
+yy1298:
+ yych = *++cursor_;
+ if (yych == 'f') goto yy1360;
+ goto yy87;
+yy1299:
+ yych = *++cursor_;
+ if (yych == '6') goto yy1361;
+ goto yy87;
+yy1300:
yych = *++cursor_;
- if (yych == 'f') goto yy1278;
+ if (yych == '2') goto yy1362;
goto yy87;
-yy1245:
+yy1301:
+ yych = *++cursor_;
+ if (yych == '_') goto yy1363;
+ goto yy87;
+yy1302:
+ yych = *++cursor_;
+ if (yych == 'd') goto yy1364;
+ if (yych == 'n') goto yy1365;
+ goto yy87;
+yy1303:
+ yych = *++cursor_;
+ if (yych == 'm') goto yy1366;
+ goto yy87;
+yy1304:
+ yych = *++cursor_;
+ if (yych == 'r') goto yy1367;
+ goto yy87;
+yy1305:
+ yych = *++cursor_;
+ if (yych == 'u') goto yy1369;
+ goto yy87;
+yy1306:
+ yych = *++cursor_;
+ if (yych == 'c') goto yy1370;
+ if (yych == 'o') goto yy1371;
+ goto yy87;
+yy1307:
+ yych = *++cursor_;
+ if (yych == '_') goto yy1372;
+ goto yy87;
+yy1308:
+ yych = *++cursor_;
+ if (yych == '_') goto yy1373;
+ goto yy87;
+yy1309:
+ yych = *++cursor_;
+ if (yych == 'u') goto yy1374;
+ goto yy87;
+yy1310:
+ ++cursor_;
+ if ((yych = *cursor_) <= '1') {
+ if (yych <= '"') {
+ if (yych == '!') goto yy86;
+ } else {
+ if (yych <= '\'') goto yy86;
+ if (yych <= ')') goto yy1311;
+ if (yych <= '0') goto yy86;
+ goto yy1375;
+ }
+ } else {
+ if (yych <= '8') {
+ if (yych == '3') goto yy1376;
+ if (yych <= '7') goto yy86;
+ goto yy1377;
+ } else {
+ if (yych == ';') goto yy1311;
+ if (yych <= '~') goto yy86;
+ }
+ }
+yy1311:
+#line 454 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicStore, I64AtomicStore); }
+#line 7291 "src/prebuilt/wast-lexer-gen.cc"
+yy1312:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 408 "src/wast-lexer.cc"
{ RETURN_OPCODE(Convert, I64ExtendSI32); }
-#line 6918 "src/prebuilt/wast-lexer-gen.cc"
-yy1247:
+#line 7299 "src/prebuilt/wast-lexer-gen.cc"
+yy1314:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 409 "src/wast-lexer.cc"
{ RETURN_OPCODE(Convert, I64ExtendUI32); }
-#line 6926 "src/prebuilt/wast-lexer-gen.cc"
-yy1249:
+#line 7307 "src/prebuilt/wast-lexer-gen.cc"
+yy1316:
yych = *++cursor_;
- if (yych == 'f') goto yy1279;
+ if (yych == 'f') goto yy1379;
goto yy87;
-yy1250:
+yy1317:
yych = *++cursor_;
- if (yych == 'f') goto yy1280;
+ if (yych == 'f') goto yy1380;
goto yy87;
-yy1251:
+yy1318:
yych = *++cursor_;
- if (yych == 'f') goto yy1281;
+ if (yych == 'f') goto yy1381;
goto yy87;
-yy1252:
+yy1319:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
-#line 473 "src/wast-lexer.cc"
+#line 538 "src/wast-lexer.cc"
{ RETURN(AssertExhaustion); }
-#line 6946 "src/prebuilt/wast-lexer-gen.cc"
-yy1254:
+#line 7327 "src/prebuilt/wast-lexer-gen.cc"
+yy1321:
yych = *++cursor_;
- if (yych == 't') goto yy1282;
+ if (yych == 't') goto yy1382;
goto yy87;
-yy1255:
+yy1322:
yych = *++cursor_;
- if (yych == 'o') goto yy1283;
+ if (yych == 'o') goto yy1383;
goto yy87;
-yy1256:
+yy1323:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
-#line 468 "src/wast-lexer.cc"
+#line 533 "src/wast-lexer.cc"
{ RETURN(AssertUnlinkable); }
-#line 6962 "src/prebuilt/wast-lexer-gen.cc"
-yy1258:
+#line 7343 "src/prebuilt/wast-lexer-gen.cc"
+yy1325:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 427 "src/wast-lexer.cc"
{ RETURN_OPCODE(Convert, F32ConvertSI32); }
-#line 6970 "src/prebuilt/wast-lexer-gen.cc"
-yy1260:
+#line 7351 "src/prebuilt/wast-lexer-gen.cc"
+yy1327:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 429 "src/wast-lexer.cc"
{ RETURN_OPCODE(Convert, F32ConvertSI64); }
-#line 6978 "src/prebuilt/wast-lexer-gen.cc"
-yy1262:
+#line 7359 "src/prebuilt/wast-lexer-gen.cc"
+yy1329:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 431 "src/wast-lexer.cc"
{ RETURN_OPCODE(Convert, F32ConvertUI32); }
-#line 6986 "src/prebuilt/wast-lexer-gen.cc"
-yy1264:
+#line 7367 "src/prebuilt/wast-lexer-gen.cc"
+yy1331:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 433 "src/wast-lexer.cc"
{ RETURN_OPCODE(Convert, F32ConvertUI64); }
-#line 6994 "src/prebuilt/wast-lexer-gen.cc"
-yy1266:
+#line 7375 "src/prebuilt/wast-lexer-gen.cc"
+yy1333:
yych = *++cursor_;
- if (yych == '3') goto yy1284;
+ if (yych == '3') goto yy1384;
goto yy87;
-yy1267:
+yy1334:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 428 "src/wast-lexer.cc"
{ RETURN_OPCODE(Convert, F64ConvertSI32); }
-#line 7006 "src/prebuilt/wast-lexer-gen.cc"
-yy1269:
+#line 7387 "src/prebuilt/wast-lexer-gen.cc"
+yy1336:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 430 "src/wast-lexer.cc"
{ RETURN_OPCODE(Convert, F64ConvertSI64); }
-#line 7014 "src/prebuilt/wast-lexer-gen.cc"
-yy1271:
+#line 7395 "src/prebuilt/wast-lexer-gen.cc"
+yy1338:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 432 "src/wast-lexer.cc"
{ RETURN_OPCODE(Convert, F64ConvertUI32); }
-#line 7022 "src/prebuilt/wast-lexer-gen.cc"
-yy1273:
+#line 7403 "src/prebuilt/wast-lexer-gen.cc"
+yy1340:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 434 "src/wast-lexer.cc"
{ RETURN_OPCODE(Convert, F64ConvertUI64); }
-#line 7030 "src/prebuilt/wast-lexer-gen.cc"
-yy1275:
+#line 7411 "src/prebuilt/wast-lexer-gen.cc"
+yy1342:
yych = *++cursor_;
- if (yych == '6') goto yy1285;
+ if (yych == '6') goto yy1385;
goto yy87;
-yy1276:
+yy1343:
yych = *++cursor_;
- if (yych == '3') goto yy1286;
+ if (yych == '_') goto yy1386;
goto yy87;
-yy1277:
+yy1344:
yych = *++cursor_;
- if (yych == '3') goto yy1287;
- if (yych == '6') goto yy1288;
+ if (yych == 'u') goto yy1387;
goto yy87;
-yy1278:
+yy1345:
yych = *++cursor_;
- if (yych == '3') goto yy1289;
- if (yych == '6') goto yy1290;
+ if (yych == 'd') goto yy1389;
goto yy87;
-yy1279:
+yy1346:
yych = *++cursor_;
- if (yych == '6') goto yy1291;
+ if (yych == 'd') goto yy1391;
goto yy87;
-yy1280:
+yy1347:
yych = *++cursor_;
- if (yych == '3') goto yy1292;
- if (yych == '6') goto yy1293;
+ if (yych == 'p') goto yy1393;
goto yy87;
-yy1281:
+yy1348:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 481 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I32AtomicRmwOr); }
+#line 7443 "src/prebuilt/wast-lexer-gen.cc"
+yy1350:
yych = *++cursor_;
- if (yych == '3') goto yy1294;
- if (yych == '6') goto yy1295;
+ if (yych == 'b') goto yy1394;
goto yy87;
-yy1282:
+yy1351:
yych = *++cursor_;
- if (yych == 'h') goto yy1296;
+ if (yych == 'h') goto yy1396;
goto yy87;
-yy1283:
+yy1352:
yych = *++cursor_;
- if (yych == 'n') goto yy1297;
+ if (yych == 'r') goto yy1397;
goto yy87;
-yy1284:
+yy1353:
yych = *++cursor_;
- if (yych == '2') goto yy1298;
+ if (yych == 'u') goto yy1399;
goto yy87;
-yy1285:
+yy1354:
yych = *++cursor_;
- if (yych == '4') goto yy1300;
+ if (yych == '.') goto yy1400;
goto yy87;
-yy1286:
+yy1355:
yych = *++cursor_;
- if (yych == '2') goto yy1302;
+ if (yych == '6') goto yy1401;
goto yy87;
-yy1287:
+yy1356:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 455 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicStore, I32AtomicStore8); }
+#line 7475 "src/prebuilt/wast-lexer-gen.cc"
+yy1358:
yych = *++cursor_;
- if (yych == '2') goto yy1304;
+ if (yych == '3') goto yy1403;
goto yy87;
-yy1288:
+yy1359:
yych = *++cursor_;
- if (yych == '4') goto yy1306;
+ if (yych == '3') goto yy1404;
+ if (yych == '6') goto yy1405;
goto yy87;
-yy1289:
+yy1360:
yych = *++cursor_;
- if (yych == '2') goto yy1308;
+ if (yych == '3') goto yy1406;
+ if (yych == '6') goto yy1407;
goto yy87;
-yy1290:
+yy1361:
yych = *++cursor_;
- if (yych == '4') goto yy1310;
+ if (yych == '_') goto yy1408;
goto yy87;
-yy1291:
+yy1362:
yych = *++cursor_;
- if (yych == '4') goto yy1312;
+ if (yych == '_') goto yy1409;
goto yy87;
-yy1292:
+yy1363:
yych = *++cursor_;
- if (yych == '2') goto yy1314;
+ if (yych == 'u') goto yy1410;
goto yy87;
-yy1293:
+yy1364:
yych = *++cursor_;
- if (yych == '4') goto yy1316;
+ if (yych == 'd') goto yy1412;
goto yy87;
-yy1294:
+yy1365:
yych = *++cursor_;
- if (yych == '2') goto yy1318;
+ if (yych == 'd') goto yy1414;
goto yy87;
-yy1295:
+yy1366:
yych = *++cursor_;
- if (yych == '4') goto yy1320;
+ if (yych == 'p') goto yy1416;
goto yy87;
-yy1296:
+yy1367:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 482 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I64AtomicRmwOr); }
+#line 7521 "src/prebuilt/wast-lexer-gen.cc"
+yy1369:
yych = *++cursor_;
- if (yych == 'm') goto yy1322;
+ if (yych == 'b') goto yy1417;
goto yy87;
-yy1297:
+yy1370:
yych = *++cursor_;
- if (yych == 'i') goto yy1323;
+ if (yych == 'h') goto yy1419;
goto yy87;
-yy1298:
+yy1371:
+ yych = *++cursor_;
+ if (yych == 'r') goto yy1420;
+ goto yy87;
+yy1372:
+ yych = *++cursor_;
+ if (yych == 'u') goto yy1422;
+ goto yy87;
+yy1373:
+ yych = *++cursor_;
+ if (yych == 'u') goto yy1423;
+ goto yy87;
+yy1374:
+ yych = *++cursor_;
+ if (yych == '.') goto yy1424;
+ goto yy87;
+yy1375:
+ yych = *++cursor_;
+ if (yych == '6') goto yy1425;
+ goto yy87;
+yy1376:
+ yych = *++cursor_;
+ if (yych == '2') goto yy1427;
+ goto yy87;
+yy1377:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 457 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicStore, I64AtomicStore8); }
+#line 7561 "src/prebuilt/wast-lexer-gen.cc"
+yy1379:
+ yych = *++cursor_;
+ if (yych == '6') goto yy1429;
+ goto yy87;
+yy1380:
+ yych = *++cursor_;
+ if (yych == '3') goto yy1430;
+ if (yych == '6') goto yy1431;
+ goto yy87;
+yy1381:
+ yych = *++cursor_;
+ if (yych == '3') goto yy1432;
+ if (yych == '6') goto yy1433;
+ goto yy87;
+yy1382:
+ yych = *++cursor_;
+ if (yych == 'h') goto yy1434;
+ goto yy87;
+yy1383:
+ yych = *++cursor_;
+ if (yych == 'n') goto yy1435;
+ goto yy87;
+yy1384:
+ yych = *++cursor_;
+ if (yych == '2') goto yy1436;
+ goto yy87;
+yy1385:
+ yych = *++cursor_;
+ if (yych == '4') goto yy1438;
+ goto yy87;
+yy1386:
+ yych = *++cursor_;
+ if (yych == 'u') goto yy1440;
+ goto yy87;
+yy1387:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 448 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicLoad, I32AtomicLoad8U); }
+#line 7603 "src/prebuilt/wast-lexer-gen.cc"
+yy1389:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 460 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I32AtomicRmwAdd); }
+#line 7611 "src/prebuilt/wast-lexer-gen.cc"
+yy1391:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 474 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I32AtomicRmwAnd); }
+#line 7619 "src/prebuilt/wast-lexer-gen.cc"
+yy1393:
+ yych = *++cursor_;
+ if (yych == 'x') goto yy1442;
+ goto yy87;
+yy1394:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 467 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I32AtomicRmwSub); }
+#line 7631 "src/prebuilt/wast-lexer-gen.cc"
+yy1396:
+ yych = *++cursor_;
+ if (yych == 'g') goto yy1443;
+ goto yy87;
+yy1397:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 488 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I32AtomicRmwXor); }
+#line 7643 "src/prebuilt/wast-lexer-gen.cc"
+yy1399:
+ yych = *++cursor_;
+ if (yych == '.') goto yy1445;
+ goto yy87;
+yy1400:
+ yych = *++cursor_;
+ switch (yych) {
+ case 'a': goto yy1446;
+ case 'c': goto yy1447;
+ case 'o': goto yy1448;
+ case 's': goto yy1449;
+ case 'x': goto yy1450;
+ default: goto yy87;
+ }
+yy1401:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 456 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicStore, I32AtomicStore16); }
+#line 7665 "src/prebuilt/wast-lexer-gen.cc"
+yy1403:
+ yych = *++cursor_;
+ if (yych == '2') goto yy1451;
+ goto yy87;
+yy1404:
+ yych = *++cursor_;
+ if (yych == '2') goto yy1453;
+ goto yy87;
+yy1405:
+ yych = *++cursor_;
+ if (yych == '4') goto yy1455;
+ goto yy87;
+yy1406:
+ yych = *++cursor_;
+ if (yych == '2') goto yy1457;
+ goto yy87;
+yy1407:
+ yych = *++cursor_;
+ if (yych == '4') goto yy1459;
+ goto yy87;
+yy1408:
+ yych = *++cursor_;
+ if (yych == 'u') goto yy1461;
+ goto yy87;
+yy1409:
+ yych = *++cursor_;
+ if (yych == 'u') goto yy1463;
+ goto yy87;
+yy1410:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 450 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicLoad, I64AtomicLoad8U); }
+#line 7701 "src/prebuilt/wast-lexer-gen.cc"
+yy1412:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 461 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I64AtomicRmwAdd); }
+#line 7709 "src/prebuilt/wast-lexer-gen.cc"
+yy1414:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 475 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I64AtomicRmwAnd); }
+#line 7717 "src/prebuilt/wast-lexer-gen.cc"
+yy1416:
+ yych = *++cursor_;
+ if (yych == 'x') goto yy1465;
+ goto yy87;
+yy1417:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 468 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I64AtomicRmwSub); }
+#line 7729 "src/prebuilt/wast-lexer-gen.cc"
+yy1419:
+ yych = *++cursor_;
+ if (yych == 'g') goto yy1466;
+ goto yy87;
+yy1420:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 489 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I64AtomicRmwXor); }
+#line 7741 "src/prebuilt/wast-lexer-gen.cc"
+yy1422:
+ yych = *++cursor_;
+ if (yych == '.') goto yy1468;
+ goto yy87;
+yy1423:
+ yych = *++cursor_;
+ if (yych == '.') goto yy1469;
+ goto yy87;
+yy1424:
+ yych = *++cursor_;
+ switch (yych) {
+ case 'a': goto yy1470;
+ case 'c': goto yy1471;
+ case 'o': goto yy1472;
+ case 's': goto yy1473;
+ case 'x': goto yy1474;
+ default: goto yy87;
+ }
+yy1425:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 458 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicStore, I64AtomicStore16); }
+#line 7767 "src/prebuilt/wast-lexer-gen.cc"
+yy1427:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 459 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicStore, I64AtomicStore32); }
+#line 7775 "src/prebuilt/wast-lexer-gen.cc"
+yy1429:
+ yych = *++cursor_;
+ if (yych == '4') goto yy1475;
+ goto yy87;
+yy1430:
+ yych = *++cursor_;
+ if (yych == '2') goto yy1477;
+ goto yy87;
+yy1431:
+ yych = *++cursor_;
+ if (yych == '4') goto yy1479;
+ goto yy87;
+yy1432:
+ yych = *++cursor_;
+ if (yych == '2') goto yy1481;
+ goto yy87;
+yy1433:
+ yych = *++cursor_;
+ if (yych == '4') goto yy1483;
+ goto yy87;
+yy1434:
+ yych = *++cursor_;
+ if (yych == 'm') goto yy1485;
+ goto yy87;
+yy1435:
+ yych = *++cursor_;
+ if (yych == 'i') goto yy1486;
+ goto yy87;
+yy1436:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 437 "src/wast-lexer.cc"
{ RETURN_OPCODE(Convert, F32ReinterpretI32); }
-#line 7134 "src/prebuilt/wast-lexer-gen.cc"
-yy1300:
+#line 7811 "src/prebuilt/wast-lexer-gen.cc"
+yy1438:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 439 "src/wast-lexer.cc"
{ RETURN_OPCODE(Convert, F64ReinterpretI64); }
-#line 7142 "src/prebuilt/wast-lexer-gen.cc"
-yy1302:
+#line 7819 "src/prebuilt/wast-lexer-gen.cc"
+yy1440:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 449 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicLoad, I32AtomicLoad16U); }
+#line 7827 "src/prebuilt/wast-lexer-gen.cc"
+yy1442:
+ yych = *++cursor_;
+ if (yych == 'c') goto yy1487;
+ goto yy87;
+yy1443:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 495 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I32AtomicRmwXchg); }
+#line 7839 "src/prebuilt/wast-lexer-gen.cc"
+yy1445:
+ yych = *++cursor_;
+ switch (yych) {
+ case 'a': goto yy1488;
+ case 'c': goto yy1489;
+ case 'o': goto yy1490;
+ case 's': goto yy1491;
+ case 'x': goto yy1492;
+ default: goto yy87;
+ }
+yy1446:
+ yych = *++cursor_;
+ if (yych == 'd') goto yy1493;
+ if (yych == 'n') goto yy1494;
+ goto yy87;
+yy1447:
+ yych = *++cursor_;
+ if (yych == 'm') goto yy1495;
+ goto yy87;
+yy1448:
+ yych = *++cursor_;
+ if (yych == 'r') goto yy1496;
+ goto yy87;
+yy1449:
+ yych = *++cursor_;
+ if (yych == 'u') goto yy1498;
+ goto yy87;
+yy1450:
+ yych = *++cursor_;
+ if (yych == 'c') goto yy1499;
+ if (yych == 'o') goto yy1500;
+ goto yy87;
+yy1451:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 438 "src/wast-lexer.cc"
{ RETURN_OPCODE(Convert, I32ReinterpretF32); }
-#line 7150 "src/prebuilt/wast-lexer-gen.cc"
-yy1304:
+#line 7879 "src/prebuilt/wast-lexer-gen.cc"
+yy1453:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 419 "src/wast-lexer.cc"
{ RETURN_OPCODE(Convert, I32TruncSSatF32); }
-#line 7158 "src/prebuilt/wast-lexer-gen.cc"
-yy1306:
+#line 7887 "src/prebuilt/wast-lexer-gen.cc"
+yy1455:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 421 "src/wast-lexer.cc"
{ RETURN_OPCODE(Convert, I32TruncSSatF64); }
-#line 7166 "src/prebuilt/wast-lexer-gen.cc"
-yy1308:
+#line 7895 "src/prebuilt/wast-lexer-gen.cc"
+yy1457:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 423 "src/wast-lexer.cc"
{ RETURN_OPCODE(Convert, I32TruncUSatF32); }
-#line 7174 "src/prebuilt/wast-lexer-gen.cc"
-yy1310:
+#line 7903 "src/prebuilt/wast-lexer-gen.cc"
+yy1459:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 425 "src/wast-lexer.cc"
{ RETURN_OPCODE(Convert, I32TruncUSatF64); }
-#line 7182 "src/prebuilt/wast-lexer-gen.cc"
-yy1312:
+#line 7911 "src/prebuilt/wast-lexer-gen.cc"
+yy1461:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 451 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicLoad, I64AtomicLoad16U); }
+#line 7919 "src/prebuilt/wast-lexer-gen.cc"
+yy1463:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 452 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicLoad, I64AtomicLoad32U); }
+#line 7927 "src/prebuilt/wast-lexer-gen.cc"
+yy1465:
+ yych = *++cursor_;
+ if (yych == 'c') goto yy1501;
+ goto yy87;
+yy1466:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 496 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I64AtomicRmwXchg); }
+#line 7939 "src/prebuilt/wast-lexer-gen.cc"
+yy1468:
+ yych = *++cursor_;
+ switch (yych) {
+ case 'a': goto yy1502;
+ case 'c': goto yy1503;
+ case 'o': goto yy1504;
+ case 's': goto yy1505;
+ case 'x': goto yy1506;
+ default: goto yy87;
+ }
+yy1469:
+ yych = *++cursor_;
+ switch (yych) {
+ case 'a': goto yy1507;
+ case 'c': goto yy1508;
+ case 'o': goto yy1509;
+ case 's': goto yy1510;
+ case 'x': goto yy1511;
+ default: goto yy87;
+ }
+yy1470:
+ yych = *++cursor_;
+ if (yych == 'd') goto yy1512;
+ if (yych == 'n') goto yy1513;
+ goto yy87;
+yy1471:
+ yych = *++cursor_;
+ if (yych == 'm') goto yy1514;
+ goto yy87;
+yy1472:
+ yych = *++cursor_;
+ if (yych == 'r') goto yy1515;
+ goto yy87;
+yy1473:
+ yych = *++cursor_;
+ if (yych == 'u') goto yy1517;
+ goto yy87;
+yy1474:
+ yych = *++cursor_;
+ if (yych == 'c') goto yy1518;
+ if (yych == 'o') goto yy1519;
+ goto yy87;
+yy1475:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 440 "src/wast-lexer.cc"
{ RETURN_OPCODE(Convert, I64ReinterpretF64); }
-#line 7190 "src/prebuilt/wast-lexer-gen.cc"
-yy1314:
+#line 7989 "src/prebuilt/wast-lexer-gen.cc"
+yy1477:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 420 "src/wast-lexer.cc"
{ RETURN_OPCODE(Convert, I64TruncSSatF32); }
-#line 7198 "src/prebuilt/wast-lexer-gen.cc"
-yy1316:
+#line 7997 "src/prebuilt/wast-lexer-gen.cc"
+yy1479:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 422 "src/wast-lexer.cc"
{ RETURN_OPCODE(Convert, I64TruncSSatF64); }
-#line 7206 "src/prebuilt/wast-lexer-gen.cc"
-yy1318:
+#line 8005 "src/prebuilt/wast-lexer-gen.cc"
+yy1481:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 424 "src/wast-lexer.cc"
{ RETURN_OPCODE(Convert, I64TruncUSatF32); }
-#line 7214 "src/prebuilt/wast-lexer-gen.cc"
-yy1320:
+#line 8013 "src/prebuilt/wast-lexer-gen.cc"
+yy1483:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 426 "src/wast-lexer.cc"
{ RETURN_OPCODE(Convert, I64TruncUSatF64); }
-#line 7222 "src/prebuilt/wast-lexer-gen.cc"
-yy1322:
+#line 8021 "src/prebuilt/wast-lexer-gen.cc"
+yy1485:
yych = *++cursor_;
- if (yych == 'e') goto yy1324;
+ if (yych == 'e') goto yy1520;
goto yy87;
-yy1323:
+yy1486:
yych = *++cursor_;
- if (yych == 'c') goto yy1325;
+ if (yych == 'c') goto yy1521;
goto yy87;
-yy1324:
+yy1487:
yych = *++cursor_;
- if (yych == 't') goto yy1326;
+ if (yych == 'h') goto yy1522;
goto yy87;
-yy1325:
+yy1488:
yych = *++cursor_;
- if (yych == 'a') goto yy1327;
+ if (yych == 'd') goto yy1523;
+ if (yych == 'n') goto yy1524;
goto yy87;
-yy1326:
+yy1489:
yych = *++cursor_;
- if (yych == 'i') goto yy1328;
+ if (yych == 'm') goto yy1525;
goto yy87;
-yy1327:
+yy1490:
yych = *++cursor_;
- if (yych == 'l') goto yy1329;
+ if (yych == 'r') goto yy1526;
goto yy87;
-yy1328:
+yy1491:
yych = *++cursor_;
- if (yych == 'c') goto yy1330;
+ if (yych == 'u') goto yy1528;
goto yy87;
-yy1329:
+yy1492:
yych = *++cursor_;
- if (yych == '_') goto yy1331;
+ if (yych == 'c') goto yy1529;
+ if (yych == 'o') goto yy1530;
goto yy87;
-yy1330:
+yy1493:
yych = *++cursor_;
- if (yych == '_') goto yy1332;
+ if (yych == 'd') goto yy1531;
goto yy87;
-yy1331:
+yy1494:
yych = *++cursor_;
- if (yych == 'n') goto yy1333;
+ if (yych == 'd') goto yy1533;
goto yy87;
-yy1332:
+yy1495:
yych = *++cursor_;
- if (yych == 'n') goto yy1334;
+ if (yych == 'p') goto yy1535;
goto yy87;
-yy1333:
+yy1496:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 483 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I32AtomicRmw8UOr); }
+#line 8075 "src/prebuilt/wast-lexer-gen.cc"
+yy1498:
yych = *++cursor_;
- if (yych == 'a') goto yy1335;
+ if (yych == 'b') goto yy1536;
goto yy87;
-yy1334:
+yy1499:
yych = *++cursor_;
- if (yych == 'a') goto yy1336;
+ if (yych == 'h') goto yy1538;
goto yy87;
-yy1335:
+yy1500:
yych = *++cursor_;
- if (yych == 'n') goto yy1337;
+ if (yych == 'r') goto yy1539;
goto yy87;
-yy1336:
+yy1501:
+ yych = *++cursor_;
+ if (yych == 'h') goto yy1541;
+ goto yy87;
+yy1502:
+ yych = *++cursor_;
+ if (yych == 'd') goto yy1542;
+ if (yych == 'n') goto yy1543;
+ goto yy87;
+yy1503:
yych = *++cursor_;
- if (yych == 'n') goto yy1339;
+ if (yych == 'm') goto yy1544;
goto yy87;
-yy1337:
+yy1504:
+ yych = *++cursor_;
+ if (yych == 'r') goto yy1545;
+ goto yy87;
+yy1505:
+ yych = *++cursor_;
+ if (yych == 'u') goto yy1547;
+ goto yy87;
+yy1506:
+ yych = *++cursor_;
+ if (yych == 'c') goto yy1548;
+ if (yych == 'o') goto yy1549;
+ goto yy87;
+yy1507:
+ yych = *++cursor_;
+ if (yych == 'd') goto yy1550;
+ if (yych == 'n') goto yy1551;
+ goto yy87;
+yy1508:
+ yych = *++cursor_;
+ if (yych == 'm') goto yy1552;
+ goto yy87;
+yy1509:
+ yych = *++cursor_;
+ if (yych == 'r') goto yy1553;
+ goto yy87;
+yy1510:
+ yych = *++cursor_;
+ if (yych == 'u') goto yy1555;
+ goto yy87;
+yy1511:
+ yych = *++cursor_;
+ if (yych == 'c') goto yy1556;
+ if (yych == 'o') goto yy1557;
+ goto yy87;
+yy1512:
+ yych = *++cursor_;
+ if (yych == 'd') goto yy1558;
+ goto yy87;
+yy1513:
+ yych = *++cursor_;
+ if (yych == 'd') goto yy1560;
+ goto yy87;
+yy1514:
+ yych = *++cursor_;
+ if (yych == 'p') goto yy1562;
+ goto yy87;
+yy1515:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 485 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I64AtomicRmw8UOr); }
+#line 8155 "src/prebuilt/wast-lexer-gen.cc"
+yy1517:
+ yych = *++cursor_;
+ if (yych == 'b') goto yy1563;
+ goto yy87;
+yy1518:
+ yych = *++cursor_;
+ if (yych == 'h') goto yy1565;
+ goto yy87;
+yy1519:
+ yych = *++cursor_;
+ if (yych == 'r') goto yy1566;
+ goto yy87;
+yy1520:
+ yych = *++cursor_;
+ if (yych == 't') goto yy1568;
+ goto yy87;
+yy1521:
+ yych = *++cursor_;
+ if (yych == 'a') goto yy1569;
+ goto yy87;
+yy1522:
+ yych = *++cursor_;
+ if (yych == 'g') goto yy1570;
+ goto yy87;
+yy1523:
+ yych = *++cursor_;
+ if (yych == 'd') goto yy1572;
+ goto yy87;
+yy1524:
+ yych = *++cursor_;
+ if (yych == 'd') goto yy1574;
+ goto yy87;
+yy1525:
+ yych = *++cursor_;
+ if (yych == 'p') goto yy1576;
+ goto yy87;
+yy1526:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 484 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I32AtomicRmw16UOr); }
+#line 8199 "src/prebuilt/wast-lexer-gen.cc"
+yy1528:
+ yych = *++cursor_;
+ if (yych == 'b') goto yy1577;
+ goto yy87;
+yy1529:
+ yych = *++cursor_;
+ if (yych == 'h') goto yy1579;
+ goto yy87;
+yy1530:
+ yych = *++cursor_;
+ if (yych == 'r') goto yy1580;
+ goto yy87;
+yy1531:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 462 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I32AtomicRmw8UAdd); }
+#line 8219 "src/prebuilt/wast-lexer-gen.cc"
+yy1533:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 476 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I32AtomicRmw8UAnd); }
+#line 8227 "src/prebuilt/wast-lexer-gen.cc"
+yy1535:
+ yych = *++cursor_;
+ if (yych == 'x') goto yy1582;
+ goto yy87;
+yy1536:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 469 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I32AtomicRmw8USub); }
+#line 8239 "src/prebuilt/wast-lexer-gen.cc"
+yy1538:
+ yych = *++cursor_;
+ if (yych == 'g') goto yy1583;
+ goto yy87;
+yy1539:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 490 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I32AtomicRmw8UXor); }
+#line 8251 "src/prebuilt/wast-lexer-gen.cc"
+yy1541:
+ yych = *++cursor_;
+ if (yych == 'g') goto yy1585;
+ goto yy87;
+yy1542:
+ yych = *++cursor_;
+ if (yych == 'd') goto yy1587;
+ goto yy87;
+yy1543:
+ yych = *++cursor_;
+ if (yych == 'd') goto yy1589;
+ goto yy87;
+yy1544:
+ yych = *++cursor_;
+ if (yych == 'p') goto yy1591;
+ goto yy87;
+yy1545:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 486 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I64AtomicRmw16UOr); }
+#line 8275 "src/prebuilt/wast-lexer-gen.cc"
+yy1547:
+ yych = *++cursor_;
+ if (yych == 'b') goto yy1592;
+ goto yy87;
+yy1548:
+ yych = *++cursor_;
+ if (yych == 'h') goto yy1594;
+ goto yy87;
+yy1549:
+ yych = *++cursor_;
+ if (yych == 'r') goto yy1595;
+ goto yy87;
+yy1550:
+ yych = *++cursor_;
+ if (yych == 'd') goto yy1597;
+ goto yy87;
+yy1551:
+ yych = *++cursor_;
+ if (yych == 'd') goto yy1599;
+ goto yy87;
+yy1552:
+ yych = *++cursor_;
+ if (yych == 'p') goto yy1601;
+ goto yy87;
+yy1553:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 487 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I64AtomicRmw32UOr); }
+#line 8307 "src/prebuilt/wast-lexer-gen.cc"
+yy1555:
+ yych = *++cursor_;
+ if (yych == 'b') goto yy1602;
+ goto yy87;
+yy1556:
+ yych = *++cursor_;
+ if (yych == 'h') goto yy1604;
+ goto yy87;
+yy1557:
+ yych = *++cursor_;
+ if (yych == 'r') goto yy1605;
+ goto yy87;
+yy1558:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 464 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I64AtomicRmw8UAdd); }
+#line 8327 "src/prebuilt/wast-lexer-gen.cc"
+yy1560:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 478 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I64AtomicRmw8UAnd); }
+#line 8335 "src/prebuilt/wast-lexer-gen.cc"
+yy1562:
+ yych = *++cursor_;
+ if (yych == 'x') goto yy1607;
+ goto yy87;
+yy1563:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 471 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I64AtomicRmw8USub); }
+#line 8347 "src/prebuilt/wast-lexer-gen.cc"
+yy1565:
+ yych = *++cursor_;
+ if (yych == 'g') goto yy1608;
+ goto yy87;
+yy1566:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 492 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I64AtomicRmw8UXor); }
+#line 8359 "src/prebuilt/wast-lexer-gen.cc"
+yy1568:
+ yych = *++cursor_;
+ if (yych == 'i') goto yy1610;
+ goto yy87;
+yy1569:
+ yych = *++cursor_;
+ if (yych == 'l') goto yy1611;
+ goto yy87;
+yy1570:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 502 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmwCmpxchg, I32AtomicRmwCmpxchg); }
+#line 8375 "src/prebuilt/wast-lexer-gen.cc"
+yy1572:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 463 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I32AtomicRmw16UAdd); }
+#line 8383 "src/prebuilt/wast-lexer-gen.cc"
+yy1574:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 477 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I32AtomicRmw16UAnd); }
+#line 8391 "src/prebuilt/wast-lexer-gen.cc"
+yy1576:
+ yych = *++cursor_;
+ if (yych == 'x') goto yy1612;
+ goto yy87;
+yy1577:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
#line 470 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I32AtomicRmw16USub); }
+#line 8403 "src/prebuilt/wast-lexer-gen.cc"
+yy1579:
+ yych = *++cursor_;
+ if (yych == 'g') goto yy1613;
+ goto yy87;
+yy1580:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 491 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I32AtomicRmw16UXor); }
+#line 8415 "src/prebuilt/wast-lexer-gen.cc"
+yy1582:
+ yych = *++cursor_;
+ if (yych == 'c') goto yy1615;
+ goto yy87;
+yy1583:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 497 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I32AtomicRmw8UXchg); }
+#line 8427 "src/prebuilt/wast-lexer-gen.cc"
+yy1585:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 503 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmwCmpxchg, I64AtomicRmwCmpxchg); }
+#line 8435 "src/prebuilt/wast-lexer-gen.cc"
+yy1587:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 465 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I64AtomicRmw16UAdd); }
+#line 8443 "src/prebuilt/wast-lexer-gen.cc"
+yy1589:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 479 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I64AtomicRmw16UAnd); }
+#line 8451 "src/prebuilt/wast-lexer-gen.cc"
+yy1591:
+ yych = *++cursor_;
+ if (yych == 'x') goto yy1616;
+ goto yy87;
+yy1592:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 472 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I64AtomicRmw16USub); }
+#line 8463 "src/prebuilt/wast-lexer-gen.cc"
+yy1594:
+ yych = *++cursor_;
+ if (yych == 'g') goto yy1617;
+ goto yy87;
+yy1595:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 493 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I64AtomicRmw16UXor); }
+#line 8475 "src/prebuilt/wast-lexer-gen.cc"
+yy1597:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 466 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I64AtomicRmw32UAdd); }
+#line 8483 "src/prebuilt/wast-lexer-gen.cc"
+yy1599:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 480 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I64AtomicRmw32UAnd); }
+#line 8491 "src/prebuilt/wast-lexer-gen.cc"
+yy1601:
+ yych = *++cursor_;
+ if (yych == 'x') goto yy1619;
+ goto yy87;
+yy1602:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 473 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I64AtomicRmw32USub); }
+#line 8503 "src/prebuilt/wast-lexer-gen.cc"
+yy1604:
+ yych = *++cursor_;
+ if (yych == 'g') goto yy1620;
+ goto yy87;
+yy1605:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 494 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I64AtomicRmw32UXor); }
+#line 8515 "src/prebuilt/wast-lexer-gen.cc"
+yy1607:
+ yych = *++cursor_;
+ if (yych == 'c') goto yy1622;
+ goto yy87;
+yy1608:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 499 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I64AtomicRmw8UXchg); }
+#line 8527 "src/prebuilt/wast-lexer-gen.cc"
+yy1610:
+ yych = *++cursor_;
+ if (yych == 'c') goto yy1623;
+ goto yy87;
+yy1611:
+ yych = *++cursor_;
+ if (yych == '_') goto yy1624;
+ goto yy87;
+yy1612:
+ yych = *++cursor_;
+ if (yych == 'c') goto yy1625;
+ goto yy87;
+yy1613:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 498 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I32AtomicRmw16UXchg); }
+#line 8547 "src/prebuilt/wast-lexer-gen.cc"
+yy1615:
+ yych = *++cursor_;
+ if (yych == 'h') goto yy1626;
+ goto yy87;
+yy1616:
+ yych = *++cursor_;
+ if (yych == 'c') goto yy1627;
+ goto yy87;
+yy1617:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 500 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I64AtomicRmw16UXchg); }
+#line 8563 "src/prebuilt/wast-lexer-gen.cc"
+yy1619:
+ yych = *++cursor_;
+ if (yych == 'c') goto yy1628;
+ goto yy87;
+yy1620:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 501 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmw, I64AtomicRmw32UXchg); }
+#line 8575 "src/prebuilt/wast-lexer-gen.cc"
+yy1622:
+ yych = *++cursor_;
+ if (yych == 'h') goto yy1629;
+ goto yy87;
+yy1623:
+ yych = *++cursor_;
+ if (yych == '_') goto yy1630;
+ goto yy87;
+yy1624:
+ yych = *++cursor_;
+ if (yych == 'n') goto yy1631;
+ goto yy87;
+yy1625:
+ yych = *++cursor_;
+ if (yych == 'h') goto yy1632;
+ goto yy87;
+yy1626:
+ yych = *++cursor_;
+ if (yych == 'g') goto yy1633;
+ goto yy87;
+yy1627:
+ yych = *++cursor_;
+ if (yych == 'h') goto yy1635;
+ goto yy87;
+yy1628:
+ yych = *++cursor_;
+ if (yych == 'h') goto yy1636;
+ goto yy87;
+yy1629:
+ yych = *++cursor_;
+ if (yych == 'g') goto yy1637;
+ goto yy87;
+yy1630:
+ yych = *++cursor_;
+ if (yych == 'n') goto yy1639;
+ goto yy87;
+yy1631:
+ yych = *++cursor_;
+ if (yych == 'a') goto yy1640;
+ goto yy87;
+yy1632:
+ yych = *++cursor_;
+ if (yych == 'g') goto yy1641;
+ goto yy87;
+yy1633:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 504 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmwCmpxchg, I32AtomicRmw8UCmpxchg); }
+#line 8627 "src/prebuilt/wast-lexer-gen.cc"
+yy1635:
+ yych = *++cursor_;
+ if (yych == 'g') goto yy1643;
+ goto yy87;
+yy1636:
+ yych = *++cursor_;
+ if (yych == 'g') goto yy1645;
+ goto yy87;
+yy1637:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 506 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmwCmpxchg, I64AtomicRmw8UCmpxchg); }
+#line 8643 "src/prebuilt/wast-lexer-gen.cc"
+yy1639:
+ yych = *++cursor_;
+ if (yych == 'a') goto yy1647;
+ goto yy87;
+yy1640:
+ yych = *++cursor_;
+ if (yych == 'n') goto yy1648;
+ goto yy87;
+yy1641:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 505 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmwCmpxchg, I32AtomicRmw16UCmpxchg); }
+#line 8659 "src/prebuilt/wast-lexer-gen.cc"
+yy1643:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 507 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmwCmpxchg, I64AtomicRmw16UCmpxchg); }
+#line 8667 "src/prebuilt/wast-lexer-gen.cc"
+yy1645:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 508 "src/wast-lexer.cc"
+ { RETURN_OPCODE(AtomicRmwCmpxchg, I64AtomicRmw32UCmpxchg); }
+#line 8675 "src/prebuilt/wast-lexer-gen.cc"
+yy1647:
+ yych = *++cursor_;
+ if (yych == 'n') goto yy1650;
+ goto yy87;
+yy1648:
+ ++cursor_;
+ if (yybm[0+(yych = *cursor_)] & 8) {
+ goto yy86;
+ }
+#line 535 "src/wast-lexer.cc"
{ RETURN(AssertReturnCanonicalNan); }
-#line 7290 "src/prebuilt/wast-lexer-gen.cc"
-yy1339:
+#line 8687 "src/prebuilt/wast-lexer-gen.cc"
+yy1650:
++cursor_;
if (yybm[0+(yych = *cursor_)] & 8) {
goto yy86;
}
-#line 471 "src/wast-lexer.cc"
+#line 536 "src/wast-lexer.cc"
{ RETURN(AssertReturnArithmeticNan); }
-#line 7298 "src/prebuilt/wast-lexer-gen.cc"
+#line 8695 "src/prebuilt/wast-lexer-gen.cc"
}
}
-#line 498 "src/wast-lexer.cc"
+#line 563 "src/wast-lexer.cc"
}
}
diff --git a/src/token.cc b/src/token.cc
index 267bd283..6c629e83 100644
--- a/src/token.cc
+++ b/src/token.cc
@@ -65,6 +65,10 @@ const char* GetTokenTypeName(TokenType token_type) {
"INT",
// Opcode.
+ "ATOMIC_LOAD",
+ "ATOMIC_RMW",
+ "ATOMIC_RMW_CMPXCHG",
+ "ATOMIC_STORE",
"BINARY",
"block",
"br",
diff --git a/src/token.h b/src/token.h
index 8ead1075..89f46204 100644
--- a/src/token.h
+++ b/src/token.h
@@ -82,6 +82,10 @@ enum class TokenType {
Last_Literal = Nat,
// Tokens with Opcode data.
+ AtomicLoad,
+ AtomicRmw,
+ AtomicRmwCmpxchg,
+ AtomicStore,
Binary,
Block,
Br,
@@ -116,7 +120,7 @@ enum class TokenType {
Try,
Unary,
Unreachable,
- First_Opcode = Binary,
+ First_Opcode = AtomicLoad,
Last_Opcode = Unreachable,
// Tokens with string data.
diff --git a/src/type-checker.cc b/src/type-checker.cc
index b213a4c3..a54f53ba 100644
--- a/src/type-checker.cc
+++ b/src/type-checker.cc
@@ -220,6 +220,24 @@ Result TypeChecker::PopAndCheck2Types(Type expected1,
return result;
}
+Result TypeChecker::PopAndCheck3Types(Type expected1,
+ Type expected2,
+ Type expected3,
+ const char* desc) {
+ Result result = Result::Ok;
+ Type actual1 = Type::Any;
+ Type actual2 = Type::Any;
+ Type actual3 = Type::Any;
+ result |= CheckTypeStackLimit(3, desc);
+ result |= PopType(&actual3);
+ result |= PopType(&actual2);
+ result |= PopType(&actual1);
+ result |= CheckType(actual1, expected1, desc);
+ result |= CheckType(actual2, expected2, desc);
+ result |= CheckType(actual3, expected3, desc);
+ return result;
+}
+
Result TypeChecker::PopAndCheck2TypesAreEqual(Type* out_type,
const char* desc) {
Result result = Result::Ok;
@@ -246,6 +264,14 @@ Result TypeChecker::CheckOpcode2(Opcode opcode) {
return result;
}
+Result TypeChecker::CheckOpcode3(Opcode opcode) {
+ Result result =
+ PopAndCheck3Types(opcode.GetParamType1(), opcode.GetParamType2(),
+ opcode.GetParamType3(), opcode.GetName());
+ PushType(opcode.GetResultType());
+ return result;
+}
+
Result TypeChecker::BeginFunction(const TypeVector* sig) {
type_stack_.clear();
label_stack_.clear();
@@ -253,6 +279,22 @@ Result TypeChecker::BeginFunction(const TypeVector* sig) {
return Result::Ok;
}
+Result TypeChecker::OnAtomicLoad(Opcode opcode) {
+ return CheckOpcode1(opcode);
+}
+
+Result TypeChecker::OnAtomicStore(Opcode opcode) {
+ return CheckOpcode2(opcode);
+}
+
+Result TypeChecker::OnAtomicRmw(Opcode opcode) {
+ return CheckOpcode2(opcode);
+}
+
+Result TypeChecker::OnAtomicRmwCmpxchg(Opcode opcode) {
+ return CheckOpcode3(opcode);
+}
+
Result TypeChecker::OnBinary(Opcode opcode) {
return CheckOpcode2(opcode);
}
diff --git a/src/type-checker.h b/src/type-checker.h
index d7216cd8..6f1257ce 100644
--- a/src/type-checker.h
+++ b/src/type-checker.h
@@ -51,6 +51,10 @@ class TypeChecker {
Result GetLabel(Index depth, Label** out_label);
Result BeginFunction(const TypeVector* sig);
+ Result OnAtomicLoad(Opcode);
+ Result OnAtomicStore(Opcode);
+ Result OnAtomicRmw(Opcode);
+ Result OnAtomicRmwCmpxchg(Opcode);
Result OnBinary(Opcode);
Result OnBlock(const TypeVector* sig);
Result OnBr(Index depth);
@@ -113,9 +117,14 @@ class TypeChecker {
const char* desc);
Result PopAndCheck1Type(Type expected, const char* desc);
Result PopAndCheck2Types(Type expected1, Type expected2, const char* desc);
+ Result PopAndCheck3Types(Type expected1,
+ Type expected2,
+ Type expected3,
+ const char* desc);
Result PopAndCheck2TypesAreEqual(Type* out_type, const char* desc);
Result CheckOpcode1(Opcode opcode);
Result CheckOpcode2(Opcode opcode);
+ Result CheckOpcode3(Opcode opcode);
Result OnEnd(Label* label, const char* sig_desc, const char* end_desc);
ErrorCallback error_callback_;
diff --git a/src/validator.cc b/src/validator.cc
index 5683199a..2df94bba 100644
--- a/src/validator.cc
+++ b/src/validator.cc
@@ -77,6 +77,9 @@ class Validator {
void CheckAlign(const Location* loc,
Address alignment,
Address natural_alignment);
+ void CheckAtomicAlign(const Location* loc,
+ Address alignment,
+ Address natural_alignment);
void CheckType(const Location* loc,
Type actual,
Type expected,
@@ -298,6 +301,19 @@ void Validator::CheckAlign(const Location* loc,
}
}
+void Validator::CheckAtomicAlign(const Location* loc,
+ Address alignment,
+ Address natural_alignment) {
+ if (alignment != WABT_USE_NATURAL_ALIGNMENT) {
+ if (!is_power_of_two(alignment))
+ PrintError(loc, "alignment must be power-of-two");
+ if (alignment != natural_alignment) {
+ PrintError(loc, "alignment must be equal to natural alignment (%u)",
+ natural_alignment);
+ }
+ }
+}
+
void Validator::CheckType(const Location* loc,
Type actual,
Type expected,
@@ -397,6 +413,42 @@ void Validator::CheckExpr(const Expr* expr) {
expr_loc_ = &expr->loc;
switch (expr->type()) {
+ case ExprType::AtomicLoad: {
+ auto load_expr = cast<AtomicLoadExpr>(expr);
+ CheckHasMemory(&load_expr->loc, load_expr->opcode);
+ CheckAtomicAlign(&load_expr->loc, load_expr->align,
+ get_opcode_natural_alignment(load_expr->opcode));
+ typechecker_.OnAtomicLoad(load_expr->opcode);
+ break;
+ }
+
+ case ExprType::AtomicRmw: {
+ auto rmw_expr = cast<AtomicRmwExpr>(expr);
+ CheckHasMemory(&rmw_expr->loc, rmw_expr->opcode);
+ CheckAtomicAlign(&rmw_expr->loc, rmw_expr->align,
+ get_opcode_natural_alignment(rmw_expr->opcode));
+ typechecker_.OnAtomicRmw(rmw_expr->opcode);
+ break;
+ }
+
+ case ExprType::AtomicRmwCmpxchg: {
+ auto cmpxchg_expr = cast<AtomicRmwCmpxchgExpr>(expr);
+ CheckHasMemory(&cmpxchg_expr->loc, cmpxchg_expr->opcode);
+ CheckAtomicAlign(&cmpxchg_expr->loc, cmpxchg_expr->align,
+ get_opcode_natural_alignment(cmpxchg_expr->opcode));
+ typechecker_.OnAtomicRmwCmpxchg(cmpxchg_expr->opcode);
+ break;
+ }
+
+ case ExprType::AtomicStore: {
+ auto store_expr = cast<AtomicStoreExpr>(expr);
+ CheckHasMemory(&store_expr->loc, store_expr->opcode);
+ CheckAtomicAlign(&store_expr->loc, store_expr->align,
+ get_opcode_natural_alignment(store_expr->opcode));
+ typechecker_.OnAtomicStore(store_expr->opcode);
+ break;
+ }
+
case ExprType::Binary:
typechecker_.OnBinary(cast<BinaryExpr>(expr)->opcode);
break;
diff --git a/src/wast-lexer.cc b/src/wast-lexer.cc
index cb0a5a2e..fa4a47c2 100644
--- a/src/wast-lexer.cc
+++ b/src/wast-lexer.cc
@@ -442,6 +442,71 @@ Token WastLexer::GetToken(WastParser* parser) {
<i> "unreachable" { RETURN_OPCODE0(Unreachable); }
<i> "current_memory" { RETURN_OPCODE0(CurrentMemory); }
<i> "grow_memory" { RETURN_OPCODE0(GrowMemory); }
+
+ <i> "i32.atomic.load" { RETURN_OPCODE(AtomicLoad, I32AtomicLoad); }
+ <i> "i64.atomic.load" { RETURN_OPCODE(AtomicLoad, I64AtomicLoad); }
+ <i> "i32.atomic.load8_u" { RETURN_OPCODE(AtomicLoad, I32AtomicLoad8U); }
+ <i> "i32.atomic.load16_u" { RETURN_OPCODE(AtomicLoad, I32AtomicLoad16U); }
+ <i> "i64.atomic.load8_u" { RETURN_OPCODE(AtomicLoad, I64AtomicLoad8U); }
+ <i> "i64.atomic.load16_u" { RETURN_OPCODE(AtomicLoad, I64AtomicLoad16U); }
+ <i> "i64.atomic.load32_u" { RETURN_OPCODE(AtomicLoad, I64AtomicLoad32U); }
+ <i> "i32.atomic.store" { RETURN_OPCODE(AtomicStore, I32AtomicStore); }
+ <i> "i64.atomic.store" { RETURN_OPCODE(AtomicStore, I64AtomicStore); }
+ <i> "i32.atomic.store8" { RETURN_OPCODE(AtomicStore, I32AtomicStore8); }
+ <i> "i32.atomic.store16" { RETURN_OPCODE(AtomicStore, I32AtomicStore16); }
+ <i> "i64.atomic.store8" { RETURN_OPCODE(AtomicStore, I64AtomicStore8); }
+ <i> "i64.atomic.store16" { RETURN_OPCODE(AtomicStore, I64AtomicStore16); }
+ <i> "i64.atomic.store32" { RETURN_OPCODE(AtomicStore, I64AtomicStore32); }
+ <i> "i32.atomic.rmw.add" { RETURN_OPCODE(AtomicRmw, I32AtomicRmwAdd); }
+ <i> "i64.atomic.rmw.add" { RETURN_OPCODE(AtomicRmw, I64AtomicRmwAdd); }
+ <i> "i32.atomic.rmw8_u.add" { RETURN_OPCODE(AtomicRmw, I32AtomicRmw8UAdd); }
+ <i> "i32.atomic.rmw16_u.add" { RETURN_OPCODE(AtomicRmw, I32AtomicRmw16UAdd); }
+ <i> "i64.atomic.rmw8_u.add" { RETURN_OPCODE(AtomicRmw, I64AtomicRmw8UAdd); }
+ <i> "i64.atomic.rmw16_u.add" { RETURN_OPCODE(AtomicRmw, I64AtomicRmw16UAdd); }
+ <i> "i64.atomic.rmw32_u.add" { RETURN_OPCODE(AtomicRmw, I64AtomicRmw32UAdd); }
+ <i> "i32.atomic.rmw.sub" { RETURN_OPCODE(AtomicRmw, I32AtomicRmwSub); }
+ <i> "i64.atomic.rmw.sub" { RETURN_OPCODE(AtomicRmw, I64AtomicRmwSub); }
+ <i> "i32.atomic.rmw8_u.sub" { RETURN_OPCODE(AtomicRmw, I32AtomicRmw8USub); }
+ <i> "i32.atomic.rmw16_u.sub" { RETURN_OPCODE(AtomicRmw, I32AtomicRmw16USub); }
+ <i> "i64.atomic.rmw8_u.sub" { RETURN_OPCODE(AtomicRmw, I64AtomicRmw8USub); }
+ <i> "i64.atomic.rmw16_u.sub" { RETURN_OPCODE(AtomicRmw, I64AtomicRmw16USub); }
+ <i> "i64.atomic.rmw32_u.sub" { RETURN_OPCODE(AtomicRmw, I64AtomicRmw32USub); }
+ <i> "i32.atomic.rmw.and" { RETURN_OPCODE(AtomicRmw, I32AtomicRmwAnd); }
+ <i> "i64.atomic.rmw.and" { RETURN_OPCODE(AtomicRmw, I64AtomicRmwAnd); }
+ <i> "i32.atomic.rmw8_u.and" { RETURN_OPCODE(AtomicRmw, I32AtomicRmw8UAnd); }
+ <i> "i32.atomic.rmw16_u.and" { RETURN_OPCODE(AtomicRmw, I32AtomicRmw16UAnd); }
+ <i> "i64.atomic.rmw8_u.and" { RETURN_OPCODE(AtomicRmw, I64AtomicRmw8UAnd); }
+ <i> "i64.atomic.rmw16_u.and" { RETURN_OPCODE(AtomicRmw, I64AtomicRmw16UAnd); }
+ <i> "i64.atomic.rmw32_u.and" { RETURN_OPCODE(AtomicRmw, I64AtomicRmw32UAnd); }
+ <i> "i32.atomic.rmw.or" { RETURN_OPCODE(AtomicRmw, I32AtomicRmwOr); }
+ <i> "i64.atomic.rmw.or" { RETURN_OPCODE(AtomicRmw, I64AtomicRmwOr); }
+ <i> "i32.atomic.rmw8_u.or" { RETURN_OPCODE(AtomicRmw, I32AtomicRmw8UOr); }
+ <i> "i32.atomic.rmw16_u.or" { RETURN_OPCODE(AtomicRmw, I32AtomicRmw16UOr); }
+ <i> "i64.atomic.rmw8_u.or" { RETURN_OPCODE(AtomicRmw, I64AtomicRmw8UOr); }
+ <i> "i64.atomic.rmw16_u.or" { RETURN_OPCODE(AtomicRmw, I64AtomicRmw16UOr); }
+ <i> "i64.atomic.rmw32_u.or" { RETURN_OPCODE(AtomicRmw, I64AtomicRmw32UOr); }
+ <i> "i32.atomic.rmw.xor" { RETURN_OPCODE(AtomicRmw, I32AtomicRmwXor); }
+ <i> "i64.atomic.rmw.xor" { RETURN_OPCODE(AtomicRmw, I64AtomicRmwXor); }
+ <i> "i32.atomic.rmw8_u.xor" { RETURN_OPCODE(AtomicRmw, I32AtomicRmw8UXor); }
+ <i> "i32.atomic.rmw16_u.xor" { RETURN_OPCODE(AtomicRmw, I32AtomicRmw16UXor); }
+ <i> "i64.atomic.rmw8_u.xor" { RETURN_OPCODE(AtomicRmw, I64AtomicRmw8UXor); }
+ <i> "i64.atomic.rmw16_u.xor" { RETURN_OPCODE(AtomicRmw, I64AtomicRmw16UXor); }
+ <i> "i64.atomic.rmw32_u.xor" { RETURN_OPCODE(AtomicRmw, I64AtomicRmw32UXor); }
+ <i> "i32.atomic.rmw.xchg" { RETURN_OPCODE(AtomicRmw, I32AtomicRmwXchg); }
+ <i> "i64.atomic.rmw.xchg" { RETURN_OPCODE(AtomicRmw, I64AtomicRmwXchg); }
+ <i> "i32.atomic.rmw8_u.xchg" { RETURN_OPCODE(AtomicRmw, I32AtomicRmw8UXchg); }
+ <i> "i32.atomic.rmw16_u.xchg" { RETURN_OPCODE(AtomicRmw, I32AtomicRmw16UXchg); }
+ <i> "i64.atomic.rmw8_u.xchg" { RETURN_OPCODE(AtomicRmw, I64AtomicRmw8UXchg); }
+ <i> "i64.atomic.rmw16_u.xchg" { RETURN_OPCODE(AtomicRmw, I64AtomicRmw16UXchg); }
+ <i> "i64.atomic.rmw32_u.xchg" { RETURN_OPCODE(AtomicRmw, I64AtomicRmw32UXchg); }
+ <i> "i32.atomic.rmw.cmpxchg" { RETURN_OPCODE(AtomicRmwCmpxchg, I32AtomicRmwCmpxchg); }
+ <i> "i64.atomic.rmw.cmpxchg" { RETURN_OPCODE(AtomicRmwCmpxchg, I64AtomicRmwCmpxchg); }
+ <i> "i32.atomic.rmw8_u.cmpxchg" { RETURN_OPCODE(AtomicRmwCmpxchg, I32AtomicRmw8UCmpxchg); }
+ <i> "i32.atomic.rmw16_u.cmpxchg" { RETURN_OPCODE(AtomicRmwCmpxchg, I32AtomicRmw16UCmpxchg); }
+ <i> "i64.atomic.rmw8_u.cmpxchg" { RETURN_OPCODE(AtomicRmwCmpxchg, I64AtomicRmw8UCmpxchg); }
+ <i> "i64.atomic.rmw16_u.cmpxchg" { RETURN_OPCODE(AtomicRmwCmpxchg, I64AtomicRmw16UCmpxchg); }
+ <i> "i64.atomic.rmw32_u.cmpxchg" { RETURN_OPCODE(AtomicRmwCmpxchg, I64AtomicRmw32UCmpxchg); }
+
<i> "type" { RETURN(Type); }
<i> "func" { RETURN(Func); }
<i> "param" { RETURN(Param); }
diff --git a/src/wast-parser.cc b/src/wast-parser.cc
index 5748e812..85258b37 100644
--- a/src/wast-parser.cc
+++ b/src/wast-parser.cc
@@ -163,6 +163,10 @@ bool IsPlainInstr(TokenType token_type) {
case TokenType::GrowMemory:
case TokenType::Throw:
case TokenType::Rethrow:
+ case TokenType::AtomicLoad:
+ case TokenType::AtomicStore:
+ case TokenType::AtomicRmw:
+ case TokenType::AtomicRmwCmpxchg:
return true;
default:
return false;
@@ -1217,6 +1221,20 @@ Result WastParser::ParsePlainInstrVar(Location loc,
return Result::Ok;
}
+template <typename T>
+Result WastParser::ParsePlainLoadStoreInstr(Location loc,
+ Token token,
+ std::unique_ptr<Expr>* out_expr) {
+ Opcode opcode = token.opcode();
+ uint32_t offset;
+ uint32_t align;
+ ParseOffsetOpt(&offset);
+ ParseAlignOpt(&align);
+ out_expr->reset(new T(opcode, align, offset, loc));
+ return Result::Ok;
+}
+
+
Result WastParser::ParsePlainInstr(std::unique_ptr<Expr>* out_expr) {
WABT_TRACE(ParsePlainInstr);
Location loc = GetLocation();
@@ -1301,25 +1319,15 @@ Result WastParser::ParsePlainInstr(std::unique_ptr<Expr>* out_expr) {
CHECK_RESULT(ParsePlainInstrVar<SetGlobalExpr>(loc, out_expr));
break;
- case TokenType::Load: {
- Opcode opcode = Consume().opcode();
- uint32_t offset;
- uint32_t align;
- ParseOffsetOpt(&offset);
- ParseAlignOpt(&align);
- out_expr->reset(new LoadExpr(opcode, align, offset, loc));
+ case TokenType::Load:
+ CHECK_RESULT(
+ ParsePlainLoadStoreInstr<LoadExpr>(loc, Consume(), out_expr));
break;
- }
- case TokenType::Store: {
- Opcode opcode = Consume().opcode();
- uint32_t offset;
- uint32_t align;
- ParseOffsetOpt(&offset);
- ParseAlignOpt(&align);
- out_expr->reset(new StoreExpr(opcode, align, offset, loc));
+ case TokenType::Store:
+ CHECK_RESULT(
+ ParsePlainLoadStoreInstr<StoreExpr>(loc, Consume(), out_expr));
break;
- }
case TokenType::Const: {
Const const_;
@@ -1370,6 +1378,38 @@ Result WastParser::ParsePlainInstr(std::unique_ptr<Expr>* out_expr) {
CHECK_RESULT(ParsePlainInstrVar<RethrowExpr>(loc, out_expr));
break;
+ case TokenType::AtomicLoad: {
+ Token token = Consume();
+ ErrorUnlessOpcodeEnabled(token);
+ CHECK_RESULT(
+ ParsePlainLoadStoreInstr<AtomicLoadExpr>(loc, token, out_expr));
+ break;
+ }
+
+ case TokenType::AtomicStore: {
+ Token token = Consume();
+ ErrorUnlessOpcodeEnabled(token);
+ CHECK_RESULT(
+ ParsePlainLoadStoreInstr<AtomicStoreExpr>(loc, token, out_expr));
+ break;
+ }
+
+ case TokenType::AtomicRmw: {
+ Token token = Consume();
+ ErrorUnlessOpcodeEnabled(token);
+ CHECK_RESULT(
+ ParsePlainLoadStoreInstr<AtomicRmwExpr>(loc, token, out_expr));
+ break;
+ }
+
+ case TokenType::AtomicRmwCmpxchg: {
+ Token token = Consume();
+ ErrorUnlessOpcodeEnabled(token);
+ CHECK_RESULT(
+ ParsePlainLoadStoreInstr<AtomicRmwCmpxchgExpr>(loc, token, out_expr));
+ break;
+ }
+
default:
assert(
!"ParsePlainInstr should only be called when IsPlainInstr() is true");
diff --git a/src/wast-parser.h b/src/wast-parser.h
index c537c7f1..0f36cb70 100644
--- a/src/wast-parser.h
+++ b/src/wast-parser.h
@@ -169,6 +169,8 @@ class WastParser {
template <typename T>
Result ParsePlainInstrVar(Location, std::unique_ptr<Expr>*);
+ template <typename T>
+ Result ParsePlainLoadStoreInstr(Location, Token, std::unique_ptr<Expr>*);
Result ParseCommandList(Script*, CommandPtrVector*);
Result ParseCommand(Script*, CommandPtr*);
diff --git a/src/wat-writer.cc b/src/wat-writer.cc
index 7ce9811e..1a771e83 100644
--- a/src/wat-writer.cc
+++ b/src/wat-writer.cc
@@ -132,6 +132,8 @@ class WatWriter {
const char* start_text);
void WriteConst(const Const& const_);
void WriteExpr(const Expr* expr);
+ template <typename T>
+ void WriteLoadStoreExpr(const Expr* expr);
void WriteExprList(const ExprList& exprs);
void WriteInitExpr(const ExprList& expr);
void WriteTypeBindings(const char* prefix,
@@ -458,9 +460,36 @@ void WatWriter::WriteConst(const Const& const_) {
}
}
+template <typename T>
+void WatWriter::WriteLoadStoreExpr(const Expr* expr) {
+ auto typed_expr = cast<T>(expr);
+ WritePutsSpace(typed_expr->opcode.GetName());
+ if (typed_expr->offset)
+ Writef("offset=%u", typed_expr->offset);
+ if (!typed_expr->opcode.IsNaturallyAligned(typed_expr->align))
+ Writef("align=%u", typed_expr->align);
+ WriteNewline(NO_FORCE_NEWLINE);
+}
+
void WatWriter::WriteExpr(const Expr* expr) {
WABT_TRACE_ARGS(WriteExpr, "%s", GetExprTypeName(*expr));
switch (expr->type()) {
+ case ExprType::AtomicLoad:
+ WriteLoadStoreExpr<AtomicLoadExpr>(expr);
+ break;
+
+ case ExprType::AtomicStore:
+ WriteLoadStoreExpr<AtomicStoreExpr>(expr);
+ break;
+
+ case ExprType::AtomicRmw:
+ WriteLoadStoreExpr<AtomicRmwExpr>(expr);
+ break;
+
+ case ExprType::AtomicRmwCmpxchg:
+ WriteLoadStoreExpr<AtomicRmwCmpxchgExpr>(expr);
+ break;
+
case ExprType::Binary:
WritePutsNewline(cast<BinaryExpr>(expr)->opcode.GetName());
break;
@@ -544,16 +573,9 @@ void WatWriter::WriteExpr(const Expr* expr) {
break;
}
- case ExprType::Load: {
- auto load_expr = cast<LoadExpr>(expr);
- WritePutsSpace(load_expr->opcode.GetName());
- if (load_expr->offset)
- Writef("offset=%u", load_expr->offset);
- if (!load_expr->opcode.IsNaturallyAligned(load_expr->align))
- Writef("align=%u", load_expr->align);
- WriteNewline(NO_FORCE_NEWLINE);
+ case ExprType::Load:
+ WriteLoadStoreExpr<LoadExpr>(expr);
break;
- }
case ExprType::Loop:
WriteBlock(LabelType::Loop, cast<LoopExpr>(expr)->block,
@@ -591,16 +613,9 @@ void WatWriter::WriteExpr(const Expr* expr) {
WriteVar(cast<SetLocalExpr>(expr)->var, NextChar::Newline);
break;
- case ExprType::Store: {
- auto store_expr = cast<StoreExpr>(expr);
- WritePutsSpace(store_expr->opcode.GetName());
- if (store_expr->offset)
- Writef("offset=%u", store_expr->offset);
- if (!store_expr->opcode.IsNaturallyAligned(store_expr->align))
- Writef("align=%u", store_expr->align);
- WriteNewline(NO_FORCE_NEWLINE);
+ case ExprType::Store:
+ WriteLoadStoreExpr<StoreExpr>(expr);
break;
- }
case ExprType::TeeLocal:
WritePutsSpace(Opcode::TeeLocal_Opcode.GetName());
@@ -697,12 +712,17 @@ Index WatWriter::GetFuncSigResultCount(const Var& var) {
void WatWriter::WriteFoldedExpr(const Expr* expr) {
WABT_TRACE_ARGS(WriteFoldedExpr, "%s", GetExprTypeName(*expr));
switch (expr->type()) {
+ case ExprType::AtomicRmw:
case ExprType::Binary:
case ExprType::Compare:
- case ExprType::Store:
PushExpr(expr, 2, 1);
break;
+ case ExprType::AtomicStore:
+ case ExprType::Store:
+ PushExpr(expr, 2, 0);
+ break;
+
case ExprType::Block:
PushExpr(expr, 0, cast<BlockExpr>(expr)->block.sig.size());
break;
@@ -743,6 +763,7 @@ void WatWriter::WriteFoldedExpr(const Expr* expr) {
PushExpr(expr, 0, 1);
break;
+ case ExprType::AtomicLoad:
case ExprType::Convert:
case ExprType::GrowMemory:
case ExprType::Load:
@@ -777,6 +798,7 @@ void WatWriter::WriteFoldedExpr(const Expr* expr) {
PushExpr(expr, 0, 0);
break;
+ case ExprType::AtomicRmwCmpxchg:
case ExprType::Select:
PushExpr(expr, 3, 1);
break;