summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNg Zhi An <ngzhian@gmail.com>2021-03-22 15:22:02 -0700
committerGitHub <noreply@github.com>2021-03-22 15:22:02 -0700
commit2c7d2572414aad39341734d1513a6cd94759a320 (patch)
tree4b71cafd0fbee7c1a4920a96b8d4e11138f7264a
parentc7293e42c587cab2b15eaf2934f574f84eeab9e5 (diff)
downloadwabt-2c7d2572414aad39341734d1513a6cd94759a320.tar.gz
wabt-2c7d2572414aad39341734d1513a6cd94759a320.tar.bz2
wabt-2c7d2572414aad39341734d1513a6cd94759a320.zip
[simd] Implement load lane (#1646)
This is a new kind of ir/ast node/instruction. It has 3 immediates: memarg align, memarg offset, and lane index. This required new visitor functions in all the places. Drive-by cleanup to share the simd lane parsing logic between shuffle, lane op and this new load lane instructions. This requires rebasing some tests because the error messages are slightly different now.
-rw-r--r--src/binary-reader-ir.cc12
-rw-r--r--src/binary-reader-logging.cc16
-rw-r--r--src/binary-reader-logging.h7
-rw-r--r--src/binary-reader-nop.h11
-rw-r--r--src/binary-reader-objdump.cc10
-rw-r--r--src/binary-reader.cc15
-rw-r--r--src/binary-reader.h7
-rw-r--r--src/binary-writer.cc11
-rw-r--r--src/expr-visitor.cc5
-rw-r--r--src/expr-visitor.h2
-rw-r--r--src/interp/binary-reader-interp.cc21
-rw-r--r--src/interp/interp.cc18
-rw-r--r--src/interp/interp.h2
-rw-r--r--src/interp/istream.cc24
-rw-r--r--src/interp/istream.h3
-rw-r--r--src/ir-util.cc4
-rw-r--r--src/ir.cc1
-rw-r--r--src/ir.h20
-rw-r--r--src/lexer-keywords.txt4
-rw-r--r--src/opcode.cc8
-rw-r--r--src/opcode.def4
-rw-r--r--src/prebuilt/lexer-keywords.cc2214
-rw-r--r--src/shared-validator.cc13
-rw-r--r--src/shared-validator.h1
-rw-r--r--src/token.def1
-rw-r--r--src/type-checker.cc13
-rw-r--r--src/type-checker.h1
-rw-r--r--src/validator.cc8
-rw-r--r--src/wast-parser.cc95
-rw-r--r--src/wast-parser.h1
-rw-r--r--src/wat-writer.cc14
-rw-r--r--test/dump/simd-load-lane.txt162
-rw-r--r--test/parse/expr/bad-simd-shuffle-lane-index-overflow.txt2
-rw-r--r--test/spec/simd/simd_lane.txt102
-rw-r--r--test/spec/simd/simd_load8_lane.txt13
35 files changed, 1652 insertions, 1193 deletions
diff --git a/src/binary-reader-ir.cc b/src/binary-reader-ir.cc
index 71bc3f9a..9f123799 100644
--- a/src/binary-reader-ir.cc
+++ b/src/binary-reader-ir.cc
@@ -202,6 +202,10 @@ class BinaryReaderIR : public BinaryReaderNop {
Result OnUnwindExpr() override;
Result EndFunctionBody(Index index) override;
Result OnSimdLaneOpExpr(Opcode opcode, uint64_t value) override;
+ Result OnSimdLoadLaneExpr(Opcode opcode,
+ Address alignment_log2,
+ Address offset,
+ uint64_t value) override;
Result OnSimdShuffleOpExpr(Opcode opcode, v128 value) override;
Result OnLoadSplatExpr(Opcode opcode,
Address alignment_log2,
@@ -1081,6 +1085,14 @@ Result BinaryReaderIR::OnSimdLaneOpExpr(Opcode opcode, uint64_t value) {
return AppendExpr(MakeUnique<SimdLaneOpExpr>(opcode, value));
}
+Result BinaryReaderIR::OnSimdLoadLaneExpr(Opcode opcode,
+ Address alignment_log2,
+ Address offset,
+ uint64_t value) {
+ return AppendExpr(
+ MakeUnique<SimdLoadLaneExpr>(opcode, alignment_log2, offset, value));
+}
+
Result BinaryReaderIR::OnSimdShuffleOpExpr(Opcode opcode, v128 value) {
return AppendExpr(MakeUnique<SimdShuffleOpExpr>(opcode, value));
}
diff --git a/src/binary-reader-logging.cc b/src/binary-reader-logging.cc
index c0a05fe6..a73bd177 100644
--- a/src/binary-reader-logging.cc
+++ b/src/binary-reader-logging.cc
@@ -395,6 +395,16 @@ Result BinaryReaderLogging::OnSimdLaneOpExpr(Opcode opcode, uint64_t value) {
return reader_->OnSimdLaneOpExpr(opcode, value);
}
+Result BinaryReaderLogging::OnSimdLoadLaneExpr(Opcode opcode,
+ Address alignment_log2,
+ Address offset,
+ uint64_t value) {
+ LOGF("OnSimdLoadLaneExpr (align log2: %" PRIaddress ", offset: %" PRIaddress
+ ", lane: %" PRIu64 ")\n",
+ alignment_log2, offset, value);
+ return reader_->OnSimdLoadLaneExpr(opcode, alignment_log2, offset, value);
+}
+
Result BinaryReaderLogging::OnSimdShuffleOpExpr(Opcode opcode, v128 value) {
LOGF("OnSimdShuffleOpExpr (lane: 0x%08x %08x %08x %08x)\n", value.u32(0),
value.u32(1), value.u32(2), value.u32(3));
@@ -919,6 +929,12 @@ Result BinaryReaderLogging::OnOpcodeUint32Uint32(uint32_t value,
return reader_->OnOpcodeUint32Uint32(value, value2);
}
+Result BinaryReaderLogging::OnOpcodeUint32Uint32Uint32(uint32_t value,
+ uint32_t value2,
+ uint32_t value3) {
+ return reader_->OnOpcodeUint32Uint32Uint32(value, value2, value3);
+}
+
Result BinaryReaderLogging::OnOpcodeUint64(uint64_t value) {
return reader_->OnOpcodeUint64(value);
}
diff --git a/src/binary-reader-logging.h b/src/binary-reader-logging.h
index e585ff27..5cf7c6a7 100644
--- a/src/binary-reader-logging.h
+++ b/src/binary-reader-logging.h
@@ -137,6 +137,9 @@ class BinaryReaderLogging : public BinaryReaderDelegate {
Result OnOpcodeIndexIndex(Index value, Index value2) override;
Result OnOpcodeUint32(uint32_t value) override;
Result OnOpcodeUint32Uint32(uint32_t value, uint32_t value2) override;
+ Result OnOpcodeUint32Uint32Uint32(uint32_t value,
+ uint32_t value2,
+ uint32_t value3) override;
Result OnOpcodeUint64(uint64_t value) override;
Result OnOpcodeF32(uint32_t value) override;
Result OnOpcodeF64(uint64_t value) override;
@@ -230,6 +233,10 @@ class BinaryReaderLogging : public BinaryReaderDelegate {
Result EndFunctionBody(Index index) override;
Result EndCodeSection() override;
Result OnSimdLaneOpExpr(Opcode opcode, uint64_t value) override;
+ Result OnSimdLoadLaneExpr(Opcode opcode,
+ Address alignment_log2,
+ Address offset,
+ uint64_t value) override;
Result OnSimdShuffleOpExpr(Opcode opcode, v128 value) override;
Result OnLoadSplatExpr(Opcode opcode,
Address alignment_log2,
diff --git a/src/binary-reader-nop.h b/src/binary-reader-nop.h
index aedd4486..79f540f4 100644
--- a/src/binary-reader-nop.h
+++ b/src/binary-reader-nop.h
@@ -187,6 +187,11 @@ class BinaryReaderNop : public BinaryReaderDelegate {
Result OnOpcodeUint32Uint32(uint32_t value, uint32_t value2) override {
return Result::Ok;
}
+ Result OnOpcodeUint32Uint32Uint32(uint32_t value,
+ uint32_t value2,
+ uint32_t value3) override {
+ return Result::Ok;
+ }
Result OnOpcodeUint64(uint64_t value) override { return Result::Ok; }
Result OnOpcodeF32(uint32_t value) override { return Result::Ok; }
Result OnOpcodeF64(uint64_t value) override { return Result::Ok; }
@@ -304,6 +309,12 @@ class BinaryReaderNop : public BinaryReaderDelegate {
Result OnSimdLaneOpExpr(Opcode opcode, uint64_t value) override {
return Result::Ok;
}
+ Result OnSimdLoadLaneExpr(Opcode opcode,
+ Address alignment_log2,
+ Address offset,
+ uint64_t value) override {
+ return Result::Ok;
+ }
Result OnSimdShuffleOpExpr(Opcode opcode, v128 value) override {
return Result::Ok;
}
diff --git a/src/binary-reader-objdump.cc b/src/binary-reader-objdump.cc
index 64e7b424..945f8391 100644
--- a/src/binary-reader-objdump.cc
+++ b/src/binary-reader-objdump.cc
@@ -465,6 +465,7 @@ class BinaryReaderObjdumpDisassemble : public BinaryReaderObjdumpBase {
Result OnOpcodeIndexIndex(Index value, Index value2) override;
Result OnOpcodeUint32(uint32_t value) override;
Result OnOpcodeUint32Uint32(uint32_t value, uint32_t value2) override;
+ Result OnOpcodeUint32Uint32Uint32(uint32_t value, uint32_t value2, uint32_t value3) override;
Result OnOpcodeUint64(uint64_t value) override;
Result OnOpcodeF32(uint32_t value) override;
Result OnOpcodeF64(uint64_t value) override;
@@ -692,6 +693,15 @@ Result BinaryReaderObjdumpDisassemble::OnOpcodeUint32Uint32(uint32_t value,
return Result::Ok;
}
+Result BinaryReaderObjdumpDisassemble::OnOpcodeUint32Uint32Uint32(
+ uint32_t value,
+ uint32_t value2,
+ uint32_t value3) {
+ Offset immediate_len = state->offset - current_opcode_offset;
+ LogOpcode(immediate_len, "%u %u %u", value, value2, value3);
+ return Result::Ok;
+}
+
Result BinaryReaderObjdumpDisassemble::OnOpcodeUint64(uint64_t value) {
Offset immediate_len = state->offset - current_opcode_offset;
LogOpcode(immediate_len, "%" PRId64, value);
diff --git a/src/binary-reader.cc b/src/binary-reader.cc
index 289e7ba2..b7f7a351 100644
--- a/src/binary-reader.cc
+++ b/src/binary-reader.cc
@@ -1318,6 +1318,21 @@ Result BinaryReader::ReadFunctionBody(Offset end_offset) {
CALLBACK(OnOpcodeUint32Uint32, alignment_log2, offset);
break;
}
+ case Opcode::V128Load8Lane:
+ case Opcode::V128Load16Lane:
+ case Opcode::V128Load32Lane:
+ case Opcode::V128Load64Lane: {
+ Address alignment_log2;
+ CHECK_RESULT(ReadAlignment(&alignment_log2, "load alignment"));
+ Address offset;
+ CHECK_RESULT(ReadAddress(&offset, 0, "load offset"));
+ uint8_t lane_val;
+ CHECK_RESULT(ReadU8(&lane_val, "Lane idx"));
+
+ CALLBACK(OnSimdLoadLaneExpr, opcode, alignment_log2, offset, lane_val);
+ CALLBACK(OnOpcodeUint32Uint32Uint32, alignment_log2, offset, lane_val);
+ break;
+ }
case Opcode::V128Load32Zero:
case Opcode::V128Load64Zero: {
Address alignment_log2;
diff --git a/src/binary-reader.h b/src/binary-reader.h
index 1a7ef0bd..7ecf5421 100644
--- a/src/binary-reader.h
+++ b/src/binary-reader.h
@@ -196,6 +196,9 @@ class BinaryReaderDelegate {
virtual Result OnOpcodeIndex(Index value) = 0;
virtual Result OnOpcodeIndexIndex(Index value, Index value2) = 0;
virtual Result OnOpcodeUint32Uint32(uint32_t value, uint32_t value2) = 0;
+ virtual Result OnOpcodeUint32Uint32Uint32(uint32_t value,
+ uint32_t value2,
+ uint32_t value3) = 0;
virtual Result OnOpcodeUint64(uint64_t value) = 0;
virtual Result OnOpcodeF32(uint32_t value) = 0;
virtual Result OnOpcodeF64(uint64_t value) = 0;
@@ -294,6 +297,10 @@ class BinaryReaderDelegate {
/* Simd instructions with Lane Imm operand*/
virtual Result OnSimdLaneOpExpr(Opcode opcode, uint64_t value) = 0;
virtual Result OnSimdShuffleOpExpr(Opcode opcode, v128 value) = 0;
+ virtual Result OnSimdLoadLaneExpr(Opcode opcode,
+ Address alignment_log2,
+ Address offset,
+ uint64_t value) = 0;
virtual Result OnLoadSplatExpr(Opcode opcode,
Address alignment_log2,
diff --git a/src/binary-writer.cc b/src/binary-writer.cc
index 2f97354e..bca2ea02 100644
--- a/src/binary-writer.cc
+++ b/src/binary-writer.cc
@@ -1016,6 +1016,17 @@ void BinaryWriter::WriteExpr(const Func* func, const Expr* expr) {
"Simd Lane literal");
break;
}
+ case ExprType::SimdLoadLane: {
+ const Opcode opcode = cast<SimdLoadLaneExpr>(expr)->opcode;
+ auto* load_lane_expr = cast<SimdLoadLaneExpr>(expr);
+ WriteOpcode(stream_, opcode);
+ Address align = load_lane_expr->opcode.GetAlignment(load_lane_expr->align);
+ stream_->WriteU8(log2_u32(align), "alignment");
+ WriteU32Leb128(stream_, load_lane_expr->offset, "load offset");
+ stream_->WriteU8(static_cast<uint8_t>(cast<SimdLoadLaneExpr>(expr)->val),
+ "Simd Lane literal");
+ break;
+ }
case ExprType::SimdShuffleOp: {
const Opcode opcode = cast<SimdShuffleOpExpr>(expr)->opcode;
WriteOpcode(stream_, opcode);
diff --git a/src/expr-visitor.cc b/src/expr-visitor.cc
index 78b4a52c..4e0319b2 100644
--- a/src/expr-visitor.cc
+++ b/src/expr-visitor.cc
@@ -415,6 +415,11 @@ Result ExprVisitor::HandleDefaultState(Expr* expr) {
break;
}
+ case ExprType::SimdLoadLane: {
+ CHECK_RESULT(delegate_->OnSimdLoadLaneExpr(cast<SimdLoadLaneExpr>(expr)));
+ break;
+ }
+
case ExprType::SimdShuffleOp: {
CHECK_RESULT(
delegate_->OnSimdShuffleOpExpr(cast<SimdShuffleOpExpr>(expr)));
diff --git a/src/expr-visitor.h b/src/expr-visitor.h
index 0412048e..dd6fdece 100644
--- a/src/expr-visitor.h
+++ b/src/expr-visitor.h
@@ -132,6 +132,7 @@ class ExprVisitor::Delegate {
virtual Result OnAtomicRmwCmpxchgExpr(AtomicRmwCmpxchgExpr*) = 0;
virtual Result OnTernaryExpr(TernaryExpr*) = 0;
virtual Result OnSimdLaneOpExpr(SimdLaneOpExpr*) = 0;
+ virtual Result OnSimdLoadLaneExpr(SimdLoadLaneExpr*) = 0;
virtual Result OnSimdShuffleOpExpr(SimdShuffleOpExpr*) = 0;
virtual Result OnLoadSplatExpr(LoadSplatExpr*) = 0;
virtual Result OnLoadZeroExpr(LoadZeroExpr*) = 0;
@@ -207,6 +208,7 @@ class ExprVisitor::DelegateNop : public ExprVisitor::Delegate {
}
Result OnTernaryExpr(TernaryExpr*) override { return Result::Ok; }
Result OnSimdLaneOpExpr(SimdLaneOpExpr*) override { return Result::Ok; }
+ Result OnSimdLoadLaneExpr(SimdLoadLaneExpr*) override { return Result::Ok; }
Result OnSimdShuffleOpExpr(SimdShuffleOpExpr*) override { return Result::Ok; }
Result OnLoadSplatExpr(LoadSplatExpr*) override { return Result::Ok; }
Result OnLoadZeroExpr(LoadZeroExpr*) override { return Result::Ok; }
diff --git a/src/interp/binary-reader-interp.cc b/src/interp/binary-reader-interp.cc
index 0da318ae..cbec83cc 100644
--- a/src/interp/binary-reader-interp.cc
+++ b/src/interp/binary-reader-interp.cc
@@ -212,6 +212,10 @@ class BinaryReaderInterp : public BinaryReaderNop {
Result OnUnreachableExpr() override;
Result EndFunctionBody(Index index) override;
Result OnSimdLaneOpExpr(Opcode opcode, uint64_t value) override;
+ Result OnSimdLoadLaneExpr(Opcode opcode,
+ Address alignment_log2,
+ Address offset,
+ uint64_t value) override;
Result OnSimdShuffleOpExpr(Opcode opcode, v128 value) override;
Result OnLoadSplatExpr(Opcode opcode,
Address alignment_log2,
@@ -891,16 +895,25 @@ Result BinaryReaderInterp::OnSimdLaneOpExpr(Opcode opcode, uint64_t value) {
return Result::Ok;
}
+uint32_t GetAlignment(Address alignment_log2) {
+ return alignment_log2 < 32 ? 1 << alignment_log2 : ~0u;
+}
+
+Result BinaryReaderInterp::OnSimdLoadLaneExpr(Opcode opcode,
+ Address alignment_log2,
+ Address offset,
+ uint64_t value) {
+ CHECK_RESULT(validator_.OnSimdLoadLane(loc, opcode, GetAlignment(alignment_log2), value));
+ istream_.Emit(opcode, kMemoryIndex0, offset, static_cast<u8>(value));
+ return Result::Ok;
+}
+
Result BinaryReaderInterp::OnSimdShuffleOpExpr(Opcode opcode, v128 value) {
CHECK_RESULT(validator_.OnSimdShuffleOp(loc, opcode, value));
istream_.Emit(opcode, value);
return Result::Ok;
}
-uint32_t GetAlignment(Address alignment_log2) {
- return alignment_log2 < 32 ? 1 << alignment_log2 : ~0u;
-}
-
Result BinaryReaderInterp::OnLoadSplatExpr(Opcode opcode,
Address align_log2,
Address offset) {
diff --git a/src/interp/interp.cc b/src/interp/interp.cc
index 6538a341..de61a26f 100644
--- a/src/interp/interp.cc
+++ b/src/interp/interp.cc
@@ -1636,6 +1636,11 @@ RunResult Thread::StepInternal(Trap::Ptr* out_trap) {
case O::V128Load32Splat: return DoSimdLoadSplat<u32x4, u32>(instr, out_trap);
case O::V128Load64Splat: return DoSimdLoadSplat<u64x2, u64>(instr, out_trap);
+ case O::V128Load8Lane: return DoSimdLoadLane<u8x16, u8>(instr, out_trap);
+ case O::V128Load16Lane: return DoSimdLoadLane<u16x8, u16>(instr, out_trap);
+ case O::V128Load32Lane: return DoSimdLoadLane<u32x4, u32>(instr, out_trap);
+ case O::V128Load64Lane: return DoSimdLoadLane<u64x2, u64>(instr, out_trap);
+
case O::V128Load32Zero: return DoSimdLoadZero<u32x4, u32>(instr, out_trap);
case O::V128Load64Zero: return DoSimdLoadZero<u64x2, u64>(instr, out_trap);
@@ -2166,6 +2171,19 @@ RunResult Thread::DoSimdLoadSplat(Instr instr, Trap::Ptr* out_trap) {
}
template <typename S, typename T>
+RunResult Thread::DoSimdLoadLane(Instr instr, Trap::Ptr* out_trap) {
+ using L = typename S::LaneType;
+ auto result = Pop<S>();
+ L val;
+ if (Load<L>(instr, &val, out_trap) != RunResult::Ok) {
+ return RunResult::Trap;
+ }
+ result.v[instr.imm_u32x2_u8.idx] = val;
+ Push(result);
+ return RunResult::Ok;
+}
+
+template <typename S, typename T>
RunResult Thread::DoSimdLoadZero(Instr instr, Trap::Ptr* out_trap) {
using L = typename S::LaneType;
L val;
diff --git a/src/interp/interp.h b/src/interp/interp.h
index 2b7f1652..8c863752 100644
--- a/src/interp/interp.h
+++ b/src/interp/interp.h
@@ -1153,6 +1153,8 @@ class Thread : public Object {
template <typename S, typename T>
RunResult DoSimdLoadSplat(Instr, Trap::Ptr* out_trap);
template <typename S, typename T>
+ RunResult DoSimdLoadLane(Instr, Trap::Ptr* out_trap);
+ template <typename S, typename T>
RunResult DoSimdLoadZero(Instr, Trap::Ptr* out_trap);
RunResult DoSimdSwizzle();
RunResult DoSimdShuffle(Instr);
diff --git a/src/interp/istream.cc b/src/interp/istream.cc
index 67025c85..4e24df7c 100644
--- a/src/interp/istream.cc
+++ b/src/interp/istream.cc
@@ -69,6 +69,13 @@ void Istream::Emit(Opcode::Enum op, u32 val1, u32 val2) {
EmitInternal(val2);
}
+void Istream::Emit(Opcode::Enum op, u32 val1, u32 val2, u8 val3) {
+ Emit(op);
+ EmitInternal(val1);
+ EmitInternal(val2);
+ EmitInternal(val3);
+}
+
void Istream::EmitDropKeep(u32 drop, u32 keep) {
if (drop > 0) {
if (drop == 1 && keep == 0) {
@@ -645,6 +652,17 @@ Instr Istream::Read(Offset* offset) const {
instr.imm_u32x2.snd = ReadAt<u32>(offset);
break;
+ case Opcode::V128Load8Lane:
+ case Opcode::V128Load16Lane:
+ case Opcode::V128Load32Lane:
+ case Opcode::V128Load64Lane:
+ // Index, memory offset, lane index immediates, 2 operands.
+ instr.kind = InstrKind::Imm_Index_Offset_Lane_Op_2;
+ instr.imm_u32x2_u8.fst = ReadAt<u32>(offset);
+ instr.imm_u32x2_u8.snd = ReadAt<u32>(offset);
+ instr.imm_u32x2_u8.idx = ReadAt<u8>(offset);
+ break;
+
case Opcode::I32AtomicRmw16CmpxchgU:
case Opcode::I32AtomicRmw8CmpxchgU:
case Opcode::I32AtomicRmwCmpxchg:
@@ -868,6 +886,12 @@ Istream::Offset Istream::Trace(Stream* stream,
source->Pick(1, instr).c_str());
break;
+ case InstrKind::Imm_Index_Offset_Lane_Op_2:
+ stream->Writef(" $%u:%s+$%u, %s (Lane imm: $%u)\n", instr.imm_u32x2_u8.fst,
+ source->Pick(2, instr).c_str(), instr.imm_u32x2_u8.snd,
+ source->Pick(1, instr).c_str(), instr.imm_u32x2_u8.idx);
+ break;
+
case InstrKind::Imm_I32_Op_0:
stream->Writef(" %u\n", instr.imm_u32);
break;
diff --git a/src/interp/istream.h b/src/interp/istream.h
index 69079dfd..614a942d 100644
--- a/src/interp/istream.h
+++ b/src/interp/istream.h
@@ -59,6 +59,7 @@ enum class InstrKind {
Imm_Index_Offset_Op_1, // i32.load
Imm_Index_Offset_Op_2, // i32.store
Imm_Index_Offset_Op_3, // i32.atomic.rmw.cmpxchg
+ Imm_Index_Offset_Lane_Op_2, // v128.load8_lane
Imm_I32_Op_0, // i32.const
Imm_I64_Op_0, // i64.const
Imm_F32_Op_0, // f32.const
@@ -81,6 +82,7 @@ struct Instr {
f64 imm_f64;
v128 imm_v128;
struct { u32 fst, snd; } imm_u32x2;
+ struct { u32 fst, snd; u8 idx; } imm_u32x2_u8;
};
};
@@ -106,6 +108,7 @@ class Istream {
void Emit(Opcode::Enum, u64);
void Emit(Opcode::Enum, v128);
void Emit(Opcode::Enum, u32, u32);
+ void Emit(Opcode::Enum, u32, u32, u8);
void EmitDropKeep(u32 drop, u32 keep);
Offset EmitFixupU32();
diff --git a/src/ir-util.cc b/src/ir-util.cc
index f5f0a5db..60c0162a 100644
--- a/src/ir-util.cc
+++ b/src/ir-util.cc
@@ -254,6 +254,10 @@ ModuleContext::Arities ModuleContext::GetExprArity(const Expr& expr) const {
}
}
+ case ExprType::SimdLoadLane: {
+ return { 2, 1 };
+ }
+
case ExprType::SimdShuffleOp:
return { 2, 1 };
}
diff --git a/src/ir.cc b/src/ir.cc
index 11878ca3..98059d29 100644
--- a/src/ir.cc
+++ b/src/ir.cc
@@ -67,6 +67,7 @@ const char* ExprTypeName[] = {
"ReturnCallIndirect",
"Select",
"SimdLaneOp",
+ "SimdLoadLane",
"SimdShuffleOp",
"LoadSplat",
"LoadZero",
diff --git a/src/ir.h b/src/ir.h
index 387f95b4..87766e02 100644
--- a/src/ir.h
+++ b/src/ir.h
@@ -323,6 +323,7 @@ enum class ExprType {
ReturnCallIndirect,
Select,
SimdLaneOp,
+ SimdLoadLane,
SimdShuffleOp,
LoadSplat,
LoadZero,
@@ -454,6 +455,25 @@ class SimdLaneOpExpr : public ExprMixin<ExprType::SimdLaneOp> {
uint64_t val;
};
+class SimdLoadLaneExpr : public ExprMixin<ExprType::SimdLoadLane> {
+ public:
+ SimdLoadLaneExpr(Opcode opcode,
+ Address align,
+ Address offset,
+ uint64_t val,
+ const Location& loc = Location())
+ : ExprMixin<ExprType::SimdLoadLane>(loc),
+ opcode(opcode),
+ align(align),
+ offset(offset),
+ val(val) {}
+
+ Opcode opcode;
+ Address align;
+ Address offset;
+ uint64_t val;
+};
+
class SimdShuffleOpExpr : public ExprMixin<ExprType::SimdShuffleOp> {
public:
SimdShuffleOpExpr(Opcode opcode, v128 val, const Location& loc = Location())
diff --git a/src/lexer-keywords.txt b/src/lexer-keywords.txt
index b9cea8c7..e50f6227 100644
--- a/src/lexer-keywords.txt
+++ b/src/lexer-keywords.txt
@@ -575,6 +575,10 @@ v128.load16_splat, TokenType::Load, Opcode::V128Load16Splat
v128.load32_splat, TokenType::Load, Opcode::V128Load32Splat
v128.load64_splat, TokenType::Load, Opcode::V128Load64Splat
v128.load8_splat, TokenType::Load, Opcode::V128Load8Splat
+v128.load8_lane, TokenType::SimdLoadLane, Opcode::V128Load8Lane
+v128.load16_lane, TokenType::SimdLoadLane, Opcode::V128Load16Lane
+v128.load32_lane, TokenType::SimdLoadLane, Opcode::V128Load32Lane
+v128.load64_lane, TokenType::SimdLoadLane, Opcode::V128Load64Lane
i8x16.shuffle, TokenType::SimdShuffleOp, Opcode::I8X16Shuffle
i8x16.swizzle, TokenType::Binary, Opcode::I8X16Swizzle
# Deprecated names.
diff --git a/src/opcode.cc b/src/opcode.cc
index 1590fc70..174c2675 100644
--- a/src/opcode.cc
+++ b/src/opcode.cc
@@ -306,6 +306,10 @@ bool Opcode::IsEnabled(const Features& features) const {
case Opcode::V128Load16Splat:
case Opcode::V128Load32Splat:
case Opcode::V128Load64Splat:
+ case Opcode::V128Load8Lane:
+ case Opcode::V128Load16Lane:
+ case Opcode::V128Load32Lane:
+ case Opcode::V128Load64Lane:
case Opcode::I8X16Abs:
case Opcode::I16X8Abs:
case Opcode::I32X4Abs:
@@ -346,23 +350,27 @@ uint32_t Opcode::GetSimdLaneCount() const {
case Opcode::I8X16ExtractLaneS:
case Opcode::I8X16ExtractLaneU:
case Opcode::I8X16ReplaceLane:
+ case Opcode::V128Load8Lane:
return 16;
break;
case Opcode::I16X8ExtractLaneS:
case Opcode::I16X8ExtractLaneU:
case Opcode::I16X8ReplaceLane:
+ case Opcode::V128Load16Lane:
return 8;
break;
case Opcode::F32X4ExtractLane:
case Opcode::F32X4ReplaceLane:
case Opcode::I32X4ExtractLane:
case Opcode::I32X4ReplaceLane:
+ case Opcode::V128Load32Lane:
return 4;
break;
case Opcode::F64X2ExtractLane:
case Opcode::F64X2ReplaceLane:
case Opcode::I64X2ExtractLane:
case Opcode::I64X2ReplaceLane:
+ case Opcode::V128Load64Lane:
return 2;
break;
default:
diff --git a/src/opcode.def b/src/opcode.def
index 1625cc31..673e5c7b 100644
--- a/src/opcode.def
+++ b/src/opcode.def
@@ -346,6 +346,10 @@ WABT_OPCODE(V128, V128, V128, ___, 0, 0xfd, 0x50, V128Or, "v128.or", "")
WABT_OPCODE(V128, V128, V128, ___, 0, 0xfd, 0x51, V128Xor, "v128.xor", "")
WABT_OPCODE(V128, V128, V128, V128, 0, 0xfd, 0x52, V128BitSelect, "v128.bitselect", "")
WABT_OPCODE(I32, V128, ___, ___, 0, 0xfd, 0x53, V128AnyTrue, "v128.any_true", "")
+WABT_OPCODE(V128, I32, V128, ___, 1, 0xfd, 0x54, V128Load8Lane, "v128.load8_lane", "")
+WABT_OPCODE(V128, I32, V128, ___, 2, 0xfd, 0x55, V128Load16Lane, "v128.load16_lane", "")
+WABT_OPCODE(V128, I32, V128, ___, 4, 0xfd, 0x56, V128Load32Lane, "v128.load32_lane", "")
+WABT_OPCODE(V128, I32, V128, ___, 8, 0xfd, 0x57, V128Load64Lane, "v128.load64_lane", "")
WABT_OPCODE(V128, I32, ___, ___, 4, 0xfd, 0x5c, V128Load32Zero, "v128.load32_zero", "")
WABT_OPCODE(V128, I32, ___, ___, 8, 0xfd, 0x5d, V128Load64Zero, "v128.load64_zero", "")
WABT_OPCODE(V128, V128, ___, ___, 0, 0xfd, 0x5e, F32X4DemoteF64X2Zero, "f32x4.demote_f64x2_zero", "")
diff --git a/src/prebuilt/lexer-keywords.cc b/src/prebuilt/lexer-keywords.cc
index 996daa9d..fc834a29 100644
--- a/src/prebuilt/lexer-keywords.cc
+++ b/src/prebuilt/lexer-keywords.cc
@@ -48,7 +48,7 @@ struct TokenInfo {
Opcode opcode;
};
};
-/* maximum key range = 2381, duplicates = 0 */
+/* maximum key range = 2562, duplicates = 0 */
class Perfect_Hash
{
@@ -63,32 +63,32 @@ Perfect_Hash::hash (const char *str, size_t len)
{
static unsigned short asso_values[] =
{
- 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408,
- 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408,
- 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408,
- 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408,
- 2408, 2408, 2408, 2408, 2408, 2408, 21, 69, 2408, 55,
- 12, 92, 11, 333, 29, 583, 132, 707, 11, 2408,
- 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408,
- 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408,
- 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408,
- 2408, 2408, 2408, 2408, 2408, 11, 52, 78, 14, 134,
- 37, 17, 11, 479, 661, 14, 22, 45, 24, 15,
- 15, 62, 489, 377, 75, 11, 11, 13, 132, 198,
- 281, 519, 64, 2408, 2408, 2408, 2408, 2408, 2408, 2408,
- 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408,
- 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408,
- 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408,
- 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408,
- 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408,
- 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408,
- 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408,
- 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408,
- 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408,
- 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408,
- 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408,
- 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408,
- 2408, 2408, 2408, 2408, 2408, 2408, 2408
+ 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581,
+ 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581,
+ 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581,
+ 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581,
+ 2581, 2581, 2581, 2581, 2581, 2581, 12, 111, 2581, 25,
+ 8, 44, 7, 294, 126, 601, 308, 575, 20, 2581,
+ 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581,
+ 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581,
+ 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581,
+ 2581, 2581, 2581, 2581, 2581, 8, 67, 67, 24, 77,
+ 27, 13, 7, 561, 624, 10, 69, 25, 40, 8,
+ 9, 53, 353, 537, 140, 7, 7, 9, 162, 131,
+ 317, 751, 158, 2581, 2581, 2581, 2581, 2581, 2581, 2581,
+ 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581,
+ 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581,
+ 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581,
+ 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581,
+ 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581,
+ 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581,
+ 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581,
+ 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581,
+ 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581,
+ 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581,
+ 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581,
+ 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581,
+ 2581, 2581, 2581, 2581, 2581, 2581, 2581
};
unsigned int hval = len;
@@ -158,93 +158,75 @@ Perfect_Hash::InWordSet (const char *str, size_t len)
{
enum
{
- TOTAL_KEYWORDS = 603,
+ TOTAL_KEYWORDS = 607,
MIN_WORD_LENGTH = 2,
MAX_WORD_LENGTH = 29,
- MIN_HASH_VALUE = 27,
- MAX_HASH_VALUE = 2407
+ MIN_HASH_VALUE = 19,
+ MAX_HASH_VALUE = 2580
};
static struct TokenInfo wordlist[] =
{
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""},
#line 506 "src/lexer-keywords.txt"
{"if", TokenType::If, Opcode::If},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""},
#line 139 "src/lexer-keywords.txt"
{"f64", Type::F64},
- {""},
+#line 526 "src/lexer-keywords.txt"
+ {"mut", TokenType::Mut},
#line 81 "src/lexer-keywords.txt"
{"f32", Type::F32},
#line 438 "src/lexer-keywords.txt"
{"i64", Type::I64},
-#line 526 "src/lexer-keywords.txt"
- {"mut", TokenType::Mut},
+ {""},
#line 300 "src/lexer-keywords.txt"
{"i32", Type::I32},
- {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""},
#line 556 "src/lexer-keywords.txt"
{"then", TokenType::Then},
{""},
-#line 46 "src/lexer-keywords.txt"
- {"else", TokenType::Else, Opcode::Else},
#line 510 "src/lexer-keywords.txt"
{"item", TokenType::Item},
- {""}, {""},
+ {""},
+#line 46 "src/lexer-keywords.txt"
+ {"else", TokenType::Else, Opcode::Else},
#line 45 "src/lexer-keywords.txt"
{"elem", TokenType::Elem},
- {""}, {""}, {""}, {""},
-#line 555 "src/lexer-keywords.txt"
- {"table", TokenType::Table},
- {""}, {""}, {""}, {""},
-#line 48 "src/lexer-keywords.txt"
- {"event", TokenType::Event},
- {""},
+ {""}, {""}, {""},
#line 126 "src/lexer-keywords.txt"
{"f64.lt", TokenType::Compare, Opcode::F64Lt},
#line 69 "src/lexer-keywords.txt"
{"f32.lt", TokenType::Compare, Opcode::F32Lt},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""},
+#line 48 "src/lexer-keywords.txt"
+ {"event", TokenType::Event},
+ {""}, {""}, {""},
#line 49 "src/lexer-keywords.txt"
{"extern", Type::ExternRef, TokenType::Extern},
- {""},
+ {""}, {""},
#line 124 "src/lexer-keywords.txt"
{"f64.le", TokenType::Compare, Opcode::F64Le},
#line 67 "src/lexer-keywords.txt"
{"f32.le", TokenType::Compare, Opcode::F32Le},
-#line 110 "src/lexer-keywords.txt"
- {"f64.abs", TokenType::Unary, Opcode::F64Abs},
-#line 52 "src/lexer-keywords.txt"
- {"f32.abs", TokenType::Unary, Opcode::F32Abs},
-#line 137 "src/lexer-keywords.txt"
- {"f64.sub", TokenType::Binary, Opcode::F64Sub},
-#line 79 "src/lexer-keywords.txt"
- {"f32.sub", TokenType::Binary, Opcode::F32Sub},
+#line 555 "src/lexer-keywords.txt"
+ {"table", TokenType::Table},
#line 169 "src/lexer-keywords.txt"
{"funcref", Type::FuncRef},
-#line 429 "src/lexer-keywords.txt"
- {"i64.sub", TokenType::Binary, Opcode::I64Sub},
-#line 291 "src/lexer-keywords.txt"
- {"i32.sub", TokenType::Binary, Opcode::I32Sub},
- {""},
-#line 168 "src/lexer-keywords.txt"
- {"field", TokenType::Field},
#line 128 "src/lexer-keywords.txt"
{"f64.min", TokenType::Binary, Opcode::F64Min},
#line 71 "src/lexer-keywords.txt"
{"f32.min", TokenType::Binary, Opcode::F32Min},
- {""},
-#line 32 "src/lexer-keywords.txt"
- {"br", TokenType::Br, Opcode::Br},
+ {""}, {""},
#line 411 "src/lexer-keywords.txt"
{"i64.lt_s", TokenType::Compare, Opcode::I64LtS},
#line 274 "src/lexer-keywords.txt"
{"i32.lt_s", TokenType::Compare, Opcode::I32LtS},
-#line 47 "src/lexer-keywords.txt"
- {"end", TokenType::End, Opcode::End},
{""},
+#line 168 "src/lexer-keywords.txt"
+ {"field", TokenType::Field},
#line 412 "src/lexer-keywords.txt"
{"i64.lt_u", TokenType::Compare, Opcode::I64LtU},
#line 275 "src/lexer-keywords.txt"
@@ -253,47 +235,55 @@ Perfect_Hash::InWordSet (const char *str, size_t len)
{"i64.le_s", TokenType::Compare, Opcode::I64LeS},
#line 267 "src/lexer-keywords.txt"
{"i32.le_s", TokenType::Compare, Opcode::I32LeS},
-#line 544 "src/lexer-keywords.txt"
- {"select", TokenType::Select, Opcode::Select},
-#line 42 "src/lexer-keywords.txt"
- {"do", TokenType::Do},
+#line 47 "src/lexer-keywords.txt"
+ {"end", TokenType::End, Opcode::End},
+#line 167 "src/lexer-keywords.txt"
+ {"f64x2", TokenType::F64X2},
#line 403 "src/lexer-keywords.txt"
{"i64.le_u", TokenType::Compare, Opcode::I64LeU},
#line 268 "src/lexer-keywords.txt"
{"i32.le_u", TokenType::Compare, Opcode::I32LeU},
- {""},
-#line 129 "src/lexer-keywords.txt"
- {"f64.mul", TokenType::Binary, Opcode::F64Mul},
-#line 72 "src/lexer-keywords.txt"
- {"f32.mul", TokenType::Binary, Opcode::F32Mul},
+#line 468 "src/lexer-keywords.txt"
+ {"i64x2", TokenType::I64X2},
#line 525 "src/lexer-keywords.txt"
{"module", TokenType::Module},
-#line 413 "src/lexer-keywords.txt"
- {"i64.mul", TokenType::Binary, Opcode::I64Mul},
-#line 276 "src/lexer-keywords.txt"
- {"i32.mul", TokenType::Binary, Opcode::I32Mul},
#line 418 "src/lexer-keywords.txt"
{"i64.rem_s", TokenType::Binary, Opcode::I64RemS},
#line 281 "src/lexer-keywords.txt"
{"i32.rem_s", TokenType::Binary, Opcode::I32RemS},
-#line 530 "src/lexer-keywords.txt"
- {"offset", TokenType::Offset},
- {""},
+ {""}, {""},
#line 419 "src/lexer-keywords.txt"
{"i64.rem_u", TokenType::Binary, Opcode::I64RemU},
#line 282 "src/lexer-keywords.txt"
{"i32.rem_u", TokenType::Binary, Opcode::I32RemU},
+#line 42 "src/lexer-keywords.txt"
+ {"do", TokenType::Do},
+#line 110 "src/lexer-keywords.txt"
+ {"f64.abs", TokenType::Unary, Opcode::F64Abs},
+#line 52 "src/lexer-keywords.txt"
+ {"f32.abs", TokenType::Unary, Opcode::F32Abs},
+#line 137 "src/lexer-keywords.txt"
+ {"f64.sub", TokenType::Binary, Opcode::F64Sub},
+#line 79 "src/lexer-keywords.txt"
+ {"f32.sub", TokenType::Binary, Opcode::F32Sub},
+#line 530 "src/lexer-keywords.txt"
+ {"offset", TokenType::Offset},
+#line 429 "src/lexer-keywords.txt"
+ {"i64.sub", TokenType::Binary, Opcode::I64Sub},
+#line 291 "src/lexer-keywords.txt"
+ {"i32.sub", TokenType::Binary, Opcode::I32Sub},
+ {""}, {""}, {""},
#line 553 "src/lexer-keywords.txt"
{"table.set", TokenType::TableSet, Opcode::TableSet},
- {""},
+#line 544 "src/lexer-keywords.txt"
+ {"select", TokenType::Select, Opcode::Select},
#line 546 "src/lexer-keywords.txt"
{"start", TokenType::Start},
-#line 31 "src/lexer-keywords.txt"
- {"br_table", TokenType::BrTable, Opcode::BrTable},
- {""},
#line 552 "src/lexer-keywords.txt"
{"table.init", TokenType::TableInit, Opcode::TableInit},
- {""}, {""},
+#line 170 "src/lexer-keywords.txt"
+ {"func", Type::FuncRef, TokenType::Func},
+ {""},
#line 132 "src/lexer-keywords.txt"
{"f64.ne", TokenType::Compare, Opcode::F64Ne},
#line 75 "src/lexer-keywords.txt"
@@ -303,34 +293,31 @@ Perfect_Hash::InWordSet (const char *str, size_t len)
{"i64.ne", TokenType::Compare, Opcode::I64Ne},
#line 277 "src/lexer-keywords.txt"
{"i32.ne", TokenType::Compare, Opcode::I32Ne},
-#line 539 "src/lexer-keywords.txt"
- {"result", TokenType::Result},
+ {""},
#line 39 "src/lexer-keywords.txt"
{"data", TokenType::Data},
-#line 167 "src/lexer-keywords.txt"
- {"f64x2", TokenType::F64X2},
- {""},
-#line 543 "src/lexer-keywords.txt"
- {"return", TokenType::Return, Opcode::Return},
-#line 468 "src/lexer-keywords.txt"
- {"i64x2", TokenType::I64X2},
+ {""}, {""}, {""}, {""}, {""},
#line 349 "src/lexer-keywords.txt"
{"i64.and", TokenType::Binary, Opcode::I64And},
#line 226 "src/lexer-keywords.txt"
{"i32.and", TokenType::Binary, Opcode::I32And},
- {""}, {""}, {""},
-#line 549 "src/lexer-keywords.txt"
- {"table.fill", TokenType::TableFill, Opcode::TableFill},
- {""}, {""}, {""}, {""}, {""},
-#line 112 "src/lexer-keywords.txt"
- {"f64.ceil", TokenType::Unary, Opcode::F64Ceil},
-#line 54 "src/lexer-keywords.txt"
- {"f32.ceil", TokenType::Unary, Opcode::F32Ceil},
+#line 156 "src/lexer-keywords.txt"
+ {"f64x2.ne", TokenType::Compare, Opcode::F64X2Ne},
+ {""},
+#line 152 "src/lexer-keywords.txt"
+ {"f64x2.min", TokenType::Binary, Opcode::F64X2Min},
+#line 445 "src/lexer-keywords.txt"
+ {"i64x2.ne", TokenType::Binary, Opcode::I64X2Ne},
{""}, {""},
-#line 29 "src/lexer-keywords.txt"
- {"block", TokenType::Block, Opcode::Block},
-#line 547 "src/lexer-keywords.txt"
- {"struct", Type::Struct, TokenType::Struct},
+#line 129 "src/lexer-keywords.txt"
+ {"f64.mul", TokenType::Binary, Opcode::F64Mul},
+#line 72 "src/lexer-keywords.txt"
+ {"f32.mul", TokenType::Binary, Opcode::F32Mul},
+ {""},
+#line 413 "src/lexer-keywords.txt"
+ {"i64.mul", TokenType::Binary, Opcode::I64Mul},
+#line 276 "src/lexer-keywords.txt"
+ {"i32.mul", TokenType::Binary, Opcode::I32Mul},
{""}, {""},
#line 111 "src/lexer-keywords.txt"
{"f64.add", TokenType::Binary, Opcode::F64Add},
@@ -341,281 +328,207 @@ Perfect_Hash::InWordSet (const char *str, size_t len)
{"i64.add", TokenType::Binary, Opcode::I64Add},
#line 225 "src/lexer-keywords.txt"
{"i32.add", TokenType::Binary, Opcode::I32Add},
- {""}, {""}, {""}, {""}, {""},
-#line 170 "src/lexer-keywords.txt"
- {"func", Type::FuncRef, TokenType::Func},
-#line 420 "src/lexer-keywords.txt"
- {"i64.rotl", TokenType::Binary, Opcode::I64Rotl},
-#line 283 "src/lexer-keywords.txt"
- {"i32.rotl", TokenType::Binary, Opcode::I32Rotl},
- {""}, {""}, {""}, {""}, {""}, {""},
-#line 554 "src/lexer-keywords.txt"
- {"table.size", TokenType::TableSize, Opcode::TableSize},
- {""}, {""}, {""},
-#line 50 "src/lexer-keywords.txt"
- {"externref", Type::ExternRef},
+ {""},
+#line 150 "src/lexer-keywords.txt"
+ {"f64x2.lt", TokenType::Compare, Opcode::F64X2Lt},
#line 113 "src/lexer-keywords.txt"
{"f64.const", TokenType::Const, Opcode::F64Const},
#line 55 "src/lexer-keywords.txt"
{"f32.const", TokenType::Const, Opcode::F32Const},
-#line 545 "src/lexer-keywords.txt"
- {"shared", TokenType::Shared},
+ {""},
#line 387 "src/lexer-keywords.txt"
{"i64.const", TokenType::Const, Opcode::I64Const},
#line 255 "src/lexer-keywords.txt"
{"i32.const", TokenType::Const, Opcode::I32Const},
{""}, {""}, {""},
-#line 34 "src/lexer-keywords.txt"
- {"call", TokenType::Call, Opcode::Call},
- {""}, {""},
-#line 150 "src/lexer-keywords.txt"
- {"f64x2.lt", TokenType::Compare, Opcode::F64X2Lt},
- {""}, {""},
-#line 156 "src/lexer-keywords.txt"
- {"f64x2.ne", TokenType::Compare, Opcode::F64X2Ne},
- {""}, {""},
-#line 445 "src/lexer-keywords.txt"
- {"i64x2.ne", TokenType::Binary, Opcode::I64X2Ne},
+#line 545 "src/lexer-keywords.txt"
+ {"shared", TokenType::Shared},
+ {""},
#line 162 "src/lexer-keywords.txt"
{"f64x2.sub", TokenType::Binary, Opcode::F64X2Sub},
- {""}, {""},
-#line 463 "src/lexer-keywords.txt"
- {"i64x2.sub", TokenType::Binary, Opcode::I64X2Sub},
- {""},
#line 149 "src/lexer-keywords.txt"
{"f64x2.le", TokenType::Compare, Opcode::F64X2Le},
-#line 514 "src/lexer-keywords.txt"
- {"local", TokenType::Local},
-#line 152 "src/lexer-keywords.txt"
- {"f64x2.min", TokenType::Binary, Opcode::F64X2Min},
- {""},
#line 446 "src/lexer-keywords.txt"
{"i64x2.lt_s", TokenType::Binary, Opcode::I64X2LtS},
- {""}, {""},
-#line 388 "src/lexer-keywords.txt"
- {"i64.ctz", TokenType::Unary, Opcode::I64Ctz},
-#line 256 "src/lexer-keywords.txt"
- {"i32.ctz", TokenType::Unary, Opcode::I32Ctz},
-#line 509 "src/lexer-keywords.txt"
- {"invoke", TokenType::Invoke},
+#line 463 "src/lexer-keywords.txt"
+ {"i64x2.sub", TokenType::Binary, Opcode::I64X2Sub},
+#line 29 "src/lexer-keywords.txt"
+ {"block", TokenType::Block, Opcode::Block},
+ {""}, {""}, {""},
#line 448 "src/lexer-keywords.txt"
{"i64x2.le_s", TokenType::Binary, Opcode::I64X2LeS},
- {""}, {""}, {""}, {""}, {""},
-#line 536 "src/lexer-keywords.txt"
- {"ref.is_null", TokenType::RefIsNull, Opcode::RefIsNull},
+#line 112 "src/lexer-keywords.txt"
+ {"f64.ceil", TokenType::Unary, Opcode::F64Ceil},
+#line 54 "src/lexer-keywords.txt"
+ {"f32.ceil", TokenType::Unary, Opcode::F32Ceil},
+#line 31 "src/lexer-keywords.txt"
+ {"br_table", TokenType::BrTable, Opcode::BrTable},
{""}, {""},
+#line 549 "src/lexer-keywords.txt"
+ {"table.fill", TokenType::TableFill, Opcode::TableFill},
+ {""}, {""}, {""},
+#line 34 "src/lexer-keywords.txt"
+ {"call", TokenType::Call, Opcode::Call},
+ {""}, {""}, {""}, {""},
+#line 32 "src/lexer-keywords.txt"
+ {"br", TokenType::Br, Opcode::Br},
+ {""}, {""}, {""},
+#line 514 "src/lexer-keywords.txt"
+ {"local", TokenType::Local},
+ {""},
+#line 420 "src/lexer-keywords.txt"
+ {"i64.rotl", TokenType::Binary, Opcode::I64Rotl},
+#line 283 "src/lexer-keywords.txt"
+ {"i32.rotl", TokenType::Binary, Opcode::I32Rotl},
+ {""},
+#line 539 "src/lexer-keywords.txt"
+ {"result", TokenType::Result},
#line 153 "src/lexer-keywords.txt"
{"f64x2.mul", TokenType::Binary, Opcode::F64X2Mul},
-#line 386 "src/lexer-keywords.txt"
- {"i64.clz", TokenType::Unary, Opcode::I64Clz},
-#line 254 "src/lexer-keywords.txt"
- {"i32.clz", TokenType::Unary, Opcode::I32Clz},
+ {""},
+#line 543 "src/lexer-keywords.txt"
+ {"return", TokenType::Return, Opcode::Return},
#line 443 "src/lexer-keywords.txt"
{"i64x2.mul", TokenType::Binary, Opcode::I64X2Mul},
-#line 136 "src/lexer-keywords.txt"
- {"f64.store", TokenType::Store, Opcode::F64Store},
-#line 78 "src/lexer-keywords.txt"
- {"f32.store", TokenType::Store, Opcode::F32Store},
- {""},
-#line 428 "src/lexer-keywords.txt"
- {"i64.store", TokenType::Store, Opcode::I64Store},
-#line 290 "src/lexer-keywords.txt"
- {"i32.store", TokenType::Store, Opcode::I32Store},
- {""},
-#line 389 "src/lexer-keywords.txt"
- {"i64.div_s", TokenType::Binary, Opcode::I64DivS},
-#line 257 "src/lexer-keywords.txt"
- {"i32.div_s", TokenType::Binary, Opcode::I32DivS},
-#line 61 "src/lexer-keywords.txt"
- {"f32.demote_f64", TokenType::Convert, Opcode::F32DemoteF64},
-#line 531 "src/lexer-keywords.txt"
- {"output", TokenType::Output},
-#line 390 "src/lexer-keywords.txt"
- {"i64.div_u", TokenType::Binary, Opcode::I64DivU},
-#line 258 "src/lexer-keywords.txt"
- {"i32.div_u", TokenType::Binary, Opcode::I32DivU},
-#line 426 "src/lexer-keywords.txt"
- {"i64.store32", TokenType::Store, Opcode::I64Store32},
- {""}, {""}, {""}, {""},
-#line 537 "src/lexer-keywords.txt"
- {"ref.null", TokenType::RefNull, Opcode::RefNull},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""},
#line 512 "src/lexer-keywords.txt"
{"local.set", TokenType::LocalSet, Opcode::LocalSet},
- {""}, {""}, {""}, {""},
+ {""}, {""}, {""},
#line 140 "src/lexer-keywords.txt"
{"f64x2.abs", TokenType::Unary, Opcode::F64X2Abs},
+ {""}, {""},
+#line 450 "src/lexer-keywords.txt"
+ {"i64x2.abs", TokenType::Unary, Opcode::I64X2Abs},
+ {""}, {""}, {""}, {""},
+#line 513 "src/lexer-keywords.txt"
+ {"local.tee", TokenType::LocalTee, Opcode::LocalTee},
+ {""},
+#line 547 "src/lexer-keywords.txt"
+ {"struct", Type::Struct, TokenType::Struct},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
#line 125 "src/lexer-keywords.txt"
{"f64.load", TokenType::Load, Opcode::F64Load},
#line 68 "src/lexer-keywords.txt"
{"f32.load", TokenType::Load, Opcode::F32Load},
-#line 450 "src/lexer-keywords.txt"
- {"i64x2.abs", TokenType::Unary, Opcode::I64X2Abs},
+#line 154 "src/lexer-keywords.txt"
+ {"f64x2.nearest", TokenType::Unary, Opcode::F64X2Nearest},
#line 410 "src/lexer-keywords.txt"
{"i64.load", TokenType::Load, Opcode::I64Load},
#line 273 "src/lexer-keywords.txt"
{"i32.load", TokenType::Load, Opcode::I32Load},
- {""},
-#line 513 "src/lexer-keywords.txt"
- {"local.tee", TokenType::LocalTee, Opcode::LocalTee},
- {""},
-#line 421 "src/lexer-keywords.txt"
- {"i64.rotr", TokenType::Binary, Opcode::I64Rotr},
-#line 284 "src/lexer-keywords.txt"
- {"i32.rotr", TokenType::Binary, Opcode::I32Rotr},
- {""},
-#line 425 "src/lexer-keywords.txt"
- {"i64.store16", TokenType::Store, Opcode::I64Store16},
-#line 288 "src/lexer-keywords.txt"
- {"i32.store16", TokenType::Store, Opcode::I32Store16},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 572 "src/lexer-keywords.txt"
- {"v128", Type::V128},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 589 "src/lexer-keywords.txt"
- {"f32.demote/f64", TokenType::Convert, Opcode::F32DemoteF64},
- {""}, {""}, {""}, {""}, {""},
-#line 385 "src/lexer-keywords.txt"
- {"i64.atomic.store", TokenType::AtomicStore, Opcode::I64AtomicStore},
-#line 253 "src/lexer-keywords.txt"
- {"i32.atomic.store", TokenType::AtomicStore, Opcode::I32AtomicStore},
{""}, {""}, {""},
-#line 40 "src/lexer-keywords.txt"
- {"declare", TokenType::Declare},
- {""}, {""},
-#line 130 "src/lexer-keywords.txt"
- {"f64.nearest", TokenType::Unary, Opcode::F64Nearest},
-#line 73 "src/lexer-keywords.txt"
- {"f32.nearest", TokenType::Unary, Opcode::F32Nearest},
- {""}, {""},
-#line 154 "src/lexer-keywords.txt"
- {"f64x2.nearest", TokenType::Unary, Opcode::F64X2Nearest},
+#line 50 "src/lexer-keywords.txt"
+ {"externref", Type::ExternRef},
{""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 383 "src/lexer-keywords.txt"
- {"i64.atomic.store32", TokenType::AtomicStore, Opcode::I64AtomicStore32},
+#line 142 "src/lexer-keywords.txt"
+ {"f64x2.ceil", TokenType::Unary, Opcode::F64X2Ceil},
+ {""}, {""}, {""}, {""}, {""}, {""},
+#line 141 "src/lexer-keywords.txt"
+ {"f64x2.add", TokenType::Binary, Opcode::F64X2Add},
+ {""}, {""},
+#line 439 "src/lexer-keywords.txt"
+ {"i64x2.add", TokenType::Binary, Opcode::I64X2Add},
#line 404 "src/lexer-keywords.txt"
{"i64.load16_s", TokenType::Load, Opcode::I64Load16S},
#line 269 "src/lexer-keywords.txt"
{"i32.load16_s", TokenType::Load, Opcode::I32Load16S},
- {""},
-#line 566 "src/lexer-keywords.txt"
- {"v128.not", TokenType::Unary, Opcode::V128Not},
+#line 389 "src/lexer-keywords.txt"
+ {"i64.div_s", TokenType::Binary, Opcode::I64DivS},
+#line 257 "src/lexer-keywords.txt"
+ {"i32.div_s", TokenType::Binary, Opcode::I32DivS},
#line 405 "src/lexer-keywords.txt"
{"i64.load16_u", TokenType::Load, Opcode::I64Load16U},
#line 270 "src/lexer-keywords.txt"
{"i32.load16_u", TokenType::Load, Opcode::I32Load16U},
+#line 390 "src/lexer-keywords.txt"
+ {"i64.div_u", TokenType::Binary, Opcode::I64DivU},
+#line 258 "src/lexer-keywords.txt"
+ {"i32.div_u", TokenType::Binary, Opcode::I32DivU},
{""},
-#line 119 "src/lexer-keywords.txt"
- {"f64.div", TokenType::Binary, Opcode::F64Div},
-#line 62 "src/lexer-keywords.txt"
- {"f32.div", TokenType::Binary, Opcode::F32Div},
- {""}, {""}, {""},
-#line 36 "src/lexer-keywords.txt"
- {"catch_all", TokenType::CatchAll, Opcode::CatchAll},
+#line 385 "src/lexer-keywords.txt"
+ {"i64.atomic.store", TokenType::AtomicStore, Opcode::I64AtomicStore},
+#line 253 "src/lexer-keywords.txt"
+ {"i32.atomic.store", TokenType::AtomicStore, Opcode::I32AtomicStore},
+#line 531 "src/lexer-keywords.txt"
+ {"output", TokenType::Output},
+ {""},
+#line 509 "src/lexer-keywords.txt"
+ {"invoke", TokenType::Invoke},
{""}, {""}, {""},
-#line 141 "src/lexer-keywords.txt"
- {"f64x2.add", TokenType::Binary, Opcode::F64X2Add},
-#line 142 "src/lexer-keywords.txt"
- {"f64x2.ceil", TokenType::Unary, Opcode::F64X2Ceil},
+#line 554 "src/lexer-keywords.txt"
+ {"table.size", TokenType::TableSize, Opcode::TableSize},
{""},
-#line 439 "src/lexer-keywords.txt"
- {"i64x2.add", TokenType::Binary, Opcode::I64X2Add},
- {""}, {""}, {""}, {""}, {""}, {""},
-#line 427 "src/lexer-keywords.txt"
- {"i64.store8", TokenType::Store, Opcode::I64Store8},
-#line 289 "src/lexer-keywords.txt"
- {"i32.store8", TokenType::Store, Opcode::I32Store8},
-#line 24 "src/lexer-keywords.txt"
- {"assert_return", TokenType::AssertReturn},
- {""}, {""}, {""}, {""}, {""},
-#line 382 "src/lexer-keywords.txt"
- {"i64.atomic.store16", TokenType::AtomicStore, Opcode::I64AtomicStore16},
-#line 251 "src/lexer-keywords.txt"
- {"i32.atomic.store16", TokenType::AtomicStore, Opcode::I32AtomicStore16},
-#line 623 "src/lexer-keywords.txt"
- {"unwind", TokenType::Unwind, Opcode::Unwind},
#line 406 "src/lexer-keywords.txt"
{"i64.load32_s", TokenType::Load, Opcode::I64Load32S},
-#line 22 "src/lexer-keywords.txt"
- {"assert_invalid", TokenType::AssertInvalid},
- {""}, {""},
+#line 453 "src/lexer-keywords.txt"
+ {"i64x2.bitmask", TokenType::Unary, Opcode::I64X2Bitmask},
+#line 383 "src/lexer-keywords.txt"
+ {"i64.atomic.store32", TokenType::AtomicStore, Opcode::I64AtomicStore32},
+#line 627 "src/lexer-keywords.txt"
+ {"unwind", TokenType::Unwind, Opcode::Unwind},
#line 407 "src/lexer-keywords.txt"
{"i64.load32_u", TokenType::Load, Opcode::I64Load32U},
+ {""},
+#line 136 "src/lexer-keywords.txt"
+ {"f64.store", TokenType::Store, Opcode::F64Store},
+#line 78 "src/lexer-keywords.txt"
+ {"f32.store", TokenType::Store, Opcode::F32Store},
+ {""},
+#line 428 "src/lexer-keywords.txt"
+ {"i64.store", TokenType::Store, Opcode::I64Store},
+#line 290 "src/lexer-keywords.txt"
+ {"i32.store", TokenType::Store, Opcode::I32Store},
+ {""}, {""}, {""},
+#line 426 "src/lexer-keywords.txt"
+ {"i64.store32", TokenType::Store, Opcode::I64Store32},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""},
-#line 432 "src/lexer-keywords.txt"
- {"i64.trunc_f64_s", TokenType::Convert, Opcode::I64TruncF64S},
-#line 294 "src/lexer-keywords.txt"
- {"i32.trunc_f64_s", TokenType::Convert, Opcode::I32TruncF64S},
-#line 433 "src/lexer-keywords.txt"
- {"i64.trunc_f64_u", TokenType::Convert, Opcode::I64TruncF64U},
-#line 295 "src/lexer-keywords.txt"
- {"i32.trunc_f64_u", TokenType::Convert, Opcode::I32TruncF64U},
+#line 61 "src/lexer-keywords.txt"
+ {"f32.demote_f64", TokenType::Convert, Opcode::F32DemoteF64},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""},
-#line 621 "src/lexer-keywords.txt"
- {"set_local", TokenType::LocalSet, Opcode::LocalSet},
-#line 453 "src/lexer-keywords.txt"
- {"i64x2.bitmask", TokenType::Unary, Opcode::I64X2Bitmask},
+#line 36 "src/lexer-keywords.txt"
+ {"catch_all", TokenType::CatchAll, Opcode::CatchAll},
{""},
+#line 22 "src/lexer-keywords.txt"
+ {"assert_invalid", TokenType::AssertInvalid},
+#line 40 "src/lexer-keywords.txt"
+ {"declare", TokenType::Declare},
#line 26 "src/lexer-keywords.txt"
{"assert_unlinkable", TokenType::AssertUnlinkable},
+ {""}, {""}, {""}, {""}, {""},
+#line 625 "src/lexer-keywords.txt"
+ {"set_local", TokenType::LocalSet, Opcode::LocalSet},
+ {""}, {""}, {""}, {""}, {""},
+#line 626 "src/lexer-keywords.txt"
+ {"tee_local", TokenType::LocalTee, Opcode::LocalTee},
+ {""}, {""}, {""}, {""}, {""}, {""},
#line 109 "src/lexer-keywords.txt"
{"f32x4", TokenType::F32X4},
- {""},
-#line 622 "src/lexer-keywords.txt"
- {"tee_local", TokenType::LocalTee, Opcode::LocalTee},
+ {""}, {""},
#line 338 "src/lexer-keywords.txt"
{"i32x4", TokenType::I32X4},
- {""}, {""},
+#line 130 "src/lexer-keywords.txt"
+ {"f64.nearest", TokenType::Unary, Opcode::F64Nearest},
+#line 73 "src/lexer-keywords.txt"
+ {"f32.nearest", TokenType::Unary, Opcode::F32Nearest},
+ {""}, {""}, {""}, {""}, {""}, {""},
#line 353 "src/lexer-keywords.txt"
{"i64.atomic.load", TokenType::AtomicLoad, Opcode::I64AtomicLoad},
#line 229 "src/lexer-keywords.txt"
{"i32.atomic.load", TokenType::AtomicLoad, Opcode::I32AtomicLoad},
{""}, {""},
-#line 408 "src/lexer-keywords.txt"
- {"i64.load8_s", TokenType::Load, Opcode::I64Load8S},
-#line 271 "src/lexer-keywords.txt"
- {"i32.load8_s", TokenType::Load, Opcode::I32Load8S},
- {""}, {""},
-#line 409 "src/lexer-keywords.txt"
- {"i64.load8_u", TokenType::Load, Opcode::I64Load8U},
-#line 272 "src/lexer-keywords.txt"
- {"i32.load8_u", TokenType::Load, Opcode::I32Load8U},
-#line 562 "src/lexer-keywords.txt"
- {"v128.and", TokenType::Binary, Opcode::V128And},
+#line 537 "src/lexer-keywords.txt"
+ {"ref.null", TokenType::RefNull, Opcode::RefNull},
{""}, {""},
-#line 561 "src/lexer-keywords.txt"
- {"v128.andnot", TokenType::Binary, Opcode::V128Andnot},
- {""},
-#line 146 "src/lexer-keywords.txt"
- {"f64x2.floor", TokenType::Unary, Opcode::F64X2Floor},
-#line 542 "src/lexer-keywords.txt"
- {"return_call", TokenType::ReturnCall, Opcode::ReturnCall},
- {""}, {""}, {""}, {""},
-#line 571 "src/lexer-keywords.txt"
- {"v128.store", TokenType::Store, Opcode::V128Store},
-#line 116 "src/lexer-keywords.txt"
- {"f64.convert_i64_s", TokenType::Convert, Opcode::F64ConvertI64S},
-#line 58 "src/lexer-keywords.txt"
- {"f32.convert_i64_s", TokenType::Convert, Opcode::F32ConvertI64S},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 452 "src/lexer-keywords.txt"
- {"i64x2.all_true", TokenType::Unary, Opcode::I64X2AllTrue},
+#line 536 "src/lexer-keywords.txt"
+ {"ref.is_null", TokenType::RefIsNull, Opcode::RefIsNull},
{""}, {""}, {""},
#line 138 "src/lexer-keywords.txt"
{"f64.trunc", TokenType::Unary, Opcode::F64Trunc},
#line 80 "src/lexer-keywords.txt"
{"f32.trunc", TokenType::Unary, Opcode::F32Trunc},
{""}, {""}, {""}, {""},
-#line 613 "src/lexer-keywords.txt"
- {"i64.trunc_s/f64", TokenType::Convert, Opcode::I64TruncF64S},
-#line 601 "src/lexer-keywords.txt"
- {"i32.trunc_s/f64", TokenType::Convert, Opcode::I32TruncF64S},
-#line 617 "src/lexer-keywords.txt"
- {"i64.trunc_u/f64", TokenType::Convert, Opcode::I64TruncF64U},
-#line 605 "src/lexer-keywords.txt"
- {"i32.trunc_u/f64", TokenType::Convert, Opcode::I32TruncF64U},
- {""}, {""},
#line 430 "src/lexer-keywords.txt"
{"i64.trunc_f32_s", TokenType::Convert, Opcode::I64TruncF32S},
#line 292 "src/lexer-keywords.txt"
@@ -624,31 +537,71 @@ Perfect_Hash::InWordSet (const char *str, size_t len)
{"i64.trunc_f32_u", TokenType::Convert, Opcode::I64TruncF32U},
#line 293 "src/lexer-keywords.txt"
{"i32.trunc_f32_u", TokenType::Convert, Opcode::I32TruncF32U},
-#line 94 "src/lexer-keywords.txt"
- {"f32x4.lt", TokenType::Compare, Opcode::F32X4Lt},
-#line 567 "src/lexer-keywords.txt"
- {"v128.or", TokenType::Binary, Opcode::V128Or},
+ {""}, {""}, {""},
+#line 33 "src/lexer-keywords.txt"
+ {"call_indirect", TokenType::CallIndirect, Opcode::CallIndirect},
+ {""}, {""}, {""},
+#line 587 "src/lexer-keywords.txt"
+ {"i64.atomic.wait", TokenType::AtomicWait, Opcode::MemoryAtomicWait64},
+#line 586 "src/lexer-keywords.txt"
+ {"i32.atomic.wait", TokenType::AtomicWait, Opcode::MemoryAtomicWait32},
{""},
#line 100 "src/lexer-keywords.txt"
{"f32x4.ne", TokenType::Compare, Opcode::F32X4Ne},
- {""}, {""},
+#line 566 "src/lexer-keywords.txt"
+ {"v128.not", TokenType::Unary, Opcode::V128Not},
+#line 96 "src/lexer-keywords.txt"
+ {"f32x4.min", TokenType::Binary, Opcode::F32X4Min},
#line 325 "src/lexer-keywords.txt"
{"i32x4.ne", TokenType::Compare, Opcode::I32X4Ne},
-#line 106 "src/lexer-keywords.txt"
- {"f32x4.sub", TokenType::Binary, Opcode::F32X4Sub},
+#line 119 "src/lexer-keywords.txt"
+ {"f64.div", TokenType::Binary, Opcode::F64Div},
+#line 62 "src/lexer-keywords.txt"
+ {"f32.div", TokenType::Binary, Opcode::F32Div},
{""}, {""},
-#line 331 "src/lexer-keywords.txt"
- {"i32x4.sub", TokenType::Binary, Opcode::I32X4Sub},
+#line 421 "src/lexer-keywords.txt"
+ {"i64.rotr", TokenType::Binary, Opcode::I64Rotr},
+#line 284 "src/lexer-keywords.txt"
+ {"i32.rotr", TokenType::Binary, Opcode::I32Rotr},
+#line 388 "src/lexer-keywords.txt"
+ {"i64.ctz", TokenType::Unary, Opcode::I64Ctz},
+#line 256 "src/lexer-keywords.txt"
+ {"i32.ctz", TokenType::Unary, Opcode::I32Ctz},
+#line 320 "src/lexer-keywords.txt"
+ {"i32x4.min_s", TokenType::Binary, Opcode::I32X4MinS},
+#line 559 "src/lexer-keywords.txt"
+ {"type", TokenType::Type},
+ {""}, {""},
+#line 321 "src/lexer-keywords.txt"
+ {"i32x4.min_u", TokenType::Binary, Opcode::I32X4MinU},
+#line 593 "src/lexer-keywords.txt"
+ {"f32.demote/f64", TokenType::Convert, Opcode::F32DemoteF64},
{""},
-#line 93 "src/lexer-keywords.txt"
- {"f32x4.le", TokenType::Compare, Opcode::F32X4Le},
+#line 94 "src/lexer-keywords.txt"
+ {"f32x4.lt", TokenType::Compare, Opcode::F32X4Lt},
+#line 508 "src/lexer-keywords.txt"
+ {"input", TokenType::Input},
{""},
-#line 96 "src/lexer-keywords.txt"
- {"f32x4.min", TokenType::Binary, Opcode::F32X4Min},
+#line 114 "src/lexer-keywords.txt"
+ {"f64.convert_i32_s", TokenType::Convert, Opcode::F64ConvertI32S},
+#line 56 "src/lexer-keywords.txt"
+ {"f32.convert_i32_s", TokenType::Convert, Opcode::F32ConvertI32S},
+ {""}, {""},
+#line 507 "src/lexer-keywords.txt"
+ {"import", TokenType::Import},
+#line 163 "src/lexer-keywords.txt"
+ {"f64x2.trunc", TokenType::Unary, Opcode::F64X2Trunc},
{""},
+#line 51 "src/lexer-keywords.txt"
+ {"export", TokenType::Export},
+#line 106 "src/lexer-keywords.txt"
+ {"f32x4.sub", TokenType::Binary, Opcode::F32X4Sub},
+#line 93 "src/lexer-keywords.txt"
+ {"f32x4.le", TokenType::Compare, Opcode::F32X4Le},
#line 316 "src/lexer-keywords.txt"
{"i32x4.lt_s", TokenType::Compare, Opcode::I32X4LtS},
- {""},
+#line 331 "src/lexer-keywords.txt"
+ {"i32x4.sub", TokenType::Binary, Opcode::I32X4Sub},
#line 317 "src/lexer-keywords.txt"
{"i32x4.lt_u", TokenType::Compare, Opcode::I32X4LtU},
{""}, {""}, {""},
@@ -657,324 +610,302 @@ Perfect_Hash::InWordSet (const char *str, size_t len)
{""},
#line 313 "src/lexer-keywords.txt"
{"i32x4.le_u", TokenType::Compare, Opcode::I32X4LeU},
-#line 564 "src/lexer-keywords.txt"
- {"v128.const", TokenType::Const, Opcode::V128Const},
-#line 320 "src/lexer-keywords.txt"
- {"i32x4.min_s", TokenType::Binary, Opcode::I32X4MinS},
{""},
-#line 143 "src/lexer-keywords.txt"
- {"f64x2.div", TokenType::Binary, Opcode::F64X2Div},
-#line 565 "src/lexer-keywords.txt"
- {"v128.load", TokenType::Load, Opcode::V128Load},
-#line 321 "src/lexer-keywords.txt"
- {"i32x4.min_u", TokenType::Binary, Opcode::I32X4MinU},
+#line 542 "src/lexer-keywords.txt"
+ {"return_call", TokenType::ReturnCall, Opcode::ReturnCall},
+#line 386 "src/lexer-keywords.txt"
+ {"i64.clz", TokenType::Unary, Opcode::I64Clz},
+#line 254 "src/lexer-keywords.txt"
+ {"i32.clz", TokenType::Unary, Opcode::I32Clz},
+ {""}, {""}, {""}, {""},
+#line 27 "src/lexer-keywords.txt"
+ {"atomic.fence", TokenType::AtomicFence, Opcode::AtomicFence},
+ {""}, {""},
+#line 452 "src/lexer-keywords.txt"
+ {"i64x2.all_true", TokenType::Unary, Opcode::I64X2AllTrue},
+ {""},
+#line 561 "src/lexer-keywords.txt"
+ {"v128.andnot", TokenType::Binary, Opcode::V128Andnot},
+#line 562 "src/lexer-keywords.txt"
+ {"v128.and", TokenType::Binary, Opcode::V128And},
+#line 528 "src/lexer-keywords.txt"
+ {"nan:canonical", TokenType::NanCanonical},
+ {""}, {""}, {""},
+#line 351 "src/lexer-keywords.txt"
+ {"i64.atomic.load32_u", TokenType::AtomicLoad, Opcode::I64AtomicLoad32U},
+ {""}, {""},
#line 97 "src/lexer-keywords.txt"
{"f32x4.mul", TokenType::Binary, Opcode::F32X4Mul},
-#line 114 "src/lexer-keywords.txt"
- {"f64.convert_i32_s", TokenType::Convert, Opcode::F64ConvertI32S},
-#line 56 "src/lexer-keywords.txt"
- {"f32.convert_i32_s", TokenType::Convert, Opcode::F32ConvertI32S},
+ {""},
+#line 24 "src/lexer-keywords.txt"
+ {"assert_return", TokenType::AssertReturn},
#line 323 "src/lexer-keywords.txt"
{"i32x4.mul", TokenType::Binary, Opcode::I32X4Mul},
- {""}, {""},
-#line 23 "src/lexer-keywords.txt"
- {"assert_malformed", TokenType::AssertMalformed},
- {""}, {""}, {""},
-#line 533 "src/lexer-keywords.txt"
- {"quote", TokenType::Quote},
- {""},
-#line 563 "src/lexer-keywords.txt"
- {"v128.bitselect", TokenType::Ternary, Opcode::V128BitSelect},
+#line 432 "src/lexer-keywords.txt"
+ {"i64.trunc_f64_s", TokenType::Convert, Opcode::I64TruncF64S},
+#line 294 "src/lexer-keywords.txt"
+ {"i32.trunc_f64_s", TokenType::Convert, Opcode::I32TruncF64S},
+#line 433 "src/lexer-keywords.txt"
+ {"i64.trunc_f64_u", TokenType::Convert, Opcode::I64TruncF64U},
+#line 295 "src/lexer-keywords.txt"
+ {"i32.trunc_f64_u", TokenType::Convert, Opcode::I32TruncF64U},
+#line 82 "src/lexer-keywords.txt"
+ {"f32x4.abs", TokenType::Unary, Opcode::F32X4Abs},
{""},
-#line 33 "src/lexer-keywords.txt"
- {"call_indirect", TokenType::CallIndirect, Opcode::CallIndirect},
+#line 43 "src/lexer-keywords.txt"
+ {"drop", TokenType::Drop, Opcode::Drop},
+#line 302 "src/lexer-keywords.txt"
+ {"i32x4.abs", TokenType::Unary, Opcode::I32X4Abs},
{""},
-#line 583 "src/lexer-keywords.txt"
- {"i64.atomic.wait", TokenType::AtomicWait, Opcode::MemoryAtomicWait64},
-#line 582 "src/lexer-keywords.txt"
- {"i32.atomic.wait", TokenType::AtomicWait, Opcode::MemoryAtomicWait32},
- {""}, {""}, {""}, {""}, {""},
-#line 612 "src/lexer-keywords.txt"
+#line 143 "src/lexer-keywords.txt"
+ {"f64x2.div", TokenType::Binary, Opcode::F64X2Div},
+ {""}, {""}, {""},
+#line 564 "src/lexer-keywords.txt"
+ {"v128.const", TokenType::Const, Opcode::V128Const},
+ {""}, {""}, {""}, {""},
+#line 23 "src/lexer-keywords.txt"
+ {"assert_malformed", TokenType::AssertMalformed},
+#line 515 "src/lexer-keywords.txt"
+ {"loop", TokenType::Loop, Opcode::Loop},
+ {""}, {""},
+#line 616 "src/lexer-keywords.txt"
{"i64.trunc_s/f32", TokenType::Convert, Opcode::I64TruncF32S},
-#line 600 "src/lexer-keywords.txt"
+#line 604 "src/lexer-keywords.txt"
{"i32.trunc_s/f32", TokenType::Convert, Opcode::I32TruncF32S},
-#line 616 "src/lexer-keywords.txt"
+#line 620 "src/lexer-keywords.txt"
{"i64.trunc_u/f32", TokenType::Convert, Opcode::I64TruncF32U},
-#line 604 "src/lexer-keywords.txt"
+#line 608 "src/lexer-keywords.txt"
{"i32.trunc_u/f32", TokenType::Convert, Opcode::I32TruncF32U},
- {""}, {""},
-#line 393 "src/lexer-keywords.txt"
- {"i64.extend16_s", TokenType::Unary, Opcode::I64Extend16S},
-#line 261 "src/lexer-keywords.txt"
- {"i32.extend16_s", TokenType::Unary, Opcode::I32Extend16S},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 82 "src/lexer-keywords.txt"
- {"f32x4.abs", TokenType::Unary, Opcode::F32X4Abs},
- {""}, {""},
-#line 302 "src/lexer-keywords.txt"
- {"i32x4.abs", TokenType::Unary, Opcode::I32X4Abs},
-#line 171 "src/lexer-keywords.txt"
- {"get", TokenType::Get},
-#line 609 "src/lexer-keywords.txt"
- {"i64.extend_s/i32", TokenType::Convert, Opcode::I64ExtendI32S},
-#line 534 "src/lexer-keywords.txt"
- {"ref.extern", TokenType::RefExtern},
-#line 610 "src/lexer-keywords.txt"
- {"i64.extend_u/i32", TokenType::Convert, Opcode::I64ExtendI32U},
- {""}, {""},
-#line 528 "src/lexer-keywords.txt"
- {"nan:canonical", TokenType::NanCanonical},
+#line 98 "src/lexer-keywords.txt"
+ {"f32x4.nearest", TokenType::Unary, Opcode::F32X4Nearest},
#line 394 "src/lexer-keywords.txt"
{"i64.extend32_s", TokenType::Unary, Opcode::I64Extend32S},
{""},
-#line 163 "src/lexer-keywords.txt"
- {"f64x2.trunc", TokenType::Unary, Opcode::F64X2Trunc},
- {""},
-#line 135 "src/lexer-keywords.txt"
- {"f64.sqrt", TokenType::Unary, Opcode::F64Sqrt},
-#line 77 "src/lexer-keywords.txt"
- {"f32.sqrt", TokenType::Unary, Opcode::F32Sqrt},
- {""}, {""}, {""},
-#line 30 "src/lexer-keywords.txt"
- {"br_if", TokenType::BrIf, Opcode::BrIf},
-#line 559 "src/lexer-keywords.txt"
- {"type", TokenType::Type},
- {""},
-#line 117 "src/lexer-keywords.txt"
- {"f64.convert_i64_u", TokenType::Convert, Opcode::F64ConvertI64U},
-#line 59 "src/lexer-keywords.txt"
- {"f32.convert_i64_u", TokenType::Convert, Opcode::F32ConvertI64U},
-#line 27 "src/lexer-keywords.txt"
- {"atomic.fence", TokenType::AtomicFence, Opcode::AtomicFence},
- {""},
+#line 158 "src/lexer-keywords.txt"
+ {"f64x2.pmin", TokenType::Binary, Opcode::F64X2PMin},
+#line 146 "src/lexer-keywords.txt"
+ {"f64x2.floor", TokenType::Unary, Opcode::F64X2Floor},
+ {""}, {""}, {""}, {""}, {""}, {""},
+#line 116 "src/lexer-keywords.txt"
+ {"f64.convert_i64_s", TokenType::Convert, Opcode::F64ConvertI64S},
+#line 58 "src/lexer-keywords.txt"
+ {"f32.convert_i64_s", TokenType::Convert, Opcode::F32ConvertI64S},
#line 396 "src/lexer-keywords.txt"
{"i64.extend_i32_s", TokenType::Convert, Opcode::I64ExtendI32S},
- {""}, {""}, {""},
+#line 84 "src/lexer-keywords.txt"
+ {"f32x4.ceil", TokenType::Unary, Opcode::F32X4Ceil},
+ {""}, {""},
#line 397 "src/lexer-keywords.txt"
{"i64.extend_i32_u", TokenType::Convert, Opcode::I64ExtendI32U},
-#line 508 "src/lexer-keywords.txt"
- {"input", TokenType::Input},
- {""}, {""}, {""}, {""}, {""},
-#line 395 "src/lexer-keywords.txt"
- {"i64.extend8_s", TokenType::Unary, Opcode::I64Extend8S},
-#line 262 "src/lexer-keywords.txt"
- {"i32.extend8_s", TokenType::Unary, Opcode::I32Extend8S},
+ {""},
+#line 540 "src/lexer-keywords.txt"
+ {"rethrow", TokenType::Rethrow, Opcode::Rethrow},
+ {""},
+#line 83 "src/lexer-keywords.txt"
+ {"f32x4.add", TokenType::Binary, Opcode::F32X4Add},
+#line 434 "src/lexer-keywords.txt"
+ {"i64.trunc_sat_f32_s", TokenType::Convert, Opcode::I64TruncSatF32S},
+#line 296 "src/lexer-keywords.txt"
+ {"i32.trunc_sat_f32_s", TokenType::Convert, Opcode::I32TruncSatF32S},
+#line 303 "src/lexer-keywords.txt"
+ {"i32x4.add", TokenType::Binary, Opcode::I32X4Add},
+#line 572 "src/lexer-keywords.txt"
+ {"v128", Type::V128},
+#line 435 "src/lexer-keywords.txt"
+ {"i64.trunc_sat_f32_u", TokenType::Convert, Opcode::I64TruncSatF32U},
+#line 297 "src/lexer-keywords.txt"
+ {"i32.trunc_sat_f32_u", TokenType::Convert, Opcode::I32TruncSatF32U},
{""}, {""},
-#line 507 "src/lexer-keywords.txt"
- {"import", TokenType::Import},
+#line 563 "src/lexer-keywords.txt"
+ {"v128.bitselect", TokenType::Ternary, Opcode::V128BitSelect},
+ {""},
+#line 382 "src/lexer-keywords.txt"
+ {"i64.atomic.store16", TokenType::AtomicStore, Opcode::I64AtomicStore16},
+#line 251 "src/lexer-keywords.txt"
+ {"i32.atomic.store16", TokenType::AtomicStore, Opcode::I32AtomicStore16},
+ {""},
#line 372 "src/lexer-keywords.txt"
{"i64.atomic.rmw8.sub_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw8SubU},
#line 241 "src/lexer-keywords.txt"
{"i32.atomic.rmw8.sub_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw8SubU},
-#line 51 "src/lexer-keywords.txt"
- {"export", TokenType::Export},
+ {""},
+#line 160 "src/lexer-keywords.txt"
+ {"f64x2.splat", TokenType::Unary, Opcode::F64X2Splat},
{""}, {""},
-#line 392 "src/lexer-keywords.txt"
- {"i64.eqz", TokenType::Convert, Opcode::I64Eqz},
-#line 260 "src/lexer-keywords.txt"
- {"i32.eqz", TokenType::Convert, Opcode::I32Eqz},
-#line 98 "src/lexer-keywords.txt"
- {"f32x4.nearest", TokenType::Unary, Opcode::F32X4Nearest},
- {""}, {""}, {""},
-#line 352 "src/lexer-keywords.txt"
- {"i64.atomic.load8_u", TokenType::AtomicLoad, Opcode::I64AtomicLoad8U},
-#line 228 "src/lexer-keywords.txt"
- {"i32.atomic.load8_u", TokenType::AtomicLoad, Opcode::I32AtomicLoad8U},
- {""}, {""}, {""}, {""}, {""}, {""},
-#line 540 "src/lexer-keywords.txt"
- {"rethrow", TokenType::Rethrow, Opcode::Rethrow},
- {""}, {""}, {""},
-#line 351 "src/lexer-keywords.txt"
- {"i64.atomic.load32_u", TokenType::AtomicLoad, Opcode::I64AtomicLoad32U},
- {""}, {""}, {""},
-#line 557 "src/lexer-keywords.txt"
- {"throw", TokenType::Throw, Opcode::Throw},
+#line 462 "src/lexer-keywords.txt"
+ {"i64x2.splat", TokenType::Unary, Opcode::I64X2Splat},
+ {""},
+#line 425 "src/lexer-keywords.txt"
+ {"i64.store16", TokenType::Store, Opcode::I64Store16},
+#line 288 "src/lexer-keywords.txt"
+ {"i32.store16", TokenType::Store, Opcode::I32Store16},
+#line 305 "src/lexer-keywords.txt"
+ {"i32x4.bitmask", TokenType::Unary, Opcode::I32X4Bitmask},
+ {""},
+#line 565 "src/lexer-keywords.txt"
+ {"v128.load", TokenType::Load, Opcode::V128Load},
+#line 408 "src/lexer-keywords.txt"
+ {"i64.load8_s", TokenType::Load, Opcode::I64Load8S},
+#line 271 "src/lexer-keywords.txt"
+ {"i32.load8_s", TokenType::Load, Opcode::I32Load8S},
+ {""}, {""},
+#line 409 "src/lexer-keywords.txt"
+ {"i64.load8_u", TokenType::Load, Opcode::I64Load8U},
+#line 272 "src/lexer-keywords.txt"
+ {"i32.load8_u", TokenType::Load, Opcode::I32Load8U},
+#line 571 "src/lexer-keywords.txt"
+ {"v128.store", TokenType::Store, Opcode::V128Store},
#line 369 "src/lexer-keywords.txt"
{"i64.atomic.rmw8.and_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw8AndU},
#line 238 "src/lexer-keywords.txt"
{"i32.atomic.rmw8.and_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw8AndU},
- {""}, {""},
-#line 83 "src/lexer-keywords.txt"
- {"f32x4.add", TokenType::Binary, Opcode::F32X4Add},
-#line 84 "src/lexer-keywords.txt"
- {"f32x4.ceil", TokenType::Unary, Opcode::F32X4Ceil},
{""},
-#line 303 "src/lexer-keywords.txt"
- {"i32x4.add", TokenType::Binary, Opcode::I32X4Add},
-#line 515 "src/lexer-keywords.txt"
- {"loop", TokenType::Loop, Opcode::Loop},
- {""}, {""}, {""}, {""},
-#line 550 "src/lexer-keywords.txt"
- {"table.get", TokenType::TableGet, Opcode::TableGet},
+#line 532 "src/lexer-keywords.txt"
+ {"param", TokenType::Param},
+#line 541 "src/lexer-keywords.txt"
+ {"return_call_indirect", TokenType::ReturnCallIndirect, Opcode::ReturnCallIndirect},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 595 "src/lexer-keywords.txt"
+ {"f64.convert_s/i32", TokenType::Convert, Opcode::F64ConvertI32S},
+#line 589 "src/lexer-keywords.txt"
+ {"f32.convert_s/i32", TokenType::Convert, Opcode::F32ConvertI32S},
+#line 597 "src/lexer-keywords.txt"
+ {"f64.convert_u/i32", TokenType::Convert, Opcode::F64ConvertI32U},
+#line 591 "src/lexer-keywords.txt"
+ {"f32.convert_u/i32", TokenType::Convert, Opcode::F32ConvertI32U},
+ {""}, {""},
+#line 368 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw8.add_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw8AddU},
+#line 237 "src/lexer-keywords.txt"
+ {"i32.atomic.rmw8.add_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw8AddU},
+ {""}, {""},
+#line 617 "src/lexer-keywords.txt"
+ {"i64.trunc_s/f64", TokenType::Convert, Opcode::I64TruncF64S},
+#line 605 "src/lexer-keywords.txt"
+ {"i32.trunc_s/f64", TokenType::Convert, Opcode::I32TruncF64S},
+#line 621 "src/lexer-keywords.txt"
+ {"i64.trunc_u/f64", TokenType::Convert, Opcode::I64TruncF64U},
+#line 609 "src/lexer-keywords.txt"
+ {"i32.trunc_u/f64", TokenType::Convert, Opcode::I32TruncF64U},
+#line 613 "src/lexer-keywords.txt"
+ {"i64.extend_s/i32", TokenType::Convert, Opcode::I64ExtendI32S},
{""},
+#line 614 "src/lexer-keywords.txt"
+ {"i64.extend_u/i32", TokenType::Convert, Opcode::I64ExtendI32U},
+ {""}, {""},
#line 115 "src/lexer-keywords.txt"
{"f64.convert_i32_u", TokenType::Convert, Opcode::F64ConvertI32U},
#line 57 "src/lexer-keywords.txt"
{"f32.convert_i32_u", TokenType::Convert, Opcode::F32ConvertI32U},
- {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""},
+#line 427 "src/lexer-keywords.txt"
+ {"i64.store8", TokenType::Store, Opcode::I64Store8},
+#line 289 "src/lexer-keywords.txt"
+ {"i32.store8", TokenType::Store, Opcode::I32Store8},
+#line 393 "src/lexer-keywords.txt"
+ {"i64.extend16_s", TokenType::Unary, Opcode::I64Extend16S},
+#line 261 "src/lexer-keywords.txt"
+ {"i32.extend16_s", TokenType::Unary, Opcode::I32Extend16S},
+ {""}, {""}, {""},
+#line 375 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw.add", TokenType::AtomicRmw, Opcode::I64AtomicRmwAdd},
+#line 244 "src/lexer-keywords.txt"
+ {"i32.atomic.rmw.add", TokenType::AtomicRmw, Opcode::I32AtomicRmwAdd},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""},
#line 365 "src/lexer-keywords.txt"
{"i64.atomic.rmw32.sub_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw32SubU},
{""},
-#line 43 "src/lexer-keywords.txt"
- {"drop", TokenType::Drop, Opcode::Drop},
-#line 368 "src/lexer-keywords.txt"
- {"i64.atomic.rmw8.add_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw8AddU},
-#line 237 "src/lexer-keywords.txt"
- {"i32.atomic.rmw8.add_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw8AddU},
- {""}, {""}, {""}, {""},
-#line 532 "src/lexer-keywords.txt"
- {"param", TokenType::Param},
-#line 591 "src/lexer-keywords.txt"
- {"f64.convert_s/i32", TokenType::Convert, Opcode::F64ConvertI32S},
-#line 585 "src/lexer-keywords.txt"
- {"f32.convert_s/i32", TokenType::Convert, Opcode::F32ConvertI32S},
-#line 593 "src/lexer-keywords.txt"
- {"f64.convert_u/i32", TokenType::Convert, Opcode::F64ConvertI32U},
-#line 587 "src/lexer-keywords.txt"
- {"f32.convert_u/i32", TokenType::Convert, Opcode::F32ConvertI32U},
- {""}, {""},
-#line 541 "src/lexer-keywords.txt"
- {"return_call_indirect", TokenType::ReturnCallIndirect, Opcode::ReturnCallIndirect},
-#line 358 "src/lexer-keywords.txt"
- {"i64.atomic.rmw16.sub_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw16SubU},
-#line 234 "src/lexer-keywords.txt"
- {"i32.atomic.rmw16.sub_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw16SubU},
-#line 174 "src/lexer-keywords.txt"
- {"global", TokenType::Global},
+#line 171 "src/lexer-keywords.txt"
+ {"get", TokenType::Get},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""},
+#line 557 "src/lexer-keywords.txt"
+ {"throw", TokenType::Throw, Opcode::Throw},
{""},
-#line 305 "src/lexer-keywords.txt"
- {"i32x4.bitmask", TokenType::Unary, Opcode::I32X4Bitmask},
+#line 376 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw.and", TokenType::AtomicRmw, Opcode::I64AtomicRmwAnd},
+#line 245 "src/lexer-keywords.txt"
+ {"i32.atomic.rmw.and", TokenType::AtomicRmw, Opcode::I32AtomicRmwAnd},
+ {""},
+#line 30 "src/lexer-keywords.txt"
+ {"br_if", TokenType::BrIf, Opcode::BrIf},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 533 "src/lexer-keywords.txt"
+ {"quote", TokenType::Quote},
+ {""}, {""}, {""}, {""},
+#line 578 "src/lexer-keywords.txt"
+ {"v128.load8_lane", TokenType::SimdLoadLane, Opcode::V128Load8Lane},
+#line 567 "src/lexer-keywords.txt"
+ {"v128.or", TokenType::Binary, Opcode::V128Or},
{""}, {""}, {""},
+#line 117 "src/lexer-keywords.txt"
+ {"f64.convert_i64_u", TokenType::Convert, Opcode::F64ConvertI64U},
+#line 59 "src/lexer-keywords.txt"
+ {"f32.convert_i64_u", TokenType::Convert, Opcode::F32ConvertI64U},
#line 378 "src/lexer-keywords.txt"
{"i64.atomic.rmw.or", TokenType::AtomicRmw, Opcode::I64AtomicRmwOr},
#line 247 "src/lexer-keywords.txt"
{"i32.atomic.rmw.or", TokenType::AtomicRmw, Opcode::I32AtomicRmwOr},
+ {""}, {""}, {""},
+#line 581 "src/lexer-keywords.txt"
+ {"v128.load64_lane", TokenType::SimdLoadLane, Opcode::V128Load64Lane},
+#line 580 "src/lexer-keywords.txt"
+ {"v128.load32_lane", TokenType::SimdLoadLane, Opcode::V128Load32Lane},
{""}, {""},
-#line 161 "src/lexer-keywords.txt"
- {"f64x2.sqrt", TokenType::Unary, Opcode::F64X2Sqrt},
- {""}, {""},
-#line 434 "src/lexer-keywords.txt"
- {"i64.trunc_sat_f32_s", TokenType::Convert, Opcode::I64TruncSatF32S},
-#line 296 "src/lexer-keywords.txt"
- {"i32.trunc_sat_f32_s", TokenType::Convert, Opcode::I32TruncSatF32S},
+#line 362 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw32.and_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw32AndU},
+ {""}, {""}, {""}, {""}, {""},
+#line 107 "src/lexer-keywords.txt"
+ {"f32x4.trunc", TokenType::Unary, Opcode::F32X4Trunc},
{""}, {""},
-#line 435 "src/lexer-keywords.txt"
- {"i64.trunc_sat_f32_u", TokenType::Convert, Opcode::I64TruncSatF32U},
-#line 297 "src/lexer-keywords.txt"
- {"i32.trunc_sat_f32_u", TokenType::Convert, Opcode::I32TruncSatF32U},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 90 "src/lexer-keywords.txt"
- {"f32x4.floor", TokenType::Unary, Opcode::F32X4Floor},
- {""},
-#line 375 "src/lexer-keywords.txt"
- {"i64.atomic.rmw.add", TokenType::AtomicRmw, Opcode::I64AtomicRmwAdd},
-#line 244 "src/lexer-keywords.txt"
- {"i32.atomic.rmw.add", TokenType::AtomicRmw, Opcode::I32AtomicRmwAdd},
#line 379 "src/lexer-keywords.txt"
{"i64.atomic.rmw.sub", TokenType::AtomicRmw, Opcode::I64AtomicRmwSub},
#line 248 "src/lexer-keywords.txt"
{"i32.atomic.rmw.sub", TokenType::AtomicRmw, Opcode::I32AtomicRmwSub},
+#line 550 "src/lexer-keywords.txt"
+ {"table.get", TokenType::TableGet, Opcode::TableGet},
+#line 21 "src/lexer-keywords.txt"
+ {"assert_exhaustion", TokenType::AssertExhaustion},
+ {""},
+#line 534 "src/lexer-keywords.txt"
+ {"ref.extern", TokenType::RefExtern},
{""}, {""},
-#line 522 "src/lexer-keywords.txt"
- {"memory.init", TokenType::MemoryInit, Opcode::MemoryInit},
#line 148 "src/lexer-keywords.txt"
{"f64x2.gt", TokenType::Compare, Opcode::F64X2Gt},
- {""}, {""}, {""}, {""},
-#line 173 "src/lexer-keywords.txt"
- {"global.set", TokenType::GlobalSet, Opcode::GlobalSet},
- {""},
-#line 523 "src/lexer-keywords.txt"
- {"memory.size", TokenType::MemorySize, Opcode::MemorySize},
+#line 361 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw32.add_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw32AddU},
{""},
-#line 304 "src/lexer-keywords.txt"
- {"i32x4.all_true", TokenType::Unary, Opcode::I32X4AllTrue},
- {""}, {""},
-#line 147 "src/lexer-keywords.txt"
- {"f64x2.ge", TokenType::Compare, Opcode::F64X2Ge},
-#line 570 "src/lexer-keywords.txt"
- {"v128.load64_zero", TokenType::Load, Opcode::V128Load64Zero},
-#line 569 "src/lexer-keywords.txt"
- {"v128.load32_zero", TokenType::Load, Opcode::V128Load32Zero},
-#line 362 "src/lexer-keywords.txt"
- {"i64.atomic.rmw32.and_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw32AndU},
-#line 447 "src/lexer-keywords.txt"
- {"i64x2.gt_s", TokenType::Binary, Opcode::I64X2GtS},
- {""}, {""}, {""}, {""},
-#line 520 "src/lexer-keywords.txt"
- {"memory.fill", TokenType::MemoryFill, Opcode::MemoryFill},
-#line 449 "src/lexer-keywords.txt"
- {"i64x2.ge_s", TokenType::Binary, Opcode::I64X2GeS},
- {""}, {""}, {""},
#line 415 "src/lexer-keywords.txt"
{"i64.or", TokenType::Binary, Opcode::I64Or},
#line 278 "src/lexer-keywords.txt"
{"i32.or", TokenType::Binary, Opcode::I32Or},
- {""}, {""}, {""}, {""},
-#line 355 "src/lexer-keywords.txt"
- {"i64.atomic.rmw16.and_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw16AndU},
-#line 231 "src/lexer-keywords.txt"
- {"i32.atomic.rmw16.and_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw16AndU},
-#line 158 "src/lexer-keywords.txt"
- {"f64x2.pmin", TokenType::Binary, Opcode::F64X2PMin},
- {""}, {""},
-#line 361 "src/lexer-keywords.txt"
- {"i64.atomic.rmw32.add_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw32AddU},
-#line 376 "src/lexer-keywords.txt"
- {"i64.atomic.rmw.and", TokenType::AtomicRmw, Opcode::I64AtomicRmwAnd},
-#line 245 "src/lexer-keywords.txt"
- {"i32.atomic.rmw.and", TokenType::AtomicRmw, Opcode::I32AtomicRmwAnd},
-#line 127 "src/lexer-keywords.txt"
- {"f64.max", TokenType::Binary, Opcode::F64Max},
-#line 70 "src/lexer-keywords.txt"
- {"f32.max", TokenType::Binary, Opcode::F32Max},
- {""}, {""}, {""},
-#line 21 "src/lexer-keywords.txt"
- {"assert_exhaustion", TokenType::AssertExhaustion},
- {""}, {""},
-#line 160 "src/lexer-keywords.txt"
- {"f64x2.splat", TokenType::Unary, Opcode::F64X2Splat},
- {""}, {""},
-#line 462 "src/lexer-keywords.txt"
- {"i64x2.splat", TokenType::Unary, Opcode::I64X2Splat},
- {""}, {""},
-#line 354 "src/lexer-keywords.txt"
- {"i64.atomic.rmw16.add_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw16AddU},
-#line 230 "src/lexer-keywords.txt"
- {"i32.atomic.rmw16.add_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw16AddU},
- {""},
-#line 87 "src/lexer-keywords.txt"
- {"f32x4.div", TokenType::Binary, Opcode::F32X4Div},
-#line 364 "src/lexer-keywords.txt"
- {"i64.atomic.rmw32.or_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw32OrU},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
#line 123 "src/lexer-keywords.txt"
{"f64.gt", TokenType::Compare, Opcode::F64Gt},
#line 66 "src/lexer-keywords.txt"
{"f32.gt", TokenType::Compare, Opcode::F32Gt},
- {""},
-#line 573 "src/lexer-keywords.txt"
- {"v128.xor", TokenType::Binary, Opcode::V128Xor},
- {""}, {""}, {""}, {""},
-#line 357 "src/lexer-keywords.txt"
- {"i64.atomic.rmw16.or_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw16OrU},
-#line 233 "src/lexer-keywords.txt"
- {"i32.atomic.rmw16.or_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw16OrU},
-#line 511 "src/lexer-keywords.txt"
- {"local.get", TokenType::LocalGet, Opcode::LocalGet},
- {""},
+ {""}, {""}, {""}, {""}, {""},
+#line 147 "src/lexer-keywords.txt"
+ {"f64x2.ge", TokenType::Compare, Opcode::F64X2Ge},
+#line 447 "src/lexer-keywords.txt"
+ {"i64x2.gt_s", TokenType::Binary, Opcode::I64X2GtS},
+#line 304 "src/lexer-keywords.txt"
+ {"i32x4.all_true", TokenType::Unary, Opcode::I32X4AllTrue},
+ {""}, {""},
#line 122 "src/lexer-keywords.txt"
{"f64.ge", TokenType::Compare, Opcode::F64Ge},
#line 65 "src/lexer-keywords.txt"
{"f32.ge", TokenType::Compare, Opcode::F32Ge},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""},
+#line 449 "src/lexer-keywords.txt"
+ {"i64x2.ge_s", TokenType::Binary, Opcode::I64X2GeS},
+ {""}, {""}, {""}, {""}, {""},
#line 400 "src/lexer-keywords.txt"
{"i64.gt_s", TokenType::Compare, Opcode::I64GtS},
#line 265 "src/lexer-keywords.txt"
{"i32.gt_s", TokenType::Compare, Opcode::I32GtS},
- {""},
-#line 20 "src/lexer-keywords.txt"
- {"array", Type::Array, TokenType::Array},
+ {""}, {""},
#line 401 "src/lexer-keywords.txt"
{"i64.gt_u", TokenType::Compare, Opcode::I64GtU},
#line 266 "src/lexer-keywords.txt"
@@ -989,61 +920,135 @@ Perfect_Hash::InWordSet (const char *str, size_t len)
#line 264 "src/lexer-keywords.txt"
{"i32.ge_u", TokenType::Compare, Opcode::I32GeU},
{""},
-#line 538 "src/lexer-keywords.txt"
- {"register", TokenType::Register},
+#line 87 "src/lexer-keywords.txt"
+ {"f32x4.div", TokenType::Binary, Opcode::F32X4Div},
+ {""}, {""},
+#line 358 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw16.sub_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw16SubU},
+#line 234 "src/lexer-keywords.txt"
+ {"i32.atomic.rmw16.sub_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw16SubU},
+ {""}, {""}, {""}, {""}, {""}, {""},
+#line 352 "src/lexer-keywords.txt"
+ {"i64.atomic.load8_u", TokenType::AtomicLoad, Opcode::I64AtomicLoad8U},
+#line 228 "src/lexer-keywords.txt"
+ {"i32.atomic.load8_u", TokenType::AtomicLoad, Opcode::I32AtomicLoad8U},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 102 "src/lexer-keywords.txt"
+ {"f32x4.pmin", TokenType::Binary, Opcode::F32X4PMin},
+#line 90 "src/lexer-keywords.txt"
+ {"f32x4.floor", TokenType::Unary, Opcode::F32X4Floor},
+#line 395 "src/lexer-keywords.txt"
+ {"i64.extend8_s", TokenType::Unary, Opcode::I64Extend8S},
+#line 262 "src/lexer-keywords.txt"
+ {"i32.extend8_s", TokenType::Unary, Opcode::I32Extend8S},
+ {""}, {""}, {""},
+#line 529 "src/lexer-keywords.txt"
+ {"nop", TokenType::Nop, Opcode::Nop},
+ {""},
+#line 135 "src/lexer-keywords.txt"
+ {"f64.sqrt", TokenType::Unary, Opcode::F64Sqrt},
+#line 77 "src/lexer-keywords.txt"
+ {"f32.sqrt", TokenType::Unary, Opcode::F32Sqrt},
+ {""},
+#line 35 "src/lexer-keywords.txt"
+ {"catch", TokenType::Catch, Opcode::Catch},
+#line 174 "src/lexer-keywords.txt"
+ {"global", TokenType::Global},
+ {""}, {""},
+#line 173 "src/lexer-keywords.txt"
+ {"global.set", TokenType::GlobalSet, Opcode::GlobalSet},
+ {""}, {""},
+#line 145 "src/lexer-keywords.txt"
+ {"f64x2.extract_lane", TokenType::SimdLaneOp, Opcode::F64X2ExtractLane},
+#line 127 "src/lexer-keywords.txt"
+ {"f64.max", TokenType::Binary, Opcode::F64Max},
+#line 70 "src/lexer-keywords.txt"
+ {"f32.max", TokenType::Binary, Opcode::F32Max},
+#line 440 "src/lexer-keywords.txt"
+ {"i64x2.extract_lane", TokenType::SimdLaneOp, Opcode::I64X2ExtractLane},
+#line 511 "src/lexer-keywords.txt"
+ {"local.get", TokenType::LocalGet, Opcode::LocalGet},
#line 422 "src/lexer-keywords.txt"
{"i64.shl", TokenType::Binary, Opcode::I64Shl},
#line 285 "src/lexer-keywords.txt"
{"i32.shl", TokenType::Binary, Opcode::I32Shl},
- {""},
-#line 107 "src/lexer-keywords.txt"
- {"f32x4.trunc", TokenType::Unary, Opcode::F32X4Trunc},
-#line 441 "src/lexer-keywords.txt"
- {"v128.load32x2_s", TokenType::Load, Opcode::V128Load32X2S},
- {""},
-#line 442 "src/lexer-keywords.txt"
- {"v128.load32x2_u", TokenType::Load, Opcode::V128Load32X2U},
{""}, {""}, {""}, {""},
-#line 469 "src/lexer-keywords.txt"
- {"i64.xor", TokenType::Binary, Opcode::I64Xor},
-#line 347 "src/lexer-keywords.txt"
- {"i32.xor", TokenType::Binary, Opcode::I32Xor},
- {""}, {""}, {""}, {""}, {""}, {""},
-#line 133 "src/lexer-keywords.txt"
- {"f64.promote_f32", TokenType::Convert, Opcode::F64PromoteF32},
-#line 314 "src/lexer-keywords.txt"
- {"v128.load16x4_s", TokenType::Load, Opcode::V128Load16X4S},
- {""},
-#line 315 "src/lexer-keywords.txt"
- {"v128.load16x4_u", TokenType::Load, Opcode::V128Load16X4U},
- {""}, {""},
-#line 592 "src/lexer-keywords.txt"
- {"f64.convert_s/i64", TokenType::Convert, Opcode::F64ConvertI64S},
-#line 586 "src/lexer-keywords.txt"
- {"f32.convert_s/i64", TokenType::Convert, Opcode::F32ConvertI64S},
-#line 594 "src/lexer-keywords.txt"
- {"f64.convert_u/i64", TokenType::Convert, Opcode::F64ConvertI64U},
-#line 588 "src/lexer-keywords.txt"
- {"f32.convert_u/i64", TokenType::Convert, Opcode::F32ConvertI64U},
- {""}, {""}, {""}, {""}, {""}, {""},
#line 318 "src/lexer-keywords.txt"
{"i32x4.max_s", TokenType::Binary, Opcode::I32X4MaxS},
{""}, {""}, {""},
#line 319 "src/lexer-keywords.txt"
{"i32x4.max_u", TokenType::Binary, Opcode::I32X4MaxU},
+#line 104 "src/lexer-keywords.txt"
+ {"f32x4.splat", TokenType::Unary, Opcode::F32X4Splat},
+ {""}, {""},
+#line 330 "src/lexer-keywords.txt"
+ {"i32x4.splat", TokenType::Unary, Opcode::I32X4Splat},
{""},
-#line 120 "src/lexer-keywords.txt"
- {"f64.eq", TokenType::Compare, Opcode::F64Eq},
-#line 63 "src/lexer-keywords.txt"
- {"f32.eq", TokenType::Compare, Opcode::F32Eq},
+#line 579 "src/lexer-keywords.txt"
+ {"v128.load16_lane", TokenType::SimdLoadLane, Opcode::V128Load16Lane},
+#line 364 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw32.or_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw32OrU},
{""},
-#line 391 "src/lexer-keywords.txt"
- {"i64.eq", TokenType::Compare, Opcode::I64Eq},
-#line 259 "src/lexer-keywords.txt"
- {"i32.eq", TokenType::Compare, Opcode::I32Eq},
+#line 355 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw16.and_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw16AndU},
+#line 231 "src/lexer-keywords.txt"
+ {"i32.atomic.rmw16.and_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw16AndU},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""},
+#line 205 "src/lexer-keywords.txt"
+ {"i16x8.ne", TokenType::Compare, Opcode::I16X8Ne},
+ {""}, {""}, {""}, {""},
+#line 161 "src/lexer-keywords.txt"
+ {"f64x2.sqrt", TokenType::Unary, Opcode::F64X2Sqrt},
+#line 354 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw16.add_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw16AddU},
+#line 230 "src/lexer-keywords.txt"
+ {"i32.atomic.rmw16.add_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw16AddU},
+ {""},
+#line 198 "src/lexer-keywords.txt"
+ {"i16x8.min_s", TokenType::Binary, Opcode::I16X8MinS},
+#line 570 "src/lexer-keywords.txt"
+ {"v128.load64_zero", TokenType::Load, Opcode::V128Load64Zero},
+#line 569 "src/lexer-keywords.txt"
+ {"v128.load32_zero", TokenType::Load, Opcode::V128Load32Zero},
+ {""},
+#line 199 "src/lexer-keywords.txt"
+ {"i16x8.min_u", TokenType::Binary, Opcode::I16X8MinU},
+ {""}, {""}, {""}, {""}, {""},
+#line 454 "src/lexer-keywords.txt"
+ {"i64x2.extend_low_i32x4_s", TokenType::Unary, Opcode::I64X2ExtendLowI32X4S},
{""},
+#line 456 "src/lexer-keywords.txt"
+ {"i64x2.extend_low_i32x4_u", TokenType::Unary, Opcode::I64X2ExtendLowI32X4U},
#line 151 "src/lexer-keywords.txt"
{"f64x2.max", TokenType::Binary, Opcode::F64X2Max},
+ {""}, {""}, {""}, {""},
+#line 459 "src/lexer-keywords.txt"
+ {"i64x2.shl", TokenType::Binary, Opcode::I64X2Shl},
+ {""},
+#line 194 "src/lexer-keywords.txt"
+ {"i16x8.lt_s", TokenType::Compare, Opcode::I16X8LtS},
+#line 213 "src/lexer-keywords.txt"
+ {"i16x8.sub", TokenType::Binary, Opcode::I16X8Sub},
+#line 195 "src/lexer-keywords.txt"
+ {"i16x8.lt_u", TokenType::Compare, Opcode::I16X8LtU},
+#line 464 "src/lexer-keywords.txt"
+ {"i64x2.extmul_low_i32x4_s", TokenType::Binary, Opcode::I64X2ExtmulLowI32X4S},
+#line 41 "src/lexer-keywords.txt"
+ {"delegate", TokenType::Delegate},
+#line 466 "src/lexer-keywords.txt"
+ {"i64x2.extmul_low_i32x4_u", TokenType::Binary, Opcode::I64X2ExtmulLowI32X4U},
+#line 190 "src/lexer-keywords.txt"
+ {"i16x8.le_s", TokenType::Compare, Opcode::I16X8LeS},
+ {""},
+#line 191 "src/lexer-keywords.txt"
+ {"i16x8.le_u", TokenType::Compare, Opcode::I16X8LeU},
+#line 164 "src/lexer-keywords.txt"
+ {"f64x2.convert_low_i32x4_s", TokenType::Unary, Opcode::F64X2ConvertLowI32X4S},
+ {""},
+#line 165 "src/lexer-keywords.txt"
+ {"f64x2.convert_low_i32x4_u", TokenType::Unary, Opcode::F64X2ConvertLowI32X4U},
+ {""}, {""}, {""}, {""},
#line 436 "src/lexer-keywords.txt"
{"i64.trunc_sat_f64_s", TokenType::Convert, Opcode::I64TruncSatF64S},
#line 298 "src/lexer-keywords.txt"
@@ -1054,11 +1059,6 @@ Perfect_Hash::InWordSet (const char *str, size_t len)
#line 299 "src/lexer-keywords.txt"
{"i32.trunc_sat_f64_u", TokenType::Convert, Opcode::I32TruncSatF64U},
{""}, {""},
-#line 121 "src/lexer-keywords.txt"
- {"f64.floor", TokenType::Unary, Opcode::F64Floor},
-#line 64 "src/lexer-keywords.txt"
- {"f32.floor", TokenType::Unary, Opcode::F32Floor},
- {""}, {""}, {""}, {""},
#line 423 "src/lexer-keywords.txt"
{"i64.shr_s", TokenType::Binary, Opcode::I64ShrS},
#line 286 "src/lexer-keywords.txt"
@@ -1068,391 +1068,400 @@ Perfect_Hash::InWordSet (const char *str, size_t len)
{"i64.shr_u", TokenType::Binary, Opcode::I64ShrU},
#line 287 "src/lexer-keywords.txt"
{"i32.shr_u", TokenType::Binary, Opcode::I32ShrU},
- {""}, {""}, {""}, {""}, {""},
-#line 35 "src/lexer-keywords.txt"
- {"catch", TokenType::Catch, Opcode::Catch},
- {""}, {""},
-#line 205 "src/lexer-keywords.txt"
- {"i16x8.ne", TokenType::Compare, Opcode::I16X8Ne},
-#line 595 "src/lexer-keywords.txt"
- {"f64.promote/f32", TokenType::Convert, Opcode::F64PromoteF32},
- {""}, {""},
-#line 213 "src/lexer-keywords.txt"
- {"i16x8.sub", TokenType::Binary, Opcode::I16X8Sub},
+#line 157 "src/lexer-keywords.txt"
+ {"f64x2.pmax", TokenType::Binary, Opcode::F64X2PMax},
{""}, {""}, {""},
-#line 598 "src/lexer-keywords.txt"
- {"get_local", TokenType::LocalGet, Opcode::LocalGet},
- {""},
-#line 194 "src/lexer-keywords.txt"
- {"i16x8.lt_s", TokenType::Compare, Opcode::I16X8LtS},
+#line 200 "src/lexer-keywords.txt"
+ {"i16x8.mul", TokenType::Binary, Opcode::I16X8Mul},
+#line 522 "src/lexer-keywords.txt"
+ {"memory.init", TokenType::MemoryInit, Opcode::MemoryInit},
+#line 441 "src/lexer-keywords.txt"
+ {"v128.load32x2_s", TokenType::Load, Opcode::V128Load32X2S},
{""},
-#line 195 "src/lexer-keywords.txt"
- {"i16x8.lt_u", TokenType::Compare, Opcode::I16X8LtU},
+#line 442 "src/lexer-keywords.txt"
+ {"v128.load32x2_u", TokenType::Load, Opcode::V128Load32X2U},
{""}, {""}, {""},
-#line 190 "src/lexer-keywords.txt"
- {"i16x8.le_s", TokenType::Compare, Opcode::I16X8LeS},
- {""},
-#line 191 "src/lexer-keywords.txt"
- {"i16x8.le_u", TokenType::Compare, Opcode::I16X8LeU},
- {""},
-#line 198 "src/lexer-keywords.txt"
- {"i16x8.min_s", TokenType::Binary, Opcode::I16X8MinS},
-#line 134 "src/lexer-keywords.txt"
- {"f64.reinterpret_i64", TokenType::Convert, Opcode::F64ReinterpretI64},
- {""}, {""},
-#line 199 "src/lexer-keywords.txt"
- {"i16x8.min_u", TokenType::Binary, Opcode::I16X8MinU},
-#line 41 "src/lexer-keywords.txt"
- {"delegate", TokenType::Delegate},
+#line 176 "src/lexer-keywords.txt"
+ {"i16x8.abs", TokenType::Unary, Opcode::I16X8Abs},
{""}, {""},
-#line 200 "src/lexer-keywords.txt"
- {"i16x8.mul", TokenType::Binary, Opcode::I16X8Mul},
- {""}, {""}, {""}, {""},
-#line 105 "src/lexer-keywords.txt"
- {"f32x4.sqrt", TokenType::Unary, Opcode::F32X4Sqrt},
+#line 523 "src/lexer-keywords.txt"
+ {"memory.size", TokenType::MemorySize, Opcode::MemorySize},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""},
-#line 459 "src/lexer-keywords.txt"
- {"i64x2.shl", TokenType::Binary, Opcode::I64X2Shl},
+#line 596 "src/lexer-keywords.txt"
+ {"f64.convert_s/i64", TokenType::Convert, Opcode::F64ConvertI64S},
+#line 590 "src/lexer-keywords.txt"
+ {"f32.convert_s/i64", TokenType::Convert, Opcode::F32ConvertI64S},
+#line 598 "src/lexer-keywords.txt"
+ {"f64.convert_u/i64", TokenType::Convert, Opcode::F64ConvertI64U},
+#line 592 "src/lexer-keywords.txt"
+ {"f32.convert_u/i64", TokenType::Convert, Opcode::F32ConvertI64U},
+ {""}, {""}, {""},
+#line 602 "src/lexer-keywords.txt"
+ {"get_local", TokenType::LocalGet, Opcode::LocalGet},
+#line 76 "src/lexer-keywords.txt"
+ {"f32.reinterpret_i32", TokenType::Convert, Opcode::F32ReinterpretI32},
+ {""}, {""}, {""}, {""}, {""},
+#line 460 "src/lexer-keywords.txt"
+ {"i64x2.shr_s", TokenType::Binary, Opcode::I64X2ShrS},
+#line 357 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw16.or_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw16OrU},
+#line 233 "src/lexer-keywords.txt"
+ {"i32.atomic.rmw16.or_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw16OrU},
+#line 624 "src/lexer-keywords.txt"
+ {"set_global", TokenType::GlobalSet, Opcode::GlobalSet},
+#line 461 "src/lexer-keywords.txt"
+ {"i64x2.shr_u", TokenType::Binary, Opcode::I64X2ShrU},
+#line 211 "src/lexer-keywords.txt"
+ {"i16x8.sub_sat_s", TokenType::Binary, Opcode::I16X8SubSatS},
{""},
+#line 212 "src/lexer-keywords.txt"
+ {"i16x8.sub_sat_u", TokenType::Binary, Opcode::I16X8SubSatU},
+ {""}, {""}, {""},
+#line 179 "src/lexer-keywords.txt"
+ {"i16x8.add", TokenType::Binary, Opcode::I16X8Add},
+ {""}, {""}, {""},
+#line 392 "src/lexer-keywords.txt"
+ {"i64.eqz", TokenType::Convert, Opcode::I64Eqz},
+#line 260 "src/lexer-keywords.txt"
+ {"i32.eqz", TokenType::Convert, Opcode::I32Eqz},
+ {""}, {""},
#line 535 "src/lexer-keywords.txt"
{"ref.func", TokenType::RefFunc, Opcode::RefFunc},
-#line 145 "src/lexer-keywords.txt"
- {"f64x2.extract_lane", TokenType::SimdLaneOp, Opcode::F64X2ExtractLane},
- {""}, {""},
-#line 440 "src/lexer-keywords.txt"
- {"i64x2.extract_lane", TokenType::SimdLaneOp, Opcode::I64X2ExtractLane},
-#line 192 "src/lexer-keywords.txt"
- {"v128.load8x8_s", TokenType::Load, Opcode::V128Load8X8S},
-#line 164 "src/lexer-keywords.txt"
- {"f64x2.convert_low_i32x4_s", TokenType::Unary, Opcode::F64X2ConvertLowI32X4S},
- {""},
-#line 165 "src/lexer-keywords.txt"
- {"f64x2.convert_low_i32x4_u", TokenType::Unary, Opcode::F64X2ConvertLowI32X4U},
-#line 193 "src/lexer-keywords.txt"
- {"v128.load8x8_u", TokenType::Load, Opcode::V128Load8X8U},
+ {""}, {""}, {""}, {""}, {""},
+#line 520 "src/lexer-keywords.txt"
+ {"memory.fill", TokenType::MemoryFill, Opcode::MemoryFill},
+ {""}, {""}, {""}, {""}, {""},
+#line 133 "src/lexer-keywords.txt"
+ {"f64.promote_f32", TokenType::Convert, Opcode::F64PromoteF32},
+#line 182 "src/lexer-keywords.txt"
+ {"i16x8.bitmask", TokenType::Unary, Opcode::I16X8Bitmask},
{""}, {""},
-#line 551 "src/lexer-keywords.txt"
- {"table.grow", TokenType::TableGrow, Opcode::TableGrow},
- {""}, {""}, {""}, {""},
#line 92 "src/lexer-keywords.txt"
{"f32x4.gt", TokenType::Compare, Opcode::F32X4Gt},
-#line 220 "src/lexer-keywords.txt"
- {"i16x8", TokenType::I16X8},
- {""}, {""}, {""}, {""}, {""}, {""},
-#line 176 "src/lexer-keywords.txt"
- {"i16x8.abs", TokenType::Unary, Opcode::I16X8Abs},
-#line 620 "src/lexer-keywords.txt"
- {"set_global", TokenType::GlobalSet, Opcode::GlobalSet},
- {""}, {""},
+#line 159 "src/lexer-keywords.txt"
+ {"f64x2.replace_lane", TokenType::SimdLaneOp, Opcode::F64X2ReplaceLane},
+#line 577 "src/lexer-keywords.txt"
+ {"v128.load8_splat", TokenType::Load, Opcode::V128Load8Splat},
+ {""},
+#line 458 "src/lexer-keywords.txt"
+ {"i64x2.replace_lane", TokenType::SimdLaneOp, Opcode::I64X2ReplaceLane},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""},
#line 91 "src/lexer-keywords.txt"
{"f32x4.ge", TokenType::Compare, Opcode::F32X4Ge},
- {""}, {""}, {""},
#line 310 "src/lexer-keywords.txt"
{"i32x4.gt_s", TokenType::Compare, Opcode::I32X4GtS},
{""},
#line 311 "src/lexer-keywords.txt"
{"i32x4.gt_u", TokenType::Compare, Opcode::I32X4GtU},
- {""}, {""},
-#line 596 "src/lexer-keywords.txt"
- {"f64.reinterpret/i64", TokenType::Convert, Opcode::F64ReinterpretI64},
+ {""}, {""}, {""},
#line 308 "src/lexer-keywords.txt"
{"i32x4.ge_s", TokenType::Compare, Opcode::I32X4GeS},
-#line 367 "src/lexer-keywords.txt"
- {"i64.atomic.rmw32.xor_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw32XorU},
+ {""},
#line 309 "src/lexer-keywords.txt"
{"i32x4.ge_u", TokenType::Compare, Opcode::I32X4GeU},
+ {""}, {""},
+#line 322 "src/lexer-keywords.txt"
+ {"i32x4.dot_i16x8_s", TokenType::Binary, Opcode::I32X4DotI16X8S},
{""},
-#line 505 "src/lexer-keywords.txt"
- {"i8x16", TokenType::I8X16},
+#line 367 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw32.xor_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw32XorU},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 573 "src/lexer-keywords.txt"
+ {"v128.xor", TokenType::Binary, Opcode::V128Xor},
+ {""}, {""},
+#line 134 "src/lexer-keywords.txt"
+ {"f64.reinterpret_i64", TokenType::Convert, Opcode::F64ReinterpretI64},
+#line 576 "src/lexer-keywords.txt"
+ {"v128.load64_splat", TokenType::Load, Opcode::V128Load64Splat},
+#line 575 "src/lexer-keywords.txt"
+ {"v128.load32_splat", TokenType::Load, Opcode::V128Load32Splat},
+#line 551 "src/lexer-keywords.txt"
+ {"table.grow", TokenType::TableGrow, Opcode::TableGrow},
+ {""}, {""},
+#line 314 "src/lexer-keywords.txt"
+ {"v128.load16x4_s", TokenType::Load, Opcode::V128Load16X4S},
{""},
-#line 144 "src/lexer-keywords.txt"
- {"f64x2.eq", TokenType::Compare, Opcode::F64X2Eq},
-#line 76 "src/lexer-keywords.txt"
- {"f32.reinterpret_i32", TokenType::Convert, Opcode::F32ReinterpretI32},
+#line 315 "src/lexer-keywords.txt"
+ {"v128.load16x4_u", TokenType::Load, Opcode::V128Load16X4U},
{""},
-#line 444 "src/lexer-keywords.txt"
- {"i64x2.eq", TokenType::Binary, Opcode::I64X2Eq},
-#line 460 "src/lexer-keywords.txt"
- {"i64x2.shr_s", TokenType::Binary, Opcode::I64X2ShrS},
-#line 322 "src/lexer-keywords.txt"
- {"i32x4.dot_i16x8_s", TokenType::Binary, Opcode::I32X4DotI16X8S},
-#line 102 "src/lexer-keywords.txt"
- {"f32x4.pmin", TokenType::Binary, Opcode::F32X4PMin},
-#line 464 "src/lexer-keywords.txt"
- {"i64x2.extmul_low_i32x4_s", TokenType::Binary, Opcode::I64X2ExtmulLowI32X4S},
-#line 461 "src/lexer-keywords.txt"
- {"i64x2.shr_u", TokenType::Binary, Opcode::I64X2ShrU},
-#line 466 "src/lexer-keywords.txt"
- {"i64x2.extmul_low_i32x4_u", TokenType::Binary, Opcode::I64X2ExtmulLowI32X4U},
+#line 371 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw8.or_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw8OrU},
+#line 240 "src/lexer-keywords.txt"
+ {"i32.atomic.rmw8.or_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw8OrU},
+ {""},
+#line 177 "src/lexer-keywords.txt"
+ {"i16x8.add_sat_s", TokenType::Binary, Opcode::I16X8AddSatS},
+ {""},
+#line 178 "src/lexer-keywords.txt"
+ {"i16x8.add_sat_u", TokenType::Binary, Opcode::I16X8AddSatU},
{""}, {""},
-#line 360 "src/lexer-keywords.txt"
- {"i64.atomic.rmw16.xor_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw16XorU},
-#line 236 "src/lexer-keywords.txt"
- {"i32.atomic.rmw16.xor_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw16XorU},
- {""}, {""}, {""}, {""}, {""}, {""},
-#line 104 "src/lexer-keywords.txt"
- {"f32x4.splat", TokenType::Unary, Opcode::F32X4Splat},
+#line 25 "src/lexer-keywords.txt"
+ {"assert_trap", TokenType::AssertTrap},
{""},
-#line 454 "src/lexer-keywords.txt"
- {"i64x2.extend_low_i32x4_s", TokenType::Unary, Opcode::I64X2ExtendLowI32X4S},
-#line 330 "src/lexer-keywords.txt"
- {"i32x4.splat", TokenType::Unary, Opcode::I32X4Splat},
-#line 456 "src/lexer-keywords.txt"
- {"i64x2.extend_low_i32x4_u", TokenType::Unary, Opcode::I64X2ExtendLowI32X4U},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 211 "src/lexer-keywords.txt"
- {"i16x8.sub_sat_s", TokenType::Binary, Opcode::I16X8SubSatS},
+#line 350 "src/lexer-keywords.txt"
+ {"i64.atomic.load16_u", TokenType::AtomicLoad, Opcode::I64AtomicLoad16U},
+#line 227 "src/lexer-keywords.txt"
+ {"i32.atomic.load16_u", TokenType::AtomicLoad, Opcode::I32AtomicLoad16U},
+#line 366 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw32.xchg_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw32XchgU},
+ {""},
+#line 594 "src/lexer-keywords.txt"
+ {"f32.reinterpret/i32", TokenType::Convert, Opcode::F32ReinterpretI32},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""},
+#line 89 "src/lexer-keywords.txt"
+ {"f32x4.extract_lane", TokenType::SimdLaneOp, Opcode::F32X4ExtractLane},
{""},
-#line 212 "src/lexer-keywords.txt"
- {"i16x8.sub_sat_u", TokenType::Binary, Opcode::I16X8SubSatU},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
#line 496 "src/lexer-keywords.txt"
{"i8x16.ne", TokenType::Compare, Opcode::I8X16Ne},
+#line 307 "src/lexer-keywords.txt"
+ {"i32x4.extract_lane", TokenType::SimdLaneOp, Opcode::I32X4ExtractLane},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 490 "src/lexer-keywords.txt"
+ {"i8x16.min_s", TokenType::Binary, Opcode::I8X16MinS},
{""}, {""}, {""},
-#line 504 "src/lexer-keywords.txt"
- {"i8x16.sub", TokenType::Binary, Opcode::I8X16Sub},
+#line 491 "src/lexer-keywords.txt"
+ {"i8x16.min_u", TokenType::Binary, Opcode::I8X16MinU},
{""}, {""}, {""}, {""}, {""},
+#line 560 "src/lexer-keywords.txt"
+ {"unreachable", TokenType::Unreachable, Opcode::Unreachable},
+#line 599 "src/lexer-keywords.txt"
+ {"f64.promote/f32", TokenType::Convert, Opcode::F64PromoteF32},
+ {""}, {""}, {""}, {""}, {""}, {""},
+#line 121 "src/lexer-keywords.txt"
+ {"f64.floor", TokenType::Unary, Opcode::F64Floor},
+#line 64 "src/lexer-keywords.txt"
+ {"f32.floor", TokenType::Unary, Opcode::F32Floor},
#line 486 "src/lexer-keywords.txt"
{"i8x16.lt_s", TokenType::Compare, Opcode::I8X16LtS},
- {""},
+#line 504 "src/lexer-keywords.txt"
+ {"i8x16.sub", TokenType::Binary, Opcode::I8X16Sub},
#line 487 "src/lexer-keywords.txt"
{"i8x16.lt_u", TokenType::Compare, Opcode::I8X16LtU},
-#line 179 "src/lexer-keywords.txt"
- {"i16x8.add", TokenType::Binary, Opcode::I16X8Add},
{""},
-#line 568 "src/lexer-keywords.txt"
- {"v128.any_true", TokenType::Unary, Opcode::V128AnyTrue},
+#line 538 "src/lexer-keywords.txt"
+ {"register", TokenType::Register},
+#line 343 "src/lexer-keywords.txt"
+ {"i32x4.extend_low_i16x8_s", TokenType::Unary, Opcode::I32X4ExtendLowI16X8S},
#line 484 "src/lexer-keywords.txt"
{"i8x16.le_s", TokenType::Compare, Opcode::I8X16LeS},
-#line 590 "src/lexer-keywords.txt"
- {"f32.reinterpret/i32", TokenType::Convert, Opcode::F32ReinterpretI32},
+#line 344 "src/lexer-keywords.txt"
+ {"i32x4.extend_low_i16x8_u", TokenType::Unary, Opcode::I32X4ExtendLowI16X8U},
#line 485 "src/lexer-keywords.txt"
{"i8x16.le_u", TokenType::Compare, Opcode::I8X16LeU},
+#line 527 "src/lexer-keywords.txt"
+ {"nan:arithmetic", TokenType::NanArithmetic},
+#line 105 "src/lexer-keywords.txt"
+ {"f32x4.sqrt", TokenType::Unary, Opcode::F32X4Sqrt},
{""},
-#line 490 "src/lexer-keywords.txt"
- {"i8x16.min_s", TokenType::Binary, Opcode::I8X16MinS},
- {""}, {""}, {""},
-#line 491 "src/lexer-keywords.txt"
- {"i8x16.min_u", TokenType::Binary, Opcode::I8X16MinU},
- {""}, {""}, {""}, {""}, {""}, {""},
-#line 577 "src/lexer-keywords.txt"
- {"v128.load8_splat", TokenType::Load, Opcode::V128Load8Splat},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 366 "src/lexer-keywords.txt"
- {"i64.atomic.rmw32.xchg_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw32XchgU},
-#line 529 "src/lexer-keywords.txt"
- {"nop", TokenType::Nop, Opcode::Nop},
+#line 220 "src/lexer-keywords.txt"
+ {"i16x8", TokenType::I16X8},
{""}, {""}, {""}, {""}, {""},
-#line 182 "src/lexer-keywords.txt"
- {"i16x8.bitmask", TokenType::Unary, Opcode::I16X8Bitmask},
+#line 334 "src/lexer-keywords.txt"
+ {"i32x4.extmul_low_i16x8_s", TokenType::Binary, Opcode::I32X4ExtmulLowI16X8S},
{""},
-#line 615 "src/lexer-keywords.txt"
- {"i64.trunc_s:sat/f64", TokenType::Convert, Opcode::I64TruncSatF64S},
-#line 603 "src/lexer-keywords.txt"
- {"i32.trunc_s:sat/f64", TokenType::Convert, Opcode::I32TruncSatF64S},
-#line 619 "src/lexer-keywords.txt"
- {"i64.trunc_u:sat/f64", TokenType::Convert, Opcode::I64TruncSatF64U},
-#line 607 "src/lexer-keywords.txt"
- {"i32.trunc_u:sat/f64", TokenType::Convert, Opcode::I32TruncSatF64U},
-#line 157 "src/lexer-keywords.txt"
- {"f64x2.pmax", TokenType::Binary, Opcode::F64X2PMax},
- {""}, {""}, {""},
-#line 359 "src/lexer-keywords.txt"
- {"i64.atomic.rmw16.xchg_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw16XchgU},
-#line 235 "src/lexer-keywords.txt"
- {"i32.atomic.rmw16.xchg_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw16XchgU},
- {""}, {""}, {""}, {""}, {""},
-#line 584 "src/lexer-keywords.txt"
- {"anyfunc", Type::FuncRef},
-#line 350 "src/lexer-keywords.txt"
- {"i64.atomic.load16_u", TokenType::AtomicLoad, Opcode::I64AtomicLoad16U},
-#line 227 "src/lexer-keywords.txt"
- {"i32.atomic.load16_u", TokenType::AtomicLoad, Opcode::I32AtomicLoad16U},
+#line 336 "src/lexer-keywords.txt"
+ {"i32x4.extmul_low_i16x8_u", TokenType::Binary, Opcode::I32X4ExtmulLowI16X8U},
+ {""}, {""}, {""}, {""}, {""}, {""},
+#line 95 "src/lexer-keywords.txt"
+ {"f32x4.max", TokenType::Binary, Opcode::F32X4Max},
+ {""}, {""}, {""}, {""},
+#line 327 "src/lexer-keywords.txt"
+ {"i32x4.shl", TokenType::Binary, Opcode::I32X4Shl},
+#line 600 "src/lexer-keywords.txt"
+ {"f64.reinterpret/i64", TokenType::Convert, Opcode::F64ReinterpretI64},
+ {""}, {""},
+#line 360 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw16.xor_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw16XorU},
+#line 236 "src/lexer-keywords.txt"
+ {"i32.atomic.rmw16.xor_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw16XorU},
+ {""}, {""}, {""}, {""},
#line 470 "src/lexer-keywords.txt"
{"i8x16.abs", TokenType::Unary, Opcode::I8X16Abs},
#line 301 "src/lexer-keywords.txt"
{"i32.wrap_i64", TokenType::Convert, Opcode::I32WrapI64},
- {""},
-#line 518 "src/lexer-keywords.txt"
- {"memory.atomic.wait64", TokenType::AtomicWait, Opcode::MemoryAtomicWait64},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 560 "src/lexer-keywords.txt"
- {"unreachable", TokenType::Unreachable, Opcode::Unreachable},
- {""}, {""}, {""}, {""}, {""}, {""},
-#line 95 "src/lexer-keywords.txt"
- {"f32x4.max", TokenType::Binary, Opcode::F32X4Max},
+ {""}, {""}, {""},
+#line 505 "src/lexer-keywords.txt"
+ {"i8x16", TokenType::I8X16},
{""}, {""},
+#line 574 "src/lexer-keywords.txt"
+ {"v128.load16_splat", TokenType::Load, Opcode::V128Load16Splat},
+#line 416 "src/lexer-keywords.txt"
+ {"i64.popcnt", TokenType::Unary, Opcode::I64Popcnt},
+#line 279 "src/lexer-keywords.txt"
+ {"i32.popcnt", TokenType::Unary, Opcode::I32Popcnt},
+ {""},
#line 180 "src/lexer-keywords.txt"
{"i16x8.all_true", TokenType::Unary, Opcode::I16X8AllTrue},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 558 "src/lexer-keywords.txt"
- {"try", TokenType::Try, Opcode::Try},
- {""}, {""},
-#line 576 "src/lexer-keywords.txt"
- {"v128.load64_splat", TokenType::Load, Opcode::V128Load64Splat},
-#line 575 "src/lexer-keywords.txt"
- {"v128.load32_splat", TokenType::Load, Opcode::V128Load32Splat},
- {""}, {""}, {""},
-#line 177 "src/lexer-keywords.txt"
- {"i16x8.add_sat_s", TokenType::Binary, Opcode::I16X8AddSatS},
{""},
-#line 178 "src/lexer-keywords.txt"
- {"i16x8.add_sat_u", TokenType::Binary, Opcode::I16X8AddSatU},
+#line 85 "src/lexer-keywords.txt"
+ {"f32x4.convert_i32x4_s", TokenType::Unary, Opcode::F32X4ConvertI32X4S},
+ {""},
+#line 86 "src/lexer-keywords.txt"
+ {"f32x4.convert_i32x4_u", TokenType::Unary, Opcode::F32X4ConvertI32X4U},
+ {""},
+#line 44 "src/lexer-keywords.txt"
+ {"elem.drop", TokenType::ElemDrop, Opcode::ElemDrop},
{""}, {""}, {""},
-#line 131 "src/lexer-keywords.txt"
- {"f64.neg", TokenType::Unary, Opcode::F64Neg},
-#line 74 "src/lexer-keywords.txt"
- {"f32.neg", TokenType::Unary, Opcode::F32Neg},
+#line 101 "src/lexer-keywords.txt"
+ {"f32x4.pmax", TokenType::Binary, Opcode::F32X4PMax},
+ {""}, {""}, {""},
+#line 38 "src/lexer-keywords.txt"
+ {"data.drop", TokenType::DataDrop, Opcode::DataDrop},
{""},
-#line 614 "src/lexer-keywords.txt"
- {"i64.trunc_s:sat/f32", TokenType::Convert, Opcode::I64TruncSatF32S},
-#line 602 "src/lexer-keywords.txt"
- {"i32.trunc_s:sat/f32", TokenType::Convert, Opcode::I32TruncSatF32S},
-#line 618 "src/lexer-keywords.txt"
- {"i64.trunc_u:sat/f32", TokenType::Convert, Opcode::I64TruncSatF32U},
-#line 606 "src/lexer-keywords.txt"
- {"i32.trunc_u:sat/f32", TokenType::Convert, Opcode::I32TruncSatF32U},
-#line 574 "src/lexer-keywords.txt"
- {"v128.load16_splat", TokenType::Load, Opcode::V128Load16Splat},
+#line 359 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw16.xchg_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw16XchgU},
+#line 235 "src/lexer-keywords.txt"
+ {"i32.atomic.rmw16.xchg_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw16XchgU},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""},
#line 502 "src/lexer-keywords.txt"
{"i8x16.sub_sat_s", TokenType::Binary, Opcode::I8X16SubSatS},
{""},
#line 503 "src/lexer-keywords.txt"
{"i8x16.sub_sat_u", TokenType::Binary, Opcode::I8X16SubSatU},
- {""}, {""},
-#line 371 "src/lexer-keywords.txt"
- {"i64.atomic.rmw8.or_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw8OrU},
-#line 240 "src/lexer-keywords.txt"
- {"i32.atomic.rmw8.or_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw8OrU},
-#line 608 "src/lexer-keywords.txt"
- {"i32.wrap/i64", TokenType::Convert, Opcode::I32WrapI64},
- {""}, {""},
-#line 28 "src/lexer-keywords.txt"
- {"binary", TokenType::Bin},
-#line 524 "src/lexer-keywords.txt"
- {"memory", TokenType::Memory},
{""}, {""}, {""},
-#line 517 "src/lexer-keywords.txt"
- {"memory.atomic.wait32", TokenType::AtomicWait, Opcode::MemoryAtomicWait32},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
#line 473 "src/lexer-keywords.txt"
{"i8x16.add", TokenType::Binary, Opcode::I8X16Add},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""},
-#line 327 "src/lexer-keywords.txt"
- {"i32x4.shl", TokenType::Binary, Opcode::I32X4Shl},
- {""}, {""},
-#line 89 "src/lexer-keywords.txt"
- {"f32x4.extract_lane", TokenType::SimdLaneOp, Opcode::F32X4ExtractLane},
- {""}, {""},
-#line 307 "src/lexer-keywords.txt"
- {"i32x4.extract_lane", TokenType::SimdLaneOp, Opcode::I32X4ExtractLane},
+ {""}, {""}, {""},
+#line 120 "src/lexer-keywords.txt"
+ {"f64.eq", TokenType::Compare, Opcode::F64Eq},
+#line 63 "src/lexer-keywords.txt"
+ {"f32.eq", TokenType::Compare, Opcode::F32Eq},
{""},
-#line 172 "src/lexer-keywords.txt"
- {"global.get", TokenType::GlobalGet, Opcode::GlobalGet},
+#line 391 "src/lexer-keywords.txt"
+ {"i64.eq", TokenType::Compare, Opcode::I64Eq},
+#line 259 "src/lexer-keywords.txt"
+ {"i32.eq", TokenType::Compare, Opcode::I32Eq},
+ {""}, {""},
+#line 469 "src/lexer-keywords.txt"
+ {"i64.xor", TokenType::Binary, Opcode::I64Xor},
+#line 347 "src/lexer-keywords.txt"
+ {"i32.xor", TokenType::Binary, Opcode::I32Xor},
{""},
#line 384 "src/lexer-keywords.txt"
{"i64.atomic.store8", TokenType::AtomicStore, Opcode::I64AtomicStore8},
#line 252 "src/lexer-keywords.txt"
{"i32.atomic.store8", TokenType::AtomicStore, Opcode::I32AtomicStore8},
- {""}, {""},
-#line 416 "src/lexer-keywords.txt"
- {"i64.popcnt", TokenType::Unary, Opcode::I64Popcnt},
-#line 279 "src/lexer-keywords.txt"
- {"i32.popcnt", TokenType::Unary, Opcode::I32Popcnt},
- {""},
-#line 334 "src/lexer-keywords.txt"
- {"i32x4.extmul_low_i16x8_s", TokenType::Binary, Opcode::I32X4ExtmulLowI16X8S},
+#line 618 "src/lexer-keywords.txt"
+ {"i64.trunc_s:sat/f32", TokenType::Convert, Opcode::I64TruncSatF32S},
+#line 606 "src/lexer-keywords.txt"
+ {"i32.trunc_s:sat/f32", TokenType::Convert, Opcode::I32TruncSatF32S},
+#line 622 "src/lexer-keywords.txt"
+ {"i64.trunc_u:sat/f32", TokenType::Convert, Opcode::I64TruncSatF32U},
+#line 610 "src/lexer-keywords.txt"
+ {"i32.trunc_u:sat/f32", TokenType::Convert, Opcode::I32TruncSatF32U},
{""},
-#line 336 "src/lexer-keywords.txt"
- {"i32x4.extmul_low_i16x8_u", TokenType::Binary, Opcode::I32X4ExtmulLowI16X8U},
-#line 527 "src/lexer-keywords.txt"
- {"nan:arithmetic", TokenType::NanArithmetic},
#line 476 "src/lexer-keywords.txt"
{"i8x16.bitmask", TokenType::Unary, Opcode::I8X16Bitmask},
- {""}, {""}, {""},
-#line 155 "src/lexer-keywords.txt"
- {"f64x2.neg", TokenType::Unary, Opcode::F64X2Neg},
- {""}, {""},
-#line 451 "src/lexer-keywords.txt"
- {"i64x2.neg", TokenType::Unary, Opcode::I64X2Neg},
- {""}, {""}, {""},
-#line 343 "src/lexer-keywords.txt"
- {"i32x4.extend_low_i16x8_s", TokenType::Unary, Opcode::I32X4ExtendLowI16X8S},
- {""},
-#line 344 "src/lexer-keywords.txt"
- {"i32x4.extend_low_i16x8_u", TokenType::Unary, Opcode::I32X4ExtendLowI16X8U},
- {""}, {""}, {""}, {""},
-#line 159 "src/lexer-keywords.txt"
- {"f64x2.replace_lane", TokenType::SimdLaneOp, Opcode::F64X2ReplaceLane},
- {""}, {""},
-#line 458 "src/lexer-keywords.txt"
- {"i64x2.replace_lane", TokenType::SimdLaneOp, Opcode::I64X2ReplaceLane},
- {""}, {""}, {""}, {""},
-#line 88 "src/lexer-keywords.txt"
- {"f32x4.eq", TokenType::Compare, Opcode::F32X4Eq},
- {""}, {""},
-#line 306 "src/lexer-keywords.txt"
- {"i32x4.eq", TokenType::Compare, Opcode::I32X4Eq},
+#line 166 "src/lexer-keywords.txt"
+ {"f64x2.promote_low_f32x4", TokenType::Unary, Opcode::F64X2PromoteLowF32X4},
#line 328 "src/lexer-keywords.txt"
{"i32x4.shr_s", TokenType::Binary, Opcode::I32X4ShrS},
-#line 374 "src/lexer-keywords.txt"
- {"i64.atomic.rmw8.xor_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw8XorU},
-#line 243 "src/lexer-keywords.txt"
- {"i32.atomic.rmw8.xor_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw8XorU},
- {""},
+#line 20 "src/lexer-keywords.txt"
+ {"array", Type::Array, TokenType::Array},
+ {""}, {""},
#line 329 "src/lexer-keywords.txt"
{"i32x4.shr_u", TokenType::Binary, Opcode::I32X4ShrU},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 474 "src/lexer-keywords.txt"
- {"i8x16.all_true", TokenType::Unary, Opcode::I8X16AllTrue},
- {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""},
+#line 192 "src/lexer-keywords.txt"
+ {"v128.load8x8_s", TokenType::Load, Opcode::V128Load8X8S},
+ {""}, {""}, {""},
+#line 193 "src/lexer-keywords.txt"
+ {"v128.load8x8_u", TokenType::Load, Opcode::V128Load8X8U},
+ {""}, {""}, {""}, {""}, {""}, {""},
#line 196 "src/lexer-keywords.txt"
{"i16x8.max_s", TokenType::Binary, Opcode::I16X8MaxS},
{""}, {""}, {""},
#line 197 "src/lexer-keywords.txt"
{"i16x8.max_u", TokenType::Binary, Opcode::I16X8MaxU},
+ {""}, {""}, {""},
+#line 210 "src/lexer-keywords.txt"
+ {"i16x8.splat", TokenType::Unary, Opcode::I16X8Splat},
+ {""},
+#line 588 "src/lexer-keywords.txt"
+ {"anyfunc", Type::FuncRef},
+ {""}, {""}, {""}, {""}, {""},
+#line 103 "src/lexer-keywords.txt"
+ {"f32x4.replace_lane", TokenType::SimdLaneOp, Opcode::F32X4ReplaceLane},
+ {""},
+#line 612 "src/lexer-keywords.txt"
+ {"i32.wrap/i64", TokenType::Convert, Opcode::I32WrapI64},
+#line 326 "src/lexer-keywords.txt"
+ {"i32x4.replace_lane", TokenType::SimdLaneOp, Opcode::I32X4ReplaceLane},
{""}, {""}, {""}, {""}, {""},
+#line 144 "src/lexer-keywords.txt"
+ {"f64x2.eq", TokenType::Compare, Opcode::F64X2Eq},
+ {""}, {""},
+#line 444 "src/lexer-keywords.txt"
+ {"i64x2.eq", TokenType::Binary, Opcode::I64X2Eq},
+ {""}, {""}, {""},
#line 471 "src/lexer-keywords.txt"
{"i8x16.add_sat_s", TokenType::Binary, Opcode::I8X16AddSatS},
{""},
#line 472 "src/lexer-keywords.txt"
{"i8x16.add_sat_u", TokenType::Binary, Opcode::I8X16AddSatU},
- {""}, {""}, {""}, {""}, {""},
-#line 108 "src/lexer-keywords.txt"
- {"f32x4.demote_f64x2_zero", TokenType::Unary, Opcode::F32X4DemoteF64X2Zero},
-#line 25 "src/lexer-keywords.txt"
- {"assert_trap", TokenType::AssertTrap},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 517 "src/lexer-keywords.txt"
+ {"memory.atomic.wait32", TokenType::AtomicWait, Opcode::MemoryAtomicWait32},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""},
-#line 85 "src/lexer-keywords.txt"
- {"f32x4.convert_i32x4_s", TokenType::Unary, Opcode::F32X4ConvertI32X4S},
{""},
-#line 86 "src/lexer-keywords.txt"
- {"f32x4.convert_i32x4_u", TokenType::Unary, Opcode::F32X4ConvertI32X4U},
+#line 619 "src/lexer-keywords.txt"
+ {"i64.trunc_s:sat/f64", TokenType::Convert, Opcode::I64TruncSatF64S},
+#line 607 "src/lexer-keywords.txt"
+ {"i32.trunc_s:sat/f64", TokenType::Convert, Opcode::I32TruncSatF64S},
+#line 623 "src/lexer-keywords.txt"
+ {"i64.trunc_u:sat/f64", TokenType::Convert, Opcode::I64TruncSatF64U},
+#line 611 "src/lexer-keywords.txt"
+ {"i32.trunc_u:sat/f64", TokenType::Convert, Opcode::I32TruncSatF64U},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""},
+#line 131 "src/lexer-keywords.txt"
+ {"f64.neg", TokenType::Unary, Opcode::F64Neg},
+#line 74 "src/lexer-keywords.txt"
+ {"f32.neg", TokenType::Unary, Opcode::F32Neg},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""},
+#line 155 "src/lexer-keywords.txt"
+ {"f64x2.neg", TokenType::Unary, Opcode::F64X2Neg},
+ {""}, {""},
+#line 451 "src/lexer-keywords.txt"
+ {"i64x2.neg", TokenType::Unary, Opcode::I64X2Neg},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""},
-#line 101 "src/lexer-keywords.txt"
- {"f32x4.pmax", TokenType::Binary, Opcode::F32X4PMax},
- {""}, {""}, {""}, {""}, {""}, {""},
-#line 579 "src/lexer-keywords.txt"
- {"i8x16.swizzle", TokenType::Binary, Opcode::I8X16Swizzle},
- {""}, {""}, {""}, {""}, {""}, {""},
-#line 44 "src/lexer-keywords.txt"
- {"elem.drop", TokenType::ElemDrop, Opcode::ElemDrop},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 518 "src/lexer-keywords.txt"
+ {"memory.atomic.wait64", TokenType::AtomicWait, Opcode::MemoryAtomicWait64},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 363 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw32.cmpxchg_u", TokenType::AtomicRmwCmpxchg, Opcode::I64AtomicRmw32CmpxchgU},
{""}, {""}, {""}, {""}, {""}, {""},
+#line 332 "src/lexer-keywords.txt"
+ {"i32x4.extadd_pairwise_i16x8_s", TokenType::Unary, Opcode::I32X4ExtaddPairwiseI16X8S},
+#line 172 "src/lexer-keywords.txt"
+ {"global.get", TokenType::GlobalGet, Opcode::GlobalGet},
+#line 333 "src/lexer-keywords.txt"
+ {"i32x4.extadd_pairwise_i16x8_u", TokenType::Unary, Opcode::I32X4ExtaddPairwiseI16X8U},
+#line 474 "src/lexer-keywords.txt"
+ {"i8x16.all_true", TokenType::Unary, Opcode::I8X16AllTrue},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""},
#line 548 "src/lexer-keywords.txt"
{"table.copy", TokenType::TableCopy, Opcode::TableCopy},
-#line 166 "src/lexer-keywords.txt"
- {"f64x2.promote_low_f32x4", TokenType::Unary, Opcode::F64X2PromoteLowF32X4},
- {""}, {""}, {""}, {""}, {""},
-#line 38 "src/lexer-keywords.txt"
- {"data.drop", TokenType::DataDrop, Opcode::DataDrop},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""},
+ {""}, {""},
+#line 339 "src/lexer-keywords.txt"
+ {"i32x4.trunc_sat_f32x4_s", TokenType::Unary, Opcode::I32X4TruncSatF32X4S},
+ {""}, {""}, {""},
+#line 340 "src/lexer-keywords.txt"
+ {"i32x4.trunc_sat_f32x4_u", TokenType::Unary, Opcode::I32X4TruncSatF32X4U},
+ {""}, {""},
+#line 568 "src/lexer-keywords.txt"
+ {"v128.any_true", TokenType::Unary, Opcode::V128AnyTrue},
+ {""}, {""},
+#line 108 "src/lexer-keywords.txt"
+ {"f32x4.demote_f64x2_zero", TokenType::Unary, Opcode::F32X4DemoteF64X2Zero},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
#line 188 "src/lexer-keywords.txt"
{"i16x8.gt_s", TokenType::Compare, Opcode::I16X8GtS},
{""},
@@ -1464,65 +1473,97 @@ Perfect_Hash::InWordSet (const char *str, size_t len)
{""},
#line 187 "src/lexer-keywords.txt"
{"i16x8.ge_u", TokenType::Compare, Opcode::I16X8GeU},
+#line 583 "src/lexer-keywords.txt"
+ {"i8x16.swizzle", TokenType::Binary, Opcode::I8X16Swizzle},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""},
#line 488 "src/lexer-keywords.txt"
{"i8x16.max_s", TokenType::Binary, Opcode::I8X16MaxS},
+#line 280 "src/lexer-keywords.txt"
+ {"i32.reinterpret_f32", TokenType::Convert, Opcode::I32ReinterpretF32},
{""}, {""},
-#line 417 "src/lexer-keywords.txt"
- {"i64.reinterpret_f64", TokenType::Convert, Opcode::I64ReinterpretF64},
#line 489 "src/lexer-keywords.txt"
{"i8x16.max_u", TokenType::Binary, Opcode::I8X16MaxU},
+ {""}, {""}, {""},
+#line 501 "src/lexer-keywords.txt"
+ {"i8x16.splat", TokenType::Unary, Opcode::I8X16Splat},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 210 "src/lexer-keywords.txt"
- {"i16x8.splat", TokenType::Unary, Opcode::I16X8Splat},
+ {""}, {""}, {""},
+#line 381 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw.xor", TokenType::AtomicRmw, Opcode::I64AtomicRmwXor},
+#line 250 "src/lexer-keywords.txt"
+ {"i32.atomic.rmw.xor", TokenType::AtomicRmw, Opcode::I32AtomicRmwXor},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 184 "src/lexer-keywords.txt"
+ {"i16x8.extract_lane_s", TokenType::SimdLaneOp, Opcode::I16X8ExtractLaneS},
+ {""},
+#line 185 "src/lexer-keywords.txt"
+ {"i16x8.extract_lane_u", TokenType::SimdLaneOp, Opcode::I16X8ExtractLaneU},
+ {""},
+#line 356 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw16.cmpxchg_u", TokenType::AtomicRmwCmpxchg, Opcode::I64AtomicRmw16CmpxchgU},
+#line 232 "src/lexer-keywords.txt"
+ {"i32.atomic.rmw16.cmpxchg_u", TokenType::AtomicRmwCmpxchg, Opcode::I32AtomicRmw16CmpxchgU},
+ {""}, {""}, {""},
+#line 374 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw8.xor_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw8XorU},
+#line 243 "src/lexer-keywords.txt"
+ {"i32.atomic.rmw8.xor_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw8XorU},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 370 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw8.cmpxchg_u", TokenType::AtomicRmwCmpxchg, Opcode::I64AtomicRmw8CmpxchgU},
+#line 239 "src/lexer-keywords.txt"
+ {"i32.atomic.rmw8.cmpxchg_u", TokenType::AtomicRmwCmpxchg, Opcode::I32AtomicRmw8CmpxchgU},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 88 "src/lexer-keywords.txt"
+ {"f32x4.eq", TokenType::Compare, Opcode::F32X4Eq},
+ {""}, {""},
+#line 306 "src/lexer-keywords.txt"
+ {"i32x4.eq", TokenType::Compare, Opcode::I32X4Eq},
{""}, {""}, {""}, {""}, {""}, {""},
+#line 601 "src/lexer-keywords.txt"
+ {"get_global", TokenType::GlobalGet, Opcode::GlobalGet},
+ {""}, {""},
#line 345 "src/lexer-keywords.txt"
{"i32x4.trunc_sat_f64x2_s_zero", TokenType::Unary, Opcode::I32X4TruncSatF64X2SZero},
{""},
#line 346 "src/lexer-keywords.txt"
{"i32x4.trunc_sat_f64x2_u_zero", TokenType::Unary, Opcode::I32X4TruncSatF64X2UZero},
{""}, {""}, {""}, {""}, {""},
-#line 339 "src/lexer-keywords.txt"
- {"i32x4.trunc_sat_f32x4_s", TokenType::Unary, Opcode::I32X4TruncSatF32X4S},
- {""}, {""}, {""},
-#line 340 "src/lexer-keywords.txt"
- {"i32x4.trunc_sat_f32x4_u", TokenType::Unary, Opcode::I32X4TruncSatF32X4U},
- {""}, {""}, {""}, {""}, {""}, {""},
-#line 597 "src/lexer-keywords.txt"
- {"get_global", TokenType::GlobalGet, Opcode::GlobalGet},
+#line 417 "src/lexer-keywords.txt"
+ {"i64.reinterpret_f64", TokenType::Convert, Opcode::I64ReinterpretF64},
+ {""}, {""}, {""}, {""}, {""},
+#line 207 "src/lexer-keywords.txt"
+ {"i16x8.shl", TokenType::Binary, Opcode::I16X8Shl},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 603 "src/lexer-keywords.txt"
+ {"i32.reinterpret/f32", TokenType::Convert, Opcode::I32ReinterpretF32},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""},
-#line 611 "src/lexer-keywords.txt"
- {"i64.reinterpret/f64", TokenType::Convert, Opcode::I64ReinterpretF64},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 280 "src/lexer-keywords.txt"
- {"i32.reinterpret_f32", TokenType::Convert, Opcode::I32ReinterpretF32},
#line 99 "src/lexer-keywords.txt"
{"f32x4.neg", TokenType::Unary, Opcode::F32X4Neg},
{""}, {""},
#line 324 "src/lexer-keywords.txt"
{"i32x4.neg", TokenType::Unary, Opcode::I32X4Neg},
-#line 363 "src/lexer-keywords.txt"
- {"i64.atomic.rmw32.cmpxchg_u", TokenType::AtomicRmwCmpxchg, Opcode::I64AtomicRmw32CmpxchgU},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 381 "src/lexer-keywords.txt"
- {"i64.atomic.rmw.xor", TokenType::AtomicRmw, Opcode::I64AtomicRmwXor},
-#line 250 "src/lexer-keywords.txt"
- {"i32.atomic.rmw.xor", TokenType::AtomicRmw, Opcode::I32AtomicRmwXor},
-#line 103 "src/lexer-keywords.txt"
- {"f32x4.replace_lane", TokenType::SimdLaneOp, Opcode::F32X4ReplaceLane},
- {""}, {""},
-#line 326 "src/lexer-keywords.txt"
- {"i32x4.replace_lane", TokenType::SimdLaneOp, Opcode::I32X4ReplaceLane},
- {""}, {""}, {""},
-#line 356 "src/lexer-keywords.txt"
- {"i64.atomic.rmw16.cmpxchg_u", TokenType::AtomicRmwCmpxchg, Opcode::I64AtomicRmw16CmpxchgU},
-#line 232 "src/lexer-keywords.txt"
- {"i32.atomic.rmw16.cmpxchg_u", TokenType::AtomicRmwCmpxchg, Opcode::I32AtomicRmw16CmpxchgU},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 558 "src/lexer-keywords.txt"
+ {"try", TokenType::Try, Opcode::Try},
+ {""}, {""}, {""}, {""}, {""}, {""},
+#line 208 "src/lexer-keywords.txt"
+ {"i16x8.shr_s", TokenType::Binary, Opcode::I16X8ShrS},
+ {""}, {""}, {""},
+#line 209 "src/lexer-keywords.txt"
+ {"i16x8.shr_u", TokenType::Binary, Opcode::I16X8ShrU},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 524 "src/lexer-keywords.txt"
+ {"memory", TokenType::Memory},
+ {""},
#line 482 "src/lexer-keywords.txt"
{"i8x16.gt_s", TokenType::Compare, Opcode::I8X16GtS},
{""},
@@ -1531,191 +1572,172 @@ Perfect_Hash::InWordSet (const char *str, size_t len)
{""}, {""}, {""},
#line 480 "src/lexer-keywords.txt"
{"i8x16.ge_s", TokenType::Compare, Opcode::I8X16GeS},
- {""},
+#line 615 "src/lexer-keywords.txt"
+ {"i64.reinterpret/f64", TokenType::Convert, Opcode::I64ReinterpretF64},
#line 481 "src/lexer-keywords.txt"
{"i8x16.ge_u", TokenType::Compare, Opcode::I8X16GeU},
- {""}, {""}, {""},
-#line 599 "src/lexer-keywords.txt"
- {"i32.reinterpret/f32", TokenType::Convert, Opcode::I32ReinterpretF32},
+ {""}, {""}, {""}, {""}, {""}, {""},
+#line 28 "src/lexer-keywords.txt"
+ {"binary", TokenType::Bin},
+ {""}, {""},
+#line 181 "src/lexer-keywords.txt"
+ {"i16x8.avgr_u", TokenType::Binary, Opcode::I16X8AvgrU},
+ {""}, {""}, {""}, {""}, {""}, {""},
+#line 206 "src/lexer-keywords.txt"
+ {"i16x8.replace_lane", TokenType::SimdLaneOp, Opcode::I16X8ReplaceLane},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""},
-#line 501 "src/lexer-keywords.txt"
- {"i8x16.splat", TokenType::Unary, Opcode::I8X16Splat},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""},
-#line 581 "src/lexer-keywords.txt"
- {"atomic.notify", TokenType::AtomicNotify, Opcode::MemoryAtomicNotify},
- {""}, {""}, {""}, {""}, {""},
-#line 37 "src/lexer-keywords.txt"
- {"current_memory", TokenType::MemorySize, Opcode::MemorySize},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 516 "src/lexer-keywords.txt"
- {"memory.atomic.notify", TokenType::AtomicNotify, Opcode::MemoryAtomicNotify},
- {""}, {""}, {""}, {""}, {""}, {""},
-#line 207 "src/lexer-keywords.txt"
- {"i16x8.shl", TokenType::Binary, Opcode::I16X8Shl},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 181 "src/lexer-keywords.txt"
- {"i16x8.avgr_u", TokenType::Binary, Opcode::I16X8AvgrU},
- {""}, {""}, {""},
-#line 184 "src/lexer-keywords.txt"
- {"i16x8.extract_lane_s", TokenType::SimdLaneOp, Opcode::I16X8ExtractLaneS},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 478 "src/lexer-keywords.txt"
+ {"i8x16.extract_lane_s", TokenType::SimdLaneOp, Opcode::I8X16ExtractLaneS},
{""},
-#line 185 "src/lexer-keywords.txt"
- {"i16x8.extract_lane_u", TokenType::SimdLaneOp, Opcode::I16X8ExtractLaneU},
+#line 479 "src/lexer-keywords.txt"
+ {"i8x16.extract_lane_u", TokenType::SimdLaneOp, Opcode::I8X16ExtractLaneU},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""},
-#line 370 "src/lexer-keywords.txt"
- {"i64.atomic.rmw8.cmpxchg_u", TokenType::AtomicRmwCmpxchg, Opcode::I64AtomicRmw8CmpxchgU},
-#line 239 "src/lexer-keywords.txt"
- {"i32.atomic.rmw8.cmpxchg_u", TokenType::AtomicRmwCmpxchg, Opcode::I32AtomicRmw8CmpxchgU},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""},
-#line 521 "src/lexer-keywords.txt"
- {"memory.grow", TokenType::MemoryGrow, Opcode::MemoryGrow},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 183 "src/lexer-keywords.txt"
- {"i16x8.eq", TokenType::Compare, Opcode::I16X8Eq},
-#line 208 "src/lexer-keywords.txt"
- {"i16x8.shr_s", TokenType::Binary, Opcode::I16X8ShrS},
- {""}, {""},
-#line 332 "src/lexer-keywords.txt"
- {"i32x4.extadd_pairwise_i16x8_s", TokenType::Unary, Opcode::I32X4ExtaddPairwiseI16X8S},
-#line 209 "src/lexer-keywords.txt"
- {"i16x8.shr_u", TokenType::Binary, Opcode::I16X8ShrU},
-#line 333 "src/lexer-keywords.txt"
- {"i32x4.extadd_pairwise_i16x8_u", TokenType::Unary, Opcode::I32X4ExtaddPairwiseI16X8U},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 498 "src/lexer-keywords.txt"
+ {"i8x16.shl", TokenType::Binary, Opcode::I8X16Shl},
+ {""}, {""}, {""}, {""}, {""},
+#line 582 "src/lexer-keywords.txt"
+ {"i8x16.shuffle", TokenType::SimdShuffleOp, Opcode::I8X16Shuffle},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""},
+#line 214 "src/lexer-keywords.txt"
+ {"i16x8.extadd_pairwise_i8x16_s", TokenType::Unary, Opcode::I16X8ExtaddPairwiseI8X16S},
+ {""},
+#line 215 "src/lexer-keywords.txt"
+ {"i16x8.extadd_pairwise_i8x16_u", TokenType::Unary, Opcode::I16X8ExtaddPairwiseI8X16U},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 223 "src/lexer-keywords.txt"
+ {"i16x8.extend_low_i8x16_s", TokenType::Unary, Opcode::I16X8ExtendLowI8X16S},
{""},
+#line 224 "src/lexer-keywords.txt"
+ {"i16x8.extend_low_i8x16_u", TokenType::Unary, Opcode::I16X8ExtendLowI8X16U},
+ {""}, {""}, {""}, {""},
+#line 455 "src/lexer-keywords.txt"
+ {"i64x2.extend_high_i32x4_s", TokenType::Unary, Opcode::I64X2ExtendHighI32X4S},
+ {""},
+#line 457 "src/lexer-keywords.txt"
+ {"i64x2.extend_high_i32x4_u", TokenType::Unary, Opcode::I64X2ExtendHighI32X4U},
+ {""}, {""}, {""},
#line 216 "src/lexer-keywords.txt"
{"i16x8.extmul_low_i8x16_s", TokenType::Binary, Opcode::I16X8ExtmulLowI8X16S},
{""},
#line 218 "src/lexer-keywords.txt"
{"i16x8.extmul_low_i8x16_u", TokenType::Binary, Opcode::I16X8ExtmulLowI8X16U},
+ {""}, {""}, {""}, {""},
+#line 465 "src/lexer-keywords.txt"
+ {"i64x2.extmul_high_i32x4_s", TokenType::Binary, Opcode::I64X2ExtmulHighI32X4S},
+ {""},
+#line 467 "src/lexer-keywords.txt"
+ {"i64x2.extmul_high_i32x4_u", TokenType::Binary, Opcode::I64X2ExtmulHighI32X4U},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""},
-#line 223 "src/lexer-keywords.txt"
- {"i16x8.extend_low_i8x16_s", TokenType::Unary, Opcode::I16X8ExtendLowI8X16S},
+#line 495 "src/lexer-keywords.txt"
+ {"i8x16.popcnt", TokenType::Unary, Opcode::I8X16Popcnt},
{""},
-#line 224 "src/lexer-keywords.txt"
- {"i16x8.extend_low_i8x16_u", TokenType::Unary, Opcode::I16X8ExtendLowI8X16U},
+#line 499 "src/lexer-keywords.txt"
+ {"i8x16.shr_s", TokenType::Binary, Opcode::I8X16ShrS},
+ {""}, {""}, {""},
+#line 500 "src/lexer-keywords.txt"
+ {"i8x16.shr_u", TokenType::Binary, Opcode::I8X16ShrU},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 377 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw.cmpxchg", TokenType::AtomicRmwCmpxchg, Opcode::I64AtomicRmwCmpxchg},
+#line 246 "src/lexer-keywords.txt"
+ {"i32.atomic.rmw.cmpxchg", TokenType::AtomicRmwCmpxchg, Opcode::I32AtomicRmwCmpxchg},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 521 "src/lexer-keywords.txt"
+ {"memory.grow", TokenType::MemoryGrow, Opcode::MemoryGrow},
{""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 498 "src/lexer-keywords.txt"
- {"i8x16.shl", TokenType::Binary, Opcode::I8X16Shl},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
#line 475 "src/lexer-keywords.txt"
{"i8x16.avgr_u", TokenType::Binary, Opcode::I8X16AvgrU},
- {""}, {""}, {""},
-#line 478 "src/lexer-keywords.txt"
- {"i8x16.extract_lane_s", TokenType::SimdLaneOp, Opcode::I8X16ExtractLaneS},
- {""},
-#line 479 "src/lexer-keywords.txt"
- {"i8x16.extract_lane_u", TokenType::SimdLaneOp, Opcode::I8X16ExtractLaneU},
+ {""}, {""}, {""}, {""}, {""}, {""},
+#line 497 "src/lexer-keywords.txt"
+ {"i8x16.replace_lane", TokenType::SimdLaneOp, Opcode::I8X16ReplaceLane},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""},
#line 118 "src/lexer-keywords.txt"
{"f64.copysign", TokenType::Binary, Opcode::F64Copysign},
#line 60 "src/lexer-keywords.txt"
{"f32.copysign", TokenType::Binary, Opcode::F32Copysign},
- {""}, {""}, {""},
-#line 578 "src/lexer-keywords.txt"
- {"i8x16.shuffle", TokenType::SimdShuffleOp, Opcode::I8X16Shuffle},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""},
-#line 477 "src/lexer-keywords.txt"
- {"i8x16.eq", TokenType::Compare, Opcode::I8X16Eq},
-#line 499 "src/lexer-keywords.txt"
- {"i8x16.shr_s", TokenType::Binary, Opcode::I8X16ShrS},
- {""}, {""}, {""},
-#line 500 "src/lexer-keywords.txt"
- {"i8x16.shr_u", TokenType::Binary, Opcode::I8X16ShrU},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""},
+#line 516 "src/lexer-keywords.txt"
+ {"memory.atomic.notify", TokenType::AtomicNotify, Opcode::MemoryAtomicNotify},
+#line 183 "src/lexer-keywords.txt"
+ {"i16x8.eq", TokenType::Compare, Opcode::I16X8Eq},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""},
-#line 465 "src/lexer-keywords.txt"
- {"i64x2.extmul_high_i32x4_s", TokenType::Binary, Opcode::I64X2ExtmulHighI32X4S},
- {""},
-#line 467 "src/lexer-keywords.txt"
- {"i64x2.extmul_high_i32x4_u", TokenType::Binary, Opcode::I64X2ExtmulHighI32X4U},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""},
-#line 455 "src/lexer-keywords.txt"
- {"i64x2.extend_high_i32x4_s", TokenType::Unary, Opcode::I64X2ExtendHighI32X4S},
- {""},
-#line 457 "src/lexer-keywords.txt"
- {"i64x2.extend_high_i32x4_u", TokenType::Unary, Opcode::I64X2ExtendHighI32X4U},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 585 "src/lexer-keywords.txt"
+ {"atomic.notify", TokenType::AtomicNotify, Opcode::MemoryAtomicNotify},
{""}, {""}, {""},
-#line 175 "src/lexer-keywords.txt"
- {"grow_memory", TokenType::MemoryGrow, Opcode::MemoryGrow},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
#line 203 "src/lexer-keywords.txt"
{"i16x8.neg", TokenType::Unary, Opcode::I16X8Neg},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""},
-#line 206 "src/lexer-keywords.txt"
- {"i16x8.replace_lane", TokenType::SimdLaneOp, Opcode::I16X8ReplaceLane},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""},
#line 204 "src/lexer-keywords.txt"
{"i16x8.q15mulr_sat_s", TokenType::Binary, Opcode::I16X8Q15mulrSatS},
- {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""},
+#line 373 "src/lexer-keywords.txt"
+ {"i64.atomic.rmw8.xchg_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw8XchgU},
+#line 242 "src/lexer-keywords.txt"
+ {"i32.atomic.rmw8.xchg_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw8XchgU},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
#line 201 "src/lexer-keywords.txt"
{"i16x8.narrow_i32x4_s", TokenType::Binary, Opcode::I16X8NarrowI32X4S},
{""},
#line 202 "src/lexer-keywords.txt"
{"i16x8.narrow_i32x4_u", TokenType::Binary, Opcode::I16X8NarrowI32X4U},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 373 "src/lexer-keywords.txt"
- {"i64.atomic.rmw8.xchg_u", TokenType::AtomicRmw, Opcode::I64AtomicRmw8XchgU},
-#line 242 "src/lexer-keywords.txt"
- {"i32.atomic.rmw8.xchg_u", TokenType::AtomicRmw, Opcode::I32AtomicRmw8XchgU},
- {""}, {""}, {""}, {""},
-#line 519 "src/lexer-keywords.txt"
- {"memory.copy", TokenType::MemoryCopy, Opcode::MemoryCopy},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""},
+#line 37 "src/lexer-keywords.txt"
+ {"current_memory", TokenType::MemorySize, Opcode::MemorySize},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 377 "src/lexer-keywords.txt"
- {"i64.atomic.rmw.cmpxchg", TokenType::AtomicRmwCmpxchg, Opcode::I64AtomicRmwCmpxchg},
-#line 246 "src/lexer-keywords.txt"
- {"i32.atomic.rmw.cmpxchg", TokenType::AtomicRmwCmpxchg, Opcode::I32AtomicRmwCmpxchg},
+#line 477 "src/lexer-keywords.txt"
+ {"i8x16.eq", TokenType::Compare, Opcode::I8X16Eq},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""},
#line 494 "src/lexer-keywords.txt"
{"i8x16.neg", TokenType::Unary, Opcode::I8X16Neg},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""},
-#line 497 "src/lexer-keywords.txt"
- {"i8x16.replace_lane", TokenType::SimdLaneOp, Opcode::I8X16ReplaceLane},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""},
-#line 214 "src/lexer-keywords.txt"
- {"i16x8.extadd_pairwise_i8x16_s", TokenType::Unary, Opcode::I16X8ExtaddPairwiseI8X16S},
- {""},
-#line 215 "src/lexer-keywords.txt"
- {"i16x8.extadd_pairwise_i8x16_u", TokenType::Unary, Opcode::I16X8ExtaddPairwiseI8X16U},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""},
-#line 495 "src/lexer-keywords.txt"
- {"i8x16.popcnt", TokenType::Unary, Opcode::I8X16Popcnt},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
@@ -1725,26 +1747,23 @@ Perfect_Hash::InWordSet (const char *str, size_t len)
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""},
-#line 492 "src/lexer-keywords.txt"
- {"i8x16.narrow_i16x8_s", TokenType::Binary, Opcode::I8X16NarrowI16X8S},
- {""},
-#line 493 "src/lexer-keywords.txt"
- {"i8x16.narrow_i16x8_u", TokenType::Binary, Opcode::I8X16NarrowI16X8U},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 335 "src/lexer-keywords.txt"
- {"i32x4.extmul_high_i16x8_s", TokenType::Binary, Opcode::I32X4ExtmulHighI16X8S},
- {""},
-#line 337 "src/lexer-keywords.txt"
- {"i32x4.extmul_high_i16x8_u", TokenType::Binary, Opcode::I32X4ExtmulHighI16X8U},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""},
+ {""}, {""},
#line 341 "src/lexer-keywords.txt"
{"i32x4.extend_high_i16x8_s", TokenType::Unary, Opcode::I32X4ExtendHighI16X8S},
{""},
#line 342 "src/lexer-keywords.txt"
{"i32x4.extend_high_i16x8_u", TokenType::Unary, Opcode::I32X4ExtendHighI16X8U},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""},
+#line 335 "src/lexer-keywords.txt"
+ {"i32x4.extmul_high_i16x8_s", TokenType::Binary, Opcode::I32X4ExtmulHighI16X8S},
+ {""},
+#line 337 "src/lexer-keywords.txt"
+ {"i32x4.extmul_high_i16x8_u", TokenType::Binary, Opcode::I32X4ExtmulHighI16X8U},
+ {""}, {""},
+#line 175 "src/lexer-keywords.txt"
+ {"grow_memory", TokenType::MemoryGrow, Opcode::MemoryGrow},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
@@ -1761,37 +1780,46 @@ Perfect_Hash::InWordSet (const char *str, size_t len)
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 519 "src/lexer-keywords.txt"
+ {"memory.copy", TokenType::MemoryCopy, Opcode::MemoryCopy},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 221 "src/lexer-keywords.txt"
+ {"i16x8.extend_high_i8x16_s", TokenType::Unary, Opcode::I16X8ExtendHighI8X16S},
+ {""},
+#line 222 "src/lexer-keywords.txt"
+ {"i16x8.extend_high_i8x16_u", TokenType::Unary, Opcode::I16X8ExtendHighI8X16U},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""},
#line 217 "src/lexer-keywords.txt"
{"i16x8.extmul_high_i8x16_s", TokenType::Binary, Opcode::I16X8ExtmulHighI8X16S},
{""},
#line 219 "src/lexer-keywords.txt"
{"i16x8.extmul_high_i8x16_u", TokenType::Binary, Opcode::I16X8ExtmulHighI8X16U},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""},
-#line 221 "src/lexer-keywords.txt"
- {"i16x8.extend_high_i8x16_s", TokenType::Unary, Opcode::I16X8ExtendHighI8X16S},
- {""},
-#line 222 "src/lexer-keywords.txt"
- {"i16x8.extend_high_i8x16_u", TokenType::Unary, Opcode::I16X8ExtendHighI8X16U},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""},
#line 380 "src/lexer-keywords.txt"
{"i64.atomic.rmw.xchg", TokenType::AtomicRmw, Opcode::I64AtomicRmwXchg},
#line 249 "src/lexer-keywords.txt"
- {"i32.atomic.rmw.xchg", TokenType::AtomicRmw, Opcode::I32AtomicRmwXchg}
+ {"i32.atomic.rmw.xchg", TokenType::AtomicRmw, Opcode::I32AtomicRmwXchg},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""},
+#line 492 "src/lexer-keywords.txt"
+ {"i8x16.narrow_i16x8_s", TokenType::Binary, Opcode::I8X16NarrowI16X8S},
+ {""},
+#line 493 "src/lexer-keywords.txt"
+ {"i8x16.narrow_i16x8_u", TokenType::Binary, Opcode::I8X16NarrowI16X8U}
};
if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
diff --git a/src/shared-validator.cc b/src/shared-validator.cc
index 3f970276..ab2f17fe 100644
--- a/src/shared-validator.cc
+++ b/src/shared-validator.cc
@@ -1077,6 +1077,19 @@ Result SharedValidator::OnSimdLaneOp(const Location& loc,
return result;
}
+Result SharedValidator::OnSimdLoadLane(const Location& loc,
+ Opcode opcode,
+ Address alignment,
+ uint64_t value) {
+ Result result = Result::Ok;
+ MemoryType mt;
+ expr_loc_ = &loc;
+ result |= CheckMemoryIndex(Var(0, loc), &mt);
+ result |= CheckAlign(loc, alignment, opcode.GetMemorySize());
+ result |= typechecker_.OnSimdLoadLane(opcode, mt.limits, value);
+ return result;
+}
+
Result SharedValidator::OnSimdShuffleOp(const Location& loc,
Opcode opcode,
v128 value) {
diff --git a/src/shared-validator.h b/src/shared-validator.h
index 34f48d72..482a4482 100644
--- a/src/shared-validator.h
+++ b/src/shared-validator.h
@@ -159,6 +159,7 @@ class SharedValidator {
Result OnReturn(const Location&);
Result OnSelect(const Location&, Index result_count, Type* result_types);
Result OnSimdLaneOp(const Location&, Opcode, uint64_t lane_idx);
+ Result OnSimdLoadLane(const Location&, Opcode, Address align, uint64_t lane_idx);
Result OnSimdShuffleOp(const Location&, Opcode, v128 lane_idx);
Result OnStore(const Location&, Opcode, Address align);
Result OnTableCopy(const Location&, Var dst_var, Var src_var);
diff --git a/src/token.def b/src/token.def
index e1123356..8061fc80 100644
--- a/src/token.def
+++ b/src/token.def
@@ -129,6 +129,7 @@ WABT_TOKEN(Return, "return")
WABT_TOKEN(Select, "select")
WABT_TOKEN(SimdLaneOp, "SIMDLANEOP")
WABT_TOKEN(SimdLoadSplat, "SIMDLOADSPLAT")
+WABT_TOKEN(SimdLoadLane, "SIMDLOADLANE")
WABT_TOKEN(SimdShuffleOp, "i8x16.shuffle")
WABT_TOKEN(Store, "STORE")
WABT_TOKEN(TableCopy, "table.copy")
diff --git a/src/type-checker.cc b/src/type-checker.cc
index 6d560f35..1b9c6bf0 100644
--- a/src/type-checker.cc
+++ b/src/type-checker.cc
@@ -871,6 +871,19 @@ Result TypeChecker::OnSimdLaneOp(Opcode opcode, uint64_t lane_idx) {
return result;
}
+Result TypeChecker::OnSimdLoadLane(Opcode opcode, const Limits& limits, uint64_t lane_idx) {
+ Result result = Result::Ok;
+ uint32_t lane_count = opcode.GetSimdLaneCount();
+ if (lane_idx >= lane_count) {
+ PrintError("lane index must be less than %d (got %" PRIu64 ")", lane_count,
+ lane_idx);
+ result = Result::Error;
+ }
+ result |= CheckOpcode2(opcode, &limits);
+ return result;
+}
+
+
Result TypeChecker::OnSimdShuffleOp(Opcode opcode, v128 lane_idx) {
Result result = Result::Ok;
uint8_t simd_data[16];
diff --git a/src/type-checker.h b/src/type-checker.h
index 46730673..43b5130e 100644
--- a/src/type-checker.h
+++ b/src/type-checker.h
@@ -116,6 +116,7 @@ class TypeChecker {
Result OnReturn();
Result OnSelect(const TypeVector& result_types);
Result OnSimdLaneOp(Opcode, uint64_t);
+ Result OnSimdLoadLane(Opcode, const Limits& limits, uint64_t);
Result OnSimdShuffleOp(Opcode, v128);
Result OnStore(Opcode, const Limits& limits);
Result OnTernary(Opcode);
diff --git a/src/validator.cc b/src/validator.cc
index fed3a950..96d0782c 100644
--- a/src/validator.cc
+++ b/src/validator.cc
@@ -149,6 +149,7 @@ class Validator : public ExprVisitor::Delegate {
Result OnAtomicRmwCmpxchgExpr(AtomicRmwCmpxchgExpr*) override;
Result OnTernaryExpr(TernaryExpr*) override;
Result OnSimdLaneOpExpr(SimdLaneOpExpr*) override;
+ Result OnSimdLoadLaneExpr(SimdLoadLaneExpr*) override;
Result OnSimdShuffleOpExpr(SimdShuffleOpExpr*) override;
Result OnLoadSplatExpr(LoadSplatExpr*) override;
Result OnLoadZeroExpr(LoadZeroExpr*) override;
@@ -573,6 +574,13 @@ Result Validator::OnSimdLaneOpExpr(SimdLaneOpExpr* expr) {
return Result::Ok;
}
+Result Validator::OnSimdLoadLaneExpr(SimdLoadLaneExpr* expr) {
+ result_ |= validator_.OnSimdLoadLane(
+ expr->loc, expr->opcode, expr->opcode.GetAlignment(expr->align),
+ expr->val);
+ return Result::Ok;
+}
+
Result Validator::OnSimdShuffleOpExpr(SimdShuffleOpExpr* expr) {
result_ |= validator_.OnSimdShuffleOp(expr->loc, expr->opcode, expr->val);
return Result::Ok;
diff --git a/src/wast-parser.cc b/src/wast-parser.cc
index 6ae2d241..ee06d428 100644
--- a/src/wast-parser.cc
+++ b/src/wast-parser.cc
@@ -160,6 +160,7 @@ bool IsPlainInstr(TokenType token_type) {
case TokenType::AtomicWait:
case TokenType::Ternary:
case TokenType::SimdLaneOp:
+ case TokenType::SimdLoadLane:
case TokenType::SimdShuffleOp:
return true;
default:
@@ -1762,6 +1763,33 @@ Result WastParser::ParsePlainLoadStoreInstr(Location loc,
return Result::Ok;
}
+Result WastParser::ParseSimdLane(Location loc, uint64_t* lane_idx) {
+ if (!PeekMatch(TokenType::Nat) && !PeekMatch(TokenType::Int)) {
+ return ErrorExpected({"a natural number in range [0, 32)"});
+ }
+
+ Literal literal = Consume().literal();
+
+ Result result = ParseInt64(literal.text.begin(), literal.text.end(),
+ lane_idx, ParseIntType::UnsignedOnly);
+
+ if (Failed(result)) {
+ Error(loc, "invalid literal \"" PRIstringview "\"",
+ WABT_PRINTF_STRING_VIEW_ARG(literal.text));
+ return Result::Error;
+ }
+
+ // The valid range is only [0, 32), but it's only malformed if it can't
+ // fit in a byte.
+ if (*lane_idx > 255) {
+ Error(loc, "lane index \"" PRIstringview "\" out-of-range [0, 32)",
+ WABT_PRINTF_STRING_VIEW_ARG(literal.text));
+ return Result::Error;
+ }
+
+ return Result::Ok;
+}
+
Result WastParser::ParsePlainInstr(std::unique_ptr<Expr>* out_expr) {
WABT_TRACE(ParsePlainInstr);
Location loc = GetLocation();
@@ -2103,70 +2131,51 @@ Result WastParser::ParsePlainInstr(std::unique_ptr<Expr>* out_expr) {
case TokenType::SimdLaneOp: {
Token token = Consume();
ErrorUnlessOpcodeEnabled(token);
- if (!PeekMatch(TokenType::Nat) && !PeekMatch(TokenType::Int)) {
- return ErrorExpected({"a natural number"}, "123");
- }
-
- Literal literal = Consume().literal();
- uint64_t lane_idx;
- Result result = ParseInt64(literal.text.begin(), literal.text.end(),
- &lane_idx, ParseIntType::UnsignedOnly);
+ uint64_t lane_idx = 0;
+ Result result = ParseSimdLane(loc, &lane_idx);
if (Failed(result)) {
- Error(loc, "invalid literal \"" PRIstringview "\"",
- WABT_PRINTF_STRING_VIEW_ARG(literal.text));
return Result::Error;
}
- // TODO: Should share lane validation logic w/ SimdShuffleOp below. (See
- // comment below for explanation of 255 vs. 32)
- if (lane_idx > 255) {
- Error(loc, "lane index \"" PRIstringview "\" out-of-range [0, 32)",
- WABT_PRINTF_STRING_VIEW_ARG(literal.text));
- return Result::Error;
- }
out_expr->reset(new SimdLaneOpExpr(token.opcode(), lane_idx, loc));
break;
}
- case TokenType::SimdShuffleOp: {
+ case TokenType::SimdLoadLane: {
Token token = Consume();
ErrorUnlessOpcodeEnabled(token);
- v128 values;
- for (int lane = 0; lane < 16; ++lane) {
- Location loc = GetLocation();
- if (!PeekMatch(TokenType::Nat)) {
- return ErrorExpected({"a natural number in range [0, 32)"});
- }
+ Address offset;
+ Address align;
+ ParseOffsetOpt(&offset);
+ ParseAlignOpt(&align);
- Literal literal = Consume().literal();
+ uint64_t lane_idx = 0;
+ Result result = ParseSimdLane(loc, &lane_idx);
- string_view sv = literal.text;
- const char* s = sv.begin();
- const char* end = sv.end();
- Result result;
+ if (Failed(result)) {
+ return Result::Error;
+ }
- uint32_t value = 0;
- result = ParseInt32(s, end, &value, ParseIntType::UnsignedOnly);
+ out_expr->reset(new SimdLoadLaneExpr(token.opcode(), align, offset, lane_idx, loc));
+ break;
+ }
+ case TokenType::SimdShuffleOp: {
+ Token token = Consume();
+ ErrorUnlessOpcodeEnabled(token);
+ v128 values;
+ for (int lane = 0; lane < 16; ++lane) {
+ Location loc = GetLocation();
+ uint64_t lane_idx;
+ Result result = ParseSimdLane(loc, &lane_idx);
if (Failed(result)) {
- Error(loc, "invalid literal \"" PRIstringview "\"",
- WABT_PRINTF_STRING_VIEW_ARG(literal.text));
- return Result::Error;
- }
-
- // The valid range is only [0, 32), but it's only malformed if it can't
- // fit in a byte.
- if (value > 255) {
- Error(loc,
- "shuffle index \"" PRIstringview "\" out-of-range [0, 32)",
- WABT_PRINTF_STRING_VIEW_ARG(literal.text));
return Result::Error;
}
- values.set_u8(lane, static_cast<uint8_t>(value));
+ values.set_u8(lane, static_cast<uint8_t>(lane_idx));
}
out_expr->reset(
diff --git a/src/wast-parser.h b/src/wast-parser.h
index 9c82b250..d0be773a 100644
--- a/src/wast-parser.h
+++ b/src/wast-parser.h
@@ -194,6 +194,7 @@ class WastParser {
Result ParsePlainInstrVar(Location, std::unique_ptr<Expr>*);
template <typename T>
Result ParsePlainLoadStoreInstr(Location, Token, std::unique_ptr<Expr>*);
+ Result ParseSimdLane(Location, uint64_t*);
Result ParseCommandList(Script*, CommandPtrVector*);
Result ParseCommand(Script*, CommandPtr*);
diff --git a/src/wat-writer.cc b/src/wat-writer.cc
index d6daa584..f23673e6 100644
--- a/src/wat-writer.cc
+++ b/src/wat-writer.cc
@@ -572,6 +572,7 @@ class WatWriter::ExprVisitorDelegate : public ExprVisitor::Delegate {
Result OnAtomicRmwCmpxchgExpr(AtomicRmwCmpxchgExpr*) override;
Result OnTernaryExpr(TernaryExpr*) override;
Result OnSimdLaneOpExpr(SimdLaneOpExpr*) override;
+ Result OnSimdLoadLaneExpr(SimdLoadLaneExpr*) override;
Result OnSimdShuffleOpExpr(SimdShuffleOpExpr*) override;
Result OnLoadSplatExpr(LoadSplatExpr*) override;
Result OnLoadZeroExpr(LoadZeroExpr*) override;
@@ -976,6 +977,19 @@ Result WatWriter::ExprVisitorDelegate::OnSimdLaneOpExpr(SimdLaneOpExpr* expr) {
return Result::Ok;
}
+Result WatWriter::ExprVisitorDelegate::OnSimdLoadLaneExpr(SimdLoadLaneExpr* expr) {
+ writer_->WritePutsSpace(expr->opcode.GetName());
+ if (expr->offset) {
+ writer_->Writef("offset=%" PRIaddress, expr->offset);
+ }
+ if (!expr->opcode.IsNaturallyAligned(expr->align)) {
+ writer_->Writef("align=%" PRIaddress, expr->align);
+ }
+ writer_->Writef("%" PRIu64, (expr->val));
+ writer_->WriteNewline(NO_FORCE_NEWLINE);
+ return Result::Ok;
+}
+
Result WatWriter::ExprVisitorDelegate::OnSimdShuffleOpExpr(
SimdShuffleOpExpr* expr) {
writer_->WritePutsSpace(expr->opcode.GetName());
diff --git a/test/dump/simd-load-lane.txt b/test/dump/simd-load-lane.txt
new file mode 100644
index 00000000..676988e2
--- /dev/null
+++ b/test/dump/simd-load-lane.txt
@@ -0,0 +1,162 @@
+;;; TOOL: run-objdump
+;;; ARGS0: --enable-simd
+
+(module
+ (memory 1)
+ (data (i32.const 0) "\00\01\02\03\04\05\06\07\08\09\0A\0B\0C\0D\0E\0F")
+
+ ;; v128.load8_lane
+ (func (export "v128.load8_lane_0")
+ (param $address i32) (param $x v128) (result v128)
+ (v128.load8_lane 0 (local.get $address) (local.get $x)))
+ ;; v128.load8_lane with offset
+ (func (export "v128.load8_lane_15_offset_15")
+ (param $x v128) (result v128)
+ (v128.load8_lane offset=15 15 (i32.const 0) (local.get $x)))
+ ;; v128.load8_lane with alignment
+ (func (export "v128.load8_lane_2_align_1")
+ (param $address i32) (param $x v128) (result v128)
+ (v128.load8_lane align=1 2 (local.get $address) (local.get $x)))
+ ;; v128.load8_lane with both offset and alignment
+ (func (export "v128.load8_lane_8_offset_1_align_1")
+ (param $address i32) (param $x v128) (result v128)
+ (v128.load8_lane offset=1 align=1 8 (local.get $address) (local.get $x)))
+
+ ;; v128.load16_lane
+ (func (export "v128.load16_lane_0")
+ (param $address i32) (param $x v128) (result v128)
+ (v128.load16_lane 0 (local.get $address) (local.get $x)))
+ ;; v128.load16_lane with offset
+ (func (export "v128.load16_lane_7_offset_15")
+ (param $x v128) (result v128)
+ (v128.load16_lane offset=15 7 (i32.const 0) (local.get $x)))
+ ;; v128.load16_lane with alignment
+ (func (export "v128.load16_lane_2_align_1")
+ (param $address i32) (param $x v128) (result v128)
+ (v128.load16_lane align=1 2 (local.get $address) (local.get $x)))
+ ;; v128.load16_lane with both offset and alignment
+ (func (export "v128.load16_lane_4_offset_1_align_2")
+ (param $address i32) (param $x v128) (result v128)
+ (v128.load16_lane offset=1 align=2 4 (local.get $address) (local.get $x)))
+
+ ;; v128.load32_lane
+ (func (export "v128.load32_lane_0")
+ (param $address i32) (param $x v128) (result v128)
+ (v128.load32_lane 0 (local.get $address) (local.get $x)))
+ ;; v128.load32_lane with offset
+ (func (export "v128.load32_lane_3_offset_15")
+ (param $x v128) (result v128)
+ (v128.load32_lane offset=15 3 (i32.const 0) (local.get $x)))
+ ;; v128.load32_lane with alignment
+ (func (export "v128.load32_lane_2_align_1")
+ (param $address i32) (param $x v128) (result v128)
+ (v128.load32_lane align=1 2 (local.get $address) (local.get $x)))
+ ;; v128.load32_lane with both offset and alignment
+ (func (export "v128.load32_lane_2_offset_1_align_4")
+ (param $address i32) (param $x v128) (result v128)
+ (v128.load32_lane offset=1 align=4 2 (local.get $address) (local.get $x)))
+
+ ;; v128.load64_lane
+ (func (export "v128.load64_lane_0")
+ (param $address i32) (param $x v128) (result v128)
+ (v128.load64_lane 0 (local.get $address) (local.get $x)))
+ ;; v128.load64_lane with offset
+ (func (export "v128.load64_lane_1_offset_15")
+ (param $x v128) (result v128)
+ (v128.load64_lane offset=15 1 (i32.const 0) (local.get $x)))
+ ;; v128.load64_lane with alignment
+ (func (export "v128.load64_lane_0_align_1")
+ (param $address i32) (param $x v128) (result v128)
+ (v128.load64_lane align=1 0 (local.get $address) (local.get $x)))
+ ;; v128.load64_lane with both offset and alignment
+ (func (export "v128.load64_lane_1_offset_1_align_8")
+ (param $address i32) (param $x v128) (result v128)
+ (v128.load64_lane offset=1 align=8 1 (local.get $address) (local.get $x)))
+)
+(;; STDOUT ;;;
+
+simd-load-lane.wasm: file format wasm 0x1
+
+Code Disassembly:
+
+000210 func[0] <v128.load8_lane_0>:
+ 000211: 20 00 | local.get 0
+ 000213: 20 01 | local.get 1
+ 000215: fd 54 00 00 00 | v128.load8_lane 0 0 0
+ 00021a: 0b | end
+00021c func[1] <v128.load8_lane_15_offset_15>:
+ 00021d: 41 00 | i32.const 0
+ 00021f: 20 00 | local.get 0
+ 000221: fd 54 00 0f 0f | v128.load8_lane 0 15 15
+ 000226: 0b | end
+000228 func[2] <v128.load8_lane_2_align_1>:
+ 000229: 20 00 | local.get 0
+ 00022b: 20 01 | local.get 1
+ 00022d: fd 54 00 00 02 | v128.load8_lane 0 0 2
+ 000232: 0b | end
+000234 func[3] <v128.load8_lane_8_offset_1_align_1>:
+ 000235: 20 00 | local.get 0
+ 000237: 20 01 | local.get 1
+ 000239: fd 54 00 01 08 | v128.load8_lane 0 1 8
+ 00023e: 0b | end
+000240 func[4] <v128.load16_lane_0>:
+ 000241: 20 00 | local.get 0
+ 000243: 20 01 | local.get 1
+ 000245: fd 55 01 00 00 | v128.load16_lane 1 0 0
+ 00024a: 0b | end
+00024c func[5] <v128.load16_lane_7_offset_15>:
+ 00024d: 41 00 | i32.const 0
+ 00024f: 20 00 | local.get 0
+ 000251: fd 55 01 0f 07 | v128.load16_lane 1 15 7
+ 000256: 0b | end
+000258 func[6] <v128.load16_lane_2_align_1>:
+ 000259: 20 00 | local.get 0
+ 00025b: 20 01 | local.get 1
+ 00025d: fd 55 00 00 02 | v128.load16_lane 0 0 2
+ 000262: 0b | end
+000264 func[7] <v128.load16_lane_4_offset_1_align_2>:
+ 000265: 20 00 | local.get 0
+ 000267: 20 01 | local.get 1
+ 000269: fd 55 01 01 04 | v128.load16_lane 1 1 4
+ 00026e: 0b | end
+000270 func[8] <v128.load32_lane_0>:
+ 000271: 20 00 | local.get 0
+ 000273: 20 01 | local.get 1
+ 000275: fd 56 02 00 00 | v128.load32_lane 2 0 0
+ 00027a: 0b | end
+00027c func[9] <v128.load32_lane_3_offset_15>:
+ 00027d: 41 00 | i32.const 0
+ 00027f: 20 00 | local.get 0
+ 000281: fd 56 02 0f 03 | v128.load32_lane 2 15 3
+ 000286: 0b | end
+000288 func[10] <v128.load32_lane_2_align_1>:
+ 000289: 20 00 | local.get 0
+ 00028b: 20 01 | local.get 1
+ 00028d: fd 56 00 00 02 | v128.load32_lane 0 0 2
+ 000292: 0b | end
+000294 func[11] <v128.load32_lane_2_offset_1_align_4>:
+ 000295: 20 00 | local.get 0
+ 000297: 20 01 | local.get 1
+ 000299: fd 56 02 01 02 | v128.load32_lane 2 1 2
+ 00029e: 0b | end
+0002a0 func[12] <v128.load64_lane_0>:
+ 0002a1: 20 00 | local.get 0
+ 0002a3: 20 01 | local.get 1
+ 0002a5: fd 57 03 00 00 | v128.load64_lane 3 0 0
+ 0002aa: 0b | end
+0002ac func[13] <v128.load64_lane_1_offset_15>:
+ 0002ad: 41 00 | i32.const 0
+ 0002af: 20 00 | local.get 0
+ 0002b1: fd 57 03 0f 01 | v128.load64_lane 3 15 1
+ 0002b6: 0b | end
+0002b8 func[14] <v128.load64_lane_0_align_1>:
+ 0002b9: 20 00 | local.get 0
+ 0002bb: 20 01 | local.get 1
+ 0002bd: fd 57 00 00 00 | v128.load64_lane 0 0 0
+ 0002c2: 0b | end
+0002c4 func[15] <v128.load64_lane_1_offset_1_align_8>:
+ 0002c5: 20 00 | local.get 0
+ 0002c7: 20 01 | local.get 1
+ 0002c9: fd 57 03 01 01 | v128.load64_lane 3 1 1
+ 0002ce: 0b | end
+;;; STDOUT ;;)
diff --git a/test/parse/expr/bad-simd-shuffle-lane-index-overflow.txt b/test/parse/expr/bad-simd-shuffle-lane-index-overflow.txt
index 94f3f172..680e048b 100644
--- a/test/parse/expr/bad-simd-shuffle-lane-index-overflow.txt
+++ b/test/parse/expr/bad-simd-shuffle-lane-index-overflow.txt
@@ -9,7 +9,7 @@
))
(;; STDERR ;;;
-out/test/parse/expr/bad-simd-shuffle-lane-index-overflow.txt:8:19: error: shuffle index "0x01020304" out-of-range [0, 32)
+out/test/parse/expr/bad-simd-shuffle-lane-index-overflow.txt:8:19: error: lane index "0x01020304" out-of-range [0, 32)
i8x16.shuffle 0x01020304 05060708 0x090a0b0c 0x00000000
^^^^^^^^^^
;;; STDERR ;;)
diff --git a/test/spec/simd/simd_lane.txt b/test/spec/simd/simd_lane.txt
index d8db834f..28febc94 100644
--- a/test/spec/simd/simd_lane.txt
+++ b/test/spec/simd/simd_lane.txt
@@ -405,14 +405,14 @@ out/test/spec/simd/simd_lane.wast:518: assert_malformed passed:
...huffle 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 (local.get 0) (local.get 0)))
^
out/test/spec/simd/simd_lane.wast:521: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.94.wat:1:70: error: unexpected token "-1", expected a natural number in range [0, 32).
+ out/test/spec/simd/simd_lane/simd_lane.94.wat:1:70: error: invalid literal "-1"
... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 -1(v128.const i8x16 15 14 13 12 11 10 ...
^^
out/test/spec/simd/simd_lane/simd_lane.94.wat:1:185: error: unexpected token ), expected EOF.
... 8 7 6 5 4 3 2 1 0)(v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)))
^
out/test/spec/simd/simd_lane.wast:525: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.95.wat:1:70: error: shuffle index "256" out-of-range [0, 32)
+ out/test/spec/simd/simd_lane/simd_lane.95.wat:1:70: error: lane index "256" out-of-range [0, 32)
... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 256(v128.const i8x16 15 14 13 12 11 10...
^^^
out/test/spec/simd/simd_lane/simd_lane.95.wat:1:186: error: unexpected token ), expected EOF.
@@ -462,168 +462,168 @@ out/test/spec/simd/simd_lane.wast:559: assert_malformed passed:
(func (result v128) (v8x16.shuffle 0 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
^^^^^^^^^^^^^
out/test/spec/simd/simd_lane.wast:570: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.107.wat:1:54: error: unexpected token "(", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.107.wat:1:54: error: unexpected token "(", expected a natural number in range [0, 32).
...) (result i32) (i8x16.extract_lane_s (local.get 0) (v128.const i8x16 0 0 0...
^
out/test/spec/simd/simd_lane/simd_lane.107.wat:1:68: error: unexpected token (, expected EOF.
... (i8x16.extract_lane_s (local.get 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0...
^
out/test/spec/simd/simd_lane.wast:571: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.108.wat:1:54: error: unexpected token "(", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.108.wat:1:54: error: unexpected token "(", expected a natural number in range [0, 32).
...) (result i32) (i8x16.extract_lane_u (local.get 0) (v128.const i8x16 0 0 0...
^
out/test/spec/simd/simd_lane/simd_lane.108.wat:1:68: error: unexpected token (, expected EOF.
... (i8x16.extract_lane_u (local.get 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0...
^
out/test/spec/simd/simd_lane.wast:572: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.109.wat:1:54: error: unexpected token "(", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.109.wat:1:54: error: unexpected token "(", expected a natural number in range [0, 32).
...) (result i32) (i16x8.extract_lane_s (local.get 0) (v128.const i16x8 0 0 0...
^
out/test/spec/simd/simd_lane/simd_lane.109.wat:1:68: error: unexpected token (, expected EOF.
...i32) (i16x8.extract_lane_s (local.get 0) (v128.const i16x8 0 0 0 0 0 0 0 0)))
^
out/test/spec/simd/simd_lane.wast:573: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.110.wat:1:54: error: unexpected token "(", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.110.wat:1:54: error: unexpected token "(", expected a natural number in range [0, 32).
...) (result i32) (i16x8.extract_lane_u (local.get 0) (v128.const i16x8 0 0 0...
^
out/test/spec/simd/simd_lane/simd_lane.110.wat:1:68: error: unexpected token (, expected EOF.
...i32) (i16x8.extract_lane_u (local.get 0) (v128.const i16x8 0 0 0 0 0 0 0 0)))
^
out/test/spec/simd/simd_lane.wast:574: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.111.wat:1:52: error: unexpected token "(", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.111.wat:1:52: error: unexpected token "(", expected a natural number in range [0, 32).
...32) (result i32) (i32x4.extract_lane (local.get 0) (v128.const i32x4 0 0 0...
^
out/test/spec/simd/simd_lane/simd_lane.111.wat:1:66: error: unexpected token (, expected EOF.
...) (result i32) (i32x4.extract_lane (local.get 0) (v128.const i32x4 0 0 0 0)))
^
out/test/spec/simd/simd_lane.wast:575: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.112.wat:1:52: error: unexpected token "(", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.112.wat:1:52: error: unexpected token "(", expected a natural number in range [0, 32).
...32) (result f32) (f32x4.extract_lane (local.get 0) (v128.const f32x4 0 0 0...
^
out/test/spec/simd/simd_lane/simd_lane.112.wat:1:66: error: unexpected token (, expected EOF.
...) (result f32) (f32x4.extract_lane (local.get 0) (v128.const f32x4 0 0 0 0)))
^
out/test/spec/simd/simd_lane.wast:576: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.113.wat:1:53: error: unexpected token "(", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.113.wat:1:53: error: unexpected token "(", expected a natural number in range [0, 32).
...2) (result v128) (i8x16.replace_lane (local.get 0) (v128.const i8x16 0 0 0...
^
out/test/spec/simd/simd_lane/simd_lane.113.wat:1:67: error: unexpected token (, expected EOF.
...8) (i8x16.replace_lane (local.get 0) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0...
^
out/test/spec/simd/simd_lane.wast:577: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.114.wat:1:53: error: unexpected token "(", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.114.wat:1:53: error: unexpected token "(", expected a natural number in range [0, 32).
...2) (result v128) (i16x8.replace_lane (local.get 0) (v128.const i16x8 0 0 0...
^
out/test/spec/simd/simd_lane/simd_lane.114.wat:1:67: error: unexpected token (, expected EOF.
...8) (i16x8.replace_lane (local.get 0) (v128.const i16x8 0 0 0 0 0 0 0 0) (i...
^
out/test/spec/simd/simd_lane.wast:578: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.115.wat:1:53: error: unexpected token "(", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.115.wat:1:53: error: unexpected token "(", expected a natural number in range [0, 32).
...2) (result v128) (i32x4.replace_lane (local.get 0) (v128.const i32x4 0 0 0...
^
out/test/spec/simd/simd_lane/simd_lane.115.wat:1:67: error: unexpected token (, expected EOF.
...8) (i32x4.replace_lane (local.get 0) (v128.const i32x4 0 0 0 0) (i32.const...
^
out/test/spec/simd/simd_lane.wast:579: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.116.wat:1:53: error: unexpected token "(", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.116.wat:1:53: error: unexpected token "(", expected a natural number in range [0, 32).
...2) (result v128) (f32x4.replace_lane (local.get 0) (v128.const f32x4 0 0 0...
^
out/test/spec/simd/simd_lane/simd_lane.116.wat:1:67: error: unexpected token (, expected EOF.
...8) (f32x4.replace_lane (local.get 0) (v128.const f32x4 0 0 0 0) (f32.const...
^
out/test/spec/simd/simd_lane.wast:581: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.117.wat:1:52: error: unexpected token "(", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.117.wat:1:52: error: unexpected token "(", expected a natural number in range [0, 32).
... i32) (result i64) (i64x2.extract_lane (local.get 0) (v128.const i64x2 0 0)))
^
out/test/spec/simd/simd_lane/simd_lane.117.wat:1:66: error: unexpected token (, expected EOF.
... i32) (result i64) (i64x2.extract_lane (local.get 0) (v128.const i64x2 0 0)))
^
out/test/spec/simd/simd_lane.wast:582: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.118.wat:1:52: error: unexpected token "(", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.118.wat:1:52: error: unexpected token "(", expected a natural number in range [0, 32).
... i32) (result f64) (f64x2.extract_lane (local.get 0) (v128.const f64x2 0 0)))
^
out/test/spec/simd/simd_lane/simd_lane.118.wat:1:66: error: unexpected token (, expected EOF.
... i32) (result f64) (f64x2.extract_lane (local.get 0) (v128.const f64x2 0 0)))
^
out/test/spec/simd/simd_lane.wast:583: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.119.wat:1:53: error: unexpected token "(", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.119.wat:1:53: error: unexpected token "(", expected a natural number in range [0, 32).
...2) (result v128) (i64x2.replace_lane (local.get 0) (v128.const i64x2 0 0) ...
^
out/test/spec/simd/simd_lane/simd_lane.119.wat:1:67: error: unexpected token (, expected EOF.
...128) (i64x2.replace_lane (local.get 0) (v128.const i64x2 0 0) (i64.const 1)))
^
out/test/spec/simd/simd_lane.wast:584: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.120.wat:1:53: error: unexpected token "(", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.120.wat:1:53: error: unexpected token "(", expected a natural number in range [0, 32).
...2) (result v128) (f64x2.replace_lane (local.get 0) (v128.const f64x2 0 0) ...
^
out/test/spec/simd/simd_lane/simd_lane.120.wat:1:67: error: unexpected token (, expected EOF.
...8) (f64x2.replace_lane (local.get 0) (v128.const f64x2 0 0) (f64.const 1.0)))
^
out/test/spec/simd/simd_lane.wast:588: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.121.wat:1:42: error: unexpected token "1.5", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.121.wat:1:42: error: unexpected token "1.5", expected a natural number in range [0, 32).
... (result i32) (i8x16.extract_lane_s 1.5 (v128.const i8x16 0 0 0 0 0 0 0 0 ...
^^^
out/test/spec/simd/simd_lane/simd_lane.121.wat:1:97: error: unexpected token ), expected EOF.
...i8x16.extract_lane_s 1.5 (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))
^
out/test/spec/simd/simd_lane.wast:589: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.122.wat:1:42: error: unexpected token "nan", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.122.wat:1:42: error: unexpected token "nan", expected a natural number in range [0, 32).
... (result i32) (i8x16.extract_lane_u nan (v128.const i8x16 0 0 0 0 0 0 0 0 ...
^^^
out/test/spec/simd/simd_lane/simd_lane.122.wat:1:97: error: unexpected token ), expected EOF.
...i8x16.extract_lane_u nan (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))
^
out/test/spec/simd/simd_lane.wast:590: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.123.wat:1:42: error: unexpected token "inf", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.123.wat:1:42: error: unexpected token "inf", expected a natural number in range [0, 32).
...c (result i32) (i16x8.extract_lane_s inf (v128.const i16x8 0 0 0 0 0 0 0 0)))
^^^
out/test/spec/simd/simd_lane/simd_lane.123.wat:1:81: error: unexpected token ), expected EOF.
...c (result i32) (i16x8.extract_lane_s inf (v128.const i16x8 0 0 0 0 0 0 0 0)))
^
out/test/spec/simd/simd_lane.wast:591: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.124.wat:1:42: error: unexpected token "-inf", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.124.wat:1:42: error: unexpected token "-inf", expected a natural number in range [0, 32).
... (result i32) (i16x8.extract_lane_u -inf (v128.const i16x8 0 0 0 0 0 0 0 0)))
^^^^
out/test/spec/simd/simd_lane/simd_lane.124.wat:1:82: error: unexpected token ), expected EOF.
... (result i32) (i16x8.extract_lane_u -inf (v128.const i16x8 0 0 0 0 0 0 0 0)))
^
out/test/spec/simd/simd_lane.wast:592: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.125.wat:1:40: error: unexpected token "nan", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.125.wat:1:40: error: unexpected token "nan", expected a natural number in range [0, 32).
(func (result i32) (i32x4.extract_lane nan (v128.const i32x4 0 0 0 0)))
^^^
out/test/spec/simd/simd_lane/simd_lane.125.wat:1:71: error: unexpected token ), expected EOF.
(func (result i32) (i32x4.extract_lane nan (v128.const i32x4 0 0 0 0)))
^
out/test/spec/simd/simd_lane.wast:593: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.126.wat:1:40: error: unexpected token "nan", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.126.wat:1:40: error: unexpected token "nan", expected a natural number in range [0, 32).
(func (result f32) (f32x4.extract_lane nan (v128.const f32x4 0 0 0 0)))
^^^
out/test/spec/simd/simd_lane/simd_lane.126.wat:1:71: error: unexpected token ), expected EOF.
(func (result f32) (f32x4.extract_lane nan (v128.const f32x4 0 0 0 0)))
^
out/test/spec/simd/simd_lane.wast:594: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.127.wat:1:41: error: unexpected token "-2.5", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.127.wat:1:41: error: unexpected token "-2.5", expected a natural number in range [0, 32).
... (result v128) (i8x16.replace_lane -2.5 (v128.const i8x16 0 0 0 0 0 0 0 0 ...
^^^^
out/test/spec/simd/simd_lane/simd_lane.127.wat:1:111: error: unexpected token ), expected EOF.
..._lane -2.5 (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (i32.const 1)))
^
out/test/spec/simd/simd_lane.wast:595: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.128.wat:1:41: error: unexpected token "nan", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.128.wat:1:41: error: unexpected token "nan", expected a natural number in range [0, 32).
...c (result v128) (i16x8.replace_lane nan (v128.const i16x8 0 0 0 0 0 0 0 0)...
^^^
out/test/spec/simd/simd_lane/simd_lane.128.wat:1:94: error: unexpected token ), expected EOF.
...8) (i16x8.replace_lane nan (v128.const i16x8 0 0 0 0 0 0 0 0) (i32.const 1)))
^
out/test/spec/simd/simd_lane.wast:596: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.129.wat:1:41: error: unexpected token "inf", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.129.wat:1:41: error: unexpected token "inf", expected a natural number in range [0, 32).
...c (result v128) (i32x4.replace_lane inf (v128.const i32x4 0 0 0 0) (i32.co...
^^^
out/test/spec/simd/simd_lane/simd_lane.129.wat:1:86: error: unexpected token ), expected EOF.
...sult v128) (i32x4.replace_lane inf (v128.const i32x4 0 0 0 0) (i32.const 1)))
^
out/test/spec/simd/simd_lane.wast:597: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.130.wat:1:41: error: unexpected token "-inf", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.130.wat:1:41: error: unexpected token "-inf", expected a natural number in range [0, 32).
... (result v128) (f32x4.replace_lane -inf (v128.const f32x4 0 0 0 0) (f32.co...
^^^^
out/test/spec/simd/simd_lane/simd_lane.130.wat:1:89: error: unexpected token ), expected EOF.
@@ -712,14 +712,14 @@ out/test/spec/simd/simd_lane.wast:883: assert_malformed passed:
...sult v128) (f64x2.replace_lane +0x01 (v128.const f64x2 0 0) (f64.const 1.0)))
^
out/test/spec/simd/simd_lane.wast:897: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.155.wat:1:42: error: unexpected token "1.0", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.155.wat:1:42: error: unexpected token "1.0", expected a natural number in range [0, 32).
... (result i32) (i8x16.extract_lane_s 1.0 (v128.const i8x16 0 0 0 0 0 0 0 0 ...
^^^
out/test/spec/simd/simd_lane/simd_lane.155.wat:1:97: error: unexpected token ), expected EOF.
...i8x16.extract_lane_s 1.0 (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)))
^
out/test/spec/simd/simd_lane.wast:902: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.156.wat:1:79: error: unexpected token "(", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.156.wat:1:79: error: unexpected token "(", expected a natural number in range [0, 32).
... (result i32) (i8x16.extract_lane_s (v128.const i8x16 0 0 0 0 0 0 0 0 0 0...
^
out/test/spec/simd/simd_lane/simd_lane.156.wat:1:129: error: unexpected token ), expected EOF.
@@ -729,11 +729,11 @@ out/test/spec/simd/simd_lane.wast:910: assert_invalid passed:
error: type mismatch in i8x16.extract_lane_s, expected [v128] but got []
000001b: error: OnSimdLaneOpExpr callback failed
out/test/spec/simd/simd_lane.wast:918: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.158.wat:1:74: error: unexpected token ")", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.158.wat:1:74: error: unexpected token ")", expected a natural number in range [0, 32).
(func $i8x16.extract_lane_s-arg-empty (result i32) (i8x16.extract_lane_s))
^
out/test/spec/simd/simd_lane.wast:926: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.159.wat:1:79: error: unexpected token "(", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.159.wat:1:79: error: unexpected token "(", expected a natural number in range [0, 32).
...mpty (result i32) (i16x8.extract_lane_u (v128.const i16x8 0 0 0 0 0 0 0 0)))
^
out/test/spec/simd/simd_lane/simd_lane.159.wat:1:113: error: unexpected token ), expected EOF.
@@ -743,11 +743,11 @@ out/test/spec/simd/simd_lane.wast:934: assert_invalid passed:
error: type mismatch in i16x8.extract_lane_u, expected [v128] but got []
000001b: error: OnSimdLaneOpExpr callback failed
out/test/spec/simd/simd_lane.wast:942: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.161.wat:1:74: error: unexpected token ")", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.161.wat:1:74: error: unexpected token ")", expected a natural number in range [0, 32).
(func $i16x8.extract_lane_u-arg-empty (result i32) (i16x8.extract_lane_u))
^
out/test/spec/simd/simd_lane.wast:950: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.162.wat:1:75: error: unexpected token "(", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.162.wat:1:75: error: unexpected token "(", expected a natural number in range [0, 32).
...-1st-arg-empty (result i32) (i32x4.extract_lane (v128.const i32x4 0 0 0 0)))
^
out/test/spec/simd/simd_lane/simd_lane.162.wat:1:101: error: unexpected token ), expected EOF.
@@ -757,11 +757,11 @@ out/test/spec/simd/simd_lane.wast:958: assert_invalid passed:
error: type mismatch in i32x4.extract_lane, expected [v128] but got []
000001b: error: OnSimdLaneOpExpr callback failed
out/test/spec/simd/simd_lane.wast:966: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.164.wat:1:70: error: unexpected token ")", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.164.wat:1:70: error: unexpected token ")", expected a natural number in range [0, 32).
(func $i32x4.extract_lane-arg-empty (result i32) (i32x4.extract_lane))
^
out/test/spec/simd/simd_lane.wast:974: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.165.wat:1:75: error: unexpected token "(", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.165.wat:1:75: error: unexpected token "(", expected a natural number in range [0, 32).
...lane-1st-arg-empty (result i64) (i64x2.extract_lane (v128.const i64x2 0 0)))
^
out/test/spec/simd/simd_lane/simd_lane.165.wat:1:97: error: unexpected token ), expected EOF.
@@ -771,11 +771,11 @@ out/test/spec/simd/simd_lane.wast:982: assert_invalid passed:
error: type mismatch in i64x2.extract_lane, expected [v128] but got []
000001b: error: OnSimdLaneOpExpr callback failed
out/test/spec/simd/simd_lane.wast:990: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.167.wat:1:70: error: unexpected token ")", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.167.wat:1:70: error: unexpected token ")", expected a natural number in range [0, 32).
(func $i64x2.extract_lane-arg-empty (result i64) (i64x2.extract_lane))
^
out/test/spec/simd/simd_lane.wast:998: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.168.wat:1:75: error: unexpected token "(", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.168.wat:1:75: error: unexpected token "(", expected a natural number in range [0, 32).
...-1st-arg-empty (result f32) (f32x4.extract_lane (v128.const f32x4 0 0 0 0)))
^
out/test/spec/simd/simd_lane/simd_lane.168.wat:1:101: error: unexpected token ), expected EOF.
@@ -785,11 +785,11 @@ out/test/spec/simd/simd_lane.wast:1006: assert_invalid passed:
error: type mismatch in f32x4.extract_lane, expected [v128] but got []
000001b: error: OnSimdLaneOpExpr callback failed
out/test/spec/simd/simd_lane.wast:1014: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.170.wat:1:70: error: unexpected token ")", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.170.wat:1:70: error: unexpected token ")", expected a natural number in range [0, 32).
(func $f32x4.extract_lane-arg-empty (result f32) (f32x4.extract_lane))
^
out/test/spec/simd/simd_lane.wast:1022: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.171.wat:1:75: error: unexpected token "(", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.171.wat:1:75: error: unexpected token "(", expected a natural number in range [0, 32).
...lane-1st-arg-empty (result f64) (f64x2.extract_lane (v128.const f64x2 0 0)))
^
out/test/spec/simd/simd_lane/simd_lane.171.wat:1:97: error: unexpected token ), expected EOF.
@@ -799,11 +799,11 @@ out/test/spec/simd/simd_lane.wast:1030: assert_invalid passed:
error: type mismatch in f64x2.extract_lane, expected [v128] but got []
000001b: error: OnSimdLaneOpExpr callback failed
out/test/spec/simd/simd_lane.wast:1038: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.173.wat:1:70: error: unexpected token ")", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.173.wat:1:70: error: unexpected token ")", expected a natural number in range [0, 32).
(func $f64x2.extract_lane-arg-empty (result f64) (f64x2.extract_lane))
^
out/test/spec/simd/simd_lane.wast:1046: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.174.wat:1:76: error: unexpected token "(", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.174.wat:1:76: error: unexpected token "(", expected a natural number in range [0, 32).
...y (result v128) (i8x16.replace_lane (v128.const i8x16 0 0 0 0 0 0 0 0 0 0...
^
out/test/spec/simd/simd_lane/simd_lane.174.wat:1:127: error: unexpected token (, expected EOF.
@@ -816,11 +816,11 @@ out/test/spec/simd/simd_lane.wast:1062: assert_invalid passed:
error: type mismatch in i8x16.replace_lane, expected [v128, i32] but got [v128]
000002d: error: OnSimdLaneOpExpr callback failed
out/test/spec/simd/simd_lane.wast:1070: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.177.wat:1:71: error: unexpected token ")", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.177.wat:1:71: error: unexpected token ")", expected a natural number in range [0, 32).
(func $i8x16.replace_lane-arg-empty (result v128) (i8x16.replace_lane))
^
out/test/spec/simd/simd_lane.wast:1078: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.178.wat:1:76: error: unexpected token "(", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.178.wat:1:76: error: unexpected token "(", expected a natural number in range [0, 32).
...y (result v128) (i16x8.replace_lane (v128.const i16x8 0 0 0 0 0 0 0 0) (i...
^
out/test/spec/simd/simd_lane/simd_lane.178.wat:1:111: error: unexpected token (, expected EOF.
@@ -833,11 +833,11 @@ out/test/spec/simd/simd_lane.wast:1094: assert_invalid passed:
error: type mismatch in i16x8.replace_lane, expected [v128, i32] but got [v128]
000002d: error: OnSimdLaneOpExpr callback failed
out/test/spec/simd/simd_lane.wast:1102: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.181.wat:1:71: error: unexpected token ")", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.181.wat:1:71: error: unexpected token ")", expected a natural number in range [0, 32).
(func $i16x8.replace_lane-arg-empty (result v128) (i16x8.replace_lane))
^
out/test/spec/simd/simd_lane.wast:1110: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.182.wat:1:76: error: unexpected token "(", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.182.wat:1:76: error: unexpected token "(", expected a natural number in range [0, 32).
...y (result v128) (i32x4.replace_lane (v128.const i32x4 0 0 0 0) (i32.const...
^
out/test/spec/simd/simd_lane/simd_lane.182.wat:1:103: error: unexpected token (, expected EOF.
@@ -850,11 +850,11 @@ out/test/spec/simd/simd_lane.wast:1126: assert_invalid passed:
error: type mismatch in i32x4.replace_lane, expected [v128, i32] but got [v128]
000002d: error: OnSimdLaneOpExpr callback failed
out/test/spec/simd/simd_lane.wast:1134: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.185.wat:1:71: error: unexpected token ")", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.185.wat:1:71: error: unexpected token ")", expected a natural number in range [0, 32).
(func $i32x4.replace_lane-arg-empty (result v128) (i32x4.replace_lane))
^
out/test/spec/simd/simd_lane.wast:1142: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.186.wat:1:76: error: unexpected token "(", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.186.wat:1:76: error: unexpected token "(", expected a natural number in range [0, 32).
...y (result v128) (f32x4.replace_lane (v128.const f32x4 0 0 0 0) (f32.const...
^
out/test/spec/simd/simd_lane/simd_lane.186.wat:1:103: error: unexpected token (, expected EOF.
@@ -867,11 +867,11 @@ out/test/spec/simd/simd_lane.wast:1158: assert_invalid passed:
error: type mismatch in f32x4.replace_lane, expected [v128, f32] but got [v128]
000002d: error: OnSimdLaneOpExpr callback failed
out/test/spec/simd/simd_lane.wast:1166: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.189.wat:1:71: error: unexpected token ")", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.189.wat:1:71: error: unexpected token ")", expected a natural number in range [0, 32).
(func $f32x4.replace_lane-arg-empty (result v128) (f32x4.replace_lane))
^
out/test/spec/simd/simd_lane.wast:1174: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.190.wat:1:76: error: unexpected token "(", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.190.wat:1:76: error: unexpected token "(", expected a natural number in range [0, 32).
...pty (result v128) (i64x2.replace_lane (v128.const i64x2 0 0) (i64.const 1)))
^
out/test/spec/simd/simd_lane/simd_lane.190.wat:1:99: error: unexpected token (, expected EOF.
@@ -884,11 +884,11 @@ out/test/spec/simd/simd_lane.wast:1190: assert_invalid passed:
error: type mismatch in i64x2.replace_lane, expected [v128, i64] but got [v128]
000002d: error: OnSimdLaneOpExpr callback failed
out/test/spec/simd/simd_lane.wast:1198: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.193.wat:1:71: error: unexpected token ")", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.193.wat:1:71: error: unexpected token ")", expected a natural number in range [0, 32).
(func $i64x2.replace_lane-arg-empty (result v128) (i64x2.replace_lane))
^
out/test/spec/simd/simd_lane.wast:1206: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.194.wat:1:76: error: unexpected token "(", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.194.wat:1:76: error: unexpected token "(", expected a natural number in range [0, 32).
...y (result v128) (f64x2.replace_lane (v128.const f64x2 0 0) (f64.const 1.0)))
^
out/test/spec/simd/simd_lane/simd_lane.194.wat:1:99: error: unexpected token (, expected EOF.
@@ -901,7 +901,7 @@ out/test/spec/simd/simd_lane.wast:1222: assert_invalid passed:
error: type mismatch in f64x2.replace_lane, expected [v128, f64] but got [v128]
000002d: error: OnSimdLaneOpExpr callback failed
out/test/spec/simd/simd_lane.wast:1230: assert_malformed passed:
- out/test/spec/simd/simd_lane/simd_lane.197.wat:1:71: error: unexpected token ")", expected a natural number (e.g. 123).
+ out/test/spec/simd/simd_lane/simd_lane.197.wat:1:71: error: unexpected token ")", expected a natural number in range [0, 32).
(func $f64x2.replace_lane-arg-empty (result v128) (f64x2.replace_lane))
^
out/test/spec/simd/simd_lane.wast:1238: assert_malformed passed:
diff --git a/test/spec/simd/simd_load8_lane.txt b/test/spec/simd/simd_load8_lane.txt
index 14ebd1f0..96917f3d 100644
--- a/test/spec/simd/simd_load8_lane.txt
+++ b/test/spec/simd/simd_load8_lane.txt
@@ -1,4 +1,15 @@
;;; TOOL: run-interp-spec
;;; STDIN_FILE: third_party/testsuite/proposals/simd/simd_load8_lane.wast
;;; ARGS*: --enable-simd
-;;; SKIP:
+(;; STDOUT ;;;
+out/test/spec/simd/simd_load8_lane.wast:283: assert_invalid passed:
+ error: type mismatch in v128.load8_lane, expected [i32, v128] but got [v128, i32]
+ 0000027: error: OnSimdLoadLaneExpr callback failed
+out/test/spec/simd/simd_load8_lane.wast:289: assert_invalid passed:
+ error: lane index must be less than 16 (got 16)
+ 0000027: error: OnSimdLoadLaneExpr callback failed
+out/test/spec/simd/simd_load8_lane.wast:296: assert_invalid passed:
+ error: alignment must not be larger than natural alignment (1)
+ 0000027: error: OnSimdLoadLaneExpr callback failed
+51/51 tests passed.
+;;; STDOUT ;;)