summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbuild-js.sh172
-rwxr-xr-xscripts/gen-s-parser.py143
-rw-r--r--src/binaryen-c.cpp429
-rw-r--r--src/binaryen-c.h249
-rw-r--r--src/dataflow/graph.h2
-rw-r--r--src/gen-s-parser.inc2630
-rw-r--r--src/ir/ExpressionAnalyzer.cpp71
-rw-r--r--src/ir/ReFinalize.cpp6
-rw-r--r--src/ir/cost.h109
-rw-r--r--src/ir/literal-utils.h19
-rw-r--r--src/ir/utils.h10
-rw-r--r--src/js/binaryen.js-post.js646
-rw-r--r--src/literal.h220
-rw-r--r--src/passes/DeadCodeElimination.cpp5
-rw-r--r--src/passes/OptimizeInstructions.cpp8
-rw-r--r--src/passes/Precompute.cpp2
-rw-r--r--src/passes/Print.cpp259
-rw-r--r--src/passes/RedundantSetElimination.cpp3
-rw-r--r--src/passes/SafeHeap.cpp28
-rw-r--r--src/shell-interface.h6
-rw-r--r--src/tools/feature-options.h15
-rw-r--r--src/tools/fuzzing.h6
-rw-r--r--src/tools/wasm-ctor-eval.cpp4
-rw-r--r--src/tools/wasm-reduce.cpp2
-rw-r--r--src/wasm-binary.h160
-rw-r--r--src/wasm-builder.h48
-rw-r--r--src/wasm-interpreter.h202
-rw-r--r--src/wasm-s-parser.h5
-rw-r--r--src/wasm-stack.h211
-rw-r--r--src/wasm-traversal.h60
-rw-r--r--src/wasm.h110
-rw-r--r--src/wasm/literal.cpp684
-rw-r--r--src/wasm/wasm-binary.cpp303
-rw-r--r--src/wasm/wasm-s-parser.cpp127
-rw-r--r--src/wasm/wasm-validator.cpp232
-rw-r--r--src/wasm/wasm.cpp88
-rw-r--r--test/binaryen.js/kitchen-sink.js151
-rw-r--r--test/binaryen.js/kitchen-sink.js.txt2984
-rw-r--r--test/example/c-api-kitchen-sink.c196
-rw-r--r--test/example/c-api-kitchen-sink.txt3203
-rw-r--r--test/example/c-api-kitchen-sink.txt.txt782
-rw-r--r--test/passes/safe-heap.txt1269
-rw-r--r--test/passes/safe-heap.wast3
-rw-r--r--test/passes/safe-heap_disable-simd.txt2148
-rw-r--r--test/passes/safe-heap_disable-simd.wast1
-rw-r--r--test/simd.wast793
-rw-r--r--test/simd.wast.from-wast809
-rw-r--r--test/simd.wast.fromBinary810
-rw-r--r--test/simd.wast.fromBinary.noDebugInfo810
-rw-r--r--test/spec/simd.wast661
50 files changed, 19516 insertions, 2378 deletions
diff --git a/build-js.sh b/build-js.sh
index f9553e3e4..17d3c53e1 100755
--- a/build-js.sh
+++ b/build-js.sh
@@ -215,6 +215,11 @@ export_function "_BinaryenAtomicCmpxchgId"
export_function "_BinaryenAtomicRMWId"
export_function "_BinaryenAtomicWaitId"
export_function "_BinaryenAtomicWakeId"
+export_function "_BinaryenSIMDExtractId"
+export_function "_BinaryenSIMDReplaceId"
+export_function "_BinaryenSIMDShuffleId"
+export_function "_BinaryenSIMDBitselectId"
+export_function "_BinaryenSIMDShiftId"
# External kinds
export_function "_BinaryenExternalFunction"
@@ -227,6 +232,7 @@ export_function "_BinaryenLiteralInt32"
export_function "_BinaryenLiteralInt64"
export_function "_BinaryenLiteralFloat32"
export_function "_BinaryenLiteralFloat64"
+export_function "_BinaryenLiteralVec128"
export_function "_BinaryenLiteralFloat32Bits"
export_function "_BinaryenLiteralFloat64Bits"
@@ -375,6 +381,141 @@ export_function "_BinaryenAtomicRMWAnd"
export_function "_BinaryenAtomicRMWOr"
export_function "_BinaryenAtomicRMWXor"
export_function "_BinaryenAtomicRMWXchg"
+export_function "_BinaryenSplatVecI8x16"
+export_function "_BinaryenExtractLaneSVecI8x16"
+export_function "_BinaryenExtractLaneUVecI8x16"
+export_function "_BinaryenReplaceLaneVecI8x16"
+export_function "_BinaryenSplatVecI16x8"
+export_function "_BinaryenExtractLaneSVecI16x8"
+export_function "_BinaryenExtractLaneUVecI16x8"
+export_function "_BinaryenReplaceLaneVecI16x8"
+export_function "_BinaryenSplatVecI32x4"
+export_function "_BinaryenExtractLaneVecI32x4"
+export_function "_BinaryenReplaceLaneVecI32x4"
+export_function "_BinaryenSplatVecI64x2"
+export_function "_BinaryenExtractLaneVecI64x2"
+export_function "_BinaryenReplaceLaneVecI64x2"
+export_function "_BinaryenSplatVecF32x4"
+export_function "_BinaryenExtractLaneVecF32x4"
+export_function "_BinaryenReplaceLaneVecF32x4"
+export_function "_BinaryenSplatVecF64x2"
+export_function "_BinaryenExtractLaneVecF64x2"
+export_function "_BinaryenReplaceLaneVecF64x2"
+export_function "_BinaryenEqVecI8x16"
+export_function "_BinaryenNeVecI8x16"
+export_function "_BinaryenLtSVecI8x16"
+export_function "_BinaryenLtUVecI8x16"
+export_function "_BinaryenGtSVecI8x16"
+export_function "_BinaryenGtUVecI8x16"
+export_function "_BinaryenLeSVecI8x16"
+export_function "_BinaryenLeUVecI8x16"
+export_function "_BinaryenGeSVecI8x16"
+export_function "_BinaryenGeUVecI8x16"
+export_function "_BinaryenEqVecI16x8"
+export_function "_BinaryenNeVecI16x8"
+export_function "_BinaryenLtSVecI16x8"
+export_function "_BinaryenLtUVecI16x8"
+export_function "_BinaryenGtSVecI16x8"
+export_function "_BinaryenGtUVecI16x8"
+export_function "_BinaryenLeSVecI16x8"
+export_function "_BinaryenLeUVecI16x8"
+export_function "_BinaryenGeSVecI16x8"
+export_function "_BinaryenGeUVecI16x8"
+export_function "_BinaryenEqVecI32x4"
+export_function "_BinaryenNeVecI32x4"
+export_function "_BinaryenLtSVecI32x4"
+export_function "_BinaryenLtUVecI32x4"
+export_function "_BinaryenGtSVecI32x4"
+export_function "_BinaryenGtUVecI32x4"
+export_function "_BinaryenLeSVecI32x4"
+export_function "_BinaryenLeUVecI32x4"
+export_function "_BinaryenGeSVecI32x4"
+export_function "_BinaryenGeUVecI32x4"
+export_function "_BinaryenEqVecF32x4"
+export_function "_BinaryenNeVecF32x4"
+export_function "_BinaryenLtVecF32x4"
+export_function "_BinaryenGtVecF32x4"
+export_function "_BinaryenLeVecF32x4"
+export_function "_BinaryenGeVecF32x4"
+export_function "_BinaryenEqVecF64x2"
+export_function "_BinaryenNeVecF64x2"
+export_function "_BinaryenLtVecF64x2"
+export_function "_BinaryenGtVecF64x2"
+export_function "_BinaryenLeVecF64x2"
+export_function "_BinaryenGeVecF64x2"
+export_function "_BinaryenNotVec128"
+export_function "_BinaryenAndVec128"
+export_function "_BinaryenOrVec128"
+export_function "_BinaryenXorVec128"
+export_function "_BinaryenNegVecI8x16"
+export_function "_BinaryenAnyTrueVecI8x16"
+export_function "_BinaryenAllTrueVecI8x16"
+export_function "_BinaryenShlVecI8x16"
+export_function "_BinaryenShrSVecI8x16"
+export_function "_BinaryenShrUVecI8x16"
+export_function "_BinaryenAddVecI8x16"
+export_function "_BinaryenAddSatSVecI8x16"
+export_function "_BinaryenAddSatUVecI8x16"
+export_function "_BinaryenSubVecI8x16"
+export_function "_BinaryenSubSatSVecI8x16"
+export_function "_BinaryenSubSatUVecI8x16"
+export_function "_BinaryenMulVecI8x16"
+export_function "_BinaryenNegVecI16x8"
+export_function "_BinaryenAnyTrueVecI16x8"
+export_function "_BinaryenAllTrueVecI16x8"
+export_function "_BinaryenShlVecI16x8"
+export_function "_BinaryenShrSVecI16x8"
+export_function "_BinaryenShrUVecI16x8"
+export_function "_BinaryenAddVecI16x8"
+export_function "_BinaryenAddSatSVecI16x8"
+export_function "_BinaryenAddSatUVecI16x8"
+export_function "_BinaryenSubVecI16x8"
+export_function "_BinaryenSubSatSVecI16x8"
+export_function "_BinaryenSubSatUVecI16x8"
+export_function "_BinaryenMulVecI16x8"
+export_function "_BinaryenNegVecI32x4"
+export_function "_BinaryenAnyTrueVecI32x4"
+export_function "_BinaryenAllTrueVecI32x4"
+export_function "_BinaryenShlVecI32x4"
+export_function "_BinaryenShrSVecI32x4"
+export_function "_BinaryenShrUVecI32x4"
+export_function "_BinaryenAddVecI32x4"
+export_function "_BinaryenSubVecI32x4"
+export_function "_BinaryenMulVecI32x4"
+export_function "_BinaryenNegVecI64x2"
+export_function "_BinaryenAnyTrueVecI64x2"
+export_function "_BinaryenAllTrueVecI64x2"
+export_function "_BinaryenShlVecI64x2"
+export_function "_BinaryenShrSVecI64x2"
+export_function "_BinaryenShrUVecI64x2"
+export_function "_BinaryenAddVecI64x2"
+export_function "_BinaryenSubVecI64x2"
+export_function "_BinaryenAbsVecF32x4"
+export_function "_BinaryenNegVecF32x4"
+export_function "_BinaryenSqrtVecF32x4"
+export_function "_BinaryenAddVecF32x4"
+export_function "_BinaryenSubVecF32x4"
+export_function "_BinaryenMulVecF32x4"
+export_function "_BinaryenDivVecF32x4"
+export_function "_BinaryenMinVecF32x4"
+export_function "_BinaryenMaxVecF32x4"
+export_function "_BinaryenAbsVecF64x2"
+export_function "_BinaryenNegVecF64x2"
+export_function "_BinaryenSqrtVecF64x2"
+export_function "_BinaryenAddVecF64x2"
+export_function "_BinaryenSubVecF64x2"
+export_function "_BinaryenMulVecF64x2"
+export_function "_BinaryenDivVecF64x2"
+export_function "_BinaryenMinVecF64x2"
+export_function "_BinaryenMaxVecF64x2"
+export_function "_BinaryenTruncSatSVecF32x4ToVecI32x4"
+export_function "_BinaryenTruncSatUVecF32x4ToVecI32x4"
+export_function "_BinaryenTruncSatSVecF64x2ToVecI64x2"
+export_function "_BinaryenTruncSatUVecF64x2ToVecI64x2"
+export_function "_BinaryenConvertSVecI32x4ToVecF32x4"
+export_function "_BinaryenConvertUVecI32x4ToVecF32x4"
+export_function "_BinaryenConvertSVecI64x2ToVecF64x2"
+export_function "_BinaryenConvertUVecI64x2ToVecF64x2"
# Expression creation
export_function "_BinaryenBlock"
@@ -406,6 +547,11 @@ export_function "_BinaryenAtomicRMW"
export_function "_BinaryenAtomicCmpxchg"
export_function "_BinaryenAtomicWait"
export_function "_BinaryenAtomicWake"
+export_function "_BinaryenSIMDExtract"
+export_function "_BinaryenSIMDReplace"
+export_function "_BinaryenSIMDShuffle"
+export_function "_BinaryenSIMDBitselect"
+export_function "_BinaryenSIMDShift"
# 'Expression' operations
export_function "_BinaryenExpressionGetId"
@@ -536,6 +682,32 @@ export_function "_BinaryenAtomicWaitGetExpectedType"
export_function "_BinaryenAtomicWakeGetPtr"
export_function "_BinaryenAtomicWakeGetWakeCount"
+# 'SIMDExtract' expression operations
+export_function "_BinaryenSIMDExtractGetOp"
+export_function "_BinaryenSIMDExtractGetVec"
+export_function "_BinaryenSIMDExtractGetIdx"
+
+# 'SIMDReplace' expression operations
+export_function "_BinaryenSIMDReplaceGetOp"
+export_function "_BinaryenSIMDReplaceGetVec"
+export_function "_BinaryenSIMDReplaceGetIdx"
+export_function "_BinaryenSIMDReplaceGetValue"
+
+# 'SIMDShuffle' expression operations
+export_function "_BinaryenSIMDShuffleGetLeft"
+export_function "_BinaryenSIMDShuffleGetRight"
+export_function "_BinaryenSIMDShuffleGetMask"
+
+# 'SIMDBitselect' expression operations
+export_function "_BinaryenSIMDBitselectGetLeft"
+export_function "_BinaryenSIMDBitselectGetRight"
+export_function "_BinaryenSIMDBitselectGetCond"
+
+# 'SIMDShift' expression operations
+export_function "_BinaryenSIMDShiftGetOp"
+export_function "_BinaryenSIMDShiftGetVec"
+export_function "_BinaryenSIMDShiftGetShift"
+
# 'Module' operations
export_function "_BinaryenModuleCreate"
export_function "_BinaryenModuleDispose"
diff --git a/scripts/gen-s-parser.py b/scripts/gen-s-parser.py
index f33107ea6..ea96f3d49 100755
--- a/scripts/gen-s-parser.py
+++ b/scripts/gen-s-parser.py
@@ -268,6 +268,147 @@ instructions = [
("i64.trunc_u:sat/f32", "makeUnary(s, UnaryOp::TruncSatUFloat32ToInt64)"),
("i64.trunc_s:sat/f64", "makeUnary(s, UnaryOp::TruncSatSFloat64ToInt64)"),
("i64.trunc_u:sat/f64", "makeUnary(s, UnaryOp::TruncSatUFloat64ToInt64)"),
+ # SIMD ops
+ ("v128.load", "makeLoad(s, v128, /*isAtomic=*/false)"),
+ ("v128.store", "makeStore(s, v128, /*isAtomic=*/false)"),
+ ("v128.const", "makeConst(s, v128)"),
+ ("v8x16.shuffle", "makeSIMDShuffle(s)"),
+ ("i8x16.splat", "makeUnary(s, UnaryOp::SplatVecI8x16)"),
+ ("i8x16.extract_lane_s", "makeSIMDExtract(s, SIMDExtractOp::ExtractLaneSVecI8x16, 16)"),
+ ("i8x16.extract_lane_u", "makeSIMDExtract(s, SIMDExtractOp::ExtractLaneUVecI8x16, 16)"),
+ ("i8x16.replace_lane", "makeSIMDReplace(s, SIMDReplaceOp::ReplaceLaneVecI8x16, 16)"),
+ ("i16x8.splat", "makeUnary(s, UnaryOp::SplatVecI16x8)"),
+ ("i16x8.extract_lane_s", "makeSIMDExtract(s, SIMDExtractOp::ExtractLaneSVecI16x8, 8)"),
+ ("i16x8.extract_lane_u", "makeSIMDExtract(s, SIMDExtractOp::ExtractLaneUVecI16x8, 8)"),
+ ("i16x8.replace_lane", "makeSIMDReplace(s, SIMDReplaceOp::ReplaceLaneVecI16x8, 8)"),
+ ("i32x4.splat", "makeUnary(s, UnaryOp::SplatVecI32x4)"),
+ ("i32x4.extract_lane", "makeSIMDExtract(s, SIMDExtractOp::ExtractLaneVecI32x4, 4)"),
+ ("i32x4.replace_lane", "makeSIMDReplace(s, SIMDReplaceOp::ReplaceLaneVecI32x4, 4)"),
+ ("i64x2.splat", "makeUnary(s, UnaryOp::SplatVecI64x2)"),
+ ("i64x2.extract_lane", "makeSIMDExtract(s, SIMDExtractOp::ExtractLaneVecI64x2, 2)"),
+ ("i64x2.replace_lane", "makeSIMDReplace(s, SIMDReplaceOp::ReplaceLaneVecI64x2, 2)"),
+ ("f32x4.splat", "makeUnary(s, UnaryOp::SplatVecF32x4)"),
+ ("f32x4.extract_lane", "makeSIMDExtract(s, SIMDExtractOp::ExtractLaneVecF32x4, 4)"),
+ ("f32x4.replace_lane", "makeSIMDReplace(s, SIMDReplaceOp::ReplaceLaneVecF32x4, 4)"),
+ ("f64x2.splat", "makeUnary(s, UnaryOp::SplatVecF64x2)"),
+ ("f64x2.extract_lane", "makeSIMDExtract(s, SIMDExtractOp::ExtractLaneVecF64x2, 2)"),
+ ("f64x2.replace_lane", "makeSIMDReplace(s, SIMDReplaceOp::ReplaceLaneVecF64x2, 2)"),
+ ("i8x16.eq", "makeBinary(s, BinaryOp::EqVecI8x16)"),
+ ("i8x16.ne", "makeBinary(s, BinaryOp::NeVecI8x16)"),
+ ("i8x16.lt_s", "makeBinary(s, BinaryOp::LtSVecI8x16)"),
+ ("i8x16.lt_u", "makeBinary(s, BinaryOp::LtUVecI8x16)"),
+ ("i8x16.gt_s", "makeBinary(s, BinaryOp::GtSVecI8x16)"),
+ ("i8x16.gt_u", "makeBinary(s, BinaryOp::GtUVecI8x16)"),
+ ("i8x16.le_s", "makeBinary(s, BinaryOp::LeSVecI8x16)"),
+ ("i8x16.le_u", "makeBinary(s, BinaryOp::LeUVecI8x16)"),
+ ("i8x16.ge_s", "makeBinary(s, BinaryOp::GeSVecI8x16)"),
+ ("i8x16.ge_u", "makeBinary(s, BinaryOp::GeUVecI8x16)"),
+ ("i16x8.eq", "makeBinary(s, BinaryOp::EqVecI16x8)"),
+ ("i16x8.ne", "makeBinary(s, BinaryOp::NeVecI16x8)"),
+ ("i16x8.lt_s", "makeBinary(s, BinaryOp::LtSVecI16x8)"),
+ ("i16x8.lt_u", "makeBinary(s, BinaryOp::LtUVecI16x8)"),
+ ("i16x8.gt_s", "makeBinary(s, BinaryOp::GtSVecI16x8)"),
+ ("i16x8.gt_u", "makeBinary(s, BinaryOp::GtUVecI16x8)"),
+ ("i16x8.le_s", "makeBinary(s, BinaryOp::LeSVecI16x8)"),
+ ("i16x8.le_u", "makeBinary(s, BinaryOp::LeUVecI16x8)"),
+ ("i16x8.ge_s", "makeBinary(s, BinaryOp::GeSVecI16x8)"),
+ ("i16x8.ge_u", "makeBinary(s, BinaryOp::GeUVecI16x8)"),
+ ("i32x4.eq", "makeBinary(s, BinaryOp::EqVecI32x4)"),
+ ("i32x4.ne", "makeBinary(s, BinaryOp::NeVecI32x4)"),
+ ("i32x4.lt_s", "makeBinary(s, BinaryOp::LtSVecI32x4)"),
+ ("i32x4.lt_u", "makeBinary(s, BinaryOp::LtUVecI32x4)"),
+ ("i32x4.gt_s", "makeBinary(s, BinaryOp::GtSVecI32x4)"),
+ ("i32x4.gt_u", "makeBinary(s, BinaryOp::GtUVecI32x4)"),
+ ("i32x4.le_s", "makeBinary(s, BinaryOp::LeSVecI32x4)"),
+ ("i32x4.le_u", "makeBinary(s, BinaryOp::LeUVecI32x4)"),
+ ("i32x4.ge_s", "makeBinary(s, BinaryOp::GeSVecI32x4)"),
+ ("i32x4.ge_u", "makeBinary(s, BinaryOp::GeUVecI32x4)"),
+ ("f32x4.eq", "makeBinary(s, BinaryOp::EqVecF32x4)"),
+ ("f32x4.ne", "makeBinary(s, BinaryOp::NeVecF32x4)"),
+ ("f32x4.lt", "makeBinary(s, BinaryOp::LtVecF32x4)"),
+ ("f32x4.gt", "makeBinary(s, BinaryOp::GtVecF32x4)"),
+ ("f32x4.le", "makeBinary(s, BinaryOp::LeVecF32x4)"),
+ ("f32x4.ge", "makeBinary(s, BinaryOp::GeVecF32x4)"),
+ ("f64x2.eq", "makeBinary(s, BinaryOp::EqVecF64x2)"),
+ ("f64x2.ne", "makeBinary(s, BinaryOp::NeVecF64x2)"),
+ ("f64x2.lt", "makeBinary(s, BinaryOp::LtVecF64x2)"),
+ ("f64x2.gt", "makeBinary(s, BinaryOp::GtVecF64x2)"),
+ ("f64x2.le", "makeBinary(s, BinaryOp::LeVecF64x2)"),
+ ("f64x2.ge", "makeBinary(s, BinaryOp::GeVecF64x2)"),
+ ("v128.not", "makeUnary(s, UnaryOp::NotVec128)"),
+ ("v128.and", "makeBinary(s, BinaryOp::AndVec128)"),
+ ("v128.or", "makeBinary(s, BinaryOp::OrVec128)"),
+ ("v128.xor", "makeBinary(s, BinaryOp::XorVec128)"),
+ ("v128.bitselect", "makeSIMDBitselect(s)"),
+ ("i8x16.neg", "makeUnary(s, UnaryOp::NegVecI8x16)"),
+ ("i8x16.any_true", "makeUnary(s, UnaryOp::AnyTrueVecI8x16)"),
+ ("i8x16.all_true", "makeUnary(s, UnaryOp::AllTrueVecI8x16)"),
+ ("i8x16.shl", "makeSIMDShift(s, SIMDShiftOp::ShlVecI8x16)"),
+ ("i8x16.shr_s", "makeSIMDShift(s, SIMDShiftOp::ShrSVecI8x16)"),
+ ("i8x16.shr_u", "makeSIMDShift(s, SIMDShiftOp::ShrUVecI8x16)"),
+ ("i8x16.add", "makeBinary(s, BinaryOp::AddVecI8x16)"),
+ ("i8x16.add_saturate_s", "makeBinary(s, BinaryOp::AddSatSVecI8x16)"),
+ ("i8x16.add_saturate_u", "makeBinary(s, BinaryOp::AddSatUVecI8x16)"),
+ ("i8x16.sub", "makeBinary(s, BinaryOp::SubVecI8x16)"),
+ ("i8x16.sub_saturate_s", "makeBinary(s, BinaryOp::SubSatSVecI8x16)"),
+ ("i8x16.sub_saturate_u", "makeBinary(s, BinaryOp::SubSatUVecI8x16)"),
+ ("i8x16.mul", "makeBinary(s, BinaryOp::MulVecI8x16)"),
+ ("i16x8.neg", "makeUnary(s, UnaryOp::NegVecI16x8)"),
+ ("i16x8.any_true", "makeUnary(s, UnaryOp::AnyTrueVecI16x8)"),
+ ("i16x8.all_true", "makeUnary(s, UnaryOp::AllTrueVecI16x8)"),
+ ("i16x8.shl", "makeSIMDShift(s, SIMDShiftOp::ShlVecI16x8)"),
+ ("i16x8.shr_s", "makeSIMDShift(s, SIMDShiftOp::ShrSVecI16x8)"),
+ ("i16x8.shr_u", "makeSIMDShift(s, SIMDShiftOp::ShrUVecI16x8)"),
+ ("i16x8.add", "makeBinary(s, BinaryOp::AddVecI16x8)"),
+ ("i16x8.add_saturate_s", "makeBinary(s, BinaryOp::AddSatSVecI16x8)"),
+ ("i16x8.add_saturate_u", "makeBinary(s, BinaryOp::AddSatUVecI16x8)"),
+ ("i16x8.sub", "makeBinary(s, BinaryOp::SubVecI16x8)"),
+ ("i16x8.sub_saturate_s", "makeBinary(s, BinaryOp::SubSatSVecI16x8)"),
+ ("i16x8.sub_saturate_u", "makeBinary(s, BinaryOp::SubSatUVecI16x8)"),
+ ("i16x8.mul", "makeBinary(s, BinaryOp::MulVecI16x8)"),
+ ("i32x4.neg", "makeUnary(s, UnaryOp::NegVecI32x4)"),
+ ("i32x4.any_true", "makeUnary(s, UnaryOp::AnyTrueVecI32x4)"),
+ ("i32x4.all_true", "makeUnary(s, UnaryOp::AllTrueVecI32x4)"),
+ ("i32x4.shl", "makeSIMDShift(s, SIMDShiftOp::ShlVecI32x4)"),
+ ("i32x4.shr_s", "makeSIMDShift(s, SIMDShiftOp::ShrSVecI32x4)"),
+ ("i32x4.shr_u", "makeSIMDShift(s, SIMDShiftOp::ShrUVecI32x4)"),
+ ("i32x4.add", "makeBinary(s, BinaryOp::AddVecI32x4)"),
+ ("i32x4.sub", "makeBinary(s, BinaryOp::SubVecI32x4)"),
+ ("i32x4.mul", "makeBinary(s, BinaryOp::MulVecI32x4)"),
+ ("i64x2.neg", "makeUnary(s, UnaryOp::NegVecI64x2)"),
+ ("i64x2.any_true", "makeUnary(s, UnaryOp::AnyTrueVecI64x2)"),
+ ("i64x2.all_true", "makeUnary(s, UnaryOp::AllTrueVecI64x2)"),
+ ("i64x2.shl", "makeSIMDShift(s, SIMDShiftOp::ShlVecI64x2)"),
+ ("i64x2.shr_s", "makeSIMDShift(s, SIMDShiftOp::ShrSVecI64x2)"),
+ ("i64x2.shr_u", "makeSIMDShift(s, SIMDShiftOp::ShrUVecI64x2)"),
+ ("i64x2.add", "makeBinary(s, BinaryOp::AddVecI64x2)"),
+ ("i64x2.sub", "makeBinary(s, BinaryOp::SubVecI64x2)"),
+ ("f32x4.abs", "makeUnary(s, UnaryOp::AbsVecF32x4)"),
+ ("f32x4.neg", "makeUnary(s, UnaryOp::NegVecF32x4)"),
+ ("f32x4.sqrt", "makeUnary(s, UnaryOp::SqrtVecF32x4)"),
+ ("f32x4.add", "makeBinary(s, BinaryOp::AddVecF32x4)"),
+ ("f32x4.sub", "makeBinary(s, BinaryOp::SubVecF32x4)"),
+ ("f32x4.mul", "makeBinary(s, BinaryOp::MulVecF32x4)"),
+ ("f32x4.div", "makeBinary(s, BinaryOp::DivVecF32x4)"),
+ ("f32x4.min", "makeBinary(s, BinaryOp::MinVecF32x4)"),
+ ("f32x4.max", "makeBinary(s, BinaryOp::MaxVecF32x4)"),
+ ("f64x2.abs", "makeUnary(s, UnaryOp::AbsVecF64x2)"),
+ ("f64x2.neg", "makeUnary(s, UnaryOp::NegVecF64x2)"),
+ ("f64x2.sqrt", "makeUnary(s, UnaryOp::SqrtVecF64x2)"),
+ ("f64x2.add", "makeBinary(s, BinaryOp::AddVecF64x2)"),
+ ("f64x2.sub", "makeBinary(s, BinaryOp::SubVecF64x2)"),
+ ("f64x2.mul", "makeBinary(s, BinaryOp::MulVecF64x2)"),
+ ("f64x2.div", "makeBinary(s, BinaryOp::DivVecF64x2)"),
+ ("f64x2.min", "makeBinary(s, BinaryOp::MinVecF64x2)"),
+ ("f64x2.max", "makeBinary(s, BinaryOp::MaxVecF64x2)"),
+ ("i32x4.trunc_s/f32x4:sat", "makeUnary(s, UnaryOp::TruncSatSVecF32x4ToVecI32x4)"),
+ ("i32x4.trunc_u/f32x4:sat", "makeUnary(s, UnaryOp::TruncSatUVecF32x4ToVecI32x4)"),
+ ("i64x2.trunc_s/f64x2:sat", "makeUnary(s, UnaryOp::TruncSatSVecF64x2ToVecI64x2)"),
+ ("i64x2.trunc_u/f64x2:sat", "makeUnary(s, UnaryOp::TruncSatUVecF64x2ToVecI64x2)"),
+ ("f32x4.convert_s/i32x4", "makeUnary(s, UnaryOp::ConvertSVecI32x4ToVecF32x4)"),
+ ("f32x4.convert_u/i32x4", "makeUnary(s, UnaryOp::ConvertUVecI32x4ToVecF32x4)"),
+ ("f64x2.convert_s/i64x2", "makeUnary(s, UnaryOp::ConvertSVecI64x2ToVecF64x2)"),
+ ("f64x2.convert_u/i64x2", "makeUnary(s, UnaryOp::ConvertUVecI64x2ToVecF64x2)")
]
@@ -308,7 +449,7 @@ class Node:
def do_insert(self, full_inst, inst, expr):
if inst is "":
- assert self.expr is None, "Repeated instruction"
+ assert self.expr is None, "Repeated instruction " + full_inst
self.expr = expr
self.inst = full_inst
return
diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp
index 88a3d033e..6b5481af2 100644
--- a/src/binaryen-c.cpp
+++ b/src/binaryen-c.cpp
@@ -49,7 +49,10 @@ BinaryenLiteral toBinaryenLiteral(Literal x) {
case Type::i64: ret.i64 = x.geti64(); break;
case Type::f32: ret.i32 = x.reinterpreti32(); break;
case Type::f64: ret.i64 = x.reinterpreti64(); break;
- case Type::v128: assert(false && "v128 not implemented yet");
+ case Type::v128: {
+ memcpy(&ret.v128, x.getv128Ptr(), 16);
+ break;
+ }
case Type::none:
case Type::unreachable: WASM_UNREACHABLE();
}
@@ -62,6 +65,7 @@ Literal fromBinaryenLiteral(BinaryenLiteral x) {
case Type::i64: return Literal(x.i64);
case Type::f32: return Literal(x.i32).castToF32();
case Type::f64: return Literal(x.i64).castToF64();
+ case Type::v128: return Literal(x.v128);
case Type::none:
case Type::unreachable: WASM_UNREACHABLE();
}
@@ -82,9 +86,9 @@ static PassOptions globalPassOptions = PassOptions::getWithDefaultOptimizationOp
static int tracing = 0;
-void traceNameOrNULL(const char* name) {
- if (name) std::cout << "\"" << name << "\"";
- else std::cout << "NULL";
+void traceNameOrNULL(const char* name, std::ostream &out = std::cout) {
+ if (name) out << "\"" << name << "\"";
+ else out << "NULL";
}
std::map<BinaryenFunctionTypeRef, size_t> functionTypes;
@@ -101,14 +105,19 @@ size_t noteExpression(BinaryenExpressionRef expression) {
return id;
}
+std::string getTemp() {
+ static size_t n = 0;
+ return "t" + std::to_string(n++);
+}
+
template<typename T>
-void printArg(T arg) {
- std::cout << arg;
+void printArg(std::ostream &setup, std::ostream& out, T arg) {
+ out << arg;
}
template<>
-void printArg(void* arg) {
- std::cout << "expressions[" << expressions[arg] << "]";
+void printArg(std::ostream &setup, std::ostream& out, BinaryenExpressionRef arg) {
+ out << "expressions[" << expressions[arg] << "]";
}
struct StringLit {
@@ -117,60 +126,83 @@ struct StringLit {
};
template<>
-void printArg(StringLit arg) {
- traceNameOrNULL(arg.name);
+void printArg(std::ostream &setup, std::ostream& out, StringLit arg) {
+ traceNameOrNULL(arg.name, out);
}
template<>
-void printArg(BinaryenType arg) {
+void printArg(std::ostream &setup, std::ostream &out, BinaryenType arg) {
if (arg == BinaryenTypeAuto()) {
- std::cout << "BinaryenTypeAuto()";
+ out << "BinaryenTypeAuto()";
} else {
- std::cout << arg;
+ out << arg;
}
}
template<>
-void printArg(BinaryenLiteral arg) {
+void printArg(std::ostream &setup, std::ostream &out, BinaryenLiteral arg) {
switch (arg.type) {
- case Type::i32: std::cout << "BinaryenLiteralInt32(" << arg.i32 << ")"; break;
- case Type::i64: std::cout << "BinaryenLiteralInt64(" << arg.i64 << ")"; break;
+ case Type::i32: out << "BinaryenLiteralInt32(" << arg.i32 << ")"; break;
+ case Type::i64: out << "BinaryenLiteralInt64(" << arg.i64 << ")"; break;
case Type::f32:
if (std::isnan(arg.f32)) {
- std::cout << "BinaryenLiteralFloat32(NAN)"; break;
+ out << "BinaryenLiteralFloat32(NAN)"; break;
} else {
- std::cout << "BinaryenLiteralFloat32(" << arg.f32 << ")"; break;
+ out << "BinaryenLiteralFloat32(" << arg.f32 << ")"; break;
}
case Type::f64:
if (std::isnan(arg.f64)) {
- std::cout << "BinaryenLiteralFloat64(NAN)"; break;
+ out << "BinaryenLiteralFloat64(NAN)"; break;
} else {
- std::cout << "BinaryenLiteralFloat64(" << arg.f64 << ")"; break;
+ out << "BinaryenLiteralFloat64(" << arg.f64 << ")"; break;
+ }
+ case Type::v128: {
+ std::string array = getTemp();
+ setup << "uint8_t " << array << "[] = {";
+ for (size_t i = 0; i < 16; ++i) {
+ setup << int(arg.v128[i]);
+ if (i < 15) {
+ setup << ", ";
+ }
}
- case Type::v128:
+ setup << "};\n";
+ out << "BinaryenLiteralVec128(" << array << ")";
+ break;
+ }
case Type::none:
case Type::unreachable: WASM_UNREACHABLE();
}
}
template<typename T>
-void traceArgs(T arg) {
- printArg(arg);
+void traceArgs(std::ostream &setup, std::ostream &out, T arg) {
+ printArg(setup, out, arg);
}
template<typename T, typename S, typename ...Ts>
-void traceArgs(T arg, S next, Ts... rest) {
- printArg(arg);
- std::cout << ", ";
- traceArgs(next, rest...);
+void traceArgs(std::ostream &setup, std::ostream &out, T arg, S next, Ts... rest) {
+ printArg(setup, out, arg);
+ out << ", ";
+ traceArgs(setup, out, next, rest...);
}
template<typename ...Ts>
void traceExpression(BinaryenExpressionRef expr, const char* constructor, Ts... args) {
auto id = noteExpression(expr);
- std::cout << " expressions[" << id << "] = " << constructor << "(";
- traceArgs("the_module", args...);
- std::cout << ");\n";
+ std::stringstream setup, out;
+ out << "expressions[" << id << "] = " << constructor << "(";
+ traceArgs(setup, out, "the_module", args...);
+ out << ");\n";
+ if (!setup.str().empty()) {
+ std::cout << " {\n";
+ for (std::string line; getline(setup, line);) {
+ std::cout << " " << line << "\n";
+ }
+ std::cout << " " << out.str();
+ std::cout << " }\n";
+ } else {
+ std::cout << " " << out.str();
+ }
}
extern "C" {
@@ -226,6 +258,11 @@ BinaryenExpressionId BinaryenAtomicCmpxchgId(void) { return Expression::Id::Atom
BinaryenExpressionId BinaryenAtomicRMWId(void) { return Expression::Id::AtomicRMWId; }
BinaryenExpressionId BinaryenAtomicWaitId(void) { return Expression::Id::AtomicWaitId; }
BinaryenExpressionId BinaryenAtomicWakeId(void) { return Expression::Id::AtomicWakeId; }
+BinaryenExpressionId BinaryenSIMDExtractId(void) { return Expression::Id::SIMDExtractId; }
+BinaryenExpressionId BinaryenSIMDReplaceId(void) { return Expression::Id::SIMDReplaceId; }
+BinaryenExpressionId BinaryenSIMDShuffleId(void) { return Expression::Id::SIMDShuffleId; }
+BinaryenExpressionId BinaryenSIMDBitselectId(void) { return Expression::Id::SIMDBitselectId; }
+BinaryenExpressionId BinaryenSIMDShiftId(void) { return Expression::Id::SIMDShiftId; }
// External kinds
@@ -325,6 +362,7 @@ BinaryenLiteral BinaryenLiteralInt32(int32_t x) { return toBinaryenLiteral(Liter
BinaryenLiteral BinaryenLiteralInt64(int64_t x) { return toBinaryenLiteral(Literal(x)); }
BinaryenLiteral BinaryenLiteralFloat32(float x) { return toBinaryenLiteral(Literal(x)); }
BinaryenLiteral BinaryenLiteralFloat64(double x) { return toBinaryenLiteral(Literal(x)); }
+BinaryenLiteral BinaryenLiteralVec128(const uint8_t x[16]) { return toBinaryenLiteral(Literal(x)); }
BinaryenLiteral BinaryenLiteralFloat32Bits(int32_t x) { return toBinaryenLiteral(Literal(x).castToF32()); }
BinaryenLiteral BinaryenLiteralFloat64Bits(int64_t x) { return toBinaryenLiteral(Literal(x).castToF64()); }
@@ -474,6 +512,141 @@ BinaryenOp BinaryenTruncSatSFloat64ToInt32(void) { return TruncSatSFloat64ToInt3
BinaryenOp BinaryenTruncSatSFloat64ToInt64(void) { return TruncSatSFloat64ToInt64; }
BinaryenOp BinaryenTruncSatUFloat64ToInt32(void) { return TruncSatUFloat64ToInt32; }
BinaryenOp BinaryenTruncSatUFloat64ToInt64(void) { return TruncSatUFloat64ToInt64; }
+BinaryenOp BinaryenSplatVecI8x16(void) { return SplatVecI8x16; }
+BinaryenOp BinaryenExtractLaneSVecI8x16(void) { return ExtractLaneSVecI8x16; }
+BinaryenOp BinaryenExtractLaneUVecI8x16(void) { return ExtractLaneUVecI8x16; }
+BinaryenOp BinaryenReplaceLaneVecI8x16(void) { return ReplaceLaneVecI8x16; }
+BinaryenOp BinaryenSplatVecI16x8(void) { return SplatVecI16x8; }
+BinaryenOp BinaryenExtractLaneSVecI16x8(void) { return ExtractLaneSVecI16x8; }
+BinaryenOp BinaryenExtractLaneUVecI16x8(void) { return ExtractLaneUVecI16x8; }
+BinaryenOp BinaryenReplaceLaneVecI16x8(void) { return ReplaceLaneVecI16x8; }
+BinaryenOp BinaryenSplatVecI32x4(void) { return SplatVecI32x4; }
+BinaryenOp BinaryenExtractLaneVecI32x4(void) { return ExtractLaneVecI32x4; }
+BinaryenOp BinaryenReplaceLaneVecI32x4(void) { return ReplaceLaneVecI32x4; }
+BinaryenOp BinaryenSplatVecI64x2(void) { return SplatVecI64x2; }
+BinaryenOp BinaryenExtractLaneVecI64x2(void) { return ExtractLaneVecI64x2; }
+BinaryenOp BinaryenReplaceLaneVecI64x2(void) { return ReplaceLaneVecI64x2; }
+BinaryenOp BinaryenSplatVecF32x4(void) { return SplatVecF32x4; }
+BinaryenOp BinaryenExtractLaneVecF32x4(void) { return ExtractLaneVecF32x4; }
+BinaryenOp BinaryenReplaceLaneVecF32x4(void) { return ReplaceLaneVecF32x4; }
+BinaryenOp BinaryenSplatVecF64x2(void) { return SplatVecF64x2; }
+BinaryenOp BinaryenExtractLaneVecF64x2(void) { return ExtractLaneVecF64x2; }
+BinaryenOp BinaryenReplaceLaneVecF64x2(void) { return ReplaceLaneVecF64x2; }
+BinaryenOp BinaryenEqVecI8x16(void) { return EqVecI8x16; }
+BinaryenOp BinaryenNeVecI8x16(void) { return NeVecI8x16; }
+BinaryenOp BinaryenLtSVecI8x16(void) { return LtSVecI8x16; }
+BinaryenOp BinaryenLtUVecI8x16(void) { return LtUVecI8x16; }
+BinaryenOp BinaryenGtSVecI8x16(void) { return GtSVecI8x16; }
+BinaryenOp BinaryenGtUVecI8x16(void) { return GtUVecI8x16; }
+BinaryenOp BinaryenLeSVecI8x16(void) { return LeSVecI8x16; }
+BinaryenOp BinaryenLeUVecI8x16(void) { return LeUVecI8x16; }
+BinaryenOp BinaryenGeSVecI8x16(void) { return GeSVecI8x16; }
+BinaryenOp BinaryenGeUVecI8x16(void) { return GeUVecI8x16; }
+BinaryenOp BinaryenEqVecI16x8(void) { return EqVecI16x8; }
+BinaryenOp BinaryenNeVecI16x8(void) { return NeVecI16x8; }
+BinaryenOp BinaryenLtSVecI16x8(void) { return LtSVecI16x8; }
+BinaryenOp BinaryenLtUVecI16x8(void) { return LtUVecI16x8; }
+BinaryenOp BinaryenGtSVecI16x8(void) { return GtSVecI16x8; }
+BinaryenOp BinaryenGtUVecI16x8(void) { return GtUVecI16x8; }
+BinaryenOp BinaryenLeSVecI16x8(void) { return LeSVecI16x8; }
+BinaryenOp BinaryenLeUVecI16x8(void) { return LeUVecI16x8; }
+BinaryenOp BinaryenGeSVecI16x8(void) { return GeSVecI16x8; }
+BinaryenOp BinaryenGeUVecI16x8(void) { return GeUVecI16x8; }
+BinaryenOp BinaryenEqVecI32x4(void) { return EqVecI32x4; }
+BinaryenOp BinaryenNeVecI32x4(void) { return NeVecI32x4; }
+BinaryenOp BinaryenLtSVecI32x4(void) { return LtSVecI32x4; }
+BinaryenOp BinaryenLtUVecI32x4(void) { return LtUVecI32x4; }
+BinaryenOp BinaryenGtSVecI32x4(void) { return GtSVecI32x4; }
+BinaryenOp BinaryenGtUVecI32x4(void) { return GtUVecI32x4; }
+BinaryenOp BinaryenLeSVecI32x4(void) { return LeSVecI32x4; }
+BinaryenOp BinaryenLeUVecI32x4(void) { return LeUVecI32x4; }
+BinaryenOp BinaryenGeSVecI32x4(void) { return GeSVecI32x4; }
+BinaryenOp BinaryenGeUVecI32x4(void) { return GeUVecI32x4; }
+BinaryenOp BinaryenEqVecF32x4(void) { return EqVecF32x4; }
+BinaryenOp BinaryenNeVecF32x4(void) { return NeVecF32x4; }
+BinaryenOp BinaryenLtVecF32x4(void) { return LtVecF32x4; }
+BinaryenOp BinaryenGtVecF32x4(void) { return GtVecF32x4; }
+BinaryenOp BinaryenLeVecF32x4(void) { return LeVecF32x4; }
+BinaryenOp BinaryenGeVecF32x4(void) { return GeVecF32x4; }
+BinaryenOp BinaryenEqVecF64x2(void) { return EqVecF64x2; }
+BinaryenOp BinaryenNeVecF64x2(void) { return NeVecF64x2; }
+BinaryenOp BinaryenLtVecF64x2(void) { return LtVecF64x2; }
+BinaryenOp BinaryenGtVecF64x2(void) { return GtVecF64x2; }
+BinaryenOp BinaryenLeVecF64x2(void) { return LeVecF64x2; }
+BinaryenOp BinaryenGeVecF64x2(void) { return GeVecF64x2; }
+BinaryenOp BinaryenNotVec128(void) { return NotVec128; }
+BinaryenOp BinaryenAndVec128(void) { return AndVec128; }
+BinaryenOp BinaryenOrVec128(void) { return OrVec128; }
+BinaryenOp BinaryenXorVec128(void) { return XorVec128; }
+BinaryenOp BinaryenNegVecI8x16(void) { return NegVecI8x16; }
+BinaryenOp BinaryenAnyTrueVecI8x16(void) { return AnyTrueVecI8x16; }
+BinaryenOp BinaryenAllTrueVecI8x16(void) { return AllTrueVecI8x16; }
+BinaryenOp BinaryenShlVecI8x16(void) { return ShlVecI8x16; }
+BinaryenOp BinaryenShrSVecI8x16(void) { return ShrSVecI8x16; }
+BinaryenOp BinaryenShrUVecI8x16(void) { return ShrUVecI8x16; }
+BinaryenOp BinaryenAddVecI8x16(void) { return AddVecI8x16; }
+BinaryenOp BinaryenAddSatSVecI8x16(void) { return AddSatSVecI8x16; }
+BinaryenOp BinaryenAddSatUVecI8x16(void) { return AddSatUVecI8x16; }
+BinaryenOp BinaryenSubVecI8x16(void) { return SubVecI8x16; }
+BinaryenOp BinaryenSubSatSVecI8x16(void) { return SubSatSVecI8x16; }
+BinaryenOp BinaryenSubSatUVecI8x16(void) { return SubSatUVecI8x16; }
+BinaryenOp BinaryenMulVecI8x16(void) { return MulVecI8x16; }
+BinaryenOp BinaryenNegVecI16x8(void) { return NegVecI16x8; }
+BinaryenOp BinaryenAnyTrueVecI16x8(void) { return AnyTrueVecI16x8; }
+BinaryenOp BinaryenAllTrueVecI16x8(void) { return AllTrueVecI16x8; }
+BinaryenOp BinaryenShlVecI16x8(void) { return ShlVecI16x8; }
+BinaryenOp BinaryenShrSVecI16x8(void) { return ShrSVecI16x8; }
+BinaryenOp BinaryenShrUVecI16x8(void) { return ShrUVecI16x8; }
+BinaryenOp BinaryenAddVecI16x8(void) { return AddVecI16x8; }
+BinaryenOp BinaryenAddSatSVecI16x8(void) { return AddSatSVecI16x8; }
+BinaryenOp BinaryenAddSatUVecI16x8(void) { return AddSatUVecI16x8; }
+BinaryenOp BinaryenSubVecI16x8(void) { return SubVecI16x8; }
+BinaryenOp BinaryenSubSatSVecI16x8(void) { return SubSatSVecI16x8; }
+BinaryenOp BinaryenSubSatUVecI16x8(void) { return SubSatUVecI16x8; }
+BinaryenOp BinaryenMulVecI16x8(void) { return MulVecI16x8; }
+BinaryenOp BinaryenNegVecI32x4(void) { return NegVecI32x4; }
+BinaryenOp BinaryenAnyTrueVecI32x4(void) { return AnyTrueVecI32x4; }
+BinaryenOp BinaryenAllTrueVecI32x4(void) { return AllTrueVecI32x4; }
+BinaryenOp BinaryenShlVecI32x4(void) { return ShlVecI32x4; }
+BinaryenOp BinaryenShrSVecI32x4(void) { return ShrSVecI32x4; }
+BinaryenOp BinaryenShrUVecI32x4(void) { return ShrUVecI32x4; }
+BinaryenOp BinaryenAddVecI32x4(void) { return AddVecI32x4; }
+BinaryenOp BinaryenSubVecI32x4(void) { return SubVecI32x4; }
+BinaryenOp BinaryenMulVecI32x4(void) { return MulVecI32x4; }
+BinaryenOp BinaryenNegVecI64x2(void) { return NegVecI64x2; }
+BinaryenOp BinaryenAnyTrueVecI64x2(void) { return AnyTrueVecI64x2; }
+BinaryenOp BinaryenAllTrueVecI64x2(void) { return AllTrueVecI64x2; }
+BinaryenOp BinaryenShlVecI64x2(void) { return ShlVecI64x2; }
+BinaryenOp BinaryenShrSVecI64x2(void) { return ShrSVecI64x2; }
+BinaryenOp BinaryenShrUVecI64x2(void) { return ShrUVecI64x2; }
+BinaryenOp BinaryenAddVecI64x2(void) { return AddVecI64x2; }
+BinaryenOp BinaryenSubVecI64x2(void) { return SubVecI64x2; }
+BinaryenOp BinaryenAbsVecF32x4(void) { return AbsVecF32x4; }
+BinaryenOp BinaryenNegVecF32x4(void) { return NegVecF32x4; }
+BinaryenOp BinaryenSqrtVecF32x4(void) { return SqrtVecF32x4; }
+BinaryenOp BinaryenAddVecF32x4(void) { return AddVecF32x4; }
+BinaryenOp BinaryenSubVecF32x4(void) { return SubVecF32x4; }
+BinaryenOp BinaryenMulVecF32x4(void) { return MulVecF32x4; }
+BinaryenOp BinaryenDivVecF32x4(void) { return DivVecF32x4; }
+BinaryenOp BinaryenMinVecF32x4(void) { return MinVecF32x4; }
+BinaryenOp BinaryenMaxVecF32x4(void) { return MaxVecF32x4; }
+BinaryenOp BinaryenAbsVecF64x2(void) { return AbsVecF64x2; }
+BinaryenOp BinaryenNegVecF64x2(void) { return NegVecF64x2; }
+BinaryenOp BinaryenSqrtVecF64x2(void) { return SqrtVecF64x2; }
+BinaryenOp BinaryenAddVecF64x2(void) { return AddVecF64x2; }
+BinaryenOp BinaryenSubVecF64x2(void) { return SubVecF64x2; }
+BinaryenOp BinaryenMulVecF64x2(void) { return MulVecF64x2; }
+BinaryenOp BinaryenDivVecF64x2(void) { return DivVecF64x2; }
+BinaryenOp BinaryenMinVecF64x2(void) { return MinVecF64x2; }
+BinaryenOp BinaryenMaxVecF64x2(void) { return MaxVecF64x2; }
+BinaryenOp BinaryenTruncSatSVecF32x4ToVecI32x4(void) { return TruncSatSVecF32x4ToVecI32x4; }
+BinaryenOp BinaryenTruncSatUVecF32x4ToVecI32x4(void) { return TruncSatUVecF32x4ToVecI32x4; }
+BinaryenOp BinaryenTruncSatSVecF64x2ToVecI64x2(void) { return TruncSatSVecF64x2ToVecI64x2; }
+BinaryenOp BinaryenTruncSatUVecF64x2ToVecI64x2(void) { return TruncSatUVecF64x2ToVecI64x2; }
+BinaryenOp BinaryenConvertSVecI32x4ToVecF32x4(void) { return ConvertSVecI32x4ToVecF32x4; }
+BinaryenOp BinaryenConvertUVecI32x4ToVecF32x4(void) { return ConvertUVecI32x4ToVecF32x4; }
+BinaryenOp BinaryenConvertSVecI64x2ToVecF64x2(void) { return ConvertSVecI64x2ToVecF64x2; }
+BinaryenOp BinaryenConvertUVecI64x2ToVecF64x2(void) { return ConvertUVecI64x2ToVecF64x2; }
BinaryenExpressionRef BinaryenBlock(BinaryenModuleRef module, const char* name, BinaryenExpressionRef* children, BinaryenIndex numChildren, BinaryenType type) {
auto* ret = ((Module*)module)->allocator.alloc<Block>();
@@ -854,6 +1027,53 @@ BinaryenExpressionRef BinaryenAtomicWake(BinaryenModuleRef module, BinaryenExpre
return static_cast<Expression*>(ret);
}
+BinaryenExpressionRef BinaryenSIMDExtract(BinaryenModuleRef module, BinaryenOp op, BinaryenExpressionRef vec, uint8_t idx) {
+ auto* ret = Builder(*((Module*)module)).makeSIMDExtract(SIMDExtractOp(op), (Expression*) vec, idx);
+ if (tracing) {
+ traceExpression(ret, "BinaryenSIMDExtract", op, vec, int(idx));
+ }
+ return static_cast<Expression*>(ret);
+}
+BinaryenExpressionRef BinaryenSIMDReplace(BinaryenModuleRef module, BinaryenOp op, BinaryenExpressionRef vec, uint8_t idx, BinaryenExpressionRef value) {
+ auto* ret = Builder(*((Module*)module)).makeSIMDReplace(SIMDReplaceOp(op), (Expression*) vec, idx, (Expression*)value);
+ if (tracing) {
+ traceExpression(ret, "BinaryenSIMDReplace", op, vec, int(idx), value);
+ }
+ return static_cast<Expression*>(ret);
+}
+BinaryenExpressionRef BinaryenSIMDShuffle(BinaryenModuleRef module, BinaryenExpressionRef left, BinaryenExpressionRef right, const uint8_t mask_[16]) {
+ std::array<uint8_t, 16> mask;
+ memcpy(mask.data(), mask_, 16);
+ auto* ret = Builder(*((Module*)module)).makeSIMDShuffle((Expression*)left, (Expression*)right, mask);
+ if (tracing) {
+ std::cout << " {\n";
+ std::cout << " uint8_t mask[] = {";
+ for (size_t i = 0; i < mask.size(); ++i) {
+ std::cout << int(mask[i]);
+ if (i < mask.size() - 1) {
+ std::cout << ", ";
+ }
+ }
+ std::cout << "};\n ";
+ traceExpression(ret, "BinaryenSIMDShuffle", left, right, "mask");
+ std::cout << " }\n";
+ }
+ return static_cast<Expression*>(ret);
+}
+BinaryenExpressionRef BinaryenSIMDBitselect(BinaryenModuleRef module, BinaryenExpressionRef left, BinaryenExpressionRef right, BinaryenExpressionRef cond) {
+ auto* ret = Builder(*((Module*)module)).makeSIMDBitselect((Expression*)left, (Expression*)right, (Expression*)cond);
+ if (tracing) {
+ traceExpression(ret, "BinaryenSIMDBitselect", left, right, cond);
+ }
+ return static_cast<Expression*>(ret);
+}
+BinaryenExpressionRef BinaryenSIMDShift(BinaryenModuleRef module, BinaryenOp op, BinaryenExpressionRef vec, BinaryenExpressionRef shift) {
+ auto* ret = Builder(*((Module*)module)).makeSIMDShift(SIMDShiftOp(op), (Expression*)vec, (Expression*)shift);
+ if (tracing) {
+ traceExpression(ret, "BinaryenSIMDShift", op, vec, shift);
+ }
+ return static_cast<Expression*>(ret);
+}
// Expression utility
@@ -1604,6 +1824,155 @@ BinaryenExpressionRef BinaryenAtomicWakeGetWakeCount(BinaryenExpressionRef expr)
assert(expression->is<AtomicWake>());
return static_cast<AtomicWake*>(expression)->wakeCount;
}
+// SIMDExtract
+BinaryenOp BinaryenSIMDExtractGetOp(BinaryenExpressionRef expr) {
+ if (tracing) {
+ std::cout << " BinaryenSIMDExtractGetOp(expressions[" << expressions[expr] << "]);\n";
+ }
+
+ auto* expression = (Expression*)expr;
+ assert(expression->is<SIMDExtract>());
+ return static_cast<SIMDExtract*>(expression)->op;
+}
+BinaryenExpressionRef BinaryenSIMDExtractGetVec(BinaryenExpressionRef expr) {
+ if (tracing) {
+ std::cout << " BinaryenSIMDExtractGetVec(expressions[" << expressions[expr] << "]);\n";
+ }
+
+ auto* expression = (Expression*)expr;
+ assert(expression->is<SIMDExtract>());
+ return static_cast<SIMDExtract*>(expression)->vec;
+}
+uint8_t BinaryenSIMDExtractGetIdx(BinaryenExpressionRef expr) {
+ if (tracing) {
+ std::cout << " BinaryenSIMDExtractGetIdx(expressions[" << expressions[expr] << "]);\n";
+ }
+
+ auto* expression = (Expression*)expr;
+ assert(expression->is<SIMDExtract>());
+ return static_cast<SIMDExtract*>(expression)->idx;
+}
+// SIMDReplace
+BinaryenOp BinaryenSIMDReplaceGetOp(BinaryenExpressionRef expr) {
+ if (tracing) {
+ std::cout << " BinaryenSIMDReplaceGetOp(expressions[" << expressions[expr] << "]);\n";
+ }
+
+ auto* expression = (Expression*)expr;
+ assert(expression->is<SIMDReplace>());
+ return static_cast<SIMDReplace*>(expression)->op;
+}
+BinaryenExpressionRef BinaryenSIMDReplaceGetVec(BinaryenExpressionRef expr) {
+ if (tracing) {
+ std::cout << " BinaryenSIMDReplaceGetVec(expressions[" << expressions[expr] << "]);\n";
+ }
+
+ auto* expression = (Expression*)expr;
+ assert(expression->is<SIMDReplace>());
+ return static_cast<SIMDReplace*>(expression)->vec;
+}
+uint8_t BinaryenSIMDReplaceGetIdx(BinaryenExpressionRef expr) {
+ if (tracing) {
+ std::cout << " BinaryenSIMDReplaceGetIdx(expressions[" << expressions[expr] << "]);\n";
+ }
+
+ auto* expression = (Expression*)expr;
+ assert(expression->is<SIMDReplace>());
+ return static_cast<SIMDReplace*>(expression)->idx;
+}
+BinaryenExpressionRef BinaryenSIMDReplaceGetValue(BinaryenExpressionRef expr) {
+ if (tracing) {
+ std::cout << " BinaryenSIMDReplaceGetValue(expressions[" << expressions[expr] << "]);\n";
+ }
+
+ auto* expression = (Expression*)expr;
+ assert(expression->is<SIMDReplace>());
+ return static_cast<SIMDReplace*>(expression)->value;
+}
+// SIMDShuffle
+BinaryenExpressionRef BinaryenSIMDShuffleGetLeft(BinaryenExpressionRef expr) {
+ if (tracing) {
+ std::cout << " BinaryenSIMDShuffleGetLeft(expressions[" << expressions[expr] << "]);\n";
+ }
+
+ auto* expression = (Expression*)expr;
+ assert(expression->is<SIMDShuffle>());
+ return static_cast<SIMDShuffle*>(expression)->left;
+}
+BinaryenExpressionRef BinaryenSIMDShuffleGetRight(BinaryenExpressionRef expr) {
+ if (tracing) {
+ std::cout << " BinaryenSIMDShuffleGetRight(expressions[" << expressions[expr] << "]);\n";
+ }
+
+ auto* expression = (Expression*)expr;
+ assert(expression->is<SIMDShuffle>());
+ return static_cast<SIMDShuffle*>(expression)->right;
+}
+void BinaryenSIMDShuffleGetMask(BinaryenExpressionRef expr, uint8_t *mask) {
+ if (tracing) {
+ std::cout << " BinaryenSIMDShuffleGetMask(expressions[" << expressions[expr] << "]);\n";
+ }
+
+ auto* expression = (Expression*)expr;
+ assert(expression->is<SIMDShuffle>());
+ memcpy(mask, static_cast<SIMDShuffle*>(expression)->mask.data(), 16);
+}
+// SIMDBitselect
+BinaryenExpressionRef BinaryenSIMDBitselectGetLeft(BinaryenExpressionRef expr) {
+ if (tracing) {
+ std::cout << " BinaryenSIMDBitselectGetLeft(expressions[" << expressions[expr] << "]);\n";
+ }
+
+ auto* expression = (Expression*)expr;
+ assert(expression->is<SIMDBitselect>());
+ return static_cast<SIMDBitselect*>(expression)->left;
+}
+BinaryenExpressionRef BinaryenSIMDBitselectGetRight(BinaryenExpressionRef expr) {
+ if (tracing) {
+ std::cout << " BinaryenSIMDBitselectGetRight(expressions[" << expressions[expr] << "]);\n";
+ }
+
+ auto* expression = (Expression*)expr;
+ assert(expression->is<SIMDBitselect>());
+ return static_cast<SIMDBitselect*>(expression)->right;
+}
+BinaryenExpressionRef BinaryenSIMDBitselectGetCond(BinaryenExpressionRef expr) {
+ if (tracing) {
+ std::cout << " BinaryenSIMDBitselectGetCond(expressions[" << expressions[expr] << "]);\n";
+ }
+
+ auto* expression = (Expression*)expr;
+ assert(expression->is<SIMDBitselect>());
+ return static_cast<SIMDBitselect*>(expression)->cond;
+}
+// SIMDShift
+BinaryenOp BinaryenSIMDShiftGetOp(BinaryenExpressionRef expr) {
+ if (tracing) {
+ std::cout << " BinaryenSIMDShiftGetOp(expressions[" << expressions[expr] << "]);\n";
+ }
+
+ auto* expression = (Expression*)expr;
+ assert(expression->is<SIMDShift>());
+ return static_cast<SIMDShift*>(expression)->op;
+}
+BinaryenExpressionRef BinaryenSIMDShiftGetVec(BinaryenExpressionRef expr) {
+ if (tracing) {
+ std::cout << " BinaryenSIMDShiftGetVec(expressions[" << expressions[expr] << "]);\n";
+ }
+
+ auto* expression = (Expression*)expr;
+ assert(expression->is<SIMDShift>());
+ return static_cast<SIMDShift*>(expression)->vec;
+}
+BinaryenExpressionRef BinaryenSIMDShiftGetShift(BinaryenExpressionRef expr) {
+ if (tracing) {
+ std::cout << " BinaryenSIMDShiftGetShift(expressions[" << expressions[expr] << "]);\n";
+ }
+
+ auto* expression = (Expression*)expr;
+ assert(expression->is<SIMDShift>());
+ return static_cast<SIMDShift*>(expression)->shift;
+}
// Functions
diff --git a/src/binaryen-c.h b/src/binaryen-c.h
index dc47b379f..9d1992851 100644
--- a/src/binaryen-c.h
+++ b/src/binaryen-c.h
@@ -117,6 +117,11 @@ BinaryenExpressionId BinaryenAtomicCmpxchgId(void);
BinaryenExpressionId BinaryenAtomicRMWId(void);
BinaryenExpressionId BinaryenAtomicWaitId(void);
BinaryenExpressionId BinaryenAtomicWakeId(void);
+BinaryenExpressionId BinaryenSIMDExtractId(void);
+BinaryenExpressionId BinaryenSIMDReplaceId(void);
+BinaryenExpressionId BinaryenSIMDShuffleId(void);
+BinaryenExpressionId BinaryenSIMDBitselectId(void);
+BinaryenExpressionId BinaryenSIMDShiftId(void);
// External kinds (call to get the value of each; you can cache them)
@@ -166,6 +171,7 @@ struct BinaryenLiteral {
int64_t i64;
float f32;
double f64;
+ uint8_t v128[16];
};
};
@@ -173,6 +179,7 @@ struct BinaryenLiteral BinaryenLiteralInt32(int32_t x);
struct BinaryenLiteral BinaryenLiteralInt64(int64_t x);
struct BinaryenLiteral BinaryenLiteralFloat32(float x);
struct BinaryenLiteral BinaryenLiteralFloat64(double x);
+struct BinaryenLiteral BinaryenLiteralVec128(const uint8_t x[16]);
struct BinaryenLiteral BinaryenLiteralFloat32Bits(int32_t x);
struct BinaryenLiteral BinaryenLiteralFloat64Bits(int64_t x);
@@ -332,6 +339,141 @@ BinaryenOp BinaryenTruncSatSFloat64ToInt32(void);
BinaryenOp BinaryenTruncSatSFloat64ToInt64(void);
BinaryenOp BinaryenTruncSatUFloat64ToInt32(void);
BinaryenOp BinaryenTruncSatUFloat64ToInt64(void);
+BinaryenOp BinaryenSplatVecI8x16(void);
+BinaryenOp BinaryenExtractLaneSVecI8x16(void);
+BinaryenOp BinaryenExtractLaneUVecI8x16(void);
+BinaryenOp BinaryenReplaceLaneVecI8x16(void);
+BinaryenOp BinaryenSplatVecI16x8(void);
+BinaryenOp BinaryenExtractLaneSVecI16x8(void);
+BinaryenOp BinaryenExtractLaneUVecI16x8(void);
+BinaryenOp BinaryenReplaceLaneVecI16x8(void);
+BinaryenOp BinaryenSplatVecI32x4(void);
+BinaryenOp BinaryenExtractLaneVecI32x4(void);
+BinaryenOp BinaryenReplaceLaneVecI32x4(void);
+BinaryenOp BinaryenSplatVecI64x2(void);
+BinaryenOp BinaryenExtractLaneVecI64x2(void);
+BinaryenOp BinaryenReplaceLaneVecI64x2(void);
+BinaryenOp BinaryenSplatVecF32x4(void);
+BinaryenOp BinaryenExtractLaneVecF32x4(void);
+BinaryenOp BinaryenReplaceLaneVecF32x4(void);
+BinaryenOp BinaryenSplatVecF64x2(void);
+BinaryenOp BinaryenExtractLaneVecF64x2(void);
+BinaryenOp BinaryenReplaceLaneVecF64x2(void);
+BinaryenOp BinaryenEqVecI8x16(void);
+BinaryenOp BinaryenNeVecI8x16(void);
+BinaryenOp BinaryenLtSVecI8x16(void);
+BinaryenOp BinaryenLtUVecI8x16(void);
+BinaryenOp BinaryenGtSVecI8x16(void);
+BinaryenOp BinaryenGtUVecI8x16(void);
+BinaryenOp BinaryenLeSVecI8x16(void);
+BinaryenOp BinaryenLeUVecI8x16(void);
+BinaryenOp BinaryenGeSVecI8x16(void);
+BinaryenOp BinaryenGeUVecI8x16(void);
+BinaryenOp BinaryenEqVecI16x8(void);
+BinaryenOp BinaryenNeVecI16x8(void);
+BinaryenOp BinaryenLtSVecI16x8(void);
+BinaryenOp BinaryenLtUVecI16x8(void);
+BinaryenOp BinaryenGtSVecI16x8(void);
+BinaryenOp BinaryenGtUVecI16x8(void);
+BinaryenOp BinaryenLeSVecI16x8(void);
+BinaryenOp BinaryenLeUVecI16x8(void);
+BinaryenOp BinaryenGeSVecI16x8(void);
+BinaryenOp BinaryenGeUVecI16x8(void);
+BinaryenOp BinaryenEqVecI32x4(void);
+BinaryenOp BinaryenNeVecI32x4(void);
+BinaryenOp BinaryenLtSVecI32x4(void);
+BinaryenOp BinaryenLtUVecI32x4(void);
+BinaryenOp BinaryenGtSVecI32x4(void);
+BinaryenOp BinaryenGtUVecI32x4(void);
+BinaryenOp BinaryenLeSVecI32x4(void);
+BinaryenOp BinaryenLeUVecI32x4(void);
+BinaryenOp BinaryenGeSVecI32x4(void);
+BinaryenOp BinaryenGeUVecI32x4(void);
+BinaryenOp BinaryenEqVecF32x4(void);
+BinaryenOp BinaryenNeVecF32x4(void);
+BinaryenOp BinaryenLtVecF32x4(void);
+BinaryenOp BinaryenGtVecF32x4(void);
+BinaryenOp BinaryenLeVecF32x4(void);
+BinaryenOp BinaryenGeVecF32x4(void);
+BinaryenOp BinaryenEqVecF64x2(void);
+BinaryenOp BinaryenNeVecF64x2(void);
+BinaryenOp BinaryenLtVecF64x2(void);
+BinaryenOp BinaryenGtVecF64x2(void);
+BinaryenOp BinaryenLeVecF64x2(void);
+BinaryenOp BinaryenGeVecF64x2(void);
+BinaryenOp BinaryenNotVec128(void);
+BinaryenOp BinaryenAndVec128(void);
+BinaryenOp BinaryenOrVec128(void);
+BinaryenOp BinaryenXorVec128(void);
+BinaryenOp BinaryenNegVecI8x16(void);
+BinaryenOp BinaryenAnyTrueVecI8x16(void);
+BinaryenOp BinaryenAllTrueVecI8x16(void);
+BinaryenOp BinaryenShlVecI8x16(void);
+BinaryenOp BinaryenShrSVecI8x16(void);
+BinaryenOp BinaryenShrUVecI8x16(void);
+BinaryenOp BinaryenAddVecI8x16(void);
+BinaryenOp BinaryenAddSatSVecI8x16(void);
+BinaryenOp BinaryenAddSatUVecI8x16(void);
+BinaryenOp BinaryenSubVecI8x16(void);
+BinaryenOp BinaryenSubSatSVecI8x16(void);
+BinaryenOp BinaryenSubSatUVecI8x16(void);
+BinaryenOp BinaryenMulVecI8x16(void);
+BinaryenOp BinaryenNegVecI16x8(void);
+BinaryenOp BinaryenAnyTrueVecI16x8(void);
+BinaryenOp BinaryenAllTrueVecI16x8(void);
+BinaryenOp BinaryenShlVecI16x8(void);
+BinaryenOp BinaryenShrSVecI16x8(void);
+BinaryenOp BinaryenShrUVecI16x8(void);
+BinaryenOp BinaryenAddVecI16x8(void);
+BinaryenOp BinaryenAddSatSVecI16x8(void);
+BinaryenOp BinaryenAddSatUVecI16x8(void);
+BinaryenOp BinaryenSubVecI16x8(void);
+BinaryenOp BinaryenSubSatSVecI16x8(void);
+BinaryenOp BinaryenSubSatUVecI16x8(void);
+BinaryenOp BinaryenMulVecI16x8(void);
+BinaryenOp BinaryenNegVecI32x4(void);
+BinaryenOp BinaryenAnyTrueVecI32x4(void);
+BinaryenOp BinaryenAllTrueVecI32x4(void);
+BinaryenOp BinaryenShlVecI32x4(void);
+BinaryenOp BinaryenShrSVecI32x4(void);
+BinaryenOp BinaryenShrUVecI32x4(void);
+BinaryenOp BinaryenAddVecI32x4(void);
+BinaryenOp BinaryenSubVecI32x4(void);
+BinaryenOp BinaryenMulVecI32x4(void);
+BinaryenOp BinaryenNegVecI64x2(void);
+BinaryenOp BinaryenAnyTrueVecI64x2(void);
+BinaryenOp BinaryenAllTrueVecI64x2(void);
+BinaryenOp BinaryenShlVecI64x2(void);
+BinaryenOp BinaryenShrSVecI64x2(void);
+BinaryenOp BinaryenShrUVecI64x2(void);
+BinaryenOp BinaryenAddVecI64x2(void);
+BinaryenOp BinaryenSubVecI64x2(void);
+BinaryenOp BinaryenAbsVecF32x4(void);
+BinaryenOp BinaryenNegVecF32x4(void);
+BinaryenOp BinaryenSqrtVecF32x4(void);
+BinaryenOp BinaryenAddVecF32x4(void);
+BinaryenOp BinaryenSubVecF32x4(void);
+BinaryenOp BinaryenMulVecF32x4(void);
+BinaryenOp BinaryenDivVecF32x4(void);
+BinaryenOp BinaryenMinVecF32x4(void);
+BinaryenOp BinaryenMaxVecF32x4(void);
+BinaryenOp BinaryenAbsVecF64x2(void);
+BinaryenOp BinaryenNegVecF64x2(void);
+BinaryenOp BinaryenSqrtVecF64x2(void);
+BinaryenOp BinaryenAddVecF64x2(void);
+BinaryenOp BinaryenSubVecF64x2(void);
+BinaryenOp BinaryenMulVecF64x2(void);
+BinaryenOp BinaryenDivVecF64x2(void);
+BinaryenOp BinaryenMinVecF64x2(void);
+BinaryenOp BinaryenMaxVecF64x2(void);
+BinaryenOp BinaryenTruncSatSVecF32x4ToVecI32x4(void);
+BinaryenOp BinaryenTruncSatUVecF32x4ToVecI32x4(void);
+BinaryenOp BinaryenTruncSatSVecF64x2ToVecI64x2(void);
+BinaryenOp BinaryenTruncSatUVecF64x2ToVecI64x2(void);
+BinaryenOp BinaryenConvertSVecI32x4ToVecF32x4(void);
+BinaryenOp BinaryenConvertUVecI32x4ToVecF32x4(void);
+BinaryenOp BinaryenConvertSVecI64x2ToVecF64x2(void);
+BinaryenOp BinaryenConvertUVecI64x2ToVecF64x2(void);
typedef void* BinaryenExpressionRef;
@@ -393,192 +535,139 @@ BinaryenExpressionRef BinaryenAtomicRMW(BinaryenModuleRef module, BinaryenOp op,
BinaryenExpressionRef BinaryenAtomicCmpxchg(BinaryenModuleRef module, BinaryenIndex bytes, BinaryenIndex offset, BinaryenExpressionRef ptr, BinaryenExpressionRef expected, BinaryenExpressionRef replacement, BinaryenType type);
BinaryenExpressionRef BinaryenAtomicWait(BinaryenModuleRef module, BinaryenExpressionRef ptr, BinaryenExpressionRef expected, BinaryenExpressionRef timeout, BinaryenType type);
BinaryenExpressionRef BinaryenAtomicWake(BinaryenModuleRef module, BinaryenExpressionRef ptr, BinaryenExpressionRef wakeCount);
+BinaryenExpressionRef BinaryenSIMDExtract(BinaryenModuleRef module, BinaryenOp op, BinaryenExpressionRef vec, uint8_t idx);
+BinaryenExpressionRef BinaryenSIMDReplace(BinaryenModuleRef module, BinaryenOp op, BinaryenExpressionRef vec, uint8_t idx, BinaryenExpressionRef value);
+BinaryenExpressionRef BinaryenSIMDShuffle(BinaryenModuleRef module, BinaryenExpressionRef left, BinaryenExpressionRef right, const uint8_t mask[16]);
+BinaryenExpressionRef BinaryenSIMDBitselect(BinaryenModuleRef module, BinaryenExpressionRef left, BinaryenExpressionRef right, BinaryenExpressionRef cond);
+BinaryenExpressionRef BinaryenSIMDShift(BinaryenModuleRef module, BinaryenOp op, BinaryenExpressionRef vec, BinaryenExpressionRef shift);
-// Gets the id (kind) of the specified expression.
BinaryenExpressionId BinaryenExpressionGetId(BinaryenExpressionRef expr);
-// Gets the type of the specified expression.
BinaryenType BinaryenExpressionGetType(BinaryenExpressionRef expr);
-// Prints an expression to stdout. Useful for debugging.
void BinaryenExpressionPrint(BinaryenExpressionRef expr);
-// Gets the name of the specified `Block` expression. May be `NULL`.
const char* BinaryenBlockGetName(BinaryenExpressionRef expr);
-// Gets the number of nested child expressions within the specified `Block` expression.
BinaryenIndex BinaryenBlockGetNumChildren(BinaryenExpressionRef expr);
-// Gets the nested child expression at the specified index within the specified `Block` expression.
BinaryenExpressionRef BinaryenBlockGetChild(BinaryenExpressionRef expr, BinaryenIndex index);
-// Gets the nested condition expression within the specified `If` expression.
BinaryenExpressionRef BinaryenIfGetCondition(BinaryenExpressionRef expr);
-// Gets the nested ifTrue expression within the specified `If` expression.
BinaryenExpressionRef BinaryenIfGetIfTrue(BinaryenExpressionRef expr);
-// Gets the nested ifFalse expression within the specified `If` expression.
BinaryenExpressionRef BinaryenIfGetIfFalse(BinaryenExpressionRef expr);
-// Gets the name of the specified `Loop` expression. May be `NULL`.
const char* BinaryenLoopGetName(BinaryenExpressionRef expr);
-// Gets the nested body expression within the specified `Loop` expression.
BinaryenExpressionRef BinaryenLoopGetBody(BinaryenExpressionRef expr);
-// Gets the name of the specified `Break` expression. May be `NULL`.
const char* BinaryenBreakGetName(BinaryenExpressionRef expr);
-// Gets the nested condition expression within the specified `Break` expression. Returns `NULL` if this is a `br` and not a `br_if`.
BinaryenExpressionRef BinaryenBreakGetCondition(BinaryenExpressionRef expr);
-// Gets the nested value expression within the specified `Break` expression. May be `NULL`.
BinaryenExpressionRef BinaryenBreakGetValue(BinaryenExpressionRef expr);
-// Gets the number of names within the specified `Switch` expression.
BinaryenIndex BinaryenSwitchGetNumNames(BinaryenExpressionRef expr);
-// Gets the name at the specified index within the specified `Switch` expression.
const char* BinaryenSwitchGetName(BinaryenExpressionRef expr, BinaryenIndex index);
-// Gets the default name of the specified `Switch` expression.
const char* BinaryenSwitchGetDefaultName(BinaryenExpressionRef expr);
-// Gets the nested condition expression within the specified `Switch` expression.
BinaryenExpressionRef BinaryenSwitchGetCondition(BinaryenExpressionRef expr);
-// Gets the nested value expression within the specifiedd `Switch` expression. May be `NULL`.
BinaryenExpressionRef BinaryenSwitchGetValue(BinaryenExpressionRef expr);
-// Gets the name of the target of the specified `Call` expression.
const char* BinaryenCallGetTarget(BinaryenExpressionRef expr);
-// Gets the number of nested operand expressions within the specified `Call` expression.
BinaryenIndex BinaryenCallGetNumOperands(BinaryenExpressionRef expr);
-// Gets the nested operand expression at the specified index within the specified `Call` expression.
BinaryenExpressionRef BinaryenCallGetOperand(BinaryenExpressionRef expr, BinaryenIndex index);
-// Gets the nested target expression of the specified `CallIndirect` expression.
BinaryenExpressionRef BinaryenCallIndirectGetTarget(BinaryenExpressionRef expr);
-// Gets the number of nested operand expressions within the specified `CallIndirect` expression.
BinaryenIndex BinaryenCallIndirectGetNumOperands(BinaryenExpressionRef expr);
-// Gets the nested operand expression at the specified index within the specified `CallIndirect` expression.
BinaryenExpressionRef BinaryenCallIndirectGetOperand(BinaryenExpressionRef expr, BinaryenIndex index);
-// Gets the index of the specified `GetLocal` expression.
BinaryenIndex BinaryenGetLocalGetIndex(BinaryenExpressionRef expr);
-// Tests if the specified `SetLocal` expression performs a `tee_local` instead of a `set_local`.
int BinaryenSetLocalIsTee(BinaryenExpressionRef expr);
-// Gets the index of the specified `SetLocal` expression.
BinaryenIndex BinaryenSetLocalGetIndex(BinaryenExpressionRef expr);
-// Gets the nested value expression within the specified `SetLocal` expression.
BinaryenExpressionRef BinaryenSetLocalGetValue(BinaryenExpressionRef expr);
-// Gets the name of the specified `GetGlobal` expression.
const char* BinaryenGetGlobalGetName(BinaryenExpressionRef expr);
-// Gets the name of the specified `SetGlobal` expression.
const char* BinaryenSetGlobalGetName(BinaryenExpressionRef expr);
-// Gets the nested value expression within the specified `SetLocal` expression.
BinaryenExpressionRef BinaryenSetGlobalGetValue(BinaryenExpressionRef expr);
-// Gets the operator of the specified `Host` expression.
BinaryenOp BinaryenHostGetOp(BinaryenExpressionRef expr);
-// Gets the name operand of the specified `Host` expression. May be `NULL`.
const char* BinaryenHostGetNameOperand(BinaryenExpressionRef expr);
-// Gets the number of nested operand expressions within the specified `Host` expression.
BinaryenIndex BinaryenHostGetNumOperands(BinaryenExpressionRef expr);
-// Gets the nested operand expression at the specified index within the specified `Host` expression.
BinaryenExpressionRef BinaryenHostGetOperand(BinaryenExpressionRef expr, BinaryenIndex index);
-// Tests if the specified `Load` expression is atomic.
int BinaryenLoadIsAtomic(BinaryenExpressionRef expr);
-// Tests if the specified `Load` expression is signed.
int BinaryenLoadIsSigned(BinaryenExpressionRef expr);
-// Gets the offset of the specified `Load` expression.
uint32_t BinaryenLoadGetOffset(BinaryenExpressionRef expr);
-// Gets the byte size of the specified `Load` expression.
uint32_t BinaryenLoadGetBytes(BinaryenExpressionRef expr);
-// Gets the alignment of the specified `Load` expression.
uint32_t BinaryenLoadGetAlign(BinaryenExpressionRef expr);
-// Gets the nested pointer expression within the specified `Load` expression.
BinaryenExpressionRef BinaryenLoadGetPtr(BinaryenExpressionRef expr);
-// Tests if the specified `Store` expression is atomic.
int BinaryenStoreIsAtomic(BinaryenExpressionRef expr);
-// Gets the byte size of the specified `Store` expression.
uint32_t BinaryenStoreGetBytes(BinaryenExpressionRef expr);
-// Gets the offset of the specified store expression.
uint32_t BinaryenStoreGetOffset(BinaryenExpressionRef expr);
-// Gets the alignment of the specified `Store` expression.
uint32_t BinaryenStoreGetAlign(BinaryenExpressionRef expr);
-// Gets the nested pointer expression within the specified `Store` expression.
BinaryenExpressionRef BinaryenStoreGetPtr(BinaryenExpressionRef expr);
-// Gets the nested value expression within the specified `Store` expression.
BinaryenExpressionRef BinaryenStoreGetValue(BinaryenExpressionRef expr);
-// Gets the 32-bit integer value of the specified `Const` expression.
int32_t BinaryenConstGetValueI32(BinaryenExpressionRef expr);
-// Gets the 64-bit integer value of the specified `Const` expression.
int64_t BinaryenConstGetValueI64(BinaryenExpressionRef expr);
-// Gets the low 32-bits of a 64-bit integer value of the specified `Const` expression. Useful where I64 returning exports are illegal, i.e. binaryen.js.
int32_t BinaryenConstGetValueI64Low(BinaryenExpressionRef expr);
-// Gets the high 32-bits of a 64-bit integer value of the specified `Const` expression. Useful where I64 returning exports are illegal, i.e. binaryen.js.
int32_t BinaryenConstGetValueI64High(BinaryenExpressionRef expr);
-// Gets the 32-bit float value of the specified `Const` expression.
float BinaryenConstGetValueF32(BinaryenExpressionRef expr);
-// Gets the 64-bit float value of the specified `Const` expression.
double BinaryenConstGetValueF64(BinaryenExpressionRef expr);
-// Gets the operator of the specified `Unary` expression.
BinaryenOp BinaryenUnaryGetOp(BinaryenExpressionRef expr);
-// Gets the nested value expression within the specified `Unary` expression.
BinaryenExpressionRef BinaryenUnaryGetValue(BinaryenExpressionRef expr);
-// Gets the operator of the specified `Binary` expression.
BinaryenOp BinaryenBinaryGetOp(BinaryenExpressionRef expr);
-// Gets the nested left expression within the specified `Binary` expression.
BinaryenExpressionRef BinaryenBinaryGetLeft(BinaryenExpressionRef expr);
-// Gets the nested right expression within the specified `Binary` expression.
BinaryenExpressionRef BinaryenBinaryGetRight(BinaryenExpressionRef expr);
-// Gets the nested ifTrue expression within the specified `Select` expression.
BinaryenExpressionRef BinaryenSelectGetIfTrue(BinaryenExpressionRef expr);
-// Gets the nested ifFalse expression within the specified `Select` expression.
BinaryenExpressionRef BinaryenSelectGetIfFalse(BinaryenExpressionRef expr);
-// Gets the nested condition expression within the specified `Select` expression.
BinaryenExpressionRef BinaryenSelectGetCondition(BinaryenExpressionRef expr);
-// Gets the nested value expression within the specified `Drop` expression.
BinaryenExpressionRef BinaryenDropGetValue(BinaryenExpressionRef expr);
-// Gets the nested value expression within the specified `Return` expression.
BinaryenExpressionRef BinaryenReturnGetValue(BinaryenExpressionRef expr);
-// Gets the operator of the specified `AtomicRMW` expression.
BinaryenOp BinaryenAtomicRMWGetOp(BinaryenExpressionRef expr);
-// Gets the byte size of the specified `AtomicRMW` expression.
uint32_t BinaryenAtomicRMWGetBytes(BinaryenExpressionRef expr);
-// Gets the offset of the specified `AtomicRMW` expression.
uint32_t BinaryenAtomicRMWGetOffset(BinaryenExpressionRef expr);
-// Gets the nested pointer expression within the specified `AtomicRMW` expression.
BinaryenExpressionRef BinaryenAtomicRMWGetPtr(BinaryenExpressionRef expr);
-// Gets the nested value expression within the specified `AtomicRMW` expression.
BinaryenExpressionRef BinaryenAtomicRMWGetValue(BinaryenExpressionRef expr);
-// Gets the byte size of the specified `AtomicCmpxchg` expression.
uint32_t BinaryenAtomicCmpxchgGetBytes(BinaryenExpressionRef expr);
-// Gets the offset of the specified `AtomicCmpxchg` expression.
uint32_t BinaryenAtomicCmpxchgGetOffset(BinaryenExpressionRef expr);
-// Gets the nested pointer expression within the specified `AtomicCmpxchg` expression.
BinaryenExpressionRef BinaryenAtomicCmpxchgGetPtr(BinaryenExpressionRef expr);
-// Gets the nested expected value expression within the specified `AtomicCmpxchg` expression.
BinaryenExpressionRef BinaryenAtomicCmpxchgGetExpected(BinaryenExpressionRef expr);
-// Gets the nested replacement value expression within the specified `AtomicCmpxchg` expression.
BinaryenExpressionRef BinaryenAtomicCmpxchgGetReplacement(BinaryenExpressionRef expr);
-// Gets the nested pointer expression within the specified `AtomicWait` expression.
BinaryenExpressionRef BinaryenAtomicWaitGetPtr(BinaryenExpressionRef expr);
-// Gets the nested expected value expression within the specified `AtomicWait` expression.
BinaryenExpressionRef BinaryenAtomicWaitGetExpected(BinaryenExpressionRef expr);
-// Gets the nested timeout expression within the specified `AtomicWait` expression.
BinaryenExpressionRef BinaryenAtomicWaitGetTimeout(BinaryenExpressionRef expr);
-// Gets the expected type of the specified `AtomicWait` expression.
BinaryenType BinaryenAtomicWaitGetExpectedType(BinaryenExpressionRef expr);
-// Gets the nested pointer expression within the specified `AtomicWake` expression.
BinaryenExpressionRef BinaryenAtomicWakeGetPtr(BinaryenExpressionRef expr);
-// Gets the nested wake count expression within the specified `AtomicWake` expression.
BinaryenExpressionRef BinaryenAtomicWakeGetWakeCount(BinaryenExpressionRef expr);
+BinaryenOp BinaryenSIMDExtractGetOp(BinaryenExpressionRef expr);
+BinaryenExpressionRef BinaryenSIMDExtractGetVec(BinaryenExpressionRef expr);
+uint8_t BinaryenSIMDExtractGetIdx(BinaryenExpressionRef expr);
+
+BinaryenOp BinaryenSIMDReplaceGetOp(BinaryenExpressionRef expr);
+BinaryenExpressionRef BinaryenSIMDReplaceGetVec(BinaryenExpressionRef expr);
+uint8_t BinaryenSIMDReplaceGetIdx(BinaryenExpressionRef expr);
+BinaryenExpressionRef BinaryenSIMDReplaceGetValue(BinaryenExpressionRef expr);
+
+BinaryenExpressionRef BinaryenSIMDShuffleGetLeft(BinaryenExpressionRef expr);
+BinaryenExpressionRef BinaryenSIMDShuffleGetRight(BinaryenExpressionRef expr);
+void BinaryenSIMDShuffleGetMask(BinaryenExpressionRef expr, uint8_t *mask);
+
+BinaryenExpressionRef BinaryenSIMDBitselectGetLeft(BinaryenExpressionRef expr);
+BinaryenExpressionRef BinaryenSIMDBitselectGetRight(BinaryenExpressionRef expr);
+BinaryenExpressionRef BinaryenSIMDBitselectGetCond(BinaryenExpressionRef expr);
+
+BinaryenOp BinaryenSIMDShiftGetOp(BinaryenExpressionRef expr);
+BinaryenExpressionRef BinaryenSIMDShiftGetVec(BinaryenExpressionRef expr);
+BinaryenExpressionRef BinaryenSIMDShiftGetShift(BinaryenExpressionRef expr);
+
+
// Functions
typedef void* BinaryenFunctionRef;
diff --git a/src/dataflow/graph.h b/src/dataflow/graph.h
index 7f5654f8d..9a30b7576 100644
--- a/src/dataflow/graph.h
+++ b/src/dataflow/graph.h
@@ -153,7 +153,7 @@ struct Graph : public UnifiedExpressionVisitor<Graph, Node*> {
}
Node* makeZero(wasm::Type type) {
- return makeConst(LiteralUtils::makeLiteralZero(type));
+ return makeConst(Literal::makeZero(type));
}
// Add a new node to our list of owned nodes.
diff --git a/src/gen-s-parser.inc b/src/gen-s-parser.inc
index 16399bfba..77e505260 100644
--- a/src/gen-s-parser.inc
+++ b/src/gen-s-parser.inc
@@ -60,311 +60,531 @@ switch (op[0]) {
case 'f': {
switch (op[1]) {
case '3': {
- switch (op[4]) {
- case 'a': {
- switch (op[5]) {
- case 'b':
- if (strcmp(op, "f32.abs") == 0) return makeUnary(s, UnaryOp::AbsFloat32);
- goto parse_error;
- case 'd':
- if (strcmp(op, "f32.add") == 0) return makeBinary(s, BinaryOp::AddFloat32);
- goto parse_error;
- default: goto parse_error;
- }
- }
- case 'c': {
- switch (op[5]) {
- case 'e':
- if (strcmp(op, "f32.ceil") == 0) return makeUnary(s, UnaryOp::CeilFloat32);
- goto parse_error;
- case 'o': {
- switch (op[6]) {
- case 'n': {
- switch (op[7]) {
- case 's':
- if (strcmp(op, "f32.const") == 0) return makeConst(s, f32);
- goto parse_error;
- case 'v': {
- switch (op[12]) {
- case 's': {
- switch (op[15]) {
- case '3':
- if (strcmp(op, "f32.convert_s/i32") == 0) return makeUnary(s, UnaryOp::ConvertSInt32ToFloat32);
- goto parse_error;
- case '6':
- if (strcmp(op, "f32.convert_s/i64") == 0) return makeUnary(s, UnaryOp::ConvertSInt64ToFloat32);
- goto parse_error;
- default: goto parse_error;
- }
- }
- case 'u': {
- switch (op[15]) {
- case '3':
- if (strcmp(op, "f32.convert_u/i32") == 0) return makeUnary(s, UnaryOp::ConvertUInt32ToFloat32);
- goto parse_error;
- case '6':
- if (strcmp(op, "f32.convert_u/i64") == 0) return makeUnary(s, UnaryOp::ConvertUInt64ToFloat32);
- goto parse_error;
+ switch (op[3]) {
+ case '.': {
+ switch (op[4]) {
+ case 'a': {
+ switch (op[5]) {
+ case 'b':
+ if (strcmp(op, "f32.abs") == 0) return makeUnary(s, UnaryOp::AbsFloat32);
+ goto parse_error;
+ case 'd':
+ if (strcmp(op, "f32.add") == 0) return makeBinary(s, BinaryOp::AddFloat32);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'c': {
+ switch (op[5]) {
+ case 'e':
+ if (strcmp(op, "f32.ceil") == 0) return makeUnary(s, UnaryOp::CeilFloat32);
+ goto parse_error;
+ case 'o': {
+ switch (op[6]) {
+ case 'n': {
+ switch (op[7]) {
+ case 's':
+ if (strcmp(op, "f32.const") == 0) return makeConst(s, f32);
+ goto parse_error;
+ case 'v': {
+ switch (op[12]) {
+ case 's': {
+ switch (op[15]) {
+ case '3':
+ if (strcmp(op, "f32.convert_s/i32") == 0) return makeUnary(s, UnaryOp::ConvertSInt32ToFloat32);
+ goto parse_error;
+ case '6':
+ if (strcmp(op, "f32.convert_s/i64") == 0) return makeUnary(s, UnaryOp::ConvertSInt64ToFloat32);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'u': {
+ switch (op[15]) {
+ case '3':
+ if (strcmp(op, "f32.convert_u/i32") == 0) return makeUnary(s, UnaryOp::ConvertUInt32ToFloat32);
+ goto parse_error;
+ case '6':
+ if (strcmp(op, "f32.convert_u/i64") == 0) return makeUnary(s, UnaryOp::ConvertUInt64ToFloat32);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
default: goto parse_error;
}
}
default: goto parse_error;
}
}
+ case 'p':
+ if (strcmp(op, "f32.copysign") == 0) return makeBinary(s, BinaryOp::CopySignFloat32);
+ goto parse_error;
default: goto parse_error;
}
}
- case 'p':
- if (strcmp(op, "f32.copysign") == 0) return makeBinary(s, BinaryOp::CopySignFloat32);
+ default: goto parse_error;
+ }
+ }
+ case 'd': {
+ switch (op[5]) {
+ case 'e':
+ if (strcmp(op, "f32.demote/f64") == 0) return makeUnary(s, UnaryOp::DemoteFloat64);
+ goto parse_error;
+ case 'i':
+ if (strcmp(op, "f32.div") == 0) return makeBinary(s, BinaryOp::DivFloat32);
goto parse_error;
default: goto parse_error;
}
}
- default: goto parse_error;
- }
- }
- case 'd': {
- switch (op[5]) {
case 'e':
- if (strcmp(op, "f32.demote/f64") == 0) return makeUnary(s, UnaryOp::DemoteFloat64);
+ if (strcmp(op, "f32.eq") == 0) return makeBinary(s, BinaryOp::EqFloat32);
goto parse_error;
- case 'i':
- if (strcmp(op, "f32.div") == 0) return makeBinary(s, BinaryOp::DivFloat32);
- goto parse_error;
- default: goto parse_error;
- }
- }
- case 'e':
- if (strcmp(op, "f32.eq") == 0) return makeBinary(s, BinaryOp::EqFloat32);
- goto parse_error;
- case 'f':
- if (strcmp(op, "f32.floor") == 0) return makeUnary(s, UnaryOp::FloorFloat32);
- goto parse_error;
- case 'g': {
- switch (op[5]) {
- case 'e':
- if (strcmp(op, "f32.ge") == 0) return makeBinary(s, BinaryOp::GeFloat32);
- goto parse_error;
- case 't':
- if (strcmp(op, "f32.gt") == 0) return makeBinary(s, BinaryOp::GtFloat32);
- goto parse_error;
- default: goto parse_error;
- }
- }
- case 'l': {
- switch (op[5]) {
- case 'e':
- if (strcmp(op, "f32.le") == 0) return makeBinary(s, BinaryOp::LeFloat32);
+ case 'f':
+ if (strcmp(op, "f32.floor") == 0) return makeUnary(s, UnaryOp::FloorFloat32);
goto parse_error;
- case 'o':
- if (strcmp(op, "f32.load") == 0) return makeLoad(s, f32, /*isAtomic=*/false);
+ case 'g': {
+ switch (op[5]) {
+ case 'e':
+ if (strcmp(op, "f32.ge") == 0) return makeBinary(s, BinaryOp::GeFloat32);
+ goto parse_error;
+ case 't':
+ if (strcmp(op, "f32.gt") == 0) return makeBinary(s, BinaryOp::GtFloat32);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'l': {
+ switch (op[5]) {
+ case 'e':
+ if (strcmp(op, "f32.le") == 0) return makeBinary(s, BinaryOp::LeFloat32);
+ goto parse_error;
+ case 'o':
+ if (strcmp(op, "f32.load") == 0) return makeLoad(s, f32, /*isAtomic=*/false);
+ goto parse_error;
+ case 't':
+ if (strcmp(op, "f32.lt") == 0) return makeBinary(s, BinaryOp::LtFloat32);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'm': {
+ switch (op[5]) {
+ case 'a':
+ if (strcmp(op, "f32.max") == 0) return makeBinary(s, BinaryOp::MaxFloat32);
+ goto parse_error;
+ case 'i':
+ if (strcmp(op, "f32.min") == 0) return makeBinary(s, BinaryOp::MinFloat32);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "f32.mul") == 0) return makeBinary(s, BinaryOp::MulFloat32);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'n': {
+ switch (op[6]) {
+ case '\0':
+ if (strcmp(op, "f32.ne") == 0) return makeBinary(s, BinaryOp::NeFloat32);
+ goto parse_error;
+ case 'a':
+ if (strcmp(op, "f32.nearest") == 0) return makeUnary(s, UnaryOp::NearestFloat32);
+ goto parse_error;
+ case 'g':
+ if (strcmp(op, "f32.neg") == 0) return makeUnary(s, UnaryOp::NegFloat32);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'r':
+ if (strcmp(op, "f32.reinterpret/i32") == 0) return makeUnary(s, UnaryOp::ReinterpretInt32);
goto parse_error;
+ case 's': {
+ switch (op[5]) {
+ case 'q':
+ if (strcmp(op, "f32.sqrt") == 0) return makeUnary(s, UnaryOp::SqrtFloat32);
+ goto parse_error;
+ case 't':
+ if (strcmp(op, "f32.store") == 0) return makeStore(s, f32, /*isAtomic=*/false);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "f32.sub") == 0) return makeBinary(s, BinaryOp::SubFloat32);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
case 't':
- if (strcmp(op, "f32.lt") == 0) return makeBinary(s, BinaryOp::LtFloat32);
- goto parse_error;
- default: goto parse_error;
- }
- }
- case 'm': {
- switch (op[5]) {
- case 'a':
- if (strcmp(op, "f32.max") == 0) return makeBinary(s, BinaryOp::MaxFloat32);
- goto parse_error;
- case 'i':
- if (strcmp(op, "f32.min") == 0) return makeBinary(s, BinaryOp::MinFloat32);
- goto parse_error;
- case 'u':
- if (strcmp(op, "f32.mul") == 0) return makeBinary(s, BinaryOp::MulFloat32);
+ if (strcmp(op, "f32.trunc") == 0) return makeUnary(s, UnaryOp::TruncFloat32);
goto parse_error;
default: goto parse_error;
}
}
- case 'n': {
+ case 'x': {
switch (op[6]) {
- case '\0':
- if (strcmp(op, "f32.ne") == 0) return makeBinary(s, BinaryOp::NeFloat32);
- goto parse_error;
- case 'a':
- if (strcmp(op, "f32.nearest") == 0) return makeUnary(s, UnaryOp::NearestFloat32);
- goto parse_error;
- case 'g':
- if (strcmp(op, "f32.neg") == 0) return makeUnary(s, UnaryOp::NegFloat32);
- goto parse_error;
- default: goto parse_error;
- }
- }
- case 'r':
- if (strcmp(op, "f32.reinterpret/i32") == 0) return makeUnary(s, UnaryOp::ReinterpretInt32);
- goto parse_error;
- case 's': {
- switch (op[5]) {
- case 'q':
- if (strcmp(op, "f32.sqrt") == 0) return makeUnary(s, UnaryOp::SqrtFloat32);
- goto parse_error;
- case 't':
- if (strcmp(op, "f32.store") == 0) return makeStore(s, f32, /*isAtomic=*/false);
+ case 'a': {
+ switch (op[7]) {
+ case 'b':
+ if (strcmp(op, "f32x4.abs") == 0) return makeUnary(s, UnaryOp::AbsVecF32x4);
+ goto parse_error;
+ case 'd':
+ if (strcmp(op, "f32x4.add") == 0) return makeBinary(s, BinaryOp::AddVecF32x4);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'c': {
+ switch (op[14]) {
+ case 's':
+ if (strcmp(op, "f32x4.convert_s/i32x4") == 0) return makeUnary(s, UnaryOp::ConvertSVecI32x4ToVecF32x4);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "f32x4.convert_u/i32x4") == 0) return makeUnary(s, UnaryOp::ConvertUVecI32x4ToVecF32x4);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'd':
+ if (strcmp(op, "f32x4.div") == 0) return makeBinary(s, BinaryOp::DivVecF32x4);
goto parse_error;
- case 'u':
- if (strcmp(op, "f32.sub") == 0) return makeBinary(s, BinaryOp::SubFloat32);
+ case 'e': {
+ switch (op[7]) {
+ case 'q':
+ if (strcmp(op, "f32x4.eq") == 0) return makeBinary(s, BinaryOp::EqVecF32x4);
+ goto parse_error;
+ case 'x':
+ if (strcmp(op, "f32x4.extract_lane") == 0) return makeSIMDExtract(s, SIMDExtractOp::ExtractLaneVecF32x4, 4);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'g': {
+ switch (op[7]) {
+ case 'e':
+ if (strcmp(op, "f32x4.ge") == 0) return makeBinary(s, BinaryOp::GeVecF32x4);
+ goto parse_error;
+ case 't':
+ if (strcmp(op, "f32x4.gt") == 0) return makeBinary(s, BinaryOp::GtVecF32x4);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'l': {
+ switch (op[7]) {
+ case 'e':
+ if (strcmp(op, "f32x4.le") == 0) return makeBinary(s, BinaryOp::LeVecF32x4);
+ goto parse_error;
+ case 't':
+ if (strcmp(op, "f32x4.lt") == 0) return makeBinary(s, BinaryOp::LtVecF32x4);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'm': {
+ switch (op[7]) {
+ case 'a':
+ if (strcmp(op, "f32x4.max") == 0) return makeBinary(s, BinaryOp::MaxVecF32x4);
+ goto parse_error;
+ case 'i':
+ if (strcmp(op, "f32x4.min") == 0) return makeBinary(s, BinaryOp::MinVecF32x4);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "f32x4.mul") == 0) return makeBinary(s, BinaryOp::MulVecF32x4);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'n': {
+ switch (op[8]) {
+ case '\0':
+ if (strcmp(op, "f32x4.ne") == 0) return makeBinary(s, BinaryOp::NeVecF32x4);
+ goto parse_error;
+ case 'g':
+ if (strcmp(op, "f32x4.neg") == 0) return makeUnary(s, UnaryOp::NegVecF32x4);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'r':
+ if (strcmp(op, "f32x4.replace_lane") == 0) return makeSIMDReplace(s, SIMDReplaceOp::ReplaceLaneVecF32x4, 4);
goto parse_error;
+ case 's': {
+ switch (op[7]) {
+ case 'p':
+ if (strcmp(op, "f32x4.splat") == 0) return makeUnary(s, UnaryOp::SplatVecF32x4);
+ goto parse_error;
+ case 'q':
+ if (strcmp(op, "f32x4.sqrt") == 0) return makeUnary(s, UnaryOp::SqrtVecF32x4);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "f32x4.sub") == 0) return makeBinary(s, BinaryOp::SubVecF32x4);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
default: goto parse_error;
}
}
- case 't':
- if (strcmp(op, "f32.trunc") == 0) return makeUnary(s, UnaryOp::TruncFloat32);
- goto parse_error;
default: goto parse_error;
}
}
case '6': {
- switch (op[4]) {
- case 'a': {
- switch (op[5]) {
- case 'b':
- if (strcmp(op, "f64.abs") == 0) return makeUnary(s, UnaryOp::AbsFloat64);
- goto parse_error;
- case 'd':
- if (strcmp(op, "f64.add") == 0) return makeBinary(s, BinaryOp::AddFloat64);
- goto parse_error;
- default: goto parse_error;
- }
- }
- case 'c': {
- switch (op[5]) {
- case 'e':
- if (strcmp(op, "f64.ceil") == 0) return makeUnary(s, UnaryOp::CeilFloat64);
- goto parse_error;
- case 'o': {
- switch (op[6]) {
- case 'n': {
- switch (op[7]) {
- case 's':
- if (strcmp(op, "f64.const") == 0) return makeConst(s, f64);
- goto parse_error;
- case 'v': {
- switch (op[12]) {
- case 's': {
- switch (op[15]) {
- case '3':
- if (strcmp(op, "f64.convert_s/i32") == 0) return makeUnary(s, UnaryOp::ConvertSInt32ToFloat64);
- goto parse_error;
- case '6':
- if (strcmp(op, "f64.convert_s/i64") == 0) return makeUnary(s, UnaryOp::ConvertSInt64ToFloat64);
- goto parse_error;
- default: goto parse_error;
- }
- }
- case 'u': {
- switch (op[15]) {
- case '3':
- if (strcmp(op, "f64.convert_u/i32") == 0) return makeUnary(s, UnaryOp::ConvertUInt32ToFloat64);
- goto parse_error;
- case '6':
- if (strcmp(op, "f64.convert_u/i64") == 0) return makeUnary(s, UnaryOp::ConvertUInt64ToFloat64);
- goto parse_error;
+ switch (op[3]) {
+ case '.': {
+ switch (op[4]) {
+ case 'a': {
+ switch (op[5]) {
+ case 'b':
+ if (strcmp(op, "f64.abs") == 0) return makeUnary(s, UnaryOp::AbsFloat64);
+ goto parse_error;
+ case 'd':
+ if (strcmp(op, "f64.add") == 0) return makeBinary(s, BinaryOp::AddFloat64);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'c': {
+ switch (op[5]) {
+ case 'e':
+ if (strcmp(op, "f64.ceil") == 0) return makeUnary(s, UnaryOp::CeilFloat64);
+ goto parse_error;
+ case 'o': {
+ switch (op[6]) {
+ case 'n': {
+ switch (op[7]) {
+ case 's':
+ if (strcmp(op, "f64.const") == 0) return makeConst(s, f64);
+ goto parse_error;
+ case 'v': {
+ switch (op[12]) {
+ case 's': {
+ switch (op[15]) {
+ case '3':
+ if (strcmp(op, "f64.convert_s/i32") == 0) return makeUnary(s, UnaryOp::ConvertSInt32ToFloat64);
+ goto parse_error;
+ case '6':
+ if (strcmp(op, "f64.convert_s/i64") == 0) return makeUnary(s, UnaryOp::ConvertSInt64ToFloat64);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'u': {
+ switch (op[15]) {
+ case '3':
+ if (strcmp(op, "f64.convert_u/i32") == 0) return makeUnary(s, UnaryOp::ConvertUInt32ToFloat64);
+ goto parse_error;
+ case '6':
+ if (strcmp(op, "f64.convert_u/i64") == 0) return makeUnary(s, UnaryOp::ConvertUInt64ToFloat64);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
default: goto parse_error;
}
}
default: goto parse_error;
}
}
+ case 'p':
+ if (strcmp(op, "f64.copysign") == 0) return makeBinary(s, BinaryOp::CopySignFloat64);
+ goto parse_error;
default: goto parse_error;
}
}
- case 'p':
- if (strcmp(op, "f64.copysign") == 0) return makeBinary(s, BinaryOp::CopySignFloat64);
- goto parse_error;
default: goto parse_error;
}
}
- default: goto parse_error;
- }
- }
- case 'd':
- if (strcmp(op, "f64.div") == 0) return makeBinary(s, BinaryOp::DivFloat64);
- goto parse_error;
- case 'e':
- if (strcmp(op, "f64.eq") == 0) return makeBinary(s, BinaryOp::EqFloat64);
- goto parse_error;
- case 'f':
- if (strcmp(op, "f64.floor") == 0) return makeUnary(s, UnaryOp::FloorFloat64);
- goto parse_error;
- case 'g': {
- switch (op[5]) {
- case 'e':
- if (strcmp(op, "f64.ge") == 0) return makeBinary(s, BinaryOp::GeFloat64);
- goto parse_error;
- case 't':
- if (strcmp(op, "f64.gt") == 0) return makeBinary(s, BinaryOp::GtFloat64);
+ case 'd':
+ if (strcmp(op, "f64.div") == 0) return makeBinary(s, BinaryOp::DivFloat64);
goto parse_error;
- default: goto parse_error;
- }
- }
- case 'l': {
- switch (op[5]) {
case 'e':
- if (strcmp(op, "f64.le") == 0) return makeBinary(s, BinaryOp::LeFloat64);
+ if (strcmp(op, "f64.eq") == 0) return makeBinary(s, BinaryOp::EqFloat64);
goto parse_error;
- case 'o':
- if (strcmp(op, "f64.load") == 0) return makeLoad(s, f64, /*isAtomic=*/false);
- goto parse_error;
- case 't':
- if (strcmp(op, "f64.lt") == 0) return makeBinary(s, BinaryOp::LtFloat64);
+ case 'f':
+ if (strcmp(op, "f64.floor") == 0) return makeUnary(s, UnaryOp::FloorFloat64);
goto parse_error;
- default: goto parse_error;
- }
- }
- case 'm': {
- switch (op[5]) {
- case 'a':
- if (strcmp(op, "f64.max") == 0) return makeBinary(s, BinaryOp::MaxFloat64);
+ case 'g': {
+ switch (op[5]) {
+ case 'e':
+ if (strcmp(op, "f64.ge") == 0) return makeBinary(s, BinaryOp::GeFloat64);
+ goto parse_error;
+ case 't':
+ if (strcmp(op, "f64.gt") == 0) return makeBinary(s, BinaryOp::GtFloat64);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'l': {
+ switch (op[5]) {
+ case 'e':
+ if (strcmp(op, "f64.le") == 0) return makeBinary(s, BinaryOp::LeFloat64);
+ goto parse_error;
+ case 'o':
+ if (strcmp(op, "f64.load") == 0) return makeLoad(s, f64, /*isAtomic=*/false);
+ goto parse_error;
+ case 't':
+ if (strcmp(op, "f64.lt") == 0) return makeBinary(s, BinaryOp::LtFloat64);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'm': {
+ switch (op[5]) {
+ case 'a':
+ if (strcmp(op, "f64.max") == 0) return makeBinary(s, BinaryOp::MaxFloat64);
+ goto parse_error;
+ case 'i':
+ if (strcmp(op, "f64.min") == 0) return makeBinary(s, BinaryOp::MinFloat64);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "f64.mul") == 0) return makeBinary(s, BinaryOp::MulFloat64);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'n': {
+ switch (op[6]) {
+ case '\0':
+ if (strcmp(op, "f64.ne") == 0) return makeBinary(s, BinaryOp::NeFloat64);
+ goto parse_error;
+ case 'a':
+ if (strcmp(op, "f64.nearest") == 0) return makeUnary(s, UnaryOp::NearestFloat64);
+ goto parse_error;
+ case 'g':
+ if (strcmp(op, "f64.neg") == 0) return makeUnary(s, UnaryOp::NegFloat64);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'p':
+ if (strcmp(op, "f64.promote/f32") == 0) return makeUnary(s, UnaryOp::PromoteFloat32);
goto parse_error;
- case 'i':
- if (strcmp(op, "f64.min") == 0) return makeBinary(s, BinaryOp::MinFloat64);
+ case 'r':
+ if (strcmp(op, "f64.reinterpret/i64") == 0) return makeUnary(s, UnaryOp::ReinterpretInt64);
goto parse_error;
- case 'u':
- if (strcmp(op, "f64.mul") == 0) return makeBinary(s, BinaryOp::MulFloat64);
+ case 's': {
+ switch (op[5]) {
+ case 'q':
+ if (strcmp(op, "f64.sqrt") == 0) return makeUnary(s, UnaryOp::SqrtFloat64);
+ goto parse_error;
+ case 't':
+ if (strcmp(op, "f64.store") == 0) return makeStore(s, f64, /*isAtomic=*/false);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "f64.sub") == 0) return makeBinary(s, BinaryOp::SubFloat64);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 't':
+ if (strcmp(op, "f64.trunc") == 0) return makeUnary(s, UnaryOp::TruncFloat64);
goto parse_error;
default: goto parse_error;
}
}
- case 'n': {
+ case 'x': {
switch (op[6]) {
- case '\0':
- if (strcmp(op, "f64.ne") == 0) return makeBinary(s, BinaryOp::NeFloat64);
- goto parse_error;
- case 'a':
- if (strcmp(op, "f64.nearest") == 0) return makeUnary(s, UnaryOp::NearestFloat64);
- goto parse_error;
- case 'g':
- if (strcmp(op, "f64.neg") == 0) return makeUnary(s, UnaryOp::NegFloat64);
- goto parse_error;
- default: goto parse_error;
- }
- }
- case 'p':
- if (strcmp(op, "f64.promote/f32") == 0) return makeUnary(s, UnaryOp::PromoteFloat32);
- goto parse_error;
- case 'r':
- if (strcmp(op, "f64.reinterpret/i64") == 0) return makeUnary(s, UnaryOp::ReinterpretInt64);
- goto parse_error;
- case 's': {
- switch (op[5]) {
- case 'q':
- if (strcmp(op, "f64.sqrt") == 0) return makeUnary(s, UnaryOp::SqrtFloat64);
- goto parse_error;
- case 't':
- if (strcmp(op, "f64.store") == 0) return makeStore(s, f64, /*isAtomic=*/false);
+ case 'a': {
+ switch (op[7]) {
+ case 'b':
+ if (strcmp(op, "f64x2.abs") == 0) return makeUnary(s, UnaryOp::AbsVecF64x2);
+ goto parse_error;
+ case 'd':
+ if (strcmp(op, "f64x2.add") == 0) return makeBinary(s, BinaryOp::AddVecF64x2);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'c': {
+ switch (op[14]) {
+ case 's':
+ if (strcmp(op, "f64x2.convert_s/i64x2") == 0) return makeUnary(s, UnaryOp::ConvertSVecI64x2ToVecF64x2);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "f64x2.convert_u/i64x2") == 0) return makeUnary(s, UnaryOp::ConvertUVecI64x2ToVecF64x2);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'd':
+ if (strcmp(op, "f64x2.div") == 0) return makeBinary(s, BinaryOp::DivVecF64x2);
goto parse_error;
- case 'u':
- if (strcmp(op, "f64.sub") == 0) return makeBinary(s, BinaryOp::SubFloat64);
+ case 'e': {
+ switch (op[7]) {
+ case 'q':
+ if (strcmp(op, "f64x2.eq") == 0) return makeBinary(s, BinaryOp::EqVecF64x2);
+ goto parse_error;
+ case 'x':
+ if (strcmp(op, "f64x2.extract_lane") == 0) return makeSIMDExtract(s, SIMDExtractOp::ExtractLaneVecF64x2, 2);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'g': {
+ switch (op[7]) {
+ case 'e':
+ if (strcmp(op, "f64x2.ge") == 0) return makeBinary(s, BinaryOp::GeVecF64x2);
+ goto parse_error;
+ case 't':
+ if (strcmp(op, "f64x2.gt") == 0) return makeBinary(s, BinaryOp::GtVecF64x2);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'l': {
+ switch (op[7]) {
+ case 'e':
+ if (strcmp(op, "f64x2.le") == 0) return makeBinary(s, BinaryOp::LeVecF64x2);
+ goto parse_error;
+ case 't':
+ if (strcmp(op, "f64x2.lt") == 0) return makeBinary(s, BinaryOp::LtVecF64x2);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'm': {
+ switch (op[7]) {
+ case 'a':
+ if (strcmp(op, "f64x2.max") == 0) return makeBinary(s, BinaryOp::MaxVecF64x2);
+ goto parse_error;
+ case 'i':
+ if (strcmp(op, "f64x2.min") == 0) return makeBinary(s, BinaryOp::MinVecF64x2);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "f64x2.mul") == 0) return makeBinary(s, BinaryOp::MulVecF64x2);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'n': {
+ switch (op[8]) {
+ case '\0':
+ if (strcmp(op, "f64x2.ne") == 0) return makeBinary(s, BinaryOp::NeVecF64x2);
+ goto parse_error;
+ case 'g':
+ if (strcmp(op, "f64x2.neg") == 0) return makeUnary(s, UnaryOp::NegVecF64x2);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'r':
+ if (strcmp(op, "f64x2.replace_lane") == 0) return makeSIMDReplace(s, SIMDReplaceOp::ReplaceLaneVecF64x2, 2);
goto parse_error;
+ case 's': {
+ switch (op[7]) {
+ case 'p':
+ if (strcmp(op, "f64x2.splat") == 0) return makeUnary(s, UnaryOp::SplatVecF64x2);
+ goto parse_error;
+ case 'q':
+ if (strcmp(op, "f64x2.sqrt") == 0) return makeUnary(s, UnaryOp::SqrtVecF64x2);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "f64x2.sub") == 0) return makeBinary(s, BinaryOp::SubVecF64x2);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
default: goto parse_error;
}
}
- case 't':
- if (strcmp(op, "f64.trunc") == 0) return makeUnary(s, UnaryOp::TruncFloat64);
- goto parse_error;
default: goto parse_error;
}
}
@@ -392,280 +612,410 @@ switch (op[0]) {
}
case 'i': {
switch (op[1]) {
- case '3': {
- switch (op[4]) {
+ case '1': {
+ switch (op[6]) {
case 'a': {
- switch (op[5]) {
- case 'd':
- if (strcmp(op, "i32.add") == 0) return makeBinary(s, BinaryOp::AddInt32);
+ switch (op[7]) {
+ case 'd': {
+ switch (op[9]) {
+ case '\0':
+ if (strcmp(op, "i16x8.add") == 0) return makeBinary(s, BinaryOp::AddVecI16x8);
+ goto parse_error;
+ case '_': {
+ switch (op[19]) {
+ case 's':
+ if (strcmp(op, "i16x8.add_saturate_s") == 0) return makeBinary(s, BinaryOp::AddSatSVecI16x8);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "i16x8.add_saturate_u") == 0) return makeBinary(s, BinaryOp::AddSatUVecI16x8);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ default: goto parse_error;
+ }
+ }
+ case 'l':
+ if (strcmp(op, "i16x8.all_true") == 0) return makeUnary(s, UnaryOp::AllTrueVecI16x8);
goto parse_error;
case 'n':
- if (strcmp(op, "i32.and") == 0) return makeBinary(s, BinaryOp::AndInt32);
+ if (strcmp(op, "i16x8.any_true") == 0) return makeUnary(s, UnaryOp::AnyTrueVecI16x8);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'e': {
+ switch (op[7]) {
+ case 'q':
+ if (strcmp(op, "i16x8.eq") == 0) return makeBinary(s, BinaryOp::EqVecI16x8);
goto parse_error;
+ case 'x': {
+ switch (op[19]) {
+ case 's':
+ if (strcmp(op, "i16x8.extract_lane_s") == 0) return makeSIMDExtract(s, SIMDExtractOp::ExtractLaneSVecI16x8, 8);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "i16x8.extract_lane_u") == 0) return makeSIMDExtract(s, SIMDExtractOp::ExtractLaneUVecI16x8, 8);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ default: goto parse_error;
+ }
+ }
+ case 'g': {
+ switch (op[7]) {
+ case 'e': {
+ switch (op[9]) {
+ case 's':
+ if (strcmp(op, "i16x8.ge_s") == 0) return makeBinary(s, BinaryOp::GeSVecI16x8);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "i16x8.ge_u") == 0) return makeBinary(s, BinaryOp::GeUVecI16x8);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
case 't': {
- switch (op[11]) {
- case 'l': {
- switch (op[15]) {
- case '\0':
- if (strcmp(op, "i32.atomic.load") == 0) return makeLoad(s, i32, /*isAtomic=*/true);
+ switch (op[9]) {
+ case 's':
+ if (strcmp(op, "i16x8.gt_s") == 0) return makeBinary(s, BinaryOp::GtSVecI16x8);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "i16x8.gt_u") == 0) return makeBinary(s, BinaryOp::GtUVecI16x8);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ default: goto parse_error;
+ }
+ }
+ case 'l': {
+ switch (op[7]) {
+ case 'e': {
+ switch (op[9]) {
+ case 's':
+ if (strcmp(op, "i16x8.le_s") == 0) return makeBinary(s, BinaryOp::LeSVecI16x8);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "i16x8.le_u") == 0) return makeBinary(s, BinaryOp::LeUVecI16x8);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 't': {
+ switch (op[9]) {
+ case 's':
+ if (strcmp(op, "i16x8.lt_s") == 0) return makeBinary(s, BinaryOp::LtSVecI16x8);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "i16x8.lt_u") == 0) return makeBinary(s, BinaryOp::LtUVecI16x8);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ default: goto parse_error;
+ }
+ }
+ case 'm':
+ if (strcmp(op, "i16x8.mul") == 0) return makeBinary(s, BinaryOp::MulVecI16x8);
+ goto parse_error;
+ case 'n': {
+ switch (op[8]) {
+ case '\0':
+ if (strcmp(op, "i16x8.ne") == 0) return makeBinary(s, BinaryOp::NeVecI16x8);
+ goto parse_error;
+ case 'g':
+ if (strcmp(op, "i16x8.neg") == 0) return makeUnary(s, UnaryOp::NegVecI16x8);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'r':
+ if (strcmp(op, "i16x8.replace_lane") == 0) return makeSIMDReplace(s, SIMDReplaceOp::ReplaceLaneVecI16x8, 8);
+ goto parse_error;
+ case 's': {
+ switch (op[7]) {
+ case 'h': {
+ switch (op[8]) {
+ case 'l':
+ if (strcmp(op, "i16x8.shl") == 0) return makeSIMDShift(s, SIMDShiftOp::ShlVecI16x8);
+ goto parse_error;
+ case 'r': {
+ switch (op[10]) {
+ case 's':
+ if (strcmp(op, "i16x8.shr_s") == 0) return makeSIMDShift(s, SIMDShiftOp::ShrSVecI16x8);
goto parse_error;
- case '1':
- if (strcmp(op, "i32.atomic.load16_u") == 0) return makeLoad(s, i32, /*isAtomic=*/true);
+ case 'u':
+ if (strcmp(op, "i16x8.shr_u") == 0) return makeSIMDShift(s, SIMDShiftOp::ShrUVecI16x8);
goto parse_error;
- case '8':
- if (strcmp(op, "i32.atomic.load8_u") == 0) return makeLoad(s, i32, /*isAtomic=*/true);
+ default: goto parse_error;
+ }
+ }
+ default: goto parse_error;
+ }
+ }
+ case 'p':
+ if (strcmp(op, "i16x8.splat") == 0) return makeUnary(s, UnaryOp::SplatVecI16x8);
+ goto parse_error;
+ case 'u': {
+ switch (op[9]) {
+ case '\0':
+ if (strcmp(op, "i16x8.sub") == 0) return makeBinary(s, BinaryOp::SubVecI16x8);
+ goto parse_error;
+ case '_': {
+ switch (op[19]) {
+ case 's':
+ if (strcmp(op, "i16x8.sub_saturate_s") == 0) return makeBinary(s, BinaryOp::SubSatSVecI16x8);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "i16x8.sub_saturate_u") == 0) return makeBinary(s, BinaryOp::SubSatUVecI16x8);
goto parse_error;
default: goto parse_error;
}
}
- case 'r': {
- switch (op[14]) {
- case '.': {
+ default: goto parse_error;
+ }
+ }
+ default: goto parse_error;
+ }
+ }
+ default: goto parse_error;
+ }
+ }
+ case '3': {
+ switch (op[3]) {
+ case '.': {
+ switch (op[4]) {
+ case 'a': {
+ switch (op[5]) {
+ case 'd':
+ if (strcmp(op, "i32.add") == 0) return makeBinary(s, BinaryOp::AddInt32);
+ goto parse_error;
+ case 'n':
+ if (strcmp(op, "i32.and") == 0) return makeBinary(s, BinaryOp::AndInt32);
+ goto parse_error;
+ case 't': {
+ switch (op[11]) {
+ case 'l': {
switch (op[15]) {
- case 'a': {
- switch (op[16]) {
- case 'd':
- if (strcmp(op, "i32.atomic.rmw.add") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
- goto parse_error;
- case 'n':
- if (strcmp(op, "i32.atomic.rmw.and") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
- goto parse_error;
- default: goto parse_error;
- }
- }
- case 'c':
- if (strcmp(op, "i32.atomic.rmw.cmpxchg") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
+ case '\0':
+ if (strcmp(op, "i32.atomic.load") == 0) return makeLoad(s, i32, /*isAtomic=*/true);
goto parse_error;
- case 'o':
- if (strcmp(op, "i32.atomic.rmw.or") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
+ case '1':
+ if (strcmp(op, "i32.atomic.load16_u") == 0) return makeLoad(s, i32, /*isAtomic=*/true);
goto parse_error;
- case 's':
- if (strcmp(op, "i32.atomic.rmw.sub") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
+ case '8':
+ if (strcmp(op, "i32.atomic.load8_u") == 0) return makeLoad(s, i32, /*isAtomic=*/true);
goto parse_error;
- case 'x': {
- switch (op[16]) {
+ default: goto parse_error;
+ }
+ }
+ case 'r': {
+ switch (op[14]) {
+ case '.': {
+ switch (op[15]) {
+ case 'a': {
+ switch (op[16]) {
+ case 'd':
+ if (strcmp(op, "i32.atomic.rmw.add") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
+ goto parse_error;
+ case 'n':
+ if (strcmp(op, "i32.atomic.rmw.and") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
case 'c':
- if (strcmp(op, "i32.atomic.rmw.xchg") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
+ if (strcmp(op, "i32.atomic.rmw.cmpxchg") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
goto parse_error;
case 'o':
- if (strcmp(op, "i32.atomic.rmw.xor") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
+ if (strcmp(op, "i32.atomic.rmw.or") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
+ goto parse_error;
+ case 's':
+ if (strcmp(op, "i32.atomic.rmw.sub") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
goto parse_error;
+ case 'x': {
+ switch (op[16]) {
+ case 'c':
+ if (strcmp(op, "i32.atomic.rmw.xchg") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
+ goto parse_error;
+ case 'o':
+ if (strcmp(op, "i32.atomic.rmw.xor") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
default: goto parse_error;
}
}
- default: goto parse_error;
- }
- }
- case '1': {
- switch (op[19]) {
- case 'a': {
- switch (op[20]) {
- case 'd':
- if (strcmp(op, "i32.atomic.rmw16_u.add") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
+ case '1': {
+ switch (op[19]) {
+ case 'a': {
+ switch (op[20]) {
+ case 'd':
+ if (strcmp(op, "i32.atomic.rmw16_u.add") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
+ goto parse_error;
+ case 'n':
+ if (strcmp(op, "i32.atomic.rmw16_u.and") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'c':
+ if (strcmp(op, "i32.atomic.rmw16_u.cmpxchg") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
+ goto parse_error;
+ case 'o':
+ if (strcmp(op, "i32.atomic.rmw16_u.or") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
goto parse_error;
- case 'n':
- if (strcmp(op, "i32.atomic.rmw16_u.and") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
+ case 's':
+ if (strcmp(op, "i32.atomic.rmw16_u.sub") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
goto parse_error;
+ case 'x': {
+ switch (op[20]) {
+ case 'c':
+ if (strcmp(op, "i32.atomic.rmw16_u.xchg") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
+ goto parse_error;
+ case 'o':
+ if (strcmp(op, "i32.atomic.rmw16_u.xor") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
default: goto parse_error;
}
}
- case 'c':
- if (strcmp(op, "i32.atomic.rmw16_u.cmpxchg") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
- goto parse_error;
- case 'o':
- if (strcmp(op, "i32.atomic.rmw16_u.or") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
- goto parse_error;
- case 's':
- if (strcmp(op, "i32.atomic.rmw16_u.sub") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
- goto parse_error;
- case 'x': {
- switch (op[20]) {
+ case '8': {
+ switch (op[18]) {
+ case 'a': {
+ switch (op[19]) {
+ case 'd':
+ if (strcmp(op, "i32.atomic.rmw8_u.add") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
+ goto parse_error;
+ case 'n':
+ if (strcmp(op, "i32.atomic.rmw8_u.and") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
case 'c':
- if (strcmp(op, "i32.atomic.rmw16_u.xchg") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
+ if (strcmp(op, "i32.atomic.rmw8_u.cmpxchg") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
goto parse_error;
case 'o':
- if (strcmp(op, "i32.atomic.rmw16_u.xor") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
+ if (strcmp(op, "i32.atomic.rmw8_u.or") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
goto parse_error;
+ case 's':
+ if (strcmp(op, "i32.atomic.rmw8_u.sub") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
+ goto parse_error;
+ case 'x': {
+ switch (op[19]) {
+ case 'c':
+ if (strcmp(op, "i32.atomic.rmw8_u.xchg") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
+ goto parse_error;
+ case 'o':
+ if (strcmp(op, "i32.atomic.rmw8_u.xor") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
default: goto parse_error;
}
}
default: goto parse_error;
}
}
- case '8': {
- switch (op[18]) {
- case 'a': {
- switch (op[19]) {
- case 'd':
- if (strcmp(op, "i32.atomic.rmw8_u.add") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
- goto parse_error;
- case 'n':
- if (strcmp(op, "i32.atomic.rmw8_u.and") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
- goto parse_error;
- default: goto parse_error;
- }
- }
- case 'c':
- if (strcmp(op, "i32.atomic.rmw8_u.cmpxchg") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
+ case 's': {
+ switch (op[16]) {
+ case '\0':
+ if (strcmp(op, "i32.atomic.store") == 0) return makeStore(s, i32, /*isAtomic=*/true);
goto parse_error;
- case 'o':
- if (strcmp(op, "i32.atomic.rmw8_u.or") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
+ case '1':
+ if (strcmp(op, "i32.atomic.store16") == 0) return makeStore(s, i32, /*isAtomic=*/true);
goto parse_error;
- case 's':
- if (strcmp(op, "i32.atomic.rmw8_u.sub") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
+ case '8':
+ if (strcmp(op, "i32.atomic.store8") == 0) return makeStore(s, i32, /*isAtomic=*/true);
goto parse_error;
- case 'x': {
- switch (op[19]) {
- case 'c':
- if (strcmp(op, "i32.atomic.rmw8_u.xchg") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
- goto parse_error;
- case 'o':
- if (strcmp(op, "i32.atomic.rmw8_u.xor") == 0) return makeAtomicRMWOrCmpxchg(s, i32);
- goto parse_error;
- default: goto parse_error;
- }
- }
default: goto parse_error;
}
}
default: goto parse_error;
}
}
- case 's': {
- switch (op[16]) {
- case '\0':
- if (strcmp(op, "i32.atomic.store") == 0) return makeStore(s, i32, /*isAtomic=*/true);
- goto parse_error;
- case '1':
- if (strcmp(op, "i32.atomic.store16") == 0) return makeStore(s, i32, /*isAtomic=*/true);
- goto parse_error;
- case '8':
- if (strcmp(op, "i32.atomic.store8") == 0) return makeStore(s, i32, /*isAtomic=*/true);
- goto parse_error;
- default: goto parse_error;
- }
- }
- default: goto parse_error;
- }
- }
- default: goto parse_error;
- }
- }
- case 'c': {
- switch (op[5]) {
- case 'l':
- if (strcmp(op, "i32.clz") == 0) return makeUnary(s, UnaryOp::ClzInt32);
- goto parse_error;
- case 'o':
- if (strcmp(op, "i32.const") == 0) return makeConst(s, i32);
- goto parse_error;
- case 't':
- if (strcmp(op, "i32.ctz") == 0) return makeUnary(s, UnaryOp::CtzInt32);
- goto parse_error;
- default: goto parse_error;
- }
- }
- case 'd': {
- switch (op[8]) {
- case 's':
- if (strcmp(op, "i32.div_s") == 0) return makeBinary(s, BinaryOp::DivSInt32);
- goto parse_error;
- case 'u':
- if (strcmp(op, "i32.div_u") == 0) return makeBinary(s, BinaryOp::DivUInt32);
- goto parse_error;
- default: goto parse_error;
- }
- }
- case 'e': {
- switch (op[5]) {
- case 'q': {
- switch (op[6]) {
- case '\0':
- if (strcmp(op, "i32.eq") == 0) return makeBinary(s, BinaryOp::EqInt32);
- goto parse_error;
- case 'z':
- if (strcmp(op, "i32.eqz") == 0) return makeUnary(s, UnaryOp::EqZInt32);
- goto parse_error;
default: goto parse_error;
}
}
- case 'x': {
- switch (op[10]) {
- case '1':
- if (strcmp(op, "i32.extend16_s") == 0) return makeUnary(s, UnaryOp::ExtendS16Int32);
- goto parse_error;
- case '8':
- if (strcmp(op, "i32.extend8_s") == 0) return makeUnary(s, UnaryOp::ExtendS8Int32);
+ case 'c': {
+ switch (op[5]) {
+ case 'l':
+ if (strcmp(op, "i32.clz") == 0) return makeUnary(s, UnaryOp::ClzInt32);
goto parse_error;
- default: goto parse_error;
- }
- }
- default: goto parse_error;
- }
- }
- case 'g': {
- switch (op[5]) {
- case 'e': {
- switch (op[7]) {
- case 's':
- if (strcmp(op, "i32.ge_s") == 0) return makeBinary(s, BinaryOp::GeSInt32);
+ case 'o':
+ if (strcmp(op, "i32.const") == 0) return makeConst(s, i32);
goto parse_error;
- case 'u':
- if (strcmp(op, "i32.ge_u") == 0) return makeBinary(s, BinaryOp::GeUInt32);
+ case 't':
+ if (strcmp(op, "i32.ctz") == 0) return makeUnary(s, UnaryOp::CtzInt32);
goto parse_error;
default: goto parse_error;
}
}
- case 't': {
- switch (op[7]) {
+ case 'd': {
+ switch (op[8]) {
case 's':
- if (strcmp(op, "i32.gt_s") == 0) return makeBinary(s, BinaryOp::GtSInt32);
+ if (strcmp(op, "i32.div_s") == 0) return makeBinary(s, BinaryOp::DivSInt32);
goto parse_error;
case 'u':
- if (strcmp(op, "i32.gt_u") == 0) return makeBinary(s, BinaryOp::GtUInt32);
+ if (strcmp(op, "i32.div_u") == 0) return makeBinary(s, BinaryOp::DivUInt32);
goto parse_error;
default: goto parse_error;
}
}
- default: goto parse_error;
- }
- }
- case 'l': {
- switch (op[5]) {
case 'e': {
- switch (op[7]) {
- case 's':
- if (strcmp(op, "i32.le_s") == 0) return makeBinary(s, BinaryOp::LeSInt32);
- goto parse_error;
- case 'u':
- if (strcmp(op, "i32.le_u") == 0) return makeBinary(s, BinaryOp::LeUInt32);
- goto parse_error;
+ switch (op[5]) {
+ case 'q': {
+ switch (op[6]) {
+ case '\0':
+ if (strcmp(op, "i32.eq") == 0) return makeBinary(s, BinaryOp::EqInt32);
+ goto parse_error;
+ case 'z':
+ if (strcmp(op, "i32.eqz") == 0) return makeUnary(s, UnaryOp::EqZInt32);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'x': {
+ switch (op[10]) {
+ case '1':
+ if (strcmp(op, "i32.extend16_s") == 0) return makeUnary(s, UnaryOp::ExtendS16Int32);
+ goto parse_error;
+ case '8':
+ if (strcmp(op, "i32.extend8_s") == 0) return makeUnary(s, UnaryOp::ExtendS8Int32);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
default: goto parse_error;
}
}
- case 'o': {
- switch (op[8]) {
- case '\0':
- if (strcmp(op, "i32.load") == 0) return makeLoad(s, i32, /*isAtomic=*/false);
- goto parse_error;
- case '1': {
- switch (op[11]) {
+ case 'g': {
+ switch (op[5]) {
+ case 'e': {
+ switch (op[7]) {
case 's':
- if (strcmp(op, "i32.load16_s") == 0) return makeLoad(s, i32, /*isAtomic=*/false);
+ if (strcmp(op, "i32.ge_s") == 0) return makeBinary(s, BinaryOp::GeSInt32);
goto parse_error;
case 'u':
- if (strcmp(op, "i32.load16_u") == 0) return makeLoad(s, i32, /*isAtomic=*/false);
+ if (strcmp(op, "i32.ge_u") == 0) return makeBinary(s, BinaryOp::GeUInt32);
goto parse_error;
default: goto parse_error;
}
}
- case '8': {
- switch (op[10]) {
+ case 't': {
+ switch (op[7]) {
case 's':
- if (strcmp(op, "i32.load8_s") == 0) return makeLoad(s, i32, /*isAtomic=*/false);
+ if (strcmp(op, "i32.gt_s") == 0) return makeBinary(s, BinaryOp::GtSInt32);
goto parse_error;
case 'u':
- if (strcmp(op, "i32.load8_u") == 0) return makeLoad(s, i32, /*isAtomic=*/false);
+ if (strcmp(op, "i32.gt_u") == 0) return makeBinary(s, BinaryOp::GtUInt32);
goto parse_error;
default: goto parse_error;
}
@@ -673,46 +1023,56 @@ switch (op[0]) {
default: goto parse_error;
}
}
- case 't': {
- switch (op[7]) {
- case 's':
- if (strcmp(op, "i32.lt_s") == 0) return makeBinary(s, BinaryOp::LtSInt32);
- goto parse_error;
- case 'u':
- if (strcmp(op, "i32.lt_u") == 0) return makeBinary(s, BinaryOp::LtUInt32);
- goto parse_error;
- default: goto parse_error;
- }
- }
- default: goto parse_error;
- }
- }
- case 'm':
- if (strcmp(op, "i32.mul") == 0) return makeBinary(s, BinaryOp::MulInt32);
- goto parse_error;
- case 'n':
- if (strcmp(op, "i32.ne") == 0) return makeBinary(s, BinaryOp::NeInt32);
- goto parse_error;
- case 'o':
- if (strcmp(op, "i32.or") == 0) return makeBinary(s, BinaryOp::OrInt32);
- goto parse_error;
- case 'p':
- if (strcmp(op, "i32.popcnt") == 0) return makeUnary(s, UnaryOp::PopcntInt32);
- goto parse_error;
- case 'r': {
- switch (op[5]) {
- case 'e': {
- switch (op[6]) {
- case 'i':
- if (strcmp(op, "i32.reinterpret/f32") == 0) return makeUnary(s, UnaryOp::ReinterpretFloat32);
- goto parse_error;
- case 'm': {
+ case 'l': {
+ switch (op[5]) {
+ case 'e': {
+ switch (op[7]) {
+ case 's':
+ if (strcmp(op, "i32.le_s") == 0) return makeBinary(s, BinaryOp::LeSInt32);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "i32.le_u") == 0) return makeBinary(s, BinaryOp::LeUInt32);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'o': {
switch (op[8]) {
+ case '\0':
+ if (strcmp(op, "i32.load") == 0) return makeLoad(s, i32, /*isAtomic=*/false);
+ goto parse_error;
+ case '1': {
+ switch (op[11]) {
+ case 's':
+ if (strcmp(op, "i32.load16_s") == 0) return makeLoad(s, i32, /*isAtomic=*/false);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "i32.load16_u") == 0) return makeLoad(s, i32, /*isAtomic=*/false);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case '8': {
+ switch (op[10]) {
+ case 's':
+ if (strcmp(op, "i32.load8_s") == 0) return makeLoad(s, i32, /*isAtomic=*/false);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "i32.load8_u") == 0) return makeLoad(s, i32, /*isAtomic=*/false);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ default: goto parse_error;
+ }
+ }
+ case 't': {
+ switch (op[7]) {
case 's':
- if (strcmp(op, "i32.rem_s") == 0) return makeBinary(s, BinaryOp::RemSInt32);
+ if (strcmp(op, "i32.lt_s") == 0) return makeBinary(s, BinaryOp::LtSInt32);
goto parse_error;
case 'u':
- if (strcmp(op, "i32.rem_u") == 0) return makeBinary(s, BinaryOp::RemUInt32);
+ if (strcmp(op, "i32.lt_u") == 0) return makeBinary(s, BinaryOp::LtUInt32);
goto parse_error;
default: goto parse_error;
}
@@ -720,83 +1080,217 @@ switch (op[0]) {
default: goto parse_error;
}
}
- case 'o': {
- switch (op[7]) {
- case 'l':
- if (strcmp(op, "i32.rotl") == 0) return makeBinary(s, BinaryOp::RotLInt32);
- goto parse_error;
- case 'r':
- if (strcmp(op, "i32.rotr") == 0) return makeBinary(s, BinaryOp::RotRInt32);
- goto parse_error;
+ case 'm':
+ if (strcmp(op, "i32.mul") == 0) return makeBinary(s, BinaryOp::MulInt32);
+ goto parse_error;
+ case 'n':
+ if (strcmp(op, "i32.ne") == 0) return makeBinary(s, BinaryOp::NeInt32);
+ goto parse_error;
+ case 'o':
+ if (strcmp(op, "i32.or") == 0) return makeBinary(s, BinaryOp::OrInt32);
+ goto parse_error;
+ case 'p':
+ if (strcmp(op, "i32.popcnt") == 0) return makeUnary(s, UnaryOp::PopcntInt32);
+ goto parse_error;
+ case 'r': {
+ switch (op[5]) {
+ case 'e': {
+ switch (op[6]) {
+ case 'i':
+ if (strcmp(op, "i32.reinterpret/f32") == 0) return makeUnary(s, UnaryOp::ReinterpretFloat32);
+ goto parse_error;
+ case 'm': {
+ switch (op[8]) {
+ case 's':
+ if (strcmp(op, "i32.rem_s") == 0) return makeBinary(s, BinaryOp::RemSInt32);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "i32.rem_u") == 0) return makeBinary(s, BinaryOp::RemUInt32);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ default: goto parse_error;
+ }
+ }
+ case 'o': {
+ switch (op[7]) {
+ case 'l':
+ if (strcmp(op, "i32.rotl") == 0) return makeBinary(s, BinaryOp::RotLInt32);
+ goto parse_error;
+ case 'r':
+ if (strcmp(op, "i32.rotr") == 0) return makeBinary(s, BinaryOp::RotRInt32);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
default: goto parse_error;
}
}
- default: goto parse_error;
- }
- }
- case 's': {
- switch (op[5]) {
- case 'h': {
- switch (op[6]) {
- case 'l':
- if (strcmp(op, "i32.shl") == 0) return makeBinary(s, BinaryOp::ShlInt32);
- goto parse_error;
- case 'r': {
- switch (op[8]) {
- case 's':
- if (strcmp(op, "i32.shr_s") == 0) return makeBinary(s, BinaryOp::ShrSInt32);
+ case 's': {
+ switch (op[5]) {
+ case 'h': {
+ switch (op[6]) {
+ case 'l':
+ if (strcmp(op, "i32.shl") == 0) return makeBinary(s, BinaryOp::ShlInt32);
goto parse_error;
- case 'u':
- if (strcmp(op, "i32.shr_u") == 0) return makeBinary(s, BinaryOp::ShrUInt32);
+ case 'r': {
+ switch (op[8]) {
+ case 's':
+ if (strcmp(op, "i32.shr_s") == 0) return makeBinary(s, BinaryOp::ShrSInt32);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "i32.shr_u") == 0) return makeBinary(s, BinaryOp::ShrUInt32);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ default: goto parse_error;
+ }
+ }
+ case 't': {
+ switch (op[9]) {
+ case '\0':
+ if (strcmp(op, "i32.store") == 0) return makeStore(s, i32, /*isAtomic=*/false);
+ goto parse_error;
+ case '1':
+ if (strcmp(op, "i32.store16") == 0) return makeStore(s, i32, /*isAtomic=*/false);
+ goto parse_error;
+ case '8':
+ if (strcmp(op, "i32.store8") == 0) return makeStore(s, i32, /*isAtomic=*/false);
goto parse_error;
default: goto parse_error;
}
}
+ case 'u':
+ if (strcmp(op, "i32.sub") == 0) return makeBinary(s, BinaryOp::SubInt32);
+ goto parse_error;
default: goto parse_error;
}
}
case 't': {
- switch (op[9]) {
- case '\0':
- if (strcmp(op, "i32.store") == 0) return makeStore(s, i32, /*isAtomic=*/false);
- goto parse_error;
- case '1':
- if (strcmp(op, "i32.store16") == 0) return makeStore(s, i32, /*isAtomic=*/false);
+ switch (op[10]) {
+ case 's': {
+ switch (op[11]) {
+ case '/': {
+ switch (op[13]) {
+ case '3':
+ if (strcmp(op, "i32.trunc_s/f32") == 0) return makeUnary(s, UnaryOp::TruncSFloat32ToInt32);
+ goto parse_error;
+ case '6':
+ if (strcmp(op, "i32.trunc_s/f64") == 0) return makeUnary(s, UnaryOp::TruncSFloat64ToInt32);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case ':': {
+ switch (op[17]) {
+ case '3':
+ if (strcmp(op, "i32.trunc_s:sat/f32") == 0) return makeUnary(s, UnaryOp::TruncSatSFloat32ToInt32);
+ goto parse_error;
+ case '6':
+ if (strcmp(op, "i32.trunc_s:sat/f64") == 0) return makeUnary(s, UnaryOp::TruncSatSFloat64ToInt32);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ default: goto parse_error;
+ }
+ }
+ case 'u': {
+ switch (op[11]) {
+ case '/': {
+ switch (op[13]) {
+ case '3':
+ if (strcmp(op, "i32.trunc_u/f32") == 0) return makeUnary(s, UnaryOp::TruncUFloat32ToInt32);
+ goto parse_error;
+ case '6':
+ if (strcmp(op, "i32.trunc_u/f64") == 0) return makeUnary(s, UnaryOp::TruncUFloat64ToInt32);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case ':': {
+ switch (op[17]) {
+ case '3':
+ if (strcmp(op, "i32.trunc_u:sat/f32") == 0) return makeUnary(s, UnaryOp::TruncSatUFloat32ToInt32);
+ goto parse_error;
+ case '6':
+ if (strcmp(op, "i32.trunc_u:sat/f64") == 0) return makeUnary(s, UnaryOp::TruncSatUFloat64ToInt32);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ default: goto parse_error;
+ }
+ }
+ default: goto parse_error;
+ }
+ }
+ case 'w': {
+ switch (op[5]) {
+ case 'a':
+ if (strcmp(op, "i32.wait") == 0) return makeAtomicWait(s, i32);
goto parse_error;
- case '8':
- if (strcmp(op, "i32.store8") == 0) return makeStore(s, i32, /*isAtomic=*/false);
+ case 'r':
+ if (strcmp(op, "i32.wrap/i64") == 0) return makeUnary(s, UnaryOp::WrapInt64);
goto parse_error;
default: goto parse_error;
}
}
- case 'u':
- if (strcmp(op, "i32.sub") == 0) return makeBinary(s, BinaryOp::SubInt32);
+ case 'x':
+ if (strcmp(op, "i32.xor") == 0) return makeBinary(s, BinaryOp::XorInt32);
goto parse_error;
default: goto parse_error;
}
}
- case 't': {
- switch (op[10]) {
- case 's': {
- switch (op[11]) {
- case '/': {
- switch (op[13]) {
- case '3':
- if (strcmp(op, "i32.trunc_s/f32") == 0) return makeUnary(s, UnaryOp::TruncSFloat32ToInt32);
+ case 'x': {
+ switch (op[6]) {
+ case 'a': {
+ switch (op[7]) {
+ case 'd':
+ if (strcmp(op, "i32x4.add") == 0) return makeBinary(s, BinaryOp::AddVecI32x4);
+ goto parse_error;
+ case 'l':
+ if (strcmp(op, "i32x4.all_true") == 0) return makeUnary(s, UnaryOp::AllTrueVecI32x4);
+ goto parse_error;
+ case 'n':
+ if (strcmp(op, "i32x4.any_true") == 0) return makeUnary(s, UnaryOp::AnyTrueVecI32x4);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'e': {
+ switch (op[7]) {
+ case 'q':
+ if (strcmp(op, "i32x4.eq") == 0) return makeBinary(s, BinaryOp::EqVecI32x4);
+ goto parse_error;
+ case 'x':
+ if (strcmp(op, "i32x4.extract_lane") == 0) return makeSIMDExtract(s, SIMDExtractOp::ExtractLaneVecI32x4, 4);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'g': {
+ switch (op[7]) {
+ case 'e': {
+ switch (op[9]) {
+ case 's':
+ if (strcmp(op, "i32x4.ge_s") == 0) return makeBinary(s, BinaryOp::GeSVecI32x4);
goto parse_error;
- case '6':
- if (strcmp(op, "i32.trunc_s/f64") == 0) return makeUnary(s, UnaryOp::TruncSFloat64ToInt32);
+ case 'u':
+ if (strcmp(op, "i32x4.ge_u") == 0) return makeBinary(s, BinaryOp::GeUVecI32x4);
goto parse_error;
default: goto parse_error;
}
}
- case ':': {
- switch (op[17]) {
- case '3':
- if (strcmp(op, "i32.trunc_s:sat/f32") == 0) return makeUnary(s, UnaryOp::TruncSatSFloat32ToInt32);
+ case 't': {
+ switch (op[9]) {
+ case 's':
+ if (strcmp(op, "i32x4.gt_s") == 0) return makeBinary(s, BinaryOp::GtSVecI32x4);
goto parse_error;
- case '6':
- if (strcmp(op, "i32.trunc_s:sat/f64") == 0) return makeUnary(s, UnaryOp::TruncSatSFloat64ToInt32);
+ case 'u':
+ if (strcmp(op, "i32x4.gt_u") == 0) return makeBinary(s, BinaryOp::GtUVecI32x4);
goto parse_error;
default: goto parse_error;
}
@@ -804,26 +1298,26 @@ switch (op[0]) {
default: goto parse_error;
}
}
- case 'u': {
- switch (op[11]) {
- case '/': {
- switch (op[13]) {
- case '3':
- if (strcmp(op, "i32.trunc_u/f32") == 0) return makeUnary(s, UnaryOp::TruncUFloat32ToInt32);
+ case 'l': {
+ switch (op[7]) {
+ case 'e': {
+ switch (op[9]) {
+ case 's':
+ if (strcmp(op, "i32x4.le_s") == 0) return makeBinary(s, BinaryOp::LeSVecI32x4);
goto parse_error;
- case '6':
- if (strcmp(op, "i32.trunc_u/f64") == 0) return makeUnary(s, UnaryOp::TruncUFloat64ToInt32);
+ case 'u':
+ if (strcmp(op, "i32x4.le_u") == 0) return makeBinary(s, BinaryOp::LeUVecI32x4);
goto parse_error;
default: goto parse_error;
}
}
- case ':': {
- switch (op[17]) {
- case '3':
- if (strcmp(op, "i32.trunc_u:sat/f32") == 0) return makeUnary(s, UnaryOp::TruncSatUFloat32ToInt32);
+ case 't': {
+ switch (op[9]) {
+ case 's':
+ if (strcmp(op, "i32x4.lt_s") == 0) return makeBinary(s, BinaryOp::LtSVecI32x4);
goto parse_error;
- case '6':
- if (strcmp(op, "i32.trunc_u:sat/f64") == 0) return makeUnary(s, UnaryOp::TruncSatUFloat64ToInt32);
+ case 'u':
+ if (strcmp(op, "i32x4.lt_u") == 0) return makeBinary(s, BinaryOp::LtUVecI32x4);
goto parse_error;
default: goto parse_error;
}
@@ -831,217 +1325,359 @@ switch (op[0]) {
default: goto parse_error;
}
}
- default: goto parse_error;
- }
- }
- case 'w': {
- switch (op[5]) {
- case 'a':
- if (strcmp(op, "i32.wait") == 0) return makeAtomicWait(s, i32);
+ case 'm':
+ if (strcmp(op, "i32x4.mul") == 0) return makeBinary(s, BinaryOp::MulVecI32x4);
goto parse_error;
+ case 'n': {
+ switch (op[8]) {
+ case '\0':
+ if (strcmp(op, "i32x4.ne") == 0) return makeBinary(s, BinaryOp::NeVecI32x4);
+ goto parse_error;
+ case 'g':
+ if (strcmp(op, "i32x4.neg") == 0) return makeUnary(s, UnaryOp::NegVecI32x4);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
case 'r':
- if (strcmp(op, "i32.wrap/i64") == 0) return makeUnary(s, UnaryOp::WrapInt64);
+ if (strcmp(op, "i32x4.replace_lane") == 0) return makeSIMDReplace(s, SIMDReplaceOp::ReplaceLaneVecI32x4, 4);
goto parse_error;
+ case 's': {
+ switch (op[7]) {
+ case 'h': {
+ switch (op[8]) {
+ case 'l':
+ if (strcmp(op, "i32x4.shl") == 0) return makeSIMDShift(s, SIMDShiftOp::ShlVecI32x4);
+ goto parse_error;
+ case 'r': {
+ switch (op[10]) {
+ case 's':
+ if (strcmp(op, "i32x4.shr_s") == 0) return makeSIMDShift(s, SIMDShiftOp::ShrSVecI32x4);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "i32x4.shr_u") == 0) return makeSIMDShift(s, SIMDShiftOp::ShrUVecI32x4);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ default: goto parse_error;
+ }
+ }
+ case 'p':
+ if (strcmp(op, "i32x4.splat") == 0) return makeUnary(s, UnaryOp::SplatVecI32x4);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "i32x4.sub") == 0) return makeBinary(s, BinaryOp::SubVecI32x4);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 't': {
+ switch (op[12]) {
+ case 's':
+ if (strcmp(op, "i32x4.trunc_s/f32x4:sat") == 0) return makeUnary(s, UnaryOp::TruncSatSVecF32x4ToVecI32x4);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "i32x4.trunc_u/f32x4:sat") == 0) return makeUnary(s, UnaryOp::TruncSatUVecF32x4ToVecI32x4);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
default: goto parse_error;
}
}
- case 'x':
- if (strcmp(op, "i32.xor") == 0) return makeBinary(s, BinaryOp::XorInt32);
- goto parse_error;
default: goto parse_error;
}
}
case '6': {
- switch (op[4]) {
- case 'a': {
- switch (op[5]) {
- case 'd':
- if (strcmp(op, "i64.add") == 0) return makeBinary(s, BinaryOp::AddInt64);
- goto parse_error;
- case 'n':
- if (strcmp(op, "i64.and") == 0) return makeBinary(s, BinaryOp::AndInt64);
- goto parse_error;
- case 't': {
- switch (op[11]) {
- case 'l': {
- switch (op[15]) {
- case '\0':
- if (strcmp(op, "i64.atomic.load") == 0) return makeLoad(s, i64, /*isAtomic=*/true);
- goto parse_error;
- case '1':
- if (strcmp(op, "i64.atomic.load16_u") == 0) return makeLoad(s, i64, /*isAtomic=*/true);
- goto parse_error;
- case '3':
- if (strcmp(op, "i64.atomic.load32_u") == 0) return makeLoad(s, i64, /*isAtomic=*/true);
- goto parse_error;
- case '8':
- if (strcmp(op, "i64.atomic.load8_u") == 0) return makeLoad(s, i64, /*isAtomic=*/true);
- goto parse_error;
- default: goto parse_error;
- }
- }
- case 'r': {
- switch (op[14]) {
- case '.': {
+ switch (op[3]) {
+ case '.': {
+ switch (op[4]) {
+ case 'a': {
+ switch (op[5]) {
+ case 'd':
+ if (strcmp(op, "i64.add") == 0) return makeBinary(s, BinaryOp::AddInt64);
+ goto parse_error;
+ case 'n':
+ if (strcmp(op, "i64.and") == 0) return makeBinary(s, BinaryOp::AndInt64);
+ goto parse_error;
+ case 't': {
+ switch (op[11]) {
+ case 'l': {
switch (op[15]) {
- case 'a': {
- switch (op[16]) {
- case 'd':
- if (strcmp(op, "i64.atomic.rmw.add") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
- goto parse_error;
- case 'n':
- if (strcmp(op, "i64.atomic.rmw.and") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
- goto parse_error;
- default: goto parse_error;
- }
- }
- case 'c':
- if (strcmp(op, "i64.atomic.rmw.cmpxchg") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
+ case '\0':
+ if (strcmp(op, "i64.atomic.load") == 0) return makeLoad(s, i64, /*isAtomic=*/true);
goto parse_error;
- case 'o':
- if (strcmp(op, "i64.atomic.rmw.or") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
+ case '1':
+ if (strcmp(op, "i64.atomic.load16_u") == 0) return makeLoad(s, i64, /*isAtomic=*/true);
goto parse_error;
- case 's':
- if (strcmp(op, "i64.atomic.rmw.sub") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
+ case '3':
+ if (strcmp(op, "i64.atomic.load32_u") == 0) return makeLoad(s, i64, /*isAtomic=*/true);
+ goto parse_error;
+ case '8':
+ if (strcmp(op, "i64.atomic.load8_u") == 0) return makeLoad(s, i64, /*isAtomic=*/true);
goto parse_error;
- case 'x': {
- switch (op[16]) {
- case 'c':
- if (strcmp(op, "i64.atomic.rmw.xchg") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
- goto parse_error;
- case 'o':
- if (strcmp(op, "i64.atomic.rmw.xor") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
- goto parse_error;
- default: goto parse_error;
- }
- }
default: goto parse_error;
}
}
- case '1': {
- switch (op[19]) {
- case 'a': {
- switch (op[20]) {
- case 'd':
- if (strcmp(op, "i64.atomic.rmw16_u.add") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
+ case 'r': {
+ switch (op[14]) {
+ case '.': {
+ switch (op[15]) {
+ case 'a': {
+ switch (op[16]) {
+ case 'd':
+ if (strcmp(op, "i64.atomic.rmw.add") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
+ goto parse_error;
+ case 'n':
+ if (strcmp(op, "i64.atomic.rmw.and") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'c':
+ if (strcmp(op, "i64.atomic.rmw.cmpxchg") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
+ goto parse_error;
+ case 'o':
+ if (strcmp(op, "i64.atomic.rmw.or") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
goto parse_error;
- case 'n':
- if (strcmp(op, "i64.atomic.rmw16_u.and") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
+ case 's':
+ if (strcmp(op, "i64.atomic.rmw.sub") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
goto parse_error;
+ case 'x': {
+ switch (op[16]) {
+ case 'c':
+ if (strcmp(op, "i64.atomic.rmw.xchg") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
+ goto parse_error;
+ case 'o':
+ if (strcmp(op, "i64.atomic.rmw.xor") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
default: goto parse_error;
}
}
- case 'c':
- if (strcmp(op, "i64.atomic.rmw16_u.cmpxchg") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
- goto parse_error;
- case 'o':
- if (strcmp(op, "i64.atomic.rmw16_u.or") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
- goto parse_error;
- case 's':
- if (strcmp(op, "i64.atomic.rmw16_u.sub") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
- goto parse_error;
- case 'x': {
- switch (op[20]) {
+ case '1': {
+ switch (op[19]) {
+ case 'a': {
+ switch (op[20]) {
+ case 'd':
+ if (strcmp(op, "i64.atomic.rmw16_u.add") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
+ goto parse_error;
+ case 'n':
+ if (strcmp(op, "i64.atomic.rmw16_u.and") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
case 'c':
- if (strcmp(op, "i64.atomic.rmw16_u.xchg") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
+ if (strcmp(op, "i64.atomic.rmw16_u.cmpxchg") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
goto parse_error;
case 'o':
- if (strcmp(op, "i64.atomic.rmw16_u.xor") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
+ if (strcmp(op, "i64.atomic.rmw16_u.or") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
+ goto parse_error;
+ case 's':
+ if (strcmp(op, "i64.atomic.rmw16_u.sub") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
goto parse_error;
+ case 'x': {
+ switch (op[20]) {
+ case 'c':
+ if (strcmp(op, "i64.atomic.rmw16_u.xchg") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
+ goto parse_error;
+ case 'o':
+ if (strcmp(op, "i64.atomic.rmw16_u.xor") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
default: goto parse_error;
}
}
- default: goto parse_error;
- }
- }
- case '3': {
- switch (op[19]) {
- case 'a': {
- switch (op[20]) {
- case 'd':
- if (strcmp(op, "i64.atomic.rmw32_u.add") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
+ case '3': {
+ switch (op[19]) {
+ case 'a': {
+ switch (op[20]) {
+ case 'd':
+ if (strcmp(op, "i64.atomic.rmw32_u.add") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
+ goto parse_error;
+ case 'n':
+ if (strcmp(op, "i64.atomic.rmw32_u.and") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'c':
+ if (strcmp(op, "i64.atomic.rmw32_u.cmpxchg") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
+ goto parse_error;
+ case 'o':
+ if (strcmp(op, "i64.atomic.rmw32_u.or") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
goto parse_error;
- case 'n':
- if (strcmp(op, "i64.atomic.rmw32_u.and") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
+ case 's':
+ if (strcmp(op, "i64.atomic.rmw32_u.sub") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
goto parse_error;
+ case 'x': {
+ switch (op[20]) {
+ case 'c':
+ if (strcmp(op, "i64.atomic.rmw32_u.xchg") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
+ goto parse_error;
+ case 'o':
+ if (strcmp(op, "i64.atomic.rmw32_u.xor") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
default: goto parse_error;
}
}
- case 'c':
- if (strcmp(op, "i64.atomic.rmw32_u.cmpxchg") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
- goto parse_error;
- case 'o':
- if (strcmp(op, "i64.atomic.rmw32_u.or") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
- goto parse_error;
- case 's':
- if (strcmp(op, "i64.atomic.rmw32_u.sub") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
- goto parse_error;
- case 'x': {
- switch (op[20]) {
+ case '8': {
+ switch (op[18]) {
+ case 'a': {
+ switch (op[19]) {
+ case 'd':
+ if (strcmp(op, "i64.atomic.rmw8_u.add") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
+ goto parse_error;
+ case 'n':
+ if (strcmp(op, "i64.atomic.rmw8_u.and") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
case 'c':
- if (strcmp(op, "i64.atomic.rmw32_u.xchg") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
+ if (strcmp(op, "i64.atomic.rmw8_u.cmpxchg") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
goto parse_error;
case 'o':
- if (strcmp(op, "i64.atomic.rmw32_u.xor") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
+ if (strcmp(op, "i64.atomic.rmw8_u.or") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
+ goto parse_error;
+ case 's':
+ if (strcmp(op, "i64.atomic.rmw8_u.sub") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
goto parse_error;
+ case 'x': {
+ switch (op[19]) {
+ case 'c':
+ if (strcmp(op, "i64.atomic.rmw8_u.xchg") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
+ goto parse_error;
+ case 'o':
+ if (strcmp(op, "i64.atomic.rmw8_u.xor") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
default: goto parse_error;
}
}
default: goto parse_error;
}
}
- case '8': {
- switch (op[18]) {
- case 'a': {
- switch (op[19]) {
- case 'd':
- if (strcmp(op, "i64.atomic.rmw8_u.add") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
- goto parse_error;
- case 'n':
- if (strcmp(op, "i64.atomic.rmw8_u.and") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
- goto parse_error;
- default: goto parse_error;
- }
- }
- case 'c':
- if (strcmp(op, "i64.atomic.rmw8_u.cmpxchg") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
+ case 's': {
+ switch (op[16]) {
+ case '\0':
+ if (strcmp(op, "i64.atomic.store") == 0) return makeStore(s, i64, /*isAtomic=*/true);
goto parse_error;
- case 'o':
- if (strcmp(op, "i64.atomic.rmw8_u.or") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
+ case '1':
+ if (strcmp(op, "i64.atomic.store16") == 0) return makeStore(s, i64, /*isAtomic=*/true);
goto parse_error;
- case 's':
- if (strcmp(op, "i64.atomic.rmw8_u.sub") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
+ case '3':
+ if (strcmp(op, "i64.atomic.store32") == 0) return makeStore(s, i64, /*isAtomic=*/true);
+ goto parse_error;
+ case '8':
+ if (strcmp(op, "i64.atomic.store8") == 0) return makeStore(s, i64, /*isAtomic=*/true);
goto parse_error;
- case 'x': {
- switch (op[19]) {
- case 'c':
- if (strcmp(op, "i64.atomic.rmw8_u.xchg") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
- goto parse_error;
- case 'o':
- if (strcmp(op, "i64.atomic.rmw8_u.xor") == 0) return makeAtomicRMWOrCmpxchg(s, i64);
- goto parse_error;
- default: goto parse_error;
- }
- }
default: goto parse_error;
}
}
default: goto parse_error;
}
}
- case 's': {
- switch (op[16]) {
+ default: goto parse_error;
+ }
+ }
+ case 'c': {
+ switch (op[5]) {
+ case 'l':
+ if (strcmp(op, "i64.clz") == 0) return makeUnary(s, UnaryOp::ClzInt64);
+ goto parse_error;
+ case 'o':
+ if (strcmp(op, "i64.const") == 0) return makeConst(s, i64);
+ goto parse_error;
+ case 't':
+ if (strcmp(op, "i64.ctz") == 0) return makeUnary(s, UnaryOp::CtzInt64);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'd': {
+ switch (op[8]) {
+ case 's':
+ if (strcmp(op, "i64.div_s") == 0) return makeBinary(s, BinaryOp::DivSInt64);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "i64.div_u") == 0) return makeBinary(s, BinaryOp::DivUInt64);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'e': {
+ switch (op[5]) {
+ case 'q': {
+ switch (op[6]) {
case '\0':
- if (strcmp(op, "i64.atomic.store") == 0) return makeStore(s, i64, /*isAtomic=*/true);
+ if (strcmp(op, "i64.eq") == 0) return makeBinary(s, BinaryOp::EqInt64);
+ goto parse_error;
+ case 'z':
+ if (strcmp(op, "i64.eqz") == 0) return makeUnary(s, UnaryOp::EqZInt64);
goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'x': {
+ switch (op[10]) {
case '1':
- if (strcmp(op, "i64.atomic.store16") == 0) return makeStore(s, i64, /*isAtomic=*/true);
+ if (strcmp(op, "i64.extend16_s") == 0) return makeUnary(s, UnaryOp::ExtendS16Int64);
goto parse_error;
case '3':
- if (strcmp(op, "i64.atomic.store32") == 0) return makeStore(s, i64, /*isAtomic=*/true);
+ if (strcmp(op, "i64.extend32_s") == 0) return makeUnary(s, UnaryOp::ExtendS32Int64);
goto parse_error;
case '8':
- if (strcmp(op, "i64.atomic.store8") == 0) return makeStore(s, i64, /*isAtomic=*/true);
+ if (strcmp(op, "i64.extend8_s") == 0) return makeUnary(s, UnaryOp::ExtendS8Int64);
+ goto parse_error;
+ case '_': {
+ switch (op[11]) {
+ case 's':
+ if (strcmp(op, "i64.extend_s/i32") == 0) return makeUnary(s, UnaryOp::ExtendSInt32);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "i64.extend_u/i32") == 0) return makeUnary(s, UnaryOp::ExtendUInt32);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ default: goto parse_error;
+ }
+ }
+ default: goto parse_error;
+ }
+ }
+ case 'g': {
+ switch (op[5]) {
+ case 'e': {
+ switch (op[7]) {
+ case 's':
+ if (strcmp(op, "i64.ge_s") == 0) return makeBinary(s, BinaryOp::GeSInt64);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "i64.ge_u") == 0) return makeBinary(s, BinaryOp::GeUInt64);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 't': {
+ switch (op[7]) {
+ case 's':
+ if (strcmp(op, "i64.gt_s") == 0) return makeBinary(s, BinaryOp::GtSInt64);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "i64.gt_u") == 0) return makeBinary(s, BinaryOp::GtUInt64);
goto parse_error;
default: goto parse_error;
}
@@ -1049,149 +1685,321 @@ switch (op[0]) {
default: goto parse_error;
}
}
- default: goto parse_error;
- }
- }
- case 'c': {
- switch (op[5]) {
- case 'l':
- if (strcmp(op, "i64.clz") == 0) return makeUnary(s, UnaryOp::ClzInt64);
- goto parse_error;
- case 'o':
- if (strcmp(op, "i64.const") == 0) return makeConst(s, i64);
+ case 'l': {
+ switch (op[5]) {
+ case 'e': {
+ switch (op[7]) {
+ case 's':
+ if (strcmp(op, "i64.le_s") == 0) return makeBinary(s, BinaryOp::LeSInt64);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "i64.le_u") == 0) return makeBinary(s, BinaryOp::LeUInt64);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'o': {
+ switch (op[8]) {
+ case '\0':
+ if (strcmp(op, "i64.load") == 0) return makeLoad(s, i64, /*isAtomic=*/false);
+ goto parse_error;
+ case '1': {
+ switch (op[11]) {
+ case 's':
+ if (strcmp(op, "i64.load16_s") == 0) return makeLoad(s, i64, /*isAtomic=*/false);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "i64.load16_u") == 0) return makeLoad(s, i64, /*isAtomic=*/false);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case '3': {
+ switch (op[11]) {
+ case 's':
+ if (strcmp(op, "i64.load32_s") == 0) return makeLoad(s, i64, /*isAtomic=*/false);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "i64.load32_u") == 0) return makeLoad(s, i64, /*isAtomic=*/false);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case '8': {
+ switch (op[10]) {
+ case 's':
+ if (strcmp(op, "i64.load8_s") == 0) return makeLoad(s, i64, /*isAtomic=*/false);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "i64.load8_u") == 0) return makeLoad(s, i64, /*isAtomic=*/false);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ default: goto parse_error;
+ }
+ }
+ case 't': {
+ switch (op[7]) {
+ case 's':
+ if (strcmp(op, "i64.lt_s") == 0) return makeBinary(s, BinaryOp::LtSInt64);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "i64.lt_u") == 0) return makeBinary(s, BinaryOp::LtUInt64);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ default: goto parse_error;
+ }
+ }
+ case 'm':
+ if (strcmp(op, "i64.mul") == 0) return makeBinary(s, BinaryOp::MulInt64);
goto parse_error;
- case 't':
- if (strcmp(op, "i64.ctz") == 0) return makeUnary(s, UnaryOp::CtzInt64);
+ case 'n':
+ if (strcmp(op, "i64.ne") == 0) return makeBinary(s, BinaryOp::NeInt64);
goto parse_error;
- default: goto parse_error;
- }
- }
- case 'd': {
- switch (op[8]) {
- case 's':
- if (strcmp(op, "i64.div_s") == 0) return makeBinary(s, BinaryOp::DivSInt64);
+ case 'o':
+ if (strcmp(op, "i64.or") == 0) return makeBinary(s, BinaryOp::OrInt64);
goto parse_error;
- case 'u':
- if (strcmp(op, "i64.div_u") == 0) return makeBinary(s, BinaryOp::DivUInt64);
+ case 'p':
+ if (strcmp(op, "i64.popcnt") == 0) return makeUnary(s, UnaryOp::PopcntInt64);
goto parse_error;
- default: goto parse_error;
- }
- }
- case 'e': {
- switch (op[5]) {
- case 'q': {
- switch (op[6]) {
- case '\0':
- if (strcmp(op, "i64.eq") == 0) return makeBinary(s, BinaryOp::EqInt64);
- goto parse_error;
- case 'z':
- if (strcmp(op, "i64.eqz") == 0) return makeUnary(s, UnaryOp::EqZInt64);
+ case 'r': {
+ switch (op[5]) {
+ case 'e': {
+ switch (op[6]) {
+ case 'i':
+ if (strcmp(op, "i64.reinterpret/f64") == 0) return makeUnary(s, UnaryOp::ReinterpretFloat64);
+ goto parse_error;
+ case 'm': {
+ switch (op[8]) {
+ case 's':
+ if (strcmp(op, "i64.rem_s") == 0) return makeBinary(s, BinaryOp::RemSInt64);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "i64.rem_u") == 0) return makeBinary(s, BinaryOp::RemUInt64);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ default: goto parse_error;
+ }
+ }
+ case 'o': {
+ switch (op[7]) {
+ case 'l':
+ if (strcmp(op, "i64.rotl") == 0) return makeBinary(s, BinaryOp::RotLInt64);
+ goto parse_error;
+ case 'r':
+ if (strcmp(op, "i64.rotr") == 0) return makeBinary(s, BinaryOp::RotRInt64);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ default: goto parse_error;
+ }
+ }
+ case 's': {
+ switch (op[5]) {
+ case 'h': {
+ switch (op[6]) {
+ case 'l':
+ if (strcmp(op, "i64.shl") == 0) return makeBinary(s, BinaryOp::ShlInt64);
+ goto parse_error;
+ case 'r': {
+ switch (op[8]) {
+ case 's':
+ if (strcmp(op, "i64.shr_s") == 0) return makeBinary(s, BinaryOp::ShrSInt64);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "i64.shr_u") == 0) return makeBinary(s, BinaryOp::ShrUInt64);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ default: goto parse_error;
+ }
+ }
+ case 't': {
+ switch (op[9]) {
+ case '\0':
+ if (strcmp(op, "i64.store") == 0) return makeStore(s, i64, /*isAtomic=*/false);
+ goto parse_error;
+ case '1':
+ if (strcmp(op, "i64.store16") == 0) return makeStore(s, i64, /*isAtomic=*/false);
+ goto parse_error;
+ case '3':
+ if (strcmp(op, "i64.store32") == 0) return makeStore(s, i64, /*isAtomic=*/false);
+ goto parse_error;
+ case '8':
+ if (strcmp(op, "i64.store8") == 0) return makeStore(s, i64, /*isAtomic=*/false);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'u':
+ if (strcmp(op, "i64.sub") == 0) return makeBinary(s, BinaryOp::SubInt64);
goto parse_error;
default: goto parse_error;
}
}
- case 'x': {
+ case 't': {
switch (op[10]) {
- case '1':
- if (strcmp(op, "i64.extend16_s") == 0) return makeUnary(s, UnaryOp::ExtendS16Int64);
- goto parse_error;
- case '3':
- if (strcmp(op, "i64.extend32_s") == 0) return makeUnary(s, UnaryOp::ExtendS32Int64);
- goto parse_error;
- case '8':
- if (strcmp(op, "i64.extend8_s") == 0) return makeUnary(s, UnaryOp::ExtendS8Int64);
- goto parse_error;
- case '_': {
+ case 's': {
switch (op[11]) {
- case 's':
- if (strcmp(op, "i64.extend_s/i32") == 0) return makeUnary(s, UnaryOp::ExtendSInt32);
- goto parse_error;
- case 'u':
- if (strcmp(op, "i64.extend_u/i32") == 0) return makeUnary(s, UnaryOp::ExtendUInt32);
- goto parse_error;
+ case '/': {
+ switch (op[13]) {
+ case '3':
+ if (strcmp(op, "i64.trunc_s/f32") == 0) return makeUnary(s, UnaryOp::TruncSFloat32ToInt64);
+ goto parse_error;
+ case '6':
+ if (strcmp(op, "i64.trunc_s/f64") == 0) return makeUnary(s, UnaryOp::TruncSFloat64ToInt64);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case ':': {
+ switch (op[17]) {
+ case '3':
+ if (strcmp(op, "i64.trunc_s:sat/f32") == 0) return makeUnary(s, UnaryOp::TruncSatSFloat32ToInt64);
+ goto parse_error;
+ case '6':
+ if (strcmp(op, "i64.trunc_s:sat/f64") == 0) return makeUnary(s, UnaryOp::TruncSatSFloat64ToInt64);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ default: goto parse_error;
+ }
+ }
+ case 'u': {
+ switch (op[11]) {
+ case '/': {
+ switch (op[13]) {
+ case '3':
+ if (strcmp(op, "i64.trunc_u/f32") == 0) return makeUnary(s, UnaryOp::TruncUFloat32ToInt64);
+ goto parse_error;
+ case '6':
+ if (strcmp(op, "i64.trunc_u/f64") == 0) return makeUnary(s, UnaryOp::TruncUFloat64ToInt64);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case ':': {
+ switch (op[17]) {
+ case '3':
+ if (strcmp(op, "i64.trunc_u:sat/f32") == 0) return makeUnary(s, UnaryOp::TruncSatUFloat32ToInt64);
+ goto parse_error;
+ case '6':
+ if (strcmp(op, "i64.trunc_u:sat/f64") == 0) return makeUnary(s, UnaryOp::TruncSatUFloat64ToInt64);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
default: goto parse_error;
}
}
default: goto parse_error;
}
}
+ case 'w':
+ if (strcmp(op, "i64.wait") == 0) return makeAtomicWait(s, i64);
+ goto parse_error;
+ case 'x':
+ if (strcmp(op, "i64.xor") == 0) return makeBinary(s, BinaryOp::XorInt64);
+ goto parse_error;
default: goto parse_error;
}
}
- case 'g': {
- switch (op[5]) {
- case 'e': {
+ case 'x': {
+ switch (op[6]) {
+ case 'a': {
switch (op[7]) {
- case 's':
- if (strcmp(op, "i64.ge_s") == 0) return makeBinary(s, BinaryOp::GeSInt64);
+ case 'd':
+ if (strcmp(op, "i64x2.add") == 0) return makeBinary(s, BinaryOp::AddVecI64x2);
goto parse_error;
- case 'u':
- if (strcmp(op, "i64.ge_u") == 0) return makeBinary(s, BinaryOp::GeUInt64);
+ case 'l':
+ if (strcmp(op, "i64x2.all_true") == 0) return makeUnary(s, UnaryOp::AllTrueVecI64x2);
+ goto parse_error;
+ case 'n':
+ if (strcmp(op, "i64x2.any_true") == 0) return makeUnary(s, UnaryOp::AnyTrueVecI64x2);
goto parse_error;
default: goto parse_error;
}
}
- case 't': {
+ case 'e':
+ if (strcmp(op, "i64x2.extract_lane") == 0) return makeSIMDExtract(s, SIMDExtractOp::ExtractLaneVecI64x2, 2);
+ goto parse_error;
+ case 'n':
+ if (strcmp(op, "i64x2.neg") == 0) return makeUnary(s, UnaryOp::NegVecI64x2);
+ goto parse_error;
+ case 'r':
+ if (strcmp(op, "i64x2.replace_lane") == 0) return makeSIMDReplace(s, SIMDReplaceOp::ReplaceLaneVecI64x2, 2);
+ goto parse_error;
+ case 's': {
switch (op[7]) {
- case 's':
- if (strcmp(op, "i64.gt_s") == 0) return makeBinary(s, BinaryOp::GtSInt64);
+ case 'h': {
+ switch (op[8]) {
+ case 'l':
+ if (strcmp(op, "i64x2.shl") == 0) return makeSIMDShift(s, SIMDShiftOp::ShlVecI64x2);
+ goto parse_error;
+ case 'r': {
+ switch (op[10]) {
+ case 's':
+ if (strcmp(op, "i64x2.shr_s") == 0) return makeSIMDShift(s, SIMDShiftOp::ShrSVecI64x2);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "i64x2.shr_u") == 0) return makeSIMDShift(s, SIMDShiftOp::ShrUVecI64x2);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ default: goto parse_error;
+ }
+ }
+ case 'p':
+ if (strcmp(op, "i64x2.splat") == 0) return makeUnary(s, UnaryOp::SplatVecI64x2);
goto parse_error;
case 'u':
- if (strcmp(op, "i64.gt_u") == 0) return makeBinary(s, BinaryOp::GtUInt64);
+ if (strcmp(op, "i64x2.sub") == 0) return makeBinary(s, BinaryOp::SubVecI64x2);
goto parse_error;
default: goto parse_error;
}
}
- default: goto parse_error;
- }
- }
- case 'l': {
- switch (op[5]) {
- case 'e': {
- switch (op[7]) {
+ case 't': {
+ switch (op[12]) {
case 's':
- if (strcmp(op, "i64.le_s") == 0) return makeBinary(s, BinaryOp::LeSInt64);
+ if (strcmp(op, "i64x2.trunc_s/f64x2:sat") == 0) return makeUnary(s, UnaryOp::TruncSatSVecF64x2ToVecI64x2);
goto parse_error;
case 'u':
- if (strcmp(op, "i64.le_u") == 0) return makeBinary(s, BinaryOp::LeUInt64);
+ if (strcmp(op, "i64x2.trunc_u/f64x2:sat") == 0) return makeUnary(s, UnaryOp::TruncSatUVecF64x2ToVecI64x2);
goto parse_error;
default: goto parse_error;
}
}
- case 'o': {
- switch (op[8]) {
+ default: goto parse_error;
+ }
+ }
+ default: goto parse_error;
+ }
+ }
+ case '8': {
+ switch (op[6]) {
+ case 'a': {
+ switch (op[7]) {
+ case 'd': {
+ switch (op[9]) {
case '\0':
- if (strcmp(op, "i64.load") == 0) return makeLoad(s, i64, /*isAtomic=*/false);
+ if (strcmp(op, "i8x16.add") == 0) return makeBinary(s, BinaryOp::AddVecI8x16);
goto parse_error;
- case '1': {
- switch (op[11]) {
- case 's':
- if (strcmp(op, "i64.load16_s") == 0) return makeLoad(s, i64, /*isAtomic=*/false);
- goto parse_error;
- case 'u':
- if (strcmp(op, "i64.load16_u") == 0) return makeLoad(s, i64, /*isAtomic=*/false);
- goto parse_error;
- default: goto parse_error;
- }
- }
- case '3': {
- switch (op[11]) {
- case 's':
- if (strcmp(op, "i64.load32_s") == 0) return makeLoad(s, i64, /*isAtomic=*/false);
- goto parse_error;
- case 'u':
- if (strcmp(op, "i64.load32_u") == 0) return makeLoad(s, i64, /*isAtomic=*/false);
- goto parse_error;
- default: goto parse_error;
- }
- }
- case '8': {
- switch (op[10]) {
+ case '_': {
+ switch (op[19]) {
case 's':
- if (strcmp(op, "i64.load8_s") == 0) return makeLoad(s, i64, /*isAtomic=*/false);
+ if (strcmp(op, "i8x16.add_saturate_s") == 0) return makeBinary(s, BinaryOp::AddSatSVecI8x16);
goto parse_error;
case 'u':
- if (strcmp(op, "i64.load8_u") == 0) return makeLoad(s, i64, /*isAtomic=*/false);
+ if (strcmp(op, "i8x16.add_saturate_u") == 0) return makeBinary(s, BinaryOp::AddSatUVecI8x16);
goto parse_error;
default: goto parse_error;
}
@@ -1199,13 +2007,27 @@ switch (op[0]) {
default: goto parse_error;
}
}
- case 't': {
- switch (op[7]) {
+ case 'l':
+ if (strcmp(op, "i8x16.all_true") == 0) return makeUnary(s, UnaryOp::AllTrueVecI8x16);
+ goto parse_error;
+ case 'n':
+ if (strcmp(op, "i8x16.any_true") == 0) return makeUnary(s, UnaryOp::AnyTrueVecI8x16);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 'e': {
+ switch (op[7]) {
+ case 'q':
+ if (strcmp(op, "i8x16.eq") == 0) return makeBinary(s, BinaryOp::EqVecI8x16);
+ goto parse_error;
+ case 'x': {
+ switch (op[19]) {
case 's':
- if (strcmp(op, "i64.lt_s") == 0) return makeBinary(s, BinaryOp::LtSInt64);
+ if (strcmp(op, "i8x16.extract_lane_s") == 0) return makeSIMDExtract(s, SIMDExtractOp::ExtractLaneSVecI8x16, 16);
goto parse_error;
case 'u':
- if (strcmp(op, "i64.lt_u") == 0) return makeBinary(s, BinaryOp::LtUInt64);
+ if (strcmp(op, "i8x16.extract_lane_u") == 0) return makeSIMDExtract(s, SIMDExtractOp::ExtractLaneUVecI8x16, 16);
goto parse_error;
default: goto parse_error;
}
@@ -1213,46 +2035,26 @@ switch (op[0]) {
default: goto parse_error;
}
}
- case 'm':
- if (strcmp(op, "i64.mul") == 0) return makeBinary(s, BinaryOp::MulInt64);
- goto parse_error;
- case 'n':
- if (strcmp(op, "i64.ne") == 0) return makeBinary(s, BinaryOp::NeInt64);
- goto parse_error;
- case 'o':
- if (strcmp(op, "i64.or") == 0) return makeBinary(s, BinaryOp::OrInt64);
- goto parse_error;
- case 'p':
- if (strcmp(op, "i64.popcnt") == 0) return makeUnary(s, UnaryOp::PopcntInt64);
- goto parse_error;
- case 'r': {
- switch (op[5]) {
+ case 'g': {
+ switch (op[7]) {
case 'e': {
- switch (op[6]) {
- case 'i':
- if (strcmp(op, "i64.reinterpret/f64") == 0) return makeUnary(s, UnaryOp::ReinterpretFloat64);
+ switch (op[9]) {
+ case 's':
+ if (strcmp(op, "i8x16.ge_s") == 0) return makeBinary(s, BinaryOp::GeSVecI8x16);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "i8x16.ge_u") == 0) return makeBinary(s, BinaryOp::GeUVecI8x16);
goto parse_error;
- case 'm': {
- switch (op[8]) {
- case 's':
- if (strcmp(op, "i64.rem_s") == 0) return makeBinary(s, BinaryOp::RemSInt64);
- goto parse_error;
- case 'u':
- if (strcmp(op, "i64.rem_u") == 0) return makeBinary(s, BinaryOp::RemUInt64);
- goto parse_error;
- default: goto parse_error;
- }
- }
default: goto parse_error;
}
}
- case 'o': {
- switch (op[7]) {
- case 'l':
- if (strcmp(op, "i64.rotl") == 0) return makeBinary(s, BinaryOp::RotLInt64);
+ case 't': {
+ switch (op[9]) {
+ case 's':
+ if (strcmp(op, "i8x16.gt_s") == 0) return makeBinary(s, BinaryOp::GtSVecI8x16);
goto parse_error;
- case 'r':
- if (strcmp(op, "i64.rotr") == 0) return makeBinary(s, BinaryOp::RotRInt64);
+ case 'u':
+ if (strcmp(op, "i8x16.gt_u") == 0) return makeBinary(s, BinaryOp::GtUVecI8x16);
goto parse_error;
default: goto parse_error;
}
@@ -1260,72 +2062,64 @@ switch (op[0]) {
default: goto parse_error;
}
}
- case 's': {
- switch (op[5]) {
- case 'h': {
- switch (op[6]) {
- case 'l':
- if (strcmp(op, "i64.shl") == 0) return makeBinary(s, BinaryOp::ShlInt64);
+ case 'l': {
+ switch (op[7]) {
+ case 'e': {
+ switch (op[9]) {
+ case 's':
+ if (strcmp(op, "i8x16.le_s") == 0) return makeBinary(s, BinaryOp::LeSVecI8x16);
+ goto parse_error;
+ case 'u':
+ if (strcmp(op, "i8x16.le_u") == 0) return makeBinary(s, BinaryOp::LeUVecI8x16);
goto parse_error;
- case 'r': {
- switch (op[8]) {
- case 's':
- if (strcmp(op, "i64.shr_s") == 0) return makeBinary(s, BinaryOp::ShrSInt64);
- goto parse_error;
- case 'u':
- if (strcmp(op, "i64.shr_u") == 0) return makeBinary(s, BinaryOp::ShrUInt64);
- goto parse_error;
- default: goto parse_error;
- }
- }
default: goto parse_error;
}
}
case 't': {
switch (op[9]) {
- case '\0':
- if (strcmp(op, "i64.store") == 0) return makeStore(s, i64, /*isAtomic=*/false);
- goto parse_error;
- case '1':
- if (strcmp(op, "i64.store16") == 0) return makeStore(s, i64, /*isAtomic=*/false);
- goto parse_error;
- case '3':
- if (strcmp(op, "i64.store32") == 0) return makeStore(s, i64, /*isAtomic=*/false);
+ case 's':
+ if (strcmp(op, "i8x16.lt_s") == 0) return makeBinary(s, BinaryOp::LtSVecI8x16);
goto parse_error;
- case '8':
- if (strcmp(op, "i64.store8") == 0) return makeStore(s, i64, /*isAtomic=*/false);
+ case 'u':
+ if (strcmp(op, "i8x16.lt_u") == 0) return makeBinary(s, BinaryOp::LtUVecI8x16);
goto parse_error;
default: goto parse_error;
}
}
- case 'u':
- if (strcmp(op, "i64.sub") == 0) return makeBinary(s, BinaryOp::SubInt64);
+ default: goto parse_error;
+ }
+ }
+ case 'm':
+ if (strcmp(op, "i8x16.mul") == 0) return makeBinary(s, BinaryOp::MulVecI8x16);
+ goto parse_error;
+ case 'n': {
+ switch (op[8]) {
+ case '\0':
+ if (strcmp(op, "i8x16.ne") == 0) return makeBinary(s, BinaryOp::NeVecI8x16);
+ goto parse_error;
+ case 'g':
+ if (strcmp(op, "i8x16.neg") == 0) return makeUnary(s, UnaryOp::NegVecI8x16);
goto parse_error;
default: goto parse_error;
}
}
- case 't': {
- switch (op[10]) {
- case 's': {
- switch (op[11]) {
- case '/': {
- switch (op[13]) {
- case '3':
- if (strcmp(op, "i64.trunc_s/f32") == 0) return makeUnary(s, UnaryOp::TruncSFloat32ToInt64);
- goto parse_error;
- case '6':
- if (strcmp(op, "i64.trunc_s/f64") == 0) return makeUnary(s, UnaryOp::TruncSFloat64ToInt64);
- goto parse_error;
- default: goto parse_error;
- }
- }
- case ':': {
- switch (op[17]) {
- case '3':
- if (strcmp(op, "i64.trunc_s:sat/f32") == 0) return makeUnary(s, UnaryOp::TruncSatSFloat32ToInt64);
+ case 'r':
+ if (strcmp(op, "i8x16.replace_lane") == 0) return makeSIMDReplace(s, SIMDReplaceOp::ReplaceLaneVecI8x16, 16);
+ goto parse_error;
+ case 's': {
+ switch (op[7]) {
+ case 'h': {
+ switch (op[8]) {
+ case 'l':
+ if (strcmp(op, "i8x16.shl") == 0) return makeSIMDShift(s, SIMDShiftOp::ShlVecI8x16);
+ goto parse_error;
+ case 'r': {
+ switch (op[10]) {
+ case 's':
+ if (strcmp(op, "i8x16.shr_s") == 0) return makeSIMDShift(s, SIMDShiftOp::ShrSVecI8x16);
goto parse_error;
- case '6':
- if (strcmp(op, "i64.trunc_s:sat/f64") == 0) return makeUnary(s, UnaryOp::TruncSatSFloat64ToInt64);
+ case 'u':
+ if (strcmp(op, "i8x16.shr_u") == 0) return makeSIMDShift(s, SIMDShiftOp::ShrUVecI8x16);
goto parse_error;
default: goto parse_error;
}
@@ -1333,26 +2127,21 @@ switch (op[0]) {
default: goto parse_error;
}
}
+ case 'p':
+ if (strcmp(op, "i8x16.splat") == 0) return makeUnary(s, UnaryOp::SplatVecI8x16);
+ goto parse_error;
case 'u': {
- switch (op[11]) {
- case '/': {
- switch (op[13]) {
- case '3':
- if (strcmp(op, "i64.trunc_u/f32") == 0) return makeUnary(s, UnaryOp::TruncUFloat32ToInt64);
- goto parse_error;
- case '6':
- if (strcmp(op, "i64.trunc_u/f64") == 0) return makeUnary(s, UnaryOp::TruncUFloat64ToInt64);
- goto parse_error;
- default: goto parse_error;
- }
- }
- case ':': {
- switch (op[17]) {
- case '3':
- if (strcmp(op, "i64.trunc_u:sat/f32") == 0) return makeUnary(s, UnaryOp::TruncSatUFloat32ToInt64);
+ switch (op[9]) {
+ case '\0':
+ if (strcmp(op, "i8x16.sub") == 0) return makeBinary(s, BinaryOp::SubVecI8x16);
+ goto parse_error;
+ case '_': {
+ switch (op[19]) {
+ case 's':
+ if (strcmp(op, "i8x16.sub_saturate_s") == 0) return makeBinary(s, BinaryOp::SubSatSVecI8x16);
goto parse_error;
- case '6':
- if (strcmp(op, "i64.trunc_u:sat/f64") == 0) return makeUnary(s, UnaryOp::TruncSatUFloat64ToInt64);
+ case 'u':
+ if (strcmp(op, "i8x16.sub_saturate_u") == 0) return makeBinary(s, BinaryOp::SubSatUVecI8x16);
goto parse_error;
default: goto parse_error;
}
@@ -1363,12 +2152,6 @@ switch (op[0]) {
default: goto parse_error;
}
}
- case 'w':
- if (strcmp(op, "i64.wait") == 0) return makeAtomicWait(s, i64);
- goto parse_error;
- case 'x':
- if (strcmp(op, "i64.xor") == 0) return makeBinary(s, BinaryOp::XorInt64);
- goto parse_error;
default: goto parse_error;
}
}
@@ -1420,6 +2203,43 @@ switch (op[0]) {
case 'u':
if (strcmp(op, "unreachable") == 0) return makeUnreachable();
goto parse_error;
+ case 'v': {
+ switch (op[1]) {
+ case '1': {
+ switch (op[5]) {
+ case 'a':
+ if (strcmp(op, "v128.and") == 0) return makeBinary(s, BinaryOp::AndVec128);
+ goto parse_error;
+ case 'b':
+ if (strcmp(op, "v128.bitselect") == 0) return makeSIMDBitselect(s);
+ goto parse_error;
+ case 'c':
+ if (strcmp(op, "v128.const") == 0) return makeConst(s, v128);
+ goto parse_error;
+ case 'l':
+ if (strcmp(op, "v128.load") == 0) return makeLoad(s, v128, /*isAtomic=*/false);
+ goto parse_error;
+ case 'n':
+ if (strcmp(op, "v128.not") == 0) return makeUnary(s, UnaryOp::NotVec128);
+ goto parse_error;
+ case 'o':
+ if (strcmp(op, "v128.or") == 0) return makeBinary(s, BinaryOp::OrVec128);
+ goto parse_error;
+ case 's':
+ if (strcmp(op, "v128.store") == 0) return makeStore(s, v128, /*isAtomic=*/false);
+ goto parse_error;
+ case 'x':
+ if (strcmp(op, "v128.xor") == 0) return makeBinary(s, BinaryOp::XorVec128);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case '8':
+ if (strcmp(op, "v8x16.shuffle") == 0) return makeSIMDShuffle(s);
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
case 'w':
if (strcmp(op, "wake") == 0) return makeAtomicWake(s);
goto parse_error;
diff --git a/src/ir/ExpressionAnalyzer.cpp b/src/ir/ExpressionAnalyzer.cpp
index 7788f7cde..7248691a9 100644
--- a/src/ir/ExpressionAnalyzer.cpp
+++ b/src/ir/ExpressionAnalyzer.cpp
@@ -248,6 +248,37 @@ bool ExpressionAnalyzer::flexibleEqual(Expression* left, Expression* right, Expr
PUSH(AtomicWake, wakeCount);
break;
}
+ case Expression::Id::SIMDExtractId: {
+ CHECK(SIMDExtract, op);
+ CHECK(SIMDExtract, idx);
+ PUSH(SIMDExtract, vec);
+ break;
+ }
+ case Expression::Id::SIMDReplaceId: {
+ CHECK(SIMDReplace, op);
+ CHECK(SIMDReplace, idx);
+ PUSH(SIMDReplace, vec);
+ PUSH(SIMDReplace, value);
+ break;
+ }
+ case Expression::Id::SIMDShuffleId: {
+ CHECK(SIMDShuffle, mask);
+ PUSH(SIMDShuffle, left);
+ PUSH(SIMDShuffle, right);
+ break;
+ }
+ case Expression::Id::SIMDBitselectId: {
+ PUSH(SIMDBitselect, left);
+ PUSH(SIMDBitselect, right);
+ PUSH(SIMDBitselect, cond);
+ break;
+ }
+ case Expression::Id::SIMDShiftId: {
+ CHECK(SIMDShift, op);
+ PUSH(SIMDShift, vec);
+ PUSH(SIMDShift, shift);
+ break;
+ }
case Expression::Id::ConstId: {
if (left->cast<Const>()->value != right->cast<Const>()->value) {
return false;
@@ -496,15 +527,43 @@ HashType ExpressionAnalyzer::hash(Expression* curr) {
PUSH(AtomicWake, wakeCount);
break;
}
+ case Expression::Id::SIMDExtractId: {
+ HASH(SIMDExtract, op);
+ HASH(SIMDExtract, idx);
+ PUSH(SIMDExtract, vec);
+ break;
+ }
+ case Expression::Id::SIMDReplaceId: {
+ HASH(SIMDReplace, op);
+ HASH(SIMDReplace, idx);
+ PUSH(SIMDReplace, vec);
+ PUSH(SIMDReplace, value);
+ break;
+ }
+ case Expression::Id::SIMDShuffleId: {
+ for (size_t i = 0; i < 16; ++i) {
+ HASH(SIMDShuffle, mask[i]);
+ }
+ PUSH(SIMDShuffle, left);
+ PUSH(SIMDShuffle, right);
+ break;
+ }
+ case Expression::Id::SIMDBitselectId: {
+ PUSH(SIMDBitselect, left);
+ PUSH(SIMDBitselect, right);
+ PUSH(SIMDBitselect, cond);
+ break;
+ }
+ case Expression::Id::SIMDShiftId: {
+ HASH(SIMDShift, op);
+ PUSH(SIMDShift, vec);
+ PUSH(SIMDShift, shift);
+ break;
+ }
case Expression::Id::ConstId: {
auto* c = curr->cast<Const>();
hash(c->type);
- auto bits = c->value.getBits();
- if (getTypeSize(c->type) == 4) {
- hash(HashType(bits));
- } else {
- hash64(bits);
- }
+ hash(std::hash<Literal>()(c->value));
break;
}
case Expression::Id::UnaryId: {
diff --git a/src/ir/ReFinalize.cpp b/src/ir/ReFinalize.cpp
index 31140837f..68526678a 100644
--- a/src/ir/ReFinalize.cpp
+++ b/src/ir/ReFinalize.cpp
@@ -137,6 +137,11 @@ void ReFinalize::visitAtomicRMW(AtomicRMW* curr) { curr->finalize(); }
void ReFinalize::visitAtomicCmpxchg(AtomicCmpxchg* curr) { curr->finalize(); }
void ReFinalize::visitAtomicWait(AtomicWait* curr) { curr->finalize(); }
void ReFinalize::visitAtomicWake(AtomicWake* curr) { curr->finalize(); }
+void ReFinalize::visitSIMDExtract(SIMDExtract* curr) { curr->finalize(); }
+void ReFinalize::visitSIMDReplace(SIMDReplace* curr) { curr->finalize(); }
+void ReFinalize::visitSIMDShuffle(SIMDShuffle* curr) { curr->finalize(); }
+void ReFinalize::visitSIMDBitselect(SIMDBitselect* curr) { curr->finalize(); }
+void ReFinalize::visitSIMDShift(SIMDShift* curr) { curr->finalize(); }
void ReFinalize::visitConst(Const* curr) { curr->finalize(); }
void ReFinalize::visitUnary(Unary* curr) { curr->finalize(); }
void ReFinalize::visitBinary(Binary* curr) { curr->finalize(); }
@@ -195,4 +200,3 @@ void ReFinalize::replaceUntaken(Expression* value, Expression* condition) {
}
} // namespace wasm
-
diff --git a/src/ir/cost.h b/src/ir/cost.h
index e28f535e7..354f663e1 100644
--- a/src/ir/cost.h
+++ b/src/ir/cost.h
@@ -152,6 +152,39 @@ struct CostAnalyzer : public Visitor<CostAnalyzer, Index> {
case TruncSatUFloat64ToInt64: ret = 1; break;
case SqrtFloat32:
case SqrtFloat64: ret = 2; break;
+ case SplatVecI8x16:
+ case SplatVecI16x8:
+ case SplatVecI32x4:
+ case SplatVecI64x2:
+ case SplatVecF32x4:
+ case SplatVecF64x2:
+ case NotVec128:
+ case NegVecI8x16:
+ case AnyTrueVecI8x16:
+ case AllTrueVecI8x16:
+ case NegVecI16x8:
+ case AnyTrueVecI16x8:
+ case AllTrueVecI16x8:
+ case NegVecI32x4:
+ case AnyTrueVecI32x4:
+ case AllTrueVecI32x4:
+ case NegVecI64x2:
+ case AnyTrueVecI64x2:
+ case AllTrueVecI64x2:
+ case AbsVecF32x4:
+ case NegVecF32x4:
+ case SqrtVecF32x4:
+ case AbsVecF64x2:
+ case NegVecF64x2:
+ case SqrtVecF64x2:
+ case TruncSatSVecF32x4ToVecI32x4:
+ case TruncSatUVecF32x4ToVecI32x4:
+ case TruncSatSVecF64x2ToVecI64x2:
+ case TruncSatUVecF64x2ToVecI64x2:
+ case ConvertSVecI32x4ToVecF32x4:
+ case ConvertUVecI32x4ToVecF32x4:
+ case ConvertSVecI64x2ToVecF64x2:
+ case ConvertUVecI64x2ToVecF64x2: assert(false && "v128 not implemented yet");
case InvalidUnary: WASM_UNREACHABLE();
}
return ret + visit(curr->value);
@@ -235,6 +268,82 @@ struct CostAnalyzer : public Visitor<CostAnalyzer, Index> {
case NeFloat32: ret = 1; break;
case EqFloat64: ret = 1; break;
case NeFloat64: ret = 1; break;
+ case EqVecI8x16:
+ case NeVecI8x16:
+ case LtSVecI8x16:
+ case LtUVecI8x16:
+ case LeSVecI8x16:
+ case LeUVecI8x16:
+ case GtSVecI8x16:
+ case GtUVecI8x16:
+ case GeSVecI8x16:
+ case GeUVecI8x16:
+ case EqVecI16x8:
+ case NeVecI16x8:
+ case LtSVecI16x8:
+ case LtUVecI16x8:
+ case LeSVecI16x8:
+ case LeUVecI16x8:
+ case GtSVecI16x8:
+ case GtUVecI16x8:
+ case GeSVecI16x8:
+ case GeUVecI16x8:
+ case EqVecI32x4:
+ case NeVecI32x4:
+ case LtSVecI32x4:
+ case LtUVecI32x4:
+ case LeSVecI32x4:
+ case LeUVecI32x4:
+ case GtSVecI32x4:
+ case GtUVecI32x4:
+ case GeSVecI32x4:
+ case GeUVecI32x4:
+ case EqVecF32x4:
+ case NeVecF32x4:
+ case LtVecF32x4:
+ case LeVecF32x4:
+ case GtVecF32x4:
+ case GeVecF32x4:
+ case EqVecF64x2:
+ case NeVecF64x2:
+ case LtVecF64x2:
+ case LeVecF64x2:
+ case GtVecF64x2:
+ case GeVecF64x2:
+ case AndVec128:
+ case OrVec128:
+ case XorVec128:
+ case AddVecI8x16:
+ case AddSatSVecI8x16:
+ case AddSatUVecI8x16:
+ case SubVecI8x16:
+ case SubSatSVecI8x16:
+ case SubSatUVecI8x16:
+ case MulVecI8x16:
+ case AddVecI16x8:
+ case AddSatSVecI16x8:
+ case AddSatUVecI16x8:
+ case SubVecI16x8:
+ case SubSatSVecI16x8:
+ case SubSatUVecI16x8:
+ case MulVecI16x8:
+ case AddVecI32x4:
+ case SubVecI32x4:
+ case MulVecI32x4:
+ case AddVecI64x2:
+ case SubVecI64x2:
+ case AddVecF32x4:
+ case SubVecF32x4:
+ case MulVecF32x4:
+ case DivVecF32x4:
+ case MinVecF32x4:
+ case MaxVecF32x4:
+ case AddVecF64x2:
+ case SubVecF64x2:
+ case MulVecF64x2:
+ case DivVecF64x2:
+ case MinVecF64x2:
+ case MaxVecF64x2: assert(false && "v128 not implemented yet");
case InvalidBinary: WASM_UNREACHABLE();
}
return ret + visit(curr->left) + visit(curr->right);
diff --git a/src/ir/literal-utils.h b/src/ir/literal-utils.h
index e00f05c52..543c34e9f 100644
--- a/src/ir/literal-utils.h
+++ b/src/ir/literal-utils.h
@@ -23,26 +23,9 @@ namespace wasm {
namespace LiteralUtils {
-inline Literal makeLiteralFromInt32(int32_t x, Type type) {
- switch (type) {
- case i32: return Literal(int32_t(x)); break;
- case i64: return Literal(int64_t(x)); break;
- case f32: return Literal(float(x)); break;
- case f64: return Literal(double(x)); break;
- case v128: assert(false && "v128 not implemented yet");
- case none:
- case unreachable: WASM_UNREACHABLE();
- }
- WASM_UNREACHABLE();
-}
-
-inline Literal makeLiteralZero(Type type) {
- return makeLiteralFromInt32(0, type);
-}
-
inline Expression* makeFromInt32(int32_t x, Type type, Module& wasm) {
auto* ret = wasm.allocator.alloc<Const>();
- ret->value = makeLiteralFromInt32(x, type);
+ ret->value = Literal::makeFromInt32(x, type);
ret->type = type;
return ret;
}
diff --git a/src/ir/utils.h b/src/ir/utils.h
index a4082b6bc..afb63b01c 100644
--- a/src/ir/utils.h
+++ b/src/ir/utils.h
@@ -129,6 +129,11 @@ struct ReFinalize : public WalkerPass<PostWalker<ReFinalize, OverriddenVisitor<R
void visitAtomicCmpxchg(AtomicCmpxchg* curr);
void visitAtomicWait(AtomicWait* curr);
void visitAtomicWake(AtomicWake* curr);
+ void visitSIMDExtract(SIMDExtract* curr);
+ void visitSIMDReplace(SIMDReplace* curr);
+ void visitSIMDShuffle(SIMDShuffle* curr);
+ void visitSIMDBitselect(SIMDBitselect* curr);
+ void visitSIMDShift(SIMDShift* curr);
void visitConst(Const* curr);
void visitUnary(Unary* curr);
void visitBinary(Binary* curr);
@@ -176,6 +181,11 @@ struct ReFinalizeNode : public OverriddenVisitor<ReFinalizeNode> {
void visitAtomicCmpxchg(AtomicCmpxchg* curr) { curr->finalize(); }
void visitAtomicWait(AtomicWait* curr) { curr->finalize(); }
void visitAtomicWake(AtomicWake* curr) { curr->finalize(); }
+ void visitSIMDExtract(SIMDExtract* curr) { curr->finalize(); }
+ void visitSIMDReplace(SIMDReplace* curr) { curr->finalize(); }
+ void visitSIMDShuffle(SIMDShuffle* curr) { curr->finalize(); }
+ void visitSIMDBitselect(SIMDBitselect* curr) { curr->finalize(); }
+ void visitSIMDShift(SIMDShift* curr) { curr->finalize(); }
void visitConst(Const* curr) { curr->finalize(); }
void visitUnary(Unary* curr) { curr->finalize(); }
void visitBinary(Binary* curr) { curr->finalize(); }
diff --git a/src/js/binaryen.js-post.js b/src/js/binaryen.js-post.js
index b63427935..11f721d54 100644
--- a/src/js/binaryen.js-post.js
+++ b/src/js/binaryen.js-post.js
@@ -22,6 +22,14 @@ function i32sToStack(i32s) {
return ret;
}
+function i8sToStack(i8s) {
+ var ret = stackAlloc(i8s.length);
+ for (var i = 0; i < i8s.length; i++) {
+ HEAP8[ret + i] = i8s[i];
+ }
+ return ret;
+}
+
// Types
Module['none'] = Module['_BinaryenTypeNone']();
Module['i32'] = Module['_BinaryenTypeInt32']();
@@ -60,6 +68,11 @@ Module['AtomicCmpxchgId'] = Module['_BinaryenAtomicCmpxchgId']();
Module['AtomicRMWId'] = Module['_BinaryenAtomicRMWId']();
Module['AtomicWaitId'] = Module['_BinaryenAtomicWaitId']();
Module['AtomicWakeId'] = Module['_BinaryenAtomicWakeId']();
+Module['SIMDExtractId'] = Module['_BinaryenSIMDExtractId']();
+Module['SIMDReplaceId'] = Module['_BinaryenSIMDReplaceId']();
+Module['SIMDShuffleId'] = Module['_BinaryenSIMDShuffleId']();
+Module['SIMDBitselectId'] = Module['_BinaryenSIMDBitselectId']();
+Module['SIMDShiftId'] = Module['_BinaryenSIMDShiftId']();
// External kinds
Module['ExternalFunction'] = Module['_BinaryenExternalFunction']();
@@ -212,6 +225,141 @@ Module['AtomicRMWAnd'] = Module['_BinaryenAtomicRMWAnd']();
Module['AtomicRMWOr'] = Module['_BinaryenAtomicRMWOr']();
Module['AtomicRMWXor'] = Module['_BinaryenAtomicRMWXor']();
Module['AtomicRMWXchg'] = Module['_BinaryenAtomicRMWXchg']();
+Module['SplatVecI8x16'] = Module['_BinaryenSplatVecI8x16']();
+Module['ExtractLaneSVecI8x16'] = Module['_BinaryenExtractLaneSVecI8x16']();
+Module['ExtractLaneUVecI8x16'] = Module['_BinaryenExtractLaneUVecI8x16']();
+Module['ReplaceLaneVecI8x16'] = Module['_BinaryenReplaceLaneVecI8x16']();
+Module['SplatVecI16x8'] = Module['_BinaryenSplatVecI16x8']();
+Module['ExtractLaneSVecI16x8'] = Module['_BinaryenExtractLaneSVecI16x8']();
+Module['ExtractLaneUVecI16x8'] = Module['_BinaryenExtractLaneUVecI16x8']();
+Module['ReplaceLaneVecI16x8'] = Module['_BinaryenReplaceLaneVecI16x8']();
+Module['SplatVecI32x4'] = Module['_BinaryenSplatVecI32x4']();
+Module['ExtractLaneVecI32x4'] = Module['_BinaryenExtractLaneVecI32x4']();
+Module['ReplaceLaneVecI32x4'] = Module['_BinaryenReplaceLaneVecI32x4']();
+Module['SplatVecI64x2'] = Module['_BinaryenSplatVecI64x2']();
+Module['ExtractLaneVecI64x2'] = Module['_BinaryenExtractLaneVecI64x2']();
+Module['ReplaceLaneVecI64x2'] = Module['_BinaryenReplaceLaneVecI64x2']();
+Module['SplatVecF32x4'] = Module['_BinaryenSplatVecF32x4']();
+Module['ExtractLaneVecF32x4'] = Module['_BinaryenExtractLaneVecF32x4']();
+Module['ReplaceLaneVecF32x4'] = Module['_BinaryenReplaceLaneVecF32x4']();
+Module['SplatVecF64x2'] = Module['_BinaryenSplatVecF64x2']();
+Module['ExtractLaneVecF64x2'] = Module['_BinaryenExtractLaneVecF64x2']();
+Module['ReplaceLaneVecF64x2'] = Module['_BinaryenReplaceLaneVecF64x2']();
+Module['EqVecI8x16'] = Module['_BinaryenEqVecI8x16']();
+Module['NeVecI8x16'] = Module['_BinaryenNeVecI8x16']();
+Module['LtSVecI8x16'] = Module['_BinaryenLtSVecI8x16']();
+Module['LtUVecI8x16'] = Module['_BinaryenLtUVecI8x16']();
+Module['GtSVecI8x16'] = Module['_BinaryenGtSVecI8x16']();
+Module['GtUVecI8x16'] = Module['_BinaryenGtUVecI8x16']();
+Module['LeSVecI8x16'] = Module['_BinaryenLeSVecI8x16']();
+Module['LeUVecI8x16'] = Module['_BinaryenLeUVecI8x16']();
+Module['GeSVecI8x16'] = Module['_BinaryenGeSVecI8x16']();
+Module['GeUVecI8x16'] = Module['_BinaryenGeUVecI8x16']();
+Module['EqVecI16x8'] = Module['_BinaryenEqVecI16x8']();
+Module['NeVecI16x8'] = Module['_BinaryenNeVecI16x8']();
+Module['LtSVecI16x8'] = Module['_BinaryenLtSVecI16x8']();
+Module['LtUVecI16x8'] = Module['_BinaryenLtUVecI16x8']();
+Module['GtSVecI16x8'] = Module['_BinaryenGtSVecI16x8']();
+Module['GtUVecI16x8'] = Module['_BinaryenGtUVecI16x8']();
+Module['LeSVecI16x8'] = Module['_BinaryenLeSVecI16x8']();
+Module['LeUVecI16x8'] = Module['_BinaryenLeUVecI16x8']();
+Module['GeSVecI16x8'] = Module['_BinaryenGeSVecI16x8']();
+Module['GeUVecI16x8'] = Module['_BinaryenGeUVecI16x8']();
+Module['EqVecI32x4'] = Module['_BinaryenEqVecI32x4']();
+Module['NeVecI32x4'] = Module['_BinaryenNeVecI32x4']();
+Module['LtSVecI32x4'] = Module['_BinaryenLtSVecI32x4']();
+Module['LtUVecI32x4'] = Module['_BinaryenLtUVecI32x4']();
+Module['GtSVecI32x4'] = Module['_BinaryenGtSVecI32x4']();
+Module['GtUVecI32x4'] = Module['_BinaryenGtUVecI32x4']();
+Module['LeSVecI32x4'] = Module['_BinaryenLeSVecI32x4']();
+Module['LeUVecI32x4'] = Module['_BinaryenLeUVecI32x4']();
+Module['GeSVecI32x4'] = Module['_BinaryenGeSVecI32x4']();
+Module['GeUVecI32x4'] = Module['_BinaryenGeUVecI32x4']();
+Module['EqVecF32x4'] = Module['_BinaryenEqVecF32x4']();
+Module['NeVecF32x4'] = Module['_BinaryenNeVecF32x4']();
+Module['LtVecF32x4'] = Module['_BinaryenLtVecF32x4']();
+Module['GtVecF32x4'] = Module['_BinaryenGtVecF32x4']();
+Module['LeVecF32x4'] = Module['_BinaryenLeVecF32x4']();
+Module['GeVecF32x4'] = Module['_BinaryenGeVecF32x4']();
+Module['EqVecF64x2'] = Module['_BinaryenGeVecF32x4']();
+Module['NeVecF64x2'] = Module['_BinaryenNeVecF64x2']();
+Module['LtVecF64x2'] = Module['_BinaryenLtVecF64x2']();
+Module['GtVecF64x2'] = Module['_BinaryenGtVecF64x2']();
+Module['LeVecF64x2'] = Module['_BinaryenLeVecF64x2']();
+Module['GeVecF64x2'] = Module['_BinaryenGeVecF64x2']();
+Module['NotVec128'] = Module['_BinaryenNotVec128']();
+Module['AndVec128'] = Module['_BinaryenAndVec128']();
+Module['OrVec128'] = Module['_BinaryenOrVec128']();
+Module['XorVec128'] = Module['_BinaryenXorVec128']();
+Module['NegVecI8x16'] = Module['_BinaryenNegVecI8x16']();
+Module['AnyTrueVecI8x16'] = Module['_BinaryenAnyTrueVecI8x16']();
+Module['AllTrueVecI8x16'] = Module['_BinaryenAllTrueVecI8x16']();
+Module['ShlVecI8x16'] = Module['_BinaryenShlVecI8x16']();
+Module['ShrSVecI8x16'] = Module['_BinaryenShrSVecI8x16']();
+Module['ShrUVecI8x16'] = Module['_BinaryenShrUVecI8x16']();
+Module['AddVecI8x16'] = Module['_BinaryenAddVecI8x16']();
+Module['AddSatSVecI8x16'] = Module['_BinaryenAddSatSVecI8x16']();
+Module['AddSatUVecI8x16'] = Module['_BinaryenAddSatUVecI8x16']();
+Module['SubVecI8x16'] = Module['_BinaryenSubVecI8x16']();
+Module['SubSatSVecI8x16'] = Module['_BinaryenSubSatSVecI8x16']();
+Module['SubSatUVecI8x16'] = Module['_BinaryenSubSatUVecI8x16']();
+Module['MulVecI8x16'] = Module['_BinaryenMulVecI8x16']();
+Module['NegVecI16x8'] = Module['_BinaryenNegVecI16x8']();
+Module['AnyTrueVecI16x8'] = Module['_BinaryenAnyTrueVecI16x8']();
+Module['AllTrueVecI16x8'] = Module['_BinaryenAllTrueVecI16x8']();
+Module['ShlVecI16x8'] = Module['_BinaryenShlVecI16x8']();
+Module['ShrSVecI16x8'] = Module['_BinaryenShrSVecI16x8']();
+Module['ShrUVecI16x8'] = Module['_BinaryenShrUVecI16x8']();
+Module['AddVecI16x8'] = Module['_BinaryenAddVecI16x8']();
+Module['AddSatSVecI16x8'] = Module['_BinaryenAddSatSVecI16x8']();
+Module['AddSatUVecI16x8'] = Module['_BinaryenAddSatUVecI16x8']();
+Module['SubVecI16x8'] = Module['_BinaryenSubVecI16x8']();
+Module['SubSatSVecI16x8'] = Module['_BinaryenSubSatSVecI16x8']();
+Module['SubSatUVecI16x8'] = Module['_BinaryenSubSatUVecI16x8']();
+Module['MulVecI16x8'] = Module['_BinaryenMulVecI16x8']();
+Module['NegVecI32x4'] = Module['_BinaryenNegVecI32x4']();
+Module['AnyTrueVecI32x4'] = Module['_BinaryenAnyTrueVecI32x4']();
+Module['AllTrueVecI32x4'] = Module['_BinaryenAllTrueVecI32x4']();
+Module['ShlVecI32x4'] = Module['_BinaryenShlVecI32x4']();
+Module['ShrSVecI32x4'] = Module['_BinaryenShrSVecI32x4']();
+Module['ShrUVecI32x4'] = Module['_BinaryenShrUVecI32x4']();
+Module['AddVecI32x4'] = Module['_BinaryenAddVecI32x4']();
+Module['SubVecI32x4'] = Module['_BinaryenSubVecI32x4']();
+Module['MulVecI32x4'] = Module['_BinaryenMulVecI32x4']();
+Module['NegVecI64x2'] = Module['_BinaryenNegVecI64x2']();
+Module['AnyTrueVecI64x2'] = Module['_BinaryenAnyTrueVecI64x2']();
+Module['AllTrueVecI64x2'] = Module['_BinaryenAllTrueVecI64x2']();
+Module['ShlVecI64x2'] = Module['_BinaryenShlVecI64x2']();
+Module['ShrSVecI64x2'] = Module['_BinaryenShrSVecI64x2']();
+Module['ShrUVecI64x2'] = Module['_BinaryenShrUVecI64x2']();
+Module['AddVecI64x2'] = Module['_BinaryenAddVecI64x2']();
+Module['SubVecI64x2'] = Module['_BinaryenSubVecI64x2']();
+Module['AbsVecF32x4'] = Module['_BinaryenAbsVecF32x4']();
+Module['NegVecF32x4'] = Module['_BinaryenNegVecF32x4']();
+Module['SqrtVecF32x4'] = Module['_BinaryenSqrtVecF32x4']();
+Module['AddVecF32x4'] = Module['_BinaryenAddVecF32x4']();
+Module['SubVecF32x4'] = Module['_BinaryenSubVecF32x4']();
+Module['MulVecF32x4'] = Module['_BinaryenMulVecF32x4']();
+Module['DivVecF32x4'] = Module['_BinaryenDivVecF32x4']();
+Module['MinVecF32x4'] = Module['_BinaryenMinVecF32x4']();
+Module['MaxVecF32x4'] = Module['_BinaryenMaxVecF32x4']();
+Module['AbsVecF64x2'] = Module['_BinaryenAbsVecF64x2']();
+Module['NegVecF64x2'] = Module['_BinaryenNegVecF64x2']();
+Module['SqrtVecF64x2'] = Module['_BinaryenSqrtVecF64x2']();
+Module['AddVecF64x2'] = Module['_BinaryenAddVecF64x2']();
+Module['SubVecF64x2'] = Module['_BinaryenSubVecF64x2']();
+Module['MulVecF64x2'] = Module['_BinaryenMulVecF64x2']();
+Module['DivVecF64x2'] = Module['_BinaryenDivVecF64x2']();
+Module['MinVecF64x2'] = Module['_BinaryenMinVecF64x2']();
+Module['MaxVecF64x2'] = Module['_BinaryenMaxVecF64x2']();
+Module['TruncSatSVecF32x4ToVecI32x4'] = Module['_BinaryenTruncSatSVecF32x4ToVecI32x4']();
+Module['TruncSatUVecF32x4ToVecI32x4'] = Module['_BinaryenTruncSatUVecF32x4ToVecI32x4']();
+Module['TruncSatSVecF64x2ToVecI64x2'] = Module['_BinaryenTruncSatSVecF64x2ToVecI64x2']();
+Module['TruncSatUVecF64x2ToVecI64x2'] = Module['_BinaryenTruncSatUVecF64x2ToVecI64x2']();
+Module['ConvertSVecI32x4ToVecF32x4'] = Module['_BinaryenConvertSVecI32x4ToVecF32x4']();
+Module['ConvertUVecI32x4ToVecF32x4'] = Module['_BinaryenConvertUVecI32x4ToVecF32x4']();
+Module['ConvertSVecI64x2ToVecF64x2'] = Module['_BinaryenConvertSVecI64x2ToVecF64x2']();
+Module['ConvertUVecI64x2ToVecF64x2'] = Module['_BinaryenConvertUVecI64x2ToVecF64x2']();
// 'Module' interface
Module['Module'] = function(module) {
@@ -1055,6 +1203,455 @@ function wrapModule(module, self) {
},
};
+ self['v128'] = {
+ 'load': function(offset, align, ptr) {
+ return Module['_BinaryenLoad'](module, 16, false, offset, align, Module['v128'], ptr);
+ },
+ 'store': function(offset, align, ptr, value) {
+ return Module['_BinaryenStore'](module, 16, offset, align, ptr, value, Module['v128']);
+ },
+ 'const': function(i8s) {
+ return preserveStack(function() {
+ Module['_BinaryenLiteralVec128'](temp, i8sToStack(i8s));
+ return Module['_BinaryenConst'](module, temp);
+ });
+ },
+ 'not': function(value) {
+ return Module['_BinaryenUnary'](module, Module['NotVec128'], value);
+ },
+ 'and': function(value) {
+ return Module['_BinaryenUnary'](module, Module['AndVec128'], value);
+ },
+ 'or': function(value) {
+ return Module['_BinaryenUnary'](module, Module['OrVec128'], value);
+ },
+ 'xor': function(value) {
+ return Module['_BinaryenUnary'](module, Module['XorVec128'], value);
+ },
+ 'bitselect': function(left, right, cond) {
+ return Module['_BinaryenSIMDBitselect'](module, left, right, cond);
+ }
+ };
+
+ self['v8x16'] = {
+ 'shuffle': function(left, right, mask) {
+ return preserveStack(function() {
+ return Module['_BinaryenSIMDShuffle'](module, left, right, i8sToStack(mask));
+ });
+ },
+ };
+
+ self['i8x16'] = {
+ 'splat': function(value) {
+ return Module['_BinaryenUnary'](module, Module['SplatVecI8x16'], value);
+ },
+ 'extract_lane_s': function(vec, idx) {
+ return Module['_BinaryenSIMDExtract'](module, Module['ExtractLaneSVecI8x16'], vec, idx);
+ },
+ 'extract_lane_u': function(vec, idx) {
+ return Module['_BinaryenSIMDExtract'](module, Module['ExtractLaneUVecI8x16'], vec, idx);
+ },
+ 'replace_lane': function(vec, idx, value) {
+ return Module['_BinaryenSIMDReplace'](module, Module['ReplaceLaneVecI8x16'], vec, idx, value);
+ },
+ 'eq': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['EqVecI8x16'], left, right);
+ },
+ 'ne': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['NeVecI8x16'], left, right);
+ },
+ 'lt_s': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['LtSVecI8x16'], left, right);
+ },
+ 'lt_u': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['LtUVecI8x16'], left, right);
+ },
+ 'gt_s': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['GtSVecI8x16'], left, right);
+ },
+ 'gt_u': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['GtUVecI8x16'], left, right);
+ },
+ 'le_s': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['LeSVecI8x16'], left, right);
+ },
+ 'le_u': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['LeUVecI8x16'], left, right);
+ },
+ 'ge_s': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['GeSVecI8x16'], left, right);
+ },
+ 'ge_u': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['GeUVecI8x16'], left, right);
+ },
+ 'neg': function(value) {
+ return Module['_BinaryenUnary'](module, Module['NegVecI8x16'], value);
+ },
+ 'any_true': function(value) {
+ return Module['_BinaryenUnary'](module, Module['AnyTrueVecI8x16'], value);
+ },
+ 'all_true': function(value) {
+ return Module['_BinaryenUnary'](module, Module['AllTrueVecI8x16'], value);
+ },
+ 'shl': function(vec, shift) {
+ return Module['_BinaryenSIMDShift'](module, Module['ShlVecI8x16'], vec, shift);
+ },
+ 'shr_s': function(vec, shift) {
+ return Module['_BinaryenSIMDShift'](module, Module['ShrSVecI8x16'], vec, shift);
+ },
+ 'shr_u': function(vec, shift) {
+ return Module['_BinaryenSIMDShift'](module, Module['ShrUVecI8x16'], vec, shift);
+ },
+ 'add': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['AddVecI8x16'], left, right);
+ },
+ 'add_saturate_s': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['AddSatSVecI8x16'], left, right);
+ },
+ 'add_saturate_u': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['AddSatUVecI8x16'], left, right);
+ },
+ 'sub': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['SubVecI8x16'], left, right);
+ },
+ 'sub_saturate_s': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['SubSatSVecI8x16'], left, right);
+ },
+ 'sub_saturate_u': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['SubSatUVecI8x16'], left, right);
+ },
+ 'mul': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['MulVecI8x16'], left, right);
+ },
+ };
+
+ self['i16x8'] = {
+ 'splat': function(value) {
+ return Module['_BinaryenUnary'](module, Module['SplatVecI16x8'], value);
+ },
+ 'extract_lane_s': function(vec, idx) {
+ return Module['_BinaryenSIMDExtract'](module, Module['ExtractLaneSVecI16x8'], vec, idx);
+ },
+ 'extract_lane_u': function(vec, idx) {
+ return Module['_BinaryenSIMDExtract'](module, Module['ExtractLaneUVecI16x8'], vec, idx);
+ },
+ 'replace_lane': function(vec, idx, value) {
+ return Module['_BinaryenSIMDReplace'](module, Module['ReplaceLaneVecI16x8'], vec, idx, value);
+ },
+ 'eq': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['EqVecI16x8'], left, right);
+ },
+ 'ne': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['NeVecI16x8'], left, right);
+ },
+ 'lt_s': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['LtSVecI16x8'], left, right);
+ },
+ 'lt_u': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['LtUVecI16x8'], left, right);
+ },
+ 'gt_s': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['GtSVecI16x8'], left, right);
+ },
+ 'gt_u': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['GtUVecI16x8'], left, right);
+ },
+ 'le_s': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['LeSVecI16x8'], left, right);
+ },
+ 'le_u': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['LeUVecI16x8'], left, right);
+ },
+ 'ge_s': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['GeSVecI16x8'], left, right);
+ },
+ 'ge_u': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['GeUVecI16x8'], left, right);
+ },
+ 'neg': function(value) {
+ return Module['_BinaryenUnary'](module, Module['NegVecI16x8'], value);
+ },
+ 'any_true': function(value) {
+ return Module['_BinaryenUnary'](module, Module['AnyTrueVecI16x8'], value);
+ },
+ 'all_true': function(value) {
+ return Module['_BinaryenUnary'](module, Module['AllTrueVecI16x8'], value);
+ },
+ 'shl': function(vec, shift) {
+ return Module['_BinaryenSIMDShift'](module, Module['ShlVecI16x8'], vec, shift);
+ },
+ 'shr_s': function(vec, shift) {
+ return Module['_BinaryenSIMDShift'](module, Module['ShrSVecI16x8'], vec, shift);
+ },
+ 'shr_u': function(vec, shift) {
+ return Module['_BinaryenSIMDShift'](module, Module['ShrUVecI16x8'], vec, shift);
+ },
+ 'add': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['AddVecI16x8'], left, right);
+ },
+ 'add_saturate_s': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['AddSatSVecI16x8'], left, right);
+ },
+ 'add_saturate_u': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['AddSatUVecI16x8'], left, right);
+ },
+ 'sub': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['SubVecI16x8'], left, right);
+ },
+ 'sub_saturate_s': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['SubSatSVecI16x8'], left, right);
+ },
+ 'sub_saturate_u': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['SubSatUVecI16x8'], left, right);
+ },
+ 'mul': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['MulVecI16x8'], left, right);
+ },
+ };
+
+ self['i32x4'] = {
+ 'splat': function(value) {
+ return Module['_BinaryenUnary'](module, Module['SplatVecI32x4'], value);
+ },
+ 'extract_lane': function(vec, idx) {
+ return Module['_BinaryenSIMDExtract'](module, Module['ExtractLaneVecI32x4'], vec, idx);
+ },
+ 'replace_lane': function(vec, idx, value) {
+ return Module['_BinaryenSIMDReplace'](module, Module['ReplaceLaneVecI32x4'], vec, idx, value);
+ },
+ 'eq': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['EqVecI32x4'], left, right);
+ },
+ 'ne': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['NeVecI32x4'], left, right);
+ },
+ 'lt_s': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['LtSVecI32x4'], left, right);
+ },
+ 'lt_u': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['LtUVecI32x4'], left, right);
+ },
+ 'gt_s': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['GtSVecI32x4'], left, right);
+ },
+ 'gt_u': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['GtUVecI32x4'], left, right);
+ },
+ 'le_s': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['LeSVecI32x4'], left, right);
+ },
+ 'le_u': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['LeUVecI32x4'], left, right);
+ },
+ 'ge_s': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['GeSVecI32x4'], left, right);
+ },
+ 'ge_u': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['GeUVecI32x4'], left, right);
+ },
+ 'neg': function(value) {
+ return Module['_BinaryenUnary'](module, Module['NegVecI32x4'], value);
+ },
+ 'any_true': function(value) {
+ return Module['_BinaryenUnary'](module, Module['AnyTrueVecI32x4'], value);
+ },
+ 'all_true': function(value) {
+ return Module['_BinaryenUnary'](module, Module['AllTrueVecI32x4'], value);
+ },
+ 'shl': function(vec, shift) {
+ return Module['_BinaryenSIMDShift'](module, Module['ShlVecI32x4'], vec, shift);
+ },
+ 'shr_s': function(vec, shift) {
+ return Module['_BinaryenSIMDShift'](module, Module['ShrSVecI32x4'], vec, shift);
+ },
+ 'shr_u': function(vec, shift) {
+ return Module['_BinaryenSIMDShift'](module, Module['ShrUVecI32x4'], vec, shift);
+ },
+ 'add': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['AddVecI32x4'], left, right);
+ },
+ 'sub': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['SubVecI32x4'], left, right);
+ },
+ 'mul': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['MulVecI32x4'], left, right);
+ },
+ 'trunc_s/f32x4:sat': function(value) {
+ return Module['_BinaryenUnary'](module, Module['TruncSatSVecF32x4ToVecI32x4'], value);
+ },
+ 'trunc_u/f32x4:sat': function(value) {
+ return Module['_BinaryenUnary'](module, Module['TruncSatUVecF32x4ToVecI32x4'], value);
+ },
+ };
+
+ self['i64x2'] = {
+ 'splat': function(value) {
+ return Module['_BinaryenUnary'](module, Module['SplatVecI64x2'], value);
+ },
+ 'extract_lane': function(vec, idx) {
+ return Module['_BinaryenSIMDExtract'](module, Module['ExtractLaneVecI64x2'], vec, idx);
+ },
+ 'replace_lane': function(vec, idx, value) {
+ return Module['_BinaryenSIMDReplace'](module, Module['ReplaceLaneVecI64x2'], vec, idx, value);
+ },
+ 'neg': function(value) {
+ return Module['_BinaryenUnary'](module, Module['NegVecI64x2'], value);
+ },
+ 'any_true': function(value) {
+ return Module['_BinaryenUnary'](module, Module['AnyTrueVecI64x2'], value);
+ },
+ 'all_true': function(value) {
+ return Module['_BinaryenUnary'](module, Module['AllTrueVecI64x2'], value);
+ },
+ 'shl': function(vec, shift) {
+ return Module['_BinaryenSIMDShift'](module, Module['ShlVecI64x2'], vec, shift);
+ },
+ 'shr_s': function(vec, shift) {
+ return Module['_BinaryenSIMDShift'](module, Module['ShrSVecI64x2'], vec, shift);
+ },
+ 'shr_u': function(vec, shift) {
+ return Module['_BinaryenSIMDShift'](module, Module['ShrUVecI64x2'], vec, shift);
+ },
+ 'add': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['AddVecI64x2'], left, right);
+ },
+ 'sub': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['SubVecI64x2'], left, right);
+ },
+ 'trunc_s/f64x2:sat': function(value) {
+ return Module['_BinaryenUnary'](module, Module['TruncSatSVecF64x2ToVecI64x2'], value);
+ },
+ 'trunc_u/f64x2:sat': function(value) {
+ return Module['_BinaryenUnary'](module, Module['TruncSatUVecF64x2ToVecI64x2'], value);
+ },
+ };
+
+ self['f32x4'] = {
+ 'splat': function(value) {
+ return Module['_BinaryenUnary'](module, Module['SplatVecF32x4'], value);
+ },
+ 'extract_lane': function(vec, idx) {
+ return Module['_BinaryenSIMDExtract'](module, Module['ExtractLaneVecF32x4'], vec, idx);
+ },
+ 'replace_lane': function(vec, idx, value) {
+ return Module['_BinaryenSIMDReplace'](module, Module['ReplaceLaneVecF32x4'], vec, idx, value);
+ },
+ 'eq': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['EqVecF32x4'], left, right);
+ },
+ 'ne': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['NeVecF32x4'], left, right);
+ },
+ 'lt': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['LtVecF32x4'], left, right);
+ },
+ 'gt': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['GtVecF32x4'], left, right);
+ },
+ 'le': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['LeVecF32x4'], left, right);
+ },
+ 'ge': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['GeVecF32x4'], left, right);
+ },
+ 'abs': function(value) {
+ return Module['_BinaryenUnary'](module, Module['AbsVecF32x4'], value);
+ },
+ 'neg': function(value) {
+ return Module['_BinaryenUnary'](module, Module['NegVecF32x4'], value);
+ },
+ 'sqrt': function(value) {
+ return Module['_BinaryenUnary'](module, Module['SqrtVecF32x4'], value);
+ },
+ 'add': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['AddVecF32x4'], left, right);
+ },
+ 'sub': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['SubVecF32x4'], left, right);
+ },
+ 'mul': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['MulVecF32x4'], left, right);
+ },
+ 'div': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['DivVecF32x4'], left, right);
+ },
+ 'min': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['MinVecF32x4'], left, right);
+ },
+ 'max': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['MaxVecF32x4'], left, right);
+ },
+ 'convert_s/i32x4': function(value) {
+ return Module['_BinaryenUnary'](module, Module['ConvertSVecI32x4ToVecF32x4'], value);
+ },
+ 'convert_u/i32x4': function(value) {
+ return Module['_BinaryenUnary'](module, Module['ConvertUVecI32x4ToVecF32x4'], value);
+ },
+ };
+
+ self['f64x2'] = {
+ 'splat': function(value) {
+ return Module['_BinaryenUnary'](module, Module['SplatVecF64x2'], value);
+ },
+ 'extract_lane': function(vec, idx) {
+ return Module['_BinaryenSIMDExtract'](module, Module['ExtractLaneVecF64x2'], vec, idx);
+ },
+ 'replace_lane': function(vec, idx, value) {
+ return Module['_BinaryenSIMDReplace'](module, Module['ReplaceLaneVecF64x2'], vec, idx, value);
+ },
+ 'eq': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['EqVecF64x2'], left, right);
+ },
+ 'ne': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['NeVecF64x2'], left, right);
+ },
+ 'lt': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['LtVecF64x2'], left, right);
+ },
+ 'gt': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['GtVecF64x2'], left, right);
+ },
+ 'le': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['LeVecF64x2'], left, right);
+ },
+ 'ge': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['GeVecF64x2'], left, right);
+ },
+ 'abs': function(value) {
+ return Module['_BinaryenUnary'](module, Module['AbsVecF64x2'], value);
+ },
+ 'neg': function(value) {
+ return Module['_BinaryenUnary'](module, Module['NegVecF64x2'], value);
+ },
+ 'sqrt': function(value) {
+ return Module['_BinaryenUnary'](module, Module['SqrtVecF64x2'], value);
+ },
+ 'add': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['AddVecF64x2'], left, right);
+ },
+ 'sub': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['SubVecF64x2'], left, right);
+ },
+ 'mul': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['MulVecF64x2'], left, right);
+ },
+ 'div': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['DivVecF64x2'], left, right);
+ },
+ 'min': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['MinVecF64x2'], left, right);
+ },
+ 'max': function(left, right) {
+ return Module['_BinaryenBinary'](module, Module['MaxVecF64x2'], left, right);
+ },
+ 'convert_s/i64x2': function(value) {
+ return Module['_BinaryenUnary'](module, Module['ConvertSVecI64x2ToVecF64x2'], value);
+ },
+ 'convert_u/i64x2': function(value) {
+ return Module['_BinaryenUnary'](module, Module['ConvertUVecI64x2ToVecF64x2'], value);
+ },
+ };
+
self['select'] = function(condition, ifTrue, ifFalse) {
return Module['_BinaryenSelect'](module, condition, ifTrue, ifFalse);
};
@@ -1551,6 +2148,55 @@ Module['getExpressionInfo'] = function(expr) {
'ptr': Module['_BinaryenAtomicWakeGetPtr'](expr),
'wakeCount': Module['_BinaryenAtomicWakeGetWakeCount'](expr)
};
+ case Module['SIMDExtractId']:
+ return {
+ 'id': id,
+ 'type': type,
+ 'op': Module['_BinaryenSIMDExtractGetOp'](expr),
+ 'vec': Module['_BinaryenSIMDExtractGetVec'](expr),
+ 'idx': Module['_BinaryenSIMDExtractGetIdx'](expr)
+ };
+ case Module['SIMDReplaceId']:
+ return {
+ 'id': id,
+ 'type': type,
+ 'op': Module['_BinaryenSIMDReplaceGetOp'](expr),
+ 'vec': Module['_BinaryenSIMDReplaceGetVec'](expr),
+ 'idx': Module['_BinaryenSIMDReplaceGetIdx'](expr),
+ 'value': Module['_BinaryenSIMDReplaceGetValue'](expr)
+ };
+ case Module['SIMDShuffleId']:
+ return preserveStack(function() {
+ var ret = stackAlloc(16);
+ Module['_BinaryenSIMDShuffleGetMask'](expr, ret);
+ var mask = [];
+ for (var i = 0 ; i < 16; i++) {
+ mask[i] = HEAP8[ret + i];
+ }
+ return {
+ 'id': id,
+ 'type': type,
+ 'left': Module['_BinaryenSIMDShuffleGetLeft'](expr),
+ 'right': Module['_BinaryenSIMDShuffleGetRight'](expr),
+ 'mask': mask
+ };
+ });
+ case Module['SIMDBitselectId']:
+ return {
+ 'id': id,
+ 'type': type,
+ 'left': Module['_BinaryenSIMDBitselectGetLeft'](expr),
+ 'right': Module['_BinaryenSIMDBitselectGetRight'](expr),
+ 'cond': Module['_BinaryenSIMDBitselectGetCond'](expr)
+ };
+ case Module['SIMDShiftId']:
+ return {
+ 'id': id,
+ 'type': type,
+ 'op': Module['_BinaryenSIMDShiftGetOp'](expr),
+ 'vec': Module['_BinaryenSIMDShiftGetVec'](expr),
+ 'shift': Module['_BinaryenSIMDShiftGetShift'](expr)
+ };
default:
throw Error('unexpected id: ' + id);
}
diff --git a/src/literal.h b/src/literal.h
index 4ed23b80d..dd5688263 100644
--- a/src/literal.h
+++ b/src/literal.h
@@ -18,6 +18,7 @@
#define wasm_literal_h
#include <iostream>
+#include <array>
#include "support/hash.h"
#include "support/utilities.h"
@@ -36,10 +37,11 @@ private:
union {
int32_t i32;
int64_t i64;
+ uint8_t v128[16];
};
public:
- Literal() : type(Type::none), i64(0) {}
+ Literal() : type(Type::none), v128() {}
explicit Literal(Type type) : type(type), i64(0) {}
explicit Literal(int32_t init) : type(Type::i32), i32(init) {}
explicit Literal(uint32_t init) : type(Type::i32), i32(init) {}
@@ -47,10 +49,38 @@ public:
explicit Literal(uint64_t init) : type(Type::i64), i64(init) {}
explicit Literal(float init) : type(Type::f32), i32(bit_cast<int32_t>(init)) {}
explicit Literal(double init) : type(Type::f64), i64(bit_cast<int64_t>(init)) {}
+ // v128 literal from bytes
+ explicit Literal(const uint8_t init[16]);
+ // v128 literal from lane value literals
+ explicit Literal(const std::array<Literal, 16>&);
+ explicit Literal(const std::array<Literal, 8>&);
+ explicit Literal(const std::array<Literal, 4>&);
+ explicit Literal(const std::array<Literal, 2>&);
bool isConcrete() { return type != none; }
bool isNull() { return type == none; }
+ inline static Literal makeFromInt32(int32_t x, Type type) {
+ switch (type) {
+ case Type::i32: return Literal(int32_t(x)); break;
+ case Type::i64: return Literal(int64_t(x)); break;
+ case Type::f32: return Literal(float(x)); break;
+ case Type::f64: return Literal(double(x)); break;
+ case Type::v128: return Literal(
+ std::array<Literal, 4>{{
+ Literal(x), Literal(int32_t(0)), Literal(int32_t(0)), Literal(int32_t(0))
+ }}
+ );
+ case none:
+ case unreachable: WASM_UNREACHABLE();
+ }
+ WASM_UNREACHABLE();
+ }
+
+ inline static Literal makeZero(Type type) {
+ return makeFromInt32(0, type);
+ }
+
Literal castToF32();
Literal castToF64();
Literal castToI32();
@@ -60,8 +90,12 @@ public:
int64_t geti64() const { assert(type == Type::i64); return i64; }
float getf32() const { assert(type == Type::f32); return bit_cast<float>(i32); }
double getf64() const { assert(type == Type::f64); return bit_cast<double>(i64); }
+ std::array<uint8_t, 16> getv128() const;
- int32_t* geti32Ptr() { assert(type == Type::i32); return &i32; } // careful!
+ // careful!
+ int32_t* geti32Ptr() { assert(type == Type::i32); return &i32; }
+ uint8_t* getv128Ptr() { assert(type == Type::v128); return v128; }
+ const uint8_t* getv128Ptr() const { assert(type == Type::v128); return v128; }
int32_t reinterpreti32() const { assert(type == Type::f32); return i32; }
int64_t reinterpreti64() const { assert(type == Type::f64); return i64; }
@@ -70,7 +104,7 @@ public:
int64_t getInteger() const;
double getFloat() const;
- int64_t getBits() const;
+ void getBits(uint8_t (&buf)[16]) const;
// Equality checks for the type and the bits, so a nan float would
// be compared bitwise (which means that a Literal containing a nan
// would be equal to itself, if the bits are equal).
@@ -84,6 +118,7 @@ public:
static void printFloat(std::ostream &o, float f);
static void printDouble(std::ostream& o, double d);
+ static void printVec128(std::ostream& o, const std::array<uint8_t, 16>& v);
friend std::ostream& operator<<(std::ostream& o, Literal literal);
@@ -158,6 +193,163 @@ public:
Literal min(const Literal& other) const;
Literal max(const Literal& other) const;
Literal copysign(const Literal& other) const;
+
+ std::array<Literal, 16> getLanesSI8x16() const;
+ std::array<Literal, 16> getLanesUI8x16() const;
+ std::array<Literal, 8> getLanesSI16x8() const;
+ std::array<Literal, 8> getLanesUI16x8() const;
+ std::array<Literal, 4> getLanesI32x4() const;
+ std::array<Literal, 2> getLanesI64x2() const;
+ std::array<Literal, 4> getLanesF32x4() const;
+ std::array<Literal, 2> getLanesF64x2() const;
+
+ Literal shuffleV8x16(const Literal& other, const std::array<uint8_t, 16>& mask) const;
+ Literal splatI8x16() const;
+ Literal extractLaneSI8x16(uint8_t idx) const;
+ Literal extractLaneUI8x16(uint8_t idx) const;
+ Literal replaceLaneI8x16(const Literal& other, uint8_t idx) const;
+ Literal splatI16x8() const;
+ Literal extractLaneSI16x8(uint8_t idx) const;
+ Literal extractLaneUI16x8(uint8_t idx) const;
+ Literal replaceLaneI16x8(const Literal& other, uint8_t idx) const;
+ Literal splatI32x4() const;
+ Literal extractLaneI32x4(uint8_t idx) const;
+ Literal replaceLaneI32x4(const Literal& other, uint8_t idx) const;
+ Literal splatI64x2() const;
+ Literal extractLaneI64x2(uint8_t idx) const;
+ Literal replaceLaneI64x2(const Literal& other, uint8_t idx) const;
+ Literal splatF32x4() const;
+ Literal extractLaneF32x4(uint8_t idx) const;
+ Literal replaceLaneF32x4(const Literal& other, uint8_t idx) const;
+ Literal splatF64x2() const;
+ Literal extractLaneF64x2(uint8_t idx) const;
+ Literal replaceLaneF64x2(const Literal& other, uint8_t idx) const;
+ Literal eqI8x16(const Literal& other) const;
+ Literal neI8x16(const Literal& other) const;
+ Literal ltSI8x16(const Literal& other) const;
+ Literal ltUI8x16(const Literal& other) const;
+ Literal gtSI8x16(const Literal& other) const;
+ Literal gtUI8x16(const Literal& other) const;
+ Literal leSI8x16(const Literal& other) const;
+ Literal leUI8x16(const Literal& other) const;
+ Literal geSI8x16(const Literal& other) const;
+ Literal geUI8x16(const Literal& other) const;
+ Literal eqI16x8(const Literal& other) const;
+ Literal neI16x8(const Literal& other) const;
+ Literal ltSI16x8(const Literal& other) const;
+ Literal ltUI16x8(const Literal& other) const;
+ Literal gtSI16x8(const Literal& other) const;
+ Literal gtUI16x8(const Literal& other) const;
+ Literal leSI16x8(const Literal& other) const;
+ Literal leUI16x8(const Literal& other) const;
+ Literal geSI16x8(const Literal& other) const;
+ Literal geUI16x8(const Literal& other) const;
+ Literal eqI32x4(const Literal& other) const;
+ Literal neI32x4(const Literal& other) const;
+ Literal ltSI32x4(const Literal& other) const;
+ Literal ltUI32x4(const Literal& other) const;
+ Literal gtSI32x4(const Literal& other) const;
+ Literal gtUI32x4(const Literal& other) const;
+ Literal leSI32x4(const Literal& other) const;
+ Literal leUI32x4(const Literal& other) const;
+ Literal geSI32x4(const Literal& other) const;
+ Literal geUI32x4(const Literal& other) const;
+ Literal eqF32x4(const Literal& other) const;
+ Literal neF32x4(const Literal& other) const;
+ Literal ltF32x4(const Literal& other) const;
+ Literal gtF32x4(const Literal& other) const;
+ Literal leF32x4(const Literal& other) const;
+ Literal geF32x4(const Literal& other) const;
+ Literal eqF64x2(const Literal& other) const;
+ Literal neF64x2(const Literal& other) const;
+ Literal ltF64x2(const Literal& other) const;
+ Literal gtF64x2(const Literal& other) const;
+ Literal leF64x2(const Literal& other) const;
+ Literal geF64x2(const Literal& other) const;
+ Literal notV128() const;
+ Literal andV128(const Literal& other) const;
+ Literal orV128(const Literal& other) const;
+ Literal xorV128(const Literal& other) const;
+ Literal bitselectV128(const Literal& left, const Literal& right) const;
+ Literal negI8x16() const;
+ Literal anyTrueI8x16() const;
+ Literal allTrueI8x16() const;
+ Literal shlI8x16(const Literal& other) const;
+ Literal shrSI8x16(const Literal& other) const;
+ Literal shrUI8x16(const Literal& other) const;
+ Literal addI8x16(const Literal& other) const;
+ Literal addSaturateSI8x16(const Literal& other) const;
+ Literal addSaturateUI8x16(const Literal& other) const;
+ Literal subI8x16(const Literal& other) const;
+ Literal subSaturateSI8x16(const Literal& other) const;
+ Literal subSaturateUI8x16(const Literal& other) const;
+ Literal mulI8x16(const Literal& other) const;
+ Literal negI16x8() const;
+ Literal anyTrueI16x8() const;
+ Literal allTrueI16x8() const;
+ Literal shlI16x8(const Literal& other) const;
+ Literal shrSI16x8(const Literal& other) const;
+ Literal shrUI16x8(const Literal& other) const;
+ Literal addI16x8(const Literal& other) const;
+ Literal addSaturateSI16x8(const Literal& other) const;
+ Literal addSaturateUI16x8(const Literal& other) const;
+ Literal subI16x8(const Literal& other) const;
+ Literal subSaturateSI16x8(const Literal& other) const;
+ Literal subSaturateUI16x8(const Literal& other) const;
+ Literal mulI16x8(const Literal& other) const;
+ Literal negI32x4() const;
+ Literal anyTrueI32x4() const;
+ Literal allTrueI32x4() const;
+ Literal shlI32x4(const Literal& other) const;
+ Literal shrSI32x4(const Literal& other) const;
+ Literal shrUI32x4(const Literal& other) const;
+ Literal addI32x4(const Literal& other) const;
+ Literal subI32x4(const Literal& other) const;
+ Literal mulI32x4(const Literal& other) const;
+ Literal negI64x2() const;
+ Literal anyTrueI64x2() const;
+ Literal allTrueI64x2() const;
+ Literal shlI64x2(const Literal& other) const;
+ Literal shrSI64x2(const Literal& other) const;
+ Literal shrUI64x2(const Literal& other) const;
+ Literal addI64x2(const Literal& other) const;
+ Literal subI64x2(const Literal& other) const;
+ Literal absF32x4() const;
+ Literal negF32x4() const;
+ Literal sqrtF32x4() const;
+ Literal addF32x4(const Literal& other) const;
+ Literal subF32x4(const Literal& other) const;
+ Literal mulF32x4(const Literal& other) const;
+ Literal divF32x4(const Literal& other) const;
+ Literal minF32x4(const Literal& other) const;
+ Literal maxF32x4(const Literal& other) const;
+ Literal absF64x2() const;
+ Literal negF64x2() const;
+ Literal sqrtF64x2() const;
+ Literal addF64x2(const Literal& other) const;
+ Literal subF64x2(const Literal& other) const;
+ Literal mulF64x2(const Literal& other) const;
+ Literal divF64x2(const Literal& other) const;
+ Literal minF64x2(const Literal& other) const;
+ Literal maxF64x2(const Literal& other) const;
+ Literal truncSatToSI32x4() const;
+ Literal truncSatToUI32x4() const;
+ Literal truncSatToSI64x2() const;
+ Literal truncSatToUI64x2() const;
+ Literal convertSToF32x4() const;
+ Literal convertUToF32x4() const;
+ Literal convertSToF64x2() const;
+ Literal convertUToF64x2() const;
+
+ private:
+ Literal addSatSI8(const Literal& other) const;
+ Literal addSatUI8(const Literal& other) const;
+ Literal addSatSI16(const Literal& other) const;
+ Literal addSatUI16(const Literal& other) const;
+ Literal subSatSI8(const Literal& other) const;
+ Literal subSatUI8(const Literal& other) const;
+ Literal subSatSI16(const Literal& other) const;
+ Literal subSatUI16(const Literal& other) const;
};
} // namespace wasm
@@ -165,9 +357,16 @@ public:
namespace std {
template<> struct hash<wasm::Literal> {
size_t operator()(const wasm::Literal& a) const {
+ uint8_t bytes[16];
+ a.getBits(bytes);
+ int64_t chunks[2];
+ memcpy(chunks, bytes, sizeof(chunks));
return wasm::rehash(
- uint64_t(hash<size_t>()(size_t(a.type))),
- uint64_t(hash<int64_t>()(a.getBits()))
+ wasm::rehash(
+ uint64_t(hash<size_t>()(size_t(a.type))),
+ uint64_t(hash<int64_t>()(chunks[0]))
+ ),
+ uint64_t(hash<int64_t>()(chunks[1]))
);
}
};
@@ -175,7 +374,16 @@ template<> struct less<wasm::Literal> {
bool operator()(const wasm::Literal& a, const wasm::Literal& b) const {
if (a.type < b.type) return true;
if (a.type > b.type) return false;
- return a.getBits() < b.getBits();
+ switch (a.type) {
+ case wasm::Type::i32: return a.geti32() < b.geti32();
+ case wasm::Type::f32: return a.reinterpreti32() < b.reinterpreti32();
+ case wasm::Type::i64: return a.geti64() < b.geti64();
+ case wasm::Type::f64: return a.reinterpreti64() < b.reinterpreti64();
+ case wasm::Type::v128: return memcmp(a.getv128Ptr(), b.getv128Ptr(), 16) < 0;
+ case wasm::Type::none:
+ case wasm::Type::unreachable: return false;
+ }
+ WASM_UNREACHABLE();
}
};
}
diff --git a/src/passes/DeadCodeElimination.cpp b/src/passes/DeadCodeElimination.cpp
index 2e62197b5..6e70fc55d 100644
--- a/src/passes/DeadCodeElimination.cpp
+++ b/src/passes/DeadCodeElimination.cpp
@@ -257,6 +257,11 @@ struct DeadCodeElimination : public WalkerPass<PostWalker<DeadCodeElimination>>
case Expression::Id::AtomicRMWId: DELEGATE(AtomicRMW);
case Expression::Id::AtomicWaitId: DELEGATE(AtomicWait);
case Expression::Id::AtomicWakeId: DELEGATE(AtomicWake);
+ case Expression::Id::SIMDExtractId: DELEGATE(SIMDExtract);
+ case Expression::Id::SIMDReplaceId: DELEGATE(SIMDReplace);
+ case Expression::Id::SIMDShuffleId: DELEGATE(SIMDShuffle);
+ case Expression::Id::SIMDBitselectId: DELEGATE(SIMDBitselect);
+ case Expression::Id::SIMDShiftId: DELEGATE(SIMDShift);
case Expression::Id::InvalidId: WASM_UNREACHABLE();
case Expression::Id::NumExpressionIds: WASM_UNREACHABLE();
}
diff --git a/src/passes/OptimizeInstructions.cpp b/src/passes/OptimizeInstructions.cpp
index 1dd05dd0a..4c4adc623 100644
--- a/src/passes/OptimizeInstructions.cpp
+++ b/src/passes/OptimizeInstructions.cpp
@@ -461,7 +461,7 @@ struct OptimizeInstructions : public WalkerPass<PostWalker<OptimizeInstructions,
auto total = Bits::getEffectiveShifts(leftRight) + Bits::getEffectiveShifts(right);
if (total == Bits::getEffectiveShifts(total, right->type)) {
// no overflow, we can do this
- leftRight->value = LiteralUtils::makeLiteralFromInt32(total, right->type);
+ leftRight->value = Literal::makeFromInt32(total, right->type);
return left;
} // TODO: handle overflows
}
@@ -1096,7 +1096,7 @@ private:
auto* right = binary->right->cast<Const>();
if (isIntegerType(type)) {
// operations on zero
- if (right->value == LiteralUtils::makeLiteralFromInt32(0, type)) {
+ if (right->value == Literal::makeFromInt32(0, type)) {
if (binary->op == Abstract::getBinary(type, Abstract::Shl) ||
binary->op == Abstract::getBinary(type, Abstract::ShrU) ||
binary->op == Abstract::getBinary(type, Abstract::ShrS) ||
@@ -1152,7 +1152,7 @@ private:
// as a NaN would skip the computation and just return the NaN,
// and that is precisely what we do here. but, the same with -1
// (change to a negation) would be incorrect for that reason.
- if (right->value == LiteralUtils::makeLiteralFromInt32(1, type)) {
+ if (right->value == Literal::makeFromInt32(1, type)) {
if (binary->op == Abstract::getBinary(type, Abstract::Mul) ||
binary->op == Abstract::getBinary(type, Abstract::DivS) ||
binary->op == Abstract::getBinary(type, Abstract::DivU)) {
@@ -1171,7 +1171,7 @@ private:
auto* left = binary->left->cast<Const>();
if (isIntegerType(type)) {
// operations on zero
- if (left->value == LiteralUtils::makeLiteralFromInt32(0, type)) {
+ if (left->value == Literal::makeFromInt32(0, type)) {
if ((binary->op == Abstract::getBinary(type, Abstract::Shl) ||
binary->op == Abstract::getBinary(type, Abstract::ShrU) ||
binary->op == Abstract::getBinary(type, Abstract::ShrS)) &&
diff --git a/src/passes/Precompute.cpp b/src/passes/Precompute.cpp
index db34b9ffb..9fb7ab31c 100644
--- a/src/passes/Precompute.cpp
+++ b/src/passes/Precompute.cpp
@@ -297,7 +297,7 @@ private:
Literal curr;
if (set == nullptr) {
if (getFunction()->isVar(get->index)) {
- curr = LiteralUtils::makeLiteralZero(getFunction()->getLocalType(get->index));
+ curr = Literal::makeZero(getFunction()->getLocalType(get->index));
} else {
// it's a param, so it's hopeless
value = Literal();
diff --git a/src/passes/Print.cpp b/src/passes/Print.cpp
index 51c7e9f97..64dd0deae 100644
--- a/src/passes/Print.cpp
+++ b/src/passes/Print.cpp
@@ -234,6 +234,60 @@ struct PrintExpressionContents : public Visitor<PrintExpressionContents> {
o << " offset=" << curr->offset;
}
}
+ void visitSIMDExtract(SIMDExtract* curr) {
+ prepareColor(o);
+ switch (curr->op) {
+ case ExtractLaneSVecI8x16: o << "i8x16.extract_lane_s"; break;
+ case ExtractLaneUVecI8x16: o << "i8x16.extract_lane_u"; break;
+ case ExtractLaneSVecI16x8: o << "i16x8.extract_lane_s"; break;
+ case ExtractLaneUVecI16x8: o << "i16x8.extract_lane_u"; break;
+ case ExtractLaneVecI32x4: o << "i32x4.extract_lane"; break;
+ case ExtractLaneVecI64x2: o << "i64x2.extract_lane"; break;
+ case ExtractLaneVecF32x4: o << "f32x4.extract_lane"; break;
+ case ExtractLaneVecF64x2: o << "f64x2.extract_lane"; break;
+ }
+ o << " " << int(curr->idx);
+ }
+ void visitSIMDReplace(SIMDReplace* curr) {
+ prepareColor(o);
+ switch (curr->op) {
+ case ReplaceLaneVecI8x16: o << "i8x16.replace_lane"; break;
+ case ReplaceLaneVecI16x8: o << "i16x8.replace_lane"; break;
+ case ReplaceLaneVecI32x4: o << "i32x4.replace_lane"; break;
+ case ReplaceLaneVecI64x2: o << "i64x2.replace_lane"; break;
+ case ReplaceLaneVecF32x4: o << "f32x4.replace_lane"; break;
+ case ReplaceLaneVecF64x2: o << "f64x2.replace_lane"; break;
+ }
+ o << " " << int(curr->idx);
+ }
+ void visitSIMDShuffle(SIMDShuffle* curr) {
+ prepareColor(o);
+ o << "v8x16.shuffle";
+ for (uint8_t mask_index : curr->mask) {
+ o << " " << std::to_string(mask_index);
+ }
+ }
+ void visitSIMDBitselect(SIMDBitselect* curr) {
+ prepareColor(o);
+ o << "v128.bitselect";
+ }
+ void visitSIMDShift(SIMDShift* curr) {
+ prepareColor(o);
+ switch (curr->op) {
+ case ShlVecI8x16: o << "i8x16.shl"; break;
+ case ShrSVecI8x16: o << "i8x16.shr_s"; break;
+ case ShrUVecI8x16: o << "i8x16.shr_u"; break;
+ case ShlVecI16x8: o << "i16x8.shl"; break;
+ case ShrSVecI16x8: o << "i16x8.shr_s"; break;
+ case ShrUVecI16x8: o << "i16x8.shr_u"; break;
+ case ShlVecI32x4: o << "i32x4.shl"; break;
+ case ShrSVecI32x4: o << "i32x4.shr_s"; break;
+ case ShrUVecI32x4: o << "i32x4.shr_u"; break;
+ case ShlVecI64x2: o << "i64x2.shl"; break;
+ case ShrSVecI64x2: o << "i64x2.shr_s"; break;
+ case ShrUVecI64x2: o << "i64x2.shr_u"; break;
+ }
+ }
void visitConst(Const* curr) {
o << curr->value;
}
@@ -262,36 +316,36 @@ struct PrintExpressionContents : public Visitor<PrintExpressionContents> {
case TruncFloat64: o << "f64.trunc"; break;
case NearestFloat64: o << "f64.nearest"; break;
case SqrtFloat64: o << "f64.sqrt"; break;
- case ExtendSInt32: o << "i64.extend_s/i32"; break;
- case ExtendUInt32: o << "i64.extend_u/i32"; break;
- case WrapInt64: o << "i32.wrap/i64"; break;
- case TruncSFloat32ToInt32: o << "i32.trunc_s/f32"; break;
- case TruncSFloat32ToInt64: o << "i64.trunc_s/f32"; break;
- case TruncUFloat32ToInt32: o << "i32.trunc_u/f32"; break;
- case TruncUFloat32ToInt64: o << "i64.trunc_u/f32"; break;
- case TruncSFloat64ToInt32: o << "i32.trunc_s/f64"; break;
- case TruncSFloat64ToInt64: o << "i64.trunc_s/f64"; break;
- case TruncUFloat64ToInt32: o << "i32.trunc_u/f64"; break;
- case TruncUFloat64ToInt64: o << "i64.trunc_u/f64"; break;
+ case ExtendSInt32: o << "i64.extend_s/i32"; break;
+ case ExtendUInt32: o << "i64.extend_u/i32"; break;
+ case WrapInt64: o << "i32.wrap/i64"; break;
+ case TruncSFloat32ToInt32: o << "i32.trunc_s/f32"; break;
+ case TruncSFloat32ToInt64: o << "i64.trunc_s/f32"; break;
+ case TruncUFloat32ToInt32: o << "i32.trunc_u/f32"; break;
+ case TruncUFloat32ToInt64: o << "i64.trunc_u/f32"; break;
+ case TruncSFloat64ToInt32: o << "i32.trunc_s/f64"; break;
+ case TruncSFloat64ToInt64: o << "i64.trunc_s/f64"; break;
+ case TruncUFloat64ToInt32: o << "i32.trunc_u/f64"; break;
+ case TruncUFloat64ToInt64: o << "i64.trunc_u/f64"; break;
case ReinterpretFloat32: o << "i32.reinterpret/f32"; break;
case ReinterpretFloat64: o << "i64.reinterpret/f64"; break;
- case ConvertUInt32ToFloat32: o << "f32.convert_u/i32"; break;
- case ConvertUInt32ToFloat64: o << "f64.convert_u/i32"; break;
- case ConvertSInt32ToFloat32: o << "f32.convert_s/i32"; break;
- case ConvertSInt32ToFloat64: o << "f64.convert_s/i32"; break;
- case ConvertUInt64ToFloat32: o << "f32.convert_u/i64"; break;
- case ConvertUInt64ToFloat64: o << "f64.convert_u/i64"; break;
- case ConvertSInt64ToFloat32: o << "f32.convert_s/i64"; break;
- case ConvertSInt64ToFloat64: o << "f64.convert_s/i64"; break;
- case PromoteFloat32: o << "f64.promote/f32"; break;
- case DemoteFloat64: o << "f32.demote/f64"; break;
+ case ConvertUInt32ToFloat32: o << "f32.convert_u/i32"; break;
+ case ConvertUInt32ToFloat64: o << "f64.convert_u/i32"; break;
+ case ConvertSInt32ToFloat32: o << "f32.convert_s/i32"; break;
+ case ConvertSInt32ToFloat64: o << "f64.convert_s/i32"; break;
+ case ConvertUInt64ToFloat32: o << "f32.convert_u/i64"; break;
+ case ConvertUInt64ToFloat64: o << "f64.convert_u/i64"; break;
+ case ConvertSInt64ToFloat32: o << "f32.convert_s/i64"; break;
+ case ConvertSInt64ToFloat64: o << "f64.convert_s/i64"; break;
+ case PromoteFloat32: o << "f64.promote/f32"; break;
+ case DemoteFloat64: o << "f32.demote/f64"; break;
case ReinterpretInt32: o << "f32.reinterpret/i32"; break;
case ReinterpretInt64: o << "f64.reinterpret/i64"; break;
- case ExtendS8Int32: o << "i32.extend8_s"; break;
- case ExtendS16Int32: o << "i32.extend16_s"; break;
- case ExtendS8Int64: o << "i64.extend8_s"; break;
- case ExtendS16Int64: o << "i64.extend16_s"; break;
- case ExtendS32Int64: o << "i64.extend32_s"; break;
+ case ExtendS8Int32: o << "i32.extend8_s"; break;
+ case ExtendS16Int32: o << "i32.extend16_s"; break;
+ case ExtendS8Int64: o << "i64.extend8_s"; break;
+ case ExtendS16Int64: o << "i64.extend16_s"; break;
+ case ExtendS32Int64: o << "i64.extend32_s"; break;
case TruncSatSFloat32ToInt32: o << "i32.trunc_s:sat/f32"; break;
case TruncSatUFloat32ToInt32: o << "i32.trunc_u:sat/f32"; break;
case TruncSatSFloat64ToInt32: o << "i32.trunc_s:sat/f64"; break;
@@ -300,6 +354,39 @@ struct PrintExpressionContents : public Visitor<PrintExpressionContents> {
case TruncSatUFloat32ToInt64: o << "i64.trunc_u:sat/f32"; break;
case TruncSatSFloat64ToInt64: o << "i64.trunc_s:sat/f64"; break;
case TruncSatUFloat64ToInt64: o << "i64.trunc_u:sat/f64"; break;
+ case SplatVecI8x16: o << "i8x16.splat"; break;
+ case SplatVecI16x8: o << "i16x8.splat"; break;
+ case SplatVecI32x4: o << "i32x4.splat"; break;
+ case SplatVecI64x2: o << "i64x2.splat"; break;
+ case SplatVecF32x4: o << "f32x4.splat"; break;
+ case SplatVecF64x2: o << "f64x2.splat"; break;
+ case NotVec128: o << "v128.not"; break;
+ case NegVecI8x16: o << "i8x16.neg"; break;
+ case AnyTrueVecI8x16: o << "i8x16.any_true"; break;
+ case AllTrueVecI8x16: o << "i8x16.all_true"; break;
+ case NegVecI16x8: o << "i16x8.neg"; break;
+ case AnyTrueVecI16x8: o << "i16x8.any_true"; break;
+ case AllTrueVecI16x8: o << "i16x8.all_true"; break;
+ case NegVecI32x4: o << "i32x4.neg"; break;
+ case AnyTrueVecI32x4: o << "i32x4.any_true"; break;
+ case AllTrueVecI32x4: o << "i32x4.all_true"; break;
+ case NegVecI64x2: o << "i64x2.neg"; break;
+ case AnyTrueVecI64x2: o << "i64x2.any_true"; break;
+ case AllTrueVecI64x2: o << "i64x2.all_true"; break;
+ case AbsVecF32x4: o << "f32x4.abs"; break;
+ case NegVecF32x4: o << "f32x4.neg"; break;
+ case SqrtVecF32x4: o << "f32x4.sqrt"; break;
+ case AbsVecF64x2: o << "f64x2.abs"; break;
+ case NegVecF64x2: o << "f64x2.neg"; break;
+ case SqrtVecF64x2: o << "f64x2.sqrt"; break;
+ case TruncSatSVecF32x4ToVecI32x4: o << "i32x4.trunc_s/f32x4:sat"; break;
+ case TruncSatUVecF32x4ToVecI32x4: o << "i32x4.trunc_u/f32x4:sat"; break;
+ case TruncSatSVecF64x2ToVecI64x2: o << "i64x2.trunc_s/f64x2:sat"; break;
+ case TruncSatUVecF64x2ToVecI64x2: o << "i64x2.trunc_u/f64x2:sat"; break;
+ case ConvertSVecI32x4ToVecF32x4: o << "f32x4.convert_s/i32x4"; break;
+ case ConvertUVecI32x4ToVecF32x4: o << "f32x4.convert_u/i32x4"; break;
+ case ConvertSVecI64x2ToVecF64x2: o << "f64x2.convert_s/i64x2"; break;
+ case ConvertUVecI64x2ToVecF64x2: o << "f64x2.convert_u/i64x2"; break;
case InvalidUnary: WASM_UNREACHABLE();
}
}
@@ -386,6 +473,86 @@ struct PrintExpressionContents : public Visitor<PrintExpressionContents> {
case GtFloat64: o << "f64.gt"; break;
case GeFloat64: o << "f64.ge"; break;
+ case EqVecI8x16: o << "i8x16.eq"; break;
+ case NeVecI8x16: o << "i8x16.ne"; break;
+ case LtSVecI8x16: o << "i8x16.lt_s"; break;
+ case LtUVecI8x16: o << "i8x16.lt_u"; break;
+ case GtSVecI8x16: o << "i8x16.gt_s"; break;
+ case GtUVecI8x16: o << "i8x16.gt_u"; break;
+ case LeSVecI8x16: o << "i8x16.le_s"; break;
+ case LeUVecI8x16: o << "i8x16.le_u"; break;
+ case GeSVecI8x16: o << "i8x16.ge_s"; break;
+ case GeUVecI8x16: o << "i8x16.ge_u"; break;
+ case EqVecI16x8: o << "i16x8.eq"; break;
+ case NeVecI16x8: o << "i16x8.ne"; break;
+ case LtSVecI16x8: o << "i16x8.lt_s"; break;
+ case LtUVecI16x8: o << "i16x8.lt_u"; break;
+ case GtSVecI16x8: o << "i16x8.gt_s"; break;
+ case GtUVecI16x8: o << "i16x8.gt_u"; break;
+ case LeSVecI16x8: o << "i16x8.le_s"; break;
+ case LeUVecI16x8: o << "i16x8.le_u"; break;
+ case GeSVecI16x8: o << "i16x8.ge_s"; break;
+ case GeUVecI16x8: o << "i16x8.ge_u"; break;
+ case EqVecI32x4: o << "i32x4.eq"; break;
+ case NeVecI32x4: o << "i32x4.ne"; break;
+ case LtSVecI32x4: o << "i32x4.lt_s"; break;
+ case LtUVecI32x4: o << "i32x4.lt_u"; break;
+ case GtSVecI32x4: o << "i32x4.gt_s"; break;
+ case GtUVecI32x4: o << "i32x4.gt_u"; break;
+ case LeSVecI32x4: o << "i32x4.le_s"; break;
+ case LeUVecI32x4: o << "i32x4.le_u"; break;
+ case GeSVecI32x4: o << "i32x4.ge_s"; break;
+ case GeUVecI32x4: o << "i32x4.ge_u"; break;
+ case EqVecF32x4: o << "f32x4.eq"; break;
+ case NeVecF32x4: o << "f32x4.ne"; break;
+ case LtVecF32x4: o << "f32x4.lt"; break;
+ case GtVecF32x4: o << "f32x4.gt"; break;
+ case LeVecF32x4: o << "f32x4.le"; break;
+ case GeVecF32x4: o << "f32x4.ge"; break;
+ case EqVecF64x2: o << "f64x2.eq"; break;
+ case NeVecF64x2: o << "f64x2.ne"; break;
+ case LtVecF64x2: o << "f64x2.lt"; break;
+ case GtVecF64x2: o << "f64x2.gt"; break;
+ case LeVecF64x2: o << "f64x2.le"; break;
+ case GeVecF64x2: o << "f64x2.ge"; break;
+
+ case AndVec128: o << "v128.and"; break;
+ case OrVec128: o << "v128.or"; break;
+ case XorVec128: o << "v128.xor"; break;
+
+ case AddVecI8x16: o << "i8x16.add"; break;
+ case AddSatSVecI8x16: o << "i8x16.add_saturate_s"; break;
+ case AddSatUVecI8x16: o << "i8x16.add_saturate_u"; break;
+ case SubVecI8x16: o << "i8x16.sub"; break;
+ case SubSatSVecI8x16: o << "i8x16.sub_saturate_s"; break;
+ case SubSatUVecI8x16: o << "i8x16.sub_saturate_u"; break;
+ case MulVecI8x16: o << "i8x16.mul"; break;
+ case AddVecI16x8: o << "i16x8.add"; break;
+ case AddSatSVecI16x8: o << "i16x8.add_saturate_s"; break;
+ case AddSatUVecI16x8: o << "i16x8.add_saturate_u"; break;
+ case SubVecI16x8: o << "i16x8.sub"; break;
+ case SubSatSVecI16x8: o << "i16x8.sub_saturate_s"; break;
+ case SubSatUVecI16x8: o << "i16x8.sub_saturate_u"; break;
+ case MulVecI16x8: o << "i16x8.mul"; break;
+ case AddVecI32x4: o << "i32x4.add"; break;
+ case SubVecI32x4: o << "i32x4.sub"; break;
+ case MulVecI32x4: o << "i32x4.mul"; break;
+ case AddVecI64x2: o << "i64x2.add"; break;
+ case SubVecI64x2: o << "i64x2.sub"; break;
+
+ case AddVecF32x4: o << "f32x4.add"; break;
+ case SubVecF32x4: o << "f32x4.sub"; break;
+ case MulVecF32x4: o << "f32x4.mul"; break;
+ case DivVecF32x4: o << "f32x4.div"; break;
+ case MinVecF32x4: o << "f32x4.min"; break;
+ case MaxVecF32x4: o << "f32x4.max"; break;
+ case AddVecF64x2: o << "f64x2.add"; break;
+ case SubVecF64x2: o << "f64x2.sub"; break;
+ case MulVecF64x2: o << "f64x2.mul"; break;
+ case DivVecF64x2: o << "f64x2.div"; break;
+ case MinVecF64x2: o << "f64x2.min"; break;
+ case MaxVecF64x2: o << "f64x2.max"; break;
+
case InvalidBinary: WASM_UNREACHABLE();
}
restoreNormalColor(o);
@@ -724,6 +891,46 @@ struct PrintSExpression : public Visitor<PrintSExpression> {
printFullLine(curr->wakeCount);
decIndent();
}
+ void visitSIMDExtract(SIMDExtract* curr) {
+ o << '(';
+ PrintExpressionContents(currFunction, o).visit(curr);
+ incIndent();
+ printFullLine(curr->vec);
+ decIndent();
+ }
+ void visitSIMDReplace(SIMDReplace* curr) {
+ o << '(';
+ PrintExpressionContents(currFunction, o).visit(curr);
+ incIndent();
+ printFullLine(curr->vec);
+ printFullLine(curr->value);
+ decIndent();
+ }
+ void visitSIMDShuffle(SIMDShuffle* curr) {
+ o << '(';
+ PrintExpressionContents(currFunction, o).visit(curr);
+ incIndent();
+ printFullLine(curr->left);
+ printFullLine(curr->right);
+ decIndent();
+ }
+ void visitSIMDBitselect(SIMDBitselect* curr) {
+ o << '(';
+ PrintExpressionContents(currFunction, o).visit(curr);
+ incIndent();
+ printFullLine(curr->left);
+ printFullLine(curr->right);
+ printFullLine(curr->cond);
+ decIndent();
+ }
+ void visitSIMDShift(SIMDShift* curr) {
+ o << '(';
+ PrintExpressionContents(currFunction, o).visit(curr);
+ incIndent();
+ printFullLine(curr->vec);
+ printFullLine(curr->shift);
+ decIndent();
+ }
void visitConst(Const* curr) {
o << '(';
PrintExpressionContents(currFunction, o).visit(curr);
diff --git a/src/passes/RedundantSetElimination.cpp b/src/passes/RedundantSetElimination.cpp
index 8c00a0880..8cd8fbf99 100644
--- a/src/passes/RedundantSetElimination.cpp
+++ b/src/passes/RedundantSetElimination.cpp
@@ -172,7 +172,7 @@ struct RedundantSetElimination : public WalkerPass<CFGWalker<RedundantSetElimina
#endif
start[i] = getUniqueValue();
} else {
- start[i] = getLiteralValue(LiteralUtils::makeLiteralZero(func->getLocalType(i)));
+ start[i] = getLiteralValue(Literal::makeZero(func->getLocalType(i)));
}
}
} else {
@@ -375,4 +375,3 @@ Pass *createRedundantSetEliminationPass() {
}
} // namespace wasm
-
diff --git a/src/passes/SafeHeap.cpp b/src/passes/SafeHeap.cpp
index ce1adff15..f170041e1 100644
--- a/src/passes/SafeHeap.cpp
+++ b/src/passes/SafeHeap.cpp
@@ -109,7 +109,7 @@ struct SafeHeap : public Pass {
instrumenter.add<AccessInstrumenter>();
instrumenter.run();
// add helper checking funcs and imports
- addGlobals(module);
+ addGlobals(module, runner->options.features);
}
Name dynamicTopPtr, segfault, alignfault;
@@ -156,18 +156,22 @@ struct SafeHeap : public Pass {
return align == bytes && shared && isIntegerType(type);
}
- void addGlobals(Module* module) {
+ void addGlobals(Module* module, FeatureSet features) {
// load funcs
Load load;
- for (auto type : { i32, i64, f32, f64 }) {
+ for (auto type : { i32, i64, f32, f64, v128 }) {
+ if (type == v128 && !features.hasSIMD()) continue;
load.type = type;
- for (Index bytes : { 1, 2, 4, 8 }) {
+ for (Index bytes : { 1, 2, 4, 8, 16 }) {
load.bytes = bytes;
- if (bytes > getTypeSize(type)) continue;
+ if (bytes > getTypeSize(type) ||
+ (type == f32 && bytes != 4) ||
+ (type == f64 && bytes != 8) ||
+ (type == v128 && bytes != 16)) continue;
for (auto signed_ : { true, false }) {
load.signed_ = signed_;
if (isFloatType(type) && signed_) continue;
- for (Index align : { 1, 2, 4, 8 }) {
+ for (Index align : { 1, 2, 4, 8, 16 }) {
load.align = align;
if (align > bytes) continue;
for (auto isAtomic : { true, false }) {
@@ -184,13 +188,17 @@ struct SafeHeap : public Pass {
}
// store funcs
Store store;
- for (auto valueType : { i32, i64, f32, f64 }) {
+ for (auto valueType : { i32, i64, f32, f64, v128 }) {
+ if (valueType == v128 && !features.hasSIMD()) continue;
store.valueType = valueType;
store.type = none;
- for (Index bytes : { 1, 2, 4, 8 }) {
+ for (Index bytes : { 1, 2, 4, 8, 16 }) {
store.bytes = bytes;
- if (bytes > getTypeSize(valueType)) continue;
- for (Index align : { 1, 2, 4, 8 }) {
+ if (bytes > getTypeSize(valueType) ||
+ (valueType == f32 && bytes != 4) ||
+ (valueType == f64 && bytes != 8) ||
+ (valueType == v128 && bytes != 16)) continue;
+ for (Index align : { 1, 2, 4, 8, 16 }) {
store.align = align;
if (align > bytes) continue;
for (auto isAtomic : { true, false }) {
diff --git a/src/shell-interface.h b/src/shell-interface.h
index 23f1c7de5..fc6a5897c 100644
--- a/src/shell-interface.h
+++ b/src/shell-interface.h
@@ -183,11 +183,17 @@ struct ShellExternalInterface : ModuleInstance::ExternalInterface {
uint32_t load32u(Address addr) override { return memory.get<uint32_t>(addr); }
int64_t load64s(Address addr) override { return memory.get<int64_t>(addr); }
uint64_t load64u(Address addr) override { return memory.get<uint64_t>(addr); }
+ std::array<uint8_t, 16> load128(Address addr) override {
+ return memory.get<std::array<uint8_t, 16>>(addr);
+ }
void store8(Address addr, int8_t value) override { memory.set<int8_t>(addr, value); }
void store16(Address addr, int16_t value) override { memory.set<int16_t>(addr, value); }
void store32(Address addr, int32_t value) override { memory.set<int32_t>(addr, value); }
void store64(Address addr, int64_t value) override { memory.set<int64_t>(addr, value); }
+ void store128(Address addr, const std::array<uint8_t, 16>& value) override {
+ memory.set<std::array<uint8_t, 16>>(addr, value);
+ }
void growMemory(Address /*oldSize*/, Address newSize) override {
memory.resize(newSize);
diff --git a/src/tools/feature-options.h b/src/tools/feature-options.h
index 3b35656fc..1bd78d9b9 100644
--- a/src/tools/feature-options.h
+++ b/src/tools/feature-options.h
@@ -70,7 +70,20 @@ struct FeatureOptions : public Options {
Options::Arguments::Zero,
[this](Options *o, const std::string& arguments) {
passOptions.features.setTruncSat(false);
- });
+ })
+ .add("--enable-simd", "",
+ "Enable nontrapping float-to-int operations",
+ Options::Arguments::Zero,
+ [this](Options *o, const std::string& arguments) {
+ passOptions.features.setSIMD();
+ })
+ .add("--disable-simd", "",
+ "Disable nontrapping float-to-int operations",
+ Options::Arguments::Zero,
+ [this](Options *o, const std::string& arguments) {
+ passOptions.features.setSIMD(false);
+ })
+ ;
}
FeatureSet getFeatures() const {
diff --git a/src/tools/fuzzing.h b/src/tools/fuzzing.h
index dcb47529f..999325baa 100644
--- a/src/tools/fuzzing.h
+++ b/src/tools/fuzzing.h
@@ -1268,10 +1268,10 @@ private:
}
// tweak around special values
if (oneIn(3)) { // +- 1
- value = value.add(LiteralUtils::makeLiteralFromInt32(upTo(3) - 1, type));
+ value = value.add(Literal::makeFromInt32(upTo(3) - 1, type));
}
if (oneIn(2)) { // flip sign
- value = value.mul(LiteralUtils::makeLiteralFromInt32(-1, type));
+ value = value.mul(Literal::makeFromInt32(-1, type));
}
break;
}
@@ -1288,7 +1288,7 @@ private:
}
// maybe negative
if (oneIn(2)) {
- value = value.mul(LiteralUtils::makeLiteralFromInt32(-1, type));
+ value = value.mul(Literal::makeFromInt32(-1, type));
}
}
}
diff --git a/src/tools/wasm-ctor-eval.cpp b/src/tools/wasm-ctor-eval.cpp
index b0e2e2ce7..4a7ca51b7 100644
--- a/src/tools/wasm-ctor-eval.cpp
+++ b/src/tools/wasm-ctor-eval.cpp
@@ -195,12 +195,12 @@ struct CtorEvalExternalInterface : EvallingModuleInstance::ExternalInterface {
// fill in fake values for everything else, which is dangerous to use
ModuleUtils::iterDefinedGlobals(wasm_, [&](Global* defined) {
if (globals.find(defined->name) == globals.end()) {
- globals[defined->name] = LiteralUtils::makeLiteralZero(defined->type);
+ globals[defined->name] = Literal::makeZero(defined->type);
}
});
ModuleUtils::iterImportedGlobals(wasm_, [&](Global* import) {
if (globals.find(import->name) == globals.end()) {
- globals[import->name] = LiteralUtils::makeLiteralZero(import->type);
+ globals[import->name] = Literal::makeZero(import->type);
}
});
}
diff --git a/src/tools/wasm-reduce.cpp b/src/tools/wasm-reduce.cpp
index 8c5df7a1b..02174bb8a 100644
--- a/src/tools/wasm-reduce.cpp
+++ b/src/tools/wasm-reduce.cpp
@@ -839,7 +839,7 @@ struct Reducer : public WalkerPass<PostWalker<Reducer, UnifiedExpressionVisitor<
// try to replace with a trivial value
Const* c = builder->makeConst(Literal(int32_t(0)));
if (tryToReplaceCurrent(c)) return true;
- c->value = LiteralUtils::makeLiteralFromInt32(1, curr->type);
+ c->value = Literal::makeFromInt32(1, curr->type);
c->type = curr->type;
return tryToReplaceCurrent(c);
}
diff --git a/src/wasm-binary.h b/src/wasm-binary.h
index 45052bcb2..36c9f2116 100644
--- a/src/wasm-binary.h
+++ b/src/wasm-binary.h
@@ -330,6 +330,7 @@ enum EncodedType {
i64 = -0x2, // 0x7e
f32 = -0x3, // 0x7d
f64 = -0x4, // 0x7c
+ v128 = -0x5, // 0x7b
// elem_type
AnyFunc = -0x10, // 0x70
// func_type form
@@ -549,6 +550,7 @@ enum ASTNodes {
I64ExtendS32 = 0xc4,
TruncSatPrefix = 0xfc,
+ SIMDPrefix = 0xfd,
AtomicPrefix = 0xfe
};
@@ -639,6 +641,149 @@ enum TruncSatOpcodes {
I64UTruncSatF64 = 0x07,
};
+enum SIMDOpcodes {
+ V128Load = 0x00,
+ V128Store = 0x01,
+ V128Const = 0x02,
+ V8x16Shuffle = 0x03,
+ I8x16Splat = 0x04,
+ I8x16ExtractLaneS = 0x05,
+ I8x16ExtractLaneU = 0x06,
+ I8x16ReplaceLane = 0x07,
+ I16x8Splat = 0x08,
+ I16x8ExtractLaneS = 0x09,
+ I16x8ExtractLaneU = 0x0a,
+ I16x8ReplaceLane = 0x0b,
+ I32x4Splat = 0x0c,
+ I32x4ExtractLane = 0x0d,
+ I32x4ReplaceLane = 0x0e,
+ I64x2Splat = 0x0f,
+ I64x2ExtractLane = 0x10,
+ I64x2ReplaceLane = 0x11,
+ F32x4Splat = 0x12,
+ F32x4ExtractLane = 0x13,
+ F32x4ReplaceLane = 0x14,
+ F64x2Splat = 0x15,
+ F64x2ExtractLane = 0x16,
+ F64x2ReplaceLane = 0x17,
+ I8x16Eq = 0x18,
+ I8x16Ne = 0x19,
+ I8x16LtS = 0x1a,
+ I8x16LtU = 0x1b,
+ I8x16GtS = 0x1c,
+ I8x16GtU = 0x1d,
+ I8x16LeS = 0x1e,
+ I8x16LeU = 0x1f,
+ I8x16GeS = 0x20,
+ I8x16GeU = 0x21,
+ I16x8Eq = 0x22,
+ I16x8Ne = 0x23,
+ I16x8LtS = 0x24,
+ I16x8LtU = 0x25,
+ I16x8GtS = 0x26,
+ I16x8GtU = 0x27,
+ I16x8LeS = 0x28,
+ I16x8LeU = 0x29,
+ I16x8GeS = 0x2a,
+ I16x8GeU = 0x2b,
+ I32x4Eq = 0x2c,
+ I32x4Ne = 0x2d,
+ I32x4LtS = 0x2e,
+ I32x4LtU = 0x2f,
+ I32x4GtS = 0x30,
+ I32x4GtU = 0x31,
+ I32x4LeS = 0x32,
+ I32x4LeU = 0x33,
+ I32x4GeS = 0x34,
+ I32x4GeU = 0x35,
+ F32x4Eq = 0x40,
+ F32x4Ne = 0x41,
+ F32x4Lt = 0x42,
+ F32x4Gt = 0x43,
+ F32x4Le = 0x44,
+ F32x4Ge = 0x45,
+ F64x2Eq = 0x46,
+ F64x2Ne = 0x47,
+ F64x2Lt = 0x48,
+ F64x2Gt = 0x49,
+ F64x2Le = 0x4a,
+ F64x2Ge = 0x4b,
+ V128Not = 0x4c,
+ V128And = 0x4d,
+ V128Or = 0x4e,
+ V128Xor = 0x4f,
+ V128Bitselect = 0x50,
+ I8x16Neg = 0x51,
+ I8x16AnyTrue = 0x52,
+ I8x16AllTrue = 0x53,
+ I8x16Shl = 0x54,
+ I8x16ShrS = 0x55,
+ I8x16ShrU = 0x56,
+ I8x16Add = 0x57,
+ I8x16AddSatS = 0x58,
+ I8x16AddSatU = 0x59,
+ I8x16Sub = 0x5a,
+ I8x16SubSatS = 0x5b,
+ I8x16SubSatU = 0x5c,
+ I8x16Mul = 0x5d,
+ I16x8Neg = 0x62,
+ I16x8AnyTrue = 0x63,
+ I16x8AllTrue = 0x64,
+ I16x8Shl = 0x65,
+ I16x8ShrS = 0x66,
+ I16x8ShrU = 0x67,
+ I16x8Add = 0x68,
+ I16x8AddSatS = 0x69,
+ I16x8AddSatU = 0x6a,
+ I16x8Sub = 0x6b,
+ I16x8SubSatS = 0x6c,
+ I16x8SubSatU = 0x6d,
+ I16x8Mul = 0x6e,
+ I32x4Neg = 0x73,
+ I32x4AnyTrue = 0x74,
+ I32x4AllTrue = 0x75,
+ I32x4Shl = 0x76,
+ I32x4ShrS = 0x77,
+ I32x4ShrU = 0x78,
+ I32x4Add = 0x79,
+ I32x4Sub = 0x7c,
+ I32x4Mul = 0x7f,
+ I64x2Neg = 0x84,
+ I64x2AnyTrue = 0x85,
+ I64x2AllTrue = 0x86,
+ I64x2Shl = 0x87,
+ I64x2ShrS = 0x88,
+ I64x2ShrU = 0x89,
+ I64x2Add = 0x8a,
+ I64x2Sub = 0x8d,
+ F32x4Abs = 0x95,
+ F32x4Neg = 0x96,
+ F32x4Sqrt = 0x97,
+ F32x4Add = 0x9a,
+ F32x4Sub = 0x9b,
+ F32x4Mul = 0x9c,
+ F32x4Div = 0x9d,
+ F32x4Min = 0x9e,
+ F32x4Max = 0x9f,
+ F64x2Abs = 0xa0,
+ F64x2Neg = 0xa1,
+ F64x2Sqrt = 0xa2,
+ F64x2Add = 0xa5,
+ F64x2Sub = 0xa6,
+ F64x2Mul = 0xa7,
+ F64x2Div = 0xa8,
+ F64x2Min = 0xa9,
+ F64x2Max = 0xaa,
+ I32x4TruncSatSF32x4 = 0xab,
+ I32x4TruncSatUF32x4 = 0xac,
+ I64x2TruncSatSF64x2 = 0xad,
+ I64x2TruncSatUF64x2 = 0xae,
+ F32x4ConvertSI32x4 = 0xaf,
+ F32x4ConvertUI32x4 = 0xb0,
+ F64x2ConvertSI64x2 = 0xb1,
+ F64x2ConvertUI64x2 = 0xb2
+};
+
enum MemoryAccess {
Offset = 0x10, // bit 4
Alignment = 0x80, // bit 7
@@ -662,7 +807,7 @@ inline S32LEB binaryType(Type type) {
case i64: ret = BinaryConsts::EncodedType::i64; break;
case f32: ret = BinaryConsts::EncodedType::f32; break;
case f64: ret = BinaryConsts::EncodedType::f64; break;
- case v128: assert(false && "v128 not implemented yet");
+ case v128: ret = BinaryConsts::EncodedType::v128; break;
case unreachable: WASM_UNREACHABLE();
}
return S32LEB(ret);
@@ -814,9 +959,11 @@ public:
uint16_t getInt16();
uint32_t getInt32();
uint64_t getInt64();
+ uint8_t getLaneIdx(size_t lanes);
// it is unsafe to return a float directly, due to ABI issues with the signalling bit
Literal getFloat32Literal();
Literal getFloat64Literal();
+ Literal getVec128Literal();
uint32_t getU32LEB();
uint64_t getU64LEB();
int32_t getS32LEB();
@@ -948,6 +1095,7 @@ public:
void readMemoryAccess(Address& alignment, Address& offset);
bool maybeVisitLoad(Expression*& out, uint8_t code, bool isAtomic);
bool maybeVisitStore(Expression*& out, uint8_t code, bool isAtomic);
+ bool maybeVisitNontrappingTrunc(Expression*& out, uint32_t code);
bool maybeVisitAtomicRMW(Expression*& out, uint8_t code);
bool maybeVisitAtomicCmpxchg(Expression*& out, uint8_t code);
bool maybeVisitAtomicWait(Expression*& out, uint8_t code);
@@ -956,6 +1104,16 @@ public:
bool maybeVisitUnary(Expression*& out, uint8_t code);
bool maybeVisitBinary(Expression*& out, uint8_t code);
bool maybeVisitTruncSat(Expression*& out, uint32_t code);
+ bool maybeVisitSIMDBinary(Expression*& out, uint32_t code);
+ bool maybeVisitSIMDUnary(Expression*& out, uint32_t code);
+ bool maybeVisitSIMDConst(Expression*& out, uint32_t code);
+ bool maybeVisitSIMDLoad(Expression*& out, uint32_t code);
+ bool maybeVisitSIMDStore(Expression*& out, uint32_t code);
+ bool maybeVisitSIMDExtract(Expression*& out, uint32_t code);
+ bool maybeVisitSIMDReplace(Expression*& out, uint32_t code);
+ bool maybeVisitSIMDShuffle(Expression*& out, uint32_t code);
+ bool maybeVisitSIMDBitselect(Expression*& out, uint32_t code);
+ bool maybeVisitSIMDShift(Expression*& out, uint32_t code);
void visitSelect(Select* curr);
void visitReturn(Return* curr);
bool maybeVisitHost(Expression*& out, uint8_t code);
diff --git a/src/wasm-builder.h b/src/wasm-builder.h
index f36ec7a88..dccefa144 100644
--- a/src/wasm-builder.h
+++ b/src/wasm-builder.h
@@ -293,6 +293,47 @@ public:
ret->finalize();
return ret;
}
+ SIMDExtract* makeSIMDExtract(SIMDExtractOp op, Expression* vec, uint8_t idx) {
+ auto* ret = allocator.alloc<SIMDExtract>();
+ ret->op = op;
+ ret->vec = vec;
+ ret->idx = idx;
+ ret->finalize();
+ return ret;
+ }
+ SIMDReplace* makeSIMDReplace(SIMDReplaceOp op, Expression* vec, uint8_t idx, Expression* value) {
+ auto* ret = allocator.alloc<SIMDReplace>();
+ ret->op = op;
+ ret->vec = vec;
+ ret->idx = idx;
+ ret->value = value;
+ ret->finalize();
+ return ret;
+ }
+ SIMDShuffle* makeSIMDShuffle(Expression* left, Expression* right, const std::array<uint8_t, 16>& mask) {
+ auto* ret = allocator.alloc<SIMDShuffle>();
+ ret->left = left;
+ ret->right = right;
+ ret->mask = mask;
+ ret->finalize();
+ return ret;
+ }
+ SIMDBitselect* makeSIMDBitselect(Expression* left, Expression* right, Expression* cond) {
+ auto* ret = allocator.alloc<SIMDBitselect>();
+ ret->left = left;
+ ret->right = right;
+ ret->cond = cond;
+ ret->finalize();
+ return ret;
+ }
+ SIMDShift* makeSIMDShift(SIMDShiftOp op, Expression* vec, Expression* shift) {
+ auto* ret = allocator.alloc<SIMDShift>();
+ ret->op = op;
+ ret->vec = vec;
+ ret->shift = shift;
+ ret->finalize();
+ return ret;
+ }
Const* makeConst(Literal value) {
assert(isConcreteType(value.type));
auto* ret = allocator.alloc<Const>();
@@ -474,7 +515,12 @@ public:
case i64: value = Literal(int64_t(0)); break;
case f32: value = Literal(float(0)); break;
case f64: value = Literal(double(0)); break;
- case v128: assert(false && "v128 not implemented yet");
+ case v128: {
+ std::array<uint8_t, 16> bytes;
+ bytes.fill(0);
+ value = Literal(bytes.data());
+ break;
+ }
case none: return ExpressionManipulator::nop(curr);
case unreachable: return ExpressionManipulator::convert<T, Unreachable>(curr);
}
diff --git a/src/wasm-interpreter.h b/src/wasm-interpreter.h
index 8554daded..e970a4f83 100644
--- a/src/wasm-interpreter.h
+++ b/src/wasm-interpreter.h
@@ -303,7 +303,39 @@ public:
case PromoteFloat32: return value.extendToF64();
case ReinterpretFloat64: return value.castToI64();
case DemoteFloat64: return value.demote();
-
+ case SplatVecI8x16: return value.splatI8x16();
+ case SplatVecI16x8: return value.splatI16x8();
+ case SplatVecI32x4: return value.splatI32x4();
+ case SplatVecI64x2: return value.splatI64x2();
+ case SplatVecF32x4: return value.splatF32x4();
+ case SplatVecF64x2: return value.splatF64x2();
+ case NotVec128: return value.notV128();
+ case NegVecI8x16: return value.negI8x16();
+ case AnyTrueVecI8x16: return value.anyTrueI8x16();
+ case AllTrueVecI8x16: return value.allTrueI8x16();
+ case NegVecI16x8: return value.negI16x8();
+ case AnyTrueVecI16x8: return value.anyTrueI16x8();
+ case AllTrueVecI16x8: return value.allTrueI16x8();
+ case NegVecI32x4: return value.negI32x4();
+ case AnyTrueVecI32x4: return value.anyTrueI32x4();
+ case AllTrueVecI32x4: return value.allTrueI32x4();
+ case NegVecI64x2: return value.negI64x2();
+ case AnyTrueVecI64x2: return value.anyTrueI64x2();
+ case AllTrueVecI64x2: return value.allTrueI64x2();
+ case AbsVecF32x4: return value.absF32x4();
+ case NegVecF32x4: return value.negF32x4();
+ case SqrtVecF32x4: return value.sqrtF32x4();
+ case AbsVecF64x2: return value.absF64x2();
+ case NegVecF64x2: return value.negF64x2();
+ case SqrtVecF64x2: return value.sqrtF64x2();
+ case TruncSatSVecF32x4ToVecI32x4: return value.truncSatToSI32x4();
+ case TruncSatUVecF32x4ToVecI32x4: return value.truncSatToUI32x4();
+ case TruncSatSVecF64x2ToVecI64x2: return value.truncSatToSI64x2();
+ case TruncSatUVecF64x2ToVecI64x2: return value.truncSatToUI64x2();
+ case ConvertSVecI32x4ToVecF32x4: return value.convertSToF32x4();
+ case ConvertUVecI32x4ToVecF32x4: return value.convertUToF32x4();
+ case ConvertSVecI64x2ToVecF64x2: return value.convertSToF64x2();
+ case ConvertUVecI64x2ToVecF64x2: return value.convertUToF64x2();
case InvalidUnary: WASM_UNREACHABLE();
}
WASM_UNREACHABLE();
@@ -427,10 +459,172 @@ public:
case MaxFloat32:
case MaxFloat64: return left.max(right);
+ case EqVecI8x16: return left.eqI8x16(right);
+ case NeVecI8x16: return left.neI8x16(right);
+ case LtSVecI8x16: return left.ltSI8x16(right);
+ case LtUVecI8x16: return left.ltUI8x16(right);
+ case GtSVecI8x16: return left.gtSI8x16(right);
+ case GtUVecI8x16: return left.gtUI8x16(right);
+ case LeSVecI8x16: return left.leSI8x16(right);
+ case LeUVecI8x16: return left.leUI8x16(right);
+ case GeSVecI8x16: return left.geSI8x16(right);
+ case GeUVecI8x16: return left.geUI8x16(right);
+ case EqVecI16x8: return left.eqI16x8(right);
+ case NeVecI16x8: return left.neI16x8(right);
+ case LtSVecI16x8: return left.ltSI16x8(right);
+ case LtUVecI16x8: return left.ltUI16x8(right);
+ case GtSVecI16x8: return left.gtSI16x8(right);
+ case GtUVecI16x8: return left.gtUI16x8(right);
+ case LeSVecI16x8: return left.leSI16x8(right);
+ case LeUVecI16x8: return left.leUI16x8(right);
+ case GeSVecI16x8: return left.geSI16x8(right);
+ case GeUVecI16x8: return left.geUI16x8(right);
+ case EqVecI32x4: return left.eqI32x4(right);
+ case NeVecI32x4: return left.neI32x4(right);
+ case LtSVecI32x4: return left.ltSI32x4(right);
+ case LtUVecI32x4: return left.ltUI32x4(right);
+ case GtSVecI32x4: return left.gtSI32x4(right);
+ case GtUVecI32x4: return left.gtUI32x4(right);
+ case LeSVecI32x4: return left.leSI32x4(right);
+ case LeUVecI32x4: return left.leUI32x4(right);
+ case GeSVecI32x4: return left.geSI32x4(right);
+ case GeUVecI32x4: return left.geUI32x4(right);
+ case EqVecF32x4: return left.eqF32x4(right);
+ case NeVecF32x4: return left.neF32x4(right);
+ case LtVecF32x4: return left.ltF32x4(right);
+ case GtVecF32x4: return left.gtF32x4(right);
+ case LeVecF32x4: return left.leF32x4(right);
+ case GeVecF32x4: return left.geF32x4(right);
+ case EqVecF64x2: return left.eqF64x2(right);
+ case NeVecF64x2: return left.neF64x2(right);
+ case LtVecF64x2: return left.ltF64x2(right);
+ case GtVecF64x2: return left.gtF64x2(right);
+ case LeVecF64x2: return left.leF64x2(right);
+ case GeVecF64x2: return left.geF64x2(right);
+
+ case AndVec128: return left.andV128(right);
+ case OrVec128: return left.orV128(right);
+ case XorVec128: return left.xorV128(right);
+
+ case AddVecI8x16: return left.addI8x16(right);
+ case AddSatSVecI8x16: return left.addSaturateSI8x16(right);
+ case AddSatUVecI8x16: return left.addSaturateUI8x16(right);
+ case SubVecI8x16: return left.subI8x16(right);
+ case SubSatSVecI8x16: return left.subSaturateSI8x16(right);
+ case SubSatUVecI8x16: return left.subSaturateUI8x16(right);
+ case MulVecI8x16: return left.mulI8x16(right);
+ case AddVecI16x8: return left.addI16x8(right);
+ case AddSatSVecI16x8: return left.addSaturateSI16x8(right);
+ case AddSatUVecI16x8: return left.addSaturateUI16x8(right);
+ case SubVecI16x8: return left.subI16x8(right);
+ case SubSatSVecI16x8: return left.subSaturateSI16x8(right);
+ case SubSatUVecI16x8: return left.subSaturateUI16x8(right);
+ case MulVecI16x8: return left.mulI16x8(right);
+ case AddVecI32x4: return left.addI32x4(right);
+ case SubVecI32x4: return left.subI32x4(right);
+ case MulVecI32x4: return left.mulI32x4(right);
+ case AddVecI64x2: return left.addI64x2(right);
+ case SubVecI64x2: return left.subI64x2(right);
+
+ case AddVecF32x4: return left.addF32x4(right);
+ case SubVecF32x4: return left.subF32x4(right);
+ case MulVecF32x4: return left.mulF32x4(right);
+ case DivVecF32x4: return left.divF32x4(right);
+ case MinVecF32x4: return left.minF32x4(right);
+ case MaxVecF32x4: return left.maxF32x4(right);
+ case AddVecF64x2: return left.addF64x2(right);
+ case SubVecF64x2: return left.subF64x2(right);
+ case MulVecF64x2: return left.mulF64x2(right);
+ case DivVecF64x2: return left.divF64x2(right);
+ case MinVecF64x2: return left.minF64x2(right);
+ case MaxVecF64x2: return left.maxF64x2(right);
+
case InvalidBinary: WASM_UNREACHABLE();
}
WASM_UNREACHABLE();
}
+ Flow visitSIMDExtract(SIMDExtract *curr) {
+ NOTE_ENTER("SIMDExtract");
+ Flow flow = this->visit(curr->vec);
+ if (flow.breaking()) return flow;
+ Literal vec = flow.value;
+ switch (curr->op) {
+ case ExtractLaneSVecI8x16: return vec.extractLaneSI8x16(curr->idx);
+ case ExtractLaneUVecI8x16: return vec.extractLaneUI8x16(curr->idx);
+ case ExtractLaneSVecI16x8: return vec.extractLaneSI16x8(curr->idx);
+ case ExtractLaneUVecI16x8: return vec.extractLaneUI16x8(curr->idx);
+ case ExtractLaneVecI32x4: return vec.extractLaneI32x4(curr->idx);
+ case ExtractLaneVecI64x2: return vec.extractLaneI64x2(curr->idx);
+ case ExtractLaneVecF32x4: return vec.extractLaneF32x4(curr->idx);
+ case ExtractLaneVecF64x2: return vec.extractLaneF64x2(curr->idx);
+ }
+ WASM_UNREACHABLE();
+ }
+ Flow visitSIMDReplace(SIMDReplace *curr) {
+ NOTE_ENTER("SIMDReplace");
+ Flow flow = this->visit(curr->vec);
+ if (flow.breaking()) return flow;
+ Literal vec = flow.value;
+ flow = this->visit(curr->value);
+ if (flow.breaking()) return flow;
+ Literal value = flow.value;
+ switch (curr->op) {
+ case ReplaceLaneVecI8x16: return vec.replaceLaneI8x16(value, curr->idx);
+ case ReplaceLaneVecI16x8: return vec.replaceLaneI16x8(value, curr->idx);
+ case ReplaceLaneVecI32x4: return vec.replaceLaneI32x4(value, curr->idx);
+ case ReplaceLaneVecI64x2: return vec.replaceLaneI64x2(value, curr->idx);
+ case ReplaceLaneVecF32x4: return vec.replaceLaneF32x4(value, curr->idx);
+ case ReplaceLaneVecF64x2: return vec.replaceLaneF64x2(value, curr->idx);
+ }
+ WASM_UNREACHABLE();
+ }
+ Flow visitSIMDShuffle(SIMDShuffle *curr) {
+ NOTE_ENTER("SIMDShuffle");
+ Flow flow = this->visit(curr->left);
+ if (flow.breaking()) return flow;
+ Literal left = flow.value;
+ flow = this->visit(curr->right);
+ if (flow.breaking()) return flow;
+ Literal right = flow.value;
+ return left.shuffleV8x16(right, curr->mask);
+ }
+ Flow visitSIMDBitselect(SIMDBitselect *curr) {
+ NOTE_ENTER("SIMDShuffle");
+ Flow flow = this->visit(curr->left);
+ if (flow.breaking()) return flow;
+ Literal left = flow.value;
+ flow = this->visit(curr->right);
+ if (flow.breaking()) return flow;
+ Literal right = flow.value;
+ flow = this->visit(curr->cond);
+ if (flow.breaking()) return flow;
+ Literal cond = flow.value;
+ return cond.bitselectV128(left, right);
+ }
+ Flow visitSIMDShift(SIMDShift *curr) {
+ NOTE_ENTER("SIMDShift");
+ Flow flow = this->visit(curr->vec);
+ if (flow.breaking()) return flow;
+ Literal vec = flow.value;
+ flow = this->visit(curr->shift);
+ if (flow.breaking()) return flow;
+ Literal shift = flow.value;
+ switch (curr->op) {
+ case ShlVecI8x16: return vec.shlI8x16(shift);
+ case ShrSVecI8x16: return vec.shrSI8x16(shift);
+ case ShrUVecI8x16: return vec.shrUI8x16(shift);
+ case ShlVecI16x8: return vec.shlI16x8(shift);
+ case ShrSVecI16x8: return vec.shrSI16x8(shift);
+ case ShrUVecI16x8: return vec.shrUI16x8(shift);
+ case ShlVecI32x4: return vec.shlI32x4(shift);
+ case ShrSVecI32x4: return vec.shrSI32x4(shift);
+ case ShrUVecI32x4: return vec.shrUI32x4(shift);
+ case ShlVecI64x2: return vec.shlI64x2(shift);
+ case ShrSVecI64x2: return vec.shrSI64x2(shift);
+ case ShrUVecI64x2: return vec.shrUI64x2(shift);
+ }
+ WASM_UNREACHABLE();
+ }
Flow visitSelect(Select *curr) {
NOTE_ENTER("Select");
Flow ifTrue = visit(curr->ifTrue);
@@ -586,7 +780,7 @@ public:
}
case f32: return Literal(load32u(addr)).castToF32();
case f64: return Literal(load64u(addr)).castToF64();
- case v128: assert(false && "v128 not implemented yet");
+ case v128: return Literal(load128(addr).data());
case none:
case unreachable: WASM_UNREACHABLE();
}
@@ -616,7 +810,7 @@ public:
// write floats carefully, ensuring all bits reach memory
case f32: store32(addr, value.reinterpreti32()); break;
case f64: store64(addr, value.reinterpreti64()); break;
- case v128: assert(false && "v128 not implemented yet");
+ case v128: store128(addr, value.getv128()); break;
case none:
case unreachable: WASM_UNREACHABLE();
}
@@ -630,11 +824,13 @@ public:
virtual uint32_t load32u(Address addr) { WASM_UNREACHABLE(); }
virtual int64_t load64s(Address addr) { WASM_UNREACHABLE(); }
virtual uint64_t load64u(Address addr) { WASM_UNREACHABLE(); }
+ virtual std::array<uint8_t, 16> load128(Address addr) { WASM_UNREACHABLE(); }
virtual void store8(Address addr, int8_t value) { WASM_UNREACHABLE(); }
virtual void store16(Address addr, int16_t value) { WASM_UNREACHABLE(); }
virtual void store32(Address addr, int32_t value) { WASM_UNREACHABLE(); }
virtual void store64(Address addr, int64_t value) { WASM_UNREACHABLE(); }
+ virtual void store128(Address addr, const std::array<uint8_t, 16>&) { WASM_UNREACHABLE(); }
};
SubType* self() {
diff --git a/src/wasm-s-parser.h b/src/wasm-s-parser.h
index 517398c5c..0845fa70e 100644
--- a/src/wasm-s-parser.h
+++ b/src/wasm-s-parser.h
@@ -190,6 +190,11 @@ private:
Expression* makeAtomicCmpxchg(Element& s, Type type, uint8_t bytes, const char* extra);
Expression* makeAtomicWait(Element& s, Type type);
Expression* makeAtomicWake(Element& s);
+ Expression* makeSIMDExtract(Element& s, SIMDExtractOp op, size_t lanes);
+ Expression* makeSIMDReplace(Element& s, SIMDReplaceOp op, size_t lanes);
+ Expression* makeSIMDShuffle(Element& s);
+ Expression* makeSIMDBitselect(Element& s);
+ Expression* makeSIMDShift(Element& s, SIMDShiftOp);
Expression* makeIf(Element& s);
Expression* makeMaybeBlock(Element& s, size_t i, Type type);
Expression* makeLoop(Element& s);
diff --git a/src/wasm-stack.h b/src/wasm-stack.h
index 6e1150981..0c10a88fc 100644
--- a/src/wasm-stack.h
+++ b/src/wasm-stack.h
@@ -135,6 +135,11 @@ public:
void visitAtomicCmpxchg(AtomicCmpxchg* curr);
void visitAtomicWait(AtomicWait* curr);
void visitAtomicWake(AtomicWake* curr);
+ void visitSIMDExtract(SIMDExtract* curr);
+ void visitSIMDReplace(SIMDReplace* curr);
+ void visitSIMDShuffle(SIMDShuffle* curr);
+ void visitSIMDBitselect(SIMDBitselect* curr);
+ void visitSIMDShift(SIMDShift* curr);
void visitConst(Const* curr);
void visitUnary(Unary* curr);
void visitBinary(Binary* curr);
@@ -634,7 +639,7 @@ void StackWriter<Mode, Parent>::visitLoad(Load* curr) {
}
case f32: o << int8_t(BinaryConsts::F32LoadMem); break;
case f64: o << int8_t(BinaryConsts::F64LoadMem); break;
- case v128: assert(false && "v128 not implemented yet");
+ case v128: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::V128Load); break;
case unreachable: return; // the pointer is unreachable, so we are never reached; just don't emit a load
case none: WASM_UNREACHABLE();
}
@@ -701,7 +706,7 @@ void StackWriter<Mode, Parent>::visitStore(Store* curr) {
}
case f32: o << int8_t(BinaryConsts::F32StoreMem); break;
case f64: o << int8_t(BinaryConsts::F64StoreMem); break;
- case v128: assert(false && "v128 not implemented yet");
+ case v128: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::V128Store); break;
case none:
case unreachable: WASM_UNREACHABLE();
}
@@ -872,6 +877,84 @@ void StackWriter<Mode, Parent>::visitAtomicWake(AtomicWake* curr) {
}
template<StackWriterMode Mode, typename Parent>
+void StackWriter<Mode, Parent>::visitSIMDExtract(SIMDExtract* curr) {
+ visitChild(curr->vec);
+ if (justAddToStack(curr)) return;
+ o << int8_t(BinaryConsts::SIMDPrefix);
+ switch (curr->op) {
+ case ExtractLaneSVecI8x16: o << U32LEB(BinaryConsts::I8x16ExtractLaneS); break;
+ case ExtractLaneUVecI8x16: o << U32LEB(BinaryConsts::I8x16ExtractLaneU); break;
+ case ExtractLaneSVecI16x8: o << U32LEB(BinaryConsts::I16x8ExtractLaneS); break;
+ case ExtractLaneUVecI16x8: o << U32LEB(BinaryConsts::I16x8ExtractLaneU); break;
+ case ExtractLaneVecI32x4: o << U32LEB(BinaryConsts::I32x4ExtractLane); break;
+ case ExtractLaneVecI64x2: o << U32LEB(BinaryConsts::I64x2ExtractLane); break;
+ case ExtractLaneVecF32x4: o << U32LEB(BinaryConsts::F32x4ExtractLane); break;
+ case ExtractLaneVecF64x2: o << U32LEB(BinaryConsts::F64x2ExtractLane); break;
+ }
+ o << uint8_t(curr->idx);
+}
+
+template<StackWriterMode Mode, typename Parent>
+void StackWriter<Mode, Parent>::visitSIMDReplace(SIMDReplace* curr) {
+ visitChild(curr->vec);
+ visitChild(curr->value);
+ if (justAddToStack(curr)) return;
+ o << int8_t(BinaryConsts::SIMDPrefix);
+ switch (curr->op) {
+ case ReplaceLaneVecI8x16: o << U32LEB(BinaryConsts::I8x16ReplaceLane); break;
+ case ReplaceLaneVecI16x8: o << U32LEB(BinaryConsts::I16x8ReplaceLane); break;
+ case ReplaceLaneVecI32x4: o << U32LEB(BinaryConsts::I32x4ReplaceLane); break;
+ case ReplaceLaneVecI64x2: o << U32LEB(BinaryConsts::I64x2ReplaceLane); break;
+ case ReplaceLaneVecF32x4: o << U32LEB(BinaryConsts::F32x4ReplaceLane); break;
+ case ReplaceLaneVecF64x2: o << U32LEB(BinaryConsts::F64x2ReplaceLane); break;
+ }
+ assert(curr->idx < 16);
+ o << uint8_t(curr->idx);
+}
+
+template<StackWriterMode Mode, typename Parent>
+void StackWriter<Mode, Parent>::visitSIMDShuffle(SIMDShuffle* curr) {
+ visitChild(curr->left);
+ visitChild(curr->right);
+ if (justAddToStack(curr)) return;
+ o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::V8x16Shuffle);
+ for (uint8_t m : curr->mask) {
+ o << m;
+ }
+}
+
+template<StackWriterMode Mode, typename Parent>
+void StackWriter<Mode, Parent>::visitSIMDBitselect(SIMDBitselect* curr) {
+ visitChild(curr->left);
+ visitChild(curr->right);
+ visitChild(curr->cond);
+ if (justAddToStack(curr)) return;
+ o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::V128Bitselect);
+}
+
+template<StackWriterMode Mode, typename Parent>
+void StackWriter<Mode, Parent>::visitSIMDShift(SIMDShift* curr) {
+ visitChild(curr->vec);
+ visitChild(curr->shift);
+ if (justAddToStack(curr)) return;
+ o << int8_t(BinaryConsts::SIMDPrefix);
+ switch (curr->op) {
+ case ShlVecI8x16: o << U32LEB(BinaryConsts::I8x16Shl); break;
+ case ShrSVecI8x16: o << U32LEB(BinaryConsts::I8x16ShrS); break;
+ case ShrUVecI8x16: o << U32LEB(BinaryConsts::I8x16ShrU); break;
+ case ShlVecI16x8: o << U32LEB(BinaryConsts::I16x8Shl); break;
+ case ShrSVecI16x8: o << U32LEB(BinaryConsts::I16x8ShrS); break;
+ case ShrUVecI16x8: o << U32LEB(BinaryConsts::I16x8ShrU); break;
+ case ShlVecI32x4: o << U32LEB(BinaryConsts::I32x4Shl); break;
+ case ShrSVecI32x4: o << U32LEB(BinaryConsts::I32x4ShrS); break;
+ case ShrUVecI32x4: o << U32LEB(BinaryConsts::I32x4ShrU); break;
+ case ShlVecI64x2: o << U32LEB(BinaryConsts::I64x2Shl); break;
+ case ShrSVecI64x2: o << U32LEB(BinaryConsts::I64x2ShrS); break;
+ case ShrUVecI64x2: o << U32LEB(BinaryConsts::I64x2ShrU); break;
+ }
+}
+
+template<StackWriterMode Mode, typename Parent>
void StackWriter<Mode, Parent>::visitConst(Const* curr) {
if (debug) std::cerr << "zz node: Const" << curr << " : " << curr->type << std::endl;
if (justAddToStack(curr)) return;
@@ -892,9 +975,17 @@ void StackWriter<Mode, Parent>::visitConst(Const* curr) {
o << int8_t(BinaryConsts::F64Const) << curr->value.reinterpreti64();
break;
}
- case v128: assert(false && "v128 not implemented yet");
+ case v128: {
+ o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::V128Const);
+ std::array<uint8_t, 16> v = curr->value.getv128();
+ for (size_t i = 0; i < 16; ++i) {
+ o << uint8_t(v[i]);
+ }
+ break;
+ }
case none:
- case unreachable: WASM_UNREACHABLE();
+ case unreachable:
+ WASM_UNREACHABLE();
}
if (debug) std::cerr << "zz const node done.\n";
}
@@ -969,6 +1060,39 @@ void StackWriter<Mode, Parent>::visitUnary(Unary* curr) {
case TruncSatUFloat32ToInt64: o << int8_t(BinaryConsts::TruncSatPrefix) << U32LEB(BinaryConsts::I64UTruncSatF32); break;
case TruncSatSFloat64ToInt64: o << int8_t(BinaryConsts::TruncSatPrefix) << U32LEB(BinaryConsts::I64STruncSatF64); break;
case TruncSatUFloat64ToInt64: o << int8_t(BinaryConsts::TruncSatPrefix) << U32LEB(BinaryConsts::I64UTruncSatF64); break;
+ case SplatVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16Splat); break;
+ case SplatVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8Splat); break;
+ case SplatVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4Splat); break;
+ case SplatVecI64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2Splat); break;
+ case SplatVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Splat); break;
+ case SplatVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Splat); break;
+ case NotVec128: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::V128Not); break;
+ case NegVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16Neg); break;
+ case AnyTrueVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16AnyTrue); break;
+ case AllTrueVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16AllTrue); break;
+ case NegVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8Neg); break;
+ case AnyTrueVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8AnyTrue); break;
+ case AllTrueVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8AllTrue); break;
+ case NegVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4Neg); break;
+ case AnyTrueVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4AnyTrue); break;
+ case AllTrueVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4AllTrue); break;
+ case NegVecI64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2Neg); break;
+ case AnyTrueVecI64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2AnyTrue); break;
+ case AllTrueVecI64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2AllTrue); break;
+ case AbsVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Abs); break;
+ case NegVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Neg); break;
+ case SqrtVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Sqrt); break;
+ case AbsVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Abs); break;
+ case NegVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Neg); break;
+ case SqrtVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Sqrt); break;
+ case TruncSatSVecF32x4ToVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4TruncSatSF32x4); break;
+ case TruncSatUVecF32x4ToVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4TruncSatUF32x4); break;
+ case TruncSatSVecF64x2ToVecI64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2TruncSatSF64x2); break;
+ case TruncSatUVecF64x2ToVecI64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2TruncSatUF64x2); break;
+ case ConvertSVecI32x4ToVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4ConvertSI32x4); break;
+ case ConvertUVecI32x4ToVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4ConvertUI32x4); break;
+ case ConvertSVecI64x2ToVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2ConvertSI64x2); break;
+ case ConvertUVecI64x2ToVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2ConvertUI64x2); break;
case InvalidUnary: WASM_UNREACHABLE();
}
}
@@ -1063,6 +1187,85 @@ void StackWriter<Mode, Parent>::visitBinary(Binary* curr) {
case LeFloat64: o << int8_t(BinaryConsts::F64Le); break;
case GtFloat64: o << int8_t(BinaryConsts::F64Gt); break;
case GeFloat64: o << int8_t(BinaryConsts::F64Ge); break;
+
+ case EqVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16Eq); break;
+ case NeVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16Ne); break;
+ case LtSVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16LtS); break;
+ case LtUVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16LtU); break;
+ case GtSVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16GtS); break;
+ case GtUVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16GtU); break;
+ case LeSVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16LeS); break;
+ case LeUVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16LeU); break;
+ case GeSVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16GeS); break;
+ case GeUVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16GeU); break;
+ case EqVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8Eq); break;
+ case NeVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8Ne); break;
+ case LtSVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8LtS); break;
+ case LtUVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8LtU); break;
+ case GtSVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8GtS); break;
+ case GtUVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8GtU); break;
+ case LeSVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8LeS); break;
+ case LeUVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8LeU); break;
+ case GeSVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8GeS); break;
+ case GeUVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8GeU); break;
+ case EqVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4Eq); break;
+ case NeVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4Ne); break;
+ case LtSVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4LtS); break;
+ case LtUVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4LtU); break;
+ case GtSVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4GtS); break;
+ case GtUVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4GtU); break;
+ case LeSVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4LeS); break;
+ case LeUVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4LeU); break;
+ case GeSVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4GeS); break;
+ case GeUVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4GeU); break;
+ case EqVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Eq); break;
+ case NeVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Ne); break;
+ case LtVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Lt); break;
+ case GtVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Gt); break;
+ case LeVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Le); break;
+ case GeVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Ge); break;
+ case EqVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Eq); break;
+ case NeVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Ne); break;
+ case LtVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Lt); break;
+ case GtVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Gt); break;
+ case LeVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Le); break;
+ case GeVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Ge); break;
+ case AndVec128: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::V128And); break;
+ case OrVec128: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::V128Or); break;
+ case XorVec128: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::V128Xor); break;
+
+ case AddVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16Add); break;
+ case AddSatSVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16AddSatS); break;
+ case AddSatUVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16AddSatU); break;
+ case SubVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16Sub); break;
+ case SubSatSVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16SubSatS); break;
+ case SubSatUVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16SubSatU); break;
+ case MulVecI8x16: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16Mul); break;
+ case AddVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8Add); break;
+ case AddSatSVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8AddSatS); break;
+ case AddSatUVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8AddSatU); break;
+ case SubVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8Sub); break;
+ case SubSatSVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8SubSatS); break;
+ case SubSatUVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8SubSatU); break;
+ case MulVecI16x8: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8Mul); break;
+ case AddVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4Add); break;
+ case SubVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4Sub); break;
+ case MulVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4Mul); break;
+ case AddVecI64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2Add); break;
+ case SubVecI64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2Sub); break;
+
+ case AddVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Add); break;
+ case SubVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Sub); break;
+ case MulVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Mul); break;
+ case DivVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Div); break;
+ case MinVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Min); break;
+ case MaxVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Max); break;
+ case AddVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Add); break;
+ case SubVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Sub); break;
+ case MulVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Mul); break;
+ case DivVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Div); break;
+ case MinVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Min); break;
+ case MaxVecF64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Max); break;
case InvalidBinary: WASM_UNREACHABLE();
}
}
diff --git a/src/wasm-traversal.h b/src/wasm-traversal.h
index 9ea1124d0..200a67cb6 100644
--- a/src/wasm-traversal.h
+++ b/src/wasm-traversal.h
@@ -54,6 +54,11 @@ struct Visitor {
ReturnType visitAtomicCmpxchg(AtomicCmpxchg* curr) { return ReturnType(); }
ReturnType visitAtomicWait(AtomicWait* curr) { return ReturnType(); }
ReturnType visitAtomicWake(AtomicWake* curr) { return ReturnType(); }
+ ReturnType visitSIMDExtract(SIMDExtract* curr) { return ReturnType(); }
+ ReturnType visitSIMDReplace(SIMDReplace* curr) { return ReturnType(); }
+ ReturnType visitSIMDShuffle(SIMDShuffle* curr) { return ReturnType(); }
+ ReturnType visitSIMDBitselect(SIMDBitselect* curr) { return ReturnType(); }
+ ReturnType visitSIMDShift(SIMDShift* curr) { return ReturnType(); }
ReturnType visitConst(Const* curr) { return ReturnType(); }
ReturnType visitUnary(Unary* curr) { return ReturnType(); }
ReturnType visitBinary(Binary* curr) { return ReturnType(); }
@@ -97,6 +102,11 @@ struct Visitor {
case Expression::Id::AtomicCmpxchgId: DELEGATE(AtomicCmpxchg);
case Expression::Id::AtomicWaitId: DELEGATE(AtomicWait);
case Expression::Id::AtomicWakeId: DELEGATE(AtomicWake);
+ case Expression::Id::SIMDExtractId: DELEGATE(SIMDExtract);
+ case Expression::Id::SIMDReplaceId: DELEGATE(SIMDReplace);
+ case Expression::Id::SIMDShuffleId: DELEGATE(SIMDShuffle);
+ case Expression::Id::SIMDBitselectId: DELEGATE(SIMDBitselect);
+ case Expression::Id::SIMDShiftId: DELEGATE(SIMDShift);
case Expression::Id::ConstId: DELEGATE(Const);
case Expression::Id::UnaryId: DELEGATE(Unary);
case Expression::Id::BinaryId: DELEGATE(Binary);
@@ -142,6 +152,11 @@ struct OverriddenVisitor {
UNIMPLEMENTED(AtomicCmpxchg);
UNIMPLEMENTED(AtomicWait);
UNIMPLEMENTED(AtomicWake);
+ UNIMPLEMENTED(SIMDExtract);
+ UNIMPLEMENTED(SIMDReplace);
+ UNIMPLEMENTED(SIMDShuffle);
+ UNIMPLEMENTED(SIMDBitselect);
+ UNIMPLEMENTED(SIMDShift);
UNIMPLEMENTED(Const);
UNIMPLEMENTED(Unary);
UNIMPLEMENTED(Binary);
@@ -186,6 +201,11 @@ struct OverriddenVisitor {
case Expression::Id::AtomicCmpxchgId: DELEGATE(AtomicCmpxchg);
case Expression::Id::AtomicWaitId: DELEGATE(AtomicWait);
case Expression::Id::AtomicWakeId: DELEGATE(AtomicWake);
+ case Expression::Id::SIMDExtractId: DELEGATE(SIMDExtract);
+ case Expression::Id::SIMDReplaceId: DELEGATE(SIMDReplace);
+ case Expression::Id::SIMDShuffleId: DELEGATE(SIMDShuffle);
+ case Expression::Id::SIMDBitselectId: DELEGATE(SIMDBitselect);
+ case Expression::Id::SIMDShiftId: DELEGATE(SIMDShift);
case Expression::Id::ConstId: DELEGATE(Const);
case Expression::Id::UnaryId: DELEGATE(Unary);
case Expression::Id::BinaryId: DELEGATE(Binary);
@@ -229,6 +249,11 @@ struct UnifiedExpressionVisitor : public Visitor<SubType, ReturnType> {
ReturnType visitAtomicCmpxchg(AtomicCmpxchg* curr) { return static_cast<SubType*>(this)->visitExpression(curr); }
ReturnType visitAtomicWait(AtomicWait* curr) { return static_cast<SubType*>(this)->visitExpression(curr); }
ReturnType visitAtomicWake(AtomicWake* curr) { return static_cast<SubType*>(this)->visitExpression(curr); }
+ ReturnType visitSIMDExtract(SIMDExtract* curr) { return static_cast<SubType*>(this)->visitExpression(curr); }
+ ReturnType visitSIMDReplace(SIMDReplace* curr) { return static_cast<SubType*>(this)->visitExpression(curr); }
+ ReturnType visitSIMDShuffle(SIMDShuffle* curr) { return static_cast<SubType*>(this)->visitExpression(curr); }
+ ReturnType visitSIMDBitselect(SIMDBitselect* curr) { return static_cast<SubType*>(this)->visitExpression(curr); }
+ ReturnType visitSIMDShift(SIMDShift* curr) { return static_cast<SubType*>(this)->visitExpression(curr); }
ReturnType visitConst(Const* curr) { return static_cast<SubType*>(this)->visitExpression(curr); }
ReturnType visitUnary(Unary* curr) { return static_cast<SubType*>(this)->visitExpression(curr); }
ReturnType visitBinary(Binary* curr) { return static_cast<SubType*>(this)->visitExpression(curr); }
@@ -414,6 +439,11 @@ struct Walker : public VisitorType {
static void doVisitAtomicCmpxchg(SubType* self, Expression** currp){ self->visitAtomicCmpxchg((*currp)->cast<AtomicCmpxchg>()); }
static void doVisitAtomicWait(SubType* self, Expression** currp) { self->visitAtomicWait((*currp)->cast<AtomicWait>()); }
static void doVisitAtomicWake(SubType* self, Expression** currp) { self->visitAtomicWake((*currp)->cast<AtomicWake>()); }
+ static void doVisitSIMDExtract(SubType* self, Expression** currp) { self->visitSIMDExtract((*currp)->cast<SIMDExtract>()); }
+ static void doVisitSIMDReplace(SubType* self, Expression** currp) { self->visitSIMDReplace((*currp)->cast<SIMDReplace>()); }
+ static void doVisitSIMDShuffle(SubType* self, Expression** currp) { self->visitSIMDShuffle((*currp)->cast<SIMDShuffle>()); }
+ static void doVisitSIMDBitselect(SubType* self, Expression** currp) { self->visitSIMDBitselect((*currp)->cast<SIMDBitselect>()); }
+ static void doVisitSIMDShift(SubType* self, Expression** currp) { self->visitSIMDShift((*currp)->cast<SIMDShift>()); }
static void doVisitConst(SubType* self, Expression** currp) { self->visitConst((*currp)->cast<Const>()); }
static void doVisitUnary(SubType* self, Expression** currp) { self->visitUnary((*currp)->cast<Unary>()); }
static void doVisitBinary(SubType* self, Expression** currp) { self->visitBinary((*currp)->cast<Binary>()); }
@@ -554,6 +584,36 @@ struct PostWalker : public Walker<SubType, VisitorType> {
self->pushTask(SubType::scan, &curr->cast<AtomicWake>()->ptr);
break;
}
+ case Expression::Id::SIMDExtractId: {
+ self->pushTask(SubType::doVisitSIMDExtract, currp);
+ self->pushTask(SubType::scan, &curr->cast<SIMDExtract>()->vec);
+ break;
+ }
+ case Expression::Id::SIMDReplaceId: {
+ self->pushTask(SubType::doVisitSIMDReplace, currp);
+ self->pushTask(SubType::scan, &curr->cast<SIMDReplace>()->vec);
+ self->pushTask(SubType::scan, &curr->cast<SIMDReplace>()->value);
+ break;
+ }
+ case Expression::Id::SIMDShuffleId: {
+ self->pushTask(SubType::doVisitSIMDShuffle, currp);
+ self->pushTask(SubType::scan, &curr->cast<SIMDShuffle>()->left);
+ self->pushTask(SubType::scan, &curr->cast<SIMDShuffle>()->right);
+ break;
+ }
+ case Expression::Id::SIMDBitselectId: {
+ self->pushTask(SubType::doVisitSIMDBitselect, currp);
+ self->pushTask(SubType::scan, &curr->cast<SIMDBitselect>()->left);
+ self->pushTask(SubType::scan, &curr->cast<SIMDBitselect>()->right);
+ self->pushTask(SubType::scan, &curr->cast<SIMDBitselect>()->cond);
+ break;
+ }
+ case Expression::Id::SIMDShiftId: {
+ self->pushTask(SubType::doVisitSIMDShift, currp);
+ self->pushTask(SubType::scan, &curr->cast<SIMDShift>()->vec);
+ self->pushTask(SubType::scan, &curr->cast<SIMDShift>()->shift);
+ break;
+ }
case Expression::Id::ConstId: {
self->pushTask(SubType::doVisitConst, currp);
break;
diff --git a/src/wasm.h b/src/wasm.h
index b09b4d7d3..52a0ca299 100644
--- a/src/wasm.h
+++ b/src/wasm.h
@@ -25,6 +25,7 @@
#define wasm_wasm_h
#include <algorithm>
+#include <array>
#include <cassert>
#include <map>
#include <string>
@@ -43,7 +44,8 @@ struct FeatureSet {
Atomics = 1 << 0,
MutableGlobals = 1 << 1,
TruncSat = 1 << 2,
- All = Atomics | MutableGlobals | TruncSat
+ SIMD = 1 << 3,
+ All = Atomics | MutableGlobals | TruncSat | SIMD
};
FeatureSet() : features(MVP) {}
@@ -54,13 +56,15 @@ struct FeatureSet {
bool hasAtomics() const { return features & Atomics; }
bool hasMutableGlobals() const { return features & MutableGlobals; }
bool hasTruncSat() const { return features & TruncSat; }
- bool hasAll() const { return features & (Atomics | MutableGlobals | TruncSat); }
+ bool hasSIMD() const { return features & SIMD; }
+ bool hasAll() const { return features & All; }
void makeMVP() { features = MVP; }
void set(Feature f, bool v = true) { features = v ? (features | f) : (features & ~f); }
void setAtomics(bool v = true) { set(Atomics, v); }
void setMutableGlobals(bool v = true) { set(MutableGlobals, v); }
void setTruncSat(bool v = true) { set(TruncSat, v); }
+ void setSIMD(bool v = true) { set(SIMD, v); }
void setAll(bool v = true) { features = v ? All : MVP; }
private:
@@ -116,6 +120,15 @@ enum UnaryOp {
// Saturating float-to-int
TruncSatSFloat32ToInt32, TruncSatUFloat32ToInt32, TruncSatSFloat64ToInt32, TruncSatUFloat64ToInt32,
TruncSatSFloat32ToInt64, TruncSatUFloat32ToInt64, TruncSatSFloat64ToInt64, TruncSatUFloat64ToInt64,
+ // SIMD splats
+ SplatVecI8x16, SplatVecI16x8, SplatVecI32x4, SplatVecI64x2, SplatVecF32x4, SplatVecF64x2,
+ // SIMD arithmetic
+ NotVec128,
+ NegVecI8x16, AnyTrueVecI8x16, AllTrueVecI8x16, NegVecI16x8, AnyTrueVecI16x8, AllTrueVecI16x8,
+ NegVecI32x4, AnyTrueVecI32x4, AllTrueVecI32x4, NegVecI64x2, AnyTrueVecI64x2, AllTrueVecI64x2,
+ AbsVecF32x4, NegVecF32x4, SqrtVecF32x4, AbsVecF64x2, NegVecF64x2, SqrtVecF64x2,
+ TruncSatSVecF32x4ToVecI32x4, TruncSatUVecF32x4ToVecI32x4, TruncSatSVecF64x2ToVecI64x2, TruncSatUVecF64x2ToVecI64x2,
+ ConvertSVecI32x4ToVecF32x4, ConvertUVecI32x4ToVecF32x4, ConvertSVecI64x2ToVecF64x2, ConvertUVecI64x2ToVecF64x2,
InvalidUnary
};
@@ -144,6 +157,19 @@ enum BinaryOp {
// relational ops
EqFloat64, NeFloat64, // int or float
LtFloat64, LeFloat64, GtFloat64, GeFloat64, // float
+ // SIMD relational ops (return vectors)
+ EqVecI8x16, NeVecI8x16, LtSVecI8x16, LtUVecI8x16, GtSVecI8x16, GtUVecI8x16, LeSVecI8x16, LeUVecI8x16, GeSVecI8x16, GeUVecI8x16,
+ EqVecI16x8, NeVecI16x8, LtSVecI16x8, LtUVecI16x8, GtSVecI16x8, GtUVecI16x8, LeSVecI16x8, LeUVecI16x8, GeSVecI16x8, GeUVecI16x8,
+ EqVecI32x4, NeVecI32x4, LtSVecI32x4, LtUVecI32x4, GtSVecI32x4, GtUVecI32x4, LeSVecI32x4, LeUVecI32x4, GeSVecI32x4, GeUVecI32x4,
+ EqVecF32x4, NeVecF32x4, LtVecF32x4, GtVecF32x4, LeVecF32x4, GeVecF32x4,
+ EqVecF64x2, NeVecF64x2, LtVecF64x2, GtVecF64x2, LeVecF64x2, GeVecF64x2,
+ // SIMD arithmetic
+ AndVec128, OrVec128, XorVec128,
+ AddVecI8x16, AddSatSVecI8x16, AddSatUVecI8x16, SubVecI8x16, SubSatSVecI8x16, SubSatUVecI8x16, MulVecI8x16,
+ AddVecI16x8, AddSatSVecI16x8, AddSatUVecI16x8, SubVecI16x8, SubSatSVecI16x8, SubSatUVecI16x8, MulVecI16x8,
+ AddVecI32x4, SubVecI32x4, MulVecI32x4, AddVecI64x2, SubVecI64x2,
+ AddVecF32x4, SubVecF32x4, MulVecF32x4, DivVecF32x4, MinVecF32x4, MaxVecF32x4,
+ AddVecF64x2, SubVecF64x2, MulVecF64x2, DivVecF64x2, MinVecF64x2, MaxVecF64x2,
InvalidBinary
};
@@ -156,6 +182,20 @@ enum AtomicRMWOp {
Add, Sub, And, Or, Xor, Xchg
};
+enum SIMDExtractOp {
+ ExtractLaneSVecI8x16, ExtractLaneUVecI8x16, ExtractLaneSVecI16x8, ExtractLaneUVecI16x8,
+ ExtractLaneVecI32x4, ExtractLaneVecI64x2, ExtractLaneVecF32x4, ExtractLaneVecF64x2
+};
+
+enum SIMDReplaceOp {
+ ReplaceLaneVecI8x16, ReplaceLaneVecI16x8, ReplaceLaneVecI32x4, ReplaceLaneVecI64x2, ReplaceLaneVecF32x4, ReplaceLaneVecF64x2
+};
+
+enum SIMDShiftOp {
+ ShlVecI8x16, ShrSVecI8x16, ShrUVecI8x16, ShlVecI16x8, ShrSVecI16x8, ShrUVecI16x8,
+ ShlVecI32x4, ShrSVecI32x4, ShrUVecI32x4, ShlVecI64x2, ShrSVecI64x2, ShrUVecI64x2
+};
+
//
// Expressions
//
@@ -206,6 +246,11 @@ public:
AtomicCmpxchgId,
AtomicWaitId,
AtomicWakeId,
+ SIMDExtractId,
+ SIMDReplaceId,
+ SIMDShuffleId,
+ SIMDBitselectId,
+ SIMDShiftId,
NumExpressionIds
};
Id _id;
@@ -502,6 +547,67 @@ class AtomicWake : public SpecificExpression<Expression::AtomicWakeId> {
void finalize();
};
+class SIMDExtract : public SpecificExpression<Expression::SIMDExtractId> {
+ public:
+ SIMDExtract() = default;
+ SIMDExtract(MixedArena& allocator) : SIMDExtract() {}
+
+ SIMDExtractOp op;
+ Expression* vec;
+ uint8_t idx;
+
+ void finalize();
+};
+
+class SIMDReplace : public SpecificExpression<Expression::SIMDReplaceId> {
+ public:
+ SIMDReplace() = default;
+ SIMDReplace(MixedArena& allocator) : SIMDReplace() {}
+
+ SIMDReplaceOp op;
+ Expression* vec;
+ uint8_t idx;
+ Expression* value;
+
+ void finalize();
+};
+
+class SIMDShuffle : public SpecificExpression<Expression::SIMDShuffleId> {
+ public:
+ SIMDShuffle() = default;
+ SIMDShuffle(MixedArena& allocator) : SIMDShuffle() {}
+
+ Expression* left;
+ Expression* right;
+ std::array<uint8_t, 16> mask;
+
+ void finalize();
+};
+
+class SIMDBitselect : public SpecificExpression<Expression::SIMDBitselectId> {
+ public:
+ SIMDBitselect() = default;
+ SIMDBitselect(MixedArena& allocator) : SIMDBitselect() {}
+
+ Expression* left;
+ Expression* right;
+ Expression* cond;
+
+ void finalize();
+};
+
+class SIMDShift : public SpecificExpression<Expression::SIMDShiftId> {
+ public:
+ SIMDShift() = default;
+ SIMDShift(MixedArena& allocator) : SIMDShift() {}
+
+ SIMDShiftOp op;
+ Expression* vec;
+ Expression* shift;
+
+ void finalize();
+};
+
class Const : public SpecificExpression<Expression::ConstId> {
public:
Const() {}
diff --git a/src/wasm/literal.cpp b/src/wasm/literal.cpp
index 7b9e64e43..8d44b9b73 100644
--- a/src/wasm/literal.cpp
+++ b/src/wasm/literal.cpp
@@ -28,6 +28,52 @@
namespace wasm {
+template<int N>
+using LaneArray = std::array<Literal, N>;
+
+Literal::Literal(const uint8_t init[16]) : type(Type::v128) {
+ memcpy(&v128, init, 16);
+}
+
+template<typename LaneT, int Lanes>
+static void extractBytes(uint8_t (&dest)[16], const LaneArray<Lanes>& lanes) {
+ std::array<uint8_t, 16> bytes;
+ const size_t lane_width = 16 / Lanes;
+ for (size_t lane_idx = 0; lane_idx < Lanes; ++lane_idx) {
+ uint8_t bits[16];
+ lanes[lane_idx].getBits(bits);
+ LaneT lane;
+ memcpy(&lane, bits, sizeof(lane));
+ for (size_t offset = 0; offset < lane_width; ++offset) {
+ bytes.at(lane_idx * lane_width + offset) = uint8_t(lane >> (8 * offset));
+ }
+ }
+ memcpy(&dest, bytes.data(), sizeof(bytes));
+}
+
+Literal::Literal(const LaneArray<16>& lanes) : type(Type::v128) {
+ extractBytes<uint8_t, 16>(v128, lanes);
+}
+
+Literal::Literal(const LaneArray<8>& lanes) : type(Type::v128) {
+ extractBytes<uint16_t, 8>(v128, lanes);
+}
+
+Literal::Literal(const LaneArray<4>& lanes) : type(Type::v128) {
+ extractBytes<uint32_t, 4>(v128, lanes);
+}
+
+Literal::Literal(const LaneArray<2>& lanes) : type(Type::v128) {
+ extractBytes<uint64_t, 2>(v128, lanes);
+}
+
+std::array<uint8_t, 16> Literal::getv128() const {
+ assert(type == Type::v128);
+ std::array<uint8_t, 16> ret;
+ memcpy(ret.data(), v128, sizeof(ret));
+ return ret;
+}
+
Literal Literal::castToF32() {
assert(type == Type::i32);
Literal ret(i32);
@@ -72,20 +118,26 @@ double Literal::getFloat() const {
}
}
-int64_t Literal::getBits() const {
+void Literal::getBits(uint8_t (&buf)[16]) const {
+ memset(buf, 0, 16);
switch (type) {
- case Type::i32: case Type::f32: return i32;
- case Type::i64: case Type::f64: return i64;
- case Type::v128: assert(false && "v128 not implemented");
- case Type::none: case Type::unreachable: WASM_UNREACHABLE();
+ case Type::i32:
+ case Type::f32: memcpy(buf, &i32, sizeof(i32)); break;
+ case Type::i64:
+ case Type::f64: memcpy(buf, &i64, sizeof(i64)); break;
+ case Type::v128: memcpy(buf, &v128, sizeof(v128)); break;
+ case Type::none:
+ case Type::unreachable: WASM_UNREACHABLE();
}
- WASM_UNREACHABLE();
}
bool Literal::operator==(const Literal& other) const {
if (type != other.type) return false;
if (type == none) return true;
- return getBits() == other.getBits();
+ uint8_t bits[16], other_bits[16];
+ getBits(bits);
+ other.getBits(other_bits);
+ return memcmp(bits, other_bits, 16) == 0;
}
bool Literal::operator!=(const Literal& other) const {
@@ -158,6 +210,15 @@ void Literal::printDouble(std::ostream& o, double d) {
o << text;
}
+void Literal::printVec128(std::ostream& o, const std::array<uint8_t, 16>& v) {
+ o << std::hex;
+ for (auto i = 0; i < 16; ++i) {
+ o << "0x" << uint32_t(v[i]);
+ if (i < 15) o << " ";
+ }
+ o << std::dec;
+}
+
std::ostream& operator<<(std::ostream& o, Literal literal) {
prepareMinorColor(o) << printType(literal.type) << ".const ";
switch (literal.type) {
@@ -166,7 +227,7 @@ std::ostream& operator<<(std::ostream& o, Literal literal) {
case Type::i64: o << literal.i64; break;
case Type::f32: literal.printFloat(o, literal.getf32()); break;
case Type::f64: literal.printDouble(o, literal.getf64()); break;
- case Type::v128: assert(false && "v128 not implemented yet");
+ case Type::v128: o << "i32 "; literal.printVec128(o, literal.getv128()); break;
case Type::unreachable: WASM_UNREACHABLE();
}
restoreNormalColor(o);
@@ -450,6 +511,79 @@ Literal Literal::sub(const Literal& other) const {
WASM_UNREACHABLE();
}
+template<typename T>
+static T add_sat_s(T a, T b) {
+ static_assert(std::is_signed<T>::value, "Trying to instantiate add_sat_s with unsigned type");
+ using UT = typename std::make_unsigned<T>::type;
+ UT ua = static_cast<UT>(a);
+ UT ub = static_cast<UT>(b);
+ UT ures = ua + ub;
+ // overflow if sign of result is different from sign of a and b
+ if (static_cast<T>((ures ^ ua) & (ures ^ ub)) < 0) {
+ return (a < 0)
+ ? std::numeric_limits<T>::min()
+ : std::numeric_limits<T>::max();
+ }
+ return static_cast<T>(ures);
+}
+
+template<typename T>
+static T sub_sat_s(T a, T b) {
+ static_assert(std::is_signed<T>::value, "Trying to instantiate sub_sat_s with unsigned type");
+ using UT = typename std::make_unsigned<T>::type;
+ UT ua = static_cast<UT>(a);
+ UT ub = static_cast<UT>(b);
+ UT ures = ua - ub;
+ // overflow if a and b have different signs and result and a differ in sign
+ if (static_cast<T>((ua ^ ub) & (ures ^ ua)) < 0) {
+ return (a < 0)
+ ? std::numeric_limits<T>::min()
+ : std::numeric_limits<T>::max();
+ }
+ return static_cast<T>(ures);
+}
+
+template<typename T>
+static T add_sat_u(T a, T b) {
+ static_assert(std::is_unsigned<T>::value, "Trying to instantiate add_sat_u with signed type");
+ T res = a + b;
+ // overflow if result is less than arguments
+ return (res < a) ? std::numeric_limits<T>::max() : res;
+}
+
+template<typename T>
+static T sub_sat_u(T a, T b) {
+ static_assert(std::is_unsigned<T>::value, "Trying to instantiate sub_sat_u with signed type");
+ T res = a - b;
+ // overflow if result is greater than a
+ return (res > a) ? 0 : res;
+}
+
+Literal Literal::addSatSI8(const Literal& other) const {
+ return Literal(add_sat_s<int8_t>(geti32(), other.geti32()));
+}
+Literal Literal::addSatUI8(const Literal& other) const {
+ return Literal(add_sat_u<uint8_t>(geti32(), other.geti32()));
+}
+Literal Literal::addSatSI16(const Literal& other) const {
+ return Literal(add_sat_s<int16_t>(geti32(), other.geti32()));
+}
+Literal Literal::addSatUI16(const Literal& other) const {
+ return Literal(add_sat_u<uint16_t>(geti32(), other.geti32()));
+}
+Literal Literal::subSatSI8(const Literal& other) const {
+ return Literal(sub_sat_s<int8_t>(geti32(), other.geti32()));
+}
+Literal Literal::subSatUI8(const Literal& other) const {
+ return Literal(sub_sat_u<uint8_t>(geti32(), other.geti32()));
+}
+Literal Literal::subSatSI16(const Literal& other) const {
+ return Literal(sub_sat_s<int16_t>(geti32(), other.geti32()));
+}
+Literal Literal::subSatUI16(const Literal& other) const {
+ return Literal(sub_sat_u<uint16_t>(geti32(), other.geti32()));
+}
+
Literal Literal::mul(const Literal& other) const {
switch (type) {
case Type::i32: return Literal(uint32_t(i32) * uint32_t(other.i32));
@@ -784,4 +918,538 @@ Literal Literal::copysign(const Literal& other) const {
}
}
+template<typename LaneT, int Lanes>
+static LaneArray<Lanes> getLanes(const Literal& val) {
+ assert(val.type == Type::v128);
+ const size_t lane_width = 16 / Lanes;
+ std::array<uint8_t, 16> bytes = val.getv128();
+ LaneArray<Lanes> lanes;
+ for (size_t lane_idx = 0; lane_idx < Lanes; ++lane_idx) {
+ LaneT lane(0);
+ for (size_t offset = 0; offset < lane_width; ++offset) {
+ lane |= LaneT(bytes.at(lane_idx * lane_width + offset)) << LaneT(8 * offset);
+ }
+ lanes.at(lane_idx) = Literal(lane);
+ }
+ return lanes;
+}
+
+LaneArray<16> Literal::getLanesSI8x16() const {
+ return getLanes<int8_t, 16>(*this);
+}
+LaneArray<16> Literal::getLanesUI8x16() const {
+ return getLanes<uint8_t, 16>(*this);
+}
+LaneArray<8> Literal::getLanesSI16x8() const {
+ return getLanes<int16_t, 8>(*this);
+}
+LaneArray<8> Literal::getLanesUI16x8() const {
+ return getLanes<uint16_t, 8>(*this);
+}
+LaneArray<4> Literal::getLanesI32x4() const {
+ return getLanes<int32_t, 4>(*this);
+}
+LaneArray<2> Literal::getLanesI64x2() const {
+ return getLanes<int64_t, 2>(*this);
+}
+LaneArray<4> Literal::getLanesF32x4() const {
+ auto lanes = getLanesI32x4();
+ for (size_t i = 0; i < lanes.size(); ++i) {
+ lanes[i] = lanes[i].castToF32();
+ }
+ return lanes;
+}
+LaneArray<2> Literal::getLanesF64x2() const {
+ auto lanes = getLanesI64x2();
+ for (size_t i = 0; i < lanes.size(); ++i) {
+ lanes[i] = lanes[i].castToF64();
+ }
+ return lanes;
+}
+
+Literal Literal::shuffleV8x16(const Literal& other, const std::array<uint8_t, 16>& mask) const {
+ assert(type == Type::v128);
+ uint8_t bytes[16];
+ for (size_t i = 0; i < mask.size(); ++i) {
+ bytes[i] = (mask[i] < 16) ? v128[mask[i]] : other.v128[mask[i] - 16];
+ }
+ return Literal(bytes);
+}
+
+template<Type Ty, int Lanes>
+static Literal splat(const Literal& val) {
+ assert(val.type == Ty);
+ LaneArray<Lanes> lanes;
+ lanes.fill(val);
+ return Literal(lanes);
+}
+
+Literal Literal::splatI8x16() const { return splat<Type::i32, 16>(*this); }
+Literal Literal::splatI16x8() const { return splat<Type::i32, 8>(*this); }
+Literal Literal::splatI32x4() const { return splat<Type::i32, 4>(*this); }
+Literal Literal::splatI64x2() const { return splat<Type::i64, 2>(*this); }
+Literal Literal::splatF32x4() const { return splat<Type::f32, 4>(*this); }
+Literal Literal::splatF64x2() const { return splat<Type::f64, 2>(*this); }
+
+Literal Literal::extractLaneSI8x16(uint8_t idx) const { return getLanesSI8x16().at(idx); }
+Literal Literal::extractLaneUI8x16(uint8_t idx) const { return getLanesUI8x16().at(idx); }
+Literal Literal::extractLaneSI16x8(uint8_t idx) const { return getLanesSI16x8().at(idx); }
+Literal Literal::extractLaneUI16x8(uint8_t idx) const { return getLanesUI16x8().at(idx); }
+Literal Literal::extractLaneI32x4(uint8_t idx) const { return getLanesI32x4().at(idx); }
+Literal Literal::extractLaneI64x2(uint8_t idx) const { return getLanesI64x2().at(idx); }
+Literal Literal::extractLaneF32x4(uint8_t idx) const { return getLanesF32x4().at(idx); }
+Literal Literal::extractLaneF64x2(uint8_t idx) const { return getLanesF64x2().at(idx); }
+
+template<int Lanes, LaneArray<Lanes> (Literal::*IntoLanes)() const>
+static Literal replace(const Literal& val, const Literal& other, uint8_t idx) {
+ LaneArray<Lanes> lanes = (val.*IntoLanes)();
+ lanes.at(idx) = other;
+ auto ret = Literal(lanes);
+ return ret;
+}
+
+Literal Literal::replaceLaneI8x16(const Literal& other, uint8_t idx) const {
+ return replace<16, &Literal::getLanesUI8x16>(*this, other, idx);
+}
+Literal Literal::replaceLaneI16x8(const Literal& other, uint8_t idx) const {
+ return replace<8, &Literal::getLanesUI16x8>(*this, other, idx);
+}
+Literal Literal::replaceLaneI32x4(const Literal& other, uint8_t idx) const {
+ return replace<4, &Literal::getLanesI32x4>(*this, other, idx);
+}
+Literal Literal::replaceLaneI64x2(const Literal& other, uint8_t idx) const {
+ return replace<2, &Literal::getLanesI64x2>(*this, other, idx);
+}
+Literal Literal::replaceLaneF32x4(const Literal& other, uint8_t idx) const {
+ return replace<4, &Literal::getLanesF32x4>(*this, other, idx);
+}
+Literal Literal::replaceLaneF64x2(const Literal& other, uint8_t idx) const {
+ return replace<2, &Literal::getLanesF64x2>(*this, other, idx);
+}
+
+template<int Lanes, LaneArray<Lanes> (Literal::*IntoLanes)() const,
+ Literal (Literal::*UnaryOp)(void) const>
+static Literal unary(const Literal& val) {
+ LaneArray<Lanes> lanes = (val.*IntoLanes)();
+ for (size_t i = 0; i < Lanes; ++i) {
+ lanes[i] = (lanes[i].*UnaryOp)();
+ }
+ return Literal(lanes);
+}
+
+Literal Literal::notV128() const {
+ std::array<uint8_t, 16> ones;
+ ones.fill(0xff);
+ return xorV128(Literal(ones.data()));
+}
+Literal Literal::negI8x16() const {
+ return unary<16, &Literal::getLanesUI8x16, &Literal::neg>(*this);
+}
+Literal Literal::negI16x8() const {
+ return unary<8, &Literal::getLanesUI16x8, &Literal::neg>(*this);
+}
+Literal Literal::negI32x4() const {
+ return unary<4, &Literal::getLanesI32x4, &Literal::neg>(*this);
+}
+Literal Literal::negI64x2() const {
+ return unary<2, &Literal::getLanesI64x2, &Literal::neg>(*this);
+}
+Literal Literal::absF32x4() const {
+ return unary<4, &Literal::getLanesF32x4, &Literal::abs>(*this);
+}
+Literal Literal::negF32x4() const {
+ return unary<4, &Literal::getLanesF32x4, &Literal::neg>(*this);
+}
+Literal Literal::sqrtF32x4() const {
+ return unary<4, &Literal::getLanesF32x4, &Literal::sqrt>(*this);
+}
+Literal Literal::absF64x2() const {
+ return unary<2, &Literal::getLanesF64x2, &Literal::abs>(*this);
+}
+Literal Literal::negF64x2() const {
+ return unary<2, &Literal::getLanesF64x2, &Literal::neg>(*this);
+}
+Literal Literal::sqrtF64x2() const {
+ return unary<2, &Literal::getLanesF64x2, &Literal::sqrt>(*this);
+}
+Literal Literal::truncSatToSI32x4() const {
+ return unary<4, &Literal::getLanesF32x4, &Literal::truncSatToSI32>(*this);
+}
+Literal Literal::truncSatToUI32x4() const {
+ return unary<4, &Literal::getLanesF32x4, &Literal::truncSatToUI32>(*this);
+}
+Literal Literal::truncSatToSI64x2() const {
+ return unary<2, &Literal::getLanesF64x2, &Literal::truncSatToSI64>(*this);
+}
+Literal Literal::truncSatToUI64x2() const {
+ return unary<2, &Literal::getLanesF64x2, &Literal::truncSatToUI64>(*this);
+}
+Literal Literal::convertSToF32x4() const {
+ return unary<4, &Literal::getLanesI32x4, &Literal::convertSIToF32>(*this);
+}
+Literal Literal::convertUToF32x4() const {
+ return unary<4, &Literal::getLanesI32x4, &Literal::convertUIToF32>(*this);
+}
+Literal Literal::convertSToF64x2() const {
+ return unary<2, &Literal::getLanesI64x2, &Literal::convertSIToF64>(*this);
+}
+Literal Literal::convertUToF64x2() const {
+ return unary<2, &Literal::getLanesI64x2, &Literal::convertUIToF64>(*this);
+}
+
+template<int Lanes, LaneArray<Lanes> (Literal::*IntoLanes)() const>
+static Literal any_true(const Literal& val) {
+ LaneArray<Lanes> lanes = (val.*IntoLanes)();
+ for (size_t i = 0; i < Lanes; ++i) {
+ if (lanes[i] != Literal::makeZero(lanes[i].type)) {
+ return Literal(int32_t(1));
+ }
+ }
+ return Literal(int32_t(0));
+}
+
+template<int Lanes, LaneArray<Lanes> (Literal::*IntoLanes)() const>
+static Literal all_true(const Literal& val) {
+ LaneArray<Lanes> lanes = (val.*IntoLanes)();
+ for (size_t i = 0; i < Lanes; ++i) {
+ if (lanes[i] == Literal::makeZero(lanes[i].type)) {
+ return Literal(int32_t(0));
+ }
+ }
+ return Literal(int32_t(1));
+}
+
+Literal Literal::anyTrueI8x16() const {
+ return any_true<16, &Literal::getLanesUI8x16>(*this);
+}
+Literal Literal::allTrueI8x16() const {
+ return all_true<16, &Literal::getLanesUI8x16>(*this);
+}
+Literal Literal::anyTrueI16x8() const {
+ return any_true<8, &Literal::getLanesUI16x8>(*this);
+}
+Literal Literal::allTrueI16x8() const {
+ return all_true<8, &Literal::getLanesUI16x8>(*this);
+}
+Literal Literal::anyTrueI32x4() const {
+ return any_true<4, &Literal::getLanesI32x4>(*this);
+}
+Literal Literal::allTrueI32x4() const {
+ return all_true<4, &Literal::getLanesI32x4>(*this);
+}
+Literal Literal::anyTrueI64x2() const {
+ return any_true<2, &Literal::getLanesI64x2>(*this);
+}
+Literal Literal::allTrueI64x2() const {
+ return all_true<2, &Literal::getLanesI64x2>(*this);
+}
+
+template<int Lanes, LaneArray<Lanes> (Literal::*IntoLanes)() const,
+ Literal (Literal::*ShiftOp)(const Literal&) const>
+static Literal shift(const Literal& vec, const Literal& shift) {
+ assert(shift.type == Type::i32);
+ size_t lane_bits = 128 / Lanes;
+ LaneArray<Lanes> lanes = (vec.*IntoLanes)();
+ for (size_t i = 0; i < Lanes; ++i) {
+ lanes[i] = (lanes[i].*ShiftOp)(Literal(int32_t(shift.geti32() % lane_bits)));
+ }
+ return Literal(lanes);
+}
+
+Literal Literal::shlI8x16(const Literal& other) const {
+ return shift<16, &Literal::getLanesUI8x16, &Literal::shl>(*this, other);
+}
+Literal Literal::shrSI8x16(const Literal& other) const {
+ return shift<16, &Literal::getLanesSI8x16, &Literal::shrS>(*this, other);
+}
+Literal Literal::shrUI8x16(const Literal& other) const {
+ return shift<16, &Literal::getLanesUI8x16, &Literal::shrU>(*this, other);
+}
+Literal Literal::shlI16x8(const Literal& other) const {
+ return shift<8, &Literal::getLanesUI16x8, &Literal::shl>(*this, other);
+}
+Literal Literal::shrSI16x8(const Literal& other) const {
+ return shift<8, &Literal::getLanesSI16x8, &Literal::shrS>(*this, other);
+}
+Literal Literal::shrUI16x8(const Literal& other) const {
+ return shift<8, &Literal::getLanesUI16x8, &Literal::shrU>(*this, other);
+}
+Literal Literal::shlI32x4(const Literal& other) const {
+ return shift<4, &Literal::getLanesI32x4, &Literal::shl>(*this, other);
+}
+Literal Literal::shrSI32x4(const Literal& other) const {
+ return shift<4, &Literal::getLanesI32x4, &Literal::shrS>(*this, other);
+}
+Literal Literal::shrUI32x4(const Literal& other) const {
+ return shift<4, &Literal::getLanesI32x4, &Literal::shrU>(*this, other);
+}
+Literal Literal::shlI64x2(const Literal& other) const {
+ return shift<2, &Literal::getLanesI64x2, &Literal::shl>(*this, other);
+}
+Literal Literal::shrSI64x2(const Literal& other) const {
+ return shift<2, &Literal::getLanesI64x2, &Literal::shrS>(*this, other);
+}
+Literal Literal::shrUI64x2(const Literal& other) const {
+ return shift<2, &Literal::getLanesI64x2, &Literal::shrU>(*this, other);
+}
+
+template<int Lanes, LaneArray<Lanes> (Literal::*IntoLanes)() const,
+ Literal (Literal::*CompareOp)(const Literal&) const,
+ typename LaneT = int32_t>
+static Literal compare(const Literal& val, const Literal& other) {
+ LaneArray<Lanes> lanes = (val.*IntoLanes)();
+ LaneArray<Lanes> other_lanes = (other.*IntoLanes)();
+ for (size_t i = 0; i < Lanes; ++i) {
+ lanes[i] = (lanes[i].*CompareOp)(other_lanes[i]) == Literal(int32_t(1))
+ ? Literal(LaneT(-1))
+ : Literal(LaneT(0));
+ }
+ return Literal(lanes);
+}
+
+Literal Literal::eqI8x16(const Literal& other) const {
+ return compare<16, &Literal::getLanesUI8x16, &Literal::eq>(*this, other);
+}
+Literal Literal::neI8x16(const Literal& other) const {
+ return compare<16, &Literal::getLanesUI8x16, &Literal::ne>(*this, other);
+}
+Literal Literal::ltSI8x16(const Literal& other) const {
+ return compare<16, &Literal::getLanesSI8x16, &Literal::ltS>(*this, other);
+}
+Literal Literal::ltUI8x16(const Literal& other) const {
+ return compare<16, &Literal::getLanesUI8x16, &Literal::ltU>(*this, other);
+}
+Literal Literal::gtSI8x16(const Literal& other) const {
+ return compare<16, &Literal::getLanesSI8x16, &Literal::gtS>(*this, other);
+}
+Literal Literal::gtUI8x16(const Literal& other) const {
+ return compare<16, &Literal::getLanesUI8x16, &Literal::gtU>(*this, other);
+}
+Literal Literal::leSI8x16(const Literal& other) const {
+ return compare<16, &Literal::getLanesSI8x16, &Literal::leS>(*this, other);
+}
+Literal Literal::leUI8x16(const Literal& other) const {
+ return compare<16, &Literal::getLanesUI8x16, &Literal::leU>(*this, other);
+}
+Literal Literal::geSI8x16(const Literal& other) const {
+ return compare<16, &Literal::getLanesSI8x16, &Literal::geS>(*this, other);
+}
+Literal Literal::geUI8x16(const Literal& other) const {
+ return compare<16, &Literal::getLanesUI8x16, &Literal::geU>(*this, other);
+}
+Literal Literal::eqI16x8(const Literal& other) const {
+ return compare<8, &Literal::getLanesUI16x8, &Literal::eq>(*this, other);
+}
+Literal Literal::neI16x8(const Literal& other) const {
+ return compare<8, &Literal::getLanesUI16x8, &Literal::ne>(*this, other);
+}
+Literal Literal::ltSI16x8(const Literal& other) const {
+ return compare<8, &Literal::getLanesSI16x8, &Literal::ltS>(*this, other);
+}
+Literal Literal::ltUI16x8(const Literal& other) const {
+ return compare<8, &Literal::getLanesUI16x8, &Literal::ltU>(*this, other);
+}
+Literal Literal::gtSI16x8(const Literal& other) const {
+ return compare<8, &Literal::getLanesSI16x8, &Literal::gtS>(*this, other);
+}
+Literal Literal::gtUI16x8(const Literal& other) const {
+ return compare<8, &Literal::getLanesUI16x8, &Literal::gtU>(*this, other);
+}
+Literal Literal::leSI16x8(const Literal& other) const {
+ return compare<8, &Literal::getLanesSI16x8, &Literal::leS>(*this, other);
+}
+Literal Literal::leUI16x8(const Literal& other) const {
+ return compare<8, &Literal::getLanesUI16x8, &Literal::leU>(*this, other);
+}
+Literal Literal::geSI16x8(const Literal& other) const {
+ return compare<8, &Literal::getLanesSI16x8, &Literal::geS>(*this, other);
+}
+Literal Literal::geUI16x8(const Literal& other) const {
+ return compare<8, &Literal::getLanesUI16x8, &Literal::geU>(*this, other);
+}
+Literal Literal::eqI32x4(const Literal& other) const {
+ return compare<4, &Literal::getLanesI32x4, &Literal::eq>(*this, other);
+}
+Literal Literal::neI32x4(const Literal& other) const {
+ return compare<4, &Literal::getLanesI32x4, &Literal::ne>(*this, other);
+}
+Literal Literal::ltSI32x4(const Literal& other) const {
+ return compare<4, &Literal::getLanesI32x4, &Literal::ltS>(*this, other);
+}
+Literal Literal::ltUI32x4(const Literal& other) const {
+ return compare<4, &Literal::getLanesI32x4, &Literal::ltU>(*this, other);
+}
+Literal Literal::gtSI32x4(const Literal& other) const {
+ return compare<4, &Literal::getLanesI32x4, &Literal::gtS>(*this, other);
+}
+Literal Literal::gtUI32x4(const Literal& other) const {
+ return compare<4, &Literal::getLanesI32x4, &Literal::gtU>(*this, other);
+}
+Literal Literal::leSI32x4(const Literal& other) const {
+ return compare<4, &Literal::getLanesI32x4, &Literal::leS>(*this, other);
+}
+Literal Literal::leUI32x4(const Literal& other) const {
+ return compare<4, &Literal::getLanesI32x4, &Literal::leU>(*this, other);
+}
+Literal Literal::geSI32x4(const Literal& other) const {
+ return compare<4, &Literal::getLanesI32x4, &Literal::geS>(*this, other);
+}
+Literal Literal::geUI32x4(const Literal& other) const {
+ return compare<4, &Literal::getLanesI32x4, &Literal::geU>(*this, other);
+}
+Literal Literal::eqF32x4(const Literal& other) const {
+ return compare<4, &Literal::getLanesF32x4, &Literal::eq>(*this, other);
+}
+Literal Literal::neF32x4(const Literal& other) const {
+ return compare<4, &Literal::getLanesF32x4, &Literal::ne>(*this, other);
+}
+Literal Literal::ltF32x4(const Literal& other) const {
+ return compare<4, &Literal::getLanesF32x4, &Literal::lt>(*this, other);
+}
+Literal Literal::gtF32x4(const Literal& other) const {
+ return compare<4, &Literal::getLanesF32x4, &Literal::gt>(*this, other);
+}
+Literal Literal::leF32x4(const Literal& other) const {
+ return compare<4, &Literal::getLanesF32x4, &Literal::le>(*this, other);
+}
+Literal Literal::geF32x4(const Literal& other) const {
+ return compare<4, &Literal::getLanesF32x4, &Literal::ge>(*this, other);
+}
+Literal Literal::eqF64x2(const Literal& other) const {
+ return compare<2, &Literal::getLanesF64x2, &Literal::eq, int64_t>(*this, other);
+}
+Literal Literal::neF64x2(const Literal& other) const {
+ return compare<2, &Literal::getLanesF64x2, &Literal::ne, int64_t>(*this, other);
+}
+Literal Literal::ltF64x2(const Literal& other) const {
+ return compare<2, &Literal::getLanesF64x2, &Literal::lt, int64_t>(*this, other);
+}
+Literal Literal::gtF64x2(const Literal& other) const {
+ return compare<2, &Literal::getLanesF64x2, &Literal::gt, int64_t>(*this, other);
+}
+Literal Literal::leF64x2(const Literal& other) const {
+ return compare<2, &Literal::getLanesF64x2, &Literal::le, int64_t>(*this, other);
+}
+Literal Literal::geF64x2(const Literal& other) const {
+ return compare<2, &Literal::getLanesF64x2, &Literal::ge, int64_t>(*this, other);
+}
+
+template<int Lanes, LaneArray<Lanes> (Literal::*IntoLanes)() const,
+ Literal (Literal::*BinaryOp)(const Literal&) const>
+static Literal binary(const Literal& val, const Literal& other) {
+ LaneArray<Lanes> lanes = (val.*IntoLanes)();
+ LaneArray<Lanes> other_lanes = (other.*IntoLanes)();
+ for (size_t i = 0; i < Lanes; ++i) {
+ lanes[i] = (lanes[i].*BinaryOp)(other_lanes[i]);
+ }
+ return Literal(lanes);
+}
+
+Literal Literal::andV128(const Literal& other) const {
+ return binary<4, &Literal::getLanesI32x4, &Literal::and_>(*this, other);
+}
+Literal Literal::orV128(const Literal& other) const {
+ return binary<4, &Literal::getLanesI32x4, &Literal::or_>(*this, other);
+}
+Literal Literal::xorV128(const Literal& other) const {
+ return binary<4, &Literal::getLanesI32x4, &Literal::xor_>(*this, other);
+}
+Literal Literal::addI8x16(const Literal& other) const {
+ return binary<16, &Literal::getLanesUI8x16, &Literal::add>(*this, other);
+}
+Literal Literal::addSaturateSI8x16(const Literal& other) const {
+ return binary<16, &Literal::getLanesUI8x16, &Literal::addSatSI8>(*this, other);
+}
+Literal Literal::addSaturateUI8x16(const Literal& other) const {
+ return binary<16, &Literal::getLanesSI8x16, &Literal::addSatUI8>(*this, other);
+}
+Literal Literal::subI8x16(const Literal& other) const {
+ return binary<16, &Literal::getLanesUI8x16, &Literal::sub>(*this, other);
+}
+Literal Literal::subSaturateSI8x16(const Literal& other) const {
+ return binary<16, &Literal::getLanesUI8x16, &Literal::subSatSI8>(*this, other);
+}
+Literal Literal::subSaturateUI8x16(const Literal& other) const {
+ return binary<16, &Literal::getLanesSI8x16, &Literal::subSatUI8>(*this, other);
+}
+Literal Literal::mulI8x16(const Literal& other) const {
+ return binary<16, &Literal::getLanesUI8x16, &Literal::mul>(*this, other);
+}
+Literal Literal::addI16x8(const Literal& other) const {
+ return binary<8, &Literal::getLanesUI16x8, &Literal::add>(*this, other);
+}
+Literal Literal::addSaturateSI16x8(const Literal& other) const {
+ return binary<8, &Literal::getLanesUI16x8, &Literal::addSatSI16>(*this, other);
+}
+Literal Literal::addSaturateUI16x8(const Literal& other) const {
+ return binary<8, &Literal::getLanesSI16x8, &Literal::addSatUI16>(*this, other);
+}
+Literal Literal::subI16x8(const Literal& other) const {
+ return binary<8, &Literal::getLanesUI16x8, &Literal::sub>(*this, other);
+}
+Literal Literal::subSaturateSI16x8(const Literal& other) const {
+ return binary<8, &Literal::getLanesUI16x8, &Literal::subSatSI16>(*this, other);
+}
+Literal Literal::subSaturateUI16x8(const Literal& other) const {
+ return binary<8, &Literal::getLanesSI16x8, &Literal::subSatUI16>(*this, other);
+}
+Literal Literal::mulI16x8(const Literal& other) const {
+ return binary<8, &Literal::getLanesUI16x8, &Literal::mul>(*this, other);
+}
+Literal Literal::addI32x4(const Literal& other) const {
+ return binary<4, &Literal::getLanesI32x4, &Literal::add>(*this, other);
+}
+Literal Literal::subI32x4(const Literal& other) const {
+ return binary<4, &Literal::getLanesI32x4, &Literal::sub>(*this, other);
+}
+Literal Literal::mulI32x4(const Literal& other) const {
+ return binary<4, &Literal::getLanesI32x4, &Literal::mul>(*this, other);
+}
+Literal Literal::addI64x2(const Literal& other) const {
+ return binary<2, &Literal::getLanesI64x2, &Literal::add>(*this, other);
+}
+Literal Literal::subI64x2(const Literal& other) const {
+ return binary<2, &Literal::getLanesI64x2, &Literal::sub>(*this, other);
+}
+Literal Literal::addF32x4(const Literal& other) const {
+ return binary<4, &Literal::getLanesF32x4, &Literal::add>(*this, other);
+}
+Literal Literal::subF32x4(const Literal& other) const {
+ return binary<4, &Literal::getLanesF32x4, &Literal::sub>(*this, other);
+}
+Literal Literal::mulF32x4(const Literal& other) const {
+ return binary<4, &Literal::getLanesF32x4, &Literal::mul>(*this, other);
+}
+Literal Literal::divF32x4(const Literal& other) const {
+ return binary<4, &Literal::getLanesF32x4, &Literal::div>(*this, other);
+}
+Literal Literal::minF32x4(const Literal& other) const {
+ return binary<4, &Literal::getLanesF32x4, &Literal::min>(*this, other);
+}
+Literal Literal::maxF32x4(const Literal& other) const {
+ return binary<4, &Literal::getLanesF32x4, &Literal::max>(*this, other);
+}
+Literal Literal::addF64x2(const Literal& other) const {
+ return binary<2, &Literal::getLanesF64x2, &Literal::add>(*this, other);
+}
+Literal Literal::subF64x2(const Literal& other) const {
+ return binary<2, &Literal::getLanesF64x2, &Literal::sub>(*this, other);
+}
+Literal Literal::mulF64x2(const Literal& other) const {
+ return binary<2, &Literal::getLanesF64x2, &Literal::mul>(*this, other);
+}
+Literal Literal::divF64x2(const Literal& other) const {
+ return binary<2, &Literal::getLanesF64x2, &Literal::div>(*this, other);
+}
+Literal Literal::minF64x2(const Literal& other) const {
+ return binary<2, &Literal::getLanesF64x2, &Literal::min>(*this, other);
+}
+Literal Literal::maxF64x2(const Literal& other) const {
+ return binary<2, &Literal::getLanesF64x2, &Literal::max>(*this, other);
+}
+
+Literal Literal::bitselectV128(const Literal& left, const Literal& right) const {
+ return andV128(left).orV128(notV128().andV128(right));
+}
+
} // namespace wasm
diff --git a/src/wasm/wasm-binary.cpp b/src/wasm/wasm-binary.cpp
index 2a7bff51f..a373a5ec6 100644
--- a/src/wasm/wasm-binary.cpp
+++ b/src/wasm/wasm-binary.cpp
@@ -757,6 +757,14 @@ uint64_t WasmBinaryBuilder::getInt64() {
return ret;
}
+uint8_t WasmBinaryBuilder::getLaneIdx(size_t lanes) {
+ if (debug) std::cerr << "<==" << std::endl;
+ auto ret = getInt8();
+ if (ret >= lanes) throwError("Illegal lane index");
+ if (debug) std::cerr << "getLaneIdx(" << lanes << "): " << ret << " ==>" << std::endl;
+ return ret;
+}
+
Literal WasmBinaryBuilder::getFloat32Literal() {
if (debug) std::cerr << "<==" << std::endl;
auto ret = Literal(getInt32());
@@ -773,6 +781,17 @@ Literal WasmBinaryBuilder::getFloat64Literal() {
return ret;
}
+Literal WasmBinaryBuilder::getVec128Literal() {
+ if (debug) std::cerr << "<==" << std::endl;
+ std::array<uint8_t, 16> bytes;
+ for (auto i = 0; i < 16; ++i) {
+ bytes[i] = getInt8();
+ }
+ auto ret = Literal(bytes.data());
+ if (debug) std::cerr << "getVec128: " << ret << " ==>" << std::endl;
+ return ret;
+}
+
uint32_t WasmBinaryBuilder::getU32LEB() {
if (debug) std::cerr << "<==" << std::endl;
U32LEB ret;
@@ -822,6 +841,7 @@ Type WasmBinaryBuilder::getType() {
case BinaryConsts::EncodedType::i64: return i64;
case BinaryConsts::EncodedType::f32: return f32;
case BinaryConsts::EncodedType::f64: return f64;
+ case BinaryConsts::EncodedType::v128: return v128;
case BinaryConsts::EncodedType::AnyFunc:
case BinaryConsts::EncodedType::Func:
throwError("invalid wasm type: " + std::to_string(type));
@@ -1677,7 +1697,7 @@ BinaryConsts::ASTNodes WasmBinaryBuilder::readExpression(Expression*& curr) {
case BinaryConsts::End:
case BinaryConsts::Else: curr = nullptr; break;
case BinaryConsts::AtomicPrefix: {
- code = getInt8();
+ code = static_cast<uint8_t>(getU32LEB());
if (maybeVisitLoad(curr, code, /*isAtomic=*/true)) break;
if (maybeVisitStore(curr, code, /*isAtomic=*/true)) break;
if (maybeVisitAtomicRMW(curr, code)) break;
@@ -1688,11 +1708,26 @@ BinaryConsts::ASTNodes WasmBinaryBuilder::readExpression(Expression*& curr) {
break;
}
case BinaryConsts::TruncSatPrefix: {
- uint32_t code = getU32LEB();
- if (maybeVisitTruncSat(curr, code)) break;
+ auto opcode = getU32LEB();
+ if (maybeVisitTruncSat(curr, opcode)) break;
throwError("invalid code after nontrapping float-to-int prefix: " + std::to_string(code));
break;
}
+ case BinaryConsts::SIMDPrefix: {
+ auto opcode = getU32LEB();
+ if (maybeVisitSIMDBinary(curr, opcode)) break;
+ if (maybeVisitSIMDUnary(curr, opcode)) break;
+ if (maybeVisitSIMDConst(curr, opcode)) break;
+ if (maybeVisitSIMDLoad(curr, opcode)) break;
+ if (maybeVisitSIMDStore(curr, opcode)) break;
+ if (maybeVisitSIMDExtract(curr, opcode)) break;
+ if (maybeVisitSIMDReplace(curr, opcode)) break;
+ if (maybeVisitSIMDShuffle(curr, opcode)) break;
+ if (maybeVisitSIMDBitselect(curr, opcode)) break;
+ if (maybeVisitSIMDShift(curr, opcode)) break;
+ throwError("invalid code after SIMD prefix: " + std::to_string(opcode));
+ break;
+ }
default: {
// otherwise, the code is a subcode TODO: optimize
if (maybeVisitBinary(curr, code)) break;
@@ -2077,7 +2112,6 @@ bool WasmBinaryBuilder::maybeVisitStore(Expression*& out, uint8_t code, bool isA
return true;
}
-
bool WasmBinaryBuilder::maybeVisitAtomicRMW(Expression*& out, uint8_t code) {
if (code < BinaryConsts::AtomicRMWOps_Begin || code > BinaryConsts::AtomicRMWOps_End) return false;
auto* curr = allocator.alloc<AtomicRMW>();
@@ -2359,6 +2393,267 @@ bool WasmBinaryBuilder::maybeVisitBinary(Expression*& out, uint8_t code) {
#undef FLOAT_TYPED_CODE
}
+bool WasmBinaryBuilder::maybeVisitSIMDBinary(Expression*& out, uint32_t code) {
+ Binary* curr;
+ switch (code) {
+ case BinaryConsts::I8x16Eq: curr = allocator.alloc<Binary>(); curr->op = EqVecI8x16; break;
+ case BinaryConsts::I8x16Ne: curr = allocator.alloc<Binary>(); curr->op = NeVecI8x16; break;
+ case BinaryConsts::I8x16LtS: curr = allocator.alloc<Binary>(); curr->op = LtSVecI8x16; break;
+ case BinaryConsts::I8x16LtU: curr = allocator.alloc<Binary>(); curr->op = LtUVecI8x16; break;
+ case BinaryConsts::I8x16GtS: curr = allocator.alloc<Binary>(); curr->op = GtSVecI8x16; break;
+ case BinaryConsts::I8x16GtU: curr = allocator.alloc<Binary>(); curr->op = GtUVecI8x16; break;
+ case BinaryConsts::I8x16LeS: curr = allocator.alloc<Binary>(); curr->op = LeSVecI8x16; break;
+ case BinaryConsts::I8x16LeU: curr = allocator.alloc<Binary>(); curr->op = LeUVecI8x16; break;
+ case BinaryConsts::I8x16GeS: curr = allocator.alloc<Binary>(); curr->op = GeSVecI8x16; break;
+ case BinaryConsts::I8x16GeU: curr = allocator.alloc<Binary>(); curr->op = GeUVecI8x16; break;
+ case BinaryConsts::I16x8Eq: curr = allocator.alloc<Binary>(); curr->op = EqVecI16x8; break;
+ case BinaryConsts::I16x8Ne: curr = allocator.alloc<Binary>(); curr->op = NeVecI16x8; break;
+ case BinaryConsts::I16x8LtS: curr = allocator.alloc<Binary>(); curr->op = LtSVecI16x8; break;
+ case BinaryConsts::I16x8LtU: curr = allocator.alloc<Binary>(); curr->op = LtUVecI16x8; break;
+ case BinaryConsts::I16x8GtS: curr = allocator.alloc<Binary>(); curr->op = GtSVecI16x8; break;
+ case BinaryConsts::I16x8GtU: curr = allocator.alloc<Binary>(); curr->op = GtUVecI16x8; break;
+ case BinaryConsts::I16x8LeS: curr = allocator.alloc<Binary>(); curr->op = LeSVecI16x8; break;
+ case BinaryConsts::I16x8LeU: curr = allocator.alloc<Binary>(); curr->op = LeUVecI16x8; break;
+ case BinaryConsts::I16x8GeS: curr = allocator.alloc<Binary>(); curr->op = GeSVecI16x8; break;
+ case BinaryConsts::I16x8GeU: curr = allocator.alloc<Binary>(); curr->op = GeUVecI16x8; break;
+ case BinaryConsts::I32x4Eq: curr = allocator.alloc<Binary>(); curr->op = EqVecI32x4; break;
+ case BinaryConsts::I32x4Ne: curr = allocator.alloc<Binary>(); curr->op = NeVecI32x4; break;
+ case BinaryConsts::I32x4LtS: curr = allocator.alloc<Binary>(); curr->op = LtSVecI32x4; break;
+ case BinaryConsts::I32x4LtU: curr = allocator.alloc<Binary>(); curr->op = LtUVecI32x4; break;
+ case BinaryConsts::I32x4GtS: curr = allocator.alloc<Binary>(); curr->op = GtSVecI32x4; break;
+ case BinaryConsts::I32x4GtU: curr = allocator.alloc<Binary>(); curr->op = GtUVecI32x4; break;
+ case BinaryConsts::I32x4LeS: curr = allocator.alloc<Binary>(); curr->op = LeSVecI32x4; break;
+ case BinaryConsts::I32x4LeU: curr = allocator.alloc<Binary>(); curr->op = LeUVecI32x4; break;
+ case BinaryConsts::I32x4GeS: curr = allocator.alloc<Binary>(); curr->op = GeSVecI32x4; break;
+ case BinaryConsts::I32x4GeU: curr = allocator.alloc<Binary>(); curr->op = GeUVecI32x4; break;
+ case BinaryConsts::F32x4Eq: curr = allocator.alloc<Binary>(); curr->op = EqVecF32x4; break;
+ case BinaryConsts::F32x4Ne: curr = allocator.alloc<Binary>(); curr->op = NeVecF32x4; break;
+ case BinaryConsts::F32x4Lt: curr = allocator.alloc<Binary>(); curr->op = LtVecF32x4; break;
+ case BinaryConsts::F32x4Gt: curr = allocator.alloc<Binary>(); curr->op = GtVecF32x4; break;
+ case BinaryConsts::F32x4Le: curr = allocator.alloc<Binary>(); curr->op = LeVecF32x4; break;
+ case BinaryConsts::F32x4Ge: curr = allocator.alloc<Binary>(); curr->op = GeVecF32x4; break;
+ case BinaryConsts::F64x2Eq: curr = allocator.alloc<Binary>(); curr->op = EqVecF64x2; break;
+ case BinaryConsts::F64x2Ne: curr = allocator.alloc<Binary>(); curr->op = NeVecF64x2; break;
+ case BinaryConsts::F64x2Lt: curr = allocator.alloc<Binary>(); curr->op = LtVecF64x2; break;
+ case BinaryConsts::F64x2Gt: curr = allocator.alloc<Binary>(); curr->op = GtVecF64x2; break;
+ case BinaryConsts::F64x2Le: curr = allocator.alloc<Binary>(); curr->op = LeVecF64x2; break;
+ case BinaryConsts::F64x2Ge: curr = allocator.alloc<Binary>(); curr->op = GeVecF64x2; break;
+ case BinaryConsts::V128And: curr = allocator.alloc<Binary>(); curr->op = AndVec128; break;
+ case BinaryConsts::V128Or: curr = allocator.alloc<Binary>(); curr->op = OrVec128; break;
+ case BinaryConsts::V128Xor: curr = allocator.alloc<Binary>(); curr->op = XorVec128; break;
+ case BinaryConsts::I8x16Add: curr = allocator.alloc<Binary>(); curr->op = AddVecI8x16; break;
+ case BinaryConsts::I8x16AddSatS: curr = allocator.alloc<Binary>(); curr->op = AddSatSVecI8x16; break;
+ case BinaryConsts::I8x16AddSatU: curr = allocator.alloc<Binary>(); curr->op = AddSatUVecI8x16; break;
+ case BinaryConsts::I8x16Sub: curr = allocator.alloc<Binary>(); curr->op = SubVecI8x16; break;
+ case BinaryConsts::I8x16SubSatS: curr = allocator.alloc<Binary>(); curr->op = SubSatSVecI8x16; break;
+ case BinaryConsts::I8x16SubSatU: curr = allocator.alloc<Binary>(); curr->op = SubSatUVecI8x16; break;
+ case BinaryConsts::I8x16Mul: curr = allocator.alloc<Binary>(); curr->op = MulVecI8x16; break;
+ case BinaryConsts::I16x8Add: curr = allocator.alloc<Binary>(); curr->op = AddVecI16x8; break;
+ case BinaryConsts::I16x8AddSatS: curr = allocator.alloc<Binary>(); curr->op = AddSatSVecI16x8; break;
+ case BinaryConsts::I16x8AddSatU: curr = allocator.alloc<Binary>(); curr->op = AddSatUVecI16x8; break;
+ case BinaryConsts::I16x8Sub: curr = allocator.alloc<Binary>(); curr->op = SubVecI16x8; break;
+ case BinaryConsts::I16x8SubSatS: curr = allocator.alloc<Binary>(); curr->op = SubSatSVecI16x8; break;
+ case BinaryConsts::I16x8SubSatU: curr = allocator.alloc<Binary>(); curr->op = SubSatUVecI16x8; break;
+ case BinaryConsts::I16x8Mul: curr = allocator.alloc<Binary>(); curr->op = MulVecI16x8; break;
+ case BinaryConsts::I32x4Add: curr = allocator.alloc<Binary>(); curr->op = AddVecI32x4; break;
+ case BinaryConsts::I32x4Sub: curr = allocator.alloc<Binary>(); curr->op = SubVecI32x4; break;
+ case BinaryConsts::I32x4Mul: curr = allocator.alloc<Binary>(); curr->op = MulVecI32x4; break;
+ case BinaryConsts::I64x2Add: curr = allocator.alloc<Binary>(); curr->op = AddVecI64x2; break;
+ case BinaryConsts::I64x2Sub: curr = allocator.alloc<Binary>(); curr->op = SubVecI64x2; break;
+ case BinaryConsts::F32x4Add: curr = allocator.alloc<Binary>(); curr->op = AddVecF32x4; break;
+ case BinaryConsts::F32x4Sub: curr = allocator.alloc<Binary>(); curr->op = SubVecF32x4; break;
+ case BinaryConsts::F32x4Mul: curr = allocator.alloc<Binary>(); curr->op = MulVecF32x4; break;
+ case BinaryConsts::F32x4Div: curr = allocator.alloc<Binary>(); curr->op = DivVecF32x4; break;
+ case BinaryConsts::F32x4Min: curr = allocator.alloc<Binary>(); curr->op = MinVecF32x4; break;
+ case BinaryConsts::F32x4Max: curr = allocator.alloc<Binary>(); curr->op = MaxVecF32x4; break;
+ case BinaryConsts::F64x2Add: curr = allocator.alloc<Binary>(); curr->op = AddVecF64x2; break;
+ case BinaryConsts::F64x2Sub: curr = allocator.alloc<Binary>(); curr->op = SubVecF64x2; break;
+ case BinaryConsts::F64x2Mul: curr = allocator.alloc<Binary>(); curr->op = MulVecF64x2; break;
+ case BinaryConsts::F64x2Div: curr = allocator.alloc<Binary>(); curr->op = DivVecF64x2; break;
+ case BinaryConsts::F64x2Min: curr = allocator.alloc<Binary>(); curr->op = MinVecF64x2; break;
+ case BinaryConsts::F64x2Max: curr = allocator.alloc<Binary>(); curr->op = MaxVecF64x2; break;
+ default: return false;
+ }
+ if (debug) std::cerr << "zz node: Binary" << std::endl;
+ curr->right = popNonVoidExpression();
+ curr->left = popNonVoidExpression();
+ curr->finalize();
+ out = curr;
+ return true;
+}
+bool WasmBinaryBuilder::maybeVisitSIMDUnary(Expression*& out, uint32_t code) {
+ Unary* curr;
+ switch (code) {
+ case BinaryConsts::I8x16Splat: curr = allocator.alloc<Unary>(); curr->op = SplatVecI8x16; break;
+ case BinaryConsts::I16x8Splat: curr = allocator.alloc<Unary>(); curr->op = SplatVecI16x8; break;
+ case BinaryConsts::I32x4Splat: curr = allocator.alloc<Unary>(); curr->op = SplatVecI32x4; break;
+ case BinaryConsts::I64x2Splat: curr = allocator.alloc<Unary>(); curr->op = SplatVecI64x2; break;
+ case BinaryConsts::F32x4Splat: curr = allocator.alloc<Unary>(); curr->op = SplatVecF32x4; break;
+ case BinaryConsts::F64x2Splat: curr = allocator.alloc<Unary>(); curr->op = SplatVecF64x2; break;
+ case BinaryConsts::V128Not: curr = allocator.alloc<Unary>(); curr->op = NotVec128; break;
+ case BinaryConsts::I8x16Neg: curr = allocator.alloc<Unary>(); curr->op = NegVecI8x16; break;
+ case BinaryConsts::I8x16AnyTrue: curr = allocator.alloc<Unary>(); curr->op = AnyTrueVecI8x16; break;
+ case BinaryConsts::I8x16AllTrue: curr = allocator.alloc<Unary>(); curr->op = AllTrueVecI8x16; break;
+ case BinaryConsts::I16x8Neg: curr = allocator.alloc<Unary>(); curr->op = NegVecI16x8; break;
+ case BinaryConsts::I16x8AnyTrue: curr = allocator.alloc<Unary>(); curr->op = AnyTrueVecI16x8; break;
+ case BinaryConsts::I16x8AllTrue: curr = allocator.alloc<Unary>(); curr->op = AllTrueVecI16x8; break;
+ case BinaryConsts::I32x4Neg: curr = allocator.alloc<Unary>(); curr->op = NegVecI32x4; break;
+ case BinaryConsts::I32x4AnyTrue: curr = allocator.alloc<Unary>(); curr->op = AnyTrueVecI32x4; break;
+ case BinaryConsts::I32x4AllTrue: curr = allocator.alloc<Unary>(); curr->op = AllTrueVecI32x4; break;
+ case BinaryConsts::I64x2Neg: curr = allocator.alloc<Unary>(); curr->op = NegVecI64x2; break;
+ case BinaryConsts::I64x2AnyTrue: curr = allocator.alloc<Unary>(); curr->op = AnyTrueVecI64x2; break;
+ case BinaryConsts::I64x2AllTrue: curr = allocator.alloc<Unary>(); curr->op = AllTrueVecI64x2; break;
+ case BinaryConsts::F32x4Abs: curr = allocator.alloc<Unary>(); curr->op = AbsVecF32x4; break;
+ case BinaryConsts::F32x4Neg: curr = allocator.alloc<Unary>(); curr->op = NegVecF32x4; break;
+ case BinaryConsts::F32x4Sqrt: curr = allocator.alloc<Unary>(); curr->op = SqrtVecF32x4; break;
+ case BinaryConsts::F64x2Abs: curr = allocator.alloc<Unary>(); curr->op = AbsVecF64x2; break;
+ case BinaryConsts::F64x2Neg: curr = allocator.alloc<Unary>(); curr->op = NegVecF64x2; break;
+ case BinaryConsts::F64x2Sqrt: curr = allocator.alloc<Unary>(); curr->op = SqrtVecF64x2; break;
+ case BinaryConsts::I32x4TruncSatSF32x4: curr = allocator.alloc<Unary>(); curr->op = TruncSatSVecF32x4ToVecI32x4; break;
+ case BinaryConsts::I32x4TruncSatUF32x4: curr = allocator.alloc<Unary>(); curr->op = TruncSatUVecF32x4ToVecI32x4; break;
+ case BinaryConsts::I64x2TruncSatSF64x2: curr = allocator.alloc<Unary>(); curr->op = TruncSatSVecF64x2ToVecI64x2; break;
+ case BinaryConsts::I64x2TruncSatUF64x2: curr = allocator.alloc<Unary>(); curr->op = TruncSatUVecF64x2ToVecI64x2; break;
+ case BinaryConsts::F32x4ConvertSI32x4: curr = allocator.alloc<Unary>(); curr->op = ConvertSVecI32x4ToVecF32x4; break;
+ case BinaryConsts::F32x4ConvertUI32x4: curr = allocator.alloc<Unary>(); curr->op = ConvertUVecI32x4ToVecF32x4; break;
+ case BinaryConsts::F64x2ConvertSI64x2: curr = allocator.alloc<Unary>(); curr->op = ConvertSVecI64x2ToVecF64x2; break;
+ case BinaryConsts::F64x2ConvertUI64x2: curr = allocator.alloc<Unary>(); curr->op = ConvertUVecI64x2ToVecF64x2; break;
+ default: return false;
+ }
+ curr->value = popNonVoidExpression();
+ curr->finalize();
+ out = curr;
+ return true;
+}
+
+bool WasmBinaryBuilder::maybeVisitSIMDConst(Expression*& out, uint32_t code) {
+ if (code != BinaryConsts::V128Const) {
+ return false;
+ }
+ auto* curr = allocator.alloc<Const>();
+ curr->value = getVec128Literal();
+ curr->finalize();
+ out = curr;
+ return true;
+}
+
+bool WasmBinaryBuilder::maybeVisitSIMDLoad(Expression*& out, uint32_t code) {
+ if (code != BinaryConsts::V128Load) {
+ return false;
+ }
+ auto* curr = allocator.alloc<Load>();
+ curr->type = v128;
+ curr->bytes = 16;
+ readMemoryAccess(curr->align, curr->offset);
+ curr->ptr = popNonVoidExpression();
+ curr->finalize();
+ out = curr;
+ return true;
+}
+
+bool WasmBinaryBuilder::maybeVisitSIMDStore(Expression*& out, uint32_t code) {
+ if (code != BinaryConsts::V128Store) {
+ return false;
+ }
+ auto* curr = allocator.alloc<Store>();
+ curr->bytes = 16;
+ curr->valueType = v128;
+ readMemoryAccess(curr->align, curr->offset);
+ curr->value = popNonVoidExpression();
+ curr->ptr = popNonVoidExpression();
+ curr->finalize();
+ out = curr;
+ return true;
+}
+
+bool WasmBinaryBuilder::maybeVisitSIMDExtract(Expression*& out, uint32_t code) {
+ SIMDExtract* curr;
+ switch (code) {
+ case BinaryConsts::I8x16ExtractLaneS: curr = allocator.alloc<SIMDExtract>(); curr->op = ExtractLaneSVecI8x16; curr->idx = getLaneIdx(16); break;
+ case BinaryConsts::I8x16ExtractLaneU: curr = allocator.alloc<SIMDExtract>(); curr->op = ExtractLaneUVecI8x16; curr->idx = getLaneIdx(16); break;
+ case BinaryConsts::I16x8ExtractLaneS: curr = allocator.alloc<SIMDExtract>(); curr->op = ExtractLaneSVecI16x8; curr->idx = getLaneIdx(8); break;
+ case BinaryConsts::I16x8ExtractLaneU: curr = allocator.alloc<SIMDExtract>(); curr->op = ExtractLaneUVecI16x8; curr->idx = getLaneIdx(8); break;
+ case BinaryConsts::I32x4ExtractLane: curr = allocator.alloc<SIMDExtract>(); curr->op = ExtractLaneVecI32x4; curr->idx = getLaneIdx(4); break;
+ case BinaryConsts::I64x2ExtractLane: curr = allocator.alloc<SIMDExtract>(); curr->op = ExtractLaneVecI64x2; curr->idx = getLaneIdx(2); break;
+ case BinaryConsts::F32x4ExtractLane: curr = allocator.alloc<SIMDExtract>(); curr->op = ExtractLaneVecF32x4; curr->idx = getLaneIdx(4); break;
+ case BinaryConsts::F64x2ExtractLane: curr = allocator.alloc<SIMDExtract>(); curr->op = ExtractLaneVecF64x2; curr->idx = getLaneIdx(2); break;
+ default: return false;
+ }
+ curr->vec = popNonVoidExpression();
+ curr->finalize();
+ out = curr;
+ return true;
+}
+
+bool WasmBinaryBuilder::maybeVisitSIMDReplace(Expression*& out, uint32_t code) {
+ SIMDReplace* curr;
+ switch (code) {
+ case BinaryConsts::I8x16ReplaceLane: curr = allocator.alloc<SIMDReplace>(); curr->op = ReplaceLaneVecI8x16; curr->idx = getLaneIdx(16); break;
+ case BinaryConsts::I16x8ReplaceLane: curr = allocator.alloc<SIMDReplace>(); curr->op = ReplaceLaneVecI16x8; curr->idx = getLaneIdx(8); break;
+ case BinaryConsts::I32x4ReplaceLane: curr = allocator.alloc<SIMDReplace>(); curr->op = ReplaceLaneVecI32x4; curr->idx = getLaneIdx(4); break;
+ case BinaryConsts::I64x2ReplaceLane: curr = allocator.alloc<SIMDReplace>(); curr->op = ReplaceLaneVecI64x2; curr->idx = getLaneIdx(2); break;
+ case BinaryConsts::F32x4ReplaceLane: curr = allocator.alloc<SIMDReplace>(); curr->op = ReplaceLaneVecF32x4; curr->idx = getLaneIdx(4); break;
+ case BinaryConsts::F64x2ReplaceLane: curr = allocator.alloc<SIMDReplace>(); curr->op = ReplaceLaneVecF64x2; curr->idx = getLaneIdx(2); break;
+ default: return false;
+ }
+ curr->value = popNonVoidExpression();
+ curr->vec = popNonVoidExpression();
+ curr->finalize();
+ out = curr;
+ return true;
+}
+
+bool WasmBinaryBuilder::maybeVisitSIMDShuffle(Expression*& out, uint32_t code) {
+ if (code != BinaryConsts::V8x16Shuffle) {
+ return false;
+ }
+ auto* curr = allocator.alloc<SIMDShuffle>();
+ for (auto i = 0; i < 16; ++i) {
+ curr->mask[i] = getLaneIdx(32);
+ }
+ curr->right = popNonVoidExpression();
+ curr->left = popNonVoidExpression();
+ curr->finalize();
+ out = curr;
+ return true;
+}
+
+bool WasmBinaryBuilder::maybeVisitSIMDBitselect(Expression*& out, uint32_t code) {
+ if (code != BinaryConsts::V128Bitselect) {
+ return false;
+ }
+ auto* curr = allocator.alloc<SIMDBitselect>();
+ curr->cond = popNonVoidExpression();
+ curr->right = popNonVoidExpression();
+ curr->left = popNonVoidExpression();
+ curr->finalize();
+ out = curr;
+ return true;
+}
+
+bool WasmBinaryBuilder::maybeVisitSIMDShift(Expression*& out, uint32_t code) {
+ SIMDShift* curr;
+ switch (code) {
+ case BinaryConsts::I8x16Shl: curr = allocator.alloc<SIMDShift>(); curr->op = ShlVecI8x16; break;
+ case BinaryConsts::I8x16ShrS: curr = allocator.alloc<SIMDShift>(); curr->op = ShrSVecI8x16; break;
+ case BinaryConsts::I8x16ShrU: curr = allocator.alloc<SIMDShift>(); curr->op = ShrUVecI8x16; break;
+ case BinaryConsts::I16x8Shl: curr = allocator.alloc<SIMDShift>(); curr->op = ShlVecI16x8; break;
+ case BinaryConsts::I16x8ShrS: curr = allocator.alloc<SIMDShift>(); curr->op = ShrSVecI16x8; break;
+ case BinaryConsts::I16x8ShrU: curr = allocator.alloc<SIMDShift>(); curr->op = ShrUVecI16x8; break;
+ case BinaryConsts::I32x4Shl: curr = allocator.alloc<SIMDShift>(); curr->op = ShlVecI32x4; break;
+ case BinaryConsts::I32x4ShrS: curr = allocator.alloc<SIMDShift>(); curr->op = ShrSVecI32x4; break;
+ case BinaryConsts::I32x4ShrU: curr = allocator.alloc<SIMDShift>(); curr->op = ShrUVecI32x4; break;
+ case BinaryConsts::I64x2Shl: curr = allocator.alloc<SIMDShift>(); curr->op = ShlVecI64x2; break;
+ case BinaryConsts::I64x2ShrS: curr = allocator.alloc<SIMDShift>(); curr->op = ShrSVecI64x2; break;
+ case BinaryConsts::I64x2ShrU: curr = allocator.alloc<SIMDShift>(); curr->op = ShrUVecI64x2; break;
+ default: return false;
+ }
+ curr->shift = popNonVoidExpression();
+ curr->vec = popNonVoidExpression();
+ curr->finalize();
+ out = curr;
+ return true;
+}
+
void WasmBinaryBuilder::visitSelect(Select* curr) {
if (debug) std::cerr << "zz node: Select" << std::endl;
curr->condition = popNonVoidExpression();
diff --git a/src/wasm/wasm-s-parser.cpp b/src/wasm/wasm-s-parser.cpp
index de1e4f2e9..ac60cb208 100644
--- a/src/wasm/wasm-s-parser.cpp
+++ b/src/wasm/wasm-s-parser.cpp
@@ -632,6 +632,11 @@ Type SExpressionWasmBuilder::stringToType(const char* str, bool allowError, bool
if (str[1] == '3' && str[2] == '2' && (prefix || str[3] == 0)) return f32;
if (str[1] == '6' && str[2] == '4' && (prefix || str[3] == 0)) return f64;
}
+ if (str[0] == 'v') {
+ if (str[1] == '1' && str[2] == '2' && str[3] == '8' && (prefix || str[4] == 0)) {
+ return v128;
+ }
+ }
if (allowError) return none;
throw ParseException("invalid wasm type");
}
@@ -859,8 +864,69 @@ Expression* SExpressionWasmBuilder::makeThenOrElse(Element& s) {
}
Expression* SExpressionWasmBuilder::makeConst(Element& s, Type type) {
- auto ret = parseConst(s[1]->str(), type, allocator);
- if (!ret) throw ParseException("bad const");
+ if (type != v128) {
+ auto ret = parseConst(s[1]->str(), type, allocator);
+ if (!ret) throw ParseException("bad const");
+ return ret;
+ }
+
+ auto ret = allocator.alloc<Const>();
+ auto getLiteral = [](Expression* expr) {
+ if (expr == nullptr) {
+ throw ParseException("Could not parse v128 lane");
+ }
+ return expr->cast<Const>()->value;
+ };
+ Type lane_t = stringToType(s[1]->str());
+ size_t lanes = s.size() - 2;
+ switch (lanes) {
+ case 2: {
+ if (lane_t != i64 && lane_t != f64) {
+ throw ParseException("Unexpected v128 literal lane type");
+ }
+ std::array<Literal, 2> lanes;
+ for (size_t i = 0; i < 2; ++i) {
+ lanes[i] = getLiteral(parseConst(s[i+2]->str(), lane_t, allocator));
+ }
+ ret->value = Literal(lanes);
+ break;
+ }
+ case 4: {
+ if (lane_t != i32 && lane_t != f32) {
+ throw ParseException("Unexpected v128 literal lane type");
+ }
+ std::array<Literal, 4> lanes;
+ for (size_t i = 0; i < 4; ++i) {
+ lanes[i] = getLiteral(parseConst(s[i+2]->str(), lane_t, allocator));
+ }
+ ret->value = Literal(lanes);
+ break;
+ }
+ case 8: {
+ if (lane_t != i32) {
+ throw ParseException("Unexpected v128 literal lane type");
+ }
+ std::array<Literal, 8> lanes;
+ for (size_t i = 0; i < 8; ++i) {
+ lanes[i] = getLiteral(parseConst(s[i+2]->str(), lane_t, allocator));
+ }
+ ret->value = Literal(lanes);
+ break;
+ }
+ case 16: {
+ if (lane_t != i32) {
+ throw ParseException("Unexpected v128 literal lane type");
+ }
+ std::array<Literal, 16> lanes;
+ for (size_t i = 0; i < 16; ++i) {
+ lanes[i] = getLiteral(parseConst(s[i+2]->str(), lane_t, allocator));
+ }
+ ret->value = Literal(lanes);
+ break;
+ }
+ default: throw ParseException("Unexpected number of lanes in v128 literal");
+ }
+ ret->finalize();
return ret;
}
@@ -1011,6 +1077,63 @@ Expression* SExpressionWasmBuilder::makeAtomicWake(Element& s) {
return ret;
}
+static uint8_t parseLaneIdx(const Element* s, size_t lanes) {
+ const char *str = s->c_str();
+ char *end;
+ auto n = static_cast<unsigned long long>(strtoll(str, &end, 10));
+ if (end == str || *end != '\0') throw ParseException("Expected lane index");
+ if (n > lanes) throw ParseException("lane index must be less than " + std::to_string(lanes));
+ return uint8_t(n);
+}
+
+Expression* SExpressionWasmBuilder::makeSIMDExtract(Element& s, SIMDExtractOp op, size_t lanes) {
+ auto ret = allocator.alloc<SIMDExtract>();
+ ret->op = op;
+ ret->idx = parseLaneIdx(s[1], lanes);
+ ret->vec = parseExpression(s[2]);
+ ret->finalize();
+ return ret;
+}
+
+Expression* SExpressionWasmBuilder::makeSIMDReplace(Element& s, SIMDReplaceOp op, size_t lanes) {
+ auto ret = allocator.alloc<SIMDReplace>();
+ ret->op = op;
+ ret->idx = parseLaneIdx(s[1], lanes);
+ ret->vec = parseExpression(s[2]);
+ ret->value = parseExpression(s[3]);
+ ret->finalize();
+ return ret;
+}
+
+Expression* SExpressionWasmBuilder::makeSIMDShuffle(Element& s) {
+ auto ret = allocator.alloc<SIMDShuffle>();
+ for (size_t i = 0; i < 16; ++i) {
+ ret->mask[i] = parseLaneIdx(s[i+1], 32);
+ }
+ ret->left = parseExpression(s[17]);
+ ret->right = parseExpression(s[18]);
+ ret->finalize();
+ return ret;
+}
+
+Expression* SExpressionWasmBuilder::makeSIMDBitselect(Element& s) {
+ auto ret = allocator.alloc<SIMDBitselect>();
+ ret->left = parseExpression(s[1]);
+ ret->right = parseExpression(s[2]);
+ ret->cond = parseExpression(s[3]);
+ ret->finalize();
+ return ret;
+}
+
+Expression* SExpressionWasmBuilder::makeSIMDShift(Element& s, SIMDShiftOp op) {
+ auto ret = allocator.alloc<SIMDShift>();
+ ret->op = op;
+ ret->vec = parseExpression(s[1]);
+ ret->shift = parseExpression(s[2]);
+ ret->finalize();
+ return ret;
+}
+
Expression* SExpressionWasmBuilder::makeIf(Element& s) {
auto ret = allocator.alloc<If>();
Index i = 1;
diff --git a/src/wasm/wasm-validator.cpp b/src/wasm/wasm-validator.cpp
index 3f65c9f7a..e1838bb71 100644
--- a/src/wasm/wasm-validator.cpp
+++ b/src/wasm/wasm-validator.cpp
@@ -245,6 +245,11 @@ public:
void visitAtomicCmpxchg(AtomicCmpxchg* curr);
void visitAtomicWait(AtomicWait* curr);
void visitAtomicWake(AtomicWake* curr);
+ void visitSIMDExtract(SIMDExtract* curr);
+ void visitSIMDReplace(SIMDReplace* curr);
+ void visitSIMDShuffle(SIMDShuffle* curr);
+ void visitSIMDBitselect(SIMDBitselect* curr);
+ void visitSIMDShift(SIMDShift* curr);
void visitBinary(Binary* curr);
void visitUnary(Unary* curr);
void visitSelect(Select* curr);
@@ -498,6 +503,7 @@ void FunctionValidator::visitSetGlobal(SetGlobal* curr) {
void FunctionValidator::visitLoad(Load* curr) {
if (curr->isAtomic) shouldBeTrue(info.features.hasAtomics(), curr, "Atomic operation (atomics are disabled)");
+ if (curr->type == v128) shouldBeTrue(info.features.hasSIMD(), curr, "SIMD operation (SIMD is disabled)");
shouldBeFalse(curr->isAtomic && !getModule()->memory.shared, curr, "Atomic operation with non-shared memory");
validateMemBytes(curr->bytes, curr->type, curr);
validateAlignment(curr->align, curr->type, curr->bytes, curr->isAtomic, curr);
@@ -510,9 +516,10 @@ void FunctionValidator::visitLoad(Load* curr) {
void FunctionValidator::visitStore(Store* curr) {
if (curr->isAtomic) shouldBeTrue(info.features.hasAtomics(), curr, "Atomic operation (atomics are disabled)");
+ if (curr->valueType == v128) shouldBeTrue(info.features.hasSIMD(), curr, "SIMD operation (SIMD is disabled)");
shouldBeFalse(curr->isAtomic && !getModule()->memory.shared, curr, "Atomic operation with non-shared memory");
validateMemBytes(curr->bytes, curr->valueType, curr);
- validateAlignment(curr->align, curr->type, curr->bytes, curr->isAtomic, curr);
+ validateAlignment(curr->align, curr->valueType, curr->bytes, curr->isAtomic, curr);
shouldBeEqualOrFirstIsUnreachable(curr->ptr->type, i32, curr, "store pointer type must be i32");
shouldBeUnequal(curr->value->type, none, curr, "store value type must not be none");
shouldBeEqualOrFirstIsUnreachable(curr->value->type, curr->valueType, curr, "store value type must match");
@@ -561,20 +568,77 @@ void FunctionValidator::visitAtomicWake(AtomicWake* curr) {
shouldBeEqualOrFirstIsUnreachable(curr->wakeCount->type, i32, curr, "AtomicWake wakeCount type must be i32");
}
+void FunctionValidator::visitSIMDExtract(SIMDExtract* curr) {
+ shouldBeTrue(info.features.hasSIMD(), curr, "SIMD operation (SIMD is disabled)");
+ shouldBeEqualOrFirstIsUnreachable(curr->vec->type, v128, curr, "extract_lane must operate on a v128");
+ Type lane_t = none;
+ size_t lanes = 0;
+ switch (curr->op) {
+ case ExtractLaneSVecI8x16:
+ case ExtractLaneUVecI8x16: lane_t = i32; lanes = 16; break;
+ case ExtractLaneSVecI16x8:
+ case ExtractLaneUVecI16x8: lane_t = i32; lanes = 8; break;
+ case ExtractLaneVecI32x4: lane_t = i32; lanes = 4; break;
+ case ExtractLaneVecI64x2: lane_t = i64; lanes = 2; break;
+ case ExtractLaneVecF32x4: lane_t = f32; lanes = 4; break;
+ case ExtractLaneVecF64x2: lane_t = f64; lanes = 2; break;
+ }
+ shouldBeEqualOrFirstIsUnreachable(curr->type, lane_t, curr, "extract_lane must have same type as vector lane");
+ shouldBeTrue(curr->idx < lanes, curr, "invalid lane index");
+}
+
+void FunctionValidator::visitSIMDReplace(SIMDReplace* curr) {
+ shouldBeTrue(info.features.hasSIMD(), curr, "SIMD operation (SIMD is disabled)");
+ shouldBeEqualOrFirstIsUnreachable(curr->type, v128, curr, "replace_lane must have type v128");
+ shouldBeEqualOrFirstIsUnreachable(curr->vec->type, v128, curr, "replace_lane must operate on a v128");
+ Type lane_t = none;
+ size_t lanes = 0;
+ switch (curr->op) {
+ case ReplaceLaneVecI8x16: lane_t = i32; lanes = 16; break;
+ case ReplaceLaneVecI16x8: lane_t = i32; lanes = 8; break;
+ case ReplaceLaneVecI32x4: lane_t = i32; lanes = 4; break;
+ case ReplaceLaneVecI64x2: lane_t = i64; lanes = 2; break;
+ case ReplaceLaneVecF32x4: lane_t = f32; lanes = 4; break;
+ case ReplaceLaneVecF64x2: lane_t = f64; lanes = 2; break;
+ }
+ shouldBeEqualOrFirstIsUnreachable(curr->value->type, lane_t, curr, "unexpected value type");
+ shouldBeTrue(curr->idx < lanes, curr, "invalid lane index");
+}
+
+void FunctionValidator::visitSIMDShuffle(SIMDShuffle* curr) {
+ shouldBeTrue(info.features.hasSIMD(), curr, "SIMD operation (SIMD is disabled)");
+ shouldBeEqualOrFirstIsUnreachable(curr->type, v128, curr, "v128.shuffle must have type v128");
+ shouldBeEqualOrFirstIsUnreachable(curr->left->type, v128, curr, "expected operand of type v128");
+ shouldBeEqualOrFirstIsUnreachable(curr->right->type, v128, curr, "expected operand of type v128");
+ for (uint8_t idx : curr->mask) {
+ shouldBeTrue(idx < 32, curr, "Invalid lane index in mask");
+ }
+}
+
+void FunctionValidator::visitSIMDBitselect(SIMDBitselect* curr) {
+ shouldBeTrue(info.features.hasSIMD(), curr, "SIMD operation (SIMD is disabled)");
+ shouldBeEqualOrFirstIsUnreachable(curr->type, v128, curr, "v128.bitselect must have type v128");
+ shouldBeEqualOrFirstIsUnreachable(curr->left->type, v128, curr, "expected operand of type v128");
+ shouldBeEqualOrFirstIsUnreachable(curr->right->type, v128, curr, "expected operand of type v128");
+ shouldBeEqualOrFirstIsUnreachable(curr->cond->type, v128, curr, "expected operand of type v128");
+}
+
+void FunctionValidator::visitSIMDShift(SIMDShift* curr) {
+ shouldBeTrue(info.features.hasSIMD(), curr, "SIMD operation (SIMD is disabled)");
+ shouldBeEqualOrFirstIsUnreachable(curr->type, v128, curr, "vector shift must have type v128");
+ shouldBeEqualOrFirstIsUnreachable(curr->vec->type, v128, curr, "expected operand of type v128");
+ shouldBeEqualOrFirstIsUnreachable(curr->shift->type, i32, curr, "expected shift amount to have type i32");
+}
+
void FunctionValidator::validateMemBytes(uint8_t bytes, Type type, Expression* curr) {
- switch (bytes) {
- case 1:
- case 2:
- case 4: break;
- case 8: {
- // if we have a concrete type for the load, then we know the size of the mem operation and
- // can validate it
- if (type != unreachable) {
- shouldBeEqual(getTypeSize(type), 8U, curr, "8-byte mem operations are only allowed with 8-byte wasm types");
- }
- break;
- }
- default: info.fail("Memory operations must be 1,2,4, or 8 bytes", curr, getFunction());
+ switch (type) {
+ case i32: shouldBeTrue(bytes == 1 || bytes == 2 || bytes == 4, curr, "expected i32 operation to touch 1, 2, or 4 bytes"); break;
+ case i64: shouldBeTrue(bytes == 1 || bytes == 2 || bytes == 4 || bytes == 8, curr, "expected i64 operation to touch 1, 2, 4, or 8 bytes"); break;
+ case f32: shouldBeEqual(bytes, uint8_t(4), curr, "expected f32 operation to touch 4 bytes"); break;
+ case f64: shouldBeEqual(bytes, uint8_t(8), curr, "expected f64 operation to touch 8 bytes"); break;
+ case v128: shouldBeEqual(bytes, uint8_t(16), curr, "expected v128 operation to touch 16 bytes"); break;
+ case none: WASM_UNREACHABLE();
+ case unreachable: break;
}
}
@@ -671,6 +735,86 @@ void FunctionValidator::visitBinary(Binary* curr) {
shouldBeEqualOrFirstIsUnreachable(curr->left->type, f64, curr, "f64 op");
break;
}
+ case EqVecI8x16:
+ case NeVecI8x16:
+ case LtSVecI8x16:
+ case LtUVecI8x16:
+ case LeSVecI8x16:
+ case LeUVecI8x16:
+ case GtSVecI8x16:
+ case GtUVecI8x16:
+ case GeSVecI8x16:
+ case GeUVecI8x16:
+ case EqVecI16x8:
+ case NeVecI16x8:
+ case LtSVecI16x8:
+ case LtUVecI16x8:
+ case LeSVecI16x8:
+ case LeUVecI16x8:
+ case GtSVecI16x8:
+ case GtUVecI16x8:
+ case GeSVecI16x8:
+ case GeUVecI16x8:
+ case EqVecI32x4:
+ case NeVecI32x4:
+ case LtSVecI32x4:
+ case LtUVecI32x4:
+ case LeSVecI32x4:
+ case LeUVecI32x4:
+ case GtSVecI32x4:
+ case GtUVecI32x4:
+ case GeSVecI32x4:
+ case GeUVecI32x4:
+ case EqVecF32x4:
+ case NeVecF32x4:
+ case LtVecF32x4:
+ case LeVecF32x4:
+ case GtVecF32x4:
+ case GeVecF32x4:
+ case EqVecF64x2:
+ case NeVecF64x2:
+ case LtVecF64x2:
+ case LeVecF64x2:
+ case GtVecF64x2:
+ case GeVecF64x2:
+ case AndVec128:
+ case OrVec128:
+ case XorVec128:
+ case AddVecI8x16:
+ case AddSatSVecI8x16:
+ case AddSatUVecI8x16:
+ case SubVecI8x16:
+ case SubSatSVecI8x16:
+ case SubSatUVecI8x16:
+ case MulVecI8x16:
+ case AddVecI16x8:
+ case AddSatSVecI16x8:
+ case AddSatUVecI16x8:
+ case SubVecI16x8:
+ case SubSatSVecI16x8:
+ case SubSatUVecI16x8:
+ case MulVecI16x8:
+ case AddVecI32x4:
+ case SubVecI32x4:
+ case MulVecI32x4:
+ case AddVecI64x2:
+ case SubVecI64x2:
+ case AddVecF32x4:
+ case SubVecF32x4:
+ case MulVecF32x4:
+ case DivVecF32x4:
+ case MinVecF32x4:
+ case MaxVecF32x4:
+ case AddVecF64x2:
+ case SubVecF64x2:
+ case MulVecF64x2:
+ case DivVecF64x2:
+ case MinVecF64x2:
+ case MaxVecF64x2: {
+ shouldBeEqualOrFirstIsUnreachable(curr->left->type, v128, curr, "v128 op");
+ shouldBeEqualOrFirstIsUnreachable(curr->right->type, v128, curr, "v128 op");
+ break;
+ }
case InvalidBinary: WASM_UNREACHABLE();
}
}
@@ -804,6 +948,57 @@ void FunctionValidator::visitUnary(Unary* curr) {
shouldBeEqual(curr->value->type, i64, curr, "reinterpret/i64 type must be correct");
break;
}
+ case SplatVecI8x16:
+ case SplatVecI16x8:
+ case SplatVecI32x4:
+ shouldBeEqual(curr->type, v128, curr, "expected splat to have v128 type");
+ shouldBeEqual(curr->value->type, i32, curr, "expected i32 splat value");
+ break;
+ case SplatVecI64x2:
+ shouldBeEqual(curr->type, v128, curr, "expected splat to have v128 type");
+ shouldBeEqual(curr->value->type, i64, curr, "expected i64 splat value");
+ break;
+ case SplatVecF32x4:
+ shouldBeEqual(curr->type, v128, curr, "expected splat to have v128 type");
+ shouldBeEqual(curr->value->type, f32, curr, "expected f32 splat value");
+ break;
+ case SplatVecF64x2:
+ shouldBeEqual(curr->type, v128, curr, "expected splat to have v128 type");
+ shouldBeEqual(curr->value->type, f64, curr, "expected i64 splat value");
+ break;
+ case NotVec128:
+ case NegVecI8x16:
+ case NegVecI16x8:
+ case NegVecI32x4:
+ case NegVecI64x2:
+ case AbsVecF32x4:
+ case NegVecF32x4:
+ case SqrtVecF32x4:
+ case AbsVecF64x2:
+ case NegVecF64x2:
+ case SqrtVecF64x2:
+ case TruncSatSVecF32x4ToVecI32x4:
+ case TruncSatUVecF32x4ToVecI32x4:
+ case TruncSatSVecF64x2ToVecI64x2:
+ case TruncSatUVecF64x2ToVecI64x2:
+ case ConvertSVecI32x4ToVecF32x4:
+ case ConvertUVecI32x4ToVecF32x4:
+ case ConvertSVecI64x2ToVecF64x2:
+ case ConvertUVecI64x2ToVecF64x2:
+ shouldBeEqual(curr->type, v128, curr, "expected v128 type");
+ shouldBeEqual(curr->value->type, v128, curr, "expected v128 operand");
+ break;
+ case AnyTrueVecI8x16:
+ case AllTrueVecI8x16:
+ case AnyTrueVecI16x8:
+ case AllTrueVecI16x8:
+ case AnyTrueVecI32x4:
+ case AllTrueVecI32x4:
+ case AnyTrueVecI64x2:
+ case AllTrueVecI64x2:
+ shouldBeEqual(curr->type, i32, curr, "expected boolean reduction to have i32 type");
+ shouldBeEqual(curr->value->type, v128, curr, "expected v128 operand");
+ break;
case InvalidUnary: WASM_UNREACHABLE();
}
}
@@ -895,7 +1090,8 @@ void FunctionValidator::validateAlignment(size_t align, Type type, Index bytes,
case 1:
case 2:
case 4:
- case 8: break;
+ case 8:
+ case 16: break;
default:{
info.fail("bad alignment: " + std::to_string(align), curr, getFunction());
break;
@@ -913,9 +1109,9 @@ void FunctionValidator::validateAlignment(size_t align, Type type, Index bytes,
shouldBeTrue(align <= 8, curr, "alignment must not exceed natural");
break;
}
- case v128: assert(false && "v128 not implemented yet");
- case none:
- case unreachable: {}
+ case v128:
+ case unreachable: break;
+ case none: WASM_UNREACHABLE();
}
}
diff --git a/src/wasm/wasm.cpp b/src/wasm/wasm.cpp
index fe7927870..87278d3cd 100644
--- a/src/wasm/wasm.cpp
+++ b/src/wasm/wasm.cpp
@@ -104,6 +104,11 @@ const char* getExpressionName(Expression* curr) {
case Expression::Id::AtomicRMWId: return "atomic_rmw";
case Expression::Id::AtomicWaitId: return "atomic_wait";
case Expression::Id::AtomicWakeId: return "atomic_wake";
+ case Expression::Id::SIMDExtractId: return "simd_extract";
+ case Expression::Id::SIMDReplaceId: return "simd_replace";
+ case Expression::Id::SIMDShuffleId: return "simd_shuffle";
+ case Expression::Id::SIMDBitselectId: return "simd_bitselect";
+ case Expression::Id::SIMDShiftId: return "simd_shift";
case Expression::Id::NumExpressionIds: WASM_UNREACHABLE();
}
WASM_UNREACHABLE();
@@ -416,6 +421,56 @@ void AtomicWake::finalize() {
}
}
+void SIMDExtract::finalize() {
+ assert(vec);
+ switch (op) {
+ case ExtractLaneSVecI8x16:
+ case ExtractLaneUVecI8x16:
+ case ExtractLaneSVecI16x8:
+ case ExtractLaneUVecI16x8:
+ case ExtractLaneVecI32x4: type = i32; break;
+ case ExtractLaneVecI64x2: type = i64; break;
+ case ExtractLaneVecF32x4: type = f32; break;
+ case ExtractLaneVecF64x2: type = f64; break;
+ default: WASM_UNREACHABLE();
+ }
+ if (vec->type == unreachable) {
+ type = unreachable;
+ }
+}
+
+void SIMDReplace::finalize() {
+ assert(vec && value);
+ type = v128;
+ if (vec->type == unreachable || value->type == unreachable) {
+ type = unreachable;
+ }
+}
+
+void SIMDShuffle::finalize() {
+ assert(left && right);
+ type = v128;
+ if (left->type == unreachable || right->type == unreachable) {
+ type = unreachable;
+ }
+}
+
+void SIMDBitselect::finalize() {
+ assert(left && right && cond);
+ type = v128;
+ if (left->type == unreachable || right->type == unreachable || cond->type == unreachable) {
+ type = unreachable;
+ }
+}
+
+void SIMDShift::finalize() {
+ assert(vec && shift);
+ type = v128;
+ if (vec->type == unreachable || shift->type == unreachable) {
+ type = unreachable;
+ }
+}
+
Const* Const::set(Literal value_) {
value = value_;
type = value.type;
@@ -491,6 +546,39 @@ void Unary::finalize() {
case ConvertUInt32ToFloat64:
case ConvertSInt64ToFloat64:
case ConvertUInt64ToFloat64: type = f64; break;
+ case SplatVecI8x16:
+ case SplatVecI16x8:
+ case SplatVecI32x4:
+ case SplatVecI64x2:
+ case SplatVecF32x4:
+ case SplatVecF64x2:
+ case NotVec128:
+ case NegVecI8x16:
+ case NegVecI16x8:
+ case NegVecI32x4:
+ case NegVecI64x2:
+ case AbsVecF32x4:
+ case NegVecF32x4:
+ case SqrtVecF32x4:
+ case AbsVecF64x2:
+ case NegVecF64x2:
+ case SqrtVecF64x2:
+ case TruncSatSVecF32x4ToVecI32x4:
+ case TruncSatUVecF32x4ToVecI32x4:
+ case TruncSatSVecF64x2ToVecI64x2:
+ case TruncSatUVecF64x2ToVecI64x2:
+ case ConvertSVecI32x4ToVecF32x4:
+ case ConvertUVecI32x4ToVecF32x4:
+ case ConvertSVecI64x2ToVecF64x2:
+ case ConvertUVecI64x2ToVecF64x2: type = v128; break;
+ case AnyTrueVecI8x16:
+ case AllTrueVecI8x16:
+ case AnyTrueVecI16x8:
+ case AllTrueVecI16x8:
+ case AnyTrueVecI32x4:
+ case AllTrueVecI32x4:
+ case AnyTrueVecI64x2:
+ case AllTrueVecI64x2: type = i32; break;
case InvalidUnary: WASM_UNREACHABLE();
}
}
diff --git a/test/binaryen.js/kitchen-sink.js b/test/binaryen.js/kitchen-sink.js
index 9fdaa0ad2..27eba3a8c 100644
--- a/test/binaryen.js/kitchen-sink.js
+++ b/test/binaryen.js/kitchen-sink.js
@@ -14,6 +14,8 @@ var module;
// helpers
+var v128_bytes = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
+
function assert(x) {
if (!x) throw 'error!';
}
@@ -34,6 +36,10 @@ function makeFloat64(x) {
return module.f64.const(x);
}
+function makeVec128(i8s) {
+ return module.v128.const(i8s)
+}
+
function makeSomething() {
return makeInt32(1337);
}
@@ -83,6 +89,11 @@ function test_ids() {
console.log("BinaryenAtomicRMWId: " + Binaryen.AtomicRMWId);
console.log("BinaryenAtomicWaitId: " + Binaryen.AtomicWaitId);
console.log("BinaryenAtomicWakeId: " + Binaryen.AtomicWakeId);
+ console.log("BinaryenSIMDExtractId: " + Binaryen.SIMDExtractId);
+ console.log("BinaryenSIMDReplaceId: " + Binaryen.SIMDReplaceId);
+ console.log("BinaryenSIMDShuffleId: " + Binaryen.SIMDShuffleId);
+ console.log("BinaryenSIMDBitselectId: " + Binaryen.SIMDBitselectId);
+ console.log("BinaryenSIMDShiftId: " + Binaryen.SIMDShiftId);
}
function test_core() {
@@ -156,6 +167,39 @@ function test_core() {
module.f32.demote(module.f64.const(-9005.841)),
module.f32.reinterpret(module.i32.const(-10)),
module.f64.reinterpret(module.i64.const(-22, -1)),
+ module.i8x16.splat(module.i32.const(42)),
+ module.i16x8.splat(module.i32.const(42)),
+ module.i32x4.splat(module.i32.const(42)),
+ module.i64x2.splat(module.i64.const(123, 456)),
+ module.f32x4.splat(module.f32.const(42.0)),
+ module.f64x2.splat(module.f64.const(42.0)),
+ module.v128.not(module.v128.const(v128_bytes)),
+ module.i8x16.neg(module.v128.const(v128_bytes)),
+ module.i8x16.any_true(module.v128.const(v128_bytes)),
+ module.i8x16.all_true(module.v128.const(v128_bytes)),
+ module.i16x8.neg(module.v128.const(v128_bytes)),
+ module.i16x8.any_true(module.v128.const(v128_bytes)),
+ module.i16x8.all_true(module.v128.const(v128_bytes)),
+ module.i32x4.neg(module.v128.const(v128_bytes)),
+ module.i32x4.any_true(module.v128.const(v128_bytes)),
+ module.i32x4.all_true(module.v128.const(v128_bytes)),
+ module.i64x2.neg(module.v128.const(v128_bytes)),
+ module.i64x2.any_true(module.v128.const(v128_bytes)),
+ module.i64x2.all_true(module.v128.const(v128_bytes)),
+ module.f32x4.abs(module.v128.const(v128_bytes)),
+ module.f32x4.neg(module.v128.const(v128_bytes)),
+ module.f32x4.sqrt(module.v128.const(v128_bytes)),
+ module.f64x2.abs(module.v128.const(v128_bytes)),
+ module.f64x2.neg(module.v128.const(v128_bytes)),
+ module.f64x2.sqrt(module.v128.const(v128_bytes)),
+ module.i32x4['trunc_s/f32x4:sat'](module.v128.const(v128_bytes)),
+ module.i32x4['trunc_u/f32x4:sat'](module.v128.const(v128_bytes)),
+ module.i64x2['trunc_s/f64x2:sat'](module.v128.const(v128_bytes)),
+ module.i64x2['trunc_u/f64x2:sat'](module.v128.const(v128_bytes)),
+ module.f32x4['convert_s/i32x4'](module.v128.const(v128_bytes)),
+ module.f32x4['convert_u/i32x4'](module.v128.const(v128_bytes)),
+ module.f64x2['convert_s/i64x2'](module.v128.const(v128_bytes)),
+ module.f64x2['convert_u/i64x2'](module.v128.const(v128_bytes)),
// Binary
module.i32.add(module.i32.const(-10), module.i32.const(-11)),
module.f64.sub(module.f64.const(-9005.841), module.f64.const(-9007.333)),
@@ -189,6 +233,113 @@ function test_core() {
module.f64.le(module.f64.const(-9005.841), module.f64.const(-9007.333)),
module.f64.gt(module.f64.const(-9005.841), module.f64.const(-9007.333)),
module.f32.ge(module.f32.const(-33.612), module.f32.const(-62.5)),
+ module.i8x16.eq(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i8x16.ne(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i8x16.lt_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i8x16.lt_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i8x16.gt_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i8x16.gt_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i8x16.le_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i8x16.le_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i8x16.ge_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i8x16.ge_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i16x8.eq(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i16x8.ne(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i16x8.lt_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i16x8.lt_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i16x8.gt_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i16x8.gt_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i16x8.le_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i16x8.le_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i16x8.ge_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i16x8.ge_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i32x4.eq(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i32x4.ne(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i32x4.lt_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i32x4.lt_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i32x4.gt_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i32x4.gt_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i32x4.le_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i32x4.le_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i32x4.ge_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i32x4.ge_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.f32x4.eq(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.f32x4.ne(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.f32x4.lt(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.f32x4.gt(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.f32x4.le(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.f32x4.ge(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.f64x2.eq(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.f64x2.ne(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.f64x2.lt(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.f64x2.gt(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.f64x2.le(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.f64x2.ge(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.v128.and(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.v128.or(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.v128.xor(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i8x16.add(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i8x16.add_saturate_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i8x16.add_saturate_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i8x16.sub(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i8x16.sub_saturate_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i8x16.sub_saturate_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i8x16.mul(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i16x8.add(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i16x8.add_saturate_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i16x8.add_saturate_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i16x8.sub(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i16x8.sub_saturate_s(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i16x8.sub_saturate_u(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i16x8.mul(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i32x4.add(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i32x4.sub(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i32x4.mul(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i64x2.add(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.i64x2.sub(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.f32x4.add(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.f32x4.sub(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.f32x4.mul(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.f32x4.div(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.f32x4.min(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.f32x4.max(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.f64x2.add(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.f64x2.sub(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.f64x2.mul(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.f64x2.div(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.f64x2.min(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ module.f64x2.max(module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
+ // SIMD lane manipulation
+ module.i8x16.extract_lane_s(module.v128.const(v128_bytes), 1),
+ module.i8x16.extract_lane_u(module.v128.const(v128_bytes), 1),
+ module.i16x8.extract_lane_s(module.v128.const(v128_bytes), 1),
+ module.i16x8.extract_lane_u(module.v128.const(v128_bytes), 1),
+ module.i32x4.extract_lane(module.v128.const(v128_bytes), 1),
+ module.i64x2.extract_lane(module.v128.const(v128_bytes), 1),
+ module.f32x4.extract_lane(module.v128.const(v128_bytes), 1),
+ module.f64x2.extract_lane(module.v128.const(v128_bytes), 1),
+ module.i16x8.replace_lane(module.v128.const(v128_bytes), 1, module.i32.const(42)),
+ module.i8x16.replace_lane(module.v128.const(v128_bytes), 1, module.i32.const(42)),
+ module.i32x4.replace_lane(module.v128.const(v128_bytes), 1, module.i32.const(42)),
+ module.i64x2.replace_lane(module.v128.const(v128_bytes), 1, module.i64.const(42, 43)),
+ module.f32x4.replace_lane(module.v128.const(v128_bytes), 1, module.f32.const(42)),
+ module.f64x2.replace_lane(module.v128.const(v128_bytes), 1, module.f64.const(42)),
+ // // SIMD shift
+ module.i8x16.shl(module.v128.const(v128_bytes), module.i32.const(1)),
+ module.i8x16.shr_s(module.v128.const(v128_bytes), module.i32.const(1)),
+ module.i8x16.shr_u(module.v128.const(v128_bytes), module.i32.const(1)),
+ module.i16x8.shl(module.v128.const(v128_bytes), module.i32.const(1)),
+ module.i16x8.shr_s(module.v128.const(v128_bytes), module.i32.const(1)),
+ module.i16x8.shr_u(module.v128.const(v128_bytes), module.i32.const(1)),
+ module.i32x4.shl(module.v128.const(v128_bytes), module.i32.const(1)),
+ module.i32x4.shr_s(module.v128.const(v128_bytes), module.i32.const(1)),
+ module.i32x4.shr_u(module.v128.const(v128_bytes), module.i32.const(1)),
+ module.i64x2.shl(module.v128.const(v128_bytes), module.i32.const(1)),
+ module.i64x2.shr_s(module.v128.const(v128_bytes), module.i32.const(1)),
+ module.i64x2.shr_u(module.v128.const(v128_bytes), module.i32.const(1)),
+ // Other SIMD
+ module.v8x16.shuffle(module.v128.const(v128_bytes), module.v128.const(v128_bytes), v128_bytes),
+ module.v128.bitselect(module.v128.const(v128_bytes), module.v128.const(v128_bytes), module.v128.const(v128_bytes)),
// All the rest
module.block('', []), // block with no name
module.if(temp1, temp2, temp3),
diff --git a/test/binaryen.js/kitchen-sink.js.txt b/test/binaryen.js/kitchen-sink.js.txt
index 1bf43df02..e64de578d 100644
--- a/test/binaryen.js/kitchen-sink.js.txt
+++ b/test/binaryen.js/kitchen-sink.js.txt
@@ -33,6 +33,11 @@ BinaryenAtomicCmpxchgId: 24
BinaryenAtomicRMWId: 23
BinaryenAtomicWaitId: 25
BinaryenAtomicWakeId: 26
+BinaryenSIMDExtractId: 27
+BinaryenSIMDReplaceId: 28
+BinaryenSIMDShuffleId: 29
+BinaryenSIMDBitselectId: 30
+BinaryenSIMDShiftId: 31
getExpressionInfo={"id":15,"type":3,"op":6}
(f32.neg
(f32.const -33.61199951171875)
@@ -282,6 +287,171 @@ getExpressionInfo(f64.const)={"id":14,"type":4,"value":9.5}
)
)
(drop
+ (i8x16.splat
+ (i32.const 42)
+ )
+ )
+ (drop
+ (i16x8.splat
+ (i32.const 42)
+ )
+ )
+ (drop
+ (i32x4.splat
+ (i32.const 42)
+ )
+ )
+ (drop
+ (i64x2.splat
+ (i64.const 1958505087099)
+ )
+ )
+ (drop
+ (f32x4.splat
+ (f32.const 42)
+ )
+ )
+ (drop
+ (f64x2.splat
+ (f64.const 42)
+ )
+ )
+ (drop
+ (v128.not
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.neg
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.any_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.all_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.neg
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.any_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.all_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.neg
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.any_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.all_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.neg
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.any_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.all_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.abs
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.neg
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.sqrt
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.abs
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.neg
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.sqrt
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.trunc_s/f32x4:sat
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.trunc_u/f32x4:sat
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.trunc_s/f64x2:sat
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.trunc_u/f64x2:sat
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.convert_s/i32x4
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.convert_u/i32x4
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.convert_s/i64x2
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.convert_u/i64x2
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
(i32.add
(i32.const -10)
(i32.const -11)
@@ -473,6 +643,614 @@ getExpressionInfo(f64.const)={"id":14,"type":4,"value":9.5}
(f32.const -62.5)
)
)
+ (drop
+ (i8x16.eq
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.ne
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.lt_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.lt_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.gt_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.gt_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.le_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.le_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.ge_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.ge_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.eq
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.ne
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.lt_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.lt_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.gt_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.gt_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.le_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.le_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.ge_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.ge_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.eq
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.ne
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.lt_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.lt_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.gt_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.gt_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.le_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.le_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.ge_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.ge_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.eq
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.ne
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.lt
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.gt
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.le
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.ge
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.ge
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.ne
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.lt
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.gt
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.le
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.ge
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ (
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ (
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ (drop
+ (i8x16.add
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.add_saturate_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.add_saturate_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.sub
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.sub_saturate_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.sub_saturate_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.mul
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.add
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.add_saturate_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.add_saturate_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.sub
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.sub_saturate_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.sub_saturate_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.mul
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.add
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.sub
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.mul
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.add
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.sub
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.add
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.sub
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.mul
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.div
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.min
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.max
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.add
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.sub
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.mul
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.div
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.min
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.max
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.extract_lane_s 1
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.extract_lane_u 1
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.extract_lane_s 1
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.extract_lane_u 1
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.extract_lane 1
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.extract_lane 1
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.extract_lane 1
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.extract_lane 1
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.replace_lane 1
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 42)
+ )
+ )
+ (drop
+ (i8x16.replace_lane 1
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 42)
+ )
+ )
+ (drop
+ (i32x4.replace_lane 1
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 42)
+ )
+ )
+ (drop
+ (i64x2.replace_lane 1
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i64.const 184683593770)
+ )
+ )
+ (drop
+ (f32x4.replace_lane 1
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (f32.const 42)
+ )
+ )
+ (drop
+ (f64x2.replace_lane 1
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (f64.const 42)
+ )
+ )
+ (drop
+ (i8x16.shl
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i8x16.shr_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i8x16.shr_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i16x8.shl
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i16x8.shr_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i16x8.shr_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i32x4.shl
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i32x4.shr_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i32x4.shr_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i64x2.shl
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i64x2.shr_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i64x2.shr_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (v8x16.shuffle 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (v128.bitselect
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
(block
)
(if
@@ -1251,176 +2029,1180 @@ int main() {
expressions[108] = BinaryenUnary(the_module, 45, expressions[107]);
expressions[109] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
expressions[110] = BinaryenUnary(the_module, 46, expressions[109]);
- expressions[111] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
- expressions[112] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
- expressions[113] = BinaryenBinary(the_module, 0, expressions[111], expressions[112]);
- expressions[114] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
- expressions[115] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9007.33));
- expressions[116] = BinaryenBinary(the_module, 64, expressions[114], expressions[115]);
- expressions[117] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
- expressions[118] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
- expressions[119] = BinaryenBinary(the_module, 3, expressions[117], expressions[118]);
- expressions[120] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967274));
- expressions[121] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967273));
- expressions[122] = BinaryenBinary(the_module, 29, expressions[120], expressions[121]);
- expressions[123] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967274));
- expressions[124] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967273));
- expressions[125] = BinaryenBinary(the_module, 30, expressions[123], expressions[124]);
- expressions[126] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
- expressions[127] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
- expressions[128] = BinaryenBinary(the_module, 6, expressions[126], expressions[127]);
- expressions[129] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
- expressions[130] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
- expressions[131] = BinaryenBinary(the_module, 7, expressions[129], expressions[130]);
- expressions[132] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967274));
- expressions[133] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967273));
- expressions[134] = BinaryenBinary(the_module, 33, expressions[132], expressions[133]);
- expressions[135] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
- expressions[136] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
- expressions[137] = BinaryenBinary(the_module, 9, expressions[135], expressions[136]);
- expressions[138] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967274));
- expressions[139] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967273));
- expressions[140] = BinaryenBinary(the_module, 35, expressions[138], expressions[139]);
- expressions[141] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967274));
- expressions[142] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967273));
- expressions[143] = BinaryenBinary(the_module, 36, expressions[141], expressions[142]);
- expressions[144] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
- expressions[145] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
- expressions[146] = BinaryenBinary(the_module, 12, expressions[144], expressions[145]);
- expressions[147] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
- expressions[148] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
- expressions[149] = BinaryenBinary(the_module, 13, expressions[147], expressions[148]);
- expressions[150] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967274));
- expressions[151] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967273));
- expressions[152] = BinaryenBinary(the_module, 39, expressions[150], expressions[151]);
- expressions[153] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
- expressions[154] = BinaryenConst(the_module, BinaryenLiteralFloat32(-62.5));
- expressions[155] = BinaryenBinary(the_module, 53, expressions[153], expressions[154]);
- expressions[156] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
- expressions[157] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9007.33));
- expressions[158] = BinaryenBinary(the_module, 67, expressions[156], expressions[157]);
- expressions[159] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
- expressions[160] = BinaryenConst(the_module, BinaryenLiteralFloat32(-62.5));
- expressions[161] = BinaryenBinary(the_module, 55, expressions[159], expressions[160]);
- expressions[162] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
- expressions[163] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9007.33));
- expressions[164] = BinaryenBinary(the_module, 69, expressions[162], expressions[163]);
- expressions[165] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
- expressions[166] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
- expressions[167] = BinaryenBinary(the_module, 15, expressions[165], expressions[166]);
- expressions[168] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
- expressions[169] = BinaryenConst(the_module, BinaryenLiteralFloat32(-62.5));
- expressions[170] = BinaryenBinary(the_module, 58, expressions[168], expressions[169]);
- expressions[171] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
- expressions[172] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
- expressions[173] = BinaryenBinary(the_module, 17, expressions[171], expressions[172]);
- expressions[174] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967274));
- expressions[175] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967273));
- expressions[176] = BinaryenBinary(the_module, 43, expressions[174], expressions[175]);
- expressions[177] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967274));
- expressions[178] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967273));
- expressions[179] = BinaryenBinary(the_module, 44, expressions[177], expressions[178]);
- expressions[180] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
- expressions[181] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
- expressions[182] = BinaryenBinary(the_module, 20, expressions[180], expressions[181]);
- expressions[183] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967274));
- expressions[184] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967273));
- expressions[185] = BinaryenBinary(the_module, 46, expressions[183], expressions[184]);
- expressions[186] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
- expressions[187] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
- expressions[188] = BinaryenBinary(the_module, 22, expressions[186], expressions[187]);
- expressions[189] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
- expressions[190] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
- expressions[191] = BinaryenBinary(the_module, 23, expressions[189], expressions[190]);
- expressions[192] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967274));
- expressions[193] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967273));
- expressions[194] = BinaryenBinary(the_module, 49, expressions[192], expressions[193]);
- expressions[195] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
- expressions[196] = BinaryenConst(the_module, BinaryenLiteralFloat32(-62.5));
- expressions[197] = BinaryenBinary(the_module, 59, expressions[195], expressions[196]);
- expressions[198] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
- expressions[199] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9007.33));
- expressions[200] = BinaryenBinary(the_module, 73, expressions[198], expressions[199]);
- expressions[201] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
- expressions[202] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9007.33));
- expressions[203] = BinaryenBinary(the_module, 74, expressions[201], expressions[202]);
- expressions[204] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
- expressions[205] = BinaryenConst(the_module, BinaryenLiteralFloat32(-62.5));
- expressions[206] = BinaryenBinary(the_module, 62, expressions[204], expressions[205]);
+ expressions[111] = BinaryenConst(the_module, BinaryenLiteralInt32(42));
+ expressions[112] = BinaryenUnary(the_module, 60, expressions[111]);
+ expressions[113] = BinaryenConst(the_module, BinaryenLiteralInt32(42));
+ expressions[114] = BinaryenUnary(the_module, 61, expressions[113]);
+ expressions[115] = BinaryenConst(the_module, BinaryenLiteralInt32(42));
+ expressions[116] = BinaryenUnary(the_module, 62, expressions[115]);
+ expressions[117] = BinaryenConst(the_module, BinaryenLiteralInt64(1958505087099));
+ expressions[118] = BinaryenUnary(the_module, 63, expressions[117]);
+ expressions[119] = BinaryenConst(the_module, BinaryenLiteralFloat32(42));
+ expressions[120] = BinaryenUnary(the_module, 64, expressions[119]);
+ expressions[121] = BinaryenConst(the_module, BinaryenLiteralFloat64(42));
+ expressions[122] = BinaryenUnary(the_module, 65, expressions[121]);
+ {
+ uint8_t t0[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[123] = BinaryenConst(the_module, BinaryenLiteralVec128(t0));
+ }
+ expressions[124] = BinaryenUnary(the_module, 66, expressions[123]);
+ {
+ uint8_t t1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[125] = BinaryenConst(the_module, BinaryenLiteralVec128(t1));
+ }
+ expressions[126] = BinaryenUnary(the_module, 67, expressions[125]);
+ {
+ uint8_t t2[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[127] = BinaryenConst(the_module, BinaryenLiteralVec128(t2));
+ }
+ expressions[128] = BinaryenUnary(the_module, 68, expressions[127]);
+ {
+ uint8_t t3[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[129] = BinaryenConst(the_module, BinaryenLiteralVec128(t3));
+ }
+ expressions[130] = BinaryenUnary(the_module, 69, expressions[129]);
+ {
+ uint8_t t4[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[131] = BinaryenConst(the_module, BinaryenLiteralVec128(t4));
+ }
+ expressions[132] = BinaryenUnary(the_module, 70, expressions[131]);
+ {
+ uint8_t t5[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[133] = BinaryenConst(the_module, BinaryenLiteralVec128(t5));
+ }
+ expressions[134] = BinaryenUnary(the_module, 71, expressions[133]);
+ {
+ uint8_t t6[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[135] = BinaryenConst(the_module, BinaryenLiteralVec128(t6));
+ }
+ expressions[136] = BinaryenUnary(the_module, 72, expressions[135]);
+ {
+ uint8_t t7[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[137] = BinaryenConst(the_module, BinaryenLiteralVec128(t7));
+ }
+ expressions[138] = BinaryenUnary(the_module, 73, expressions[137]);
+ {
+ uint8_t t8[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[139] = BinaryenConst(the_module, BinaryenLiteralVec128(t8));
+ }
+ expressions[140] = BinaryenUnary(the_module, 74, expressions[139]);
+ {
+ uint8_t t9[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[141] = BinaryenConst(the_module, BinaryenLiteralVec128(t9));
+ }
+ expressions[142] = BinaryenUnary(the_module, 75, expressions[141]);
+ {
+ uint8_t t10[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[143] = BinaryenConst(the_module, BinaryenLiteralVec128(t10));
+ }
+ expressions[144] = BinaryenUnary(the_module, 76, expressions[143]);
+ {
+ uint8_t t11[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[145] = BinaryenConst(the_module, BinaryenLiteralVec128(t11));
+ }
+ expressions[146] = BinaryenUnary(the_module, 77, expressions[145]);
+ {
+ uint8_t t12[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[147] = BinaryenConst(the_module, BinaryenLiteralVec128(t12));
+ }
+ expressions[148] = BinaryenUnary(the_module, 78, expressions[147]);
+ {
+ uint8_t t13[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[149] = BinaryenConst(the_module, BinaryenLiteralVec128(t13));
+ }
+ expressions[150] = BinaryenUnary(the_module, 79, expressions[149]);
+ {
+ uint8_t t14[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[151] = BinaryenConst(the_module, BinaryenLiteralVec128(t14));
+ }
+ expressions[152] = BinaryenUnary(the_module, 80, expressions[151]);
+ {
+ uint8_t t15[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[153] = BinaryenConst(the_module, BinaryenLiteralVec128(t15));
+ }
+ expressions[154] = BinaryenUnary(the_module, 81, expressions[153]);
+ {
+ uint8_t t16[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[155] = BinaryenConst(the_module, BinaryenLiteralVec128(t16));
+ }
+ expressions[156] = BinaryenUnary(the_module, 82, expressions[155]);
+ {
+ uint8_t t17[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[157] = BinaryenConst(the_module, BinaryenLiteralVec128(t17));
+ }
+ expressions[158] = BinaryenUnary(the_module, 83, expressions[157]);
+ {
+ uint8_t t18[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[159] = BinaryenConst(the_module, BinaryenLiteralVec128(t18));
+ }
+ expressions[160] = BinaryenUnary(the_module, 84, expressions[159]);
+ {
+ uint8_t t19[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[161] = BinaryenConst(the_module, BinaryenLiteralVec128(t19));
+ }
+ expressions[162] = BinaryenUnary(the_module, 85, expressions[161]);
+ {
+ uint8_t t20[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[163] = BinaryenConst(the_module, BinaryenLiteralVec128(t20));
+ }
+ expressions[164] = BinaryenUnary(the_module, 86, expressions[163]);
+ {
+ uint8_t t21[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[165] = BinaryenConst(the_module, BinaryenLiteralVec128(t21));
+ }
+ expressions[166] = BinaryenUnary(the_module, 87, expressions[165]);
+ {
+ uint8_t t22[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[167] = BinaryenConst(the_module, BinaryenLiteralVec128(t22));
+ }
+ expressions[168] = BinaryenUnary(the_module, 88, expressions[167]);
+ {
+ uint8_t t23[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[169] = BinaryenConst(the_module, BinaryenLiteralVec128(t23));
+ }
+ expressions[170] = BinaryenUnary(the_module, 89, expressions[169]);
+ {
+ uint8_t t24[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[171] = BinaryenConst(the_module, BinaryenLiteralVec128(t24));
+ }
+ expressions[172] = BinaryenUnary(the_module, 90, expressions[171]);
+ {
+ uint8_t t25[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[173] = BinaryenConst(the_module, BinaryenLiteralVec128(t25));
+ }
+ expressions[174] = BinaryenUnary(the_module, 91, expressions[173]);
+ {
+ uint8_t t26[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[175] = BinaryenConst(the_module, BinaryenLiteralVec128(t26));
+ }
+ expressions[176] = BinaryenUnary(the_module, 92, expressions[175]);
+ expressions[177] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
+ expressions[178] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
+ expressions[179] = BinaryenBinary(the_module, 0, expressions[177], expressions[178]);
+ expressions[180] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
+ expressions[181] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9007.33));
+ expressions[182] = BinaryenBinary(the_module, 64, expressions[180], expressions[181]);
+ expressions[183] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
+ expressions[184] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
+ expressions[185] = BinaryenBinary(the_module, 3, expressions[183], expressions[184]);
+ expressions[186] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967274));
+ expressions[187] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967273));
+ expressions[188] = BinaryenBinary(the_module, 29, expressions[186], expressions[187]);
+ expressions[189] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967274));
+ expressions[190] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967273));
+ expressions[191] = BinaryenBinary(the_module, 30, expressions[189], expressions[190]);
+ expressions[192] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
+ expressions[193] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
+ expressions[194] = BinaryenBinary(the_module, 6, expressions[192], expressions[193]);
+ expressions[195] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
+ expressions[196] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
+ expressions[197] = BinaryenBinary(the_module, 7, expressions[195], expressions[196]);
+ expressions[198] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967274));
+ expressions[199] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967273));
+ expressions[200] = BinaryenBinary(the_module, 33, expressions[198], expressions[199]);
+ expressions[201] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
+ expressions[202] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
+ expressions[203] = BinaryenBinary(the_module, 9, expressions[201], expressions[202]);
+ expressions[204] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967274));
+ expressions[205] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967273));
+ expressions[206] = BinaryenBinary(the_module, 35, expressions[204], expressions[205]);
+ expressions[207] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967274));
+ expressions[208] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967273));
+ expressions[209] = BinaryenBinary(the_module, 36, expressions[207], expressions[208]);
+ expressions[210] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
+ expressions[211] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
+ expressions[212] = BinaryenBinary(the_module, 12, expressions[210], expressions[211]);
+ expressions[213] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
+ expressions[214] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
+ expressions[215] = BinaryenBinary(the_module, 13, expressions[213], expressions[214]);
+ expressions[216] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967274));
+ expressions[217] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967273));
+ expressions[218] = BinaryenBinary(the_module, 39, expressions[216], expressions[217]);
+ expressions[219] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
+ expressions[220] = BinaryenConst(the_module, BinaryenLiteralFloat32(-62.5));
+ expressions[221] = BinaryenBinary(the_module, 53, expressions[219], expressions[220]);
+ expressions[222] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
+ expressions[223] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9007.33));
+ expressions[224] = BinaryenBinary(the_module, 67, expressions[222], expressions[223]);
+ expressions[225] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
+ expressions[226] = BinaryenConst(the_module, BinaryenLiteralFloat32(-62.5));
+ expressions[227] = BinaryenBinary(the_module, 55, expressions[225], expressions[226]);
+ expressions[228] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
+ expressions[229] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9007.33));
+ expressions[230] = BinaryenBinary(the_module, 69, expressions[228], expressions[229]);
+ expressions[231] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
+ expressions[232] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
+ expressions[233] = BinaryenBinary(the_module, 15, expressions[231], expressions[232]);
+ expressions[234] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
+ expressions[235] = BinaryenConst(the_module, BinaryenLiteralFloat32(-62.5));
+ expressions[236] = BinaryenBinary(the_module, 58, expressions[234], expressions[235]);
+ expressions[237] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
+ expressions[238] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
+ expressions[239] = BinaryenBinary(the_module, 17, expressions[237], expressions[238]);
+ expressions[240] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967274));
+ expressions[241] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967273));
+ expressions[242] = BinaryenBinary(the_module, 43, expressions[240], expressions[241]);
+ expressions[243] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967274));
+ expressions[244] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967273));
+ expressions[245] = BinaryenBinary(the_module, 44, expressions[243], expressions[244]);
+ expressions[246] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
+ expressions[247] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
+ expressions[248] = BinaryenBinary(the_module, 20, expressions[246], expressions[247]);
+ expressions[249] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967274));
+ expressions[250] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967273));
+ expressions[251] = BinaryenBinary(the_module, 46, expressions[249], expressions[250]);
+ expressions[252] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
+ expressions[253] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
+ expressions[254] = BinaryenBinary(the_module, 22, expressions[252], expressions[253]);
+ expressions[255] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
+ expressions[256] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
+ expressions[257] = BinaryenBinary(the_module, 23, expressions[255], expressions[256]);
+ expressions[258] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967274));
+ expressions[259] = BinaryenConst(the_module, BinaryenLiteralInt64(4294967273));
+ expressions[260] = BinaryenBinary(the_module, 49, expressions[258], expressions[259]);
+ expressions[261] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
+ expressions[262] = BinaryenConst(the_module, BinaryenLiteralFloat32(-62.5));
+ expressions[263] = BinaryenBinary(the_module, 59, expressions[261], expressions[262]);
+ expressions[264] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
+ expressions[265] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9007.33));
+ expressions[266] = BinaryenBinary(the_module, 73, expressions[264], expressions[265]);
+ expressions[267] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
+ expressions[268] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9007.33));
+ expressions[269] = BinaryenBinary(the_module, 74, expressions[267], expressions[268]);
+ expressions[270] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
+ expressions[271] = BinaryenConst(the_module, BinaryenLiteralFloat32(-62.5));
+ expressions[272] = BinaryenBinary(the_module, 62, expressions[270], expressions[271]);
+ {
+ uint8_t t27[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[273] = BinaryenConst(the_module, BinaryenLiteralVec128(t27));
+ }
+ {
+ uint8_t t28[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[274] = BinaryenConst(the_module, BinaryenLiteralVec128(t28));
+ }
+ expressions[275] = BinaryenBinary(the_module, 76, expressions[273], expressions[274]);
+ {
+ uint8_t t29[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[276] = BinaryenConst(the_module, BinaryenLiteralVec128(t29));
+ }
+ {
+ uint8_t t30[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[277] = BinaryenConst(the_module, BinaryenLiteralVec128(t30));
+ }
+ expressions[278] = BinaryenBinary(the_module, 77, expressions[276], expressions[277]);
+ {
+ uint8_t t31[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[279] = BinaryenConst(the_module, BinaryenLiteralVec128(t31));
+ }
+ {
+ uint8_t t32[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[280] = BinaryenConst(the_module, BinaryenLiteralVec128(t32));
+ }
+ expressions[281] = BinaryenBinary(the_module, 78, expressions[279], expressions[280]);
+ {
+ uint8_t t33[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[282] = BinaryenConst(the_module, BinaryenLiteralVec128(t33));
+ }
+ {
+ uint8_t t34[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[283] = BinaryenConst(the_module, BinaryenLiteralVec128(t34));
+ }
+ expressions[284] = BinaryenBinary(the_module, 79, expressions[282], expressions[283]);
+ {
+ uint8_t t35[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[285] = BinaryenConst(the_module, BinaryenLiteralVec128(t35));
+ }
+ {
+ uint8_t t36[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[286] = BinaryenConst(the_module, BinaryenLiteralVec128(t36));
+ }
+ expressions[287] = BinaryenBinary(the_module, 80, expressions[285], expressions[286]);
+ {
+ uint8_t t37[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[288] = BinaryenConst(the_module, BinaryenLiteralVec128(t37));
+ }
+ {
+ uint8_t t38[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[289] = BinaryenConst(the_module, BinaryenLiteralVec128(t38));
+ }
+ expressions[290] = BinaryenBinary(the_module, 81, expressions[288], expressions[289]);
+ {
+ uint8_t t39[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[291] = BinaryenConst(the_module, BinaryenLiteralVec128(t39));
+ }
+ {
+ uint8_t t40[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[292] = BinaryenConst(the_module, BinaryenLiteralVec128(t40));
+ }
+ expressions[293] = BinaryenBinary(the_module, 82, expressions[291], expressions[292]);
+ {
+ uint8_t t41[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[294] = BinaryenConst(the_module, BinaryenLiteralVec128(t41));
+ }
+ {
+ uint8_t t42[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[295] = BinaryenConst(the_module, BinaryenLiteralVec128(t42));
+ }
+ expressions[296] = BinaryenBinary(the_module, 83, expressions[294], expressions[295]);
+ {
+ uint8_t t43[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[297] = BinaryenConst(the_module, BinaryenLiteralVec128(t43));
+ }
+ {
+ uint8_t t44[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[298] = BinaryenConst(the_module, BinaryenLiteralVec128(t44));
+ }
+ expressions[299] = BinaryenBinary(the_module, 84, expressions[297], expressions[298]);
+ {
+ uint8_t t45[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[300] = BinaryenConst(the_module, BinaryenLiteralVec128(t45));
+ }
+ {
+ uint8_t t46[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[301] = BinaryenConst(the_module, BinaryenLiteralVec128(t46));
+ }
+ expressions[302] = BinaryenBinary(the_module, 85, expressions[300], expressions[301]);
+ {
+ uint8_t t47[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[303] = BinaryenConst(the_module, BinaryenLiteralVec128(t47));
+ }
+ {
+ uint8_t t48[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[304] = BinaryenConst(the_module, BinaryenLiteralVec128(t48));
+ }
+ expressions[305] = BinaryenBinary(the_module, 86, expressions[303], expressions[304]);
+ {
+ uint8_t t49[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[306] = BinaryenConst(the_module, BinaryenLiteralVec128(t49));
+ }
+ {
+ uint8_t t50[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[307] = BinaryenConst(the_module, BinaryenLiteralVec128(t50));
+ }
+ expressions[308] = BinaryenBinary(the_module, 87, expressions[306], expressions[307]);
+ {
+ uint8_t t51[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[309] = BinaryenConst(the_module, BinaryenLiteralVec128(t51));
+ }
+ {
+ uint8_t t52[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[310] = BinaryenConst(the_module, BinaryenLiteralVec128(t52));
+ }
+ expressions[311] = BinaryenBinary(the_module, 88, expressions[309], expressions[310]);
+ {
+ uint8_t t53[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[312] = BinaryenConst(the_module, BinaryenLiteralVec128(t53));
+ }
+ {
+ uint8_t t54[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[313] = BinaryenConst(the_module, BinaryenLiteralVec128(t54));
+ }
+ expressions[314] = BinaryenBinary(the_module, 89, expressions[312], expressions[313]);
+ {
+ uint8_t t55[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[315] = BinaryenConst(the_module, BinaryenLiteralVec128(t55));
+ }
+ {
+ uint8_t t56[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[316] = BinaryenConst(the_module, BinaryenLiteralVec128(t56));
+ }
+ expressions[317] = BinaryenBinary(the_module, 90, expressions[315], expressions[316]);
+ {
+ uint8_t t57[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[318] = BinaryenConst(the_module, BinaryenLiteralVec128(t57));
+ }
+ {
+ uint8_t t58[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[319] = BinaryenConst(the_module, BinaryenLiteralVec128(t58));
+ }
+ expressions[320] = BinaryenBinary(the_module, 91, expressions[318], expressions[319]);
+ {
+ uint8_t t59[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[321] = BinaryenConst(the_module, BinaryenLiteralVec128(t59));
+ }
+ {
+ uint8_t t60[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[322] = BinaryenConst(the_module, BinaryenLiteralVec128(t60));
+ }
+ expressions[323] = BinaryenBinary(the_module, 92, expressions[321], expressions[322]);
+ {
+ uint8_t t61[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[324] = BinaryenConst(the_module, BinaryenLiteralVec128(t61));
+ }
+ {
+ uint8_t t62[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[325] = BinaryenConst(the_module, BinaryenLiteralVec128(t62));
+ }
+ expressions[326] = BinaryenBinary(the_module, 93, expressions[324], expressions[325]);
+ {
+ uint8_t t63[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[327] = BinaryenConst(the_module, BinaryenLiteralVec128(t63));
+ }
+ {
+ uint8_t t64[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[328] = BinaryenConst(the_module, BinaryenLiteralVec128(t64));
+ }
+ expressions[329] = BinaryenBinary(the_module, 94, expressions[327], expressions[328]);
+ {
+ uint8_t t65[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[330] = BinaryenConst(the_module, BinaryenLiteralVec128(t65));
+ }
+ {
+ uint8_t t66[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[331] = BinaryenConst(the_module, BinaryenLiteralVec128(t66));
+ }
+ expressions[332] = BinaryenBinary(the_module, 95, expressions[330], expressions[331]);
+ {
+ uint8_t t67[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[333] = BinaryenConst(the_module, BinaryenLiteralVec128(t67));
+ }
+ {
+ uint8_t t68[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[334] = BinaryenConst(the_module, BinaryenLiteralVec128(t68));
+ }
+ expressions[335] = BinaryenBinary(the_module, 96, expressions[333], expressions[334]);
+ {
+ uint8_t t69[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[336] = BinaryenConst(the_module, BinaryenLiteralVec128(t69));
+ }
+ {
+ uint8_t t70[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[337] = BinaryenConst(the_module, BinaryenLiteralVec128(t70));
+ }
+ expressions[338] = BinaryenBinary(the_module, 97, expressions[336], expressions[337]);
+ {
+ uint8_t t71[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[339] = BinaryenConst(the_module, BinaryenLiteralVec128(t71));
+ }
+ {
+ uint8_t t72[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[340] = BinaryenConst(the_module, BinaryenLiteralVec128(t72));
+ }
+ expressions[341] = BinaryenBinary(the_module, 98, expressions[339], expressions[340]);
+ {
+ uint8_t t73[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[342] = BinaryenConst(the_module, BinaryenLiteralVec128(t73));
+ }
+ {
+ uint8_t t74[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[343] = BinaryenConst(the_module, BinaryenLiteralVec128(t74));
+ }
+ expressions[344] = BinaryenBinary(the_module, 99, expressions[342], expressions[343]);
+ {
+ uint8_t t75[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[345] = BinaryenConst(the_module, BinaryenLiteralVec128(t75));
+ }
+ {
+ uint8_t t76[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[346] = BinaryenConst(the_module, BinaryenLiteralVec128(t76));
+ }
+ expressions[347] = BinaryenBinary(the_module, 100, expressions[345], expressions[346]);
+ {
+ uint8_t t77[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[348] = BinaryenConst(the_module, BinaryenLiteralVec128(t77));
+ }
+ {
+ uint8_t t78[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[349] = BinaryenConst(the_module, BinaryenLiteralVec128(t78));
+ }
+ expressions[350] = BinaryenBinary(the_module, 101, expressions[348], expressions[349]);
+ {
+ uint8_t t79[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[351] = BinaryenConst(the_module, BinaryenLiteralVec128(t79));
+ }
+ {
+ uint8_t t80[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[352] = BinaryenConst(the_module, BinaryenLiteralVec128(t80));
+ }
+ expressions[353] = BinaryenBinary(the_module, 102, expressions[351], expressions[352]);
+ {
+ uint8_t t81[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[354] = BinaryenConst(the_module, BinaryenLiteralVec128(t81));
+ }
+ {
+ uint8_t t82[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[355] = BinaryenConst(the_module, BinaryenLiteralVec128(t82));
+ }
+ expressions[356] = BinaryenBinary(the_module, 103, expressions[354], expressions[355]);
+ {
+ uint8_t t83[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[357] = BinaryenConst(the_module, BinaryenLiteralVec128(t83));
+ }
+ {
+ uint8_t t84[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[358] = BinaryenConst(the_module, BinaryenLiteralVec128(t84));
+ }
+ expressions[359] = BinaryenBinary(the_module, 104, expressions[357], expressions[358]);
+ {
+ uint8_t t85[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[360] = BinaryenConst(the_module, BinaryenLiteralVec128(t85));
+ }
+ {
+ uint8_t t86[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[361] = BinaryenConst(the_module, BinaryenLiteralVec128(t86));
+ }
+ expressions[362] = BinaryenBinary(the_module, 105, expressions[360], expressions[361]);
+ {
+ uint8_t t87[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[363] = BinaryenConst(the_module, BinaryenLiteralVec128(t87));
+ }
+ {
+ uint8_t t88[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[364] = BinaryenConst(the_module, BinaryenLiteralVec128(t88));
+ }
+ expressions[365] = BinaryenBinary(the_module, 106, expressions[363], expressions[364]);
+ {
+ uint8_t t89[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[366] = BinaryenConst(the_module, BinaryenLiteralVec128(t89));
+ }
+ {
+ uint8_t t90[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[367] = BinaryenConst(the_module, BinaryenLiteralVec128(t90));
+ }
+ expressions[368] = BinaryenBinary(the_module, 107, expressions[366], expressions[367]);
+ {
+ uint8_t t91[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[369] = BinaryenConst(the_module, BinaryenLiteralVec128(t91));
+ }
+ {
+ uint8_t t92[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[370] = BinaryenConst(the_module, BinaryenLiteralVec128(t92));
+ }
+ expressions[371] = BinaryenBinary(the_module, 108, expressions[369], expressions[370]);
+ {
+ uint8_t t93[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[372] = BinaryenConst(the_module, BinaryenLiteralVec128(t93));
+ }
+ {
+ uint8_t t94[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[373] = BinaryenConst(the_module, BinaryenLiteralVec128(t94));
+ }
+ expressions[374] = BinaryenBinary(the_module, 109, expressions[372], expressions[373]);
+ {
+ uint8_t t95[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[375] = BinaryenConst(the_module, BinaryenLiteralVec128(t95));
+ }
+ {
+ uint8_t t96[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[376] = BinaryenConst(the_module, BinaryenLiteralVec128(t96));
+ }
+ expressions[377] = BinaryenBinary(the_module, 110, expressions[375], expressions[376]);
+ {
+ uint8_t t97[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[378] = BinaryenConst(the_module, BinaryenLiteralVec128(t97));
+ }
+ {
+ uint8_t t98[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[379] = BinaryenConst(the_module, BinaryenLiteralVec128(t98));
+ }
+ expressions[380] = BinaryenBinary(the_module, 111, expressions[378], expressions[379]);
+ {
+ uint8_t t99[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[381] = BinaryenConst(the_module, BinaryenLiteralVec128(t99));
+ }
+ {
+ uint8_t t100[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[382] = BinaryenConst(the_module, BinaryenLiteralVec128(t100));
+ }
+ expressions[383] = BinaryenBinary(the_module, 111, expressions[381], expressions[382]);
+ {
+ uint8_t t101[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[384] = BinaryenConst(the_module, BinaryenLiteralVec128(t101));
+ }
+ {
+ uint8_t t102[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[385] = BinaryenConst(the_module, BinaryenLiteralVec128(t102));
+ }
+ expressions[386] = BinaryenBinary(the_module, 113, expressions[384], expressions[385]);
+ {
+ uint8_t t103[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[387] = BinaryenConst(the_module, BinaryenLiteralVec128(t103));
+ }
+ {
+ uint8_t t104[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[388] = BinaryenConst(the_module, BinaryenLiteralVec128(t104));
+ }
+ expressions[389] = BinaryenBinary(the_module, 114, expressions[387], expressions[388]);
+ {
+ uint8_t t105[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[390] = BinaryenConst(the_module, BinaryenLiteralVec128(t105));
+ }
+ {
+ uint8_t t106[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[391] = BinaryenConst(the_module, BinaryenLiteralVec128(t106));
+ }
+ expressions[392] = BinaryenBinary(the_module, 115, expressions[390], expressions[391]);
+ {
+ uint8_t t107[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[393] = BinaryenConst(the_module, BinaryenLiteralVec128(t107));
+ }
+ {
+ uint8_t t108[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[394] = BinaryenConst(the_module, BinaryenLiteralVec128(t108));
+ }
+ expressions[395] = BinaryenBinary(the_module, 116, expressions[393], expressions[394]);
+ {
+ uint8_t t109[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[396] = BinaryenConst(the_module, BinaryenLiteralVec128(t109));
+ }
+ {
+ uint8_t t110[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[397] = BinaryenConst(the_module, BinaryenLiteralVec128(t110));
+ }
+ expressions[398] = BinaryenBinary(the_module, 117, expressions[396], expressions[397]);
+ {
+ uint8_t t111[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[399] = BinaryenConst(the_module, BinaryenLiteralVec128(t111));
+ }
+ {
+ uint8_t t112[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[400] = BinaryenConst(the_module, BinaryenLiteralVec128(t112));
+ }
+ expressions[401] = BinaryenUnary(the_module, 118, expressions[399]);
+ {
+ uint8_t t113[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[402] = BinaryenConst(the_module, BinaryenLiteralVec128(t113));
+ }
+ {
+ uint8_t t114[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[403] = BinaryenConst(the_module, BinaryenLiteralVec128(t114));
+ }
+ expressions[404] = BinaryenUnary(the_module, 119, expressions[402]);
+ {
+ uint8_t t115[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[405] = BinaryenConst(the_module, BinaryenLiteralVec128(t115));
+ }
+ {
+ uint8_t t116[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[406] = BinaryenConst(the_module, BinaryenLiteralVec128(t116));
+ }
+ expressions[407] = BinaryenUnary(the_module, 120, expressions[405]);
+ {
+ uint8_t t117[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[408] = BinaryenConst(the_module, BinaryenLiteralVec128(t117));
+ }
+ {
+ uint8_t t118[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[409] = BinaryenConst(the_module, BinaryenLiteralVec128(t118));
+ }
+ expressions[410] = BinaryenBinary(the_module, 121, expressions[408], expressions[409]);
+ {
+ uint8_t t119[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[411] = BinaryenConst(the_module, BinaryenLiteralVec128(t119));
+ }
+ {
+ uint8_t t120[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[412] = BinaryenConst(the_module, BinaryenLiteralVec128(t120));
+ }
+ expressions[413] = BinaryenBinary(the_module, 122, expressions[411], expressions[412]);
+ {
+ uint8_t t121[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[414] = BinaryenConst(the_module, BinaryenLiteralVec128(t121));
+ }
+ {
+ uint8_t t122[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[415] = BinaryenConst(the_module, BinaryenLiteralVec128(t122));
+ }
+ expressions[416] = BinaryenBinary(the_module, 123, expressions[414], expressions[415]);
+ {
+ uint8_t t123[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[417] = BinaryenConst(the_module, BinaryenLiteralVec128(t123));
+ }
+ {
+ uint8_t t124[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[418] = BinaryenConst(the_module, BinaryenLiteralVec128(t124));
+ }
+ expressions[419] = BinaryenBinary(the_module, 124, expressions[417], expressions[418]);
+ {
+ uint8_t t125[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[420] = BinaryenConst(the_module, BinaryenLiteralVec128(t125));
+ }
+ {
+ uint8_t t126[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[421] = BinaryenConst(the_module, BinaryenLiteralVec128(t126));
+ }
+ expressions[422] = BinaryenBinary(the_module, 125, expressions[420], expressions[421]);
+ {
+ uint8_t t127[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[423] = BinaryenConst(the_module, BinaryenLiteralVec128(t127));
+ }
+ {
+ uint8_t t128[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[424] = BinaryenConst(the_module, BinaryenLiteralVec128(t128));
+ }
+ expressions[425] = BinaryenBinary(the_module, 126, expressions[423], expressions[424]);
+ {
+ uint8_t t129[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[426] = BinaryenConst(the_module, BinaryenLiteralVec128(t129));
+ }
+ {
+ uint8_t t130[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[427] = BinaryenConst(the_module, BinaryenLiteralVec128(t130));
+ }
+ expressions[428] = BinaryenBinary(the_module, 127, expressions[426], expressions[427]);
+ {
+ uint8_t t131[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[429] = BinaryenConst(the_module, BinaryenLiteralVec128(t131));
+ }
+ {
+ uint8_t t132[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[430] = BinaryenConst(the_module, BinaryenLiteralVec128(t132));
+ }
+ expressions[431] = BinaryenBinary(the_module, 128, expressions[429], expressions[430]);
+ {
+ uint8_t t133[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[432] = BinaryenConst(the_module, BinaryenLiteralVec128(t133));
+ }
+ {
+ uint8_t t134[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[433] = BinaryenConst(the_module, BinaryenLiteralVec128(t134));
+ }
+ expressions[434] = BinaryenBinary(the_module, 129, expressions[432], expressions[433]);
+ {
+ uint8_t t135[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[435] = BinaryenConst(the_module, BinaryenLiteralVec128(t135));
+ }
+ {
+ uint8_t t136[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[436] = BinaryenConst(the_module, BinaryenLiteralVec128(t136));
+ }
+ expressions[437] = BinaryenBinary(the_module, 130, expressions[435], expressions[436]);
+ {
+ uint8_t t137[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[438] = BinaryenConst(the_module, BinaryenLiteralVec128(t137));
+ }
+ {
+ uint8_t t138[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[439] = BinaryenConst(the_module, BinaryenLiteralVec128(t138));
+ }
+ expressions[440] = BinaryenBinary(the_module, 131, expressions[438], expressions[439]);
+ {
+ uint8_t t139[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[441] = BinaryenConst(the_module, BinaryenLiteralVec128(t139));
+ }
+ {
+ uint8_t t140[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[442] = BinaryenConst(the_module, BinaryenLiteralVec128(t140));
+ }
+ expressions[443] = BinaryenBinary(the_module, 132, expressions[441], expressions[442]);
+ {
+ uint8_t t141[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[444] = BinaryenConst(the_module, BinaryenLiteralVec128(t141));
+ }
+ {
+ uint8_t t142[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[445] = BinaryenConst(the_module, BinaryenLiteralVec128(t142));
+ }
+ expressions[446] = BinaryenBinary(the_module, 133, expressions[444], expressions[445]);
+ {
+ uint8_t t143[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[447] = BinaryenConst(the_module, BinaryenLiteralVec128(t143));
+ }
+ {
+ uint8_t t144[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[448] = BinaryenConst(the_module, BinaryenLiteralVec128(t144));
+ }
+ expressions[449] = BinaryenBinary(the_module, 134, expressions[447], expressions[448]);
+ {
+ uint8_t t145[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[450] = BinaryenConst(the_module, BinaryenLiteralVec128(t145));
+ }
+ {
+ uint8_t t146[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[451] = BinaryenConst(the_module, BinaryenLiteralVec128(t146));
+ }
+ expressions[452] = BinaryenBinary(the_module, 135, expressions[450], expressions[451]);
+ {
+ uint8_t t147[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[453] = BinaryenConst(the_module, BinaryenLiteralVec128(t147));
+ }
+ {
+ uint8_t t148[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[454] = BinaryenConst(the_module, BinaryenLiteralVec128(t148));
+ }
+ expressions[455] = BinaryenBinary(the_module, 136, expressions[453], expressions[454]);
+ {
+ uint8_t t149[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[456] = BinaryenConst(the_module, BinaryenLiteralVec128(t149));
+ }
+ {
+ uint8_t t150[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[457] = BinaryenConst(the_module, BinaryenLiteralVec128(t150));
+ }
+ expressions[458] = BinaryenBinary(the_module, 137, expressions[456], expressions[457]);
+ {
+ uint8_t t151[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[459] = BinaryenConst(the_module, BinaryenLiteralVec128(t151));
+ }
+ {
+ uint8_t t152[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[460] = BinaryenConst(the_module, BinaryenLiteralVec128(t152));
+ }
+ expressions[461] = BinaryenBinary(the_module, 138, expressions[459], expressions[460]);
+ {
+ uint8_t t153[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[462] = BinaryenConst(the_module, BinaryenLiteralVec128(t153));
+ }
+ {
+ uint8_t t154[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[463] = BinaryenConst(the_module, BinaryenLiteralVec128(t154));
+ }
+ expressions[464] = BinaryenBinary(the_module, 139, expressions[462], expressions[463]);
+ {
+ uint8_t t155[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[465] = BinaryenConst(the_module, BinaryenLiteralVec128(t155));
+ }
+ {
+ uint8_t t156[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[466] = BinaryenConst(the_module, BinaryenLiteralVec128(t156));
+ }
+ expressions[467] = BinaryenBinary(the_module, 140, expressions[465], expressions[466]);
+ {
+ uint8_t t157[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[468] = BinaryenConst(the_module, BinaryenLiteralVec128(t157));
+ }
+ {
+ uint8_t t158[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[469] = BinaryenConst(the_module, BinaryenLiteralVec128(t158));
+ }
+ expressions[470] = BinaryenBinary(the_module, 141, expressions[468], expressions[469]);
+ {
+ uint8_t t159[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[471] = BinaryenConst(the_module, BinaryenLiteralVec128(t159));
+ }
+ {
+ uint8_t t160[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[472] = BinaryenConst(the_module, BinaryenLiteralVec128(t160));
+ }
+ expressions[473] = BinaryenBinary(the_module, 142, expressions[471], expressions[472]);
+ {
+ uint8_t t161[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[474] = BinaryenConst(the_module, BinaryenLiteralVec128(t161));
+ }
+ {
+ uint8_t t162[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[475] = BinaryenConst(the_module, BinaryenLiteralVec128(t162));
+ }
+ expressions[476] = BinaryenBinary(the_module, 143, expressions[474], expressions[475]);
+ {
+ uint8_t t163[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[477] = BinaryenConst(the_module, BinaryenLiteralVec128(t163));
+ }
+ {
+ uint8_t t164[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[478] = BinaryenConst(the_module, BinaryenLiteralVec128(t164));
+ }
+ expressions[479] = BinaryenBinary(the_module, 144, expressions[477], expressions[478]);
+ {
+ uint8_t t165[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[480] = BinaryenConst(the_module, BinaryenLiteralVec128(t165));
+ }
+ {
+ uint8_t t166[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[481] = BinaryenConst(the_module, BinaryenLiteralVec128(t166));
+ }
+ expressions[482] = BinaryenBinary(the_module, 145, expressions[480], expressions[481]);
+ {
+ uint8_t t167[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[483] = BinaryenConst(the_module, BinaryenLiteralVec128(t167));
+ }
+ {
+ uint8_t t168[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[484] = BinaryenConst(the_module, BinaryenLiteralVec128(t168));
+ }
+ expressions[485] = BinaryenBinary(the_module, 146, expressions[483], expressions[484]);
+ {
+ uint8_t t169[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[486] = BinaryenConst(the_module, BinaryenLiteralVec128(t169));
+ }
+ {
+ uint8_t t170[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[487] = BinaryenConst(the_module, BinaryenLiteralVec128(t170));
+ }
+ expressions[488] = BinaryenBinary(the_module, 147, expressions[486], expressions[487]);
+ {
+ uint8_t t171[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[489] = BinaryenConst(the_module, BinaryenLiteralVec128(t171));
+ }
+ {
+ uint8_t t172[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[490] = BinaryenConst(the_module, BinaryenLiteralVec128(t172));
+ }
+ expressions[491] = BinaryenBinary(the_module, 148, expressions[489], expressions[490]);
+ {
+ uint8_t t173[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[492] = BinaryenConst(the_module, BinaryenLiteralVec128(t173));
+ }
+ {
+ uint8_t t174[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[493] = BinaryenConst(the_module, BinaryenLiteralVec128(t174));
+ }
+ expressions[494] = BinaryenBinary(the_module, 149, expressions[492], expressions[493]);
+ {
+ uint8_t t175[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[495] = BinaryenConst(the_module, BinaryenLiteralVec128(t175));
+ }
+ {
+ uint8_t t176[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[496] = BinaryenConst(the_module, BinaryenLiteralVec128(t176));
+ }
+ expressions[497] = BinaryenBinary(the_module, 150, expressions[495], expressions[496]);
+ {
+ uint8_t t177[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[498] = BinaryenConst(the_module, BinaryenLiteralVec128(t177));
+ }
+ {
+ uint8_t t178[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[499] = BinaryenConst(the_module, BinaryenLiteralVec128(t178));
+ }
+ expressions[500] = BinaryenBinary(the_module, 151, expressions[498], expressions[499]);
+ {
+ uint8_t t179[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[501] = BinaryenConst(the_module, BinaryenLiteralVec128(t179));
+ }
+ expressions[502] = BinaryenSIMDExtract(the_module, 0, expressions[501], 1);
+ {
+ uint8_t t180[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[503] = BinaryenConst(the_module, BinaryenLiteralVec128(t180));
+ }
+ expressions[504] = BinaryenSIMDExtract(the_module, 1, expressions[503], 1);
+ {
+ uint8_t t181[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[505] = BinaryenConst(the_module, BinaryenLiteralVec128(t181));
+ }
+ expressions[506] = BinaryenSIMDExtract(the_module, 2, expressions[505], 1);
+ {
+ uint8_t t182[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[507] = BinaryenConst(the_module, BinaryenLiteralVec128(t182));
+ }
+ expressions[508] = BinaryenSIMDExtract(the_module, 3, expressions[507], 1);
+ {
+ uint8_t t183[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[509] = BinaryenConst(the_module, BinaryenLiteralVec128(t183));
+ }
+ expressions[510] = BinaryenSIMDExtract(the_module, 4, expressions[509], 1);
+ {
+ uint8_t t184[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[511] = BinaryenConst(the_module, BinaryenLiteralVec128(t184));
+ }
+ expressions[512] = BinaryenSIMDExtract(the_module, 5, expressions[511], 1);
+ {
+ uint8_t t185[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[513] = BinaryenConst(the_module, BinaryenLiteralVec128(t185));
+ }
+ expressions[514] = BinaryenSIMDExtract(the_module, 6, expressions[513], 1);
+ {
+ uint8_t t186[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[515] = BinaryenConst(the_module, BinaryenLiteralVec128(t186));
+ }
+ expressions[516] = BinaryenSIMDExtract(the_module, 7, expressions[515], 1);
+ {
+ uint8_t t187[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[517] = BinaryenConst(the_module, BinaryenLiteralVec128(t187));
+ }
+ expressions[518] = BinaryenConst(the_module, BinaryenLiteralInt32(42));
+ expressions[519] = BinaryenSIMDReplace(the_module, 1, expressions[517], 1, expressions[518]);
+ {
+ uint8_t t188[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[520] = BinaryenConst(the_module, BinaryenLiteralVec128(t188));
+ }
+ expressions[521] = BinaryenConst(the_module, BinaryenLiteralInt32(42));
+ expressions[522] = BinaryenSIMDReplace(the_module, 0, expressions[520], 1, expressions[521]);
+ {
+ uint8_t t189[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[523] = BinaryenConst(the_module, BinaryenLiteralVec128(t189));
+ }
+ expressions[524] = BinaryenConst(the_module, BinaryenLiteralInt32(42));
+ expressions[525] = BinaryenSIMDReplace(the_module, 2, expressions[523], 1, expressions[524]);
+ {
+ uint8_t t190[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[526] = BinaryenConst(the_module, BinaryenLiteralVec128(t190));
+ }
+ expressions[527] = BinaryenConst(the_module, BinaryenLiteralInt64(184683593770));
+ expressions[528] = BinaryenSIMDReplace(the_module, 3, expressions[526], 1, expressions[527]);
+ {
+ uint8_t t191[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[529] = BinaryenConst(the_module, BinaryenLiteralVec128(t191));
+ }
+ expressions[530] = BinaryenConst(the_module, BinaryenLiteralFloat32(42));
+ expressions[531] = BinaryenSIMDReplace(the_module, 4, expressions[529], 1, expressions[530]);
+ {
+ uint8_t t192[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[532] = BinaryenConst(the_module, BinaryenLiteralVec128(t192));
+ }
+ expressions[533] = BinaryenConst(the_module, BinaryenLiteralFloat64(42));
+ expressions[534] = BinaryenSIMDReplace(the_module, 5, expressions[532], 1, expressions[533]);
+ {
+ uint8_t t193[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[535] = BinaryenConst(the_module, BinaryenLiteralVec128(t193));
+ }
+ expressions[536] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
+ expressions[537] = BinaryenSIMDShift(the_module, 0, expressions[535], expressions[536]);
+ {
+ uint8_t t194[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[538] = BinaryenConst(the_module, BinaryenLiteralVec128(t194));
+ }
+ expressions[539] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
+ expressions[540] = BinaryenSIMDShift(the_module, 1, expressions[538], expressions[539]);
+ {
+ uint8_t t195[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[541] = BinaryenConst(the_module, BinaryenLiteralVec128(t195));
+ }
+ expressions[542] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
+ expressions[543] = BinaryenSIMDShift(the_module, 2, expressions[541], expressions[542]);
+ {
+ uint8_t t196[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[544] = BinaryenConst(the_module, BinaryenLiteralVec128(t196));
+ }
+ expressions[545] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
+ expressions[546] = BinaryenSIMDShift(the_module, 3, expressions[544], expressions[545]);
+ {
+ uint8_t t197[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[547] = BinaryenConst(the_module, BinaryenLiteralVec128(t197));
+ }
+ expressions[548] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
+ expressions[549] = BinaryenSIMDShift(the_module, 4, expressions[547], expressions[548]);
+ {
+ uint8_t t198[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[550] = BinaryenConst(the_module, BinaryenLiteralVec128(t198));
+ }
+ expressions[551] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
+ expressions[552] = BinaryenSIMDShift(the_module, 5, expressions[550], expressions[551]);
+ {
+ uint8_t t199[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[553] = BinaryenConst(the_module, BinaryenLiteralVec128(t199));
+ }
+ expressions[554] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
+ expressions[555] = BinaryenSIMDShift(the_module, 6, expressions[553], expressions[554]);
+ {
+ uint8_t t200[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[556] = BinaryenConst(the_module, BinaryenLiteralVec128(t200));
+ }
+ expressions[557] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
+ expressions[558] = BinaryenSIMDShift(the_module, 7, expressions[556], expressions[557]);
+ {
+ uint8_t t201[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[559] = BinaryenConst(the_module, BinaryenLiteralVec128(t201));
+ }
+ expressions[560] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
+ expressions[561] = BinaryenSIMDShift(the_module, 8, expressions[559], expressions[560]);
+ {
+ uint8_t t202[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[562] = BinaryenConst(the_module, BinaryenLiteralVec128(t202));
+ }
+ expressions[563] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
+ expressions[564] = BinaryenSIMDShift(the_module, 9, expressions[562], expressions[563]);
+ {
+ uint8_t t203[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[565] = BinaryenConst(the_module, BinaryenLiteralVec128(t203));
+ }
+ expressions[566] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
+ expressions[567] = BinaryenSIMDShift(the_module, 10, expressions[565], expressions[566]);
+ {
+ uint8_t t204[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[568] = BinaryenConst(the_module, BinaryenLiteralVec128(t204));
+ }
+ expressions[569] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
+ expressions[570] = BinaryenSIMDShift(the_module, 11, expressions[568], expressions[569]);
+ {
+ uint8_t t205[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[571] = BinaryenConst(the_module, BinaryenLiteralVec128(t205));
+ }
+ {
+ uint8_t t206[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[572] = BinaryenConst(the_module, BinaryenLiteralVec128(t206));
+ }
+ {
+ uint8_t mask[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[573] = BinaryenSIMDShuffle(the_module, expressions[571], expressions[572], mask);
+ }
+ {
+ uint8_t t207[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[574] = BinaryenConst(the_module, BinaryenLiteralVec128(t207));
+ }
+ {
+ uint8_t t208[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[575] = BinaryenConst(the_module, BinaryenLiteralVec128(t208));
+ }
+ {
+ uint8_t t209[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[576] = BinaryenConst(the_module, BinaryenLiteralVec128(t209));
+ }
+ expressions[577] = BinaryenSIMDBitselect(the_module, expressions[574], expressions[575], expressions[576]);
{
BinaryenExpressionRef children[] = { 0 };
- expressions[207] = BinaryenBlock(the_module, NULL, children, 0, 0);
- }
- expressions[208] = BinaryenIf(the_module, expressions[7], expressions[8], expressions[9]);
- expressions[209] = BinaryenIf(the_module, expressions[10], expressions[11], expressions[0]);
- expressions[210] = BinaryenConst(the_module, BinaryenLiteralInt32(0));
- expressions[211] = BinaryenLoop(the_module, "in", expressions[210]);
- expressions[212] = BinaryenConst(the_module, BinaryenLiteralInt32(0));
- expressions[213] = BinaryenLoop(the_module, NULL, expressions[212]);
- expressions[214] = BinaryenBreak(the_module, "the-value", expressions[12], expressions[13]);
- expressions[215] = BinaryenConst(the_module, BinaryenLiteralInt32(2));
- expressions[216] = BinaryenBreak(the_module, "the-nothing", expressions[215], expressions[0]);
- expressions[217] = BinaryenConst(the_module, BinaryenLiteralInt32(3));
- expressions[218] = BinaryenBreak(the_module, "the-value", expressions[0], expressions[217]);
- expressions[219] = BinaryenBreak(the_module, "the-nothing", expressions[0], expressions[0]);
+ expressions[578] = BinaryenBlock(the_module, NULL, children, 0, 0);
+ }
+ expressions[579] = BinaryenIf(the_module, expressions[7], expressions[8], expressions[9]);
+ expressions[580] = BinaryenIf(the_module, expressions[10], expressions[11], expressions[0]);
+ expressions[581] = BinaryenConst(the_module, BinaryenLiteralInt32(0));
+ expressions[582] = BinaryenLoop(the_module, "in", expressions[581]);
+ expressions[583] = BinaryenConst(the_module, BinaryenLiteralInt32(0));
+ expressions[584] = BinaryenLoop(the_module, NULL, expressions[583]);
+ expressions[585] = BinaryenBreak(the_module, "the-value", expressions[12], expressions[13]);
+ expressions[586] = BinaryenConst(the_module, BinaryenLiteralInt32(2));
+ expressions[587] = BinaryenBreak(the_module, "the-nothing", expressions[586], expressions[0]);
+ expressions[588] = BinaryenConst(the_module, BinaryenLiteralInt32(3));
+ expressions[589] = BinaryenBreak(the_module, "the-value", expressions[0], expressions[588]);
+ expressions[590] = BinaryenBreak(the_module, "the-nothing", expressions[0], expressions[0]);
{
const char* names[] = { "the-value" };
- expressions[220] = BinaryenSwitch(the_module, names, 1, "the-value", expressions[14], expressions[15]);
+ expressions[591] = BinaryenSwitch(the_module, names, 1, "the-value", expressions[14], expressions[15]);
}
- expressions[221] = BinaryenConst(the_module, BinaryenLiteralInt32(2));
+ expressions[592] = BinaryenConst(the_module, BinaryenLiteralInt32(2));
{
const char* names[] = { "the-nothing" };
- expressions[222] = BinaryenSwitch(the_module, names, 1, "the-nothing", expressions[221], expressions[0]);
- }
- expressions[223] = BinaryenConst(the_module, BinaryenLiteralInt32(13));
- expressions[224] = BinaryenConst(the_module, BinaryenLiteralInt64(37));
- expressions[225] = BinaryenConst(the_module, BinaryenLiteralFloat32(1.3));
- expressions[226] = BinaryenConst(the_module, BinaryenLiteralFloat64(3.7));
- {
- BinaryenExpressionRef operands[] = { expressions[223], expressions[224], expressions[225], expressions[226] };
- expressions[227] = BinaryenCall(the_module, "kitchen()sinker", operands, 4, 1);
- }
- expressions[228] = BinaryenUnary(the_module, 20, expressions[227]);
- expressions[229] = BinaryenConst(the_module, BinaryenLiteralInt32(13));
- expressions[230] = BinaryenConst(the_module, BinaryenLiteralFloat64(3.7));
- {
- BinaryenExpressionRef operands[] = { expressions[229], expressions[230] };
- expressions[231] = BinaryenCall(the_module, "an-imported", operands, 2, 3);
- }
- expressions[232] = BinaryenUnary(the_module, 25, expressions[231]);
- expressions[233] = BinaryenUnary(the_module, 20, expressions[232]);
- expressions[234] = BinaryenConst(the_module, BinaryenLiteralInt32(2449));
- expressions[235] = BinaryenConst(the_module, BinaryenLiteralInt32(13));
- expressions[236] = BinaryenConst(the_module, BinaryenLiteralInt64(37));
- expressions[237] = BinaryenConst(the_module, BinaryenLiteralFloat32(1.3));
- expressions[238] = BinaryenConst(the_module, BinaryenLiteralFloat64(3.7));
- {
- BinaryenExpressionRef operands[] = { expressions[235], expressions[236], expressions[237], expressions[238] };
- expressions[239] = BinaryenCallIndirect(the_module, expressions[234], operands, 4, "iiIfF");
- }
- expressions[240] = BinaryenUnary(the_module, 20, expressions[239]);
- expressions[241] = BinaryenGetLocal(the_module, 0, 1);
- expressions[242] = BinaryenDrop(the_module, expressions[241]);
- expressions[243] = BinaryenConst(the_module, BinaryenLiteralInt32(101));
- expressions[244] = BinaryenSetLocal(the_module, 0, expressions[243]);
- expressions[245] = BinaryenConst(the_module, BinaryenLiteralInt32(102));
- expressions[246] = BinaryenTeeLocal(the_module, 0, expressions[245]);
- expressions[247] = BinaryenDrop(the_module, expressions[246]);
- expressions[248] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
- expressions[249] = BinaryenLoad(the_module, 4, 1, 0, 0, 1, expressions[248]);
- expressions[250] = BinaryenConst(the_module, BinaryenLiteralInt32(8));
- expressions[251] = BinaryenLoad(the_module, 2, 1, 2, 1, 2, expressions[250]);
- expressions[252] = BinaryenConst(the_module, BinaryenLiteralInt32(2));
- expressions[253] = BinaryenLoad(the_module, 4, 1, 0, 0, 3, expressions[252]);
- expressions[254] = BinaryenConst(the_module, BinaryenLiteralInt32(9));
- expressions[255] = BinaryenLoad(the_module, 8, 1, 2, 8, 4, expressions[254]);
- expressions[256] = BinaryenStore(the_module, 4, 0, 0, expressions[19], expressions[20], 1);
- expressions[257] = BinaryenStore(the_module, 8, 2, 4, expressions[21], expressions[22], 2);
- expressions[258] = BinaryenSelect(the_module, expressions[16], expressions[17], expressions[18]);
- expressions[259] = BinaryenConst(the_module, BinaryenLiteralInt32(1337));
- expressions[260] = BinaryenReturn(the_module, expressions[259]);
- expressions[261] = BinaryenNop(the_module);
- expressions[262] = BinaryenUnreachable(the_module);
+ expressions[593] = BinaryenSwitch(the_module, names, 1, "the-nothing", expressions[592], expressions[0]);
+ }
+ expressions[594] = BinaryenConst(the_module, BinaryenLiteralInt32(13));
+ expressions[595] = BinaryenConst(the_module, BinaryenLiteralInt64(37));
+ expressions[596] = BinaryenConst(the_module, BinaryenLiteralFloat32(1.3));
+ expressions[597] = BinaryenConst(the_module, BinaryenLiteralFloat64(3.7));
+ {
+ BinaryenExpressionRef operands[] = { expressions[594], expressions[595], expressions[596], expressions[597] };
+ expressions[598] = BinaryenCall(the_module, "kitchen()sinker", operands, 4, 1);
+ }
+ expressions[599] = BinaryenUnary(the_module, 20, expressions[598]);
+ expressions[600] = BinaryenConst(the_module, BinaryenLiteralInt32(13));
+ expressions[601] = BinaryenConst(the_module, BinaryenLiteralFloat64(3.7));
+ {
+ BinaryenExpressionRef operands[] = { expressions[600], expressions[601] };
+ expressions[602] = BinaryenCall(the_module, "an-imported", operands, 2, 3);
+ }
+ expressions[603] = BinaryenUnary(the_module, 25, expressions[602]);
+ expressions[604] = BinaryenUnary(the_module, 20, expressions[603]);
+ expressions[605] = BinaryenConst(the_module, BinaryenLiteralInt32(2449));
+ expressions[606] = BinaryenConst(the_module, BinaryenLiteralInt32(13));
+ expressions[607] = BinaryenConst(the_module, BinaryenLiteralInt64(37));
+ expressions[608] = BinaryenConst(the_module, BinaryenLiteralFloat32(1.3));
+ expressions[609] = BinaryenConst(the_module, BinaryenLiteralFloat64(3.7));
+ {
+ BinaryenExpressionRef operands[] = { expressions[606], expressions[607], expressions[608], expressions[609] };
+ expressions[610] = BinaryenCallIndirect(the_module, expressions[605], operands, 4, "iiIfF");
+ }
+ expressions[611] = BinaryenUnary(the_module, 20, expressions[610]);
+ expressions[612] = BinaryenGetLocal(the_module, 0, 1);
+ expressions[613] = BinaryenDrop(the_module, expressions[612]);
+ expressions[614] = BinaryenConst(the_module, BinaryenLiteralInt32(101));
+ expressions[615] = BinaryenSetLocal(the_module, 0, expressions[614]);
+ expressions[616] = BinaryenConst(the_module, BinaryenLiteralInt32(102));
+ expressions[617] = BinaryenTeeLocal(the_module, 0, expressions[616]);
+ expressions[618] = BinaryenDrop(the_module, expressions[617]);
+ expressions[619] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
+ expressions[620] = BinaryenLoad(the_module, 4, 1, 0, 0, 1, expressions[619]);
+ expressions[621] = BinaryenConst(the_module, BinaryenLiteralInt32(8));
+ expressions[622] = BinaryenLoad(the_module, 2, 1, 2, 1, 2, expressions[621]);
+ expressions[623] = BinaryenConst(the_module, BinaryenLiteralInt32(2));
+ expressions[624] = BinaryenLoad(the_module, 4, 1, 0, 0, 3, expressions[623]);
+ expressions[625] = BinaryenConst(the_module, BinaryenLiteralInt32(9));
+ expressions[626] = BinaryenLoad(the_module, 8, 1, 2, 8, 4, expressions[625]);
+ expressions[627] = BinaryenStore(the_module, 4, 0, 0, expressions[19], expressions[20], 1);
+ expressions[628] = BinaryenStore(the_module, 8, 2, 4, expressions[21], expressions[22], 2);
+ expressions[629] = BinaryenSelect(the_module, expressions[16], expressions[17], expressions[18]);
+ expressions[630] = BinaryenConst(the_module, BinaryenLiteralInt32(1337));
+ expressions[631] = BinaryenReturn(the_module, expressions[630]);
+ expressions[632] = BinaryenNop(the_module);
+ expressions[633] = BinaryenUnreachable(the_module);
BinaryenExpressionGetId(expressions[30]);
BinaryenExpressionGetType(expressions[30]);
BinaryenUnaryGetOp(expressions[30]);
@@ -1431,26 +3213,26 @@ getExpressionInfo={"id":15,"type":3,"op":6}
(f32.const -33.61199951171875)
)
- expressions[263] = BinaryenConst(the_module, BinaryenLiteralInt32(5));
- BinaryenExpressionGetId(expressions[263]);
- BinaryenExpressionGetType(expressions[263]);
- BinaryenConstGetValueI32(expressions[263]);
+ expressions[634] = BinaryenConst(the_module, BinaryenLiteralInt32(5));
+ BinaryenExpressionGetId(expressions[634]);
+ BinaryenExpressionGetType(expressions[634]);
+ BinaryenConstGetValueI32(expressions[634]);
getExpressionInfo(i32.const)={"id":14,"type":1,"value":5}
- expressions[264] = BinaryenConst(the_module, BinaryenLiteralInt64(30064771078));
- BinaryenExpressionGetId(expressions[264]);
- BinaryenExpressionGetType(expressions[264]);
- BinaryenConstGetValueI64Low(expressions[264]);
- BinaryenConstGetValueI64High(expressions[264]);
+ expressions[635] = BinaryenConst(the_module, BinaryenLiteralInt64(30064771078));
+ BinaryenExpressionGetId(expressions[635]);
+ BinaryenExpressionGetType(expressions[635]);
+ BinaryenConstGetValueI64Low(expressions[635]);
+ BinaryenConstGetValueI64High(expressions[635]);
getExpressionInfo(i64.const)={"id":14,"type":2,"value":{"low":6,"high":7}}
- expressions[265] = BinaryenConst(the_module, BinaryenLiteralFloat32(8.5));
- BinaryenExpressionGetId(expressions[265]);
- BinaryenExpressionGetType(expressions[265]);
- BinaryenConstGetValueF32(expressions[265]);
+ expressions[636] = BinaryenConst(the_module, BinaryenLiteralFloat32(8.5));
+ BinaryenExpressionGetId(expressions[636]);
+ BinaryenExpressionGetType(expressions[636]);
+ BinaryenConstGetValueF32(expressions[636]);
getExpressionInfo(f32.const)={"id":14,"type":3,"value":8.5}
- expressions[266] = BinaryenConst(the_module, BinaryenLiteralFloat64(9.5));
- BinaryenExpressionGetId(expressions[266]);
- BinaryenExpressionGetType(expressions[266]);
- BinaryenConstGetValueF64(expressions[266]);
+ expressions[637] = BinaryenConst(the_module, BinaryenLiteralFloat64(9.5));
+ BinaryenExpressionGetId(expressions[637]);
+ BinaryenExpressionGetType(expressions[637]);
+ BinaryenConstGetValueF64(expressions[637]);
getExpressionInfo(f64.const)={"id":14,"type":4,"value":9.5}
{
BinaryenExpressionRef children[] = { expressions[24], expressions[26], expressions[28], expressions[30], expressions[32],
@@ -1460,32 +3242,55 @@ getExpressionInfo(f64.const)={"id":14,"type":4,"value":9.5}
expressions[70], expressions[72], expressions[74], expressions[76], expressions[78], expressions[80],
expressions[82], expressions[84], expressions[86], expressions[88], expressions[90], expressions[92],
expressions[94], expressions[96], expressions[98], expressions[100], expressions[102], expressions[104],
- expressions[106], expressions[108], expressions[110], expressions[113], expressions[116], expressions[119],
- expressions[122], expressions[125], expressions[128], expressions[131], expressions[134], expressions[137],
- expressions[140], expressions[143], expressions[146], expressions[149], expressions[152], expressions[155],
- expressions[158], expressions[161], expressions[164], expressions[167], expressions[170], expressions[173],
- expressions[176], expressions[179], expressions[182], expressions[185], expressions[188], expressions[191],
- expressions[194], expressions[197], expressions[200], expressions[203], expressions[206], expressions[207],
- expressions[208], expressions[209], expressions[211], expressions[213], expressions[214], expressions[216],
- expressions[218], expressions[219], expressions[220], expressions[222], expressions[228], expressions[233],
- expressions[240], expressions[242], expressions[244], expressions[247], expressions[249], expressions[251],
- expressions[253], expressions[255], expressions[256], expressions[257], expressions[258], expressions[260],
- expressions[261], expressions[262] };
- expressions[267] = BinaryenBlock(the_module, "the-value", children, 103, 0);
+ expressions[106], expressions[108], expressions[110], expressions[112], expressions[114], expressions[116],
+ expressions[118], expressions[120], expressions[122], expressions[124], expressions[126], expressions[128],
+ expressions[130], expressions[132], expressions[134], expressions[136], expressions[138], expressions[140],
+ expressions[142], expressions[144], expressions[146], expressions[148], expressions[150], expressions[152],
+ expressions[154], expressions[156], expressions[158], expressions[160], expressions[162], expressions[164],
+ expressions[166], expressions[168], expressions[170], expressions[172], expressions[174], expressions[176],
+ expressions[179], expressions[182], expressions[185], expressions[188], expressions[191], expressions[194],
+ expressions[197], expressions[200], expressions[203], expressions[206], expressions[209], expressions[212],
+ expressions[215], expressions[218], expressions[221], expressions[224], expressions[227], expressions[230],
+ expressions[233], expressions[236], expressions[239], expressions[242], expressions[245], expressions[248],
+ expressions[251], expressions[254], expressions[257], expressions[260], expressions[263], expressions[266],
+ expressions[269], expressions[272], expressions[275], expressions[278], expressions[281], expressions[284],
+ expressions[287], expressions[290], expressions[293], expressions[296], expressions[299], expressions[302],
+ expressions[305], expressions[308], expressions[311], expressions[314], expressions[317], expressions[320],
+ expressions[323], expressions[326], expressions[329], expressions[332], expressions[335], expressions[338],
+ expressions[341], expressions[344], expressions[347], expressions[350], expressions[353], expressions[356],
+ expressions[359], expressions[362], expressions[365], expressions[368], expressions[371], expressions[374],
+ expressions[377], expressions[380], expressions[383], expressions[386], expressions[389], expressions[392],
+ expressions[395], expressions[398], expressions[401], expressions[404], expressions[407], expressions[410],
+ expressions[413], expressions[416], expressions[419], expressions[422], expressions[425], expressions[428],
+ expressions[431], expressions[434], expressions[437], expressions[440], expressions[443], expressions[446],
+ expressions[449], expressions[452], expressions[455], expressions[458], expressions[461], expressions[464],
+ expressions[467], expressions[470], expressions[473], expressions[476], expressions[479], expressions[482],
+ expressions[485], expressions[488], expressions[491], expressions[494], expressions[497], expressions[500],
+ expressions[502], expressions[504], expressions[506], expressions[508], expressions[510], expressions[512],
+ expressions[514], expressions[516], expressions[519], expressions[522], expressions[525], expressions[528],
+ expressions[531], expressions[534], expressions[537], expressions[540], expressions[543], expressions[546],
+ expressions[549], expressions[552], expressions[555], expressions[558], expressions[561], expressions[564],
+ expressions[567], expressions[570], expressions[573], expressions[577], expressions[578], expressions[579],
+ expressions[580], expressions[582], expressions[584], expressions[585], expressions[587], expressions[589],
+ expressions[590], expressions[591], expressions[593], expressions[599], expressions[604], expressions[611],
+ expressions[613], expressions[615], expressions[618], expressions[620], expressions[622], expressions[624],
+ expressions[626], expressions[627], expressions[628], expressions[629], expressions[631], expressions[632],
+ expressions[633] };
+ expressions[638] = BinaryenBlock(the_module, "the-value", children, 240, 0);
}
- expressions[268] = BinaryenDrop(the_module, expressions[267]);
+ expressions[639] = BinaryenDrop(the_module, expressions[638]);
{
- BinaryenExpressionRef children[] = { expressions[268] };
- expressions[269] = BinaryenBlock(the_module, "the-nothing", children, 1, 0);
+ BinaryenExpressionRef children[] = { expressions[639] };
+ expressions[640] = BinaryenBlock(the_module, "the-nothing", children, 1, 0);
}
- expressions[270] = BinaryenConst(the_module, BinaryenLiteralInt32(42));
+ expressions[641] = BinaryenConst(the_module, BinaryenLiteralInt32(42));
{
- BinaryenExpressionRef children[] = { expressions[269], expressions[270] };
- expressions[271] = BinaryenBlock(the_module, "the-body", children, 2, 0);
+ BinaryenExpressionRef children[] = { expressions[640], expressions[641] };
+ expressions[642] = BinaryenBlock(the_module, "the-body", children, 2, 0);
}
{
BinaryenType varTypes[] = { 1 };
- functions[0] = BinaryenAddFunction(the_module, "kitchen()sinker", functionTypes[0], varTypes, 1, expressions[271]);
+ functions[0] = BinaryenAddFunction(the_module, "kitchen()sinker", functionTypes[0], varTypes, 1, expressions[642]);
}
{
BinaryenType paramTypes[] = { 1, 4 };
@@ -1510,11 +3315,11 @@ getExpressionInfo(f64.const)={"id":14,"type":4,"value":9.5}
const char* funcNames[] = { "kitchen()sinker" };
BinaryenSetFunctionTable(the_module, 1, 4294967295, funcNames, 1);
}
- expressions[272] = BinaryenConst(the_module, BinaryenLiteralInt32(10));
+ expressions[643] = BinaryenConst(the_module, BinaryenLiteralInt32(10));
{
const char segment0[] = { 104, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 100 };
const char* segments[] = { segment0 };
- BinaryenExpressionRef segmentOffsets[] = { expressions[272] };
+ BinaryenExpressionRef segmentOffsets[] = { expressions[643] };
BinaryenIndex segmentSizes[] = { 12 };
BinaryenSetMemory(the_module, 1, 256, "mem", segments, segmentOffsets, segmentSizes, 1, 0);
}
@@ -1522,10 +3327,10 @@ getExpressionInfo(f64.const)={"id":14,"type":4,"value":9.5}
BinaryenType paramTypes[] = { 0 };
functionTypes[2] = BinaryenAddFunctionType(the_module, "v", 0, paramTypes, 0);
}
- expressions[273] = BinaryenNop(the_module);
+ expressions[644] = BinaryenNop(the_module);
{
BinaryenType varTypes[] = { 0 };
- functions[1] = BinaryenAddFunction(the_module, "starter", functionTypes[2], varTypes, 0, expressions[273]);
+ functions[1] = BinaryenAddFunction(the_module, "starter", functionTypes[2], varTypes, 0, expressions[644]);
}
BinaryenSetStart(the_module, functions[1]);
{
@@ -1775,6 +3580,171 @@ getExpressionInfo(f64.const)={"id":14,"type":4,"value":9.5}
)
)
(drop
+ (i8x16.splat
+ (i32.const 42)
+ )
+ )
+ (drop
+ (i16x8.splat
+ (i32.const 42)
+ )
+ )
+ (drop
+ (i32x4.splat
+ (i32.const 42)
+ )
+ )
+ (drop
+ (i64x2.splat
+ (i64.const 1958505087099)
+ )
+ )
+ (drop
+ (f32x4.splat
+ (f32.const 42)
+ )
+ )
+ (drop
+ (f64x2.splat
+ (f64.const 42)
+ )
+ )
+ (drop
+ (v128.not
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.neg
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.any_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.all_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.neg
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.any_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.all_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.neg
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.any_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.all_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.neg
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.any_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.all_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.abs
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.neg
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.sqrt
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.abs
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.neg
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.sqrt
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.trunc_s/f32x4:sat
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.trunc_u/f32x4:sat
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.trunc_s/f64x2:sat
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.trunc_u/f64x2:sat
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.convert_s/i32x4
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.convert_u/i32x4
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.convert_s/i64x2
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.convert_u/i64x2
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
(i32.add
(i32.const -10)
(i32.const -11)
@@ -1966,6 +3936,614 @@ getExpressionInfo(f64.const)={"id":14,"type":4,"value":9.5}
(f32.const -62.5)
)
)
+ (drop
+ (i8x16.eq
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.ne
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.lt_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.lt_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.gt_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.gt_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.le_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.le_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.ge_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.ge_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.eq
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.ne
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.lt_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.lt_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.gt_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.gt_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.le_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.le_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.ge_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.ge_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.eq
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.ne
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.lt_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.lt_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.gt_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.gt_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.le_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.le_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.ge_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.ge_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.eq
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.ne
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.lt
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.gt
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.le
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.ge
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.ge
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.ne
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.lt
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.gt
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.le
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.ge
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ (
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ (
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ (drop
+ (i8x16.add
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.add_saturate_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.add_saturate_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.sub
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.sub_saturate_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.sub_saturate_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.mul
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.add
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.add_saturate_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.add_saturate_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.sub
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.sub_saturate_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.sub_saturate_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.mul
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.add
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.sub
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.mul
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.add
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.sub
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.add
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.sub
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.mul
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.div
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.min
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.max
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.add
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.sub
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.mul
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.div
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.min
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.max
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.extract_lane_s 1
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.extract_lane_u 1
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.extract_lane_s 1
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.extract_lane_u 1
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.extract_lane 1
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.extract_lane 1
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.extract_lane 1
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.extract_lane 1
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.replace_lane 1
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 42)
+ )
+ )
+ (drop
+ (i8x16.replace_lane 1
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 42)
+ )
+ )
+ (drop
+ (i32x4.replace_lane 1
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 42)
+ )
+ )
+ (drop
+ (i64x2.replace_lane 1
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i64.const 184683593770)
+ )
+ )
+ (drop
+ (f32x4.replace_lane 1
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (f32.const 42)
+ )
+ )
+ (drop
+ (f64x2.replace_lane 1
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (f64.const 42)
+ )
+ )
+ (drop
+ (i8x16.shl
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i8x16.shr_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i8x16.shr_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i16x8.shl
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i16x8.shr_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i16x8.shr_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i32x4.shl
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i32x4.shr_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i32x4.shr_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i64x2.shl
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i64x2.shr_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i64x2.shr_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (v8x16.shuffle 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (v128.bitselect
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
(block
)
(if
diff --git a/test/example/c-api-kitchen-sink.c b/test/example/c-api-kitchen-sink.c
index d056d0e75..cf2ce6c04 100644
--- a/test/example/c-api-kitchen-sink.c
+++ b/test/example/c-api-kitchen-sink.c
@@ -15,11 +15,14 @@
// helpers
+static const uint8_t v128_bytes[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+
BinaryenExpressionRef makeUnary(BinaryenModuleRef module, BinaryenOp op, BinaryenType inputType) {
if (inputType == BinaryenTypeInt32()) return BinaryenUnary(module, op, BinaryenConst(module, BinaryenLiteralInt32(-10)));
if (inputType == BinaryenTypeInt64()) return BinaryenUnary(module, op, BinaryenConst(module, BinaryenLiteralInt64(-22)));
if (inputType == BinaryenTypeFloat32()) return BinaryenUnary(module, op, BinaryenConst(module, BinaryenLiteralFloat32(-33.612f)));
if (inputType == BinaryenTypeFloat64()) return BinaryenUnary(module, op, BinaryenConst(module, BinaryenLiteralFloat64(-9005.841)));
+ if (inputType == BinaryenTypeVec128()) return BinaryenUnary(module, op, BinaryenConst(module, BinaryenLiteralVec128(v128_bytes)));
abort();
}
@@ -41,6 +44,10 @@ BinaryenExpressionRef makeBinary(BinaryenModuleRef module, BinaryenOp op, Binary
BinaryenExpressionRef temp = BinaryenConst(module, BinaryenLiteralFloat64(-9007.333));
return BinaryenBinary(module, op, BinaryenConst(module, BinaryenLiteralFloat64(-9005.841)), temp);
}
+ if (type == BinaryenTypeVec128()) {
+ BinaryenExpressionRef temp = BinaryenConst(module, BinaryenLiteralVec128(v128_bytes));
+ return BinaryenBinary(module, op, BinaryenConst(module, BinaryenLiteralVec128(v128_bytes)), temp);
+ }
abort();
}
@@ -60,6 +67,10 @@ BinaryenExpressionRef makeFloat64(BinaryenModuleRef module, double x) {
return BinaryenConst(module, BinaryenLiteralFloat64(x));
}
+BinaryenExpressionRef makeVec128(BinaryenModuleRef module, uint8_t const *bytes) {
+ return BinaryenConst(module, BinaryenLiteralVec128(bytes));
+}
+
BinaryenExpressionRef makeSomething(BinaryenModuleRef module) {
return makeInt32(module, 1337);
}
@@ -68,6 +79,48 @@ BinaryenExpressionRef makeDroppedInt32(BinaryenModuleRef module, int x) {
return BinaryenDrop(module, BinaryenConst(module, BinaryenLiteralInt32(x)));
}
+BinaryenExpressionRef makeSIMDExtract(BinaryenModuleRef module, BinaryenOp op) {
+ return BinaryenSIMDExtract(module, op, makeVec128(module, v128_bytes), 0);
+}
+
+BinaryenExpressionRef makeSIMDReplace(BinaryenModuleRef module, BinaryenOp op, BinaryenType type) {
+ BinaryenExpressionRef val;
+ if (type == BinaryenTypeInt32()) {
+ val = makeInt32(module, 42);
+ }
+ if (type == BinaryenTypeInt64()) {
+ val = makeInt64(module, 42);
+ }
+ if (type == BinaryenTypeFloat32()) {
+ val = makeFloat32(module, 42.);
+ }
+ if (type == BinaryenTypeFloat64()) {
+ val = makeFloat64(module, 42.);
+ }
+ if (!val) {
+ abort();
+ }
+ return BinaryenSIMDReplace(module, op, makeVec128(module, v128_bytes), 0, val);
+}
+
+BinaryenExpressionRef makeSIMDShuffle(BinaryenModuleRef module) {
+ BinaryenExpressionRef left = makeVec128(module, v128_bytes);
+ BinaryenExpressionRef right = makeVec128(module, v128_bytes);
+ return BinaryenSIMDShuffle(module, left, right, (uint8_t[16]) {});
+}
+
+BinaryenExpressionRef makeSIMDBitselect(BinaryenModuleRef module) {
+ BinaryenExpressionRef left = makeVec128(module, v128_bytes);
+ BinaryenExpressionRef right = makeVec128(module, v128_bytes);
+ BinaryenExpressionRef cond = makeVec128(module, v128_bytes);
+ return BinaryenSIMDBitselect(module, left, right, cond);
+}
+
+BinaryenExpressionRef makeSIMDShift(BinaryenModuleRef module, BinaryenOp op) {
+ BinaryenExpressionRef vec = makeVec128(module, v128_bytes);
+ return BinaryenSIMDShift(module, op, vec, makeInt32(module, 1));
+}
+
// tests
void test_types() {
@@ -94,7 +147,8 @@ void test_core() {
constF32 = BinaryenConst(module, BinaryenLiteralFloat32(3.14f)),
constF64 = BinaryenConst(module, BinaryenLiteralFloat64(2.1828)),
constF32Bits = BinaryenConst(module, BinaryenLiteralFloat32Bits(0xffff1234)),
- constF64Bits = BinaryenConst(module, BinaryenLiteralFloat64Bits(0xffff12345678abcdLL));
+ constF64Bits = BinaryenConst(module, BinaryenLiteralFloat64Bits(0xffff12345678abcdLL)),
+ constV128 = BinaryenConst(module, BinaryenLiteralVec128(v128_bytes));
const char* switchValueNames[] = { "the-value" };
const char* switchBodyNames[] = { "the-nothing" };
@@ -160,6 +214,39 @@ void test_core() {
makeUnary(module, BinaryenDemoteFloat64(), 4),
makeUnary(module, BinaryenReinterpretInt32(), 1),
makeUnary(module, BinaryenReinterpretInt64(), 2),
+ makeUnary(module, BinaryenSplatVecI8x16(), 1),
+ makeUnary(module, BinaryenSplatVecI16x8(), 1),
+ makeUnary(module, BinaryenSplatVecI32x4(), 1),
+ makeUnary(module, BinaryenSplatVecI64x2(), 2),
+ makeUnary(module, BinaryenSplatVecF32x4(), 3),
+ makeUnary(module, BinaryenSplatVecF64x2(), 4),
+ makeUnary(module, BinaryenNotVec128(), 5),
+ makeUnary(module, BinaryenNegVecI8x16(), 5),
+ makeUnary(module, BinaryenAnyTrueVecI8x16(), 5),
+ makeUnary(module, BinaryenAllTrueVecI8x16(), 5),
+ makeUnary(module, BinaryenNegVecI16x8(), 5),
+ makeUnary(module, BinaryenAnyTrueVecI16x8(), 5),
+ makeUnary(module, BinaryenAllTrueVecI16x8(), 5),
+ makeUnary(module, BinaryenNegVecI32x4(), 5),
+ makeUnary(module, BinaryenAnyTrueVecI32x4(), 5),
+ makeUnary(module, BinaryenAllTrueVecI32x4(), 5),
+ makeUnary(module, BinaryenNegVecI64x2(), 5),
+ makeUnary(module, BinaryenAnyTrueVecI64x2(), 5),
+ makeUnary(module, BinaryenAllTrueVecI64x2(), 5),
+ makeUnary(module, BinaryenAbsVecF32x4(), 5),
+ makeUnary(module, BinaryenNegVecF32x4(), 5),
+ makeUnary(module, BinaryenSqrtVecF32x4(), 5),
+ makeUnary(module, BinaryenAbsVecF64x2(), 5),
+ makeUnary(module, BinaryenNegVecF64x2(), 5),
+ makeUnary(module, BinaryenSqrtVecF64x2(), 5),
+ makeUnary(module, BinaryenTruncSatSVecF32x4ToVecI32x4(), 5),
+ makeUnary(module, BinaryenTruncSatUVecF32x4ToVecI32x4(), 5),
+ makeUnary(module, BinaryenTruncSatSVecF64x2ToVecI64x2(), 5),
+ makeUnary(module, BinaryenTruncSatUVecF64x2ToVecI64x2(), 5),
+ makeUnary(module, BinaryenConvertSVecI32x4ToVecF32x4(), 5),
+ makeUnary(module, BinaryenConvertUVecI32x4ToVecF32x4(), 5),
+ makeUnary(module, BinaryenConvertSVecI64x2ToVecF64x2(), 5),
+ makeUnary(module, BinaryenConvertUVecI64x2ToVecF64x2(), 5),
// Binary
makeBinary(module, BinaryenAddInt32(), 1),
makeBinary(module, BinaryenSubFloat64(), 4),
@@ -193,6 +280,113 @@ void test_core() {
makeBinary(module, BinaryenLeFloat64(), 4),
makeBinary(module, BinaryenGtFloat64(), 4),
makeBinary(module, BinaryenGeFloat32(), 3),
+ makeBinary(module, BinaryenEqVecI8x16(), 5),
+ makeBinary(module, BinaryenNeVecI8x16(), 5),
+ makeBinary(module, BinaryenLtSVecI8x16(), 5),
+ makeBinary(module, BinaryenLtUVecI8x16(), 5),
+ makeBinary(module, BinaryenGtSVecI8x16(), 5),
+ makeBinary(module, BinaryenGtUVecI8x16(), 5),
+ makeBinary(module, BinaryenLeSVecI8x16(), 5),
+ makeBinary(module, BinaryenLeUVecI8x16(), 5),
+ makeBinary(module, BinaryenGeSVecI8x16(), 5),
+ makeBinary(module, BinaryenGeUVecI8x16(), 5),
+ makeBinary(module, BinaryenEqVecI16x8(), 5),
+ makeBinary(module, BinaryenNeVecI16x8(), 5),
+ makeBinary(module, BinaryenLtSVecI16x8(), 5),
+ makeBinary(module, BinaryenLtUVecI16x8(), 5),
+ makeBinary(module, BinaryenGtSVecI16x8(), 5),
+ makeBinary(module, BinaryenGtUVecI16x8(), 5),
+ makeBinary(module, BinaryenLeSVecI16x8(), 5),
+ makeBinary(module, BinaryenLeUVecI16x8(), 5),
+ makeBinary(module, BinaryenGeSVecI16x8(), 5),
+ makeBinary(module, BinaryenGeUVecI16x8(), 5),
+ makeBinary(module, BinaryenEqVecI32x4(), 5),
+ makeBinary(module, BinaryenNeVecI32x4(), 5),
+ makeBinary(module, BinaryenLtSVecI32x4(), 5),
+ makeBinary(module, BinaryenLtUVecI32x4(), 5),
+ makeBinary(module, BinaryenGtSVecI32x4(), 5),
+ makeBinary(module, BinaryenGtUVecI32x4(), 5),
+ makeBinary(module, BinaryenLeSVecI32x4(), 5),
+ makeBinary(module, BinaryenLeUVecI32x4(), 5),
+ makeBinary(module, BinaryenGeSVecI32x4(), 5),
+ makeBinary(module, BinaryenGeUVecI32x4(), 5),
+ makeBinary(module, BinaryenEqVecF32x4(), 5),
+ makeBinary(module, BinaryenNeVecF32x4(), 5),
+ makeBinary(module, BinaryenLtVecF32x4(), 5),
+ makeBinary(module, BinaryenGtVecF32x4(), 5),
+ makeBinary(module, BinaryenLeVecF32x4(), 5),
+ makeBinary(module, BinaryenGeVecF32x4(), 5),
+ makeBinary(module, BinaryenEqVecF64x2(), 5),
+ makeBinary(module, BinaryenNeVecF64x2(), 5),
+ makeBinary(module, BinaryenLtVecF64x2(), 5),
+ makeBinary(module, BinaryenGtVecF64x2(), 5),
+ makeBinary(module, BinaryenLeVecF64x2(), 5),
+ makeBinary(module, BinaryenGeVecF64x2(), 5),
+ makeBinary(module, BinaryenAndVec128(), 5),
+ makeBinary(module, BinaryenOrVec128(), 5),
+ makeBinary(module, BinaryenXorVec128(), 5),
+ makeBinary(module, BinaryenAddVecI8x16(), 5),
+ makeBinary(module, BinaryenAddSatSVecI8x16(), 5),
+ makeBinary(module, BinaryenAddSatUVecI8x16(), 5),
+ makeBinary(module, BinaryenSubVecI8x16(), 5),
+ makeBinary(module, BinaryenSubSatSVecI8x16(), 5),
+ makeBinary(module, BinaryenSubSatUVecI8x16(), 5),
+ makeBinary(module, BinaryenMulVecI8x16(), 5),
+ makeBinary(module, BinaryenAddVecI16x8(), 5),
+ makeBinary(module, BinaryenAddSatSVecI16x8(), 5),
+ makeBinary(module, BinaryenAddSatUVecI16x8(), 5),
+ makeBinary(module, BinaryenSubVecI16x8(), 5),
+ makeBinary(module, BinaryenSubSatSVecI16x8(), 5),
+ makeBinary(module, BinaryenSubSatUVecI16x8(), 5),
+ makeBinary(module, BinaryenMulVecI16x8(), 5),
+ makeBinary(module, BinaryenAddVecI32x4(), 5),
+ makeBinary(module, BinaryenSubVecI32x4(), 5),
+ makeBinary(module, BinaryenMulVecI32x4(), 5),
+ makeBinary(module, BinaryenAddVecI64x2(), 5),
+ makeBinary(module, BinaryenSubVecI64x2(), 5),
+ makeBinary(module, BinaryenAddVecF32x4(), 5),
+ makeBinary(module, BinaryenSubVecF32x4(), 5),
+ makeBinary(module, BinaryenMulVecF32x4(), 5),
+ makeBinary(module, BinaryenDivVecF32x4(), 5),
+ makeBinary(module, BinaryenMinVecF32x4(), 5),
+ makeBinary(module, BinaryenMaxVecF32x4(), 5),
+ makeBinary(module, BinaryenAddVecF64x2(), 5),
+ makeBinary(module, BinaryenSubVecF64x2(), 5),
+ makeBinary(module, BinaryenMulVecF64x2(), 5),
+ makeBinary(module, BinaryenDivVecF64x2(), 5),
+ makeBinary(module, BinaryenMinVecF64x2(), 5),
+ makeBinary(module, BinaryenMaxVecF64x2(), 5),
+ // SIMD lane manipulation
+ makeSIMDExtract(module, BinaryenExtractLaneSVecI8x16()),
+ makeSIMDExtract(module, BinaryenExtractLaneUVecI8x16()),
+ makeSIMDExtract(module, BinaryenExtractLaneSVecI16x8()),
+ makeSIMDExtract(module, BinaryenExtractLaneUVecI16x8()),
+ makeSIMDExtract(module, BinaryenExtractLaneVecI32x4()),
+ makeSIMDExtract(module, BinaryenExtractLaneVecI64x2()),
+ makeSIMDExtract(module, BinaryenExtractLaneVecF32x4()),
+ makeSIMDExtract(module, BinaryenExtractLaneVecF64x2()),
+ makeSIMDReplace(module, BinaryenReplaceLaneVecI8x16(), 1),
+ makeSIMDReplace(module, BinaryenReplaceLaneVecI16x8(), 1),
+ makeSIMDReplace(module, BinaryenReplaceLaneVecI32x4(), 1),
+ makeSIMDReplace(module, BinaryenReplaceLaneVecI64x2(), 2),
+ makeSIMDReplace(module, BinaryenReplaceLaneVecF32x4(), 3),
+ makeSIMDReplace(module, BinaryenReplaceLaneVecF64x2(), 4),
+ // SIMD shift
+ makeSIMDShift(module, BinaryenShlVecI8x16()),
+ makeSIMDShift(module, BinaryenShrSVecI8x16()),
+ makeSIMDShift(module, BinaryenShrUVecI8x16()),
+ makeSIMDShift(module, BinaryenShlVecI16x8()),
+ makeSIMDShift(module, BinaryenShrSVecI16x8()),
+ makeSIMDShift(module, BinaryenShrUVecI16x8()),
+ makeSIMDShift(module, BinaryenShlVecI32x4()),
+ makeSIMDShift(module, BinaryenShrSVecI32x4()),
+ makeSIMDShift(module, BinaryenShrUVecI32x4()),
+ makeSIMDShift(module, BinaryenShlVecI64x2()),
+ makeSIMDShift(module, BinaryenShrSVecI64x2()),
+ makeSIMDShift(module, BinaryenShrUVecI64x2()),
+ // Other SIMD
+ makeSIMDShuffle(module),
+ makeSIMDBitselect(module),
// All the rest
BinaryenBlock(module, NULL, NULL, 0, -1), // block with no name and no type
BinaryenIf(module, temp1, temp2, temp3),
diff --git a/test/example/c-api-kitchen-sink.txt b/test/example/c-api-kitchen-sink.txt
index 600efb4dd..8b716f1b3 100644
--- a/test/example/c-api-kitchen-sink.txt
+++ b/test/example/c-api-kitchen-sink.txt
@@ -251,6 +251,171 @@ BinaryenTypeAuto: -1
)
)
(drop
+ (i8x16.splat
+ (i32.const -10)
+ )
+ )
+ (drop
+ (i16x8.splat
+ (i32.const -10)
+ )
+ )
+ (drop
+ (i32x4.splat
+ (i32.const -10)
+ )
+ )
+ (drop
+ (i64x2.splat
+ (i64.const -22)
+ )
+ )
+ (drop
+ (f32x4.splat
+ (f32.const -33.61199951171875)
+ )
+ )
+ (drop
+ (f64x2.splat
+ (f64.const -9005.841)
+ )
+ )
+ (drop
+ (v128.not
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.neg
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.any_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.all_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.neg
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.any_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.all_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.neg
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.any_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.all_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.neg
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.any_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.all_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.abs
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.neg
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.sqrt
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.abs
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.neg
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.sqrt
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.trunc_s/f32x4:sat
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.trunc_u/f32x4:sat
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.trunc_s/f64x2:sat
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.trunc_u/f64x2:sat
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.convert_s/i32x4
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.convert_u/i32x4
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.convert_s/i64x2
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.convert_u/i64x2
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
(i32.add
(i32.const -10)
(i32.const -11)
@@ -442,6 +607,623 @@ BinaryenTypeAuto: -1
(f32.const -62.5)
)
)
+ (drop
+ (i8x16.eq
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.ne
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.lt_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.lt_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.gt_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.gt_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.le_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.le_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.ge_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.ge_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.eq
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.ne
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.lt_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.lt_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.gt_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.gt_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.le_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.le_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.ge_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.ge_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.eq
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.ne
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.lt_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.lt_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.gt_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.gt_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.le_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.le_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.ge_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.ge_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.eq
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.ne
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.lt
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.gt
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.le
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.ge
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.eq
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.ne
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.lt
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.gt
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.le
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.ge
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (v128.and
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (v128.or
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (v128.xor
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.add
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.add_saturate_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.add_saturate_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.sub
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.sub_saturate_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.sub_saturate_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.mul
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.add
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.add_saturate_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.add_saturate_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.sub
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.sub_saturate_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.sub_saturate_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.mul
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.add
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.sub
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.mul
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.add
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.sub
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.add
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.sub
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.mul
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.div
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.min
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.max
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.add
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.sub
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.mul
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.div
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.min
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.max
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.extract_lane_s 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.extract_lane_u 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.extract_lane_s 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.extract_lane_u 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.extract_lane 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.extract_lane 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.extract_lane 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.extract_lane 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.replace_lane 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 42)
+ )
+ )
+ (drop
+ (i16x8.replace_lane 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 42)
+ )
+ )
+ (drop
+ (i32x4.replace_lane 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 42)
+ )
+ )
+ (drop
+ (i64x2.replace_lane 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i64.const 42)
+ )
+ )
+ (drop
+ (f32x4.replace_lane 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (f32.const 42)
+ )
+ )
+ (drop
+ (f64x2.replace_lane 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (f64.const 42)
+ )
+ )
+ (drop
+ (i8x16.shl
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i8x16.shr_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i8x16.shr_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i16x8.shl
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i16x8.shr_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i16x8.shr_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i32x4.shl
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i32x4.shr_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i32x4.shr_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i64x2.shl
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i64x2.shr_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i64x2.shr_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (v8x16.shuffle 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (v128.bitselect
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
(block
)
(if
@@ -1111,327 +1893,1358 @@ int main() {
expressions[4] = BinaryenConst(the_module, BinaryenLiteralFloat64(2.1828));
expressions[5] = BinaryenConst(the_module, BinaryenLiteralFloat32(NAN));
expressions[6] = BinaryenConst(the_module, BinaryenLiteralFloat64(NAN));
- expressions[7] = BinaryenConst(the_module, BinaryenLiteralInt32(13));
- expressions[8] = BinaryenConst(the_module, BinaryenLiteralFloat64(3.7));
- expressions[9] = BinaryenConst(the_module, BinaryenLiteralInt32(13));
- expressions[10] = BinaryenConst(the_module, BinaryenLiteralInt64(37));
- expressions[11] = BinaryenConst(the_module, BinaryenLiteralFloat32(1.3));
- expressions[12] = BinaryenConst(the_module, BinaryenLiteralFloat64(3.7));
- expressions[13] = BinaryenConst(the_module, BinaryenLiteralInt32(13));
- expressions[14] = BinaryenConst(the_module, BinaryenLiteralInt64(37));
- expressions[15] = BinaryenConst(the_module, BinaryenLiteralFloat32(1.3));
- expressions[16] = BinaryenConst(the_module, BinaryenLiteralFloat64(3.7));
+ {
+ uint8_t t0[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[7] = BinaryenConst(the_module, BinaryenLiteralVec128(t0));
+ }
+ expressions[8] = BinaryenConst(the_module, BinaryenLiteralInt32(13));
+ expressions[9] = BinaryenConst(the_module, BinaryenLiteralFloat64(3.7));
+ expressions[10] = BinaryenConst(the_module, BinaryenLiteralInt32(13));
+ expressions[11] = BinaryenConst(the_module, BinaryenLiteralInt64(37));
+ expressions[12] = BinaryenConst(the_module, BinaryenLiteralFloat32(1.3));
+ expressions[13] = BinaryenConst(the_module, BinaryenLiteralFloat64(3.7));
+ expressions[14] = BinaryenConst(the_module, BinaryenLiteralInt32(13));
+ expressions[15] = BinaryenConst(the_module, BinaryenLiteralInt64(37));
+ expressions[16] = BinaryenConst(the_module, BinaryenLiteralFloat32(1.3));
+ expressions[17] = BinaryenConst(the_module, BinaryenLiteralFloat64(3.7));
{
BinaryenType paramTypes[] = { 1, 2, 3, 4 };
functionTypes[0] = BinaryenAddFunctionType(the_module, "iiIfF", 1, paramTypes, 4);
}
- expressions[17] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
- expressions[18] = BinaryenConst(the_module, BinaryenLiteralInt32(2));
- expressions[19] = BinaryenConst(the_module, BinaryenLiteralInt32(3));
- expressions[20] = BinaryenConst(the_module, BinaryenLiteralInt32(4));
- expressions[21] = BinaryenConst(the_module, BinaryenLiteralInt32(5));
- expressions[22] = BinaryenConst(the_module, BinaryenLiteralInt32(0));
- expressions[23] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
- expressions[24] = BinaryenConst(the_module, BinaryenLiteralInt32(0));
- expressions[25] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
+ expressions[18] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
+ expressions[19] = BinaryenConst(the_module, BinaryenLiteralInt32(2));
+ expressions[20] = BinaryenConst(the_module, BinaryenLiteralInt32(3));
+ expressions[21] = BinaryenConst(the_module, BinaryenLiteralInt32(4));
+ expressions[22] = BinaryenConst(the_module, BinaryenLiteralInt32(5));
+ expressions[23] = BinaryenConst(the_module, BinaryenLiteralInt32(0));
+ expressions[24] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
+ expressions[25] = BinaryenConst(the_module, BinaryenLiteralInt32(0));
expressions[26] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
- expressions[27] = BinaryenConst(the_module, BinaryenLiteralInt32(3));
- expressions[28] = BinaryenConst(the_module, BinaryenLiteralInt32(5));
- expressions[29] = BinaryenConst(the_module, BinaryenLiteralInt32(10));
- expressions[30] = BinaryenConst(the_module, BinaryenLiteralInt32(11));
- expressions[31] = BinaryenConst(the_module, BinaryenLiteralInt32(110));
- expressions[32] = BinaryenConst(the_module, BinaryenLiteralInt64(111));
- expressions[33] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
- expressions[34] = BinaryenUnary(the_module, 0, expressions[33]);
- expressions[35] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
- expressions[36] = BinaryenUnary(the_module, 3, expressions[35]);
- expressions[37] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
- expressions[38] = BinaryenUnary(the_module, 4, expressions[37]);
- expressions[39] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
- expressions[40] = BinaryenUnary(the_module, 6, expressions[39]);
- expressions[41] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
- expressions[42] = BinaryenUnary(the_module, 9, expressions[41]);
- expressions[43] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
- expressions[44] = BinaryenUnary(the_module, 10, expressions[43]);
- expressions[45] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
- expressions[46] = BinaryenUnary(the_module, 13, expressions[45]);
- expressions[47] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
- expressions[48] = BinaryenUnary(the_module, 14, expressions[47]);
- expressions[49] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
- expressions[50] = BinaryenUnary(the_module, 16, expressions[49]);
- expressions[51] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
- expressions[52] = BinaryenUnary(the_module, 19, expressions[51]);
- expressions[53] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
- expressions[54] = BinaryenUnary(the_module, 20, expressions[53]);
- expressions[55] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
- expressions[56] = BinaryenUnary(the_module, 22, expressions[55]);
- expressions[57] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
- expressions[58] = BinaryenUnary(the_module, 23, expressions[57]);
- expressions[59] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
- expressions[60] = BinaryenUnary(the_module, 24, expressions[59]);
- expressions[61] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
- expressions[62] = BinaryenUnary(the_module, 25, expressions[61]);
- expressions[63] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
- expressions[64] = BinaryenUnary(the_module, 26, expressions[63]);
- expressions[65] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
- expressions[66] = BinaryenUnary(the_module, 27, expressions[65]);
- expressions[67] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
- expressions[68] = BinaryenUnary(the_module, 28, expressions[67]);
- expressions[69] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
- expressions[70] = BinaryenUnary(the_module, 29, expressions[69]);
- expressions[71] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
- expressions[72] = BinaryenUnary(the_module, 30, expressions[71]);
- expressions[73] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
- expressions[74] = BinaryenUnary(the_module, 31, expressions[73]);
- expressions[75] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
- expressions[76] = BinaryenUnary(the_module, 32, expressions[75]);
- expressions[77] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
- expressions[78] = BinaryenUnary(the_module, 52, expressions[77]);
- expressions[79] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
- expressions[80] = BinaryenUnary(the_module, 56, expressions[79]);
- expressions[81] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
- expressions[82] = BinaryenUnary(the_module, 53, expressions[81]);
- expressions[83] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
- expressions[84] = BinaryenUnary(the_module, 57, expressions[83]);
- expressions[85] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
- expressions[86] = BinaryenUnary(the_module, 54, expressions[85]);
- expressions[87] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
- expressions[88] = BinaryenUnary(the_module, 58, expressions[87]);
- expressions[89] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
- expressions[90] = BinaryenUnary(the_module, 55, expressions[89]);
- expressions[91] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
- expressions[92] = BinaryenUnary(the_module, 59, expressions[91]);
- expressions[93] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
- expressions[94] = BinaryenUnary(the_module, 33, expressions[93]);
- expressions[95] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
- expressions[96] = BinaryenUnary(the_module, 34, expressions[95]);
- expressions[97] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
- expressions[98] = BinaryenUnary(the_module, 35, expressions[97]);
- expressions[99] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
- expressions[100] = BinaryenUnary(the_module, 36, expressions[99]);
- expressions[101] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
- expressions[102] = BinaryenUnary(the_module, 37, expressions[101]);
- expressions[103] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
- expressions[104] = BinaryenUnary(the_module, 38, expressions[103]);
- expressions[105] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
- expressions[106] = BinaryenUnary(the_module, 39, expressions[105]);
- expressions[107] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
- expressions[108] = BinaryenUnary(the_module, 40, expressions[107]);
- expressions[109] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
- expressions[110] = BinaryenUnary(the_module, 41, expressions[109]);
- expressions[111] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
- expressions[112] = BinaryenUnary(the_module, 42, expressions[111]);
- expressions[113] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
- expressions[114] = BinaryenUnary(the_module, 43, expressions[113]);
- expressions[115] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
- expressions[116] = BinaryenUnary(the_module, 44, expressions[115]);
- expressions[117] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
- expressions[118] = BinaryenUnary(the_module, 45, expressions[117]);
- expressions[119] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
- expressions[120] = BinaryenUnary(the_module, 46, expressions[119]);
- expressions[121] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
+ expressions[27] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
+ expressions[28] = BinaryenConst(the_module, BinaryenLiteralInt32(3));
+ expressions[29] = BinaryenConst(the_module, BinaryenLiteralInt32(5));
+ expressions[30] = BinaryenConst(the_module, BinaryenLiteralInt32(10));
+ expressions[31] = BinaryenConst(the_module, BinaryenLiteralInt32(11));
+ expressions[32] = BinaryenConst(the_module, BinaryenLiteralInt32(110));
+ expressions[33] = BinaryenConst(the_module, BinaryenLiteralInt64(111));
+ expressions[34] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
+ expressions[35] = BinaryenUnary(the_module, 0, expressions[34]);
+ expressions[36] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
+ expressions[37] = BinaryenUnary(the_module, 3, expressions[36]);
+ expressions[38] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
+ expressions[39] = BinaryenUnary(the_module, 4, expressions[38]);
+ expressions[40] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
+ expressions[41] = BinaryenUnary(the_module, 6, expressions[40]);
+ expressions[42] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
+ expressions[43] = BinaryenUnary(the_module, 9, expressions[42]);
+ expressions[44] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
+ expressions[45] = BinaryenUnary(the_module, 10, expressions[44]);
+ expressions[46] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
+ expressions[47] = BinaryenUnary(the_module, 13, expressions[46]);
+ expressions[48] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
+ expressions[49] = BinaryenUnary(the_module, 14, expressions[48]);
+ expressions[50] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
+ expressions[51] = BinaryenUnary(the_module, 16, expressions[50]);
+ expressions[52] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
+ expressions[53] = BinaryenUnary(the_module, 19, expressions[52]);
+ expressions[54] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
+ expressions[55] = BinaryenUnary(the_module, 20, expressions[54]);
+ expressions[56] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
+ expressions[57] = BinaryenUnary(the_module, 22, expressions[56]);
+ expressions[58] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
+ expressions[59] = BinaryenUnary(the_module, 23, expressions[58]);
+ expressions[60] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
+ expressions[61] = BinaryenUnary(the_module, 24, expressions[60]);
+ expressions[62] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
+ expressions[63] = BinaryenUnary(the_module, 25, expressions[62]);
+ expressions[64] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
+ expressions[65] = BinaryenUnary(the_module, 26, expressions[64]);
+ expressions[66] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
+ expressions[67] = BinaryenUnary(the_module, 27, expressions[66]);
+ expressions[68] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
+ expressions[69] = BinaryenUnary(the_module, 28, expressions[68]);
+ expressions[70] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
+ expressions[71] = BinaryenUnary(the_module, 29, expressions[70]);
+ expressions[72] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
+ expressions[73] = BinaryenUnary(the_module, 30, expressions[72]);
+ expressions[74] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
+ expressions[75] = BinaryenUnary(the_module, 31, expressions[74]);
+ expressions[76] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
+ expressions[77] = BinaryenUnary(the_module, 32, expressions[76]);
+ expressions[78] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
+ expressions[79] = BinaryenUnary(the_module, 52, expressions[78]);
+ expressions[80] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
+ expressions[81] = BinaryenUnary(the_module, 56, expressions[80]);
+ expressions[82] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
+ expressions[83] = BinaryenUnary(the_module, 53, expressions[82]);
+ expressions[84] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
+ expressions[85] = BinaryenUnary(the_module, 57, expressions[84]);
+ expressions[86] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
+ expressions[87] = BinaryenUnary(the_module, 54, expressions[86]);
+ expressions[88] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
+ expressions[89] = BinaryenUnary(the_module, 58, expressions[88]);
+ expressions[90] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
+ expressions[91] = BinaryenUnary(the_module, 55, expressions[90]);
+ expressions[92] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
+ expressions[93] = BinaryenUnary(the_module, 59, expressions[92]);
+ expressions[94] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
+ expressions[95] = BinaryenUnary(the_module, 33, expressions[94]);
+ expressions[96] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
+ expressions[97] = BinaryenUnary(the_module, 34, expressions[96]);
+ expressions[98] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
+ expressions[99] = BinaryenUnary(the_module, 35, expressions[98]);
+ expressions[100] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
+ expressions[101] = BinaryenUnary(the_module, 36, expressions[100]);
+ expressions[102] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
+ expressions[103] = BinaryenUnary(the_module, 37, expressions[102]);
+ expressions[104] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
+ expressions[105] = BinaryenUnary(the_module, 38, expressions[104]);
+ expressions[106] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
+ expressions[107] = BinaryenUnary(the_module, 39, expressions[106]);
+ expressions[108] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
+ expressions[109] = BinaryenUnary(the_module, 40, expressions[108]);
+ expressions[110] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
+ expressions[111] = BinaryenUnary(the_module, 41, expressions[110]);
+ expressions[112] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
+ expressions[113] = BinaryenUnary(the_module, 42, expressions[112]);
+ expressions[114] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
+ expressions[115] = BinaryenUnary(the_module, 43, expressions[114]);
+ expressions[116] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
+ expressions[117] = BinaryenUnary(the_module, 44, expressions[116]);
+ expressions[118] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
+ expressions[119] = BinaryenUnary(the_module, 45, expressions[118]);
+ expressions[120] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
+ expressions[121] = BinaryenUnary(the_module, 46, expressions[120]);
expressions[122] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
- expressions[123] = BinaryenBinary(the_module, 0, expressions[122], expressions[121]);
- expressions[124] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9007.33));
- expressions[125] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
- expressions[126] = BinaryenBinary(the_module, 64, expressions[125], expressions[124]);
- expressions[127] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
- expressions[128] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
- expressions[129] = BinaryenBinary(the_module, 3, expressions[128], expressions[127]);
- expressions[130] = BinaryenConst(the_module, BinaryenLiteralInt64(-23));
- expressions[131] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
- expressions[132] = BinaryenBinary(the_module, 29, expressions[131], expressions[130]);
- expressions[133] = BinaryenConst(the_module, BinaryenLiteralInt64(-23));
- expressions[134] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
- expressions[135] = BinaryenBinary(the_module, 30, expressions[134], expressions[133]);
- expressions[136] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
- expressions[137] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
- expressions[138] = BinaryenBinary(the_module, 6, expressions[137], expressions[136]);
- expressions[139] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
- expressions[140] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
- expressions[141] = BinaryenBinary(the_module, 7, expressions[140], expressions[139]);
- expressions[142] = BinaryenConst(the_module, BinaryenLiteralInt64(-23));
- expressions[143] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
- expressions[144] = BinaryenBinary(the_module, 33, expressions[143], expressions[142]);
- expressions[145] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
- expressions[146] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
- expressions[147] = BinaryenBinary(the_module, 9, expressions[146], expressions[145]);
- expressions[148] = BinaryenConst(the_module, BinaryenLiteralInt64(-23));
- expressions[149] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
- expressions[150] = BinaryenBinary(the_module, 35, expressions[149], expressions[148]);
- expressions[151] = BinaryenConst(the_module, BinaryenLiteralInt64(-23));
- expressions[152] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
- expressions[153] = BinaryenBinary(the_module, 36, expressions[152], expressions[151]);
- expressions[154] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
- expressions[155] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
- expressions[156] = BinaryenBinary(the_module, 12, expressions[155], expressions[154]);
- expressions[157] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
- expressions[158] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
- expressions[159] = BinaryenBinary(the_module, 13, expressions[158], expressions[157]);
- expressions[160] = BinaryenConst(the_module, BinaryenLiteralInt64(-23));
- expressions[161] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
- expressions[162] = BinaryenBinary(the_module, 39, expressions[161], expressions[160]);
- expressions[163] = BinaryenConst(the_module, BinaryenLiteralFloat32(-62.5));
- expressions[164] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
- expressions[165] = BinaryenBinary(the_module, 53, expressions[164], expressions[163]);
- expressions[166] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9007.33));
- expressions[167] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
- expressions[168] = BinaryenBinary(the_module, 67, expressions[167], expressions[166]);
- expressions[169] = BinaryenConst(the_module, BinaryenLiteralFloat32(-62.5));
- expressions[170] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
- expressions[171] = BinaryenBinary(the_module, 55, expressions[170], expressions[169]);
- expressions[172] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9007.33));
- expressions[173] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
- expressions[174] = BinaryenBinary(the_module, 69, expressions[173], expressions[172]);
- expressions[175] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
- expressions[176] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
- expressions[177] = BinaryenBinary(the_module, 15, expressions[176], expressions[175]);
- expressions[178] = BinaryenConst(the_module, BinaryenLiteralFloat32(-62.5));
- expressions[179] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
- expressions[180] = BinaryenBinary(the_module, 58, expressions[179], expressions[178]);
- expressions[181] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
- expressions[182] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
- expressions[183] = BinaryenBinary(the_module, 17, expressions[182], expressions[181]);
- expressions[184] = BinaryenConst(the_module, BinaryenLiteralInt64(-23));
- expressions[185] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
- expressions[186] = BinaryenBinary(the_module, 43, expressions[185], expressions[184]);
- expressions[187] = BinaryenConst(the_module, BinaryenLiteralInt64(-23));
- expressions[188] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
- expressions[189] = BinaryenBinary(the_module, 44, expressions[188], expressions[187]);
- expressions[190] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
- expressions[191] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
- expressions[192] = BinaryenBinary(the_module, 20, expressions[191], expressions[190]);
- expressions[193] = BinaryenConst(the_module, BinaryenLiteralInt64(-23));
- expressions[194] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
- expressions[195] = BinaryenBinary(the_module, 46, expressions[194], expressions[193]);
- expressions[196] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
- expressions[197] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
- expressions[198] = BinaryenBinary(the_module, 22, expressions[197], expressions[196]);
- expressions[199] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
- expressions[200] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
- expressions[201] = BinaryenBinary(the_module, 23, expressions[200], expressions[199]);
- expressions[202] = BinaryenConst(the_module, BinaryenLiteralInt64(-23));
- expressions[203] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
- expressions[204] = BinaryenBinary(the_module, 49, expressions[203], expressions[202]);
- expressions[205] = BinaryenConst(the_module, BinaryenLiteralFloat32(-62.5));
- expressions[206] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
- expressions[207] = BinaryenBinary(the_module, 59, expressions[206], expressions[205]);
- expressions[208] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9007.33));
- expressions[209] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
- expressions[210] = BinaryenBinary(the_module, 73, expressions[209], expressions[208]);
- expressions[211] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9007.33));
- expressions[212] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
- expressions[213] = BinaryenBinary(the_module, 74, expressions[212], expressions[211]);
- expressions[214] = BinaryenConst(the_module, BinaryenLiteralFloat32(-62.5));
- expressions[215] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
- expressions[216] = BinaryenBinary(the_module, 62, expressions[215], expressions[214]);
+ expressions[123] = BinaryenUnary(the_module, 60, expressions[122]);
+ expressions[124] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
+ expressions[125] = BinaryenUnary(the_module, 61, expressions[124]);
+ expressions[126] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
+ expressions[127] = BinaryenUnary(the_module, 62, expressions[126]);
+ expressions[128] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
+ expressions[129] = BinaryenUnary(the_module, 63, expressions[128]);
+ expressions[130] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
+ expressions[131] = BinaryenUnary(the_module, 64, expressions[130]);
+ expressions[132] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
+ expressions[133] = BinaryenUnary(the_module, 65, expressions[132]);
+ {
+ uint8_t t1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[134] = BinaryenConst(the_module, BinaryenLiteralVec128(t1));
+ }
+ expressions[135] = BinaryenUnary(the_module, 66, expressions[134]);
+ {
+ uint8_t t2[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[136] = BinaryenConst(the_module, BinaryenLiteralVec128(t2));
+ }
+ expressions[137] = BinaryenUnary(the_module, 67, expressions[136]);
+ {
+ uint8_t t3[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[138] = BinaryenConst(the_module, BinaryenLiteralVec128(t3));
+ }
+ expressions[139] = BinaryenUnary(the_module, 68, expressions[138]);
+ {
+ uint8_t t4[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[140] = BinaryenConst(the_module, BinaryenLiteralVec128(t4));
+ }
+ expressions[141] = BinaryenUnary(the_module, 69, expressions[140]);
+ {
+ uint8_t t5[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[142] = BinaryenConst(the_module, BinaryenLiteralVec128(t5));
+ }
+ expressions[143] = BinaryenUnary(the_module, 70, expressions[142]);
+ {
+ uint8_t t6[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[144] = BinaryenConst(the_module, BinaryenLiteralVec128(t6));
+ }
+ expressions[145] = BinaryenUnary(the_module, 71, expressions[144]);
+ {
+ uint8_t t7[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[146] = BinaryenConst(the_module, BinaryenLiteralVec128(t7));
+ }
+ expressions[147] = BinaryenUnary(the_module, 72, expressions[146]);
+ {
+ uint8_t t8[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[148] = BinaryenConst(the_module, BinaryenLiteralVec128(t8));
+ }
+ expressions[149] = BinaryenUnary(the_module, 73, expressions[148]);
+ {
+ uint8_t t9[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[150] = BinaryenConst(the_module, BinaryenLiteralVec128(t9));
+ }
+ expressions[151] = BinaryenUnary(the_module, 74, expressions[150]);
+ {
+ uint8_t t10[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[152] = BinaryenConst(the_module, BinaryenLiteralVec128(t10));
+ }
+ expressions[153] = BinaryenUnary(the_module, 75, expressions[152]);
+ {
+ uint8_t t11[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[154] = BinaryenConst(the_module, BinaryenLiteralVec128(t11));
+ }
+ expressions[155] = BinaryenUnary(the_module, 76, expressions[154]);
+ {
+ uint8_t t12[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[156] = BinaryenConst(the_module, BinaryenLiteralVec128(t12));
+ }
+ expressions[157] = BinaryenUnary(the_module, 77, expressions[156]);
+ {
+ uint8_t t13[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[158] = BinaryenConst(the_module, BinaryenLiteralVec128(t13));
+ }
+ expressions[159] = BinaryenUnary(the_module, 78, expressions[158]);
+ {
+ uint8_t t14[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[160] = BinaryenConst(the_module, BinaryenLiteralVec128(t14));
+ }
+ expressions[161] = BinaryenUnary(the_module, 79, expressions[160]);
+ {
+ uint8_t t15[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[162] = BinaryenConst(the_module, BinaryenLiteralVec128(t15));
+ }
+ expressions[163] = BinaryenUnary(the_module, 80, expressions[162]);
+ {
+ uint8_t t16[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[164] = BinaryenConst(the_module, BinaryenLiteralVec128(t16));
+ }
+ expressions[165] = BinaryenUnary(the_module, 81, expressions[164]);
+ {
+ uint8_t t17[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[166] = BinaryenConst(the_module, BinaryenLiteralVec128(t17));
+ }
+ expressions[167] = BinaryenUnary(the_module, 82, expressions[166]);
+ {
+ uint8_t t18[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[168] = BinaryenConst(the_module, BinaryenLiteralVec128(t18));
+ }
+ expressions[169] = BinaryenUnary(the_module, 83, expressions[168]);
+ {
+ uint8_t t19[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[170] = BinaryenConst(the_module, BinaryenLiteralVec128(t19));
+ }
+ expressions[171] = BinaryenUnary(the_module, 84, expressions[170]);
+ {
+ uint8_t t20[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[172] = BinaryenConst(the_module, BinaryenLiteralVec128(t20));
+ }
+ expressions[173] = BinaryenUnary(the_module, 85, expressions[172]);
+ {
+ uint8_t t21[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[174] = BinaryenConst(the_module, BinaryenLiteralVec128(t21));
+ }
+ expressions[175] = BinaryenUnary(the_module, 86, expressions[174]);
+ {
+ uint8_t t22[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[176] = BinaryenConst(the_module, BinaryenLiteralVec128(t22));
+ }
+ expressions[177] = BinaryenUnary(the_module, 87, expressions[176]);
+ {
+ uint8_t t23[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[178] = BinaryenConst(the_module, BinaryenLiteralVec128(t23));
+ }
+ expressions[179] = BinaryenUnary(the_module, 88, expressions[178]);
+ {
+ uint8_t t24[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[180] = BinaryenConst(the_module, BinaryenLiteralVec128(t24));
+ }
+ expressions[181] = BinaryenUnary(the_module, 89, expressions[180]);
+ {
+ uint8_t t25[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[182] = BinaryenConst(the_module, BinaryenLiteralVec128(t25));
+ }
+ expressions[183] = BinaryenUnary(the_module, 90, expressions[182]);
+ {
+ uint8_t t26[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[184] = BinaryenConst(the_module, BinaryenLiteralVec128(t26));
+ }
+ expressions[185] = BinaryenUnary(the_module, 91, expressions[184]);
+ {
+ uint8_t t27[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[186] = BinaryenConst(the_module, BinaryenLiteralVec128(t27));
+ }
+ expressions[187] = BinaryenUnary(the_module, 92, expressions[186]);
+ expressions[188] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
+ expressions[189] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
+ expressions[190] = BinaryenBinary(the_module, 0, expressions[189], expressions[188]);
+ expressions[191] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9007.33));
+ expressions[192] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
+ expressions[193] = BinaryenBinary(the_module, 64, expressions[192], expressions[191]);
+ expressions[194] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
+ expressions[195] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
+ expressions[196] = BinaryenBinary(the_module, 3, expressions[195], expressions[194]);
+ expressions[197] = BinaryenConst(the_module, BinaryenLiteralInt64(-23));
+ expressions[198] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
+ expressions[199] = BinaryenBinary(the_module, 29, expressions[198], expressions[197]);
+ expressions[200] = BinaryenConst(the_module, BinaryenLiteralInt64(-23));
+ expressions[201] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
+ expressions[202] = BinaryenBinary(the_module, 30, expressions[201], expressions[200]);
+ expressions[203] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
+ expressions[204] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
+ expressions[205] = BinaryenBinary(the_module, 6, expressions[204], expressions[203]);
+ expressions[206] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
+ expressions[207] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
+ expressions[208] = BinaryenBinary(the_module, 7, expressions[207], expressions[206]);
+ expressions[209] = BinaryenConst(the_module, BinaryenLiteralInt64(-23));
+ expressions[210] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
+ expressions[211] = BinaryenBinary(the_module, 33, expressions[210], expressions[209]);
+ expressions[212] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
+ expressions[213] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
+ expressions[214] = BinaryenBinary(the_module, 9, expressions[213], expressions[212]);
+ expressions[215] = BinaryenConst(the_module, BinaryenLiteralInt64(-23));
+ expressions[216] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
+ expressions[217] = BinaryenBinary(the_module, 35, expressions[216], expressions[215]);
+ expressions[218] = BinaryenConst(the_module, BinaryenLiteralInt64(-23));
+ expressions[219] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
+ expressions[220] = BinaryenBinary(the_module, 36, expressions[219], expressions[218]);
+ expressions[221] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
+ expressions[222] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
+ expressions[223] = BinaryenBinary(the_module, 12, expressions[222], expressions[221]);
+ expressions[224] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
+ expressions[225] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
+ expressions[226] = BinaryenBinary(the_module, 13, expressions[225], expressions[224]);
+ expressions[227] = BinaryenConst(the_module, BinaryenLiteralInt64(-23));
+ expressions[228] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
+ expressions[229] = BinaryenBinary(the_module, 39, expressions[228], expressions[227]);
+ expressions[230] = BinaryenConst(the_module, BinaryenLiteralFloat32(-62.5));
+ expressions[231] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
+ expressions[232] = BinaryenBinary(the_module, 53, expressions[231], expressions[230]);
+ expressions[233] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9007.33));
+ expressions[234] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
+ expressions[235] = BinaryenBinary(the_module, 67, expressions[234], expressions[233]);
+ expressions[236] = BinaryenConst(the_module, BinaryenLiteralFloat32(-62.5));
+ expressions[237] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
+ expressions[238] = BinaryenBinary(the_module, 55, expressions[237], expressions[236]);
+ expressions[239] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9007.33));
+ expressions[240] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
+ expressions[241] = BinaryenBinary(the_module, 69, expressions[240], expressions[239]);
+ expressions[242] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
+ expressions[243] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
+ expressions[244] = BinaryenBinary(the_module, 15, expressions[243], expressions[242]);
+ expressions[245] = BinaryenConst(the_module, BinaryenLiteralFloat32(-62.5));
+ expressions[246] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
+ expressions[247] = BinaryenBinary(the_module, 58, expressions[246], expressions[245]);
+ expressions[248] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
+ expressions[249] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
+ expressions[250] = BinaryenBinary(the_module, 17, expressions[249], expressions[248]);
+ expressions[251] = BinaryenConst(the_module, BinaryenLiteralInt64(-23));
+ expressions[252] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
+ expressions[253] = BinaryenBinary(the_module, 43, expressions[252], expressions[251]);
+ expressions[254] = BinaryenConst(the_module, BinaryenLiteralInt64(-23));
+ expressions[255] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
+ expressions[256] = BinaryenBinary(the_module, 44, expressions[255], expressions[254]);
+ expressions[257] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
+ expressions[258] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
+ expressions[259] = BinaryenBinary(the_module, 20, expressions[258], expressions[257]);
+ expressions[260] = BinaryenConst(the_module, BinaryenLiteralInt64(-23));
+ expressions[261] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
+ expressions[262] = BinaryenBinary(the_module, 46, expressions[261], expressions[260]);
+ expressions[263] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
+ expressions[264] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
+ expressions[265] = BinaryenBinary(the_module, 22, expressions[264], expressions[263]);
+ expressions[266] = BinaryenConst(the_module, BinaryenLiteralInt32(-11));
+ expressions[267] = BinaryenConst(the_module, BinaryenLiteralInt32(-10));
+ expressions[268] = BinaryenBinary(the_module, 23, expressions[267], expressions[266]);
+ expressions[269] = BinaryenConst(the_module, BinaryenLiteralInt64(-23));
+ expressions[270] = BinaryenConst(the_module, BinaryenLiteralInt64(-22));
+ expressions[271] = BinaryenBinary(the_module, 49, expressions[270], expressions[269]);
+ expressions[272] = BinaryenConst(the_module, BinaryenLiteralFloat32(-62.5));
+ expressions[273] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
+ expressions[274] = BinaryenBinary(the_module, 59, expressions[273], expressions[272]);
+ expressions[275] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9007.33));
+ expressions[276] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
+ expressions[277] = BinaryenBinary(the_module, 73, expressions[276], expressions[275]);
+ expressions[278] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9007.33));
+ expressions[279] = BinaryenConst(the_module, BinaryenLiteralFloat64(-9005.84));
+ expressions[280] = BinaryenBinary(the_module, 74, expressions[279], expressions[278]);
+ expressions[281] = BinaryenConst(the_module, BinaryenLiteralFloat32(-62.5));
+ expressions[282] = BinaryenConst(the_module, BinaryenLiteralFloat32(-33.612));
+ expressions[283] = BinaryenBinary(the_module, 62, expressions[282], expressions[281]);
+ {
+ uint8_t t28[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[284] = BinaryenConst(the_module, BinaryenLiteralVec128(t28));
+ }
+ {
+ uint8_t t29[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[285] = BinaryenConst(the_module, BinaryenLiteralVec128(t29));
+ }
+ expressions[286] = BinaryenBinary(the_module, 76, expressions[285], expressions[284]);
+ {
+ uint8_t t30[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[287] = BinaryenConst(the_module, BinaryenLiteralVec128(t30));
+ }
+ {
+ uint8_t t31[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[288] = BinaryenConst(the_module, BinaryenLiteralVec128(t31));
+ }
+ expressions[289] = BinaryenBinary(the_module, 77, expressions[288], expressions[287]);
+ {
+ uint8_t t32[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[290] = BinaryenConst(the_module, BinaryenLiteralVec128(t32));
+ }
+ {
+ uint8_t t33[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[291] = BinaryenConst(the_module, BinaryenLiteralVec128(t33));
+ }
+ expressions[292] = BinaryenBinary(the_module, 78, expressions[291], expressions[290]);
+ {
+ uint8_t t34[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[293] = BinaryenConst(the_module, BinaryenLiteralVec128(t34));
+ }
+ {
+ uint8_t t35[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[294] = BinaryenConst(the_module, BinaryenLiteralVec128(t35));
+ }
+ expressions[295] = BinaryenBinary(the_module, 79, expressions[294], expressions[293]);
+ {
+ uint8_t t36[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[296] = BinaryenConst(the_module, BinaryenLiteralVec128(t36));
+ }
+ {
+ uint8_t t37[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[297] = BinaryenConst(the_module, BinaryenLiteralVec128(t37));
+ }
+ expressions[298] = BinaryenBinary(the_module, 80, expressions[297], expressions[296]);
+ {
+ uint8_t t38[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[299] = BinaryenConst(the_module, BinaryenLiteralVec128(t38));
+ }
+ {
+ uint8_t t39[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[300] = BinaryenConst(the_module, BinaryenLiteralVec128(t39));
+ }
+ expressions[301] = BinaryenBinary(the_module, 81, expressions[300], expressions[299]);
+ {
+ uint8_t t40[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[302] = BinaryenConst(the_module, BinaryenLiteralVec128(t40));
+ }
+ {
+ uint8_t t41[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[303] = BinaryenConst(the_module, BinaryenLiteralVec128(t41));
+ }
+ expressions[304] = BinaryenBinary(the_module, 82, expressions[303], expressions[302]);
+ {
+ uint8_t t42[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[305] = BinaryenConst(the_module, BinaryenLiteralVec128(t42));
+ }
+ {
+ uint8_t t43[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[306] = BinaryenConst(the_module, BinaryenLiteralVec128(t43));
+ }
+ expressions[307] = BinaryenBinary(the_module, 83, expressions[306], expressions[305]);
+ {
+ uint8_t t44[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[308] = BinaryenConst(the_module, BinaryenLiteralVec128(t44));
+ }
+ {
+ uint8_t t45[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[309] = BinaryenConst(the_module, BinaryenLiteralVec128(t45));
+ }
+ expressions[310] = BinaryenBinary(the_module, 84, expressions[309], expressions[308]);
+ {
+ uint8_t t46[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[311] = BinaryenConst(the_module, BinaryenLiteralVec128(t46));
+ }
+ {
+ uint8_t t47[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[312] = BinaryenConst(the_module, BinaryenLiteralVec128(t47));
+ }
+ expressions[313] = BinaryenBinary(the_module, 85, expressions[312], expressions[311]);
+ {
+ uint8_t t48[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[314] = BinaryenConst(the_module, BinaryenLiteralVec128(t48));
+ }
+ {
+ uint8_t t49[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[315] = BinaryenConst(the_module, BinaryenLiteralVec128(t49));
+ }
+ expressions[316] = BinaryenBinary(the_module, 86, expressions[315], expressions[314]);
+ {
+ uint8_t t50[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[317] = BinaryenConst(the_module, BinaryenLiteralVec128(t50));
+ }
+ {
+ uint8_t t51[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[318] = BinaryenConst(the_module, BinaryenLiteralVec128(t51));
+ }
+ expressions[319] = BinaryenBinary(the_module, 87, expressions[318], expressions[317]);
+ {
+ uint8_t t52[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[320] = BinaryenConst(the_module, BinaryenLiteralVec128(t52));
+ }
+ {
+ uint8_t t53[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[321] = BinaryenConst(the_module, BinaryenLiteralVec128(t53));
+ }
+ expressions[322] = BinaryenBinary(the_module, 88, expressions[321], expressions[320]);
+ {
+ uint8_t t54[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[323] = BinaryenConst(the_module, BinaryenLiteralVec128(t54));
+ }
+ {
+ uint8_t t55[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[324] = BinaryenConst(the_module, BinaryenLiteralVec128(t55));
+ }
+ expressions[325] = BinaryenBinary(the_module, 89, expressions[324], expressions[323]);
+ {
+ uint8_t t56[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[326] = BinaryenConst(the_module, BinaryenLiteralVec128(t56));
+ }
+ {
+ uint8_t t57[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[327] = BinaryenConst(the_module, BinaryenLiteralVec128(t57));
+ }
+ expressions[328] = BinaryenBinary(the_module, 90, expressions[327], expressions[326]);
+ {
+ uint8_t t58[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[329] = BinaryenConst(the_module, BinaryenLiteralVec128(t58));
+ }
+ {
+ uint8_t t59[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[330] = BinaryenConst(the_module, BinaryenLiteralVec128(t59));
+ }
+ expressions[331] = BinaryenBinary(the_module, 91, expressions[330], expressions[329]);
+ {
+ uint8_t t60[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[332] = BinaryenConst(the_module, BinaryenLiteralVec128(t60));
+ }
+ {
+ uint8_t t61[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[333] = BinaryenConst(the_module, BinaryenLiteralVec128(t61));
+ }
+ expressions[334] = BinaryenBinary(the_module, 92, expressions[333], expressions[332]);
+ {
+ uint8_t t62[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[335] = BinaryenConst(the_module, BinaryenLiteralVec128(t62));
+ }
+ {
+ uint8_t t63[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[336] = BinaryenConst(the_module, BinaryenLiteralVec128(t63));
+ }
+ expressions[337] = BinaryenBinary(the_module, 93, expressions[336], expressions[335]);
+ {
+ uint8_t t64[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[338] = BinaryenConst(the_module, BinaryenLiteralVec128(t64));
+ }
+ {
+ uint8_t t65[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[339] = BinaryenConst(the_module, BinaryenLiteralVec128(t65));
+ }
+ expressions[340] = BinaryenBinary(the_module, 94, expressions[339], expressions[338]);
+ {
+ uint8_t t66[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[341] = BinaryenConst(the_module, BinaryenLiteralVec128(t66));
+ }
+ {
+ uint8_t t67[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[342] = BinaryenConst(the_module, BinaryenLiteralVec128(t67));
+ }
+ expressions[343] = BinaryenBinary(the_module, 95, expressions[342], expressions[341]);
+ {
+ uint8_t t68[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[344] = BinaryenConst(the_module, BinaryenLiteralVec128(t68));
+ }
+ {
+ uint8_t t69[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[345] = BinaryenConst(the_module, BinaryenLiteralVec128(t69));
+ }
+ expressions[346] = BinaryenBinary(the_module, 96, expressions[345], expressions[344]);
+ {
+ uint8_t t70[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[347] = BinaryenConst(the_module, BinaryenLiteralVec128(t70));
+ }
+ {
+ uint8_t t71[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[348] = BinaryenConst(the_module, BinaryenLiteralVec128(t71));
+ }
+ expressions[349] = BinaryenBinary(the_module, 97, expressions[348], expressions[347]);
+ {
+ uint8_t t72[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[350] = BinaryenConst(the_module, BinaryenLiteralVec128(t72));
+ }
+ {
+ uint8_t t73[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[351] = BinaryenConst(the_module, BinaryenLiteralVec128(t73));
+ }
+ expressions[352] = BinaryenBinary(the_module, 98, expressions[351], expressions[350]);
+ {
+ uint8_t t74[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[353] = BinaryenConst(the_module, BinaryenLiteralVec128(t74));
+ }
+ {
+ uint8_t t75[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[354] = BinaryenConst(the_module, BinaryenLiteralVec128(t75));
+ }
+ expressions[355] = BinaryenBinary(the_module, 99, expressions[354], expressions[353]);
+ {
+ uint8_t t76[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[356] = BinaryenConst(the_module, BinaryenLiteralVec128(t76));
+ }
+ {
+ uint8_t t77[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[357] = BinaryenConst(the_module, BinaryenLiteralVec128(t77));
+ }
+ expressions[358] = BinaryenBinary(the_module, 100, expressions[357], expressions[356]);
+ {
+ uint8_t t78[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[359] = BinaryenConst(the_module, BinaryenLiteralVec128(t78));
+ }
+ {
+ uint8_t t79[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[360] = BinaryenConst(the_module, BinaryenLiteralVec128(t79));
+ }
+ expressions[361] = BinaryenBinary(the_module, 101, expressions[360], expressions[359]);
+ {
+ uint8_t t80[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[362] = BinaryenConst(the_module, BinaryenLiteralVec128(t80));
+ }
+ {
+ uint8_t t81[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[363] = BinaryenConst(the_module, BinaryenLiteralVec128(t81));
+ }
+ expressions[364] = BinaryenBinary(the_module, 102, expressions[363], expressions[362]);
+ {
+ uint8_t t82[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[365] = BinaryenConst(the_module, BinaryenLiteralVec128(t82));
+ }
+ {
+ uint8_t t83[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[366] = BinaryenConst(the_module, BinaryenLiteralVec128(t83));
+ }
+ expressions[367] = BinaryenBinary(the_module, 103, expressions[366], expressions[365]);
+ {
+ uint8_t t84[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[368] = BinaryenConst(the_module, BinaryenLiteralVec128(t84));
+ }
+ {
+ uint8_t t85[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[369] = BinaryenConst(the_module, BinaryenLiteralVec128(t85));
+ }
+ expressions[370] = BinaryenBinary(the_module, 104, expressions[369], expressions[368]);
+ {
+ uint8_t t86[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[371] = BinaryenConst(the_module, BinaryenLiteralVec128(t86));
+ }
+ {
+ uint8_t t87[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[372] = BinaryenConst(the_module, BinaryenLiteralVec128(t87));
+ }
+ expressions[373] = BinaryenBinary(the_module, 105, expressions[372], expressions[371]);
+ {
+ uint8_t t88[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[374] = BinaryenConst(the_module, BinaryenLiteralVec128(t88));
+ }
+ {
+ uint8_t t89[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[375] = BinaryenConst(the_module, BinaryenLiteralVec128(t89));
+ }
+ expressions[376] = BinaryenBinary(the_module, 106, expressions[375], expressions[374]);
+ {
+ uint8_t t90[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[377] = BinaryenConst(the_module, BinaryenLiteralVec128(t90));
+ }
+ {
+ uint8_t t91[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[378] = BinaryenConst(the_module, BinaryenLiteralVec128(t91));
+ }
+ expressions[379] = BinaryenBinary(the_module, 107, expressions[378], expressions[377]);
+ {
+ uint8_t t92[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[380] = BinaryenConst(the_module, BinaryenLiteralVec128(t92));
+ }
+ {
+ uint8_t t93[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[381] = BinaryenConst(the_module, BinaryenLiteralVec128(t93));
+ }
+ expressions[382] = BinaryenBinary(the_module, 108, expressions[381], expressions[380]);
+ {
+ uint8_t t94[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[383] = BinaryenConst(the_module, BinaryenLiteralVec128(t94));
+ }
+ {
+ uint8_t t95[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[384] = BinaryenConst(the_module, BinaryenLiteralVec128(t95));
+ }
+ expressions[385] = BinaryenBinary(the_module, 109, expressions[384], expressions[383]);
+ {
+ uint8_t t96[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[386] = BinaryenConst(the_module, BinaryenLiteralVec128(t96));
+ }
+ {
+ uint8_t t97[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[387] = BinaryenConst(the_module, BinaryenLiteralVec128(t97));
+ }
+ expressions[388] = BinaryenBinary(the_module, 110, expressions[387], expressions[386]);
+ {
+ uint8_t t98[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[389] = BinaryenConst(the_module, BinaryenLiteralVec128(t98));
+ }
+ {
+ uint8_t t99[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[390] = BinaryenConst(the_module, BinaryenLiteralVec128(t99));
+ }
+ expressions[391] = BinaryenBinary(the_module, 111, expressions[390], expressions[389]);
+ {
+ uint8_t t100[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[392] = BinaryenConst(the_module, BinaryenLiteralVec128(t100));
+ }
+ {
+ uint8_t t101[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[393] = BinaryenConst(the_module, BinaryenLiteralVec128(t101));
+ }
+ expressions[394] = BinaryenBinary(the_module, 112, expressions[393], expressions[392]);
+ {
+ uint8_t t102[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[395] = BinaryenConst(the_module, BinaryenLiteralVec128(t102));
+ }
+ {
+ uint8_t t103[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[396] = BinaryenConst(the_module, BinaryenLiteralVec128(t103));
+ }
+ expressions[397] = BinaryenBinary(the_module, 113, expressions[396], expressions[395]);
+ {
+ uint8_t t104[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[398] = BinaryenConst(the_module, BinaryenLiteralVec128(t104));
+ }
+ {
+ uint8_t t105[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[399] = BinaryenConst(the_module, BinaryenLiteralVec128(t105));
+ }
+ expressions[400] = BinaryenBinary(the_module, 114, expressions[399], expressions[398]);
+ {
+ uint8_t t106[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[401] = BinaryenConst(the_module, BinaryenLiteralVec128(t106));
+ }
+ {
+ uint8_t t107[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[402] = BinaryenConst(the_module, BinaryenLiteralVec128(t107));
+ }
+ expressions[403] = BinaryenBinary(the_module, 115, expressions[402], expressions[401]);
+ {
+ uint8_t t108[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[404] = BinaryenConst(the_module, BinaryenLiteralVec128(t108));
+ }
+ {
+ uint8_t t109[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[405] = BinaryenConst(the_module, BinaryenLiteralVec128(t109));
+ }
+ expressions[406] = BinaryenBinary(the_module, 116, expressions[405], expressions[404]);
+ {
+ uint8_t t110[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[407] = BinaryenConst(the_module, BinaryenLiteralVec128(t110));
+ }
+ {
+ uint8_t t111[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[408] = BinaryenConst(the_module, BinaryenLiteralVec128(t111));
+ }
+ expressions[409] = BinaryenBinary(the_module, 117, expressions[408], expressions[407]);
+ {
+ uint8_t t112[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[410] = BinaryenConst(the_module, BinaryenLiteralVec128(t112));
+ }
+ {
+ uint8_t t113[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[411] = BinaryenConst(the_module, BinaryenLiteralVec128(t113));
+ }
+ expressions[412] = BinaryenBinary(the_module, 118, expressions[411], expressions[410]);
+ {
+ uint8_t t114[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[413] = BinaryenConst(the_module, BinaryenLiteralVec128(t114));
+ }
+ {
+ uint8_t t115[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[414] = BinaryenConst(the_module, BinaryenLiteralVec128(t115));
+ }
+ expressions[415] = BinaryenBinary(the_module, 119, expressions[414], expressions[413]);
+ {
+ uint8_t t116[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[416] = BinaryenConst(the_module, BinaryenLiteralVec128(t116));
+ }
+ {
+ uint8_t t117[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[417] = BinaryenConst(the_module, BinaryenLiteralVec128(t117));
+ }
+ expressions[418] = BinaryenBinary(the_module, 120, expressions[417], expressions[416]);
+ {
+ uint8_t t118[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[419] = BinaryenConst(the_module, BinaryenLiteralVec128(t118));
+ }
+ {
+ uint8_t t119[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[420] = BinaryenConst(the_module, BinaryenLiteralVec128(t119));
+ }
+ expressions[421] = BinaryenBinary(the_module, 121, expressions[420], expressions[419]);
+ {
+ uint8_t t120[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[422] = BinaryenConst(the_module, BinaryenLiteralVec128(t120));
+ }
+ {
+ uint8_t t121[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[423] = BinaryenConst(the_module, BinaryenLiteralVec128(t121));
+ }
+ expressions[424] = BinaryenBinary(the_module, 122, expressions[423], expressions[422]);
+ {
+ uint8_t t122[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[425] = BinaryenConst(the_module, BinaryenLiteralVec128(t122));
+ }
+ {
+ uint8_t t123[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[426] = BinaryenConst(the_module, BinaryenLiteralVec128(t123));
+ }
+ expressions[427] = BinaryenBinary(the_module, 123, expressions[426], expressions[425]);
+ {
+ uint8_t t124[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[428] = BinaryenConst(the_module, BinaryenLiteralVec128(t124));
+ }
+ {
+ uint8_t t125[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[429] = BinaryenConst(the_module, BinaryenLiteralVec128(t125));
+ }
+ expressions[430] = BinaryenBinary(the_module, 124, expressions[429], expressions[428]);
+ {
+ uint8_t t126[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[431] = BinaryenConst(the_module, BinaryenLiteralVec128(t126));
+ }
+ {
+ uint8_t t127[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[432] = BinaryenConst(the_module, BinaryenLiteralVec128(t127));
+ }
+ expressions[433] = BinaryenBinary(the_module, 125, expressions[432], expressions[431]);
+ {
+ uint8_t t128[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[434] = BinaryenConst(the_module, BinaryenLiteralVec128(t128));
+ }
+ {
+ uint8_t t129[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[435] = BinaryenConst(the_module, BinaryenLiteralVec128(t129));
+ }
+ expressions[436] = BinaryenBinary(the_module, 126, expressions[435], expressions[434]);
+ {
+ uint8_t t130[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[437] = BinaryenConst(the_module, BinaryenLiteralVec128(t130));
+ }
+ {
+ uint8_t t131[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[438] = BinaryenConst(the_module, BinaryenLiteralVec128(t131));
+ }
+ expressions[439] = BinaryenBinary(the_module, 127, expressions[438], expressions[437]);
+ {
+ uint8_t t132[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[440] = BinaryenConst(the_module, BinaryenLiteralVec128(t132));
+ }
+ {
+ uint8_t t133[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[441] = BinaryenConst(the_module, BinaryenLiteralVec128(t133));
+ }
+ expressions[442] = BinaryenBinary(the_module, 128, expressions[441], expressions[440]);
+ {
+ uint8_t t134[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[443] = BinaryenConst(the_module, BinaryenLiteralVec128(t134));
+ }
+ {
+ uint8_t t135[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[444] = BinaryenConst(the_module, BinaryenLiteralVec128(t135));
+ }
+ expressions[445] = BinaryenBinary(the_module, 129, expressions[444], expressions[443]);
+ {
+ uint8_t t136[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[446] = BinaryenConst(the_module, BinaryenLiteralVec128(t136));
+ }
+ {
+ uint8_t t137[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[447] = BinaryenConst(the_module, BinaryenLiteralVec128(t137));
+ }
+ expressions[448] = BinaryenBinary(the_module, 130, expressions[447], expressions[446]);
+ {
+ uint8_t t138[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[449] = BinaryenConst(the_module, BinaryenLiteralVec128(t138));
+ }
+ {
+ uint8_t t139[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[450] = BinaryenConst(the_module, BinaryenLiteralVec128(t139));
+ }
+ expressions[451] = BinaryenBinary(the_module, 131, expressions[450], expressions[449]);
+ {
+ uint8_t t140[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[452] = BinaryenConst(the_module, BinaryenLiteralVec128(t140));
+ }
+ {
+ uint8_t t141[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[453] = BinaryenConst(the_module, BinaryenLiteralVec128(t141));
+ }
+ expressions[454] = BinaryenBinary(the_module, 132, expressions[453], expressions[452]);
+ {
+ uint8_t t142[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[455] = BinaryenConst(the_module, BinaryenLiteralVec128(t142));
+ }
+ {
+ uint8_t t143[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[456] = BinaryenConst(the_module, BinaryenLiteralVec128(t143));
+ }
+ expressions[457] = BinaryenBinary(the_module, 133, expressions[456], expressions[455]);
+ {
+ uint8_t t144[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[458] = BinaryenConst(the_module, BinaryenLiteralVec128(t144));
+ }
+ {
+ uint8_t t145[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[459] = BinaryenConst(the_module, BinaryenLiteralVec128(t145));
+ }
+ expressions[460] = BinaryenBinary(the_module, 134, expressions[459], expressions[458]);
+ {
+ uint8_t t146[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[461] = BinaryenConst(the_module, BinaryenLiteralVec128(t146));
+ }
+ {
+ uint8_t t147[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[462] = BinaryenConst(the_module, BinaryenLiteralVec128(t147));
+ }
+ expressions[463] = BinaryenBinary(the_module, 135, expressions[462], expressions[461]);
+ {
+ uint8_t t148[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[464] = BinaryenConst(the_module, BinaryenLiteralVec128(t148));
+ }
+ {
+ uint8_t t149[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[465] = BinaryenConst(the_module, BinaryenLiteralVec128(t149));
+ }
+ expressions[466] = BinaryenBinary(the_module, 136, expressions[465], expressions[464]);
+ {
+ uint8_t t150[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[467] = BinaryenConst(the_module, BinaryenLiteralVec128(t150));
+ }
+ {
+ uint8_t t151[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[468] = BinaryenConst(the_module, BinaryenLiteralVec128(t151));
+ }
+ expressions[469] = BinaryenBinary(the_module, 137, expressions[468], expressions[467]);
+ {
+ uint8_t t152[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[470] = BinaryenConst(the_module, BinaryenLiteralVec128(t152));
+ }
+ {
+ uint8_t t153[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[471] = BinaryenConst(the_module, BinaryenLiteralVec128(t153));
+ }
+ expressions[472] = BinaryenBinary(the_module, 138, expressions[471], expressions[470]);
+ {
+ uint8_t t154[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[473] = BinaryenConst(the_module, BinaryenLiteralVec128(t154));
+ }
+ {
+ uint8_t t155[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[474] = BinaryenConst(the_module, BinaryenLiteralVec128(t155));
+ }
+ expressions[475] = BinaryenBinary(the_module, 139, expressions[474], expressions[473]);
+ {
+ uint8_t t156[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[476] = BinaryenConst(the_module, BinaryenLiteralVec128(t156));
+ }
+ {
+ uint8_t t157[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[477] = BinaryenConst(the_module, BinaryenLiteralVec128(t157));
+ }
+ expressions[478] = BinaryenBinary(the_module, 140, expressions[477], expressions[476]);
+ {
+ uint8_t t158[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[479] = BinaryenConst(the_module, BinaryenLiteralVec128(t158));
+ }
+ {
+ uint8_t t159[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[480] = BinaryenConst(the_module, BinaryenLiteralVec128(t159));
+ }
+ expressions[481] = BinaryenBinary(the_module, 141, expressions[480], expressions[479]);
+ {
+ uint8_t t160[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[482] = BinaryenConst(the_module, BinaryenLiteralVec128(t160));
+ }
+ {
+ uint8_t t161[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[483] = BinaryenConst(the_module, BinaryenLiteralVec128(t161));
+ }
+ expressions[484] = BinaryenBinary(the_module, 142, expressions[483], expressions[482]);
+ {
+ uint8_t t162[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[485] = BinaryenConst(the_module, BinaryenLiteralVec128(t162));
+ }
+ {
+ uint8_t t163[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[486] = BinaryenConst(the_module, BinaryenLiteralVec128(t163));
+ }
+ expressions[487] = BinaryenBinary(the_module, 143, expressions[486], expressions[485]);
+ {
+ uint8_t t164[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[488] = BinaryenConst(the_module, BinaryenLiteralVec128(t164));
+ }
+ {
+ uint8_t t165[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[489] = BinaryenConst(the_module, BinaryenLiteralVec128(t165));
+ }
+ expressions[490] = BinaryenBinary(the_module, 144, expressions[489], expressions[488]);
+ {
+ uint8_t t166[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[491] = BinaryenConst(the_module, BinaryenLiteralVec128(t166));
+ }
+ {
+ uint8_t t167[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[492] = BinaryenConst(the_module, BinaryenLiteralVec128(t167));
+ }
+ expressions[493] = BinaryenBinary(the_module, 145, expressions[492], expressions[491]);
+ {
+ uint8_t t168[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[494] = BinaryenConst(the_module, BinaryenLiteralVec128(t168));
+ }
+ {
+ uint8_t t169[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[495] = BinaryenConst(the_module, BinaryenLiteralVec128(t169));
+ }
+ expressions[496] = BinaryenBinary(the_module, 146, expressions[495], expressions[494]);
+ {
+ uint8_t t170[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[497] = BinaryenConst(the_module, BinaryenLiteralVec128(t170));
+ }
+ {
+ uint8_t t171[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[498] = BinaryenConst(the_module, BinaryenLiteralVec128(t171));
+ }
+ expressions[499] = BinaryenBinary(the_module, 147, expressions[498], expressions[497]);
+ {
+ uint8_t t172[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[500] = BinaryenConst(the_module, BinaryenLiteralVec128(t172));
+ }
+ {
+ uint8_t t173[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[501] = BinaryenConst(the_module, BinaryenLiteralVec128(t173));
+ }
+ expressions[502] = BinaryenBinary(the_module, 148, expressions[501], expressions[500]);
+ {
+ uint8_t t174[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[503] = BinaryenConst(the_module, BinaryenLiteralVec128(t174));
+ }
+ {
+ uint8_t t175[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[504] = BinaryenConst(the_module, BinaryenLiteralVec128(t175));
+ }
+ expressions[505] = BinaryenBinary(the_module, 149, expressions[504], expressions[503]);
+ {
+ uint8_t t176[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[506] = BinaryenConst(the_module, BinaryenLiteralVec128(t176));
+ }
+ {
+ uint8_t t177[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[507] = BinaryenConst(the_module, BinaryenLiteralVec128(t177));
+ }
+ expressions[508] = BinaryenBinary(the_module, 150, expressions[507], expressions[506]);
+ {
+ uint8_t t178[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[509] = BinaryenConst(the_module, BinaryenLiteralVec128(t178));
+ }
+ {
+ uint8_t t179[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[510] = BinaryenConst(the_module, BinaryenLiteralVec128(t179));
+ }
+ expressions[511] = BinaryenBinary(the_module, 151, expressions[510], expressions[509]);
+ {
+ uint8_t t180[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[512] = BinaryenConst(the_module, BinaryenLiteralVec128(t180));
+ }
+ expressions[513] = BinaryenSIMDExtract(the_module, 0, expressions[512], 0);
+ {
+ uint8_t t181[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[514] = BinaryenConst(the_module, BinaryenLiteralVec128(t181));
+ }
+ expressions[515] = BinaryenSIMDExtract(the_module, 1, expressions[514], 0);
+ {
+ uint8_t t182[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[516] = BinaryenConst(the_module, BinaryenLiteralVec128(t182));
+ }
+ expressions[517] = BinaryenSIMDExtract(the_module, 2, expressions[516], 0);
+ {
+ uint8_t t183[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[518] = BinaryenConst(the_module, BinaryenLiteralVec128(t183));
+ }
+ expressions[519] = BinaryenSIMDExtract(the_module, 3, expressions[518], 0);
+ {
+ uint8_t t184[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[520] = BinaryenConst(the_module, BinaryenLiteralVec128(t184));
+ }
+ expressions[521] = BinaryenSIMDExtract(the_module, 4, expressions[520], 0);
+ {
+ uint8_t t185[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[522] = BinaryenConst(the_module, BinaryenLiteralVec128(t185));
+ }
+ expressions[523] = BinaryenSIMDExtract(the_module, 5, expressions[522], 0);
+ {
+ uint8_t t186[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[524] = BinaryenConst(the_module, BinaryenLiteralVec128(t186));
+ }
+ expressions[525] = BinaryenSIMDExtract(the_module, 6, expressions[524], 0);
+ {
+ uint8_t t187[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[526] = BinaryenConst(the_module, BinaryenLiteralVec128(t187));
+ }
+ expressions[527] = BinaryenSIMDExtract(the_module, 7, expressions[526], 0);
+ expressions[528] = BinaryenConst(the_module, BinaryenLiteralInt32(42));
+ {
+ uint8_t t188[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[529] = BinaryenConst(the_module, BinaryenLiteralVec128(t188));
+ }
+ expressions[530] = BinaryenSIMDReplace(the_module, 0, expressions[529], 0, expressions[528]);
+ expressions[531] = BinaryenConst(the_module, BinaryenLiteralInt32(42));
+ {
+ uint8_t t189[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[532] = BinaryenConst(the_module, BinaryenLiteralVec128(t189));
+ }
+ expressions[533] = BinaryenSIMDReplace(the_module, 1, expressions[532], 0, expressions[531]);
+ expressions[534] = BinaryenConst(the_module, BinaryenLiteralInt32(42));
+ {
+ uint8_t t190[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[535] = BinaryenConst(the_module, BinaryenLiteralVec128(t190));
+ }
+ expressions[536] = BinaryenSIMDReplace(the_module, 2, expressions[535], 0, expressions[534]);
+ expressions[537] = BinaryenConst(the_module, BinaryenLiteralInt64(42));
+ {
+ uint8_t t191[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[538] = BinaryenConst(the_module, BinaryenLiteralVec128(t191));
+ }
+ expressions[539] = BinaryenSIMDReplace(the_module, 3, expressions[538], 0, expressions[537]);
+ expressions[540] = BinaryenConst(the_module, BinaryenLiteralFloat32(42));
+ {
+ uint8_t t192[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[541] = BinaryenConst(the_module, BinaryenLiteralVec128(t192));
+ }
+ expressions[542] = BinaryenSIMDReplace(the_module, 4, expressions[541], 0, expressions[540]);
+ expressions[543] = BinaryenConst(the_module, BinaryenLiteralFloat64(42));
+ {
+ uint8_t t193[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[544] = BinaryenConst(the_module, BinaryenLiteralVec128(t193));
+ }
+ expressions[545] = BinaryenSIMDReplace(the_module, 5, expressions[544], 0, expressions[543]);
+ {
+ uint8_t t194[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[546] = BinaryenConst(the_module, BinaryenLiteralVec128(t194));
+ }
+ expressions[547] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
+ expressions[548] = BinaryenSIMDShift(the_module, 0, expressions[546], expressions[547]);
+ {
+ uint8_t t195[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[549] = BinaryenConst(the_module, BinaryenLiteralVec128(t195));
+ }
+ expressions[550] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
+ expressions[551] = BinaryenSIMDShift(the_module, 1, expressions[549], expressions[550]);
+ {
+ uint8_t t196[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[552] = BinaryenConst(the_module, BinaryenLiteralVec128(t196));
+ }
+ expressions[553] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
+ expressions[554] = BinaryenSIMDShift(the_module, 2, expressions[552], expressions[553]);
+ {
+ uint8_t t197[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[555] = BinaryenConst(the_module, BinaryenLiteralVec128(t197));
+ }
+ expressions[556] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
+ expressions[557] = BinaryenSIMDShift(the_module, 3, expressions[555], expressions[556]);
+ {
+ uint8_t t198[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[558] = BinaryenConst(the_module, BinaryenLiteralVec128(t198));
+ }
+ expressions[559] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
+ expressions[560] = BinaryenSIMDShift(the_module, 4, expressions[558], expressions[559]);
+ {
+ uint8_t t199[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[561] = BinaryenConst(the_module, BinaryenLiteralVec128(t199));
+ }
+ expressions[562] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
+ expressions[563] = BinaryenSIMDShift(the_module, 5, expressions[561], expressions[562]);
+ {
+ uint8_t t200[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[564] = BinaryenConst(the_module, BinaryenLiteralVec128(t200));
+ }
+ expressions[565] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
+ expressions[566] = BinaryenSIMDShift(the_module, 6, expressions[564], expressions[565]);
+ {
+ uint8_t t201[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[567] = BinaryenConst(the_module, BinaryenLiteralVec128(t201));
+ }
+ expressions[568] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
+ expressions[569] = BinaryenSIMDShift(the_module, 7, expressions[567], expressions[568]);
+ {
+ uint8_t t202[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[570] = BinaryenConst(the_module, BinaryenLiteralVec128(t202));
+ }
+ expressions[571] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
+ expressions[572] = BinaryenSIMDShift(the_module, 8, expressions[570], expressions[571]);
+ {
+ uint8_t t203[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[573] = BinaryenConst(the_module, BinaryenLiteralVec128(t203));
+ }
+ expressions[574] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
+ expressions[575] = BinaryenSIMDShift(the_module, 9, expressions[573], expressions[574]);
+ {
+ uint8_t t204[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[576] = BinaryenConst(the_module, BinaryenLiteralVec128(t204));
+ }
+ expressions[577] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
+ expressions[578] = BinaryenSIMDShift(the_module, 10, expressions[576], expressions[577]);
+ {
+ uint8_t t205[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[579] = BinaryenConst(the_module, BinaryenLiteralVec128(t205));
+ }
+ expressions[580] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
+ expressions[581] = BinaryenSIMDShift(the_module, 11, expressions[579], expressions[580]);
+ {
+ uint8_t t206[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[582] = BinaryenConst(the_module, BinaryenLiteralVec128(t206));
+ }
+ {
+ uint8_t t207[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[583] = BinaryenConst(the_module, BinaryenLiteralVec128(t207));
+ }
+ {
+ uint8_t mask[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ expressions[584] = BinaryenSIMDShuffle(the_module, expressions[582], expressions[583], mask);
+ }
+ {
+ uint8_t t208[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[585] = BinaryenConst(the_module, BinaryenLiteralVec128(t208));
+ }
+ {
+ uint8_t t209[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[586] = BinaryenConst(the_module, BinaryenLiteralVec128(t209));
+ }
+ {
+ uint8_t t210[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+ expressions[587] = BinaryenConst(the_module, BinaryenLiteralVec128(t210));
+ }
+ expressions[588] = BinaryenSIMDBitselect(the_module, expressions[585], expressions[586], expressions[587]);
{
BinaryenExpressionRef children[] = { 0 };
- expressions[217] = BinaryenBlock(the_module, NULL, children, 0, BinaryenTypeAuto());
- }
- expressions[218] = BinaryenIf(the_module, expressions[17], expressions[18], expressions[19]);
- expressions[219] = BinaryenIf(the_module, expressions[20], expressions[21], expressions[0]);
- expressions[220] = BinaryenConst(the_module, BinaryenLiteralInt32(0));
- expressions[221] = BinaryenLoop(the_module, "in", expressions[220]);
- expressions[222] = BinaryenConst(the_module, BinaryenLiteralInt32(0));
- expressions[223] = BinaryenLoop(the_module, NULL, expressions[222]);
- expressions[224] = BinaryenBreak(the_module, "the-value", expressions[22], expressions[23]);
- expressions[225] = BinaryenConst(the_module, BinaryenLiteralInt32(2));
- expressions[226] = BinaryenBreak(the_module, "the-nothing", expressions[225], expressions[0]);
- expressions[227] = BinaryenConst(the_module, BinaryenLiteralInt32(3));
- expressions[228] = BinaryenBreak(the_module, "the-value", expressions[0], expressions[227]);
- expressions[229] = BinaryenBreak(the_module, "the-nothing", expressions[0], expressions[0]);
+ expressions[589] = BinaryenBlock(the_module, NULL, children, 0, BinaryenTypeAuto());
+ }
+ expressions[590] = BinaryenIf(the_module, expressions[18], expressions[19], expressions[20]);
+ expressions[591] = BinaryenIf(the_module, expressions[21], expressions[22], expressions[0]);
+ expressions[592] = BinaryenConst(the_module, BinaryenLiteralInt32(0));
+ expressions[593] = BinaryenLoop(the_module, "in", expressions[592]);
+ expressions[594] = BinaryenConst(the_module, BinaryenLiteralInt32(0));
+ expressions[595] = BinaryenLoop(the_module, NULL, expressions[594]);
+ expressions[596] = BinaryenBreak(the_module, "the-value", expressions[23], expressions[24]);
+ expressions[597] = BinaryenConst(the_module, BinaryenLiteralInt32(2));
+ expressions[598] = BinaryenBreak(the_module, "the-nothing", expressions[597], expressions[0]);
+ expressions[599] = BinaryenConst(the_module, BinaryenLiteralInt32(3));
+ expressions[600] = BinaryenBreak(the_module, "the-value", expressions[0], expressions[599]);
+ expressions[601] = BinaryenBreak(the_module, "the-nothing", expressions[0], expressions[0]);
{
const char* names[] = { "the-value" };
- expressions[230] = BinaryenSwitch(the_module, names, 1, "the-value", expressions[24], expressions[25]);
+ expressions[602] = BinaryenSwitch(the_module, names, 1, "the-value", expressions[25], expressions[26]);
}
- expressions[231] = BinaryenConst(the_module, BinaryenLiteralInt32(2));
+ expressions[603] = BinaryenConst(the_module, BinaryenLiteralInt32(2));
{
const char* names[] = { "the-nothing" };
- expressions[232] = BinaryenSwitch(the_module, names, 1, "the-nothing", expressions[231], expressions[0]);
- }
- {
- BinaryenExpressionRef operands[] = { expressions[9], expressions[10], expressions[11], expressions[12] };
- expressions[233] = BinaryenCall(the_module, "kitchen()sinker", operands, 4, 1);
- }
- expressions[234] = BinaryenUnary(the_module, 20, expressions[233]);
- {
- BinaryenExpressionRef operands[] = { expressions[7], expressions[8] };
- expressions[235] = BinaryenCall(the_module, "an-imported", operands, 2, 3);
- }
- expressions[236] = BinaryenUnary(the_module, 25, expressions[235]);
- expressions[237] = BinaryenUnary(the_module, 20, expressions[236]);
- expressions[238] = BinaryenConst(the_module, BinaryenLiteralInt32(2449));
- {
- BinaryenExpressionRef operands[] = { expressions[13], expressions[14], expressions[15], expressions[16] };
- expressions[239] = BinaryenCallIndirect(the_module, expressions[238], operands, 4, "iiIfF");
- }
- expressions[240] = BinaryenUnary(the_module, 20, expressions[239]);
- expressions[241] = BinaryenGetLocal(the_module, 0, 1);
- expressions[242] = BinaryenDrop(the_module, expressions[241]);
- expressions[243] = BinaryenConst(the_module, BinaryenLiteralInt32(101));
- expressions[244] = BinaryenSetLocal(the_module, 0, expressions[243]);
- expressions[245] = BinaryenConst(the_module, BinaryenLiteralInt32(102));
- expressions[246] = BinaryenTeeLocal(the_module, 0, expressions[245]);
- expressions[247] = BinaryenDrop(the_module, expressions[246]);
- expressions[248] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
- expressions[249] = BinaryenLoad(the_module, 4, 0, 0, 0, 1, expressions[248]);
- expressions[250] = BinaryenConst(the_module, BinaryenLiteralInt32(8));
- expressions[251] = BinaryenLoad(the_module, 2, 1, 2, 1, 2, expressions[250]);
- expressions[252] = BinaryenConst(the_module, BinaryenLiteralInt32(2));
- expressions[253] = BinaryenLoad(the_module, 4, 0, 0, 0, 3, expressions[252]);
- expressions[254] = BinaryenConst(the_module, BinaryenLiteralInt32(9));
- expressions[255] = BinaryenLoad(the_module, 8, 0, 2, 8, 4, expressions[254]);
- expressions[256] = BinaryenStore(the_module, 4, 0, 0, expressions[29], expressions[30], 1);
- expressions[257] = BinaryenStore(the_module, 8, 2, 4, expressions[31], expressions[32], 2);
- expressions[258] = BinaryenSelect(the_module, expressions[26], expressions[27], expressions[28]);
- expressions[259] = BinaryenConst(the_module, BinaryenLiteralInt32(1337));
- expressions[260] = BinaryenReturn(the_module, expressions[259]);
- expressions[261] = BinaryenNop(the_module);
- expressions[262] = BinaryenUnreachable(the_module);
- BinaryenExpressionPrint(expressions[40]);
+ expressions[604] = BinaryenSwitch(the_module, names, 1, "the-nothing", expressions[603], expressions[0]);
+ }
+ {
+ BinaryenExpressionRef operands[] = { expressions[10], expressions[11], expressions[12], expressions[13] };
+ expressions[605] = BinaryenCall(the_module, "kitchen()sinker", operands, 4, 1);
+ }
+ expressions[606] = BinaryenUnary(the_module, 20, expressions[605]);
+ {
+ BinaryenExpressionRef operands[] = { expressions[8], expressions[9] };
+ expressions[607] = BinaryenCall(the_module, "an-imported", operands, 2, 3);
+ }
+ expressions[608] = BinaryenUnary(the_module, 25, expressions[607]);
+ expressions[609] = BinaryenUnary(the_module, 20, expressions[608]);
+ expressions[610] = BinaryenConst(the_module, BinaryenLiteralInt32(2449));
+ {
+ BinaryenExpressionRef operands[] = { expressions[14], expressions[15], expressions[16], expressions[17] };
+ expressions[611] = BinaryenCallIndirect(the_module, expressions[610], operands, 4, "iiIfF");
+ }
+ expressions[612] = BinaryenUnary(the_module, 20, expressions[611]);
+ expressions[613] = BinaryenGetLocal(the_module, 0, 1);
+ expressions[614] = BinaryenDrop(the_module, expressions[613]);
+ expressions[615] = BinaryenConst(the_module, BinaryenLiteralInt32(101));
+ expressions[616] = BinaryenSetLocal(the_module, 0, expressions[615]);
+ expressions[617] = BinaryenConst(the_module, BinaryenLiteralInt32(102));
+ expressions[618] = BinaryenTeeLocal(the_module, 0, expressions[617]);
+ expressions[619] = BinaryenDrop(the_module, expressions[618]);
+ expressions[620] = BinaryenConst(the_module, BinaryenLiteralInt32(1));
+ expressions[621] = BinaryenLoad(the_module, 4, 0, 0, 0, 1, expressions[620]);
+ expressions[622] = BinaryenConst(the_module, BinaryenLiteralInt32(8));
+ expressions[623] = BinaryenLoad(the_module, 2, 1, 2, 1, 2, expressions[622]);
+ expressions[624] = BinaryenConst(the_module, BinaryenLiteralInt32(2));
+ expressions[625] = BinaryenLoad(the_module, 4, 0, 0, 0, 3, expressions[624]);
+ expressions[626] = BinaryenConst(the_module, BinaryenLiteralInt32(9));
+ expressions[627] = BinaryenLoad(the_module, 8, 0, 2, 8, 4, expressions[626]);
+ expressions[628] = BinaryenStore(the_module, 4, 0, 0, expressions[30], expressions[31], 1);
+ expressions[629] = BinaryenStore(the_module, 8, 2, 4, expressions[32], expressions[33], 2);
+ expressions[630] = BinaryenSelect(the_module, expressions[27], expressions[28], expressions[29]);
+ expressions[631] = BinaryenConst(the_module, BinaryenLiteralInt32(1337));
+ expressions[632] = BinaryenReturn(the_module, expressions[631]);
+ expressions[633] = BinaryenNop(the_module);
+ expressions[634] = BinaryenUnreachable(the_module);
+ BinaryenExpressionPrint(expressions[41]);
(f32.neg
(f32.const -33.61199951171875)
)
{
- BinaryenExpressionRef children[] = { expressions[34], expressions[36], expressions[38], expressions[40], expressions[42],
- expressions[44], expressions[46], expressions[48], expressions[50], expressions[52], expressions[54],
- expressions[56], expressions[58], expressions[60], expressions[62], expressions[64], expressions[66],
- expressions[68], expressions[70], expressions[72], expressions[74], expressions[76], expressions[78],
- expressions[80], expressions[82], expressions[84], expressions[86], expressions[88], expressions[90],
- expressions[92], expressions[94], expressions[96], expressions[98], expressions[100], expressions[102],
- expressions[104], expressions[106], expressions[108], expressions[110], expressions[112], expressions[114],
- expressions[116], expressions[118], expressions[120], expressions[123], expressions[126], expressions[129],
- expressions[132], expressions[135], expressions[138], expressions[141], expressions[144], expressions[147],
- expressions[150], expressions[153], expressions[156], expressions[159], expressions[162], expressions[165],
- expressions[168], expressions[171], expressions[174], expressions[177], expressions[180], expressions[183],
- expressions[186], expressions[189], expressions[192], expressions[195], expressions[198], expressions[201],
- expressions[204], expressions[207], expressions[210], expressions[213], expressions[216], expressions[217],
- expressions[218], expressions[219], expressions[221], expressions[223], expressions[224], expressions[226],
- expressions[228], expressions[229], expressions[230], expressions[232], expressions[234], expressions[237],
- expressions[240], expressions[242], expressions[244], expressions[247], expressions[249], expressions[251],
- expressions[253], expressions[255], expressions[256], expressions[257], expressions[258], expressions[260],
- expressions[261], expressions[262] };
- expressions[263] = BinaryenBlock(the_module, "the-value", children, 103, BinaryenTypeAuto());
- }
- expressions[264] = BinaryenDrop(the_module, expressions[263]);
- {
- BinaryenExpressionRef children[] = { expressions[264] };
- expressions[265] = BinaryenBlock(the_module, "the-nothing", children, 1, BinaryenTypeAuto());
- }
- expressions[266] = BinaryenConst(the_module, BinaryenLiteralInt32(42));
- {
- BinaryenExpressionRef children[] = { expressions[265], expressions[266] };
- expressions[267] = BinaryenBlock(the_module, "the-body", children, 2, BinaryenTypeAuto());
+ BinaryenExpressionRef children[] = { expressions[35], expressions[37], expressions[39], expressions[41], expressions[43],
+ expressions[45], expressions[47], expressions[49], expressions[51], expressions[53], expressions[55],
+ expressions[57], expressions[59], expressions[61], expressions[63], expressions[65], expressions[67],
+ expressions[69], expressions[71], expressions[73], expressions[75], expressions[77], expressions[79],
+ expressions[81], expressions[83], expressions[85], expressions[87], expressions[89], expressions[91],
+ expressions[93], expressions[95], expressions[97], expressions[99], expressions[101], expressions[103],
+ expressions[105], expressions[107], expressions[109], expressions[111], expressions[113], expressions[115],
+ expressions[117], expressions[119], expressions[121], expressions[123], expressions[125], expressions[127],
+ expressions[129], expressions[131], expressions[133], expressions[135], expressions[137], expressions[139],
+ expressions[141], expressions[143], expressions[145], expressions[147], expressions[149], expressions[151],
+ expressions[153], expressions[155], expressions[157], expressions[159], expressions[161], expressions[163],
+ expressions[165], expressions[167], expressions[169], expressions[171], expressions[173], expressions[175],
+ expressions[177], expressions[179], expressions[181], expressions[183], expressions[185], expressions[187],
+ expressions[190], expressions[193], expressions[196], expressions[199], expressions[202], expressions[205],
+ expressions[208], expressions[211], expressions[214], expressions[217], expressions[220], expressions[223],
+ expressions[226], expressions[229], expressions[232], expressions[235], expressions[238], expressions[241],
+ expressions[244], expressions[247], expressions[250], expressions[253], expressions[256], expressions[259],
+ expressions[262], expressions[265], expressions[268], expressions[271], expressions[274], expressions[277],
+ expressions[280], expressions[283], expressions[286], expressions[289], expressions[292], expressions[295],
+ expressions[298], expressions[301], expressions[304], expressions[307], expressions[310], expressions[313],
+ expressions[316], expressions[319], expressions[322], expressions[325], expressions[328], expressions[331],
+ expressions[334], expressions[337], expressions[340], expressions[343], expressions[346], expressions[349],
+ expressions[352], expressions[355], expressions[358], expressions[361], expressions[364], expressions[367],
+ expressions[370], expressions[373], expressions[376], expressions[379], expressions[382], expressions[385],
+ expressions[388], expressions[391], expressions[394], expressions[397], expressions[400], expressions[403],
+ expressions[406], expressions[409], expressions[412], expressions[415], expressions[418], expressions[421],
+ expressions[424], expressions[427], expressions[430], expressions[433], expressions[436], expressions[439],
+ expressions[442], expressions[445], expressions[448], expressions[451], expressions[454], expressions[457],
+ expressions[460], expressions[463], expressions[466], expressions[469], expressions[472], expressions[475],
+ expressions[478], expressions[481], expressions[484], expressions[487], expressions[490], expressions[493],
+ expressions[496], expressions[499], expressions[502], expressions[505], expressions[508], expressions[511],
+ expressions[513], expressions[515], expressions[517], expressions[519], expressions[521], expressions[523],
+ expressions[525], expressions[527], expressions[530], expressions[533], expressions[536], expressions[539],
+ expressions[542], expressions[545], expressions[548], expressions[551], expressions[554], expressions[557],
+ expressions[560], expressions[563], expressions[566], expressions[569], expressions[572], expressions[575],
+ expressions[578], expressions[581], expressions[584], expressions[588], expressions[589], expressions[590],
+ expressions[591], expressions[593], expressions[595], expressions[596], expressions[598], expressions[600],
+ expressions[601], expressions[602], expressions[604], expressions[606], expressions[609], expressions[612],
+ expressions[614], expressions[616], expressions[619], expressions[621], expressions[623], expressions[625],
+ expressions[627], expressions[628], expressions[629], expressions[630], expressions[632], expressions[633],
+ expressions[634] };
+ expressions[635] = BinaryenBlock(the_module, "the-value", children, 240, BinaryenTypeAuto());
+ }
+ expressions[636] = BinaryenDrop(the_module, expressions[635]);
+ {
+ BinaryenExpressionRef children[] = { expressions[636] };
+ expressions[637] = BinaryenBlock(the_module, "the-nothing", children, 1, BinaryenTypeAuto());
+ }
+ expressions[638] = BinaryenConst(the_module, BinaryenLiteralInt32(42));
+ {
+ BinaryenExpressionRef children[] = { expressions[637], expressions[638] };
+ expressions[639] = BinaryenBlock(the_module, "the-body", children, 2, BinaryenTypeAuto());
}
{
BinaryenType varTypes[] = { 1 };
- functions[0] = BinaryenAddFunction(the_module, "kitchen()sinker", functionTypes[0], varTypes, 1, expressions[267]);
+ functions[0] = BinaryenAddFunction(the_module, "kitchen()sinker", functionTypes[0], varTypes, 1, expressions[639]);
}
- expressions[268] = BinaryenConst(the_module, BinaryenLiteralInt32(7));
- BinaryenAddGlobal(the_module, "a-global", 1, 0, expressions[268]);
- expressions[269] = BinaryenConst(the_module, BinaryenLiteralFloat32(7.5));
- BinaryenAddGlobal(the_module, "a-mutable-global", 3, 1, expressions[269]);
+ expressions[640] = BinaryenConst(the_module, BinaryenLiteralInt32(7));
+ BinaryenAddGlobal(the_module, "a-global", 1, 0, expressions[640]);
+ expressions[641] = BinaryenConst(the_module, BinaryenLiteralFloat32(7.5));
+ BinaryenAddGlobal(the_module, "a-mutable-global", 3, 1, expressions[641]);
{
BinaryenType paramTypes[] = { 1, 4 };
functionTypes[1] = BinaryenAddFunctionType(the_module, "fiF", 3, paramTypes, 2);
@@ -1443,11 +3256,11 @@ int main() {
const char* funcNames[] = { "kitchen()sinker" };
BinaryenSetFunctionTable(the_module, 1, 1, funcNames, 1);
}
- expressions[270] = BinaryenConst(the_module, BinaryenLiteralInt32(10));
+ expressions[642] = BinaryenConst(the_module, BinaryenLiteralInt32(10));
{
const char segment0[] = { 104, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 100 };
const char* segments[] = { segment0 };
- BinaryenExpressionRef segmentOffsets[] = { expressions[270] };
+ BinaryenExpressionRef segmentOffsets[] = { expressions[642] };
BinaryenIndex segmentSizes[] = { 12 };
BinaryenSetMemory(the_module, 1, 256, "mem", segments, segmentOffsets, segmentSizes, 1, 0);
}
@@ -1455,10 +3268,10 @@ int main() {
BinaryenType paramTypes[] = { 0 };
functionTypes[2] = BinaryenAddFunctionType(the_module, "v", 0, paramTypes, 0);
}
- expressions[271] = BinaryenNop(the_module);
+ expressions[643] = BinaryenNop(the_module);
{
BinaryenType varTypes[] = { 0 };
- functions[1] = BinaryenAddFunction(the_module, "starter", functionTypes[2], varTypes, 0, expressions[271]);
+ functions[1] = BinaryenAddFunction(the_module, "starter", functionTypes[2], varTypes, 0, expressions[643]);
}
BinaryenSetStart(the_module, functions[1]);
{
@@ -1710,6 +3523,171 @@ int main() {
)
)
(drop
+ (i8x16.splat
+ (i32.const -10)
+ )
+ )
+ (drop
+ (i16x8.splat
+ (i32.const -10)
+ )
+ )
+ (drop
+ (i32x4.splat
+ (i32.const -10)
+ )
+ )
+ (drop
+ (i64x2.splat
+ (i64.const -22)
+ )
+ )
+ (drop
+ (f32x4.splat
+ (f32.const -33.61199951171875)
+ )
+ )
+ (drop
+ (f64x2.splat
+ (f64.const -9005.841)
+ )
+ )
+ (drop
+ (v128.not
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.neg
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.any_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.all_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.neg
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.any_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.all_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.neg
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.any_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.all_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.neg
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.any_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.all_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.abs
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.neg
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.sqrt
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.abs
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.neg
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.sqrt
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.trunc_s/f32x4:sat
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.trunc_u/f32x4:sat
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.trunc_s/f64x2:sat
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.trunc_u/f64x2:sat
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.convert_s/i32x4
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.convert_u/i32x4
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.convert_s/i64x2
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.convert_u/i64x2
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
(i32.add
(i32.const -10)
(i32.const -11)
@@ -1901,6 +3879,623 @@ int main() {
(f32.const -62.5)
)
)
+ (drop
+ (i8x16.eq
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.ne
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.lt_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.lt_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.gt_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.gt_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.le_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.le_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.ge_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.ge_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.eq
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.ne
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.lt_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.lt_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.gt_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.gt_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.le_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.le_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.ge_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.ge_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.eq
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.ne
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.lt_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.lt_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.gt_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.gt_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.le_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.le_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.ge_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.ge_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.eq
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.ne
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.lt
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.gt
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.le
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.ge
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.eq
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.ne
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.lt
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.gt
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.le
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.ge
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (v128.and
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (v128.or
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (v128.xor
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.add
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.add_saturate_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.add_saturate_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.sub
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.sub_saturate_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.sub_saturate_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.mul
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.add
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.add_saturate_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.add_saturate_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.sub
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.sub_saturate_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.sub_saturate_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.mul
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.add
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.sub
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.mul
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.add
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.sub
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.add
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.sub
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.mul
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.div
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.min
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.max
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.add
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.sub
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.mul
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.div
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.min
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.max
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.extract_lane_s 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.extract_lane_u 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.extract_lane_s 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.extract_lane_u 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.extract_lane 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.extract_lane 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.extract_lane 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.extract_lane 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.replace_lane 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 42)
+ )
+ )
+ (drop
+ (i16x8.replace_lane 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 42)
+ )
+ )
+ (drop
+ (i32x4.replace_lane 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 42)
+ )
+ )
+ (drop
+ (i64x2.replace_lane 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i64.const 42)
+ )
+ )
+ (drop
+ (f32x4.replace_lane 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (f32.const 42)
+ )
+ )
+ (drop
+ (f64x2.replace_lane 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (f64.const 42)
+ )
+ )
+ (drop
+ (i8x16.shl
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i8x16.shr_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i8x16.shr_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i16x8.shl
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i16x8.shr_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i16x8.shr_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i32x4.shl
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i32x4.shr_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i32x4.shr_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i64x2.shl
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i64x2.shr_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i64x2.shr_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (v8x16.shuffle 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (v128.bitselect
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
(block
)
(if
diff --git a/test/example/c-api-kitchen-sink.txt.txt b/test/example/c-api-kitchen-sink.txt.txt
index 4cf98c329..d19b06609 100644
--- a/test/example/c-api-kitchen-sink.txt.txt
+++ b/test/example/c-api-kitchen-sink.txt.txt
@@ -243,6 +243,171 @@
)
)
(drop
+ (i8x16.splat
+ (i32.const -10)
+ )
+ )
+ (drop
+ (i16x8.splat
+ (i32.const -10)
+ )
+ )
+ (drop
+ (i32x4.splat
+ (i32.const -10)
+ )
+ )
+ (drop
+ (i64x2.splat
+ (i64.const -22)
+ )
+ )
+ (drop
+ (f32x4.splat
+ (f32.const -33.61199951171875)
+ )
+ )
+ (drop
+ (f64x2.splat
+ (f64.const -9005.84)
+ )
+ )
+ (drop
+ (v128.not
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.neg
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.any_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.all_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.neg
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.any_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.all_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.neg
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.any_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.all_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.neg
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.any_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.all_true
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.abs
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.neg
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.sqrt
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.abs
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.neg
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.sqrt
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.trunc_s/f32x4:sat
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.trunc_u/f32x4:sat
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.trunc_s/f64x2:sat
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.trunc_u/f64x2:sat
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.convert_s/i32x4
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.convert_u/i32x4
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.convert_s/i64x2
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.convert_u/i64x2
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
(i32.add
(i32.const -10)
(i32.const -11)
@@ -434,6 +599,623 @@
(f32.const -62.5)
)
)
+ (drop
+ (i8x16.eq
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.ne
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.lt_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.lt_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.gt_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.gt_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.le_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.le_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.ge_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.ge_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.eq
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.ne
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.lt_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.lt_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.gt_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.gt_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.le_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.le_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.ge_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.ge_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.eq
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.ne
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.lt_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.lt_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.gt_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.gt_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.le_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.le_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.ge_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.ge_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.eq
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.ne
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.lt
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.gt
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.le
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.ge
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.eq
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.ne
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.lt
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.gt
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.le
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.ge
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (v128.and
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (v128.or
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (v128.xor
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.add
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.add_saturate_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.add_saturate_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.sub
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.sub_saturate_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.sub_saturate_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.mul
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.add
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.add_saturate_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.add_saturate_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.sub
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.sub_saturate_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.sub_saturate_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.mul
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.add
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.sub
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.mul
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.add
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.sub
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.add
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.sub
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.mul
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.div
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.min
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.max
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.add
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.sub
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.mul
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.div
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.min
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.max
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.extract_lane_s 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.extract_lane_u 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.extract_lane_s 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i16x8.extract_lane_u 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i32x4.extract_lane 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i64x2.extract_lane 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f32x4.extract_lane 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (f64x2.extract_lane 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (i8x16.replace_lane 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 42)
+ )
+ )
+ (drop
+ (i16x8.replace_lane 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 42)
+ )
+ )
+ (drop
+ (i32x4.replace_lane 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 42)
+ )
+ )
+ (drop
+ (i64x2.replace_lane 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i64.const 42)
+ )
+ )
+ (drop
+ (f32x4.replace_lane 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (f32.const 42)
+ )
+ )
+ (drop
+ (f64x2.replace_lane 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (f64.const 42)
+ )
+ )
+ (drop
+ (i8x16.shl
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i8x16.shr_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i8x16.shr_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i16x8.shl
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i16x8.shr_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i16x8.shr_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i32x4.shl
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i32x4.shr_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i32x4.shr_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i64x2.shl
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i64x2.shr_s
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (i64x2.shr_u
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (i32.const 1)
+ )
+ )
+ (drop
+ (v8x16.shuffle 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
+ (drop
+ (v128.bitselect
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ (v128.const i32 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10)
+ )
+ )
(block
)
(if
diff --git a/test/passes/safe-heap.txt b/test/passes/safe-heap.txt
index f2513d502..c3a3fcdce 100644
--- a/test/passes/safe-heap.txt
+++ b/test/passes/safe-heap.txt
@@ -90,6 +90,12 @@
(i32.const 0)
)
)
+ (drop
+ (call $SAFE_HEAP_LOAD_v128_16_U_16
+ (i32.const 14)
+ (i32.const 0)
+ )
+ )
)
(func $stores (; 3 ;) (type $0)
(call $SAFE_HEAP_STORE_i32_4_4
@@ -162,6 +168,11 @@
(i32.const 0)
(f64.const 1300)
)
+ (call $SAFE_HEAP_STORE_v128_16_16
+ (i32.const 14)
+ (i32.const 0)
+ (v128.const i32 0x1 0x0 0x0 0x0 0x2 0x0 0x0 0x0 0x3 0x0 0x0 0x0 0x4 0x0 0x0 0x0)
+ )
)
(func $SAFE_HEAP_LOAD_i32_1_A (; 4 ;) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
@@ -1769,7 +1780,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f32_1_1 (; 50 ;) (param $0 i32) (param $1 i32) (result f32)
+ (func $SAFE_HEAP_LOAD_f32_4_1 (; 50 ;) (param $0 i32) (param $1 i32) (result f32)
(local $2 i32)
(set_local $2
(i32.add
@@ -1786,7 +1797,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 1)
+ (i32.const 4)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -1795,11 +1806,11 @@
)
(call $segfault)
)
- (f32.load8_u
+ (f32.load align=1
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f32_2_1 (; 51 ;) (param $0 i32) (param $1 i32) (result f32)
+ (func $SAFE_HEAP_LOAD_f32_4_2 (; 51 ;) (param $0 i32) (param $1 i32) (result f32)
(local $2 i32)
(set_local $2
(i32.add
@@ -1816,7 +1827,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 2)
+ (i32.const 4)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -1825,11 +1836,18 @@
)
(call $segfault)
)
- (f32.load16_u align=1
+ (if
+ (i32.and
+ (get_local $2)
+ (i32.const 1)
+ )
+ (call $alignfault)
+ )
+ (f32.load align=2
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f32_2_2 (; 52 ;) (param $0 i32) (param $1 i32) (result f32)
+ (func $SAFE_HEAP_LOAD_f32_4_4 (; 52 ;) (param $0 i32) (param $1 i32) (result f32)
(local $2 i32)
(set_local $2
(i32.add
@@ -1846,7 +1864,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 2)
+ (i32.const 4)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -1858,15 +1876,15 @@
(if
(i32.and
(get_local $2)
- (i32.const 1)
+ (i32.const 3)
)
(call $alignfault)
)
- (f32.load16_u
+ (f32.load
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f32_4_1 (; 53 ;) (param $0 i32) (param $1 i32) (result f32)
+ (func $SAFE_HEAP_LOAD_f64_8_1 (; 53 ;) (param $0 i32) (param $1 i32) (result f64)
(local $2 i32)
(set_local $2
(i32.add
@@ -1883,7 +1901,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 4)
+ (i32.const 8)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -1892,11 +1910,11 @@
)
(call $segfault)
)
- (f32.load align=1
+ (f64.load align=1
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f32_4_2 (; 54 ;) (param $0 i32) (param $1 i32) (result f32)
+ (func $SAFE_HEAP_LOAD_f64_8_2 (; 54 ;) (param $0 i32) (param $1 i32) (result f64)
(local $2 i32)
(set_local $2
(i32.add
@@ -1913,7 +1931,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 4)
+ (i32.const 8)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -1929,11 +1947,11 @@
)
(call $alignfault)
)
- (f32.load align=2
+ (f64.load align=2
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f32_4_4 (; 55 ;) (param $0 i32) (param $1 i32) (result f32)
+ (func $SAFE_HEAP_LOAD_f64_8_4 (; 55 ;) (param $0 i32) (param $1 i32) (result f64)
(local $2 i32)
(set_local $2
(i32.add
@@ -1950,7 +1968,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 4)
+ (i32.const 8)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -1966,11 +1984,11 @@
)
(call $alignfault)
)
- (f32.load
+ (f64.load align=4
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f64_1_1 (; 56 ;) (param $0 i32) (param $1 i32) (result f64)
+ (func $SAFE_HEAP_LOAD_f64_8_8 (; 56 ;) (param $0 i32) (param $1 i32) (result f64)
(local $2 i32)
(set_local $2
(i32.add
@@ -1987,7 +2005,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 1)
+ (i32.const 8)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -1996,11 +2014,18 @@
)
(call $segfault)
)
- (f64.load8_u
+ (if
+ (i32.and
+ (get_local $2)
+ (i32.const 7)
+ )
+ (call $alignfault)
+ )
+ (f64.load
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f64_2_1 (; 57 ;) (param $0 i32) (param $1 i32) (result f64)
+ (func $SAFE_HEAP_LOAD_v128_16_1 (; 57 ;) (param $0 i32) (param $1 i32) (result v128)
(local $2 i32)
(set_local $2
(i32.add
@@ -2017,7 +2042,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 2)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -2026,11 +2051,11 @@
)
(call $segfault)
)
- (f64.load16_u align=1
+ (v128.load align=1
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f64_2_2 (; 58 ;) (param $0 i32) (param $1 i32) (result f64)
+ (func $SAFE_HEAP_LOAD_v128_16_2 (; 58 ;) (param $0 i32) (param $1 i32) (result v128)
(local $2 i32)
(set_local $2
(i32.add
@@ -2047,7 +2072,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 2)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -2063,11 +2088,11 @@
)
(call $alignfault)
)
- (f64.load16_u
+ (v128.load align=2
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f64_4_1 (; 59 ;) (param $0 i32) (param $1 i32) (result f64)
+ (func $SAFE_HEAP_LOAD_v128_16_4 (; 59 ;) (param $0 i32) (param $1 i32) (result v128)
(local $2 i32)
(set_local $2
(i32.add
@@ -2084,7 +2109,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 4)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -2093,11 +2118,18 @@
)
(call $segfault)
)
- (f64.load align=1
+ (if
+ (i32.and
+ (get_local $2)
+ (i32.const 3)
+ )
+ (call $alignfault)
+ )
+ (v128.load align=4
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f64_4_2 (; 60 ;) (param $0 i32) (param $1 i32) (result f64)
+ (func $SAFE_HEAP_LOAD_v128_16_8 (; 60 ;) (param $0 i32) (param $1 i32) (result v128)
(local $2 i32)
(set_local $2
(i32.add
@@ -2114,7 +2146,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 4)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -2126,15 +2158,15 @@
(if
(i32.and
(get_local $2)
- (i32.const 1)
+ (i32.const 7)
)
(call $alignfault)
)
- (f64.load align=2
+ (v128.load align=8
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f64_4_4 (; 61 ;) (param $0 i32) (param $1 i32) (result f64)
+ (func $SAFE_HEAP_LOAD_v128_16_16 (; 61 ;) (param $0 i32) (param $1 i32) (result v128)
(local $2 i32)
(set_local $2
(i32.add
@@ -2151,7 +2183,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 4)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -2163,15 +2195,15 @@
(if
(i32.and
(get_local $2)
- (i32.const 3)
+ (i32.const 15)
)
(call $alignfault)
)
- (f64.load
+ (v128.load
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f64_8_1 (; 62 ;) (param $0 i32) (param $1 i32) (result f64)
+ (func $SAFE_HEAP_LOAD_v128_16_U_1 (; 62 ;) (param $0 i32) (param $1 i32) (result v128)
(local $2 i32)
(set_local $2
(i32.add
@@ -2188,7 +2220,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 8)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -2197,11 +2229,11 @@
)
(call $segfault)
)
- (f64.load align=1
+ (v128.load align=1
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f64_8_2 (; 63 ;) (param $0 i32) (param $1 i32) (result f64)
+ (func $SAFE_HEAP_LOAD_v128_16_U_2 (; 63 ;) (param $0 i32) (param $1 i32) (result v128)
(local $2 i32)
(set_local $2
(i32.add
@@ -2218,7 +2250,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 8)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -2234,11 +2266,11 @@
)
(call $alignfault)
)
- (f64.load align=2
+ (v128.load align=2
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f64_8_4 (; 64 ;) (param $0 i32) (param $1 i32) (result f64)
+ (func $SAFE_HEAP_LOAD_v128_16_U_4 (; 64 ;) (param $0 i32) (param $1 i32) (result v128)
(local $2 i32)
(set_local $2
(i32.add
@@ -2255,7 +2287,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 8)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -2271,11 +2303,11 @@
)
(call $alignfault)
)
- (f64.load align=4
+ (v128.load align=4
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f64_8_8 (; 65 ;) (param $0 i32) (param $1 i32) (result f64)
+ (func $SAFE_HEAP_LOAD_v128_16_U_8 (; 65 ;) (param $0 i32) (param $1 i32) (result v128)
(local $2 i32)
(set_local $2
(i32.add
@@ -2292,7 +2324,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 8)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -2308,11 +2340,48 @@
)
(call $alignfault)
)
- (f64.load
+ (v128.load align=8
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i32_1_A (; 66 ;) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $SAFE_HEAP_LOAD_v128_16_U_16 (; 66 ;) (param $0 i32) (param $1 i32) (result v128)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 16)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $2)
+ (i32.const 15)
+ )
+ (call $alignfault)
+ )
+ (v128.load
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_STORE_i32_1_A (; 67 ;) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(set_local $3
(i32.add
@@ -2343,7 +2412,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i32_1_1 (; 67 ;) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $SAFE_HEAP_STORE_i32_1_1 (; 68 ;) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(set_local $3
(i32.add
@@ -2374,7 +2443,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i32_2_1 (; 68 ;) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $SAFE_HEAP_STORE_i32_2_1 (; 69 ;) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(set_local $3
(i32.add
@@ -2405,7 +2474,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i32_2_A (; 69 ;) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $SAFE_HEAP_STORE_i32_2_A (; 70 ;) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(set_local $3
(i32.add
@@ -2443,7 +2512,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i32_2_2 (; 70 ;) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $SAFE_HEAP_STORE_i32_2_2 (; 71 ;) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(set_local $3
(i32.add
@@ -2481,7 +2550,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i32_4_1 (; 71 ;) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $SAFE_HEAP_STORE_i32_4_1 (; 72 ;) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(set_local $3
(i32.add
@@ -2512,7 +2581,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i32_4_2 (; 72 ;) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $SAFE_HEAP_STORE_i32_4_2 (; 73 ;) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(set_local $3
(i32.add
@@ -2550,7 +2619,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i32_4_A (; 73 ;) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $SAFE_HEAP_STORE_i32_4_A (; 74 ;) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(set_local $3
(i32.add
@@ -2588,7 +2657,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i32_4_4 (; 74 ;) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $SAFE_HEAP_STORE_i32_4_4 (; 75 ;) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(set_local $3
(i32.add
@@ -2626,7 +2695,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_1_A (; 75 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_1_A (; 76 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -2657,7 +2726,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_1_1 (; 76 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_1_1 (; 77 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -2688,7 +2757,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_2_1 (; 77 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_2_1 (; 78 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -2719,7 +2788,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_2_A (; 78 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_2_A (; 79 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -2757,7 +2826,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_2_2 (; 79 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_2_2 (; 80 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -2795,7 +2864,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_4_1 (; 80 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_4_1 (; 81 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -2826,7 +2895,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_4_2 (; 81 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_4_2 (; 82 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -2864,7 +2933,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_4_A (; 82 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_4_A (; 83 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -2902,7 +2971,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_4_4 (; 83 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_4_4 (; 84 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -2940,7 +3009,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_8_1 (; 84 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_8_1 (; 85 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -2971,7 +3040,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_8_2 (; 85 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_8_2 (; 86 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -3009,7 +3078,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_8_4 (; 86 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_8_4 (; 87 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -3047,7 +3116,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_8_A (; 87 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_8_A (; 88 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -3085,7 +3154,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_8_8 (; 88 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_8_8 (; 89 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -3123,7 +3192,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_f32_1_1 (; 89 ;) (param $0 i32) (param $1 i32) (param $2 f32)
+ (func $SAFE_HEAP_STORE_f32_4_1 (; 90 ;) (param $0 i32) (param $1 i32) (param $2 f32)
(local $3 i32)
(set_local $3
(i32.add
@@ -3140,7 +3209,7 @@
(i32.gt_u
(i32.add
(get_local $3)
- (i32.const 1)
+ (i32.const 4)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -3149,12 +3218,12 @@
)
(call $segfault)
)
- (f32.store8
+ (f32.store align=1
(get_local $3)
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_f32_2_1 (; 90 ;) (param $0 i32) (param $1 i32) (param $2 f32)
+ (func $SAFE_HEAP_STORE_f32_4_2 (; 91 ;) (param $0 i32) (param $1 i32) (param $2 f32)
(local $3 i32)
(set_local $3
(i32.add
@@ -3171,7 +3240,7 @@
(i32.gt_u
(i32.add
(get_local $3)
- (i32.const 2)
+ (i32.const 4)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -3180,12 +3249,19 @@
)
(call $segfault)
)
- (f32.store16 align=1
+ (if
+ (i32.and
+ (get_local $3)
+ (i32.const 1)
+ )
+ (call $alignfault)
+ )
+ (f32.store align=2
(get_local $3)
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_f32_2_2 (; 91 ;) (param $0 i32) (param $1 i32) (param $2 f32)
+ (func $SAFE_HEAP_STORE_f32_4_4 (; 92 ;) (param $0 i32) (param $1 i32) (param $2 f32)
(local $3 i32)
(set_local $3
(i32.add
@@ -3202,7 +3278,7 @@
(i32.gt_u
(i32.add
(get_local $3)
- (i32.const 2)
+ (i32.const 4)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -3214,16 +3290,16 @@
(if
(i32.and
(get_local $3)
- (i32.const 1)
+ (i32.const 3)
)
(call $alignfault)
)
- (f32.store16
+ (f32.store
(get_local $3)
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_f32_4_1 (; 92 ;) (param $0 i32) (param $1 i32) (param $2 f32)
+ (func $SAFE_HEAP_STORE_f64_8_1 (; 93 ;) (param $0 i32) (param $1 i32) (param $2 f64)
(local $3 i32)
(set_local $3
(i32.add
@@ -3240,7 +3316,7 @@
(i32.gt_u
(i32.add
(get_local $3)
- (i32.const 4)
+ (i32.const 8)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -3249,12 +3325,12 @@
)
(call $segfault)
)
- (f32.store align=1
+ (f64.store align=1
(get_local $3)
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_f32_4_2 (; 93 ;) (param $0 i32) (param $1 i32) (param $2 f32)
+ (func $SAFE_HEAP_STORE_f64_8_2 (; 94 ;) (param $0 i32) (param $1 i32) (param $2 f64)
(local $3 i32)
(set_local $3
(i32.add
@@ -3271,7 +3347,7 @@
(i32.gt_u
(i32.add
(get_local $3)
- (i32.const 4)
+ (i32.const 8)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -3287,12 +3363,12 @@
)
(call $alignfault)
)
- (f32.store align=2
+ (f64.store align=2
(get_local $3)
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_f32_4_4 (; 94 ;) (param $0 i32) (param $1 i32) (param $2 f32)
+ (func $SAFE_HEAP_STORE_f64_8_4 (; 95 ;) (param $0 i32) (param $1 i32) (param $2 f64)
(local $3 i32)
(set_local $3
(i32.add
@@ -3309,7 +3385,7 @@
(i32.gt_u
(i32.add
(get_local $3)
- (i32.const 4)
+ (i32.const 8)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -3325,74 +3401,12 @@
)
(call $alignfault)
)
- (f32.store
- (get_local $3)
- (get_local $2)
- )
- )
- (func $SAFE_HEAP_STORE_f64_1_1 (; 95 ;) (param $0 i32) (param $1 i32) (param $2 f64)
- (local $3 i32)
- (set_local $3
- (i32.add
- (get_local $0)
- (get_local $1)
- )
- )
- (if
- (i32.or
- (i32.eq
- (get_local $3)
- (i32.const 0)
- )
- (i32.gt_u
- (i32.add
- (get_local $3)
- (i32.const 1)
- )
- (i32.load
- (get_global $DYNAMICTOP_PTR)
- )
- )
- )
- (call $segfault)
- )
- (f64.store8
- (get_local $3)
- (get_local $2)
- )
- )
- (func $SAFE_HEAP_STORE_f64_2_1 (; 96 ;) (param $0 i32) (param $1 i32) (param $2 f64)
- (local $3 i32)
- (set_local $3
- (i32.add
- (get_local $0)
- (get_local $1)
- )
- )
- (if
- (i32.or
- (i32.eq
- (get_local $3)
- (i32.const 0)
- )
- (i32.gt_u
- (i32.add
- (get_local $3)
- (i32.const 2)
- )
- (i32.load
- (get_global $DYNAMICTOP_PTR)
- )
- )
- )
- (call $segfault)
- )
- (f64.store16 align=1
+ (f64.store align=4
(get_local $3)
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_f64_2_2 (; 97 ;) (param $0 i32) (param $1 i32) (param $2 f64)
+ (func $SAFE_HEAP_STORE_f64_8_8 (; 96 ;) (param $0 i32) (param $1 i32) (param $2 f64)
(local $3 i32)
(set_local $3
(i32.add
@@ -3409,7 +3423,7 @@
(i32.gt_u
(i32.add
(get_local $3)
- (i32.const 2)
+ (i32.const 8)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -3421,16 +3435,16 @@
(if
(i32.and
(get_local $3)
- (i32.const 1)
+ (i32.const 7)
)
(call $alignfault)
)
- (f64.store16
+ (f64.store
(get_local $3)
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_f64_4_1 (; 98 ;) (param $0 i32) (param $1 i32) (param $2 f64)
+ (func $SAFE_HEAP_STORE_v128_16_1 (; 97 ;) (param $0 i32) (param $1 i32) (param $2 v128)
(local $3 i32)
(set_local $3
(i32.add
@@ -3447,7 +3461,7 @@
(i32.gt_u
(i32.add
(get_local $3)
- (i32.const 4)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -3456,12 +3470,12 @@
)
(call $segfault)
)
- (f64.store align=1
+ (v128.store align=1
(get_local $3)
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_f64_4_2 (; 99 ;) (param $0 i32) (param $1 i32) (param $2 f64)
+ (func $SAFE_HEAP_STORE_v128_16_2 (; 98 ;) (param $0 i32) (param $1 i32) (param $2 v128)
(local $3 i32)
(set_local $3
(i32.add
@@ -3478,7 +3492,7 @@
(i32.gt_u
(i32.add
(get_local $3)
- (i32.const 4)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -3494,12 +3508,12 @@
)
(call $alignfault)
)
- (f64.store align=2
+ (v128.store align=2
(get_local $3)
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_f64_4_4 (; 100 ;) (param $0 i32) (param $1 i32) (param $2 f64)
+ (func $SAFE_HEAP_STORE_v128_16_4 (; 99 ;) (param $0 i32) (param $1 i32) (param $2 v128)
(local $3 i32)
(set_local $3
(i32.add
@@ -3516,7 +3530,7 @@
(i32.gt_u
(i32.add
(get_local $3)
- (i32.const 4)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -3532,12 +3546,12 @@
)
(call $alignfault)
)
- (f64.store
+ (v128.store align=4
(get_local $3)
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_f64_8_1 (; 101 ;) (param $0 i32) (param $1 i32) (param $2 f64)
+ (func $SAFE_HEAP_STORE_v128_16_8 (; 100 ;) (param $0 i32) (param $1 i32) (param $2 v128)
(local $3 i32)
(set_local $3
(i32.add
@@ -3554,38 +3568,7 @@
(i32.gt_u
(i32.add
(get_local $3)
- (i32.const 8)
- )
- (i32.load
- (get_global $DYNAMICTOP_PTR)
- )
- )
- )
- (call $segfault)
- )
- (f64.store align=1
- (get_local $3)
- (get_local $2)
- )
- )
- (func $SAFE_HEAP_STORE_f64_8_2 (; 102 ;) (param $0 i32) (param $1 i32) (param $2 f64)
- (local $3 i32)
- (set_local $3
- (i32.add
- (get_local $0)
- (get_local $1)
- )
- )
- (if
- (i32.or
- (i32.eq
- (get_local $3)
- (i32.const 0)
- )
- (i32.gt_u
- (i32.add
- (get_local $3)
- (i32.const 8)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -3597,54 +3580,16 @@
(if
(i32.and
(get_local $3)
- (i32.const 1)
- )
- (call $alignfault)
- )
- (f64.store align=2
- (get_local $3)
- (get_local $2)
- )
- )
- (func $SAFE_HEAP_STORE_f64_8_4 (; 103 ;) (param $0 i32) (param $1 i32) (param $2 f64)
- (local $3 i32)
- (set_local $3
- (i32.add
- (get_local $0)
- (get_local $1)
- )
- )
- (if
- (i32.or
- (i32.eq
- (get_local $3)
- (i32.const 0)
- )
- (i32.gt_u
- (i32.add
- (get_local $3)
- (i32.const 8)
- )
- (i32.load
- (get_global $DYNAMICTOP_PTR)
- )
- )
- )
- (call $segfault)
- )
- (if
- (i32.and
- (get_local $3)
- (i32.const 3)
+ (i32.const 7)
)
(call $alignfault)
)
- (f64.store align=4
+ (v128.store align=8
(get_local $3)
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_f64_8_8 (; 104 ;) (param $0 i32) (param $1 i32) (param $2 f64)
+ (func $SAFE_HEAP_STORE_v128_16_16 (; 101 ;) (param $0 i32) (param $1 i32) (param $2 v128)
(local $3 i32)
(set_local $3
(i32.add
@@ -3661,7 +3606,7 @@
(i32.gt_u
(i32.add
(get_local $3)
- (i32.const 8)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -3673,11 +3618,11 @@
(if
(i32.and
(get_local $3)
- (i32.const 7)
+ (i32.const 15)
)
(call $alignfault)
)
- (f64.store
+ (v128.store
(get_local $3)
(get_local $2)
)
@@ -4784,7 +4729,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f32_1_1 (; 35 ;) (param $0 i32) (param $1 i32) (result f32)
+ (func $SAFE_HEAP_LOAD_f32_4_1 (; 35 ;) (param $0 i32) (param $1 i32) (result f32)
(local $2 i32)
(set_local $2
(i32.add
@@ -4801,7 +4746,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 1)
+ (i32.const 4)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -4810,11 +4755,11 @@
)
(call $segfault)
)
- (f32.load8_u
+ (f32.load align=1
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f32_2_1 (; 36 ;) (param $0 i32) (param $1 i32) (result f32)
+ (func $SAFE_HEAP_LOAD_f32_4_2 (; 36 ;) (param $0 i32) (param $1 i32) (result f32)
(local $2 i32)
(set_local $2
(i32.add
@@ -4831,7 +4776,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 2)
+ (i32.const 4)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -4840,11 +4785,18 @@
)
(call $segfault)
)
- (f32.load16_u align=1
+ (if
+ (i32.and
+ (get_local $2)
+ (i32.const 1)
+ )
+ (call $alignfault)
+ )
+ (f32.load align=2
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f32_2_2 (; 37 ;) (param $0 i32) (param $1 i32) (result f32)
+ (func $SAFE_HEAP_LOAD_f32_4_4 (; 37 ;) (param $0 i32) (param $1 i32) (result f32)
(local $2 i32)
(set_local $2
(i32.add
@@ -4861,7 +4813,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 2)
+ (i32.const 4)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -4873,15 +4825,15 @@
(if
(i32.and
(get_local $2)
- (i32.const 1)
+ (i32.const 3)
)
(call $alignfault)
)
- (f32.load16_u
+ (f32.load
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f32_4_1 (; 38 ;) (param $0 i32) (param $1 i32) (result f32)
+ (func $SAFE_HEAP_LOAD_f64_8_1 (; 38 ;) (param $0 i32) (param $1 i32) (result f64)
(local $2 i32)
(set_local $2
(i32.add
@@ -4898,7 +4850,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 4)
+ (i32.const 8)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -4907,11 +4859,11 @@
)
(call $segfault)
)
- (f32.load align=1
+ (f64.load align=1
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f32_4_2 (; 39 ;) (param $0 i32) (param $1 i32) (result f32)
+ (func $SAFE_HEAP_LOAD_f64_8_2 (; 39 ;) (param $0 i32) (param $1 i32) (result f64)
(local $2 i32)
(set_local $2
(i32.add
@@ -4928,7 +4880,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 4)
+ (i32.const 8)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -4944,11 +4896,11 @@
)
(call $alignfault)
)
- (f32.load align=2
+ (f64.load align=2
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f32_4_4 (; 40 ;) (param $0 i32) (param $1 i32) (result f32)
+ (func $SAFE_HEAP_LOAD_f64_8_4 (; 40 ;) (param $0 i32) (param $1 i32) (result f64)
(local $2 i32)
(set_local $2
(i32.add
@@ -4965,7 +4917,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 4)
+ (i32.const 8)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -4981,11 +4933,11 @@
)
(call $alignfault)
)
- (f32.load
+ (f64.load align=4
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f64_1_1 (; 41 ;) (param $0 i32) (param $1 i32) (result f64)
+ (func $SAFE_HEAP_LOAD_f64_8_8 (; 41 ;) (param $0 i32) (param $1 i32) (result f64)
(local $2 i32)
(set_local $2
(i32.add
@@ -5002,7 +4954,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 1)
+ (i32.const 8)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -5011,11 +4963,18 @@
)
(call $segfault)
)
- (f64.load8_u
+ (if
+ (i32.and
+ (get_local $2)
+ (i32.const 7)
+ )
+ (call $alignfault)
+ )
+ (f64.load
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f64_2_1 (; 42 ;) (param $0 i32) (param $1 i32) (result f64)
+ (func $SAFE_HEAP_LOAD_v128_16_1 (; 42 ;) (param $0 i32) (param $1 i32) (result v128)
(local $2 i32)
(set_local $2
(i32.add
@@ -5032,7 +4991,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 2)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -5041,11 +5000,11 @@
)
(call $segfault)
)
- (f64.load16_u align=1
+ (v128.load align=1
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f64_2_2 (; 43 ;) (param $0 i32) (param $1 i32) (result f64)
+ (func $SAFE_HEAP_LOAD_v128_16_2 (; 43 ;) (param $0 i32) (param $1 i32) (result v128)
(local $2 i32)
(set_local $2
(i32.add
@@ -5062,7 +5021,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 2)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -5078,11 +5037,11 @@
)
(call $alignfault)
)
- (f64.load16_u
+ (v128.load align=2
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f64_4_1 (; 44 ;) (param $0 i32) (param $1 i32) (result f64)
+ (func $SAFE_HEAP_LOAD_v128_16_4 (; 44 ;) (param $0 i32) (param $1 i32) (result v128)
(local $2 i32)
(set_local $2
(i32.add
@@ -5099,7 +5058,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 4)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -5108,11 +5067,18 @@
)
(call $segfault)
)
- (f64.load align=1
+ (if
+ (i32.and
+ (get_local $2)
+ (i32.const 3)
+ )
+ (call $alignfault)
+ )
+ (v128.load align=4
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f64_4_2 (; 45 ;) (param $0 i32) (param $1 i32) (result f64)
+ (func $SAFE_HEAP_LOAD_v128_16_8 (; 45 ;) (param $0 i32) (param $1 i32) (result v128)
(local $2 i32)
(set_local $2
(i32.add
@@ -5129,7 +5095,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 4)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -5141,15 +5107,15 @@
(if
(i32.and
(get_local $2)
- (i32.const 1)
+ (i32.const 7)
)
(call $alignfault)
)
- (f64.load align=2
+ (v128.load align=8
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f64_4_4 (; 46 ;) (param $0 i32) (param $1 i32) (result f64)
+ (func $SAFE_HEAP_LOAD_v128_16_16 (; 46 ;) (param $0 i32) (param $1 i32) (result v128)
(local $2 i32)
(set_local $2
(i32.add
@@ -5166,7 +5132,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 4)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -5178,15 +5144,15 @@
(if
(i32.and
(get_local $2)
- (i32.const 3)
+ (i32.const 15)
)
(call $alignfault)
)
- (f64.load
+ (v128.load
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f64_8_1 (; 47 ;) (param $0 i32) (param $1 i32) (result f64)
+ (func $SAFE_HEAP_LOAD_v128_16_U_1 (; 47 ;) (param $0 i32) (param $1 i32) (result v128)
(local $2 i32)
(set_local $2
(i32.add
@@ -5203,7 +5169,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 8)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -5212,11 +5178,11 @@
)
(call $segfault)
)
- (f64.load align=1
+ (v128.load align=1
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f64_8_2 (; 48 ;) (param $0 i32) (param $1 i32) (result f64)
+ (func $SAFE_HEAP_LOAD_v128_16_U_2 (; 48 ;) (param $0 i32) (param $1 i32) (result v128)
(local $2 i32)
(set_local $2
(i32.add
@@ -5233,7 +5199,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 8)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -5249,11 +5215,11 @@
)
(call $alignfault)
)
- (f64.load align=2
+ (v128.load align=2
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f64_8_4 (; 49 ;) (param $0 i32) (param $1 i32) (result f64)
+ (func $SAFE_HEAP_LOAD_v128_16_U_4 (; 49 ;) (param $0 i32) (param $1 i32) (result v128)
(local $2 i32)
(set_local $2
(i32.add
@@ -5270,7 +5236,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 8)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -5286,11 +5252,11 @@
)
(call $alignfault)
)
- (f64.load align=4
+ (v128.load align=4
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f64_8_8 (; 50 ;) (param $0 i32) (param $1 i32) (result f64)
+ (func $SAFE_HEAP_LOAD_v128_16_U_8 (; 50 ;) (param $0 i32) (param $1 i32) (result v128)
(local $2 i32)
(set_local $2
(i32.add
@@ -5307,7 +5273,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 8)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -5323,11 +5289,48 @@
)
(call $alignfault)
)
- (f64.load
+ (v128.load align=8
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_v128_16_U_16 (; 51 ;) (param $0 i32) (param $1 i32) (result v128)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 16)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $2)
+ (i32.const 15)
+ )
+ (call $alignfault)
+ )
+ (v128.load
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i32_1_1 (; 51 ;) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $SAFE_HEAP_STORE_i32_1_1 (; 52 ;) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(set_local $3
(i32.add
@@ -5358,7 +5361,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i32_2_1 (; 52 ;) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $SAFE_HEAP_STORE_i32_2_1 (; 53 ;) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(set_local $3
(i32.add
@@ -5389,7 +5392,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i32_2_2 (; 53 ;) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $SAFE_HEAP_STORE_i32_2_2 (; 54 ;) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(set_local $3
(i32.add
@@ -5427,7 +5430,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i32_4_1 (; 54 ;) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $SAFE_HEAP_STORE_i32_4_1 (; 55 ;) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(set_local $3
(i32.add
@@ -5458,7 +5461,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i32_4_2 (; 55 ;) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $SAFE_HEAP_STORE_i32_4_2 (; 56 ;) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(set_local $3
(i32.add
@@ -5496,7 +5499,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i32_4_4 (; 56 ;) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $SAFE_HEAP_STORE_i32_4_4 (; 57 ;) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(set_local $3
(i32.add
@@ -5534,7 +5537,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_1_1 (; 57 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_1_1 (; 58 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -5565,7 +5568,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_2_1 (; 58 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_2_1 (; 59 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -5596,7 +5599,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_2_2 (; 59 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_2_2 (; 60 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -5634,7 +5637,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_4_1 (; 60 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_4_1 (; 61 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -5665,7 +5668,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_4_2 (; 61 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_4_2 (; 62 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -5703,7 +5706,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_4_4 (; 62 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_4_4 (; 63 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -5741,7 +5744,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_8_1 (; 63 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_8_1 (; 64 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -5772,7 +5775,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_8_2 (; 64 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_8_2 (; 65 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -5810,7 +5813,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_8_4 (; 65 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_8_4 (; 66 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -5848,7 +5851,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_8_8 (; 66 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_8_8 (; 67 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -5886,7 +5889,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_f32_1_1 (; 67 ;) (param $0 i32) (param $1 i32) (param $2 f32)
+ (func $SAFE_HEAP_STORE_f32_4_1 (; 68 ;) (param $0 i32) (param $1 i32) (param $2 f32)
(local $3 i32)
(set_local $3
(i32.add
@@ -5903,7 +5906,7 @@
(i32.gt_u
(i32.add
(get_local $3)
- (i32.const 1)
+ (i32.const 4)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -5912,12 +5915,12 @@
)
(call $segfault)
)
- (f32.store8
+ (f32.store align=1
(get_local $3)
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_f32_2_1 (; 68 ;) (param $0 i32) (param $1 i32) (param $2 f32)
+ (func $SAFE_HEAP_STORE_f32_4_2 (; 69 ;) (param $0 i32) (param $1 i32) (param $2 f32)
(local $3 i32)
(set_local $3
(i32.add
@@ -5934,7 +5937,7 @@
(i32.gt_u
(i32.add
(get_local $3)
- (i32.const 2)
+ (i32.const 4)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -5943,12 +5946,19 @@
)
(call $segfault)
)
- (f32.store16 align=1
+ (if
+ (i32.and
+ (get_local $3)
+ (i32.const 1)
+ )
+ (call $alignfault)
+ )
+ (f32.store align=2
(get_local $3)
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_f32_2_2 (; 69 ;) (param $0 i32) (param $1 i32) (param $2 f32)
+ (func $SAFE_HEAP_STORE_f32_4_4 (; 70 ;) (param $0 i32) (param $1 i32) (param $2 f32)
(local $3 i32)
(set_local $3
(i32.add
@@ -5965,7 +5975,7 @@
(i32.gt_u
(i32.add
(get_local $3)
- (i32.const 2)
+ (i32.const 4)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -5977,16 +5987,16 @@
(if
(i32.and
(get_local $3)
- (i32.const 1)
+ (i32.const 3)
)
(call $alignfault)
)
- (f32.store16
+ (f32.store
(get_local $3)
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_f32_4_1 (; 70 ;) (param $0 i32) (param $1 i32) (param $2 f32)
+ (func $SAFE_HEAP_STORE_f64_8_1 (; 71 ;) (param $0 i32) (param $1 i32) (param $2 f64)
(local $3 i32)
(set_local $3
(i32.add
@@ -6003,7 +6013,7 @@
(i32.gt_u
(i32.add
(get_local $3)
- (i32.const 4)
+ (i32.const 8)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -6012,12 +6022,12 @@
)
(call $segfault)
)
- (f32.store align=1
+ (f64.store align=1
(get_local $3)
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_f32_4_2 (; 71 ;) (param $0 i32) (param $1 i32) (param $2 f32)
+ (func $SAFE_HEAP_STORE_f64_8_2 (; 72 ;) (param $0 i32) (param $1 i32) (param $2 f64)
(local $3 i32)
(set_local $3
(i32.add
@@ -6034,7 +6044,7 @@
(i32.gt_u
(i32.add
(get_local $3)
- (i32.const 4)
+ (i32.const 8)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -6050,12 +6060,12 @@
)
(call $alignfault)
)
- (f32.store align=2
+ (f64.store align=2
(get_local $3)
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_f32_4_4 (; 72 ;) (param $0 i32) (param $1 i32) (param $2 f32)
+ (func $SAFE_HEAP_STORE_f64_8_4 (; 73 ;) (param $0 i32) (param $1 i32) (param $2 f64)
(local $3 i32)
(set_local $3
(i32.add
@@ -6072,7 +6082,7 @@
(i32.gt_u
(i32.add
(get_local $3)
- (i32.const 4)
+ (i32.const 8)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -6088,74 +6098,12 @@
)
(call $alignfault)
)
- (f32.store
- (get_local $3)
- (get_local $2)
- )
- )
- (func $SAFE_HEAP_STORE_f64_1_1 (; 73 ;) (param $0 i32) (param $1 i32) (param $2 f64)
- (local $3 i32)
- (set_local $3
- (i32.add
- (get_local $0)
- (get_local $1)
- )
- )
- (if
- (i32.or
- (i32.eq
- (get_local $3)
- (i32.const 0)
- )
- (i32.gt_u
- (i32.add
- (get_local $3)
- (i32.const 1)
- )
- (i32.load
- (get_global $DYNAMICTOP_PTR)
- )
- )
- )
- (call $segfault)
- )
- (f64.store8
- (get_local $3)
- (get_local $2)
- )
- )
- (func $SAFE_HEAP_STORE_f64_2_1 (; 74 ;) (param $0 i32) (param $1 i32) (param $2 f64)
- (local $3 i32)
- (set_local $3
- (i32.add
- (get_local $0)
- (get_local $1)
- )
- )
- (if
- (i32.or
- (i32.eq
- (get_local $3)
- (i32.const 0)
- )
- (i32.gt_u
- (i32.add
- (get_local $3)
- (i32.const 2)
- )
- (i32.load
- (get_global $DYNAMICTOP_PTR)
- )
- )
- )
- (call $segfault)
- )
- (f64.store16 align=1
+ (f64.store align=4
(get_local $3)
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_f64_2_2 (; 75 ;) (param $0 i32) (param $1 i32) (param $2 f64)
+ (func $SAFE_HEAP_STORE_f64_8_8 (; 74 ;) (param $0 i32) (param $1 i32) (param $2 f64)
(local $3 i32)
(set_local $3
(i32.add
@@ -6172,7 +6120,7 @@
(i32.gt_u
(i32.add
(get_local $3)
- (i32.const 2)
+ (i32.const 8)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -6184,16 +6132,16 @@
(if
(i32.and
(get_local $3)
- (i32.const 1)
+ (i32.const 7)
)
(call $alignfault)
)
- (f64.store16
+ (f64.store
(get_local $3)
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_f64_4_1 (; 76 ;) (param $0 i32) (param $1 i32) (param $2 f64)
+ (func $SAFE_HEAP_STORE_v128_16_1 (; 75 ;) (param $0 i32) (param $1 i32) (param $2 v128)
(local $3 i32)
(set_local $3
(i32.add
@@ -6210,7 +6158,7 @@
(i32.gt_u
(i32.add
(get_local $3)
- (i32.const 4)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -6219,12 +6167,12 @@
)
(call $segfault)
)
- (f64.store align=1
+ (v128.store align=1
(get_local $3)
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_f64_4_2 (; 77 ;) (param $0 i32) (param $1 i32) (param $2 f64)
+ (func $SAFE_HEAP_STORE_v128_16_2 (; 76 ;) (param $0 i32) (param $1 i32) (param $2 v128)
(local $3 i32)
(set_local $3
(i32.add
@@ -6241,7 +6189,7 @@
(i32.gt_u
(i32.add
(get_local $3)
- (i32.const 4)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -6257,12 +6205,12 @@
)
(call $alignfault)
)
- (f64.store align=2
+ (v128.store align=2
(get_local $3)
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_f64_4_4 (; 78 ;) (param $0 i32) (param $1 i32) (param $2 f64)
+ (func $SAFE_HEAP_STORE_v128_16_4 (; 77 ;) (param $0 i32) (param $1 i32) (param $2 v128)
(local $3 i32)
(set_local $3
(i32.add
@@ -6279,7 +6227,7 @@
(i32.gt_u
(i32.add
(get_local $3)
- (i32.const 4)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -6295,43 +6243,12 @@
)
(call $alignfault)
)
- (f64.store
- (get_local $3)
- (get_local $2)
- )
- )
- (func $SAFE_HEAP_STORE_f64_8_1 (; 79 ;) (param $0 i32) (param $1 i32) (param $2 f64)
- (local $3 i32)
- (set_local $3
- (i32.add
- (get_local $0)
- (get_local $1)
- )
- )
- (if
- (i32.or
- (i32.eq
- (get_local $3)
- (i32.const 0)
- )
- (i32.gt_u
- (i32.add
- (get_local $3)
- (i32.const 8)
- )
- (i32.load
- (get_global $DYNAMICTOP_PTR)
- )
- )
- )
- (call $segfault)
- )
- (f64.store align=1
+ (v128.store align=4
(get_local $3)
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_f64_8_2 (; 80 ;) (param $0 i32) (param $1 i32) (param $2 f64)
+ (func $SAFE_HEAP_STORE_v128_16_8 (; 78 ;) (param $0 i32) (param $1 i32) (param $2 v128)
(local $3 i32)
(set_local $3
(i32.add
@@ -6348,7 +6265,7 @@
(i32.gt_u
(i32.add
(get_local $3)
- (i32.const 8)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -6360,54 +6277,16 @@
(if
(i32.and
(get_local $3)
- (i32.const 1)
- )
- (call $alignfault)
- )
- (f64.store align=2
- (get_local $3)
- (get_local $2)
- )
- )
- (func $SAFE_HEAP_STORE_f64_8_4 (; 81 ;) (param $0 i32) (param $1 i32) (param $2 f64)
- (local $3 i32)
- (set_local $3
- (i32.add
- (get_local $0)
- (get_local $1)
- )
- )
- (if
- (i32.or
- (i32.eq
- (get_local $3)
- (i32.const 0)
- )
- (i32.gt_u
- (i32.add
- (get_local $3)
- (i32.const 8)
- )
- (i32.load
- (get_global $DYNAMICTOP_PTR)
- )
- )
- )
- (call $segfault)
- )
- (if
- (i32.and
- (get_local $3)
- (i32.const 3)
+ (i32.const 7)
)
(call $alignfault)
)
- (f64.store align=4
+ (v128.store align=8
(get_local $3)
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_f64_8_8 (; 82 ;) (param $0 i32) (param $1 i32) (param $2 f64)
+ (func $SAFE_HEAP_STORE_v128_16_16 (; 79 ;) (param $0 i32) (param $1 i32) (param $2 v128)
(local $3 i32)
(set_local $3
(i32.add
@@ -6424,7 +6303,7 @@
(i32.gt_u
(i32.add
(get_local $3)
- (i32.const 8)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -6436,11 +6315,11 @@
(if
(i32.and
(get_local $3)
- (i32.const 7)
+ (i32.const 15)
)
(call $alignfault)
)
- (f64.store
+ (v128.store
(get_local $3)
(get_local $2)
)
@@ -8071,7 +7950,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f32_1_1 (; 49 ;) (param $0 i32) (param $1 i32) (result f32)
+ (func $SAFE_HEAP_LOAD_f32_4_1 (; 49 ;) (param $0 i32) (param $1 i32) (result f32)
(local $2 i32)
(set_local $2
(i32.add
@@ -8088,7 +7967,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 1)
+ (i32.const 4)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -8097,11 +7976,11 @@
)
(call $segfault)
)
- (f32.load8_u
+ (f32.load align=1
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f32_2_1 (; 50 ;) (param $0 i32) (param $1 i32) (result f32)
+ (func $SAFE_HEAP_LOAD_f32_4_2 (; 50 ;) (param $0 i32) (param $1 i32) (result f32)
(local $2 i32)
(set_local $2
(i32.add
@@ -8118,7 +7997,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 2)
+ (i32.const 4)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -8127,11 +8006,18 @@
)
(call $segfault)
)
- (f32.load16_u align=1
+ (if
+ (i32.and
+ (get_local $2)
+ (i32.const 1)
+ )
+ (call $alignfault)
+ )
+ (f32.load align=2
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f32_2_2 (; 51 ;) (param $0 i32) (param $1 i32) (result f32)
+ (func $SAFE_HEAP_LOAD_f32_4_4 (; 51 ;) (param $0 i32) (param $1 i32) (result f32)
(local $2 i32)
(set_local $2
(i32.add
@@ -8148,7 +8034,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 2)
+ (i32.const 4)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -8160,15 +8046,15 @@
(if
(i32.and
(get_local $2)
- (i32.const 1)
+ (i32.const 3)
)
(call $alignfault)
)
- (f32.load16_u
+ (f32.load
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f32_4_1 (; 52 ;) (param $0 i32) (param $1 i32) (result f32)
+ (func $SAFE_HEAP_LOAD_f64_8_1 (; 52 ;) (param $0 i32) (param $1 i32) (result f64)
(local $2 i32)
(set_local $2
(i32.add
@@ -8185,7 +8071,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 4)
+ (i32.const 8)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -8194,11 +8080,11 @@
)
(call $segfault)
)
- (f32.load align=1
+ (f64.load align=1
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f32_4_2 (; 53 ;) (param $0 i32) (param $1 i32) (result f32)
+ (func $SAFE_HEAP_LOAD_f64_8_2 (; 53 ;) (param $0 i32) (param $1 i32) (result f64)
(local $2 i32)
(set_local $2
(i32.add
@@ -8215,7 +8101,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 4)
+ (i32.const 8)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -8231,11 +8117,11 @@
)
(call $alignfault)
)
- (f32.load align=2
+ (f64.load align=2
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f32_4_4 (; 54 ;) (param $0 i32) (param $1 i32) (result f32)
+ (func $SAFE_HEAP_LOAD_f64_8_4 (; 54 ;) (param $0 i32) (param $1 i32) (result f64)
(local $2 i32)
(set_local $2
(i32.add
@@ -8252,7 +8138,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 4)
+ (i32.const 8)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -8268,11 +8154,11 @@
)
(call $alignfault)
)
- (f32.load
+ (f64.load align=4
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f64_1_1 (; 55 ;) (param $0 i32) (param $1 i32) (result f64)
+ (func $SAFE_HEAP_LOAD_f64_8_8 (; 55 ;) (param $0 i32) (param $1 i32) (result f64)
(local $2 i32)
(set_local $2
(i32.add
@@ -8289,7 +8175,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 1)
+ (i32.const 8)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -8298,11 +8184,18 @@
)
(call $segfault)
)
- (f64.load8_u
+ (if
+ (i32.and
+ (get_local $2)
+ (i32.const 7)
+ )
+ (call $alignfault)
+ )
+ (f64.load
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f64_2_1 (; 56 ;) (param $0 i32) (param $1 i32) (result f64)
+ (func $SAFE_HEAP_LOAD_v128_16_1 (; 56 ;) (param $0 i32) (param $1 i32) (result v128)
(local $2 i32)
(set_local $2
(i32.add
@@ -8319,7 +8212,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 2)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -8328,11 +8221,11 @@
)
(call $segfault)
)
- (f64.load16_u align=1
+ (v128.load align=1
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f64_2_2 (; 57 ;) (param $0 i32) (param $1 i32) (result f64)
+ (func $SAFE_HEAP_LOAD_v128_16_2 (; 57 ;) (param $0 i32) (param $1 i32) (result v128)
(local $2 i32)
(set_local $2
(i32.add
@@ -8349,7 +8242,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 2)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -8365,11 +8258,11 @@
)
(call $alignfault)
)
- (f64.load16_u
+ (v128.load align=2
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f64_4_1 (; 58 ;) (param $0 i32) (param $1 i32) (result f64)
+ (func $SAFE_HEAP_LOAD_v128_16_4 (; 58 ;) (param $0 i32) (param $1 i32) (result v128)
(local $2 i32)
(set_local $2
(i32.add
@@ -8386,7 +8279,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 4)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -8395,11 +8288,18 @@
)
(call $segfault)
)
- (f64.load align=1
+ (if
+ (i32.and
+ (get_local $2)
+ (i32.const 3)
+ )
+ (call $alignfault)
+ )
+ (v128.load align=4
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f64_4_2 (; 59 ;) (param $0 i32) (param $1 i32) (result f64)
+ (func $SAFE_HEAP_LOAD_v128_16_8 (; 59 ;) (param $0 i32) (param $1 i32) (result v128)
(local $2 i32)
(set_local $2
(i32.add
@@ -8416,7 +8316,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 4)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -8428,15 +8328,15 @@
(if
(i32.and
(get_local $2)
- (i32.const 1)
+ (i32.const 7)
)
(call $alignfault)
)
- (f64.load align=2
+ (v128.load align=8
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f64_4_4 (; 60 ;) (param $0 i32) (param $1 i32) (result f64)
+ (func $SAFE_HEAP_LOAD_v128_16_16 (; 60 ;) (param $0 i32) (param $1 i32) (result v128)
(local $2 i32)
(set_local $2
(i32.add
@@ -8453,7 +8353,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 4)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -8465,15 +8365,15 @@
(if
(i32.and
(get_local $2)
- (i32.const 3)
+ (i32.const 15)
)
(call $alignfault)
)
- (f64.load
+ (v128.load
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f64_8_1 (; 61 ;) (param $0 i32) (param $1 i32) (result f64)
+ (func $SAFE_HEAP_LOAD_v128_16_U_1 (; 61 ;) (param $0 i32) (param $1 i32) (result v128)
(local $2 i32)
(set_local $2
(i32.add
@@ -8490,7 +8390,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 8)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -8499,11 +8399,11 @@
)
(call $segfault)
)
- (f64.load align=1
+ (v128.load align=1
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f64_8_2 (; 62 ;) (param $0 i32) (param $1 i32) (result f64)
+ (func $SAFE_HEAP_LOAD_v128_16_U_2 (; 62 ;) (param $0 i32) (param $1 i32) (result v128)
(local $2 i32)
(set_local $2
(i32.add
@@ -8520,7 +8420,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 8)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -8536,11 +8436,11 @@
)
(call $alignfault)
)
- (f64.load align=2
+ (v128.load align=2
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f64_8_4 (; 63 ;) (param $0 i32) (param $1 i32) (result f64)
+ (func $SAFE_HEAP_LOAD_v128_16_U_4 (; 63 ;) (param $0 i32) (param $1 i32) (result v128)
(local $2 i32)
(set_local $2
(i32.add
@@ -8557,7 +8457,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 8)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -8573,11 +8473,11 @@
)
(call $alignfault)
)
- (f64.load align=4
+ (v128.load align=4
(get_local $2)
)
)
- (func $SAFE_HEAP_LOAD_f64_8_8 (; 64 ;) (param $0 i32) (param $1 i32) (result f64)
+ (func $SAFE_HEAP_LOAD_v128_16_U_8 (; 64 ;) (param $0 i32) (param $1 i32) (result v128)
(local $2 i32)
(set_local $2
(i32.add
@@ -8594,7 +8494,7 @@
(i32.gt_u
(i32.add
(get_local $2)
- (i32.const 8)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -8610,11 +8510,48 @@
)
(call $alignfault)
)
- (f64.load
+ (v128.load align=8
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_v128_16_U_16 (; 65 ;) (param $0 i32) (param $1 i32) (result v128)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 16)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $2)
+ (i32.const 15)
+ )
+ (call $alignfault)
+ )
+ (v128.load
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i32_1_A (; 65 ;) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $SAFE_HEAP_STORE_i32_1_A (; 66 ;) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(set_local $3
(i32.add
@@ -8645,7 +8582,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i32_1_1 (; 66 ;) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $SAFE_HEAP_STORE_i32_1_1 (; 67 ;) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(set_local $3
(i32.add
@@ -8676,7 +8613,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i32_2_1 (; 67 ;) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $SAFE_HEAP_STORE_i32_2_1 (; 68 ;) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(set_local $3
(i32.add
@@ -8707,7 +8644,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i32_2_A (; 68 ;) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $SAFE_HEAP_STORE_i32_2_A (; 69 ;) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(set_local $3
(i32.add
@@ -8745,7 +8682,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i32_2_2 (; 69 ;) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $SAFE_HEAP_STORE_i32_2_2 (; 70 ;) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(set_local $3
(i32.add
@@ -8783,7 +8720,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i32_4_1 (; 70 ;) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $SAFE_HEAP_STORE_i32_4_1 (; 71 ;) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(set_local $3
(i32.add
@@ -8814,7 +8751,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i32_4_2 (; 71 ;) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $SAFE_HEAP_STORE_i32_4_2 (; 72 ;) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(set_local $3
(i32.add
@@ -8852,7 +8789,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i32_4_A (; 72 ;) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $SAFE_HEAP_STORE_i32_4_A (; 73 ;) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(set_local $3
(i32.add
@@ -8890,7 +8827,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i32_4_4 (; 73 ;) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $SAFE_HEAP_STORE_i32_4_4 (; 74 ;) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(set_local $3
(i32.add
@@ -8928,7 +8865,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_1_A (; 74 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_1_A (; 75 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -8959,7 +8896,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_1_1 (; 75 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_1_1 (; 76 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -8990,7 +8927,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_2_1 (; 76 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_2_1 (; 77 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -9021,7 +8958,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_2_A (; 77 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_2_A (; 78 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -9059,7 +8996,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_2_2 (; 78 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_2_2 (; 79 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -9097,7 +9034,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_4_1 (; 79 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_4_1 (; 80 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -9128,7 +9065,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_4_2 (; 80 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_4_2 (; 81 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -9166,7 +9103,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_4_A (; 81 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_4_A (; 82 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -9204,7 +9141,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_4_4 (; 82 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_4_4 (; 83 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -9242,7 +9179,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_8_1 (; 83 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_8_1 (; 84 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -9273,7 +9210,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_8_2 (; 84 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_8_2 (; 85 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -9311,7 +9248,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_8_4 (; 85 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_8_4 (; 86 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -9349,7 +9286,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_8_A (; 86 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_8_A (; 87 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -9387,7 +9324,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_i64_8_8 (; 87 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (func $SAFE_HEAP_STORE_i64_8_8 (; 88 ;) (param $0 i32) (param $1 i32) (param $2 i64)
(local $3 i32)
(set_local $3
(i32.add
@@ -9425,7 +9362,7 @@
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_f32_1_1 (; 88 ;) (param $0 i32) (param $1 i32) (param $2 f32)
+ (func $SAFE_HEAP_STORE_f32_4_1 (; 89 ;) (param $0 i32) (param $1 i32) (param $2 f32)
(local $3 i32)
(set_local $3
(i32.add
@@ -9442,7 +9379,7 @@
(i32.gt_u
(i32.add
(get_local $3)
- (i32.const 1)
+ (i32.const 4)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -9451,12 +9388,12 @@
)
(call $segfault)
)
- (f32.store8
+ (f32.store align=1
(get_local $3)
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_f32_2_1 (; 89 ;) (param $0 i32) (param $1 i32) (param $2 f32)
+ (func $SAFE_HEAP_STORE_f32_4_2 (; 90 ;) (param $0 i32) (param $1 i32) (param $2 f32)
(local $3 i32)
(set_local $3
(i32.add
@@ -9473,7 +9410,7 @@
(i32.gt_u
(i32.add
(get_local $3)
- (i32.const 2)
+ (i32.const 4)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -9482,12 +9419,19 @@
)
(call $segfault)
)
- (f32.store16 align=1
+ (if
+ (i32.and
+ (get_local $3)
+ (i32.const 1)
+ )
+ (call $alignfault)
+ )
+ (f32.store align=2
(get_local $3)
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_f32_2_2 (; 90 ;) (param $0 i32) (param $1 i32) (param $2 f32)
+ (func $SAFE_HEAP_STORE_f32_4_4 (; 91 ;) (param $0 i32) (param $1 i32) (param $2 f32)
(local $3 i32)
(set_local $3
(i32.add
@@ -9504,7 +9448,7 @@
(i32.gt_u
(i32.add
(get_local $3)
- (i32.const 2)
+ (i32.const 4)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -9516,16 +9460,16 @@
(if
(i32.and
(get_local $3)
- (i32.const 1)
+ (i32.const 3)
)
(call $alignfault)
)
- (f32.store16
+ (f32.store
(get_local $3)
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_f32_4_1 (; 91 ;) (param $0 i32) (param $1 i32) (param $2 f32)
+ (func $SAFE_HEAP_STORE_f64_8_1 (; 92 ;) (param $0 i32) (param $1 i32) (param $2 f64)
(local $3 i32)
(set_local $3
(i32.add
@@ -9542,7 +9486,7 @@
(i32.gt_u
(i32.add
(get_local $3)
- (i32.const 4)
+ (i32.const 8)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -9551,12 +9495,12 @@
)
(call $segfault)
)
- (f32.store align=1
+ (f64.store align=1
(get_local $3)
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_f32_4_2 (; 92 ;) (param $0 i32) (param $1 i32) (param $2 f32)
+ (func $SAFE_HEAP_STORE_f64_8_2 (; 93 ;) (param $0 i32) (param $1 i32) (param $2 f64)
(local $3 i32)
(set_local $3
(i32.add
@@ -9573,7 +9517,7 @@
(i32.gt_u
(i32.add
(get_local $3)
- (i32.const 4)
+ (i32.const 8)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -9589,12 +9533,12 @@
)
(call $alignfault)
)
- (f32.store align=2
+ (f64.store align=2
(get_local $3)
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_f32_4_4 (; 93 ;) (param $0 i32) (param $1 i32) (param $2 f32)
+ (func $SAFE_HEAP_STORE_f64_8_4 (; 94 ;) (param $0 i32) (param $1 i32) (param $2 f64)
(local $3 i32)
(set_local $3
(i32.add
@@ -9611,7 +9555,7 @@
(i32.gt_u
(i32.add
(get_local $3)
- (i32.const 4)
+ (i32.const 8)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -9627,74 +9571,12 @@
)
(call $alignfault)
)
- (f32.store
- (get_local $3)
- (get_local $2)
- )
- )
- (func $SAFE_HEAP_STORE_f64_1_1 (; 94 ;) (param $0 i32) (param $1 i32) (param $2 f64)
- (local $3 i32)
- (set_local $3
- (i32.add
- (get_local $0)
- (get_local $1)
- )
- )
- (if
- (i32.or
- (i32.eq
- (get_local $3)
- (i32.const 0)
- )
- (i32.gt_u
- (i32.add
- (get_local $3)
- (i32.const 1)
- )
- (i32.load
- (get_global $DYNAMICTOP_PTR)
- )
- )
- )
- (call $segfault)
- )
- (f64.store8
- (get_local $3)
- (get_local $2)
- )
- )
- (func $SAFE_HEAP_STORE_f64_2_1 (; 95 ;) (param $0 i32) (param $1 i32) (param $2 f64)
- (local $3 i32)
- (set_local $3
- (i32.add
- (get_local $0)
- (get_local $1)
- )
- )
- (if
- (i32.or
- (i32.eq
- (get_local $3)
- (i32.const 0)
- )
- (i32.gt_u
- (i32.add
- (get_local $3)
- (i32.const 2)
- )
- (i32.load
- (get_global $DYNAMICTOP_PTR)
- )
- )
- )
- (call $segfault)
- )
- (f64.store16 align=1
+ (f64.store align=4
(get_local $3)
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_f64_2_2 (; 96 ;) (param $0 i32) (param $1 i32) (param $2 f64)
+ (func $SAFE_HEAP_STORE_f64_8_8 (; 95 ;) (param $0 i32) (param $1 i32) (param $2 f64)
(local $3 i32)
(set_local $3
(i32.add
@@ -9711,7 +9593,7 @@
(i32.gt_u
(i32.add
(get_local $3)
- (i32.const 2)
+ (i32.const 8)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -9723,16 +9605,16 @@
(if
(i32.and
(get_local $3)
- (i32.const 1)
+ (i32.const 7)
)
(call $alignfault)
)
- (f64.store16
+ (f64.store
(get_local $3)
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_f64_4_1 (; 97 ;) (param $0 i32) (param $1 i32) (param $2 f64)
+ (func $SAFE_HEAP_STORE_v128_16_1 (; 96 ;) (param $0 i32) (param $1 i32) (param $2 v128)
(local $3 i32)
(set_local $3
(i32.add
@@ -9749,7 +9631,7 @@
(i32.gt_u
(i32.add
(get_local $3)
- (i32.const 4)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -9758,12 +9640,12 @@
)
(call $segfault)
)
- (f64.store align=1
+ (v128.store align=1
(get_local $3)
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_f64_4_2 (; 98 ;) (param $0 i32) (param $1 i32) (param $2 f64)
+ (func $SAFE_HEAP_STORE_v128_16_2 (; 97 ;) (param $0 i32) (param $1 i32) (param $2 v128)
(local $3 i32)
(set_local $3
(i32.add
@@ -9780,7 +9662,7 @@
(i32.gt_u
(i32.add
(get_local $3)
- (i32.const 4)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -9796,12 +9678,12 @@
)
(call $alignfault)
)
- (f64.store align=2
+ (v128.store align=2
(get_local $3)
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_f64_4_4 (; 99 ;) (param $0 i32) (param $1 i32) (param $2 f64)
+ (func $SAFE_HEAP_STORE_v128_16_4 (; 98 ;) (param $0 i32) (param $1 i32) (param $2 v128)
(local $3 i32)
(set_local $3
(i32.add
@@ -9818,7 +9700,7 @@
(i32.gt_u
(i32.add
(get_local $3)
- (i32.const 4)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -9834,81 +9716,12 @@
)
(call $alignfault)
)
- (f64.store
- (get_local $3)
- (get_local $2)
- )
- )
- (func $SAFE_HEAP_STORE_f64_8_1 (; 100 ;) (param $0 i32) (param $1 i32) (param $2 f64)
- (local $3 i32)
- (set_local $3
- (i32.add
- (get_local $0)
- (get_local $1)
- )
- )
- (if
- (i32.or
- (i32.eq
- (get_local $3)
- (i32.const 0)
- )
- (i32.gt_u
- (i32.add
- (get_local $3)
- (i32.const 8)
- )
- (i32.load
- (get_global $DYNAMICTOP_PTR)
- )
- )
- )
- (call $segfault)
- )
- (f64.store align=1
- (get_local $3)
- (get_local $2)
- )
- )
- (func $SAFE_HEAP_STORE_f64_8_2 (; 101 ;) (param $0 i32) (param $1 i32) (param $2 f64)
- (local $3 i32)
- (set_local $3
- (i32.add
- (get_local $0)
- (get_local $1)
- )
- )
- (if
- (i32.or
- (i32.eq
- (get_local $3)
- (i32.const 0)
- )
- (i32.gt_u
- (i32.add
- (get_local $3)
- (i32.const 8)
- )
- (i32.load
- (get_global $DYNAMICTOP_PTR)
- )
- )
- )
- (call $segfault)
- )
- (if
- (i32.and
- (get_local $3)
- (i32.const 1)
- )
- (call $alignfault)
- )
- (f64.store align=2
+ (v128.store align=4
(get_local $3)
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_f64_8_4 (; 102 ;) (param $0 i32) (param $1 i32) (param $2 f64)
+ (func $SAFE_HEAP_STORE_v128_16_8 (; 99 ;) (param $0 i32) (param $1 i32) (param $2 v128)
(local $3 i32)
(set_local $3
(i32.add
@@ -9925,7 +9738,7 @@
(i32.gt_u
(i32.add
(get_local $3)
- (i32.const 8)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -9937,16 +9750,16 @@
(if
(i32.and
(get_local $3)
- (i32.const 3)
+ (i32.const 7)
)
(call $alignfault)
)
- (f64.store align=4
+ (v128.store align=8
(get_local $3)
(get_local $2)
)
)
- (func $SAFE_HEAP_STORE_f64_8_8 (; 103 ;) (param $0 i32) (param $1 i32) (param $2 f64)
+ (func $SAFE_HEAP_STORE_v128_16_16 (; 100 ;) (param $0 i32) (param $1 i32) (param $2 v128)
(local $3 i32)
(set_local $3
(i32.add
@@ -9963,7 +9776,7 @@
(i32.gt_u
(i32.add
(get_local $3)
- (i32.const 8)
+ (i32.const 16)
)
(i32.load
(get_global $DYNAMICTOP_PTR)
@@ -9975,11 +9788,11 @@
(if
(i32.and
(get_local $3)
- (i32.const 7)
+ (i32.const 15)
)
(call $alignfault)
)
- (f64.store
+ (v128.store
(get_local $3)
(get_local $2)
)
diff --git a/test/passes/safe-heap.wast b/test/passes/safe-heap.wast
index 19aa94a35..a2754b469 100644
--- a/test/passes/safe-heap.wast
+++ b/test/passes/safe-heap.wast
@@ -15,6 +15,7 @@
(drop (i64.load (i32.const 11)))
(drop (f32.load (i32.const 12)))
(drop (f64.load (i32.const 13)))
+ (drop (v128.load (i32.const 14)))
)
(func $stores
(i32.store (i32.const 1) (i32.const 100))
@@ -31,6 +32,7 @@
(i64.store (i32.const 11) (i64.const 1100))
(f32.store (i32.const 12) (f32.const 1200))
(f64.store (i32.const 13) (f64.const 1300))
+ (v128.store (i32.const 14) (v128.const i32 1 2 3 4))
)
)
;; not shared
@@ -52,4 +54,3 @@
(i32.store (i32.const 1) (i32.const 100))
)
)
-
diff --git a/test/passes/safe-heap_disable-simd.txt b/test/passes/safe-heap_disable-simd.txt
new file mode 100644
index 000000000..cf6fdc42c
--- /dev/null
+++ b/test/passes/safe-heap_disable-simd.txt
@@ -0,0 +1,2148 @@
+(module
+ (type $FUNCSIG$v (func))
+ (import "env" "DYNAMICTOP_PTR" (global $DYNAMICTOP_PTR i32))
+ (import "env" "segfault" (func $segfault))
+ (import "env" "alignfault" (func $alignfault))
+ (func $SAFE_HEAP_LOAD_i32_1_1 (; 2 ;) (param $0 i32) (param $1 i32) (result i32)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 1)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (i32.load8_s
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_i32_1_U_1 (; 3 ;) (param $0 i32) (param $1 i32) (result i32)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 1)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (i32.load8_u
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_i32_2_1 (; 4 ;) (param $0 i32) (param $1 i32) (result i32)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 2)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (i32.load16_s align=1
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_i32_2_2 (; 5 ;) (param $0 i32) (param $1 i32) (result i32)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 2)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $2)
+ (i32.const 1)
+ )
+ (call $alignfault)
+ )
+ (i32.load16_s
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_i32_2_U_1 (; 6 ;) (param $0 i32) (param $1 i32) (result i32)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 2)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (i32.load16_u align=1
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_i32_2_U_2 (; 7 ;) (param $0 i32) (param $1 i32) (result i32)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 2)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $2)
+ (i32.const 1)
+ )
+ (call $alignfault)
+ )
+ (i32.load16_u
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_i32_4_1 (; 8 ;) (param $0 i32) (param $1 i32) (result i32)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 4)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (i32.load align=1
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_i32_4_2 (; 9 ;) (param $0 i32) (param $1 i32) (result i32)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 4)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $2)
+ (i32.const 1)
+ )
+ (call $alignfault)
+ )
+ (i32.load align=2
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_i32_4_4 (; 10 ;) (param $0 i32) (param $1 i32) (result i32)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 4)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $2)
+ (i32.const 3)
+ )
+ (call $alignfault)
+ )
+ (i32.load
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_i32_4_U_1 (; 11 ;) (param $0 i32) (param $1 i32) (result i32)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 4)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (i32.load align=1
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_i32_4_U_2 (; 12 ;) (param $0 i32) (param $1 i32) (result i32)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 4)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $2)
+ (i32.const 1)
+ )
+ (call $alignfault)
+ )
+ (i32.load align=2
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_i32_4_U_4 (; 13 ;) (param $0 i32) (param $1 i32) (result i32)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 4)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $2)
+ (i32.const 3)
+ )
+ (call $alignfault)
+ )
+ (i32.load
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_i64_1_1 (; 14 ;) (param $0 i32) (param $1 i32) (result i64)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 1)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (i64.load8_s
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_i64_1_U_1 (; 15 ;) (param $0 i32) (param $1 i32) (result i64)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 1)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (i64.load8_u
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_i64_2_1 (; 16 ;) (param $0 i32) (param $1 i32) (result i64)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 2)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (i64.load16_s align=1
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_i64_2_2 (; 17 ;) (param $0 i32) (param $1 i32) (result i64)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 2)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $2)
+ (i32.const 1)
+ )
+ (call $alignfault)
+ )
+ (i64.load16_s
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_i64_2_U_1 (; 18 ;) (param $0 i32) (param $1 i32) (result i64)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 2)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (i64.load16_u align=1
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_i64_2_U_2 (; 19 ;) (param $0 i32) (param $1 i32) (result i64)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 2)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $2)
+ (i32.const 1)
+ )
+ (call $alignfault)
+ )
+ (i64.load16_u
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_i64_4_1 (; 20 ;) (param $0 i32) (param $1 i32) (result i64)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 4)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (i64.load32_s align=1
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_i64_4_2 (; 21 ;) (param $0 i32) (param $1 i32) (result i64)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 4)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $2)
+ (i32.const 1)
+ )
+ (call $alignfault)
+ )
+ (i64.load32_s align=2
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_i64_4_4 (; 22 ;) (param $0 i32) (param $1 i32) (result i64)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 4)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $2)
+ (i32.const 3)
+ )
+ (call $alignfault)
+ )
+ (i64.load32_s
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_i64_4_U_1 (; 23 ;) (param $0 i32) (param $1 i32) (result i64)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 4)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (i64.load32_u align=1
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_i64_4_U_2 (; 24 ;) (param $0 i32) (param $1 i32) (result i64)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 4)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $2)
+ (i32.const 1)
+ )
+ (call $alignfault)
+ )
+ (i64.load32_u align=2
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_i64_4_U_4 (; 25 ;) (param $0 i32) (param $1 i32) (result i64)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 4)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $2)
+ (i32.const 3)
+ )
+ (call $alignfault)
+ )
+ (i64.load32_u
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_i64_8_1 (; 26 ;) (param $0 i32) (param $1 i32) (result i64)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 8)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (i64.load align=1
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_i64_8_2 (; 27 ;) (param $0 i32) (param $1 i32) (result i64)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 8)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $2)
+ (i32.const 1)
+ )
+ (call $alignfault)
+ )
+ (i64.load align=2
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_i64_8_4 (; 28 ;) (param $0 i32) (param $1 i32) (result i64)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 8)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $2)
+ (i32.const 3)
+ )
+ (call $alignfault)
+ )
+ (i64.load align=4
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_i64_8_8 (; 29 ;) (param $0 i32) (param $1 i32) (result i64)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 8)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $2)
+ (i32.const 7)
+ )
+ (call $alignfault)
+ )
+ (i64.load
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_i64_8_U_1 (; 30 ;) (param $0 i32) (param $1 i32) (result i64)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 8)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (i64.load align=1
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_i64_8_U_2 (; 31 ;) (param $0 i32) (param $1 i32) (result i64)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 8)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $2)
+ (i32.const 1)
+ )
+ (call $alignfault)
+ )
+ (i64.load align=2
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_i64_8_U_4 (; 32 ;) (param $0 i32) (param $1 i32) (result i64)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 8)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $2)
+ (i32.const 3)
+ )
+ (call $alignfault)
+ )
+ (i64.load align=4
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_i64_8_U_8 (; 33 ;) (param $0 i32) (param $1 i32) (result i64)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 8)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $2)
+ (i32.const 7)
+ )
+ (call $alignfault)
+ )
+ (i64.load
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_f32_4_1 (; 34 ;) (param $0 i32) (param $1 i32) (result f32)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 4)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (f32.load align=1
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_f32_4_2 (; 35 ;) (param $0 i32) (param $1 i32) (result f32)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 4)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $2)
+ (i32.const 1)
+ )
+ (call $alignfault)
+ )
+ (f32.load align=2
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_f32_4_4 (; 36 ;) (param $0 i32) (param $1 i32) (result f32)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 4)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $2)
+ (i32.const 3)
+ )
+ (call $alignfault)
+ )
+ (f32.load
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_f64_8_1 (; 37 ;) (param $0 i32) (param $1 i32) (result f64)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 8)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (f64.load align=1
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_f64_8_2 (; 38 ;) (param $0 i32) (param $1 i32) (result f64)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 8)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $2)
+ (i32.const 1)
+ )
+ (call $alignfault)
+ )
+ (f64.load align=2
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_f64_8_4 (; 39 ;) (param $0 i32) (param $1 i32) (result f64)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 8)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $2)
+ (i32.const 3)
+ )
+ (call $alignfault)
+ )
+ (f64.load align=4
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_LOAD_f64_8_8 (; 40 ;) (param $0 i32) (param $1 i32) (result f64)
+ (local $2 i32)
+ (set_local $2
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $2)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $2)
+ (i32.const 8)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $2)
+ (i32.const 7)
+ )
+ (call $alignfault)
+ )
+ (f64.load
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_STORE_i32_1_1 (; 41 ;) (param $0 i32) (param $1 i32) (param $2 i32)
+ (local $3 i32)
+ (set_local $3
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $3)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $3)
+ (i32.const 1)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (i32.store8
+ (get_local $3)
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_STORE_i32_2_1 (; 42 ;) (param $0 i32) (param $1 i32) (param $2 i32)
+ (local $3 i32)
+ (set_local $3
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $3)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $3)
+ (i32.const 2)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (i32.store16 align=1
+ (get_local $3)
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_STORE_i32_2_2 (; 43 ;) (param $0 i32) (param $1 i32) (param $2 i32)
+ (local $3 i32)
+ (set_local $3
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $3)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $3)
+ (i32.const 2)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $3)
+ (i32.const 1)
+ )
+ (call $alignfault)
+ )
+ (i32.store16
+ (get_local $3)
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_STORE_i32_4_1 (; 44 ;) (param $0 i32) (param $1 i32) (param $2 i32)
+ (local $3 i32)
+ (set_local $3
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $3)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $3)
+ (i32.const 4)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (i32.store align=1
+ (get_local $3)
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_STORE_i32_4_2 (; 45 ;) (param $0 i32) (param $1 i32) (param $2 i32)
+ (local $3 i32)
+ (set_local $3
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $3)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $3)
+ (i32.const 4)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $3)
+ (i32.const 1)
+ )
+ (call $alignfault)
+ )
+ (i32.store align=2
+ (get_local $3)
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_STORE_i32_4_4 (; 46 ;) (param $0 i32) (param $1 i32) (param $2 i32)
+ (local $3 i32)
+ (set_local $3
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $3)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $3)
+ (i32.const 4)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $3)
+ (i32.const 3)
+ )
+ (call $alignfault)
+ )
+ (i32.store
+ (get_local $3)
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_STORE_i64_1_1 (; 47 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (local $3 i32)
+ (set_local $3
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $3)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $3)
+ (i32.const 1)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (i64.store8
+ (get_local $3)
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_STORE_i64_2_1 (; 48 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (local $3 i32)
+ (set_local $3
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $3)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $3)
+ (i32.const 2)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (i64.store16 align=1
+ (get_local $3)
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_STORE_i64_2_2 (; 49 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (local $3 i32)
+ (set_local $3
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $3)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $3)
+ (i32.const 2)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $3)
+ (i32.const 1)
+ )
+ (call $alignfault)
+ )
+ (i64.store16
+ (get_local $3)
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_STORE_i64_4_1 (; 50 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (local $3 i32)
+ (set_local $3
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $3)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $3)
+ (i32.const 4)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (i64.store32 align=1
+ (get_local $3)
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_STORE_i64_4_2 (; 51 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (local $3 i32)
+ (set_local $3
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $3)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $3)
+ (i32.const 4)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $3)
+ (i32.const 1)
+ )
+ (call $alignfault)
+ )
+ (i64.store32 align=2
+ (get_local $3)
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_STORE_i64_4_4 (; 52 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (local $3 i32)
+ (set_local $3
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $3)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $3)
+ (i32.const 4)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $3)
+ (i32.const 3)
+ )
+ (call $alignfault)
+ )
+ (i64.store32
+ (get_local $3)
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_STORE_i64_8_1 (; 53 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (local $3 i32)
+ (set_local $3
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $3)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $3)
+ (i32.const 8)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (i64.store align=1
+ (get_local $3)
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_STORE_i64_8_2 (; 54 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (local $3 i32)
+ (set_local $3
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $3)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $3)
+ (i32.const 8)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $3)
+ (i32.const 1)
+ )
+ (call $alignfault)
+ )
+ (i64.store align=2
+ (get_local $3)
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_STORE_i64_8_4 (; 55 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (local $3 i32)
+ (set_local $3
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $3)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $3)
+ (i32.const 8)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $3)
+ (i32.const 3)
+ )
+ (call $alignfault)
+ )
+ (i64.store align=4
+ (get_local $3)
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_STORE_i64_8_8 (; 56 ;) (param $0 i32) (param $1 i32) (param $2 i64)
+ (local $3 i32)
+ (set_local $3
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $3)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $3)
+ (i32.const 8)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $3)
+ (i32.const 7)
+ )
+ (call $alignfault)
+ )
+ (i64.store
+ (get_local $3)
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_STORE_f32_4_1 (; 57 ;) (param $0 i32) (param $1 i32) (param $2 f32)
+ (local $3 i32)
+ (set_local $3
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $3)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $3)
+ (i32.const 4)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (f32.store align=1
+ (get_local $3)
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_STORE_f32_4_2 (; 58 ;) (param $0 i32) (param $1 i32) (param $2 f32)
+ (local $3 i32)
+ (set_local $3
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $3)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $3)
+ (i32.const 4)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $3)
+ (i32.const 1)
+ )
+ (call $alignfault)
+ )
+ (f32.store align=2
+ (get_local $3)
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_STORE_f32_4_4 (; 59 ;) (param $0 i32) (param $1 i32) (param $2 f32)
+ (local $3 i32)
+ (set_local $3
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $3)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $3)
+ (i32.const 4)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $3)
+ (i32.const 3)
+ )
+ (call $alignfault)
+ )
+ (f32.store
+ (get_local $3)
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_STORE_f64_8_1 (; 60 ;) (param $0 i32) (param $1 i32) (param $2 f64)
+ (local $3 i32)
+ (set_local $3
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $3)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $3)
+ (i32.const 8)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (f64.store align=1
+ (get_local $3)
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_STORE_f64_8_2 (; 61 ;) (param $0 i32) (param $1 i32) (param $2 f64)
+ (local $3 i32)
+ (set_local $3
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $3)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $3)
+ (i32.const 8)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $3)
+ (i32.const 1)
+ )
+ (call $alignfault)
+ )
+ (f64.store align=2
+ (get_local $3)
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_STORE_f64_8_4 (; 62 ;) (param $0 i32) (param $1 i32) (param $2 f64)
+ (local $3 i32)
+ (set_local $3
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $3)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $3)
+ (i32.const 8)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $3)
+ (i32.const 3)
+ )
+ (call $alignfault)
+ )
+ (f64.store align=4
+ (get_local $3)
+ (get_local $2)
+ )
+ )
+ (func $SAFE_HEAP_STORE_f64_8_8 (; 63 ;) (param $0 i32) (param $1 i32) (param $2 f64)
+ (local $3 i32)
+ (set_local $3
+ (i32.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (if
+ (i32.or
+ (i32.eq
+ (get_local $3)
+ (i32.const 0)
+ )
+ (i32.gt_u
+ (i32.add
+ (get_local $3)
+ (i32.const 8)
+ )
+ (i32.load
+ (get_global $DYNAMICTOP_PTR)
+ )
+ )
+ )
+ (call $segfault)
+ )
+ (if
+ (i32.and
+ (get_local $3)
+ (i32.const 7)
+ )
+ (call $alignfault)
+ )
+ (f64.store
+ (get_local $3)
+ (get_local $2)
+ )
+ )
+)
diff --git a/test/passes/safe-heap_disable-simd.wast b/test/passes/safe-heap_disable-simd.wast
new file mode 100644
index 000000000..3af8f2545
--- /dev/null
+++ b/test/passes/safe-heap_disable-simd.wast
@@ -0,0 +1 @@
+(module)
diff --git a/test/simd.wast b/test/simd.wast
new file mode 100644
index 000000000..79ecaeeaf
--- /dev/null
+++ b/test/simd.wast
@@ -0,0 +1,793 @@
+(module
+ (func $v128.load (param $0 i32) (result v128)
+ (v128.load offset=0 align=16
+ (get_local $0)
+ )
+ )
+ (func $v128.store (param $0 i32) (param $1 v128)
+ (v128.store offset=0 align=16
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $v128.const (result v128)
+ (v128.const i32 1 2 3 4)
+ )
+ (func $v128.shuffle (param $0 v128) (param $1 v128) (result v128)
+ (v8x16.shuffle 0 17 2 19 4 21 6 23 8 25 10 27 12 29 14 31
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.splat (param $0 i32) (result v128)
+ (i8x16.splat
+ (get_local $0)
+ )
+ )
+ (func $i8x16.extract_lane_s (param $0 v128) (result i32)
+ (i8x16.extract_lane_s 0
+ (get_local $0)
+ )
+ )
+ (func $i8x16.extract_lane_u (param $0 v128) (result i32)
+ (i8x16.extract_lane_u 0
+ (get_local $0)
+ )
+ )
+ (func $i8x16.replace_lane (param $0 v128) (param $1 i32) (result v128)
+ (i8x16.replace_lane 0
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.splat (param $0 i32) (result v128)
+ (i16x8.splat
+ (get_local $0)
+ )
+ )
+ (func $i16x8.extract_lane_s (param $0 v128) (result i32)
+ (i16x8.extract_lane_s 0
+ (get_local $0)
+ )
+ )
+ (func $i16x8.extract_lane_u (param $0 v128) (result i32)
+ (i16x8.extract_lane_u 0
+ (get_local $0)
+ )
+ )
+ (func $i16x8.replace_lane (param $0 v128) (param $1 i32) (result v128)
+ (i16x8.replace_lane 0
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.splat (param $0 i32) (result v128)
+ (i32x4.splat
+ (get_local $0)
+ )
+ )
+ (func $i32x4.extract_lane (param $0 v128) (result i32)
+ (i32x4.extract_lane 0
+ (get_local $0)
+ )
+ )
+ (func $i32x4.replace_lane (param $0 v128) (param $1 i32) (result v128)
+ (i32x4.replace_lane 0
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i64x2.extract_lane (param $0 v128) (result i64)
+ (i64x2.extract_lane 0
+ (get_local $0)
+ )
+ )
+ (func $i64x2.replace_lane (param $0 v128) (param $1 i64) (result v128)
+ (i64x2.replace_lane 0
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.splat (param $0 f32) (result v128)
+ (f32x4.splat
+ (get_local $0)
+ )
+ )
+ (func $f32x4.extract_lane (param $0 v128) (result f32)
+ (f32x4.extract_lane 0
+ (get_local $0)
+ )
+ )
+ (func $f32x4.replace_lane (param $0 v128) (param $1 f32) (result v128)
+ (f32x4.replace_lane 0
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.splat (param $0 f64) (result v128)
+ (f64x2.splat
+ (get_local $0)
+ )
+ )
+ (func $f64x2.extract_lane (param $0 v128) (result f64)
+ (f64x2.extract_lane 0
+ (get_local $0)
+ )
+ )
+ (func $f64x2.replace_lane (param $0 v128) (param $1 f64) (result v128)
+ (f64x2.replace_lane 0
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.eq (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.eq
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.ne (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.ne
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.lt_s (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.lt_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.lt_u (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.lt_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.gt_s (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.gt_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.gt_u (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.gt_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.le_s (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.le_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.le_u (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.le_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.ge_s (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.ge_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.ge_u (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.ge_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.eq (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.eq
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.ne (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.ne
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.lt_s (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.lt_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.lt_u (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.lt_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.gt_s (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.gt_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.gt_u (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.gt_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.le_s (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.le_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.le_u (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.le_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.ge_s (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.ge_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.ge_u (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.ge_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.eq (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.eq
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.ne (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.ne
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.lt_s (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.lt_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.lt_u (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.lt_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.gt_s (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.gt_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.gt_u (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.gt_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.le_s (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.le_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.le_u (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.le_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.ge_s (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.ge_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.ge_u (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.ge_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.eq (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.eq
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.ne (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.ne
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.lt (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.lt
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.gt (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.gt
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.le (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.le
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.ge (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.ge
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.eq (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.eq
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.ne (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.ne
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.lt (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.lt
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.gt (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.gt
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.le (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.le
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.ge (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.ge
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $v128.not (param $0 v128) (result v128)
+ (v128.not
+ (get_local $0)
+ )
+ )
+ (func $v128.and (param $0 v128) (param $1 v128) (result v128)
+ (v128.and
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $v128.or (param $0 v128) (param $1 v128) (result v128)
+ (v128.or
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $v128.xor (param $0 v128) (param $1 v128) (result v128)
+ (v128.xor
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $v128.bitselect (param $0 v128) (param $1 v128) (param $2 v128) (result v128)
+ (v128.bitselect
+ (get_local $0)
+ (get_local $1)
+ (get_local $2)
+ )
+ )
+ (func $i8x16.neg (param $0 v128) (result v128)
+ (i8x16.neg
+ (get_local $0)
+ )
+ )
+ (func $i8x16.any_true (param $0 v128) (result i32)
+ (i8x16.any_true
+ (get_local $0)
+ )
+ )
+ (func $i8x16.all_true (param $0 v128) (result i32)
+ (i8x16.all_true
+ (get_local $0)
+ )
+ )
+ (func $i8x16.shl (param $0 v128) (param $1 i32) (result v128)
+ (i8x16.shl
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.shr_s (param $0 v128) (param $1 i32) (result v128)
+ (i8x16.shr_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.shr_u (param $0 v128) (param $1 i32) (result v128)
+ (i8x16.shr_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.add (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.add_saturate_s (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.add_saturate_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.add_saturate_u (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.add_saturate_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.sub (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.sub
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.sub_saturate_s (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.sub_saturate_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.sub_saturate_u (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.sub_saturate_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.mul (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.mul
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.neg (param $0 v128) (result v128)
+ (i16x8.neg
+ (get_local $0)
+ )
+ )
+ (func $i16x8.any_true (param $0 v128) (result i32)
+ (i16x8.any_true
+ (get_local $0)
+ )
+ )
+ (func $i16x8.all_true (param $0 v128) (result i32)
+ (i16x8.all_true
+ (get_local $0)
+ )
+ )
+ (func $i16x8.shl (param $0 v128) (param $1 i32) (result v128)
+ (i16x8.shl
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.shr_s (param $0 v128) (param $1 i32) (result v128)
+ (i16x8.shr_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.shr_u (param $0 v128) (param $1 i32) (result v128)
+ (i16x8.shr_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.add (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.add_saturate_s (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.add_saturate_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.add_saturate_u (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.add_saturate_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.sub (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.sub
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.sub_saturate_s (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.sub_saturate_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.sub_saturate_u (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.sub_saturate_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.mul (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.mul
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.neg (param $0 v128) (result v128)
+ (i32x4.neg
+ (get_local $0)
+ )
+ )
+ (func $i32x4.any_true (param $0 v128) (result i32)
+ (i32x4.any_true
+ (get_local $0)
+ )
+ )
+ (func $i32x4.all_true (param $0 v128) (result i32)
+ (i32x4.all_true
+ (get_local $0)
+ )
+ )
+ (func $i32x4.shl (param $0 v128) (param $1 i32) (result v128)
+ (i32x4.shl
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.shr_s (param $0 v128) (param $1 i32) (result v128)
+ (i32x4.shr_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.shr_u (param $0 v128) (param $1 i32) (result v128)
+ (i32x4.shr_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.add (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.sub (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.sub
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.mul (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.mul
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i64x2.neg (param $0 v128) (result v128)
+ (i64x2.neg
+ (get_local $0)
+ )
+ )
+ (func $i64x2.any_true (param $0 v128) (result i32)
+ (i64x2.any_true
+ (get_local $0)
+ )
+ )
+ (func $i64x2.all_true (param $0 v128) (result i32)
+ (i64x2.all_true
+ (get_local $0)
+ )
+ )
+ (func $i64x2.shl (param $0 v128) (param $1 i32) (result v128)
+ (i64x2.shl
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i64x2.shr_s (param $0 v128) (param $1 i32) (result v128)
+ (i64x2.shr_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i64x2.shr_u (param $0 v128) (param $1 i32) (result v128)
+ (i64x2.shr_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i64x2.add (param $0 v128) (param $1 v128) (result v128)
+ (i64x2.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i64x2.sub (param $0 v128) (param $1 v128) (result v128)
+ (i64x2.sub
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.add (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.sub (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.sub
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.mul (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.mul
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.div (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.div
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.min (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.min
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.max (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.max
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.abs (param $0 v128) (result v128)
+ (f32x4.abs
+ (get_local $0)
+ )
+ )
+ (func $f32x4.neg (param $0 v128) (result v128)
+ (f32x4.neg
+ (get_local $0)
+ )
+ )
+ (func $f32x4.sqrt (param $0 v128) (result v128)
+ (f32x4.sqrt
+ (get_local $0)
+ )
+ )
+ (func $f64x2.add (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.sub (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.sub
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.mul (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.mul
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.div (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.div
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.min (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.min
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.max (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.max
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.abs (param $0 v128) (result v128)
+ (f64x2.abs
+ (get_local $0)
+ )
+ )
+ (func $f64x2.neg (param $0 v128) (result v128)
+ (f64x2.neg
+ (get_local $0)
+ )
+ )
+ (func $f64x2.sqrt (param $0 v128) (result v128)
+ (f64x2.sqrt
+ (get_local $0)
+ )
+ )
+ (func $i32x4.trunc_s/f32x4:sat (param $0 v128) (result v128)
+ (i32x4.trunc_s/f32x4:sat
+ (get_local $0)
+ )
+ )
+ (func $i32x4.trunc_u/f32x4:sat (param $0 v128) (result v128)
+ (i32x4.trunc_u/f32x4:sat
+ (get_local $0)
+ )
+ )
+ (func $i64x2.trunc_s/f64x2:sat (param $0 v128) (result v128)
+ (i64x2.trunc_s/f64x2:sat
+ (get_local $0)
+ )
+ )
+ (func $i64x2.trunc_u/f64x2:sat (param $0 v128) (result v128)
+ (i64x2.trunc_u/f64x2:sat
+ (get_local $0)
+ )
+ )
+ (func $f32x4.convert_s/i32x4 (param $0 v128) (result v128)
+ (f32x4.convert_s/i32x4
+ (get_local $0)
+ )
+ )
+ (func $f32x4.convert_u/i32x4 (param $0 v128) (result v128)
+ (f32x4.convert_u/i32x4
+ (get_local $0)
+ )
+ )
+ (func $f64x2.convert_s/i64x2 (param $0 v128) (result v128)
+ (f64x2.convert_s/i64x2
+ (get_local $0)
+ )
+ )
+ (func $f64x2.convert_u/i64x2 (param $0 v128) (result v128)
+ (f64x2.convert_u/i64x2
+ (get_local $0)
+ )
+ )
+)
diff --git a/test/simd.wast.from-wast b/test/simd.wast.from-wast
new file mode 100644
index 000000000..76ff5977e
--- /dev/null
+++ b/test/simd.wast.from-wast
@@ -0,0 +1,809 @@
+(module
+ (type $0 (func (param i32) (result v128)))
+ (type $1 (func (param i32 v128)))
+ (type $2 (func (result v128)))
+ (type $3 (func (param v128 v128) (result v128)))
+ (type $4 (func (param v128) (result i32)))
+ (type $5 (func (param v128 i32) (result v128)))
+ (type $6 (func (param v128) (result i64)))
+ (type $7 (func (param v128 i64) (result v128)))
+ (type $8 (func (param f32) (result v128)))
+ (type $9 (func (param v128) (result f32)))
+ (type $10 (func (param v128 f32) (result v128)))
+ (type $11 (func (param f64) (result v128)))
+ (type $12 (func (param v128) (result f64)))
+ (type $13 (func (param v128 f64) (result v128)))
+ (type $14 (func (param v128) (result v128)))
+ (type $15 (func (param v128 v128 v128) (result v128)))
+ (func $v128.load (; 0 ;) (type $0) (param $0 i32) (result v128)
+ (v128.load
+ (get_local $0)
+ )
+ )
+ (func $v128.store (; 1 ;) (type $1) (param $0 i32) (param $1 v128)
+ (v128.store
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $v128.const (; 2 ;) (type $2) (result v128)
+ (v128.const i32 0x1 0x0 0x0 0x0 0x2 0x0 0x0 0x0 0x3 0x0 0x0 0x0 0x4 0x0 0x0 0x0)
+ )
+ (func $v128.shuffle (; 3 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (v8x16.shuffle 0 17 2 19 4 21 6 23 8 25 10 27 12 29 14 31
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.splat (; 4 ;) (type $0) (param $0 i32) (result v128)
+ (i8x16.splat
+ (get_local $0)
+ )
+ )
+ (func $i8x16.extract_lane_s (; 5 ;) (type $4) (param $0 v128) (result i32)
+ (i8x16.extract_lane_s 0
+ (get_local $0)
+ )
+ )
+ (func $i8x16.extract_lane_u (; 6 ;) (type $4) (param $0 v128) (result i32)
+ (i8x16.extract_lane_u 0
+ (get_local $0)
+ )
+ )
+ (func $i8x16.replace_lane (; 7 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i8x16.replace_lane 0
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.splat (; 8 ;) (type $0) (param $0 i32) (result v128)
+ (i16x8.splat
+ (get_local $0)
+ )
+ )
+ (func $i16x8.extract_lane_s (; 9 ;) (type $4) (param $0 v128) (result i32)
+ (i16x8.extract_lane_s 0
+ (get_local $0)
+ )
+ )
+ (func $i16x8.extract_lane_u (; 10 ;) (type $4) (param $0 v128) (result i32)
+ (i16x8.extract_lane_u 0
+ (get_local $0)
+ )
+ )
+ (func $i16x8.replace_lane (; 11 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i16x8.replace_lane 0
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.splat (; 12 ;) (type $0) (param $0 i32) (result v128)
+ (i32x4.splat
+ (get_local $0)
+ )
+ )
+ (func $i32x4.extract_lane (; 13 ;) (type $4) (param $0 v128) (result i32)
+ (i32x4.extract_lane 0
+ (get_local $0)
+ )
+ )
+ (func $i32x4.replace_lane (; 14 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i32x4.replace_lane 0
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i64x2.extract_lane (; 15 ;) (type $6) (param $0 v128) (result i64)
+ (i64x2.extract_lane 0
+ (get_local $0)
+ )
+ )
+ (func $i64x2.replace_lane (; 16 ;) (type $7) (param $0 v128) (param $1 i64) (result v128)
+ (i64x2.replace_lane 0
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.splat (; 17 ;) (type $8) (param $0 f32) (result v128)
+ (f32x4.splat
+ (get_local $0)
+ )
+ )
+ (func $f32x4.extract_lane (; 18 ;) (type $9) (param $0 v128) (result f32)
+ (f32x4.extract_lane 0
+ (get_local $0)
+ )
+ )
+ (func $f32x4.replace_lane (; 19 ;) (type $10) (param $0 v128) (param $1 f32) (result v128)
+ (f32x4.replace_lane 0
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.splat (; 20 ;) (type $11) (param $0 f64) (result v128)
+ (f64x2.splat
+ (get_local $0)
+ )
+ )
+ (func $f64x2.extract_lane (; 21 ;) (type $12) (param $0 v128) (result f64)
+ (f64x2.extract_lane 0
+ (get_local $0)
+ )
+ )
+ (func $f64x2.replace_lane (; 22 ;) (type $13) (param $0 v128) (param $1 f64) (result v128)
+ (f64x2.replace_lane 0
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.eq (; 23 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.eq
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.ne (; 24 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.ne
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.lt_s (; 25 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.lt_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.lt_u (; 26 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.lt_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.gt_s (; 27 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.gt_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.gt_u (; 28 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.gt_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.le_s (; 29 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.le_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.le_u (; 30 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.le_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.ge_s (; 31 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.ge_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.ge_u (; 32 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.ge_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.eq (; 33 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.eq
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.ne (; 34 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.ne
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.lt_s (; 35 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.lt_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.lt_u (; 36 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.lt_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.gt_s (; 37 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.gt_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.gt_u (; 38 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.gt_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.le_s (; 39 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.le_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.le_u (; 40 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.le_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.ge_s (; 41 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.ge_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.ge_u (; 42 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.ge_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.eq (; 43 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.eq
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.ne (; 44 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.ne
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.lt_s (; 45 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.lt_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.lt_u (; 46 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.lt_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.gt_s (; 47 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.gt_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.gt_u (; 48 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.gt_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.le_s (; 49 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.le_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.le_u (; 50 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.le_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.ge_s (; 51 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.ge_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.ge_u (; 52 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.ge_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.eq (; 53 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.eq
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.ne (; 54 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.ne
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.lt (; 55 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.lt
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.gt (; 56 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.gt
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.le (; 57 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.le
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.ge (; 58 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.ge
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.eq (; 59 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.eq
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.ne (; 60 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.ne
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.lt (; 61 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.lt
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.gt (; 62 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.gt
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.le (; 63 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.le
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.ge (; 64 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.ge
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $v128.not (; 65 ;) (type $14) (param $0 v128) (result v128)
+ (v128.not
+ (get_local $0)
+ )
+ )
+ (func $v128.and (; 66 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (v128.and
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $v128.or (; 67 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (v128.or
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $v128.xor (; 68 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (v128.xor
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $v128.bitselect (; 69 ;) (type $15) (param $0 v128) (param $1 v128) (param $2 v128) (result v128)
+ (v128.bitselect
+ (get_local $0)
+ (get_local $1)
+ (get_local $2)
+ )
+ )
+ (func $i8x16.neg (; 70 ;) (type $14) (param $0 v128) (result v128)
+ (i8x16.neg
+ (get_local $0)
+ )
+ )
+ (func $i8x16.any_true (; 71 ;) (type $4) (param $0 v128) (result i32)
+ (i8x16.any_true
+ (get_local $0)
+ )
+ )
+ (func $i8x16.all_true (; 72 ;) (type $4) (param $0 v128) (result i32)
+ (i8x16.all_true
+ (get_local $0)
+ )
+ )
+ (func $i8x16.shl (; 73 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i8x16.shl
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.shr_s (; 74 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i8x16.shr_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.shr_u (; 75 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i8x16.shr_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.add (; 76 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.add_saturate_s (; 77 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.add_saturate_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.add_saturate_u (; 78 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.add_saturate_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.sub (; 79 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.sub
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.sub_saturate_s (; 80 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.sub_saturate_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.sub_saturate_u (; 81 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.sub_saturate_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.mul (; 82 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.mul
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.neg (; 83 ;) (type $14) (param $0 v128) (result v128)
+ (i16x8.neg
+ (get_local $0)
+ )
+ )
+ (func $i16x8.any_true (; 84 ;) (type $4) (param $0 v128) (result i32)
+ (i16x8.any_true
+ (get_local $0)
+ )
+ )
+ (func $i16x8.all_true (; 85 ;) (type $4) (param $0 v128) (result i32)
+ (i16x8.all_true
+ (get_local $0)
+ )
+ )
+ (func $i16x8.shl (; 86 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i16x8.shl
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.shr_s (; 87 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i16x8.shr_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.shr_u (; 88 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i16x8.shr_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.add (; 89 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.add_saturate_s (; 90 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.add_saturate_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.add_saturate_u (; 91 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.add_saturate_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.sub (; 92 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.sub
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.sub_saturate_s (; 93 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.sub_saturate_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.sub_saturate_u (; 94 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.sub_saturate_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.mul (; 95 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.mul
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.neg (; 96 ;) (type $14) (param $0 v128) (result v128)
+ (i32x4.neg
+ (get_local $0)
+ )
+ )
+ (func $i32x4.any_true (; 97 ;) (type $4) (param $0 v128) (result i32)
+ (i32x4.any_true
+ (get_local $0)
+ )
+ )
+ (func $i32x4.all_true (; 98 ;) (type $4) (param $0 v128) (result i32)
+ (i32x4.all_true
+ (get_local $0)
+ )
+ )
+ (func $i32x4.shl (; 99 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i32x4.shl
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.shr_s (; 100 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i32x4.shr_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.shr_u (; 101 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i32x4.shr_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.add (; 102 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.sub (; 103 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.sub
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.mul (; 104 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.mul
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i64x2.neg (; 105 ;) (type $14) (param $0 v128) (result v128)
+ (i64x2.neg
+ (get_local $0)
+ )
+ )
+ (func $i64x2.any_true (; 106 ;) (type $4) (param $0 v128) (result i32)
+ (i64x2.any_true
+ (get_local $0)
+ )
+ )
+ (func $i64x2.all_true (; 107 ;) (type $4) (param $0 v128) (result i32)
+ (i64x2.all_true
+ (get_local $0)
+ )
+ )
+ (func $i64x2.shl (; 108 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i64x2.shl
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i64x2.shr_s (; 109 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i64x2.shr_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i64x2.shr_u (; 110 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i64x2.shr_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i64x2.add (; 111 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i64x2.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i64x2.sub (; 112 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i64x2.sub
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.add (; 113 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.sub (; 114 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.sub
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.mul (; 115 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.mul
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.div (; 116 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.div
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.min (; 117 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.min
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.max (; 118 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.max
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.abs (; 119 ;) (type $14) (param $0 v128) (result v128)
+ (f32x4.abs
+ (get_local $0)
+ )
+ )
+ (func $f32x4.neg (; 120 ;) (type $14) (param $0 v128) (result v128)
+ (f32x4.neg
+ (get_local $0)
+ )
+ )
+ (func $f32x4.sqrt (; 121 ;) (type $14) (param $0 v128) (result v128)
+ (f32x4.sqrt
+ (get_local $0)
+ )
+ )
+ (func $f64x2.add (; 122 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.sub (; 123 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.sub
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.mul (; 124 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.mul
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.div (; 125 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.div
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.min (; 126 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.min
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.max (; 127 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.max
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.abs (; 128 ;) (type $14) (param $0 v128) (result v128)
+ (f64x2.abs
+ (get_local $0)
+ )
+ )
+ (func $f64x2.neg (; 129 ;) (type $14) (param $0 v128) (result v128)
+ (f64x2.neg
+ (get_local $0)
+ )
+ )
+ (func $f64x2.sqrt (; 130 ;) (type $14) (param $0 v128) (result v128)
+ (f64x2.sqrt
+ (get_local $0)
+ )
+ )
+ (func $i32x4.trunc_s/f32x4:sat (; 131 ;) (type $14) (param $0 v128) (result v128)
+ (i32x4.trunc_s/f32x4:sat
+ (get_local $0)
+ )
+ )
+ (func $i32x4.trunc_u/f32x4:sat (; 132 ;) (type $14) (param $0 v128) (result v128)
+ (i32x4.trunc_u/f32x4:sat
+ (get_local $0)
+ )
+ )
+ (func $i64x2.trunc_s/f64x2:sat (; 133 ;) (type $14) (param $0 v128) (result v128)
+ (i64x2.trunc_s/f64x2:sat
+ (get_local $0)
+ )
+ )
+ (func $i64x2.trunc_u/f64x2:sat (; 134 ;) (type $14) (param $0 v128) (result v128)
+ (i64x2.trunc_u/f64x2:sat
+ (get_local $0)
+ )
+ )
+ (func $f32x4.convert_s/i32x4 (; 135 ;) (type $14) (param $0 v128) (result v128)
+ (f32x4.convert_s/i32x4
+ (get_local $0)
+ )
+ )
+ (func $f32x4.convert_u/i32x4 (; 136 ;) (type $14) (param $0 v128) (result v128)
+ (f32x4.convert_u/i32x4
+ (get_local $0)
+ )
+ )
+ (func $f64x2.convert_s/i64x2 (; 137 ;) (type $14) (param $0 v128) (result v128)
+ (f64x2.convert_s/i64x2
+ (get_local $0)
+ )
+ )
+ (func $f64x2.convert_u/i64x2 (; 138 ;) (type $14) (param $0 v128) (result v128)
+ (f64x2.convert_u/i64x2
+ (get_local $0)
+ )
+ )
+)
diff --git a/test/simd.wast.fromBinary b/test/simd.wast.fromBinary
new file mode 100644
index 000000000..e3210a891
--- /dev/null
+++ b/test/simd.wast.fromBinary
@@ -0,0 +1,810 @@
+(module
+ (type $0 (func (param i32) (result v128)))
+ (type $1 (func (param i32 v128)))
+ (type $2 (func (result v128)))
+ (type $3 (func (param v128 v128) (result v128)))
+ (type $4 (func (param v128) (result i32)))
+ (type $5 (func (param v128 i32) (result v128)))
+ (type $6 (func (param v128) (result i64)))
+ (type $7 (func (param v128 i64) (result v128)))
+ (type $8 (func (param f32) (result v128)))
+ (type $9 (func (param v128) (result f32)))
+ (type $10 (func (param v128 f32) (result v128)))
+ (type $11 (func (param f64) (result v128)))
+ (type $12 (func (param v128) (result f64)))
+ (type $13 (func (param v128 f64) (result v128)))
+ (type $14 (func (param v128) (result v128)))
+ (type $15 (func (param v128 v128 v128) (result v128)))
+ (func $v128.load (; 0 ;) (type $0) (param $0 i32) (result v128)
+ (v128.load
+ (get_local $0)
+ )
+ )
+ (func $v128.store (; 1 ;) (type $1) (param $0 i32) (param $1 v128)
+ (v128.store
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $v128.const (; 2 ;) (type $2) (result v128)
+ (v128.const i32 0x1 0x0 0x0 0x0 0x2 0x0 0x0 0x0 0x3 0x0 0x0 0x0 0x4 0x0 0x0 0x0)
+ )
+ (func $v128.shuffle (; 3 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (v8x16.shuffle 0 17 2 19 4 21 6 23 8 25 10 27 12 29 14 31
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.splat (; 4 ;) (type $0) (param $0 i32) (result v128)
+ (i8x16.splat
+ (get_local $0)
+ )
+ )
+ (func $i8x16.extract_lane_s (; 5 ;) (type $4) (param $0 v128) (result i32)
+ (i8x16.extract_lane_s 0
+ (get_local $0)
+ )
+ )
+ (func $i8x16.extract_lane_u (; 6 ;) (type $4) (param $0 v128) (result i32)
+ (i8x16.extract_lane_u 0
+ (get_local $0)
+ )
+ )
+ (func $i8x16.replace_lane (; 7 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i8x16.replace_lane 0
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.splat (; 8 ;) (type $0) (param $0 i32) (result v128)
+ (i16x8.splat
+ (get_local $0)
+ )
+ )
+ (func $i16x8.extract_lane_s (; 9 ;) (type $4) (param $0 v128) (result i32)
+ (i16x8.extract_lane_s 0
+ (get_local $0)
+ )
+ )
+ (func $i16x8.extract_lane_u (; 10 ;) (type $4) (param $0 v128) (result i32)
+ (i16x8.extract_lane_u 0
+ (get_local $0)
+ )
+ )
+ (func $i16x8.replace_lane (; 11 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i16x8.replace_lane 0
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.splat (; 12 ;) (type $0) (param $0 i32) (result v128)
+ (i32x4.splat
+ (get_local $0)
+ )
+ )
+ (func $i32x4.extract_lane (; 13 ;) (type $4) (param $0 v128) (result i32)
+ (i32x4.extract_lane 0
+ (get_local $0)
+ )
+ )
+ (func $i32x4.replace_lane (; 14 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i32x4.replace_lane 0
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i64x2.extract_lane (; 15 ;) (type $6) (param $0 v128) (result i64)
+ (i64x2.extract_lane 0
+ (get_local $0)
+ )
+ )
+ (func $i64x2.replace_lane (; 16 ;) (type $7) (param $0 v128) (param $1 i64) (result v128)
+ (i64x2.replace_lane 0
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.splat (; 17 ;) (type $8) (param $0 f32) (result v128)
+ (f32x4.splat
+ (get_local $0)
+ )
+ )
+ (func $f32x4.extract_lane (; 18 ;) (type $9) (param $0 v128) (result f32)
+ (f32x4.extract_lane 0
+ (get_local $0)
+ )
+ )
+ (func $f32x4.replace_lane (; 19 ;) (type $10) (param $0 v128) (param $1 f32) (result v128)
+ (f32x4.replace_lane 0
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.splat (; 20 ;) (type $11) (param $0 f64) (result v128)
+ (f64x2.splat
+ (get_local $0)
+ )
+ )
+ (func $f64x2.extract_lane (; 21 ;) (type $12) (param $0 v128) (result f64)
+ (f64x2.extract_lane 0
+ (get_local $0)
+ )
+ )
+ (func $f64x2.replace_lane (; 22 ;) (type $13) (param $0 v128) (param $1 f64) (result v128)
+ (f64x2.replace_lane 0
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.eq (; 23 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.eq
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.ne (; 24 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.ne
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.lt_s (; 25 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.lt_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.lt_u (; 26 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.lt_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.gt_s (; 27 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.gt_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.gt_u (; 28 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.gt_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.le_s (; 29 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.le_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.le_u (; 30 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.le_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.ge_s (; 31 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.ge_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.ge_u (; 32 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.ge_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.eq (; 33 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.eq
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.ne (; 34 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.ne
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.lt_s (; 35 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.lt_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.lt_u (; 36 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.lt_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.gt_s (; 37 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.gt_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.gt_u (; 38 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.gt_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.le_s (; 39 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.le_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.le_u (; 40 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.le_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.ge_s (; 41 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.ge_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.ge_u (; 42 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.ge_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.eq (; 43 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.eq
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.ne (; 44 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.ne
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.lt_s (; 45 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.lt_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.lt_u (; 46 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.lt_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.gt_s (; 47 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.gt_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.gt_u (; 48 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.gt_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.le_s (; 49 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.le_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.le_u (; 50 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.le_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.ge_s (; 51 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.ge_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.ge_u (; 52 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.ge_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.eq (; 53 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.eq
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.ne (; 54 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.ne
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.lt (; 55 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.lt
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.gt (; 56 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.gt
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.le (; 57 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.le
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.ge (; 58 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.ge
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.eq (; 59 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.eq
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.ne (; 60 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.ne
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.lt (; 61 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.lt
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.gt (; 62 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.gt
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.le (; 63 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.le
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.ge (; 64 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.ge
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $v128.not (; 65 ;) (type $14) (param $0 v128) (result v128)
+ (v128.not
+ (get_local $0)
+ )
+ )
+ (func $v128.and (; 66 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (v128.and
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $v128.or (; 67 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (v128.or
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $v128.xor (; 68 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (v128.xor
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $v128.bitselect (; 69 ;) (type $15) (param $0 v128) (param $1 v128) (param $2 v128) (result v128)
+ (v128.bitselect
+ (get_local $0)
+ (get_local $1)
+ (get_local $2)
+ )
+ )
+ (func $i8x16.neg (; 70 ;) (type $14) (param $0 v128) (result v128)
+ (i8x16.neg
+ (get_local $0)
+ )
+ )
+ (func $i8x16.any_true (; 71 ;) (type $4) (param $0 v128) (result i32)
+ (i8x16.any_true
+ (get_local $0)
+ )
+ )
+ (func $i8x16.all_true (; 72 ;) (type $4) (param $0 v128) (result i32)
+ (i8x16.all_true
+ (get_local $0)
+ )
+ )
+ (func $i8x16.shl (; 73 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i8x16.shl
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.shr_s (; 74 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i8x16.shr_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.shr_u (; 75 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i8x16.shr_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.add (; 76 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.add_saturate_s (; 77 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.add_saturate_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.add_saturate_u (; 78 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.add_saturate_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.sub (; 79 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.sub
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.sub_saturate_s (; 80 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.sub_saturate_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.sub_saturate_u (; 81 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.sub_saturate_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i8x16.mul (; 82 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.mul
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.neg (; 83 ;) (type $14) (param $0 v128) (result v128)
+ (i16x8.neg
+ (get_local $0)
+ )
+ )
+ (func $i16x8.any_true (; 84 ;) (type $4) (param $0 v128) (result i32)
+ (i16x8.any_true
+ (get_local $0)
+ )
+ )
+ (func $i16x8.all_true (; 85 ;) (type $4) (param $0 v128) (result i32)
+ (i16x8.all_true
+ (get_local $0)
+ )
+ )
+ (func $i16x8.shl (; 86 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i16x8.shl
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.shr_s (; 87 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i16x8.shr_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.shr_u (; 88 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i16x8.shr_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.add (; 89 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.add_saturate_s (; 90 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.add_saturate_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.add_saturate_u (; 91 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.add_saturate_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.sub (; 92 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.sub
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.sub_saturate_s (; 93 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.sub_saturate_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.sub_saturate_u (; 94 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.sub_saturate_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i16x8.mul (; 95 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.mul
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.neg (; 96 ;) (type $14) (param $0 v128) (result v128)
+ (i32x4.neg
+ (get_local $0)
+ )
+ )
+ (func $i32x4.any_true (; 97 ;) (type $4) (param $0 v128) (result i32)
+ (i32x4.any_true
+ (get_local $0)
+ )
+ )
+ (func $i32x4.all_true (; 98 ;) (type $4) (param $0 v128) (result i32)
+ (i32x4.all_true
+ (get_local $0)
+ )
+ )
+ (func $i32x4.shl (; 99 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i32x4.shl
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.shr_s (; 100 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i32x4.shr_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.shr_u (; 101 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i32x4.shr_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.add (; 102 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.sub (; 103 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.sub
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i32x4.mul (; 104 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.mul
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i64x2.neg (; 105 ;) (type $14) (param $0 v128) (result v128)
+ (i64x2.neg
+ (get_local $0)
+ )
+ )
+ (func $i64x2.any_true (; 106 ;) (type $4) (param $0 v128) (result i32)
+ (i64x2.any_true
+ (get_local $0)
+ )
+ )
+ (func $i64x2.all_true (; 107 ;) (type $4) (param $0 v128) (result i32)
+ (i64x2.all_true
+ (get_local $0)
+ )
+ )
+ (func $i64x2.shl (; 108 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i64x2.shl
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i64x2.shr_s (; 109 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i64x2.shr_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i64x2.shr_u (; 110 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i64x2.shr_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i64x2.add (; 111 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i64x2.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $i64x2.sub (; 112 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i64x2.sub
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.add (; 113 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.sub (; 114 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.sub
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.mul (; 115 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.mul
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.div (; 116 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.div
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.min (; 117 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.min
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.max (; 118 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.max
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f32x4.abs (; 119 ;) (type $14) (param $0 v128) (result v128)
+ (f32x4.abs
+ (get_local $0)
+ )
+ )
+ (func $f32x4.neg (; 120 ;) (type $14) (param $0 v128) (result v128)
+ (f32x4.neg
+ (get_local $0)
+ )
+ )
+ (func $f32x4.sqrt (; 121 ;) (type $14) (param $0 v128) (result v128)
+ (f32x4.sqrt
+ (get_local $0)
+ )
+ )
+ (func $f64x2.add (; 122 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.sub (; 123 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.sub
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.mul (; 124 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.mul
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.div (; 125 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.div
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.min (; 126 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.min
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.max (; 127 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.max
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $f64x2.abs (; 128 ;) (type $14) (param $0 v128) (result v128)
+ (f64x2.abs
+ (get_local $0)
+ )
+ )
+ (func $f64x2.neg (; 129 ;) (type $14) (param $0 v128) (result v128)
+ (f64x2.neg
+ (get_local $0)
+ )
+ )
+ (func $f64x2.sqrt (; 130 ;) (type $14) (param $0 v128) (result v128)
+ (f64x2.sqrt
+ (get_local $0)
+ )
+ )
+ (func $i32x4.trunc_s/f32x4:sat (; 131 ;) (type $14) (param $0 v128) (result v128)
+ (i32x4.trunc_s/f32x4:sat
+ (get_local $0)
+ )
+ )
+ (func $i32x4.trunc_u/f32x4:sat (; 132 ;) (type $14) (param $0 v128) (result v128)
+ (i32x4.trunc_u/f32x4:sat
+ (get_local $0)
+ )
+ )
+ (func $i64x2.trunc_s/f64x2:sat (; 133 ;) (type $14) (param $0 v128) (result v128)
+ (i64x2.trunc_s/f64x2:sat
+ (get_local $0)
+ )
+ )
+ (func $i64x2.trunc_u/f64x2:sat (; 134 ;) (type $14) (param $0 v128) (result v128)
+ (i64x2.trunc_u/f64x2:sat
+ (get_local $0)
+ )
+ )
+ (func $f32x4.convert_s/i32x4 (; 135 ;) (type $14) (param $0 v128) (result v128)
+ (f32x4.convert_s/i32x4
+ (get_local $0)
+ )
+ )
+ (func $f32x4.convert_u/i32x4 (; 136 ;) (type $14) (param $0 v128) (result v128)
+ (f32x4.convert_u/i32x4
+ (get_local $0)
+ )
+ )
+ (func $f64x2.convert_s/i64x2 (; 137 ;) (type $14) (param $0 v128) (result v128)
+ (f64x2.convert_s/i64x2
+ (get_local $0)
+ )
+ )
+ (func $f64x2.convert_u/i64x2 (; 138 ;) (type $14) (param $0 v128) (result v128)
+ (f64x2.convert_u/i64x2
+ (get_local $0)
+ )
+ )
+)
+
diff --git a/test/simd.wast.fromBinary.noDebugInfo b/test/simd.wast.fromBinary.noDebugInfo
new file mode 100644
index 000000000..e2d5c9647
--- /dev/null
+++ b/test/simd.wast.fromBinary.noDebugInfo
@@ -0,0 +1,810 @@
+(module
+ (type $0 (func (param i32) (result v128)))
+ (type $1 (func (param i32 v128)))
+ (type $2 (func (result v128)))
+ (type $3 (func (param v128 v128) (result v128)))
+ (type $4 (func (param v128) (result i32)))
+ (type $5 (func (param v128 i32) (result v128)))
+ (type $6 (func (param v128) (result i64)))
+ (type $7 (func (param v128 i64) (result v128)))
+ (type $8 (func (param f32) (result v128)))
+ (type $9 (func (param v128) (result f32)))
+ (type $10 (func (param v128 f32) (result v128)))
+ (type $11 (func (param f64) (result v128)))
+ (type $12 (func (param v128) (result f64)))
+ (type $13 (func (param v128 f64) (result v128)))
+ (type $14 (func (param v128) (result v128)))
+ (type $15 (func (param v128 v128 v128) (result v128)))
+ (func $0 (; 0 ;) (type $0) (param $0 i32) (result v128)
+ (v128.load
+ (get_local $0)
+ )
+ )
+ (func $1 (; 1 ;) (type $1) (param $0 i32) (param $1 v128)
+ (v128.store
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $2 (; 2 ;) (type $2) (result v128)
+ (v128.const i32 0x1 0x0 0x0 0x0 0x2 0x0 0x0 0x0 0x3 0x0 0x0 0x0 0x4 0x0 0x0 0x0)
+ )
+ (func $3 (; 3 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (v8x16.shuffle 0 17 2 19 4 21 6 23 8 25 10 27 12 29 14 31
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $4 (; 4 ;) (type $0) (param $0 i32) (result v128)
+ (i8x16.splat
+ (get_local $0)
+ )
+ )
+ (func $5 (; 5 ;) (type $4) (param $0 v128) (result i32)
+ (i8x16.extract_lane_s 0
+ (get_local $0)
+ )
+ )
+ (func $6 (; 6 ;) (type $4) (param $0 v128) (result i32)
+ (i8x16.extract_lane_u 0
+ (get_local $0)
+ )
+ )
+ (func $7 (; 7 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i8x16.replace_lane 0
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $8 (; 8 ;) (type $0) (param $0 i32) (result v128)
+ (i16x8.splat
+ (get_local $0)
+ )
+ )
+ (func $9 (; 9 ;) (type $4) (param $0 v128) (result i32)
+ (i16x8.extract_lane_s 0
+ (get_local $0)
+ )
+ )
+ (func $10 (; 10 ;) (type $4) (param $0 v128) (result i32)
+ (i16x8.extract_lane_u 0
+ (get_local $0)
+ )
+ )
+ (func $11 (; 11 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i16x8.replace_lane 0
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $12 (; 12 ;) (type $0) (param $0 i32) (result v128)
+ (i32x4.splat
+ (get_local $0)
+ )
+ )
+ (func $13 (; 13 ;) (type $4) (param $0 v128) (result i32)
+ (i32x4.extract_lane 0
+ (get_local $0)
+ )
+ )
+ (func $14 (; 14 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i32x4.replace_lane 0
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $15 (; 15 ;) (type $6) (param $0 v128) (result i64)
+ (i64x2.extract_lane 0
+ (get_local $0)
+ )
+ )
+ (func $16 (; 16 ;) (type $7) (param $0 v128) (param $1 i64) (result v128)
+ (i64x2.replace_lane 0
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $17 (; 17 ;) (type $8) (param $0 f32) (result v128)
+ (f32x4.splat
+ (get_local $0)
+ )
+ )
+ (func $18 (; 18 ;) (type $9) (param $0 v128) (result f32)
+ (f32x4.extract_lane 0
+ (get_local $0)
+ )
+ )
+ (func $19 (; 19 ;) (type $10) (param $0 v128) (param $1 f32) (result v128)
+ (f32x4.replace_lane 0
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $20 (; 20 ;) (type $11) (param $0 f64) (result v128)
+ (f64x2.splat
+ (get_local $0)
+ )
+ )
+ (func $21 (; 21 ;) (type $12) (param $0 v128) (result f64)
+ (f64x2.extract_lane 0
+ (get_local $0)
+ )
+ )
+ (func $22 (; 22 ;) (type $13) (param $0 v128) (param $1 f64) (result v128)
+ (f64x2.replace_lane 0
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $23 (; 23 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.eq
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $24 (; 24 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.ne
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $25 (; 25 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.lt_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $26 (; 26 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.lt_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $27 (; 27 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.gt_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $28 (; 28 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.gt_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $29 (; 29 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.le_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $30 (; 30 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.le_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $31 (; 31 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.ge_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $32 (; 32 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.ge_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $33 (; 33 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.eq
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $34 (; 34 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.ne
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $35 (; 35 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.lt_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $36 (; 36 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.lt_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $37 (; 37 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.gt_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $38 (; 38 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.gt_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $39 (; 39 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.le_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $40 (; 40 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.le_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $41 (; 41 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.ge_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $42 (; 42 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.ge_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $43 (; 43 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.eq
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $44 (; 44 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.ne
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $45 (; 45 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.lt_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $46 (; 46 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.lt_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $47 (; 47 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.gt_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $48 (; 48 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.gt_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $49 (; 49 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.le_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $50 (; 50 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.le_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $51 (; 51 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.ge_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $52 (; 52 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.ge_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $53 (; 53 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.eq
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $54 (; 54 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.ne
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $55 (; 55 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.lt
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $56 (; 56 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.gt
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $57 (; 57 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.le
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $58 (; 58 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.ge
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $59 (; 59 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.eq
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $60 (; 60 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.ne
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $61 (; 61 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.lt
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $62 (; 62 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.gt
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $63 (; 63 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.le
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $64 (; 64 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.ge
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $65 (; 65 ;) (type $14) (param $0 v128) (result v128)
+ (v128.not
+ (get_local $0)
+ )
+ )
+ (func $66 (; 66 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (v128.and
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $67 (; 67 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (v128.or
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $68 (; 68 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (v128.xor
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $69 (; 69 ;) (type $15) (param $0 v128) (param $1 v128) (param $2 v128) (result v128)
+ (v128.bitselect
+ (get_local $0)
+ (get_local $1)
+ (get_local $2)
+ )
+ )
+ (func $70 (; 70 ;) (type $14) (param $0 v128) (result v128)
+ (i8x16.neg
+ (get_local $0)
+ )
+ )
+ (func $71 (; 71 ;) (type $4) (param $0 v128) (result i32)
+ (i8x16.any_true
+ (get_local $0)
+ )
+ )
+ (func $72 (; 72 ;) (type $4) (param $0 v128) (result i32)
+ (i8x16.all_true
+ (get_local $0)
+ )
+ )
+ (func $73 (; 73 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i8x16.shl
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $74 (; 74 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i8x16.shr_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $75 (; 75 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i8x16.shr_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $76 (; 76 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $77 (; 77 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.add_saturate_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $78 (; 78 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.add_saturate_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $79 (; 79 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.sub
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $80 (; 80 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.sub_saturate_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $81 (; 81 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.sub_saturate_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $82 (; 82 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i8x16.mul
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $83 (; 83 ;) (type $14) (param $0 v128) (result v128)
+ (i16x8.neg
+ (get_local $0)
+ )
+ )
+ (func $84 (; 84 ;) (type $4) (param $0 v128) (result i32)
+ (i16x8.any_true
+ (get_local $0)
+ )
+ )
+ (func $85 (; 85 ;) (type $4) (param $0 v128) (result i32)
+ (i16x8.all_true
+ (get_local $0)
+ )
+ )
+ (func $86 (; 86 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i16x8.shl
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $87 (; 87 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i16x8.shr_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $88 (; 88 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i16x8.shr_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $89 (; 89 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $90 (; 90 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.add_saturate_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $91 (; 91 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.add_saturate_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $92 (; 92 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.sub
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $93 (; 93 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.sub_saturate_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $94 (; 94 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.sub_saturate_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $95 (; 95 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i16x8.mul
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $96 (; 96 ;) (type $14) (param $0 v128) (result v128)
+ (i32x4.neg
+ (get_local $0)
+ )
+ )
+ (func $97 (; 97 ;) (type $4) (param $0 v128) (result i32)
+ (i32x4.any_true
+ (get_local $0)
+ )
+ )
+ (func $98 (; 98 ;) (type $4) (param $0 v128) (result i32)
+ (i32x4.all_true
+ (get_local $0)
+ )
+ )
+ (func $99 (; 99 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i32x4.shl
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $100 (; 100 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i32x4.shr_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $101 (; 101 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i32x4.shr_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $102 (; 102 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $103 (; 103 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.sub
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $104 (; 104 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i32x4.mul
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $105 (; 105 ;) (type $14) (param $0 v128) (result v128)
+ (i64x2.neg
+ (get_local $0)
+ )
+ )
+ (func $106 (; 106 ;) (type $4) (param $0 v128) (result i32)
+ (i64x2.any_true
+ (get_local $0)
+ )
+ )
+ (func $107 (; 107 ;) (type $4) (param $0 v128) (result i32)
+ (i64x2.all_true
+ (get_local $0)
+ )
+ )
+ (func $108 (; 108 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i64x2.shl
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $109 (; 109 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i64x2.shr_s
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $110 (; 110 ;) (type $5) (param $0 v128) (param $1 i32) (result v128)
+ (i64x2.shr_u
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $111 (; 111 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i64x2.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $112 (; 112 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (i64x2.sub
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $113 (; 113 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $114 (; 114 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.sub
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $115 (; 115 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.mul
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $116 (; 116 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.div
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $117 (; 117 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.min
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $118 (; 118 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f32x4.max
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $119 (; 119 ;) (type $14) (param $0 v128) (result v128)
+ (f32x4.abs
+ (get_local $0)
+ )
+ )
+ (func $120 (; 120 ;) (type $14) (param $0 v128) (result v128)
+ (f32x4.neg
+ (get_local $0)
+ )
+ )
+ (func $121 (; 121 ;) (type $14) (param $0 v128) (result v128)
+ (f32x4.sqrt
+ (get_local $0)
+ )
+ )
+ (func $122 (; 122 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.add
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $123 (; 123 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.sub
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $124 (; 124 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.mul
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $125 (; 125 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.div
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $126 (; 126 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.min
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $127 (; 127 ;) (type $3) (param $0 v128) (param $1 v128) (result v128)
+ (f64x2.max
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ (func $128 (; 128 ;) (type $14) (param $0 v128) (result v128)
+ (f64x2.abs
+ (get_local $0)
+ )
+ )
+ (func $129 (; 129 ;) (type $14) (param $0 v128) (result v128)
+ (f64x2.neg
+ (get_local $0)
+ )
+ )
+ (func $130 (; 130 ;) (type $14) (param $0 v128) (result v128)
+ (f64x2.sqrt
+ (get_local $0)
+ )
+ )
+ (func $131 (; 131 ;) (type $14) (param $0 v128) (result v128)
+ (i32x4.trunc_s/f32x4:sat
+ (get_local $0)
+ )
+ )
+ (func $132 (; 132 ;) (type $14) (param $0 v128) (result v128)
+ (i32x4.trunc_u/f32x4:sat
+ (get_local $0)
+ )
+ )
+ (func $133 (; 133 ;) (type $14) (param $0 v128) (result v128)
+ (i64x2.trunc_s/f64x2:sat
+ (get_local $0)
+ )
+ )
+ (func $134 (; 134 ;) (type $14) (param $0 v128) (result v128)
+ (i64x2.trunc_u/f64x2:sat
+ (get_local $0)
+ )
+ )
+ (func $135 (; 135 ;) (type $14) (param $0 v128) (result v128)
+ (f32x4.convert_s/i32x4
+ (get_local $0)
+ )
+ )
+ (func $136 (; 136 ;) (type $14) (param $0 v128) (result v128)
+ (f32x4.convert_u/i32x4
+ (get_local $0)
+ )
+ )
+ (func $137 (; 137 ;) (type $14) (param $0 v128) (result v128)
+ (f64x2.convert_s/i64x2
+ (get_local $0)
+ )
+ )
+ (func $138 (; 138 ;) (type $14) (param $0 v128) (result v128)
+ (f64x2.convert_u/i64x2
+ (get_local $0)
+ )
+ )
+)
+
diff --git a/test/spec/simd.wast b/test/spec/simd.wast
new file mode 100644
index 000000000..e4ac42322
--- /dev/null
+++ b/test/spec/simd.wast
@@ -0,0 +1,661 @@
+(module
+ (memory 1)
+ (data (i32.const 128) "WASMSIMDGOESFAST")
+ (func (export "v128.load") (param $0 i32) (result v128)(v128.load (get_local $0)))
+ (func (export "v128.store") (param $0 i32) (param $1 v128) (result v128)
+ (v128.store offset=0 align=16 (get_local $0) (get_local $1))
+ (v128.load (get_local $0))
+ )
+ (func (export "v128.const") (result v128) (v128.const i32 1 2 3 4))
+ (func (export "v128.shuffle_interleave_bytes") (param $0 v128) (param $1 v128) (result v128)
+ (v8x16.shuffle 0 17 2 19 4 21 6 23 8 25 10 27 12 29 14 31 (get_local $0) (get_local $1))
+ )
+ (func (export "v128.shuffle_reverse_i32s") (param $0 v128) (result v128)
+ (v8x16.shuffle 12 13 14 15 8 9 10 11 4 5 6 7 0 1 2 3 (get_local $0) (get_local $0))
+ )
+ (func (export "i8x16.splat") (param $0 i32) (result v128) (i8x16.splat (get_local $0)))
+ (func (export "i8x16.extract_lane_s_first") (param $0 v128) (result i32) (i8x16.extract_lane_s 0 (get_local $0)))
+ (func (export "i8x16.extract_lane_s_last") (param $0 v128) (result i32) (i8x16.extract_lane_s 15 (get_local $0)))
+ (func (export "i8x16.extract_lane_u_first") (param $0 v128) (result i32) (i8x16.extract_lane_u 0 (get_local $0)))
+ (func (export "i8x16.extract_lane_u_last") (param $0 v128) (result i32) (i8x16.extract_lane_u 15 (get_local $0)))
+ (func (export "i8x16.replace_lane_first") (param $0 v128) (param $1 i32) (result v128) (i8x16.replace_lane 0 (get_local $0) (get_local $1)))
+ (func (export "i8x16.replace_lane_last") (param $0 v128) (param $1 i32) (result v128) (i8x16.replace_lane 15 (get_local $0) (get_local $1)))
+ (func (export "i16x8.splat") (param $0 i32) (result v128) (i16x8.splat (get_local $0)))
+ (func (export "i16x8.extract_lane_s_first") (param $0 v128) (result i32) (i16x8.extract_lane_s 0 (get_local $0)))
+ (func (export "i16x8.extract_lane_s_last") (param $0 v128) (result i32) (i16x8.extract_lane_s 7 (get_local $0)))
+ (func (export "i16x8.extract_lane_u_first") (param $0 v128) (result i32) (i16x8.extract_lane_u 0 (get_local $0)))
+ (func (export "i16x8.extract_lane_u_last") (param $0 v128) (result i32) (i16x8.extract_lane_u 7 (get_local $0)))
+ (func (export "i16x8.replace_lane_first") (param $0 v128) (param $1 i32) (result v128) (i16x8.replace_lane 0 (get_local $0) (get_local $1)))
+ (func (export "i16x8.replace_lane_last") (param $0 v128) (param $1 i32) (result v128) (i16x8.replace_lane 7 (get_local $0) (get_local $1)))
+ (func (export "i32x4.splat") (param $0 i32) (result v128) (i32x4.splat (get_local $0)))
+ (func (export "i32x4.extract_lane_first") (param $0 v128) (result i32) (i32x4.extract_lane 0 (get_local $0)))
+ (func (export "i32x4.extract_lane_last") (param $0 v128) (result i32) (i32x4.extract_lane 3 (get_local $0)))
+ (func (export "i32x4.replace_lane_first") (param $0 v128) (param $1 i32) (result v128) (i32x4.replace_lane 0 (get_local $0) (get_local $1)))
+ (func (export "i32x4.replace_lane_last") (param $0 v128) (param $1 i32) (result v128) (i32x4.replace_lane 3 (get_local $0) (get_local $1)))
+ (func (export "i64x2.splat") (param $0 i64) (result v128) (i64x2.splat (get_local $0)))
+ (func (export "i64x2.extract_lane_first") (param $0 v128) (result i64) (i64x2.extract_lane 0 (get_local $0)))
+ (func (export "i64x2.extract_lane_last") (param $0 v128) (result i64) (i64x2.extract_lane 1 (get_local $0)))
+ (func (export "i64x2.replace_lane_first") (param $0 v128) (param $1 i64) (result v128) (i64x2.replace_lane 0 (get_local $0) (get_local $1)))
+ (func (export "i64x2.replace_lane_last") (param $0 v128) (param $1 i64) (result v128) (i64x2.replace_lane 1 (get_local $0) (get_local $1)))
+ (func (export "f32x4.splat") (param $0 f32) (result v128) (f32x4.splat (get_local $0)))
+ (func (export "f32x4.extract_lane_first") (param $0 v128) (result f32) (f32x4.extract_lane 0 (get_local $0)))
+ (func (export "f32x4.extract_lane_last") (param $0 v128) (result f32) (f32x4.extract_lane 3 (get_local $0)))
+ (func (export "f32x4.replace_lane_first") (param $0 v128) (param $1 f32) (result v128) (f32x4.replace_lane 0 (get_local $0) (get_local $1)))
+ (func (export "f32x4.replace_lane_last") (param $0 v128) (param $1 f32) (result v128) (f32x4.replace_lane 3 (get_local $0) (get_local $1)))
+ (func (export "f64x2.splat") (param $0 f64) (result v128) (f64x2.splat (get_local $0)))
+ (func (export "f64x2.extract_lane_first") (param $0 v128) (result f64) (f64x2.extract_lane 0 (get_local $0)))
+ (func (export "f64x2.extract_lane_last") (param $0 v128) (result f64) (f64x2.extract_lane 1 (get_local $0)))
+ (func (export "f64x2.replace_lane_first") (param $0 v128) (param $1 f64) (result v128) (f64x2.replace_lane 0 (get_local $0) (get_local $1)))
+ (func (export "f64x2.replace_lane_last") (param $0 v128) (param $1 f64) (result v128) (f64x2.replace_lane 1 (get_local $0) (get_local $1)))
+ (func (export "i8x16.eq") (param $0 v128) (param $1 v128) (result v128) (i8x16.eq (get_local $0) (get_local $1)))
+ (func (export "i8x16.ne") (param $0 v128) (param $1 v128) (result v128) (i8x16.ne (get_local $0) (get_local $1)))
+ (func (export "i8x16.lt_s") (param $0 v128) (param $1 v128) (result v128) (i8x16.lt_s (get_local $0) (get_local $1)))
+ (func (export "i8x16.lt_u") (param $0 v128) (param $1 v128) (result v128) (i8x16.lt_u (get_local $0) (get_local $1)))
+ (func (export "i8x16.gt_s") (param $0 v128) (param $1 v128) (result v128) (i8x16.gt_s (get_local $0) (get_local $1)))
+ (func (export "i8x16.gt_u") (param $0 v128) (param $1 v128) (result v128) (i8x16.gt_u (get_local $0) (get_local $1)))
+ (func (export "i8x16.le_s") (param $0 v128) (param $1 v128) (result v128) (i8x16.le_s (get_local $0) (get_local $1)))
+ (func (export "i8x16.le_u") (param $0 v128) (param $1 v128) (result v128) (i8x16.le_u (get_local $0) (get_local $1)))
+ (func (export "i8x16.ge_s") (param $0 v128) (param $1 v128) (result v128) (i8x16.ge_s (get_local $0) (get_local $1)))
+ (func (export "i8x16.ge_u") (param $0 v128) (param $1 v128) (result v128) (i8x16.ge_u (get_local $0) (get_local $1)))
+ (func (export "i16x8.eq") (param $0 v128) (param $1 v128) (result v128) (i16x8.eq (get_local $0) (get_local $1)))
+ (func (export "i16x8.ne") (param $0 v128) (param $1 v128) (result v128) (i16x8.ne (get_local $0) (get_local $1)))
+ (func (export "i16x8.lt_s") (param $0 v128) (param $1 v128) (result v128) (i16x8.lt_s (get_local $0) (get_local $1)))
+ (func (export "i16x8.lt_u") (param $0 v128) (param $1 v128) (result v128) (i16x8.lt_u (get_local $0) (get_local $1)))
+ (func (export "i16x8.gt_s") (param $0 v128) (param $1 v128) (result v128) (i16x8.gt_s (get_local $0) (get_local $1)))
+ (func (export "i16x8.gt_u") (param $0 v128) (param $1 v128) (result v128) (i16x8.gt_u (get_local $0) (get_local $1)))
+ (func (export "i16x8.le_s") (param $0 v128) (param $1 v128) (result v128) (i16x8.le_s (get_local $0) (get_local $1)))
+ (func (export "i16x8.le_u") (param $0 v128) (param $1 v128) (result v128) (i16x8.le_u (get_local $0) (get_local $1)))
+ (func (export "i16x8.ge_s") (param $0 v128) (param $1 v128) (result v128) (i16x8.ge_s (get_local $0) (get_local $1)))
+ (func (export "i16x8.ge_u") (param $0 v128) (param $1 v128) (result v128) (i16x8.ge_u (get_local $0) (get_local $1)))
+ (func (export "i32x4.eq") (param $0 v128) (param $1 v128) (result v128) (i32x4.eq (get_local $0) (get_local $1)))
+ (func (export "i32x4.ne") (param $0 v128) (param $1 v128) (result v128) (i32x4.ne (get_local $0) (get_local $1)))
+ (func (export "i32x4.lt_s") (param $0 v128) (param $1 v128) (result v128) (i32x4.lt_s (get_local $0) (get_local $1)))
+ (func (export "i32x4.lt_u") (param $0 v128) (param $1 v128) (result v128) (i32x4.lt_u (get_local $0) (get_local $1)))
+ (func (export "i32x4.gt_s") (param $0 v128) (param $1 v128) (result v128) (i32x4.gt_s (get_local $0) (get_local $1)))
+ (func (export "i32x4.gt_u") (param $0 v128) (param $1 v128) (result v128) (i32x4.gt_u (get_local $0) (get_local $1)))
+ (func (export "i32x4.le_s") (param $0 v128) (param $1 v128) (result v128) (i32x4.le_s (get_local $0) (get_local $1)))
+ (func (export "i32x4.le_u") (param $0 v128) (param $1 v128) (result v128) (i32x4.le_u (get_local $0) (get_local $1)))
+ (func (export "i32x4.ge_s") (param $0 v128) (param $1 v128) (result v128) (i32x4.ge_s (get_local $0) (get_local $1)))
+ (func (export "i32x4.ge_u") (param $0 v128) (param $1 v128) (result v128) (i32x4.ge_u (get_local $0) (get_local $1)))
+ (func (export "f32x4.eq") (param $0 v128) (param $1 v128) (result v128) (f32x4.eq (get_local $0) (get_local $1)))
+ (func (export "f32x4.ne") (param $0 v128) (param $1 v128) (result v128) (f32x4.ne (get_local $0) (get_local $1)))
+ (func (export "f32x4.lt") (param $0 v128) (param $1 v128) (result v128) (f32x4.lt (get_local $0) (get_local $1)))
+ (func (export "f32x4.gt") (param $0 v128) (param $1 v128) (result v128) (f32x4.gt (get_local $0) (get_local $1)))
+ (func (export "f32x4.le") (param $0 v128) (param $1 v128) (result v128) (f32x4.le (get_local $0) (get_local $1)))
+ (func (export "f32x4.ge") (param $0 v128) (param $1 v128) (result v128) (f32x4.ge (get_local $0) (get_local $1)))
+ (func (export "f64x2.eq") (param $0 v128) (param $1 v128) (result v128) (f64x2.eq (get_local $0) (get_local $1)))
+ (func (export "f64x2.ne") (param $0 v128) (param $1 v128) (result v128) (f64x2.ne (get_local $0) (get_local $1)))
+ (func (export "f64x2.lt") (param $0 v128) (param $1 v128) (result v128) (f64x2.lt (get_local $0) (get_local $1)))
+ (func (export "f64x2.gt") (param $0 v128) (param $1 v128) (result v128) (f64x2.gt (get_local $0) (get_local $1)))
+ (func (export "f64x2.le") (param $0 v128) (param $1 v128) (result v128) (f64x2.le (get_local $0) (get_local $1)))
+ (func (export "f64x2.ge") (param $0 v128) (param $1 v128) (result v128) (f64x2.ge (get_local $0) (get_local $1)))
+ (func (export "v128.not") (param $0 v128) (result v128) (v128.not (get_local $0)))
+ (func (export "v128.and") (param $0 v128) (param $1 v128) (result v128) (v128.and (get_local $0) (get_local $1)))
+ (func (export "v128.or") (param $0 v128) (param $1 v128) (result v128) (v128.or (get_local $0) (get_local $1)))
+ (func (export "v128.xor") (param $0 v128) (param $1 v128) (result v128) (v128.xor (get_local $0) (get_local $1)))
+ (func (export "v128.bitselect") (param $0 v128) (param $1 v128) (param $2 v128) (result v128)
+ (v128.bitselect (get_local $0) (get_local $1) (get_local $2))
+ )
+ (func (export "i8x16.neg") (param $0 v128) (result v128) (i8x16.neg (get_local $0)))
+ (func (export "i8x16.any_true") (param $0 v128) (result i32) (i8x16.any_true (get_local $0)))
+ (func (export "i8x16.all_true") (param $0 v128) (result i32) (i8x16.all_true (get_local $0)))
+ (func (export "i8x16.shl") (param $0 v128) (param $1 i32) (result v128) (i8x16.shl (get_local $0) (get_local $1)))
+ (func (export "i8x16.shr_s") (param $0 v128) (param $1 i32) (result v128) (i8x16.shr_s (get_local $0) (get_local $1)))
+ (func (export "i8x16.shr_u") (param $0 v128) (param $1 i32) (result v128) (i8x16.shr_u (get_local $0) (get_local $1)))
+ (func (export "i8x16.add") (param $0 v128) (param $1 v128) (result v128) (i8x16.add (get_local $0) (get_local $1)))
+ (func (export "i8x16.add_saturate_s") (param $0 v128) (param $1 v128) (result v128) (i8x16.add_saturate_s (get_local $0) (get_local $1)))
+ (func (export "i8x16.add_saturate_u") (param $0 v128) (param $1 v128) (result v128) (i8x16.add_saturate_u (get_local $0) (get_local $1)))
+ (func (export "i8x16.sub") (param $0 v128) (param $1 v128) (result v128) (i8x16.sub (get_local $0) (get_local $1)))
+ (func (export "i8x16.sub_saturate_s") (param $0 v128) (param $1 v128) (result v128) (i8x16.sub_saturate_s (get_local $0) (get_local $1)))
+ (func (export "i8x16.sub_saturate_u") (param $0 v128) (param $1 v128) (result v128) (i8x16.sub_saturate_u (get_local $0) (get_local $1)))
+ (func (export "i8x16.mul") (param $0 v128) (param $1 v128) (result v128) (i8x16.mul (get_local $0) (get_local $1)))
+ (func (export "i16x8.neg") (param $0 v128) (result v128) (i16x8.neg (get_local $0)))
+ (func (export "i16x8.any_true") (param $0 v128) (result i32) (i16x8.any_true (get_local $0)))
+ (func (export "i16x8.all_true") (param $0 v128) (result i32) (i16x8.all_true (get_local $0)))
+ (func (export "i16x8.shl") (param $0 v128) (param $1 i32) (result v128) (i16x8.shl (get_local $0) (get_local $1)))
+ (func (export "i16x8.shr_s") (param $0 v128) (param $1 i32) (result v128) (i16x8.shr_s (get_local $0) (get_local $1)))
+ (func (export "i16x8.shr_u") (param $0 v128) (param $1 i32) (result v128) (i16x8.shr_u (get_local $0) (get_local $1)))
+ (func (export "i16x8.add") (param $0 v128) (param $1 v128) (result v128) (i16x8.add (get_local $0) (get_local $1)))
+ (func (export "i16x8.add_saturate_s") (param $0 v128) (param $1 v128) (result v128) (i16x8.add_saturate_s (get_local $0) (get_local $1)))
+ (func (export "i16x8.add_saturate_u") (param $0 v128) (param $1 v128) (result v128) (i16x8.add_saturate_u (get_local $0) (get_local $1)))
+ (func (export "i16x8.sub") (param $0 v128) (param $1 v128) (result v128) (i16x8.sub (get_local $0) (get_local $1)))
+ (func (export "i16x8.sub_saturate_s") (param $0 v128) (param $1 v128) (result v128) (i16x8.sub_saturate_s (get_local $0) (get_local $1)))
+ (func (export "i16x8.sub_saturate_u") (param $0 v128) (param $1 v128) (result v128) (i16x8.sub_saturate_u (get_local $0) (get_local $1)))
+ (func (export "i16x8.mul") (param $0 v128) (param $1 v128) (result v128) (i16x8.mul (get_local $0) (get_local $1)))
+ (func (export "i32x4.neg") (param $0 v128) (result v128) (i32x4.neg (get_local $0)))
+ (func (export "i32x4.any_true") (param $0 v128) (result i32) (i32x4.any_true (get_local $0)))
+ (func (export "i32x4.all_true") (param $0 v128) (result i32) (i32x4.all_true (get_local $0)))
+ (func (export "i32x4.shl") (param $0 v128) (param $1 i32) (result v128) (i32x4.shl (get_local $0) (get_local $1)))
+ (func (export "i32x4.shr_s") (param $0 v128) (param $1 i32) (result v128) (i32x4.shr_s (get_local $0) (get_local $1)))
+ (func (export "i32x4.shr_u") (param $0 v128) (param $1 i32) (result v128) (i32x4.shr_u (get_local $0) (get_local $1)))
+ (func (export "i32x4.add") (param $0 v128) (param $1 v128) (result v128) (i32x4.add (get_local $0) (get_local $1)))
+ (func (export "i32x4.sub") (param $0 v128) (param $1 v128) (result v128) (i32x4.sub (get_local $0) (get_local $1)))
+ (func (export "i32x4.mul") (param $0 v128) (param $1 v128) (result v128) (i32x4.mul (get_local $0) (get_local $1)))
+ (func (export "i64x2.neg") (param $0 v128) (result v128) (i64x2.neg (get_local $0)))
+ (func (export "i64x2.any_true") (param $0 v128) (result i32) (i64x2.any_true (get_local $0)))
+ (func (export "i64x2.all_true") (param $0 v128) (result i32) (i64x2.all_true (get_local $0)))
+ (func (export "i64x2.shl") (param $0 v128) (param $1 i32) (result v128) (i64x2.shl (get_local $0) (get_local $1)))
+ (func (export "i64x2.shr_s") (param $0 v128) (param $1 i32) (result v128) (i64x2.shr_s (get_local $0) (get_local $1)))
+ (func (export "i64x2.shr_u") (param $0 v128) (param $1 i32) (result v128) (i64x2.shr_u (get_local $0) (get_local $1)))
+ (func (export "f32x4.abs") (param $0 v128) (result v128) (f32x4.abs (get_local $0)))
+ (func (export "f32x4.neg") (param $0 v128) (result v128) (f32x4.neg (get_local $0)))
+ (func (export "f32x4.sqrt") (param $0 v128) (result v128) (f32x4.sqrt (get_local $0)))
+ (func (export "i64x2.add") (param $0 v128) (param $1 v128) (result v128) (i64x2.add (get_local $0) (get_local $1)))
+ (func (export "i64x2.sub") (param $0 v128) (param $1 v128) (result v128) (i64x2.sub (get_local $0) (get_local $1)))
+ (func (export "f32x4.add") (param $0 v128) (param $1 v128) (result v128) (f32x4.add (get_local $0) (get_local $1)))
+ (func (export "f32x4.sub") (param $0 v128) (param $1 v128) (result v128) (f32x4.sub (get_local $0) (get_local $1)))
+ (func (export "f32x4.mul") (param $0 v128) (param $1 v128) (result v128) (f32x4.mul (get_local $0) (get_local $1)))
+ (func (export "f32x4.div") (param $0 v128) (param $1 v128) (result v128) (f32x4.div (get_local $0) (get_local $1)))
+ (func (export "f32x4.min") (param $0 v128) (param $1 v128) (result v128) (f32x4.min (get_local $0) (get_local $1)))
+ (func (export "f32x4.max") (param $0 v128) (param $1 v128) (result v128) (f32x4.max (get_local $0) (get_local $1)))
+ (func (export "f64x2.abs") (param $0 v128) (result v128) (f64x2.abs (get_local $0)))
+ (func (export "f64x2.neg") (param $0 v128) (result v128) (f64x2.neg (get_local $0)))
+ (func (export "f64x2.sqrt") (param $0 v128) (result v128) (f64x2.sqrt (get_local $0)))
+ (func (export "f64x2.add") (param $0 v128) (param $1 v128) (result v128) (f64x2.add (get_local $0) (get_local $1)))
+ (func (export "f64x2.sub") (param $0 v128) (param $1 v128) (result v128) (f64x2.sub (get_local $0) (get_local $1)))
+ (func (export "f64x2.mul") (param $0 v128) (param $1 v128) (result v128) (f64x2.mul (get_local $0) (get_local $1)))
+ (func (export "f64x2.div") (param $0 v128) (param $1 v128) (result v128) (f64x2.div (get_local $0) (get_local $1)))
+ (func (export "f64x2.min") (param $0 v128) (param $1 v128) (result v128) (f64x2.min (get_local $0) (get_local $1)))
+ (func (export "f64x2.max") (param $0 v128) (param $1 v128) (result v128) (f64x2.max (get_local $0) (get_local $1)))
+ (func (export "i32x4.trunc_s/f32x4:sat") (param $0 v128) (result v128) (i32x4.trunc_s/f32x4:sat (get_local $0)))
+ (func (export "i32x4.trunc_u/f32x4:sat") (param $0 v128) (result v128) (i32x4.trunc_u/f32x4:sat (get_local $0)))
+ (func (export "i64x2.trunc_s/f64x2:sat") (param $0 v128) (result v128) (i64x2.trunc_s/f64x2:sat (get_local $0)))
+ (func (export "i64x2.trunc_u/f64x2:sat") (param $0 v128) (result v128) (i64x2.trunc_u/f64x2:sat (get_local $0)))
+ (func (export "f32x4.convert_s/i32x4") (param $0 v128) (result v128) (f32x4.convert_s/i32x4 (get_local $0)))
+ (func (export "f32x4.convert_u/i32x4") (param $0 v128) (result v128) (f32x4.convert_u/i32x4 (get_local $0)))
+ (func (export "f64x2.convert_s/i64x2") (param $0 v128) (result v128) (f64x2.convert_s/i64x2 (get_local $0)))
+ (func (export "f64x2.convert_u/i64x2") (param $0 v128) (result v128) (f64x2.convert_u/i64x2 (get_local $0)))
+)
+
+;; Basic v128 manipulation
+(assert_return (invoke "v128.load" (i32.const 128)) (v128.const i32 87 65 83 77 83 73 77 68 71 79 69 83 70 65 83 84))
+(assert_return (invoke "v128.store" (i32.const 16) (v128.const i32 1 2 3 4)) (v128.const i32 1 2 3 4))
+(assert_return (invoke "v128.const") (v128.const i32 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00))
+(assert_return
+ (invoke "v128.shuffle_interleave_bytes"
+ (v128.const i32 1 0 3 0 5 0 7 0 9 0 11 0 13 0 15 0)
+ (v128.const i32 0 2 0 4 0 6 0 8 0 10 0 12 0 14 0 16)
+ )
+ (v128.const i32 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16)
+)
+(assert_return (invoke "v128.shuffle_reverse_i32s" (v128.const i32 1 2 3 4)) (v128.const i32 4 3 2 1))
+
+;; i8x16 lane accesses
+(assert_return (invoke "i8x16.splat" (i32.const 5)) (v128.const i32 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5))
+(assert_return (invoke "i8x16.splat" (i32.const 257)) (v128.const i32 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1))
+(assert_return (invoke "i8x16.extract_lane_s_first" (v128.const i32 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i32.const -1))
+(assert_return (invoke "i8x16.extract_lane_s_last" (v128.const i32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255)) (i32.const -1))
+(assert_return (invoke "i8x16.extract_lane_u_first" (v128.const i32 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i32.const 255))
+(assert_return (invoke "i8x16.extract_lane_u_last" (v128.const i32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255)) (i32.const 255))
+(assert_return (invoke "i8x16.replace_lane_first" (v128.const i64 0 0) (i32.const 7)) (v128.const i32 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))
+(assert_return (invoke "i8x16.replace_lane_last" (v128.const i64 0 0) (i32.const 7)) (v128.const i32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7))
+
+;; i16x8 lane accesses
+(assert_return (invoke "i16x8.splat" (i32.const 5)) (v128.const i32 5 5 5 5 5 5 5 5))
+(assert_return (invoke "i16x8.splat" (i32.const 65537)) (v128.const i32 1 1 1 1 1 1 1 1))
+(assert_return (invoke "i16x8.extract_lane_s_first" (v128.const i32 65535 0 0 0 0 0 0 0)) (i32.const -1))
+(assert_return (invoke "i16x8.extract_lane_s_last" (v128.const i32 0 0 0 0 0 0 0 65535)) (i32.const -1))
+(assert_return (invoke "i16x8.extract_lane_u_first" (v128.const i32 65535 0 0 0 0 0 0 0)) (i32.const 65535))
+(assert_return (invoke "i16x8.extract_lane_u_last" (v128.const i32 0 0 0 0 0 0 0 65535)) (i32.const 65535))
+(assert_return (invoke "i16x8.replace_lane_first" (v128.const i64 0 0) (i32.const 7)) (v128.const i32 7 0 0 0 0 0 0 0))
+(assert_return (invoke "i16x8.replace_lane_last" (v128.const i64 0 0) (i32.const 7)) (v128.const i32 0 0 0 0 0 0 0 7))
+
+;; i32x4 lane accesses
+(assert_return (invoke "i32x4.splat" (i32.const -5)) (v128.const i32 -5 -5 -5 -5))
+(assert_return (invoke "i32x4.extract_lane_first" (v128.const i32 -5 0 0 0)) (i32.const -5))
+(assert_return (invoke "i32x4.extract_lane_last" (v128.const i32 0 0 0 -5)) (i32.const -5))
+(assert_return (invoke "i32x4.replace_lane_first" (v128.const i64 0 0) (i32.const 53)) (v128.const i32 53 0 0 0))
+(assert_return (invoke "i32x4.replace_lane_last" (v128.const i64 0 0) (i32.const 53)) (v128.const i32 0 0 0 53))
+
+;; i64x2 lane accesses
+(assert_return (invoke "i64x2.splat" (i64.const -5)) (v128.const i64 -5 -5))
+(assert_return (invoke "i64x2.extract_lane_first" (v128.const i64 -5 0)) (i64.const -5))
+(assert_return (invoke "i64x2.extract_lane_last" (v128.const i64 0 -5)) (i64.const -5))
+(assert_return (invoke "i64x2.replace_lane_first" (v128.const i64 0 0) (i64.const 53)) (v128.const i64 53 0))
+(assert_return (invoke "i64x2.replace_lane_last" (v128.const i64 0 0) (i64.const 53)) (v128.const i64 0 53))
+
+;; f32x4 lane accesses
+(assert_return (invoke "f32x4.splat" (f32.const -5)) (v128.const f32 -5 -5 -5 -5))
+(assert_return (invoke "f32x4.extract_lane_first" (v128.const f32 -5 0 0 0)) (f32.const -5))
+(assert_return (invoke "f32x4.extract_lane_last" (v128.const f32 0 0 0 -5)) (f32.const -5))
+(assert_return (invoke "f32x4.replace_lane_first" (v128.const i64 0 0) (f32.const 53)) (v128.const f32 53 0 0 0))
+(assert_return (invoke "f32x4.replace_lane_last" (v128.const i64 0 0) (f32.const 53)) (v128.const f32 0 0 0 53))
+
+;; f64x2 lane accesses
+(assert_return (invoke "f64x2.splat" (f64.const -5)) (v128.const f64 -5 -5))
+(assert_return (invoke "f64x2.extract_lane_first" (v128.const f64 -5 0)) (f64.const -5))
+(assert_return (invoke "f64x2.extract_lane_last" (v128.const f64 0 -5)) (f64.const -5))
+(assert_return (invoke "f64x2.replace_lane_first" (v128.const f64 0 0) (f64.const 53)) (v128.const f64 53 0))
+(assert_return (invoke "f64x2.replace_lane_last" (v128.const f64 0 0) (f64.const 53)) (v128.const f64 0 53))
+
+;; i8x16 comparisons
+(assert_return
+ (invoke "i8x16.eq"
+ (v128.const i32 0 127 13 128 1 13 129 42 0 127 255 42 1 13 129 42)
+ (v128.const i32 0 255 13 42 129 127 0 128 0 255 13 42 129 127 0 128)
+ )
+ (v128.const i32 -1 0 -1 0 0 0 0 0 -1 0 0 -1 0 0 0 0)
+)
+(assert_return
+ (invoke "i8x16.ne"
+ (v128.const i32 0 127 13 128 1 13 129 42 0 127 255 42 1 13 129 42)
+ (v128.const i32 0 255 13 42 129 127 0 128 0 255 13 42 129 127 0 128)
+ )
+ (v128.const i32 0 -1 0 -1 -1 -1 -1 -1 0 -1 -1 0 -1 -1 -1 -1)
+)
+(assert_return
+ (invoke "i8x16.lt_s"
+ (v128.const i32 0 127 13 128 1 13 129 42 0 127 255 42 1 13 129 42)
+ (v128.const i32 0 255 13 42 129 127 0 128 0 255 13 42 129 127 0 128)
+ )
+ (v128.const i32 0 0 0 -1 0 -1 -1 0 0 0 -1 0 0 -1 -1 0)
+)
+(assert_return
+ (invoke "i8x16.lt_u"
+ (v128.const i32 0 127 13 128 1 13 129 42 0 127 255 42 1 13 129 42)
+ (v128.const i32 0 255 13 42 129 127 0 128 0 255 13 42 129 127 0 128)
+ )
+ (v128.const i32 0 -1 0 0 -1 -1 0 -1 0 -1 0 0 -1 -1 0 -1)
+)
+(assert_return
+ (invoke "i8x16.gt_s"
+ (v128.const i32 0 127 13 128 1 13 129 42 0 127 255 42 1 13 129 42)
+ (v128.const i32 0 255 13 42 129 127 0 128 0 255 13 42 129 127 0 128)
+ )
+ (v128.const i32 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1)
+)
+(assert_return
+ (invoke "i8x16.gt_u"
+ (v128.const i32 0 127 13 128 1 13 129 42 0 127 255 42 1 13 129 42)
+ (v128.const i32 0 255 13 42 129 127 0 128 0 255 13 42 129 127 0 128)
+ )
+ (v128.const i32 0 0 0 -1 0 0 -1 0 0 0 -1 0 0 0 -1 0)
+)
+(assert_return
+ (invoke "i8x16.le_s"
+ (v128.const i32 0 127 13 128 1 13 129 42 0 127 255 42 1 13 129 42)
+ (v128.const i32 0 255 13 42 129 127 0 128 0 255 13 42 129 127 0 128)
+ )
+ (v128.const i32 -1 0 -1 -1 0 -1 -1 0 -1 0 -1 -1 0 -1 -1 0)
+)
+(assert_return
+ (invoke "i8x16.le_u"
+ (v128.const i32 0 127 13 128 1 13 129 42 0 127 255 42 1 13 129 42)
+ (v128.const i32 0 255 13 42 129 127 0 128 0 255 13 42 129 127 0 128)
+ )
+ (v128.const i32 -1 -1 -1 0 -1 -1 0 -1 -1 -1 0 -1 -1 -1 0 -1)
+)
+(assert_return
+ (invoke "i8x16.ge_s"
+ (v128.const i32 0 127 13 128 1 13 129 42 0 127 255 42 1 13 129 42)
+ (v128.const i32 0 255 13 42 129 127 0 128 0 255 13 42 129 127 0 128)
+ )
+ (v128.const i32 -1 -1 -1 0 -1 0 0 -1 -1 -1 0 -1 -1 0 0 -1)
+)
+(assert_return
+ (invoke "i8x16.ge_u"
+ (v128.const i32 0 127 13 128 1 13 129 42 0 127 255 42 1 13 129 42)
+ (v128.const i32 0 255 13 42 129 127 0 128 0 255 13 42 129 127 0 128)
+ )
+ (v128.const i32 -1 0 -1 -1 0 0 -1 0 -1 0 -1 -1 0 0 -1 0)
+)
+
+;; i16x8 comparisons
+(assert_return (invoke "i16x8.eq"
+ (v128.const i32 0 32767 13 32768 1 32769 42 40000)
+ (v128.const i32 0 13 1 32767 32769 42 40000 32767)
+ )
+ (v128.const i32 -1 0 0 0 0 0 0 0)
+)
+(assert_return
+ (invoke "i16x8.ne"
+ (v128.const i32 0 32767 13 32768 1 32769 42 40000)
+ (v128.const i32 0 13 1 32767 32769 42 40000 32767)
+ )
+ (v128.const i32 0 -1 -1 -1 -1 -1 -1 -1)
+)
+(assert_return
+ (invoke "i16x8.lt_s"
+ (v128.const i32 0 32767 13 32768 1 32769 42 40000)
+ (v128.const i32 0 13 1 32767 32769 42 40000 32767)
+ )
+ (v128.const i32 0 0 0 -1 0 -1 0 -1)
+)
+(assert_return
+ (invoke "i16x8.lt_u"
+ (v128.const i32 0 32767 13 32768 1 32769 42 40000)
+ (v128.const i32 0 13 1 32767 32769 42 40000 32767)
+ )
+ (v128.const i32 0 0 0 0 -1 0 -1 0)
+)
+(assert_return
+ (invoke "i16x8.gt_s"
+ (v128.const i32 0 32767 13 32768 1 32769 42 40000)
+ (v128.const i32 0 13 1 32767 32769 42 40000 32767)
+ )
+ (v128.const i32 0 -1 -1 0 -1 0 -1 0)
+)
+(assert_return
+ (invoke "i16x8.gt_u"
+ (v128.const i32 0 32767 13 32768 1 32769 42 40000)
+ (v128.const i32 0 13 1 32767 32769 42 40000 32767)
+ )
+ (v128.const i32 0 -1 -1 -1 0 -1 0 -1)
+)
+(assert_return
+ (invoke "i16x8.le_s"
+ (v128.const i32 0 32767 13 32768 1 32769 42 40000)
+ (v128.const i32 0 13 1 32767 32769 42 40000 32767)
+ )
+ (v128.const i32 -1 0 0 -1 0 -1 0 -1)
+)
+(assert_return
+ (invoke "i16x8.le_u"
+ (v128.const i32 0 32767 13 32768 1 32769 42 40000)
+ (v128.const i32 0 13 1 32767 32769 42 40000 32767)
+ )
+ (v128.const i32 -1 0 0 0 -1 0 -1 0)
+)
+(assert_return
+ (invoke "i16x8.ge_s"
+ (v128.const i32 0 32767 13 32768 1 32769 42 40000)
+ (v128.const i32 0 13 1 32767 32769 42 40000 32767)
+ )
+ (v128.const i32 -1 -1 -1 0 -1 0 -1 0)
+)
+(assert_return
+ (invoke "i16x8.ge_u"
+ (v128.const i32 0 32767 13 32768 1 32769 42 40000)
+ (v128.const i32 0 13 1 32767 32769 42 40000 32767)
+ )
+ (v128.const i32 -1 -1 -1 -1 0 -1 0 -1)
+)
+
+;; i32x4 comparisons
+(assert_return (invoke "i32x4.eq" (v128.const i32 0 -1 53 -7) (v128.const i32 0 53 -7 -1)) (v128.const i32 -1 0 0 0))
+(assert_return (invoke "i32x4.ne" (v128.const i32 0 -1 53 -7) (v128.const i32 0 53 -7 -1)) (v128.const i32 0 -1 -1 -1))
+(assert_return (invoke "i32x4.lt_s" (v128.const i32 0 -1 53 -7) (v128.const i32 0 53 -7 -1)) (v128.const i32 0 -1 0 -1))
+(assert_return (invoke "i32x4.lt_u" (v128.const i32 0 -1 53 -7) (v128.const i32 0 53 -7 -1)) (v128.const i32 0 0 -1 -1))
+(assert_return (invoke "i32x4.gt_s" (v128.const i32 0 -1 53 -7) (v128.const i32 0 53 -7 -1)) (v128.const i32 0 0 -1 0))
+(assert_return (invoke "i32x4.gt_u" (v128.const i32 0 -1 53 -7) (v128.const i32 0 53 -7 -1)) (v128.const i32 0 -1 0 0))
+(assert_return (invoke "i32x4.le_s" (v128.const i32 0 -1 53 -7) (v128.const i32 0 53 -7 -1)) (v128.const i32 -1 -1 0 -1))
+(assert_return (invoke "i32x4.le_u" (v128.const i32 0 -1 53 -7) (v128.const i32 0 53 -7 -1)) (v128.const i32 -1 0 -1 -1))
+(assert_return (invoke "i32x4.ge_s" (v128.const i32 0 -1 53 -7) (v128.const i32 0 53 -7 -1)) (v128.const i32 -1 0 -1 0))
+(assert_return (invoke "i32x4.ge_u" (v128.const i32 0 -1 53 -7) (v128.const i32 0 53 -7 -1)) (v128.const i32 -1 -1 0 0))
+
+;; f32x4 comparisons
+(assert_return (invoke "f32x4.eq" (v128.const f32 0 -1 1 0) (v128.const f32 0 0 -1 1)) (v128.const i32 -1 0 0 0))
+(assert_return (invoke "f32x4.ne" (v128.const f32 0 -1 1 0) (v128.const f32 0 0 -1 1)) (v128.const i32 0 -1 -1 -1))
+(assert_return (invoke "f32x4.lt" (v128.const f32 0 -1 1 0) (v128.const f32 0 0 -1 1)) (v128.const i32 0 -1 0 -1))
+(assert_return (invoke "f32x4.gt" (v128.const f32 0 -1 1 0) (v128.const f32 0 0 -1 1)) (v128.const i32 0 0 -1 0))
+(assert_return (invoke "f32x4.le" (v128.const f32 0 -1 1 0) (v128.const f32 0 0 -1 1)) (v128.const i32 -1 -1 0 -1))
+(assert_return (invoke "f32x4.ge" (v128.const f32 0 -1 1 0) (v128.const f32 0 0 -1 1)) (v128.const i32 -1 0 -1 0))
+(assert_return (invoke "f32x4.eq" (v128.const f32 nan 0 nan infinity) (v128.const f32 0 nan nan infinity)) (v128.const i32 0 0 0 -1))
+(assert_return (invoke "f32x4.ne" (v128.const f32 nan 0 nan infinity) (v128.const f32 0 nan nan infinity)) (v128.const i32 -1 -1 -1 0))
+(assert_return (invoke "f32x4.lt" (v128.const f32 nan 0 nan infinity) (v128.const f32 0 nan nan infinity)) (v128.const i32 0 0 0 0))
+(assert_return (invoke "f32x4.gt" (v128.const f32 nan 0 nan infinity) (v128.const f32 0 nan nan infinity)) (v128.const i32 0 0 0 0))
+(assert_return (invoke "f32x4.le" (v128.const f32 nan 0 nan infinity) (v128.const f32 0 nan nan infinity)) (v128.const i32 0 0 0 -1))
+(assert_return (invoke "f32x4.ge" (v128.const f32 nan 0 nan infinity) (v128.const f32 0 nan nan infinity)) (v128.const i32 0 0 0 -1))
+(assert_return (invoke "f32x4.eq" (v128.const f32 -infinity 0 nan -infinity) (v128.const f32 0 infinity infinity nan)) (v128.const i32 0 0 0 0))
+(assert_return (invoke "f32x4.ne" (v128.const f32 -infinity 0 nan -infinity) (v128.const f32 0 infinity infinity nan)) (v128.const i32 -1 -1 -1 -1))
+(assert_return (invoke "f32x4.lt" (v128.const f32 -infinity 0 nan -infinity) (v128.const f32 0 infinity infinity nan)) (v128.const i32 -1 -1 0 0))
+(assert_return (invoke "f32x4.gt" (v128.const f32 -infinity 0 nan -infinity) (v128.const f32 0 infinity infinity nan)) (v128.const i32 0 0 0 0))
+(assert_return (invoke "f32x4.le" (v128.const f32 -infinity 0 nan -infinity) (v128.const f32 0 infinity infinity nan)) (v128.const i32 -1 -1 0 0))
+(assert_return (invoke "f32x4.ge" (v128.const f32 -infinity 0 nan -infinity) (v128.const f32 0 infinity infinity nan)) (v128.const i32 0 0 0 0))
+
+;; f64x2 comparisons
+(assert_return (invoke "f64x2.eq" (v128.const f64 0 1) (v128.const f64 0 0)) (v128.const i64 -1 0))
+(assert_return (invoke "f64x2.ne" (v128.const f64 0 1) (v128.const f64 0 0)) (v128.const i64 0 -1))
+(assert_return (invoke "f64x2.lt" (v128.const f64 0 1) (v128.const f64 0 0)) (v128.const i64 0 0))
+(assert_return (invoke "f64x2.gt" (v128.const f64 0 1) (v128.const f64 0 0)) (v128.const i64 0 -1))
+(assert_return (invoke "f64x2.le" (v128.const f64 0 1) (v128.const f64 0 0)) (v128.const i64 -1 0))
+(assert_return (invoke "f64x2.ge" (v128.const f64 0 1) (v128.const f64 0 0)) (v128.const i64 -1 -1))
+(assert_return (invoke "f64x2.eq" (v128.const f64 nan 0) (v128.const f64 infinity infinity)) (v128.const i64 0 0))
+(assert_return (invoke "f64x2.ne" (v128.const f64 nan 0) (v128.const f64 infinity infinity)) (v128.const i64 -1 -1))
+(assert_return (invoke "f64x2.lt" (v128.const f64 nan 0) (v128.const f64 infinity infinity)) (v128.const i64 0 -1))
+(assert_return (invoke "f64x2.gt" (v128.const f64 nan 0) (v128.const f64 infinity infinity)) (v128.const i64 0 0))
+(assert_return (invoke "f64x2.le" (v128.const f64 nan 0) (v128.const f64 infinity infinity)) (v128.const i64 0 -1))
+(assert_return (invoke "f64x2.ge" (v128.const f64 nan 0) (v128.const f64 infinity infinity)) (v128.const i64 0 0))
+
+;; bitwise operations
+(assert_return (invoke "v128.not" (v128.const i32 0 -1 0 -1)) (v128.const i32 -1 0 -1 0))
+(assert_return (invoke "v128.and" (v128.const i32 0 0 -1 -1) (v128.const i32 0 -1 0 -1)) (v128.const i32 0 0 0 -1))
+(assert_return (invoke "v128.or" (v128.const i32 0 0 -1 -1) (v128.const i32 0 -1 0 -1)) (v128.const i32 0 -1 -1 -1))
+(assert_return (invoke "v128.xor" (v128.const i32 0 0 -1 -1) (v128.const i32 0 -1 0 -1)) (v128.const i32 0 -1 -1 0))
+(assert_return (invoke "v128.bitselect"
+ (v128.const i32 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA 0xAAAAAAAA)
+ (v128.const i32 0xBBBBBBBB 0xBBBBBBBB 0xBBBBBBBB 0xBBBBBBBB)
+ (v128.const i32 0xF0F0F0F0 0xFFFFFFFF 0x00000000 0xFF00FF00)
+ )
+ (v128.const i32 0xABABABAB 0xAAAAAAAA 0xBBBBBBBB 0xAABBAABB)
+)
+
+;; i8x16 arithmetic
+(assert_return (invoke "i8x16.neg" (v128.const i32 0 1 42 -3 -56 127 -128 -126 0 -1 -42 3 56 -127 -128 126))
+ (v128.const i32 0 -1 -42 3 56 -127 -128 126 0 1 42 -3 -56 127 -128 -126)
+)
+(assert_return (invoke "i8x16.any_true" (v128.const i32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i32.const 0))
+(assert_return (invoke "i8x16.any_true" (v128.const i32 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0)) (i32.const 1))
+(assert_return (invoke "i8x16.any_true" (v128.const i32 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1)) (i32.const 1))
+(assert_return (invoke "i8x16.any_true" (v128.const i32 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (i32.const 1))
+(assert_return (invoke "i8x16.all_true" (v128.const i32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) (i32.const 0))
+(assert_return (invoke "i8x16.all_true" (v128.const i32 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0)) (i32.const 0))
+(assert_return (invoke "i8x16.all_true" (v128.const i32 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1)) (i32.const 0))
+(assert_return (invoke "i8x16.all_true" (v128.const i32 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)) (i32.const 1))
+(assert_return (invoke "i8x16.shl" (v128.const i32 0 1 2 4 8 16 32 64 -128 3 6 12 24 48 96 -64) (i32.const 1))
+ (v128.const i32 0 2 4 8 16 32 64 -128 0 6 12 24 48 96 -64 -128)
+)
+(assert_return (invoke "i8x16.shl" (v128.const i32 0 1 2 4 8 16 32 64 -128 3 6 12 24 48 96 -64) (i32.const 8))
+ (v128.const i32 0 1 2 4 8 16 32 64 -128 3 6 12 24 48 96 -64)
+)
+(assert_return (invoke "i8x16.shr_u" (v128.const i32 0 1 2 4 8 16 32 64 -128 3 6 12 24 48 96 -64) (i32.const 1))
+ (v128.const i32 0 0 1 2 4 8 16 32 64 1 3 6 12 24 48 96)
+)
+(assert_return (invoke "i8x16.shr_u" (v128.const i32 0 1 2 4 8 16 32 64 -128 3 6 12 24 48 96 -64) (i32.const 8))
+ (v128.const i32 0 1 2 4 8 16 32 64 -128 3 6 12 24 48 96 -64)
+)
+(assert_return (invoke "i8x16.shr_s" (v128.const i32 0 1 2 4 8 16 32 64 -128 3 6 12 24 48 96 -64) (i32.const 1))
+ (v128.const i32 0 0 1 2 4 8 16 32 -64 1 3 6 12 24 48 -32)
+)
+(assert_return (invoke "i8x16.shr_s" (v128.const i32 0 1 2 4 8 16 32 64 -128 3 6 12 24 48 96 -64) (i32.const 8))
+ (v128.const i32 0 1 2 4 8 16 32 64 -128 3 6 12 24 48 96 -64)
+)
+(assert_return
+ (invoke "i8x16.add"
+ (v128.const i32 0 42 255 128 127 129 6 29 103 196 231 142 17 250 1 73)
+ (v128.const i32 3 231 1 128 129 6 103 17 42 29 73 42 0 255 127 142)
+ )
+ (v128.const i32 3 17 0 0 0 135 109 46 145 225 48 184 17 249 128 215)
+)
+(assert_return
+ (invoke "i8x16.add_saturate_s"
+ (v128.const i32 0 42 255 128 127 129 6 29 103 196 231 142 17 250 1 73)
+ (v128.const i32 3 231 1 128 129 6 103 17 42 29 73 42 0 255 127 142)
+ )
+ (v128.const i32 3 17 0 128 0 135 109 46 127 225 48 184 17 249 127 215)
+)
+(assert_return
+ (invoke "i8x16.add_saturate_u"
+ (v128.const i32 0 42 255 128 127 129 6 29 103 196 231 142 17 250 1 73)
+ (v128.const i32 3 231 1 128 129 6 103 17 42 29 73 42 0 255 127 142)
+ )
+ (v128.const i32 3 255 255 255 255 135 109 46 145 225 255 184 17 255 128 215)
+)
+(assert_return
+ (invoke "i8x16.sub"
+ (v128.const i32 0 42 255 128 127 129 6 29 103 196 231 142 17 250 1 73)
+ (v128.const i32 3 231 1 128 129 6 103 17 42 29 73 42 0 255 127 142)
+ )
+ (v128.const i32 253 67 254 0 254 123 159 12 61 167 158 100 17 251 130 187)
+)
+(assert_return
+ (invoke "i8x16.sub_saturate_s"
+ (v128.const i32 0 42 255 128 127 129 6 29 103 196 231 142 17 250 1 73)
+ (v128.const i32 3 231 1 128 129 6 103 17 42 29 73 42 0 255 127 142)
+ )
+ (v128.const i32 253 67 254 0 127 128 159 12 61 167 158 128 17 251 130 127)
+)
+(assert_return
+ (invoke "i8x16.sub_saturate_u"
+ (v128.const i32 0 42 255 128 127 129 6 29 103 196 231 142 17 250 1 73)
+ (v128.const i32 3 231 1 128 129 6 103 17 42 29 73 42 0 255 127 142)
+ )
+ (v128.const i32 0 0 254 0 0 123 0 12 61 167 158 100 17 0 0 0)
+)
+(assert_return
+ (invoke "i8x16.mul"
+ (v128.const i32 0 42 255 128 127 129 6 29 103 196 231 142 17 250 1 73)
+ (v128.const i32 3 231 1 128 129 6 103 17 42 29 73 42 0 255 127 142)
+ )
+ (v128.const i32 0 230 255 0 255 6 106 237 230 52 223 76 0 6 127 126)
+)
+
+;; i16x8 arithmetic
+(assert_return (invoke "i16x8.neg" (v128.const i32 0 1 42 -3 -56 32767 -32768 32766))
+ (v128.const i32 0 -1 -42 3 56 -32767 -32768 -32766)
+)
+(assert_return (invoke "i16x8.any_true" (v128.const i32 0 0 0 0 0 0 0 0)) (i32.const 0))
+(assert_return (invoke "i16x8.any_true" (v128.const i32 0 0 1 0 0 0 0 0)) (i32.const 1))
+(assert_return (invoke "i16x8.any_true" (v128.const i32 1 1 1 1 1 0 1 1)) (i32.const 1))
+(assert_return (invoke "i16x8.any_true" (v128.const i32 1 1 1 1 1 1 1 1)) (i32.const 1))
+(assert_return (invoke "i16x8.all_true" (v128.const i32 0 0 0 0 0 0 0 0)) (i32.const 0))
+(assert_return (invoke "i16x8.all_true" (v128.const i32 0 0 1 0 0 0 0 0)) (i32.const 0))
+(assert_return (invoke "i16x8.all_true" (v128.const i32 1 1 1 1 1 0 1 1)) (i32.const 0))
+(assert_return (invoke "i16x8.all_true" (v128.const i32 1 1 1 1 1 1 1 1)) (i32.const 1))
+(assert_return (invoke "i16x8.shl" (v128.const i32 0 8 16 128 256 2048 4096 -32768) (i32.const 1)) (v128.const i32 0 16 32 256 512 4096 8192 0))
+(assert_return (invoke "i16x8.shl" (v128.const i32 0 8 16 128 256 2048 4096 -32768) (i32.const 16)) (v128.const i32 0 8 16 128 256 2048 4096 -32768))
+(assert_return (invoke "i16x8.shr_u" (v128.const i32 0 8 16 128 256 2048 4096 -32768) (i32.const 1)) (v128.const i32 0 4 8 64 128 1024 2048 16384))
+(assert_return (invoke "i16x8.shr_u" (v128.const i32 0 8 16 128 256 2048 4096 -32768) (i32.const 16)) (v128.const i32 0 8 16 128 256 2048 4096 -32768))
+(assert_return (invoke "i16x8.shr_s" (v128.const i32 0 8 16 128 256 2048 4096 -32768) (i32.const 1)) (v128.const i32 0 4 8 64 128 1024 2048 -16384))
+(assert_return (invoke "i16x8.shr_s" (v128.const i32 0 8 16 128 256 2048 4096 -32768) (i32.const 16)) (v128.const i32 0 8 16 128 256 2048 4096 -32768))
+(assert_return
+ (invoke "i16x8.add"
+ (v128.const i32 0 65280 32768 32512 33024 59136 64000 32766)
+ (v128.const i32 768 1 32768 33024 1536 18688 65280 2)
+ )
+ (v128.const i32 768 65281 0 0 34560 12288 63744 32768)
+)
+(assert_return
+ (invoke "i16x8.add_saturate_s"
+ (v128.const i32 0 65280 32768 32512 33024 59136 64000 32766)
+ (v128.const i32 768 1 32768 33024 1536 18688 65280 2)
+ )
+ (v128.const i32 768 65281 32768 0 34560 12288 63744 32767)
+)
+(assert_return
+ (invoke "i16x8.add_saturate_u"
+ (v128.const i32 0 65280 32768 32512 33024 59136 64000 32766)
+ (v128.const i32 768 1 32768 33024 1536 18688 65280 2)
+ )
+ (v128.const i32 768 65281 65535 65535 34560 65535 65535 32768)
+)
+(assert_return
+ (invoke "i16x8.sub"
+ (v128.const i32 0 65280 32768 32512 33024 59136 64000 32766)
+ (v128.const i32 768 1 32768 33024 1536 18688 65280 2)
+ )
+ (v128.const i32 64768 65279 0 65024 31488 40448 64256 32764)
+)
+(assert_return
+ (invoke "i16x8.sub_saturate_s"
+ (v128.const i32 0 65280 32768 32512 33024 59136 64000 32766)
+ (v128.const i32 768 1 32768 33024 1536 18688 65280 2)
+ )
+ (v128.const i32 64768 65279 0 32767 32768 40448 64256 32764)
+)
+(assert_return
+ (invoke "i16x8.sub_saturate_u"
+ (v128.const i32 0 65280 32768 32512 33024 59136 64000 32766)
+ (v128.const i32 768 1 32768 33024 1536 18688 65280 2)
+ )
+ (v128.const i32 0 65279 0 0 31488 40448 0 32764)
+)
+(assert_return
+ (invoke "i16x8.mul"
+ (v128.const i32 0 65280 32768 32512 33024 59136 64000 32766)
+ (v128.const i32 768 1 32768 33024 1536 18688 65280 2)
+ )
+ (v128.const i32 0 65280 0 0 0 0 0 65532)
+)
+
+;; i32x4 arithmetic
+(assert_return (invoke "i32x4.neg" (v128.const i32 0 1 0x80000000 0x7fffffff)) (v128.const i32 0 -1 0x80000000 0x80000001))
+(assert_return (invoke "i32x4.any_true" (v128.const i32 0 0 0 0)) (i32.const 0))
+(assert_return (invoke "i32x4.any_true" (v128.const i32 0 0 1 0)) (i32.const 1))
+(assert_return (invoke "i32x4.any_true" (v128.const i32 1 0 1 1)) (i32.const 1))
+(assert_return (invoke "i32x4.any_true" (v128.const i32 1 1 1 1)) (i32.const 1))
+(assert_return (invoke "i32x4.all_true" (v128.const i32 0 0 0 0)) (i32.const 0))
+(assert_return (invoke "i32x4.all_true" (v128.const i32 0 0 1 0)) (i32.const 0))
+(assert_return (invoke "i32x4.all_true" (v128.const i32 1 0 1 1)) (i32.const 0))
+(assert_return (invoke "i32x4.all_true" (v128.const i32 1 1 1 1)) (i32.const 1))
+(assert_return (invoke "i32x4.shl" (v128.const i32 1 0x40000000 0x80000000 -1) (i32.const 1)) (v128.const i32 2 0x80000000 0 -2))
+(assert_return (invoke "i32x4.shl" (v128.const i32 1 0x40000000 0x80000000 -1) (i32.const 32)) (v128.const i32 1 0x40000000 0x80000000 -1))
+(assert_return (invoke "i32x4.shr_s" (v128.const i32 1 0x40000000 0x80000000 -1) (i32.const 1)) (v128.const i32 0 0x20000000 0xc0000000 -1))
+(assert_return (invoke "i32x4.shr_s" (v128.const i32 1 0x40000000 0x80000000 -1) (i32.const 32)) (v128.const i32 1 0x40000000 0x80000000 -1))
+(assert_return (invoke "i32x4.shr_u" (v128.const i32 1 0x40000000 0x80000000 -1) (i32.const 1)) (v128.const i32 0 0x20000000 0x40000000 0x7fffffff))
+(assert_return (invoke "i32x4.shr_u" (v128.const i32 1 0x40000000 0x80000000 -1) (i32.const 32)) (v128.const i32 1 0x40000000 0x80000000 -1))
+(assert_return (invoke "i32x4.add" (v128.const i32 0 0x80000001 42 5) (v128.const i32 0 0x80000001 5 42)) (v128.const i32 0 2 47 47))
+(assert_return (invoke "i32x4.sub" (v128.const i32 0 2 47 47) (v128.const i32 0 0x80000001 42 5)) (v128.const i32 0 0x80000001 5 42))
+(assert_return (invoke "i32x4.mul" (v128.const i32 0 0x80000001 42 5) (v128.const i32 0 0x80000001 42 5)) (v128.const i32 0 1 1764 25))
+
+;; i64x2 arithmetic
+(assert_return (invoke "i64x2.neg" (v128.const i64 0x8000000000000000 42)) (v128.const i64 0x8000000000000000 -42))
+(assert_return (invoke "i64x2.any_true" (v128.const i64 0 0)) (i32.const 0))
+(assert_return (invoke "i64x2.any_true" (v128.const i64 1 0)) (i32.const 1))
+(assert_return (invoke "i64x2.any_true" (v128.const i64 1 1)) (i32.const 1))
+(assert_return (invoke "i64x2.all_true" (v128.const i64 0 0)) (i32.const 0))
+(assert_return (invoke "i64x2.all_true" (v128.const i64 1 0)) (i32.const 0))
+(assert_return (invoke "i64x2.all_true" (v128.const i64 1 1)) (i32.const 1))
+(assert_return (invoke "i64x2.shl" (v128.const i64 1 0x8000000000000000) (i32.const 1)) (v128.const i64 2 0))
+(assert_return (invoke "i64x2.shl" (v128.const i64 1 0x8000000000000000) (i32.const 64)) (v128.const i64 1 0x8000000000000000))
+(assert_return (invoke "i64x2.shr_s" (v128.const i64 1 0x8000000000000000) (i32.const 1)) (v128.const i64 0 0xc000000000000000))
+(assert_return (invoke "i64x2.shr_s" (v128.const i64 1 0x8000000000000000) (i32.const 64)) (v128.const i64 1 0x8000000000000000))
+(assert_return (invoke "i64x2.shr_u" (v128.const i64 1 0x8000000000000000) (i32.const 1)) (v128.const i64 0 0x4000000000000000))
+(assert_return (invoke "i64x2.shr_u" (v128.const i64 1 0x8000000000000000) (i32.const 64)) (v128.const i64 1 0x8000000000000000))
+(assert_return (invoke "i64x2.add" (v128.const i64 0x8000000000000001 42) (v128.const i64 0x8000000000000001 0)) (v128.const i64 2 42))
+(assert_return (invoke "i64x2.sub" (v128.const i64 2 42) (v128.const i64 0x8000000000000001 0)) (v128.const i64 0x8000000000000001 42))
+
+;; f32x4 arithmetic
+(assert_return (invoke "f32x4.abs" (v128.const f32 -0 nan -infinity 5)) (v128.const f32 0 nan infinity 5))
+(assert_return (invoke "f32x4.neg" (v128.const f32 -0 nan -infinity 5)) (v128.const f32 0 -nan infinity -5))
+(assert_return (invoke "f32x4.sqrt" (v128.const f32 -0 nan infinity 4)) (v128.const f32 -0 nan infinity 2))
+(assert_return (invoke "f32x4.add" (v128.const f32 nan -nan infinity 42) (v128.const f32 42 infinity infinity 1)) (v128.const f32 nan -nan infinity 43))
+(assert_return (invoke "f32x4.sub" (v128.const f32 nan -nan infinity 42) (v128.const f32 42 infinity -infinity 1)) (v128.const f32 nan -nan infinity 41))
+(assert_return (invoke "f32x4.mul" (v128.const f32 nan -nan infinity 42) (v128.const f32 42 infinity infinity 2)) (v128.const f32 nan -nan infinity 84))
+(assert_return (invoke "f32x4.div" (v128.const f32 nan -nan infinity 42) (v128.const f32 42 infinity 2 2)) (v128.const f32 nan -nan infinity 21))
+(assert_return (invoke "f32x4.min" (v128.const f32 -0 0 nan 5) (v128.const f32 0 -0 5 nan)) (v128.const f32 -0 -0 nan nan))
+(assert_return (invoke "f32x4.max" (v128.const f32 -0 0 nan 5) (v128.const f32 0 -0 5 nan)) (v128.const f32 0 0 nan nan))
+
+;; f64x2 arithmetic
+(assert_return (invoke "f64x2.abs" (v128.const f64 -0 nan)) (v128.const f64 0 nan))
+(assert_return (invoke "f64x2.abs" (v128.const f64 -infinity 5)) (v128.const f64 infinity 5))
+(assert_return (invoke "f64x2.neg" (v128.const f64 -0 nan)) (v128.const f64 0 -nan))
+(assert_return (invoke "f64x2.neg" (v128.const f64 -infinity 5)) (v128.const f64 infinity -5))
+(assert_return (invoke "f64x2.sqrt" (v128.const f64 -0 nan)) (v128.const f64 -0 nan))
+(assert_return (invoke "f64x2.sqrt" (v128.const f64 infinity 4)) (v128.const f64 infinity 2))
+(assert_return (invoke "f64x2.add" (v128.const f64 nan -nan) (v128.const f64 42 infinity)) (v128.const f64 nan -nan))
+(assert_return (invoke "f64x2.add" (v128.const f64 infinity 42) (v128.const f64 infinity 1)) (v128.const f64 infinity 43))
+(assert_return (invoke "f64x2.sub" (v128.const f64 nan -nan) (v128.const f64 42 infinity)) (v128.const f64 nan -nan))
+(assert_return (invoke "f64x2.sub" (v128.const f64 infinity 42) (v128.const f64 -infinity 1)) (v128.const f64 infinity 41))
+(assert_return (invoke "f64x2.mul" (v128.const f64 nan -nan) (v128.const f64 42 infinity)) (v128.const f64 nan -nan))
+(assert_return (invoke "f64x2.mul" (v128.const f64 infinity 42) (v128.const f64 infinity 2)) (v128.const f64 infinity 84))
+(assert_return (invoke "f64x2.div" (v128.const f64 nan -nan) (v128.const f64 42 infinity)) (v128.const f64 nan -nan))
+(assert_return (invoke "f64x2.div" (v128.const f64 infinity 42) (v128.const f64 2 2)) (v128.const f64 infinity 21))
+(assert_return (invoke "f64x2.min" (v128.const f64 -0 0) (v128.const f64 0 -0)) (v128.const f64 -0 -0))
+(assert_return (invoke "f64x2.min" (v128.const f64 nan 5) (v128.const f64 5 nan)) (v128.const f64 nan nan))
+(assert_return (invoke "f64x2.max" (v128.const f64 -0 0) (v128.const f64 0 -0)) (v128.const f64 0 0))
+(assert_return (invoke "f64x2.max" (v128.const f64 nan 5) (v128.const f64 5 nan)) (v128.const f64 nan nan))
+
+;; conversions
+(assert_return (invoke "i32x4.trunc_s/f32x4:sat" (v128.const f32 42 nan infinity -infinity)) (v128.const i32 42 0 2147483647 -2147483648))
+(assert_return (invoke "i32x4.trunc_u/f32x4:sat" (v128.const f32 42 nan infinity -infinity)) (v128.const i32 42 0 4294967295 0))
+(assert_return (invoke "i64x2.trunc_s/f64x2:sat" (v128.const f64 42 nan)) (v128.const i64 42 0))
+(assert_return (invoke "i64x2.trunc_s/f64x2:sat" (v128.const f64 infinity -infinity)) (v128.const i64 9223372036854775807 -9223372036854775808))
+(assert_return (invoke "i64x2.trunc_u/f64x2:sat" (v128.const f64 42 nan)) (v128.const i64 42 0))
+(assert_return (invoke "i64x2.trunc_u/f64x2:sat" (v128.const f64 infinity -infinity)) (v128.const i64 18446744073709551615 0))
+(assert_return (invoke "f32x4.convert_s/i32x4" (v128.const i32 0 -1 2147483647 -2147483648)) (v128.const f32 0 -1 2147483648 -2147483648))
+(assert_return (invoke "f32x4.convert_u/i32x4" (v128.const i32 0 -1 2147483647 -2147483648)) (v128.const f32 0 4294967296 2147483648 2147483648))
+(assert_return (invoke "f64x2.convert_s/i64x2" (v128.const i64 0 -1)) (v128.const f64 0 -1))
+(assert_return (invoke "f64x2.convert_s/i64x2" (v128.const i64 9223372036854775807 -9223372036854775808)) (v128.const f64 9223372036854775807 -9223372036854775808))
+(assert_return (invoke "f64x2.convert_u/i64x2" (v128.const i64 0 -1)) (v128.const f64 0 18446744073709551616))
+(assert_return (invoke "f64x2.convert_u/i64x2" (v128.const i64 9223372036854775807 -9223372036854775808)) (v128.const f64 9223372036854775807 9223372036854775808))