diff options
-rwxr-xr-x | scripts/gen-s-parser.py | 6 | ||||
-rw-r--r-- | src/binaryen-c.cpp | 2 | ||||
-rw-r--r-- | src/binaryen-c.h | 3 | ||||
-rw-r--r-- | src/gen-s-parser.inc | 43 | ||||
-rw-r--r-- | src/ir/cost.h | 6 | ||||
-rw-r--r-- | src/ir/features.h | 2 | ||||
-rw-r--r-- | src/js/binaryen.js-post.js | 8 | ||||
-rw-r--r-- | src/literal.h | 2 | ||||
-rw-r--r-- | src/passes/Print.cpp | 18 | ||||
-rw-r--r-- | src/tools/fuzzing.h | 4 | ||||
-rw-r--r-- | src/wasm-binary.h | 7 | ||||
-rw-r--r-- | src/wasm-interpreter.h | 12 | ||||
-rw-r--r-- | src/wasm.h | 6 | ||||
-rw-r--r-- | src/wasm/literal.cpp | 6 | ||||
-rw-r--r-- | src/wasm/wasm-binary.cpp | 24 | ||||
-rw-r--r-- | src/wasm/wasm-stack.cpp | 24 | ||||
-rw-r--r-- | src/wasm/wasm-validator.cpp | 6 | ||||
-rw-r--r-- | src/wasm/wasm.cpp | 6 | ||||
-rw-r--r-- | test/binaryen.js/kitchen-sink.js | 2 | ||||
-rw-r--r-- | test/binaryen.js/kitchen-sink.js.txt | 20 | ||||
-rw-r--r-- | test/example/c-api-kitchen-sink.c | 2 | ||||
-rw-r--r-- | test/example/c-api-kitchen-sink.txt | 10 | ||||
-rw-r--r-- | test/simd.wast | 30 | ||||
-rw-r--r-- | test/simd.wast.from-wast | 32 | ||||
-rw-r--r-- | test/simd.wast.fromBinary | 32 | ||||
-rw-r--r-- | test/simd.wast.fromBinary.noDebugInfo | 192 | ||||
-rw-r--r-- | test/spec/simd.wast | 9 |
27 files changed, 270 insertions, 244 deletions
diff --git a/scripts/gen-s-parser.py b/scripts/gen-s-parser.py index 545d48f9c..f780156ed 100755 --- a/scripts/gen-s-parser.py +++ b/scripts/gen-s-parser.py @@ -430,8 +430,6 @@ instructions = [ ("i32x4.extmul_low_i16x8_u", "makeBinary(s, BinaryOp::ExtMulLowUVecI32x4)"), ("i32x4.extmul_high_i16x8_u", "makeBinary(s, BinaryOp::ExtMulHighUVecI32x4)"), ("i64x2.neg", "makeUnary(s, UnaryOp::NegVecI64x2)"), - ("i64x2.any_true", "makeUnary(s, UnaryOp::AnyTrueVecI64x2)"), - ("i64x2.all_true", "makeUnary(s, UnaryOp::AllTrueVecI64x2)"), ("i64x2.bitmask", "makeUnary(s, UnaryOp::BitmaskVecI64x2)"), ("i64x2.shl", "makeSIMDShift(s, SIMDShiftOp::ShlVecI64x2)"), ("i64x2.shr_s", "makeSIMDShift(s, SIMDShiftOp::ShrSVecI64x2)"), @@ -514,6 +512,10 @@ instructions = [ ("i64x2.widen_low_i32x4_u", "makeUnary(s, UnaryOp::WidenLowUVecI32x4ToVecI64x2)"), ("i64x2.widen_high_i32x4_u", "makeUnary(s, UnaryOp::WidenHighUVecI32x4ToVecI64x2)"), ("v8x16.swizzle", "makeBinary(s, BinaryOp::SwizzleVec8x16)"), + ("i16x8.extadd_pairwise_i8x16_s", "makeUnary(s, UnaryOp::ExtAddPairwiseSVecI8x16ToI16x8)"), + ("i16x8.extadd_pairwise_i8x16_u", "makeUnary(s, UnaryOp::ExtAddPairwiseUVecI8x16ToI16x8)"), + ("i32x4.extadd_pairwise_i16x8_s", "makeUnary(s, UnaryOp::ExtAddPairwiseSVecI16x8ToI32x4)"), + ("i32x4.extadd_pairwise_i16x8_u", "makeUnary(s, UnaryOp::ExtAddPairwiseUVecI16x8ToI32x4)"), # reference types instructions # TODO Add table instructions ("ref.null", "makeRefNull(s)"), diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp index b6e14d694..59ca3aebc 100644 --- a/src/binaryen-c.cpp +++ b/src/binaryen-c.cpp @@ -580,8 +580,6 @@ BinaryenOp BinaryenDotSVecI16x8ToVecI32x4(void) { return DotSVecI16x8ToVecI32x4; } 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; } diff --git a/src/binaryen-c.h b/src/binaryen-c.h index 33ada13b1..a32d9ff1c 100644 --- a/src/binaryen-c.h +++ b/src/binaryen-c.h @@ -486,8 +486,6 @@ BINARYEN_API BinaryenOp BinaryenMaxSVecI32x4(void); BINARYEN_API BinaryenOp BinaryenMaxUVecI32x4(void); BINARYEN_API BinaryenOp BinaryenDotSVecI16x8ToVecI32x4(void); BINARYEN_API BinaryenOp BinaryenNegVecI64x2(void); -BINARYEN_API BinaryenOp BinaryenAnyTrueVecI64x2(void); -BINARYEN_API BinaryenOp BinaryenAllTrueVecI64x2(void); BINARYEN_API BinaryenOp BinaryenShlVecI64x2(void); BINARYEN_API BinaryenOp BinaryenShrSVecI64x2(void); BINARYEN_API BinaryenOp BinaryenShrUVecI64x2(void); @@ -528,6 +526,7 @@ BINARYEN_API BinaryenOp BinaryenCeilVecF64x2(void); BINARYEN_API BinaryenOp BinaryenFloorVecF64x2(void); BINARYEN_API BinaryenOp BinaryenTruncVecF64x2(void); BINARYEN_API BinaryenOp BinaryenNearestVecF64x2(void); +// TODO: Add extending pairwise adds to C and JS APIs once merged BINARYEN_API BinaryenOp BinaryenTruncSatSVecF32x4ToVecI32x4(void); BINARYEN_API BinaryenOp BinaryenTruncSatUVecF32x4ToVecI32x4(void); BINARYEN_API BinaryenOp BinaryenTruncSatSVecF64x2ToVecI64x2(void); diff --git a/src/gen-s-parser.inc b/src/gen-s-parser.inc index d4e1afe38..c564f3974 100644 --- a/src/gen-s-parser.inc +++ b/src/gen-s-parser.inc @@ -4,8 +4,8 @@ #ifdef INSTRUCTION_PARSER #undef INSTRUCTION_PARSER -char op[28] = {'\0'}; -strncpy(op, s[0]->c_str(), 27); +char op[30] = {'\0'}; +strncpy(op, s[0]->c_str(), 29); switch (op[0]) { case 'a': { switch (op[1]) { @@ -800,6 +800,17 @@ switch (op[0]) { goto parse_error; case 'x': { switch (op[9]) { + case 'a': { + switch (op[28]) { + case 's': + if (strcmp(op, "i16x8.extadd_pairwise_i8x16_s") == 0) { return makeUnary(s, UnaryOp::ExtAddPairwiseSVecI8x16ToI16x8); } + goto parse_error; + case 'u': + if (strcmp(op, "i16x8.extadd_pairwise_i8x16_u") == 0) { return makeUnary(s, UnaryOp::ExtAddPairwiseUVecI8x16ToI16x8); } + goto parse_error; + default: goto parse_error; + } + } case 'm': { switch (op[13]) { case 'h': { @@ -1554,6 +1565,17 @@ switch (op[0]) { goto parse_error; case 'x': { switch (op[9]) { + case 'a': { + switch (op[28]) { + case 's': + if (strcmp(op, "i32x4.extadd_pairwise_i16x8_s") == 0) { return makeUnary(s, UnaryOp::ExtAddPairwiseSVecI16x8ToI32x4); } + goto parse_error; + case 'u': + if (strcmp(op, "i32x4.extadd_pairwise_i16x8_u") == 0) { return makeUnary(s, UnaryOp::ExtAddPairwiseUVecI16x8ToI32x4); } + goto parse_error; + default: goto parse_error; + } + } case 'm': { switch (op[13]) { case 'h': { @@ -2298,20 +2320,9 @@ switch (op[0]) { } case 'x': { switch (op[6]) { - case 'a': { - switch (op[7]) { - case 'd': - if (strcmp(op, "i64x2.add") == 0) { return makeBinary(s, BinaryOp::AddVecI64x2); } - goto parse_error; - 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 'a': + if (strcmp(op, "i64x2.add") == 0) { return makeBinary(s, BinaryOp::AddVecI64x2); } + goto parse_error; case 'b': if (strcmp(op, "i64x2.bitmask") == 0) { return makeUnary(s, UnaryOp::BitmaskVecI64x2); } goto parse_error; diff --git a/src/ir/cost.h b/src/ir/cost.h index c218cbaab..ef0a2bde1 100644 --- a/src/ir/cost.h +++ b/src/ir/cost.h @@ -189,8 +189,6 @@ struct CostAnalyzer : public OverriddenVisitor<CostAnalyzer, Index> { case AllTrueVecI32x4: case BitmaskVecI32x4: case NegVecI64x2: - case AnyTrueVecI64x2: - case AllTrueVecI64x2: case BitmaskVecI64x2: case AbsVecF32x4: case NegVecF32x4: @@ -206,6 +204,10 @@ struct CostAnalyzer : public OverriddenVisitor<CostAnalyzer, Index> { case FloorVecF64x2: case TruncVecF64x2: case NearestVecF64x2: + case ExtAddPairwiseSVecI8x16ToI16x8: + case ExtAddPairwiseUVecI8x16ToI16x8: + case ExtAddPairwiseSVecI16x8ToI32x4: + case ExtAddPairwiseUVecI16x8ToI32x4: case TruncSatSVecF32x4ToVecI32x4: case TruncSatUVecF32x4ToVecI32x4: case TruncSatSVecF64x2ToVecI64x2: diff --git a/src/ir/features.h b/src/ir/features.h index 6dff96398..aa87bd5bd 100644 --- a/src/ir/features.h +++ b/src/ir/features.h @@ -57,8 +57,6 @@ inline FeatureSet get(UnaryOp op) { case AnyTrueVecI32x4: case AllTrueVecI32x4: case NegVecI64x2: - case AnyTrueVecI64x2: - case AllTrueVecI64x2: case AbsVecF32x4: case NegVecF32x4: case SqrtVecF32x4: diff --git a/src/js/binaryen.js-post.js b/src/js/binaryen.js-post.js index 128e148e2..6cdf26e32 100644 --- a/src/js/binaryen.js-post.js +++ b/src/js/binaryen.js-post.js @@ -416,8 +416,6 @@ function initializeConstants() { 'MaxSVecI32x4', 'MaxUVecI32x4', 'NegVecI64x2', - 'AnyTrueVecI64x2', - 'AllTrueVecI64x2', 'ShlVecI64x2', 'ShrSVecI64x2', 'ShrUVecI64x2', @@ -1828,12 +1826,6 @@ function wrapModule(module, self = {}) { 'neg'(value) { return Module['_BinaryenUnary'](module, Module['NegVecI64x2'], value); }, - 'any_true'(value) { - return Module['_BinaryenUnary'](module, Module['AnyTrueVecI64x2'], value); - }, - 'all_true'(value) { - return Module['_BinaryenUnary'](module, Module['AllTrueVecI64x2'], value); - }, 'shl'(vec, shift) { return Module['_BinaryenSIMDShift'](module, Module['ShlVecI64x2'], vec, shift); }, diff --git a/src/literal.h b/src/literal.h index bf8937533..5b590e07f 100644 --- a/src/literal.h +++ b/src/literal.h @@ -576,8 +576,6 @@ public: Literal extMulLowUI32x4(const Literal& other) const; Literal extMulHighUI32x4(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; diff --git a/src/passes/Print.cpp b/src/passes/Print.cpp index b921fb074..f9d469faf 100644 --- a/src/passes/Print.cpp +++ b/src/passes/Print.cpp @@ -957,12 +957,6 @@ struct PrintExpressionContents case NegVecI64x2: o << "i64x2.neg"; break; - case AnyTrueVecI64x2: - o << "i64x2.any_true"; - break; - case AllTrueVecI64x2: - o << "i64x2.all_true"; - break; case BitmaskVecI64x2: o << "i64x2.bitmask"; break; @@ -1008,6 +1002,18 @@ struct PrintExpressionContents case NearestVecF64x2: o << "f64x2.nearest"; break; + case ExtAddPairwiseSVecI8x16ToI16x8: + o << "i16x8.extadd_pairwise_i8x16_s"; + break; + case ExtAddPairwiseUVecI8x16ToI16x8: + o << "i16x8.extadd_pairwise_i8x16_u"; + break; + case ExtAddPairwiseSVecI16x8ToI32x4: + o << "i32x4.extadd_pairwise_i16x8_s"; + break; + case ExtAddPairwiseUVecI16x8ToI32x4: + o << "i32x4.extadd_pairwise_i16x8_u"; + break; case TruncSatSVecF32x4ToVecI32x4: o << "i32x4.trunc_sat_f32x4_s"; break; diff --git a/src/tools/fuzzing.h b/src/tools/fuzzing.h index 7d9131767..09e83031d 100644 --- a/src/tools/fuzzing.h +++ b/src/tools/fuzzing.h @@ -2168,9 +2168,7 @@ private: AnyTrueVecI16x8, AllTrueVecI16x8, AnyTrueVecI32x4, - AllTrueVecI32x4, - AnyTrueVecI64x2, - AllTrueVecI64x2), + AllTrueVecI32x4), make(Type::v128)}); } case Type::funcref: diff --git a/src/wasm-binary.h b/src/wasm-binary.h index 382bfbd4f..b2c922dc2 100644 --- a/src/wasm-binary.h +++ b/src/wasm-binary.h @@ -897,8 +897,6 @@ enum ASTNodes { I64x2WidenLowUI32x4 = 0xc9, I64x2WidenHighUI32x4 = 0xca, I64x2Neg = 0xc1, - I64x2AnyTrue = 0xc2, - I64x2AllTrue = 0xc3, I64x2Shl = 0xcb, I64x2ShrS = 0xcc, I64x2ShrU = 0xcd, @@ -939,6 +937,11 @@ enum ASTNodes { F64x2PMin = 0xf6, F64x2PMax = 0xf7, + I16x8ExtAddPairWiseSI8x16 = 0xc2, + I16x8ExtAddPairWiseUI8x16 = 0xc3, + I32x4ExtAddPairWiseSI16x8 = 0xa5, + I32x4ExtAddPairWiseUI16x8 = 0xa6, + I32x4TruncSatSF32x4 = 0xf8, I32x4TruncSatUF32x4 = 0xf9, F32x4ConvertSI32x4 = 0xfa, diff --git a/src/wasm-interpreter.h b/src/wasm-interpreter.h index 019a56db1..3d963269d 100644 --- a/src/wasm-interpreter.h +++ b/src/wasm-interpreter.h @@ -488,10 +488,6 @@ public: return value.bitmaskI32x4(); case NegVecI64x2: return value.negI64x2(); - case AnyTrueVecI64x2: - return value.anyTrueI64x2(); - case AllTrueVecI64x2: - return value.allTrueI64x2(); case BitmaskVecI64x2: WASM_UNREACHABLE("unimp"); case AbsVecF32x4: @@ -522,6 +518,14 @@ public: return value.truncF64x2(); case NearestVecF64x2: return value.nearestF64x2(); + case ExtAddPairwiseSVecI8x16ToI16x8: + WASM_UNREACHABLE("unimp"); + case ExtAddPairwiseUVecI8x16ToI16x8: + WASM_UNREACHABLE("unimp"); + case ExtAddPairwiseSVecI16x8ToI32x4: + WASM_UNREACHABLE("unimp"); + case ExtAddPairwiseUVecI16x8ToI32x4: + WASM_UNREACHABLE("unimp"); case TruncSatSVecF32x4ToVecI32x4: return value.truncSatToSI32x4(); case TruncSatUVecF32x4ToVecI32x4: diff --git a/src/wasm.h b/src/wasm.h index 1d5642625..12aacd2ed 100644 --- a/src/wasm.h +++ b/src/wasm.h @@ -174,8 +174,6 @@ enum UnaryOp { AllTrueVecI32x4, BitmaskVecI32x4, NegVecI64x2, - AnyTrueVecI64x2, - AllTrueVecI64x2, BitmaskVecI64x2, AbsVecF32x4, NegVecF32x4, @@ -191,6 +189,10 @@ enum UnaryOp { FloorVecF64x2, TruncVecF64x2, NearestVecF64x2, + ExtAddPairwiseSVecI8x16ToI16x8, + ExtAddPairwiseUVecI8x16ToI16x8, + ExtAddPairwiseSVecI16x8ToI32x4, + ExtAddPairwiseUVecI16x8ToI32x4, // SIMD conversions TruncSatSVecF32x4ToVecI32x4, diff --git a/src/wasm/literal.cpp b/src/wasm/literal.cpp index f526cebf3..49d3cbf63 100644 --- a/src/wasm/literal.cpp +++ b/src/wasm/literal.cpp @@ -1868,12 +1868,6 @@ Literal Literal::allTrueI32x4() const { Literal Literal::bitmaskI32x4() const { return bitmask<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, diff --git a/src/wasm/wasm-binary.cpp b/src/wasm/wasm-binary.cpp index 70aaa6a61..e616493af 100644 --- a/src/wasm/wasm-binary.cpp +++ b/src/wasm/wasm-binary.cpp @@ -4836,14 +4836,6 @@ bool WasmBinaryBuilder::maybeVisitSIMDUnary(Expression*& out, uint32_t code) { 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::I64x2Bitmask: curr = allocator.alloc<Unary>(); curr->op = BitmaskVecI64x2; @@ -4904,6 +4896,22 @@ bool WasmBinaryBuilder::maybeVisitSIMDUnary(Expression*& out, uint32_t code) { curr = allocator.alloc<Unary>(); curr->op = NearestVecF64x2; break; + case BinaryConsts::I16x8ExtAddPairWiseSI8x16: + curr = allocator.alloc<Unary>(); + curr->op = ExtAddPairwiseSVecI8x16ToI16x8; + break; + case BinaryConsts::I16x8ExtAddPairWiseUI8x16: + curr = allocator.alloc<Unary>(); + curr->op = ExtAddPairwiseUVecI8x16ToI16x8; + break; + case BinaryConsts::I32x4ExtAddPairWiseSI16x8: + curr = allocator.alloc<Unary>(); + curr->op = ExtAddPairwiseSVecI16x8ToI32x4; + break; + case BinaryConsts::I32x4ExtAddPairWiseUI16x8: + curr = allocator.alloc<Unary>(); + curr->op = ExtAddPairwiseUVecI16x8ToI32x4; + break; case BinaryConsts::I32x4TruncSatSF32x4: curr = allocator.alloc<Unary>(); curr->op = TruncSatSVecF32x4ToVecI32x4; diff --git a/src/wasm/wasm-stack.cpp b/src/wasm/wasm-stack.cpp index 6af7279bb..776928b88 100644 --- a/src/wasm/wasm-stack.cpp +++ b/src/wasm/wasm-stack.cpp @@ -1028,14 +1028,6 @@ void BinaryInstWriter::visitUnary(Unary* curr) { 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 BitmaskVecI64x2: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2Bitmask); @@ -1084,6 +1076,22 @@ void BinaryInstWriter::visitUnary(Unary* curr) { o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F64x2Nearest); break; + case ExtAddPairwiseSVecI8x16ToI16x8: + o << int8_t(BinaryConsts::SIMDPrefix) + << U32LEB(BinaryConsts::I16x8ExtAddPairWiseSI8x16); + break; + case ExtAddPairwiseUVecI8x16ToI16x8: + o << int8_t(BinaryConsts::SIMDPrefix) + << U32LEB(BinaryConsts::I16x8ExtAddPairWiseUI8x16); + break; + case ExtAddPairwiseSVecI16x8ToI32x4: + o << int8_t(BinaryConsts::SIMDPrefix) + << U32LEB(BinaryConsts::I32x4ExtAddPairWiseSI16x8); + break; + case ExtAddPairwiseUVecI16x8ToI32x4: + o << int8_t(BinaryConsts::SIMDPrefix) + << U32LEB(BinaryConsts::I32x4ExtAddPairWiseUI16x8); + break; case TruncSatSVecF32x4ToVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4TruncSatSF32x4); diff --git a/src/wasm/wasm-validator.cpp b/src/wasm/wasm-validator.cpp index 745ce8c06..a45be1fd3 100644 --- a/src/wasm/wasm-validator.cpp +++ b/src/wasm/wasm-validator.cpp @@ -1866,6 +1866,10 @@ void FunctionValidator::visitUnary(Unary* curr) { case FloorVecF64x2: case TruncVecF64x2: case NearestVecF64x2: + case ExtAddPairwiseSVecI8x16ToI16x8: + case ExtAddPairwiseUVecI8x16ToI16x8: + case ExtAddPairwiseSVecI16x8ToI32x4: + case ExtAddPairwiseUVecI16x8ToI32x4: case TruncSatSVecF32x4ToVecI32x4: case TruncSatUVecF32x4ToVecI32x4: case TruncSatSVecF64x2ToVecI64x2: @@ -1893,11 +1897,9 @@ void FunctionValidator::visitUnary(Unary* curr) { case AnyTrueVecI8x16: case AnyTrueVecI16x8: case AnyTrueVecI32x4: - case AnyTrueVecI64x2: case AllTrueVecI8x16: case AllTrueVecI16x8: case AllTrueVecI32x4: - case AllTrueVecI64x2: case BitmaskVecI8x16: case BitmaskVecI16x8: case BitmaskVecI32x4: diff --git a/src/wasm/wasm.cpp b/src/wasm/wasm.cpp index 436eedb2b..264f2bf83 100644 --- a/src/wasm/wasm.cpp +++ b/src/wasm/wasm.cpp @@ -783,6 +783,10 @@ void Unary::finalize() { case FloorVecF64x2: case TruncVecF64x2: case NearestVecF64x2: + case ExtAddPairwiseSVecI8x16ToI16x8: + case ExtAddPairwiseUVecI8x16ToI16x8: + case ExtAddPairwiseSVecI16x8ToI32x4: + case ExtAddPairwiseUVecI16x8ToI32x4: case TruncSatSVecF32x4ToVecI32x4: case TruncSatUVecF32x4ToVecI32x4: case TruncSatSVecF64x2ToVecI64x2: @@ -808,11 +812,9 @@ void Unary::finalize() { case AnyTrueVecI8x16: case AnyTrueVecI16x8: case AnyTrueVecI32x4: - case AnyTrueVecI64x2: case AllTrueVecI8x16: case AllTrueVecI16x8: case AllTrueVecI32x4: - case AllTrueVecI64x2: case BitmaskVecI8x16: case BitmaskVecI16x8: case BitmaskVecI32x4: diff --git a/test/binaryen.js/kitchen-sink.js b/test/binaryen.js/kitchen-sink.js index 82a0dfd76..146335130 100644 --- a/test/binaryen.js/kitchen-sink.js +++ b/test/binaryen.js/kitchen-sink.js @@ -281,8 +281,6 @@ function test_core() { module.i32x4.all_true(module.v128.const(v128_bytes)), module.i32x4.bitmask(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)), diff --git a/test/binaryen.js/kitchen-sink.js.txt b/test/binaryen.js/kitchen-sink.js.txt index b50956b0e..0127fbf4e 100644 --- a/test/binaryen.js/kitchen-sink.js.txt +++ b/test/binaryen.js/kitchen-sink.js.txt @@ -483,16 +483,6 @@ getExpressionInfo(tuple[3])={"id":14,"type":5,"value":3.7} ) ) (drop - (i64x2.any_true - (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) - ) - ) - (drop - (i64x2.all_true - (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) - ) - ) - (drop (f32x4.abs (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) @@ -2365,16 +2355,6 @@ getExpressionInfo(tuple[3])={"id":14,"type":5,"value":3.7} ) ) (drop - (i64x2.any_true - (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) - ) - ) - (drop - (i64x2.all_true - (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) - ) - ) - (drop (f32x4.abs (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) diff --git a/test/example/c-api-kitchen-sink.c b/test/example/c-api-kitchen-sink.c index 25f8b1937..79cbabca3 100644 --- a/test/example/c-api-kitchen-sink.c +++ b/test/example/c-api-kitchen-sink.c @@ -435,8 +435,6 @@ void test_core() { makeUnary(module, BinaryenAllTrueVecI32x4(), v128), makeUnary(module, BinaryenBitmaskVecI32x4(), v128), makeUnary(module, BinaryenNegVecI64x2(), v128), - makeUnary(module, BinaryenAnyTrueVecI64x2(), v128), - makeUnary(module, BinaryenAllTrueVecI64x2(), v128), makeUnary(module, BinaryenAbsVecF32x4(), v128), makeUnary(module, BinaryenNegVecF32x4(), v128), makeUnary(module, BinaryenSqrtVecF32x4(), v128), diff --git a/test/example/c-api-kitchen-sink.txt b/test/example/c-api-kitchen-sink.txt index dbbb30eb6..083fa1ce5 100644 --- a/test/example/c-api-kitchen-sink.txt +++ b/test/example/c-api-kitchen-sink.txt @@ -389,16 +389,6 @@ BinaryenFeatureAll: 8191 ) ) (drop - (i64x2.any_true - (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) - ) - ) - (drop - (i64x2.all_true - (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) - ) - ) - (drop (f32x4.abs (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) diff --git a/test/simd.wast b/test/simd.wast index 7296a075e..2af6c42aa 100644 --- a/test/simd.wast +++ b/test/simd.wast @@ -927,16 +927,6 @@ (local.get $0) ) ) - (func $i64x2.any_true (param $0 v128) (result i32) - (i64x2.any_true - (local.get $0) - ) - ) - (func $i64x2.all_true (param $0 v128) (result i32) - (i64x2.all_true - (local.get $0) - ) - ) (func $i64x2.bitmask (param $0 v128) (result i32) (i64x2.bitmask (local.get $0) @@ -1196,6 +1186,26 @@ (local.get $2) ) ) + (func $i16x8.extadd_pairwise_i8x16_s (param $0 v128) (result v128) + (i16x8.extadd_pairwise_i8x16_s + (local.get $0) + ) + ) + (func $i16x8.extadd_pairwise_i8x16_u (param $0 v128) (result v128) + (i16x8.extadd_pairwise_i8x16_u + (local.get $0) + ) + ) + (func $i32x4.extadd_pairwise_i16x8_s (param $0 v128) (result v128) + (i32x4.extadd_pairwise_i16x8_s + (local.get $0) + ) + ) + (func $i32x4.extadd_pairwise_i16x8_u (param $0 v128) (result v128) + (i32x4.extadd_pairwise_i16x8_u + (local.get $0) + ) + ) (func $i32x4.trunc_sat_f32x4_s (param $0 v128) (result v128) (i32x4.trunc_sat_f32x4_s (local.get $0) diff --git a/test/simd.wast.from-wast b/test/simd.wast.from-wast index ab30772d3..08be92638 100644 --- a/test/simd.wast.from-wast +++ b/test/simd.wast.from-wast @@ -1,8 +1,8 @@ (module (type $v128_v128_=>_v128 (func (param v128 v128) (result v128))) (type $v128_=>_v128 (func (param v128) (result v128))) - (type $v128_=>_i32 (func (param v128) (result i32))) (type $i32_=>_v128 (func (param i32) (result v128))) + (type $v128_=>_i32 (func (param v128) (result i32))) (type $v128_i32_=>_v128 (func (param v128 i32) (result v128))) (type $v128_v128_v128_=>_v128 (func (param v128 v128 v128) (result v128))) (type $i32_v128_=>_none (func (param i32 v128))) @@ -944,16 +944,6 @@ (local.get $0) ) ) - (func $i64x2.any_true (param $0 v128) (result i32) - (i64x2.any_true - (local.get $0) - ) - ) - (func $i64x2.all_true (param $0 v128) (result i32) - (i64x2.all_true - (local.get $0) - ) - ) (func $i64x2.bitmask (param $0 v128) (result i32) (i64x2.bitmask (local.get $0) @@ -1213,6 +1203,26 @@ (local.get $2) ) ) + (func $i16x8.extadd_pairwise_i8x16_s (param $0 v128) (result v128) + (i16x8.extadd_pairwise_i8x16_s + (local.get $0) + ) + ) + (func $i16x8.extadd_pairwise_i8x16_u (param $0 v128) (result v128) + (i16x8.extadd_pairwise_i8x16_u + (local.get $0) + ) + ) + (func $i32x4.extadd_pairwise_i16x8_s (param $0 v128) (result v128) + (i32x4.extadd_pairwise_i16x8_s + (local.get $0) + ) + ) + (func $i32x4.extadd_pairwise_i16x8_u (param $0 v128) (result v128) + (i32x4.extadd_pairwise_i16x8_u + (local.get $0) + ) + ) (func $i32x4.trunc_sat_f32x4_s (param $0 v128) (result v128) (i32x4.trunc_sat_f32x4_s (local.get $0) diff --git a/test/simd.wast.fromBinary b/test/simd.wast.fromBinary index 935de0c09..e66cf405b 100644 --- a/test/simd.wast.fromBinary +++ b/test/simd.wast.fromBinary @@ -1,8 +1,8 @@ (module (type $v128_v128_=>_v128 (func (param v128 v128) (result v128))) (type $v128_=>_v128 (func (param v128) (result v128))) - (type $v128_=>_i32 (func (param v128) (result i32))) (type $i32_=>_v128 (func (param i32) (result v128))) + (type $v128_=>_i32 (func (param v128) (result i32))) (type $v128_i32_=>_v128 (func (param v128 i32) (result v128))) (type $v128_v128_v128_=>_v128 (func (param v128 v128 v128) (result v128))) (type $i32_v128_=>_none (func (param i32 v128))) @@ -944,16 +944,6 @@ (local.get $0) ) ) - (func $i64x2.any_true (param $0 v128) (result i32) - (i64x2.any_true - (local.get $0) - ) - ) - (func $i64x2.all_true (param $0 v128) (result i32) - (i64x2.all_true - (local.get $0) - ) - ) (func $i64x2.bitmask (param $0 v128) (result i32) (i64x2.bitmask (local.get $0) @@ -1213,6 +1203,26 @@ (local.get $2) ) ) + (func $i16x8.extadd_pairwise_i8x16_s (param $0 v128) (result v128) + (i16x8.extadd_pairwise_i8x16_s + (local.get $0) + ) + ) + (func $i16x8.extadd_pairwise_i8x16_u (param $0 v128) (result v128) + (i16x8.extadd_pairwise_i8x16_u + (local.get $0) + ) + ) + (func $i32x4.extadd_pairwise_i16x8_s (param $0 v128) (result v128) + (i32x4.extadd_pairwise_i16x8_s + (local.get $0) + ) + ) + (func $i32x4.extadd_pairwise_i16x8_u (param $0 v128) (result v128) + (i32x4.extadd_pairwise_i16x8_u + (local.get $0) + ) + ) (func $i32x4.trunc_sat_f32x4_s (param $0 v128) (result v128) (i32x4.trunc_sat_f32x4_s (local.get $0) diff --git a/test/simd.wast.fromBinary.noDebugInfo b/test/simd.wast.fromBinary.noDebugInfo index 42543f448..011093e9e 100644 --- a/test/simd.wast.fromBinary.noDebugInfo +++ b/test/simd.wast.fromBinary.noDebugInfo @@ -1,8 +1,8 @@ (module (type $v128_v128_=>_v128 (func (param v128 v128) (result v128))) (type $v128_=>_v128 (func (param v128) (result v128))) - (type $v128_=>_i32 (func (param v128) (result i32))) (type $i32_=>_v128 (func (param i32) (result v128))) + (type $v128_=>_i32 (func (param v128) (result i32))) (type $v128_i32_=>_v128 (func (param v128 i32) (result v128))) (type $v128_v128_v128_=>_v128 (func (param v128 v128 v128) (result v128))) (type $i32_v128_=>_none (func (param i32 v128))) @@ -945,459 +945,469 @@ ) ) (func $162 (param $0 v128) (result i32) - (i64x2.any_true - (local.get $0) - ) - ) - (func $163 (param $0 v128) (result i32) - (i64x2.all_true - (local.get $0) - ) - ) - (func $164 (param $0 v128) (result i32) (i64x2.bitmask (local.get $0) ) ) - (func $165 (param $0 v128) (param $1 i32) (result v128) + (func $163 (param $0 v128) (param $1 i32) (result v128) (i64x2.shl (local.get $0) (local.get $1) ) ) - (func $166 (param $0 v128) (param $1 i32) (result v128) + (func $164 (param $0 v128) (param $1 i32) (result v128) (i64x2.shr_s (local.get $0) (local.get $1) ) ) - (func $167 (param $0 v128) (param $1 i32) (result v128) + (func $165 (param $0 v128) (param $1 i32) (result v128) (i64x2.shr_u (local.get $0) (local.get $1) ) ) - (func $168 (param $0 v128) (param $1 v128) (result v128) + (func $166 (param $0 v128) (param $1 v128) (result v128) (i64x2.add (local.get $0) (local.get $1) ) ) - (func $169 (param $0 v128) (param $1 v128) (result v128) + (func $167 (param $0 v128) (param $1 v128) (result v128) (i64x2.sub (local.get $0) (local.get $1) ) ) - (func $170 (param $0 v128) (param $1 v128) (result v128) + (func $168 (param $0 v128) (param $1 v128) (result v128) (i64x2.mul (local.get $0) (local.get $1) ) ) - (func $171 (param $0 v128) (param $1 v128) (result v128) + (func $169 (param $0 v128) (param $1 v128) (result v128) (i64x2.extmul_low_i32x4_s (local.get $0) (local.get $1) ) ) - (func $172 (param $0 v128) (param $1 v128) (result v128) + (func $170 (param $0 v128) (param $1 v128) (result v128) (i64x2.extmul_high_i32x4_s (local.get $0) (local.get $1) ) ) - (func $173 (param $0 v128) (param $1 v128) (result v128) + (func $171 (param $0 v128) (param $1 v128) (result v128) (i64x2.extmul_low_i32x4_u (local.get $0) (local.get $1) ) ) - (func $174 (param $0 v128) (param $1 v128) (result v128) + (func $172 (param $0 v128) (param $1 v128) (result v128) (i64x2.extmul_high_i32x4_u (local.get $0) (local.get $1) ) ) - (func $175 (param $0 v128) (param $1 v128) (result v128) + (func $173 (param $0 v128) (param $1 v128) (result v128) (f32x4.add (local.get $0) (local.get $1) ) ) - (func $176 (param $0 v128) (param $1 v128) (result v128) + (func $174 (param $0 v128) (param $1 v128) (result v128) (f32x4.sub (local.get $0) (local.get $1) ) ) - (func $177 (param $0 v128) (param $1 v128) (result v128) + (func $175 (param $0 v128) (param $1 v128) (result v128) (f32x4.mul (local.get $0) (local.get $1) ) ) - (func $178 (param $0 v128) (param $1 v128) (result v128) + (func $176 (param $0 v128) (param $1 v128) (result v128) (f32x4.div (local.get $0) (local.get $1) ) ) - (func $179 (param $0 v128) (param $1 v128) (result v128) + (func $177 (param $0 v128) (param $1 v128) (result v128) (f32x4.min (local.get $0) (local.get $1) ) ) - (func $180 (param $0 v128) (param $1 v128) (result v128) + (func $178 (param $0 v128) (param $1 v128) (result v128) (f32x4.max (local.get $0) (local.get $1) ) ) - (func $181 (param $0 v128) (param $1 v128) (result v128) + (func $179 (param $0 v128) (param $1 v128) (result v128) (f32x4.pmin (local.get $0) (local.get $1) ) ) - (func $182 (param $0 v128) (param $1 v128) (result v128) + (func $180 (param $0 v128) (param $1 v128) (result v128) (f32x4.pmax (local.get $0) (local.get $1) ) ) - (func $183 (param $0 v128) (result v128) + (func $181 (param $0 v128) (result v128) (f32x4.ceil (local.get $0) ) ) - (func $184 (param $0 v128) (result v128) + (func $182 (param $0 v128) (result v128) (f32x4.floor (local.get $0) ) ) - (func $185 (param $0 v128) (result v128) + (func $183 (param $0 v128) (result v128) (f32x4.trunc (local.get $0) ) ) - (func $186 (param $0 v128) (result v128) + (func $184 (param $0 v128) (result v128) (f32x4.nearest (local.get $0) ) ) - (func $187 (param $0 v128) (result v128) + (func $185 (param $0 v128) (result v128) (f32x4.abs (local.get $0) ) ) - (func $188 (param $0 v128) (result v128) + (func $186 (param $0 v128) (result v128) (f32x4.neg (local.get $0) ) ) - (func $189 (param $0 v128) (result v128) + (func $187 (param $0 v128) (result v128) (f32x4.sqrt (local.get $0) ) ) - (func $190 (param $0 v128) (param $1 v128) (param $2 v128) (result v128) + (func $188 (param $0 v128) (param $1 v128) (param $2 v128) (result v128) (f32x4.qfma (local.get $0) (local.get $1) (local.get $2) ) ) - (func $191 (param $0 v128) (param $1 v128) (param $2 v128) (result v128) + (func $189 (param $0 v128) (param $1 v128) (param $2 v128) (result v128) (f32x4.qfms (local.get $0) (local.get $1) (local.get $2) ) ) - (func $192 (param $0 v128) (param $1 v128) (result v128) + (func $190 (param $0 v128) (param $1 v128) (result v128) (f64x2.add (local.get $0) (local.get $1) ) ) - (func $193 (param $0 v128) (param $1 v128) (result v128) + (func $191 (param $0 v128) (param $1 v128) (result v128) (f64x2.sub (local.get $0) (local.get $1) ) ) - (func $194 (param $0 v128) (param $1 v128) (result v128) + (func $192 (param $0 v128) (param $1 v128) (result v128) (f64x2.mul (local.get $0) (local.get $1) ) ) - (func $195 (param $0 v128) (param $1 v128) (result v128) + (func $193 (param $0 v128) (param $1 v128) (result v128) (f64x2.div (local.get $0) (local.get $1) ) ) - (func $196 (param $0 v128) (param $1 v128) (result v128) + (func $194 (param $0 v128) (param $1 v128) (result v128) (f64x2.min (local.get $0) (local.get $1) ) ) - (func $197 (param $0 v128) (param $1 v128) (result v128) + (func $195 (param $0 v128) (param $1 v128) (result v128) (f64x2.max (local.get $0) (local.get $1) ) ) - (func $198 (param $0 v128) (param $1 v128) (result v128) + (func $196 (param $0 v128) (param $1 v128) (result v128) (f64x2.pmin (local.get $0) (local.get $1) ) ) - (func $199 (param $0 v128) (param $1 v128) (result v128) + (func $197 (param $0 v128) (param $1 v128) (result v128) (f64x2.pmax (local.get $0) (local.get $1) ) ) - (func $200 (param $0 v128) (result v128) + (func $198 (param $0 v128) (result v128) (f64x2.ceil (local.get $0) ) ) - (func $201 (param $0 v128) (result v128) + (func $199 (param $0 v128) (result v128) (f64x2.floor (local.get $0) ) ) - (func $202 (param $0 v128) (result v128) + (func $200 (param $0 v128) (result v128) (f64x2.trunc (local.get $0) ) ) - (func $203 (param $0 v128) (result v128) + (func $201 (param $0 v128) (result v128) (f64x2.nearest (local.get $0) ) ) - (func $204 (param $0 v128) (result v128) + (func $202 (param $0 v128) (result v128) (f64x2.abs (local.get $0) ) ) - (func $205 (param $0 v128) (result v128) + (func $203 (param $0 v128) (result v128) (f64x2.neg (local.get $0) ) ) - (func $206 (param $0 v128) (result v128) + (func $204 (param $0 v128) (result v128) (f64x2.sqrt (local.get $0) ) ) - (func $207 (param $0 v128) (param $1 v128) (param $2 v128) (result v128) + (func $205 (param $0 v128) (param $1 v128) (param $2 v128) (result v128) (f64x2.qfma (local.get $0) (local.get $1) (local.get $2) ) ) - (func $208 (param $0 v128) (param $1 v128) (param $2 v128) (result v128) + (func $206 (param $0 v128) (param $1 v128) (param $2 v128) (result v128) (f64x2.qfms (local.get $0) (local.get $1) (local.get $2) ) ) + (func $207 (param $0 v128) (result v128) + (i16x8.extadd_pairwise_i8x16_s + (local.get $0) + ) + ) + (func $208 (param $0 v128) (result v128) + (i16x8.extadd_pairwise_i8x16_u + (local.get $0) + ) + ) (func $209 (param $0 v128) (result v128) - (i32x4.trunc_sat_f32x4_s + (i32x4.extadd_pairwise_i16x8_s (local.get $0) ) ) (func $210 (param $0 v128) (result v128) - (i32x4.trunc_sat_f32x4_u + (i32x4.extadd_pairwise_i16x8_u (local.get $0) ) ) (func $211 (param $0 v128) (result v128) - (i64x2.trunc_sat_f64x2_s + (i32x4.trunc_sat_f32x4_s (local.get $0) ) ) (func $212 (param $0 v128) (result v128) - (i64x2.trunc_sat_f64x2_u + (i32x4.trunc_sat_f32x4_u (local.get $0) ) ) (func $213 (param $0 v128) (result v128) - (f32x4.convert_i32x4_s + (i64x2.trunc_sat_f64x2_s (local.get $0) ) ) (func $214 (param $0 v128) (result v128) - (f32x4.convert_i32x4_u + (i64x2.trunc_sat_f64x2_u (local.get $0) ) ) (func $215 (param $0 v128) (result v128) - (f64x2.convert_i64x2_s + (f32x4.convert_i32x4_s (local.get $0) ) ) (func $216 (param $0 v128) (result v128) + (f32x4.convert_i32x4_u + (local.get $0) + ) + ) + (func $217 (param $0 v128) (result v128) + (f64x2.convert_i64x2_s + (local.get $0) + ) + ) + (func $218 (param $0 v128) (result v128) (f64x2.convert_i64x2_u (local.get $0) ) ) - (func $217 (param $0 i32) (result v128) + (func $219 (param $0 i32) (result v128) (v8x16.load_splat (local.get $0) ) ) - (func $218 (param $0 i32) (result v128) + (func $220 (param $0 i32) (result v128) (v16x8.load_splat (local.get $0) ) ) - (func $219 (param $0 i32) (result v128) + (func $221 (param $0 i32) (result v128) (v32x4.load_splat (local.get $0) ) ) - (func $220 (param $0 i32) (result v128) + (func $222 (param $0 i32) (result v128) (v64x2.load_splat (local.get $0) ) ) - (func $221 (param $0 v128) (param $1 v128) (result v128) + (func $223 (param $0 v128) (param $1 v128) (result v128) (i8x16.narrow_i16x8_s (local.get $0) (local.get $1) ) ) - (func $222 (param $0 v128) (param $1 v128) (result v128) + (func $224 (param $0 v128) (param $1 v128) (result v128) (i8x16.narrow_i16x8_u (local.get $0) (local.get $1) ) ) - (func $223 (param $0 v128) (param $1 v128) (result v128) + (func $225 (param $0 v128) (param $1 v128) (result v128) (i16x8.narrow_i32x4_s (local.get $0) (local.get $1) ) ) - (func $224 (param $0 v128) (param $1 v128) (result v128) + (func $226 (param $0 v128) (param $1 v128) (result v128) (i16x8.narrow_i32x4_u (local.get $0) (local.get $1) ) ) - (func $225 (param $0 v128) (result v128) + (func $227 (param $0 v128) (result v128) (i16x8.widen_low_i8x16_s (local.get $0) ) ) - (func $226 (param $0 v128) (result v128) + (func $228 (param $0 v128) (result v128) (i16x8.widen_high_i8x16_s (local.get $0) ) ) - (func $227 (param $0 v128) (result v128) + (func $229 (param $0 v128) (result v128) (i16x8.widen_low_i8x16_u (local.get $0) ) ) - (func $228 (param $0 v128) (result v128) + (func $230 (param $0 v128) (result v128) (i16x8.widen_high_i8x16_u (local.get $0) ) ) - (func $229 (param $0 v128) (result v128) + (func $231 (param $0 v128) (result v128) (i32x4.widen_low_i16x8_s (local.get $0) ) ) - (func $230 (param $0 v128) (result v128) + (func $232 (param $0 v128) (result v128) (i32x4.widen_high_i16x8_s (local.get $0) ) ) - (func $231 (param $0 v128) (result v128) + (func $233 (param $0 v128) (result v128) (i32x4.widen_low_i16x8_u (local.get $0) ) ) - (func $232 (param $0 v128) (result v128) + (func $234 (param $0 v128) (result v128) (i32x4.widen_high_i16x8_u (local.get $0) ) ) - (func $233 (param $0 v128) (result v128) + (func $235 (param $0 v128) (result v128) (i64x2.widen_low_i32x4_s (local.get $0) ) ) - (func $234 (param $0 v128) (result v128) + (func $236 (param $0 v128) (result v128) (i64x2.widen_high_i32x4_s (local.get $0) ) ) - (func $235 (param $0 v128) (result v128) + (func $237 (param $0 v128) (result v128) (i64x2.widen_low_i32x4_u (local.get $0) ) ) - (func $236 (param $0 v128) (result v128) + (func $238 (param $0 v128) (result v128) (i64x2.widen_high_i32x4_u (local.get $0) ) ) - (func $237 (param $0 i32) (result v128) + (func $239 (param $0 i32) (result v128) (i16x8.load8x8_u (local.get $0) ) ) - (func $238 (param $0 i32) (result v128) + (func $240 (param $0 i32) (result v128) (i16x8.load8x8_s (local.get $0) ) ) - (func $239 (param $0 i32) (result v128) + (func $241 (param $0 i32) (result v128) (i32x4.load16x4_s (local.get $0) ) ) - (func $240 (param $0 i32) (result v128) + (func $242 (param $0 i32) (result v128) (i32x4.load16x4_u (local.get $0) ) ) - (func $241 (param $0 i32) (result v128) + (func $243 (param $0 i32) (result v128) (i64x2.load32x2_s (local.get $0) ) ) - (func $242 (param $0 i32) (result v128) + (func $244 (param $0 i32) (result v128) (i64x2.load32x2_u (local.get $0) ) ) - (func $243 (param $0 i32) (result v128) + (func $245 (param $0 i32) (result v128) (v128.load32_zero (local.get $0) ) ) - (func $244 (param $0 i32) (result v128) + (func $246 (param $0 i32) (result v128) (v128.load64_zero (local.get $0) ) ) - (func $245 (param $0 v128) (param $1 v128) (result v128) + (func $247 (param $0 v128) (param $1 v128) (result v128) (v8x16.swizzle (local.get $0) (local.get $1) diff --git a/test/spec/simd.wast b/test/spec/simd.wast index 51bea4deb..968a3e553 100644 --- a/test/spec/simd.wast +++ b/test/spec/simd.wast @@ -185,8 +185,6 @@ (func (export "i32x4.max_u") (param $0 v128) (param $1 v128) (result v128) (i32x4.max_u (local.get $0) (local.get $1))) (func (export "i32x4.dot_i16x8_s") (param $0 v128) (param $1 v128) (result v128) (i32x4.dot_i16x8_s (local.get $0) (local.get $1))) (func (export "i64x2.neg") (param $0 v128) (result v128) (i64x2.neg (local.get $0))) - (func (export "i64x2.any_true") (param $0 v128) (result i32) (i64x2.any_true (local.get $0))) - (func (export "i64x2.all_true") (param $0 v128) (result i32) (i64x2.all_true (local.get $0))) (func (export "i64x2.bitmask") (param $0 v128) (result i32) (i64x2.bitmask (local.get $0))) (func (export "i64x2.shl") (param $0 v128) (param $1 i32) (result v128) (i64x2.shl (local.get $0) (local.get $1))) (func (export "i64x2.shr_s") (param $0 v128) (param $1 i32) (result v128) (i64x2.shr_s (local.get $0) (local.get $1))) @@ -228,6 +226,7 @@ (func (export "f64x2.floor") (param $0 v128) (result v128) (f64x2.floor (local.get $0))) (func (export "f64x2.trunc") (param $0 v128) (result v128) (f64x2.trunc (local.get $0))) (func (export "f64x2.nearest") (param $0 v128) (result v128) (f64x2.nearest (local.get $0))) + ;; TODO: Extending pairwise adds once they have interpreter support (func (export "i32x4.trunc_sat_f32x4_s") (param $0 v128) (result v128) (i32x4.trunc_sat_f32x4_s (local.get $0))) (func (export "i32x4.trunc_sat_f32x4_u") (param $0 v128) (result v128) (i32x4.trunc_sat_f32x4_u (local.get $0))) (func (export "i64x2.trunc_sat_f64x2_s") (param $0 v128) (result v128) (i64x2.trunc_sat_f64x2_s (local.get $0))) @@ -867,12 +866,6 @@ ;; i64x2 arithmetic (assert_return (invoke "i64x2.neg" (v128.const i64x2 0x8000000000000000 42)) (v128.const i64x2 0x8000000000000000 -42)) -(assert_return (invoke "i64x2.any_true" (v128.const i64x2 0 0)) (i32.const 0)) -(assert_return (invoke "i64x2.any_true" (v128.const i64x2 1 0)) (i32.const 1)) -(assert_return (invoke "i64x2.any_true" (v128.const i64x2 1 1)) (i32.const 1)) -(assert_return (invoke "i64x2.all_true" (v128.const i64x2 0 0)) (i32.const 0)) -(assert_return (invoke "i64x2.all_true" (v128.const i64x2 1 0)) (i32.const 0)) -(assert_return (invoke "i64x2.all_true" (v128.const i64x2 1 1)) (i32.const 1)) ;; TODO: test i64x2.bitmask (assert_return (invoke "i64x2.shl" (v128.const i64x2 1 0x8000000000000000) (i32.const 1)) (v128.const i64x2 2 0)) (assert_return (invoke "i64x2.shl" (v128.const i64x2 1 0x8000000000000000) (i32.const 64)) (v128.const i64x2 1 0x8000000000000000)) |