diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp index dfcd425e3ff..86eb5324d29 100644 --- a/src/binaryen-c.cpp +++ b/src/binaryen-c.cpp @@ -628,6 +628,18 @@ BinaryenOp BinaryenCeilVecF64x2(void) { return CeilVecF64x2; } BinaryenOp BinaryenFloorVecF64x2(void) { return FloorVecF64x2; } BinaryenOp BinaryenTruncVecF64x2(void) { return TruncVecF64x2; } BinaryenOp BinaryenNearestVecF64x2(void) { return NearestVecF64x2; } +BinaryenOp BinaryenExtAddPairwiseSVecI8x16ToI16x8(void) { + return ExtAddPairwiseSVecI8x16ToI16x8; +} +BinaryenOp BinaryenExtAddPairwiseUVecI8x16ToI16x8(void) { + return ExtAddPairwiseUVecI8x16ToI16x8; +} +BinaryenOp BinaryenExtAddPairwiseSVecI16x8ToI32x4(void) { + return ExtAddPairwiseSVecI16x8ToI32x4; +} +BinaryenOp BinaryenExtAddPairwiseUVecI16x8ToI32x4(void) { + return ExtAddPairwiseUVecI16x8ToI32x4; +} BinaryenOp BinaryenTruncSatSVecF32x4ToVecI32x4(void) { return TruncSatSVecF32x4ToVecI32x4; } diff --git a/src/binaryen-c.h b/src/binaryen-c.h index 84661b75004..038ed43c223 100644 --- a/src/binaryen-c.h +++ b/src/binaryen-c.h @@ -529,7 +529,10 @@ 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 BinaryenExtAddPairwiseSVecI8x16ToI16x8(void); +BINARYEN_API BinaryenOp BinaryenExtAddPairwiseUVecI8x16ToI16x8(void); +BINARYEN_API BinaryenOp BinaryenExtAddPairwiseSVecI16x8ToI32x4(void); +BINARYEN_API BinaryenOp BinaryenExtAddPairwiseUVecI16x8ToI32x4(void); BINARYEN_API BinaryenOp BinaryenTruncSatSVecF32x4ToVecI32x4(void); BINARYEN_API BinaryenOp BinaryenTruncSatUVecF32x4ToVecI32x4(void); BINARYEN_API BinaryenOp BinaryenConvertSVecI32x4ToVecF32x4(void); diff --git a/src/js/binaryen.js-post.js b/src/js/binaryen.js-post.js index 80affeefcbc..15e342eb853 100644 --- a/src/js/binaryen.js-post.js +++ b/src/js/binaryen.js-post.js @@ -459,6 +459,10 @@ function initializeConstants() { 'FloorVecF64x2', 'TruncVecF64x2', 'NearestVecF64x2', + 'ExtAddPairwiseSVecI8x16ToI16x8', + 'ExtAddPairwiseUVecI8x16ToI16x8', + 'ExtAddPairwiseSVecI16x8ToI32x4', + 'ExtAddPairwiseUVecI16x8ToI32x4', 'TruncSatSVecF32x4ToVecI32x4', 'TruncSatUVecF32x4ToVecI32x4', 'ConvertSVecI32x4ToVecF32x4', @@ -1717,6 +1721,12 @@ function wrapModule(module, self = {}) { 'avgr_u'(left, right) { return Module['_BinaryenBinary'](module, Module['AvgrUVecI16x8'], left, right); }, + 'extadd_pairwise_i8x16_s'(value) { + return Module['_BinaryenUnary'](module, Module['ExtAddPairwiseSVecI8x16ToI16x8'], value); + }, + 'extadd_pairwise_i8x16_u'(value) { + return Module['_BinaryenUnary'](module, Module['ExtAddPairwiseUVecI8x16ToI16x8'], value); + }, 'narrow_i32x4_s'(left, right) { return Module['_BinaryenBinary'](module, Module['NarrowSVecI32x4ToVecI16x8'], left, right); }, @@ -1822,6 +1832,12 @@ function wrapModule(module, self = {}) { 'dot_i16x8_s'(left, right) { return Module['_BinaryenBinary'](module, Module['DotSVecI16x8ToVecI32x4'], left, right); }, + 'extadd_pairwise_i16x8_s'(value) { + return Module['_BinaryenUnary'](module, Module['ExtAddPairwiseSVecI16x8ToI32x4'], value); + }, + 'extadd_pairwise_i16x8_u'(value) { + return Module['_BinaryenUnary'](module, Module['ExtAddPairwiseUVecI16x8ToI32x4'], value); + }, 'trunc_sat_f32x4_s'(value) { return Module['_BinaryenUnary'](module, Module['TruncSatSVecF32x4ToVecI32x4'], value); }, diff --git a/test/binaryen.js/kitchen-sink.js b/test/binaryen.js/kitchen-sink.js index c0301c0d6fd..85184346600 100644 --- a/test/binaryen.js/kitchen-sink.js +++ b/test/binaryen.js/kitchen-sink.js @@ -275,10 +275,14 @@ function test_core() { module.i16x8.neg(module.v128.const(v128_bytes)), module.i16x8.all_true(module.v128.const(v128_bytes)), module.i16x8.bitmask(module.v128.const(v128_bytes)), + module.i16x8.extadd_pairwise_i8x16_s(module.v128.const(v128_bytes)), + module.i16x8.extadd_pairwise_i8x16_u(module.v128.const(v128_bytes)), module.i32x4.abs(module.v128.const(v128_bytes)), module.i32x4.neg(module.v128.const(v128_bytes)), module.i32x4.all_true(module.v128.const(v128_bytes)), module.i32x4.bitmask(module.v128.const(v128_bytes)), + module.i32x4.extadd_pairwise_i16x8_s(module.v128.const(v128_bytes)), + module.i32x4.extadd_pairwise_i16x8_u(module.v128.const(v128_bytes)), module.i64x2.abs(module.v128.const(v128_bytes)), module.i64x2.neg(module.v128.const(v128_bytes)), module.i64x2.all_true(module.v128.const(v128_bytes)), diff --git a/test/binaryen.js/kitchen-sink.js.txt b/test/binaryen.js/kitchen-sink.js.txt index 64ff484266c..a5820381870 100644 --- a/test/binaryen.js/kitchen-sink.js.txt +++ b/test/binaryen.js/kitchen-sink.js.txt @@ -451,6 +451,16 @@ getExpressionInfo(tuple[3])={"id":14,"type":5,"value":3.7} (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) + (drop + (i16x8.extadd_pairwise_i8x16_s + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + ) + ) + (drop + (i16x8.extadd_pairwise_i8x16_u + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + ) + ) (drop (i32x4.abs (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) @@ -471,6 +481,16 @@ getExpressionInfo(tuple[3])={"id":14,"type":5,"value":3.7} (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) + (drop + (i32x4.extadd_pairwise_i16x8_s + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + ) + ) + (drop + (i32x4.extadd_pairwise_i16x8_u + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + ) + ) (drop (i64x2.abs (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) @@ -2325,6 +2345,16 @@ getExpressionInfo(tuple[3])={"id":14,"type":5,"value":3.7} (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) + (drop + (i16x8.extadd_pairwise_i8x16_s + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + ) + ) + (drop + (i16x8.extadd_pairwise_i8x16_u + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + ) + ) (drop (i32x4.abs (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) @@ -2345,6 +2375,16 @@ getExpressionInfo(tuple[3])={"id":14,"type":5,"value":3.7} (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) + (drop + (i32x4.extadd_pairwise_i16x8_s + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + ) + ) + (drop + (i32x4.extadd_pairwise_i16x8_u + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + ) + ) (drop (i64x2.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 887f33b58e0..7e6755f8987 100644 --- a/test/example/c-api-kitchen-sink.c +++ b/test/example/c-api-kitchen-sink.c @@ -586,6 +586,10 @@ void test_core() { makeUnary(module, BinaryenFloorVecF64x2(), v128), makeUnary(module, BinaryenTruncVecF64x2(), v128), makeUnary(module, BinaryenNearestVecF64x2(), v128), + makeUnary(module, BinaryenExtAddPairwiseSVecI8x16ToI16x8(), v128), + makeUnary(module, BinaryenExtAddPairwiseUVecI8x16ToI16x8(), v128), + makeUnary(module, BinaryenExtAddPairwiseSVecI16x8ToI32x4(), v128), + makeUnary(module, BinaryenExtAddPairwiseUVecI16x8ToI32x4(), v128), makeBinary(module, BinaryenNarrowSVecI16x8ToVecI8x16(), v128), makeBinary(module, BinaryenNarrowUVecI16x8ToVecI8x16(), v128), makeBinary(module, BinaryenNarrowSVecI32x4ToVecI16x8(), v128), diff --git a/test/example/c-api-kitchen-sink.txt b/test/example/c-api-kitchen-sink.txt index 244777478d7..54845f4cb99 100644 --- a/test/example/c-api-kitchen-sink.txt +++ b/test/example/c-api-kitchen-sink.txt @@ -1355,6 +1355,26 @@ BinaryenFeatureAll: 8191 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) ) ) + (drop + (i16x8.extadd_pairwise_i8x16_s + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + ) + ) + (drop + (i16x8.extadd_pairwise_i8x16_u + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + ) + ) + (drop + (i32x4.extadd_pairwise_i16x8_s + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + ) + ) + (drop + (i32x4.extadd_pairwise_i16x8_u + (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d) + ) + ) (drop (i8x16.narrow_i16x8_s (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d)