summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/binaryen-c.cpp2
-rw-r--r--src/binaryen-c.h3
-rw-r--r--src/js/binaryen.js-post.js8
-rw-r--r--test/binaryen.js/kitchen-sink.js2
-rw-r--r--test/binaryen.js/kitchen-sink.js.txt20
-rw-r--r--test/example/c-api-kitchen-sink.c10
-rw-r--r--test/example/c-api-kitchen-sink.txt10
7 files changed, 54 insertions, 1 deletions
diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp
index d348a4d5d..45201d919 100644
--- a/src/binaryen-c.cpp
+++ b/src/binaryen-c.cpp
@@ -687,6 +687,8 @@ BinaryenOp BinaryenLoadExtSVec32x2ToVecI64x2(void) {
BinaryenOp BinaryenLoadExtUVec32x2ToVecI64x2(void) {
return LoadExtUVec32x2ToVecI64x2;
}
+BinaryenOp BinaryenLoad32Zero(void) { return Load32Zero; }
+BinaryenOp BinaryenLoad64Zero(void) { return Load64Zero; }
BinaryenOp BinaryenNarrowSVecI16x8ToVecI8x16(void) {
return NarrowSVecI16x8ToVecI8x16;
}
diff --git a/src/binaryen-c.h b/src/binaryen-c.h
index 217ed96db..da14af22e 100644
--- a/src/binaryen-c.h
+++ b/src/binaryen-c.h
@@ -558,7 +558,8 @@ BINARYEN_API BinaryenOp BinaryenLoadExtSVec16x4ToVecI32x4(void);
BINARYEN_API BinaryenOp BinaryenLoadExtUVec16x4ToVecI32x4(void);
BINARYEN_API BinaryenOp BinaryenLoadExtSVec32x2ToVecI64x2(void);
BINARYEN_API BinaryenOp BinaryenLoadExtUVec32x2ToVecI64x2(void);
-// TODO: Add Load{32,64}Zero to C and JS APIs once merged to proposal
+BINARYEN_API BinaryenOp BinaryenLoad32Zero(void);
+BINARYEN_API BinaryenOp BinaryenLoad64Zero(void);
BINARYEN_API BinaryenOp BinaryenNarrowSVecI16x8ToVecI8x16(void);
BINARYEN_API BinaryenOp BinaryenNarrowUVecI16x8ToVecI8x16(void);
BINARYEN_API BinaryenOp BinaryenNarrowSVecI32x4ToVecI16x8(void);
diff --git a/src/js/binaryen.js-post.js b/src/js/binaryen.js-post.js
index 907068059..cfd37e9db 100644
--- a/src/js/binaryen.js-post.js
+++ b/src/js/binaryen.js-post.js
@@ -490,6 +490,8 @@ function initializeConstants() {
'LoadExtUVec16x4ToVecI32x4',
'LoadExtSVec32x2ToVecI64x2',
'LoadExtUVec32x2ToVecI64x2',
+ 'Load32Zero',
+ 'Load64Zero',
'NarrowSVecI16x8ToVecI8x16',
'NarrowUVecI16x8ToVecI8x16',
'NarrowSVecI32x4ToVecI16x8',
@@ -1490,6 +1492,12 @@ function wrapModule(module, self = {}) {
'load32x2_u'(offset, align, ptr) {
return Module['_BinaryenSIMDLoad'](module, Module['LoadExtUVec32x2ToVecI64x2'], offset, align, ptr);
},
+ 'load32_zero'(offset, align, ptr) {
+ return Module['_BinaryenSIMDLoad'](module, Module['Load32Zero'], offset, align, ptr);
+ },
+ 'load64_zero'(offset, align, ptr) {
+ return Module['_BinaryenSIMDLoad'](module, Module['Load64Zero'], offset, align, ptr);
+ },
'store'(offset, align, ptr, value) {
return Module['_BinaryenStore'](module, 16, offset, align, ptr, value, Module['v128']);
},
diff --git a/test/binaryen.js/kitchen-sink.js b/test/binaryen.js/kitchen-sink.js
index 78fa53e22..76193b0bf 100644
--- a/test/binaryen.js/kitchen-sink.js
+++ b/test/binaryen.js/kitchen-sink.js
@@ -515,6 +515,8 @@ function test_core() {
module.v128.load16x4_u(0, 8, module.i32.const(128)),
module.v128.load32x2_s(0, 8, module.i32.const(128)),
module.v128.load32x2_u(0, 8, module.i32.const(128)),
+ module.v128.load32_zero(0, 4, module.i32.const(128)),
+ module.v128.load64_zero(0, 8, module.i32.const(128)),
// Other SIMD
module.i8x16.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)),
diff --git a/test/binaryen.js/kitchen-sink.js.txt b/test/binaryen.js/kitchen-sink.js.txt
index 51db40ade..c835fe299 100644
--- a/test/binaryen.js/kitchen-sink.js.txt
+++ b/test/binaryen.js/kitchen-sink.js.txt
@@ -1802,6 +1802,16 @@ getExpressionInfo(tuple[3])={"id":14,"type":5,"value":3.7}
)
)
(drop
+ (v128.load32_zero
+ (i32.const 128)
+ )
+ )
+ (drop
+ (v128.load64_zero
+ (i32.const 128)
+ )
+ )
+ (drop
(i8x16.shuffle 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
(v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d)
(v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d)
@@ -3804,6 +3814,16 @@ getExpressionInfo(tuple[3])={"id":14,"type":5,"value":3.7}
)
)
(drop
+ (v128.load32_zero
+ (i32.const 128)
+ )
+ )
+ (drop
+ (v128.load64_zero
+ (i32.const 128)
+ )
+ )
+ (drop
(i8x16.shuffle 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
(v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d)
(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 da4eeccca..bbffb1ea2 100644
--- a/test/example/c-api-kitchen-sink.c
+++ b/test/example/c-api-kitchen-sink.c
@@ -675,6 +675,16 @@ void test_core() {
0,
8,
makeInt32(module, 128)),
+ BinaryenSIMDLoad(module,
+ BinaryenLoad32Zero(),
+ 0,
+ 4,
+ makeInt32(module, 128)),
+ BinaryenSIMDLoad(module,
+ BinaryenLoad64Zero(),
+ 0,
+ 8,
+ makeInt32(module, 128)),
// Other SIMD
makeSIMDShuffle(module),
makeSIMDTernary(module, BinaryenBitselectVec128()),
diff --git a/test/example/c-api-kitchen-sink.txt b/test/example/c-api-kitchen-sink.txt
index 40fc10ef3..16dde8c00 100644
--- a/test/example/c-api-kitchen-sink.txt
+++ b/test/example/c-api-kitchen-sink.txt
@@ -1712,6 +1712,16 @@ BinaryenFeatureAll: 8191
)
)
(drop
+ (v128.load32_zero
+ (i32.const 128)
+ )
+ )
+ (drop
+ (v128.load64_zero
+ (i32.const 128)
+ )
+ )
+ (drop
(i8x16.shuffle 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
(v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d)
(v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d)