summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/binaryen-c.cpp12
-rw-r--r--src/binaryen-c.h5
-rw-r--r--src/js/binaryen.js-post.js16
-rw-r--r--test/binaryen.js/kitchen-sink.js4
-rw-r--r--test/binaryen.js/kitchen-sink.js.txt40
-rw-r--r--test/example/c-api-kitchen-sink.c4
-rw-r--r--test/example/c-api-kitchen-sink.txt20
7 files changed, 100 insertions, 1 deletions
diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp
index dfcd425e3..86eb5324d 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 84661b750..038ed43c2 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 80affeefc..15e342eb8 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 c0301c0d6..851843466 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 64ff48426..a58203818 100644
--- a/test/binaryen.js/kitchen-sink.js.txt
+++ b/test/binaryen.js/kitchen-sink.js.txt
@@ -452,6 +452,16 @@ getExpressionInfo(tuple[3])={"id":14,"type":5,"value":3.7}
)
)
(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)
)
@@ -472,6 +482,16 @@ getExpressionInfo(tuple[3])={"id":14,"type":5,"value":3.7}
)
)
(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)
)
@@ -2326,6 +2346,16 @@ getExpressionInfo(tuple[3])={"id":14,"type":5,"value":3.7}
)
)
(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)
)
@@ -2346,6 +2376,16 @@ getExpressionInfo(tuple[3])={"id":14,"type":5,"value":3.7}
)
)
(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 887f33b58..7e6755f89 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 244777478..54845f4cb 100644
--- a/test/example/c-api-kitchen-sink.txt
+++ b/test/example/c-api-kitchen-sink.txt
@@ -1356,6 +1356,26 @@ BinaryenFeatureAll: 8191
)
)
(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)
(v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d)