summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniel Wirtz <dcode@dcode.io>2021-04-08 09:03:10 +0200
committerGitHub <noreply@github.com>2021-04-08 09:03:10 +0200
commit8bc2f8024dd1ed1a74b538815229bd4106d55535 (patch)
treec5189a1eb9b97cc4ba2ebff0b05eaaf7c371ddb4 /src
parent756a718a16e96b37ae9a0ef6cb7e56210bef3b13 (diff)
downloadbinaryen-8bc2f8024dd1ed1a74b538815229bd4106d55535.tar.gz
binaryen-8bc2f8024dd1ed1a74b538815229bd4106d55535.tar.bz2
binaryen-8bc2f8024dd1ed1a74b538815229bd4106d55535.zip
Add new SIMD conversion instructions to C/JS API (#3781)
Adds C/JS APIs for the SIMD instructions * ConvertLowSVecI32x4ToVecF64x2 * ConvertLowUVecI32x4ToVecF64x2 * TruncSatZeroSVecF64x2ToVecI32x4 * TruncSatZeroUVecF64x2ToVecI32x4 * DemoteZeroVecF64x2ToVecF32x4 * PromoteLowVecF32x4ToVecF64x2
Diffstat (limited to 'src')
-rw-r--r--src/binaryen-c.cpp18
-rw-r--r--src/binaryen-c.h6
-rw-r--r--src/js/binaryen.js-post.js24
3 files changed, 48 insertions, 0 deletions
diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp
index 86eb5324d..267bd9cc3 100644
--- a/src/binaryen-c.cpp
+++ b/src/binaryen-c.cpp
@@ -722,6 +722,24 @@ BinaryenOp BinaryenExtendLowUVecI32x4ToVecI64x2(void) {
BinaryenOp BinaryenExtendHighUVecI32x4ToVecI64x2(void) {
return ExtendHighUVecI32x4ToVecI64x2;
}
+BinaryenOp BinaryenConvertLowSVecI32x4ToVecF64x2(void) {
+ return ConvertLowSVecI32x4ToVecF64x2;
+}
+BinaryenOp BinaryenConvertLowUVecI32x4ToVecF64x2(void) {
+ return ConvertLowUVecI32x4ToVecF64x2;
+}
+BinaryenOp BinaryenTruncSatZeroSVecF64x2ToVecI32x4(void) {
+ return TruncSatZeroSVecF64x2ToVecI32x4;
+}
+BinaryenOp BinaryenTruncSatZeroUVecF64x2ToVecI32x4(void) {
+ return TruncSatZeroUVecF64x2ToVecI32x4;
+}
+BinaryenOp BinaryenDemoteZeroVecF64x2ToVecF32x4(void) {
+ return DemoteZeroVecF64x2ToVecF32x4;
+}
+BinaryenOp BinaryenPromoteLowVecF32x4ToVecF64x2(void) {
+ return PromoteLowVecF32x4ToVecF64x2;
+}
BinaryenOp BinaryenSwizzleVec8x16(void) { return SwizzleVec8x16; }
BinaryenOp BinaryenRefIsNull(void) { return RefIsNull; }
BinaryenOp BinaryenRefIsFunc(void) { return RefIsFunc; }
diff --git a/src/binaryen-c.h b/src/binaryen-c.h
index 038ed43c2..ccabe8bb5 100644
--- a/src/binaryen-c.h
+++ b/src/binaryen-c.h
@@ -564,6 +564,12 @@ BINARYEN_API BinaryenOp BinaryenExtendLowSVecI32x4ToVecI64x2(void);
BINARYEN_API BinaryenOp BinaryenExtendHighSVecI32x4ToVecI64x2(void);
BINARYEN_API BinaryenOp BinaryenExtendLowUVecI32x4ToVecI64x2(void);
BINARYEN_API BinaryenOp BinaryenExtendHighUVecI32x4ToVecI64x2(void);
+BINARYEN_API BinaryenOp BinaryenConvertLowSVecI32x4ToVecF64x2(void);
+BINARYEN_API BinaryenOp BinaryenConvertLowUVecI32x4ToVecF64x2(void);
+BINARYEN_API BinaryenOp BinaryenTruncSatZeroSVecF64x2ToVecI32x4(void);
+BINARYEN_API BinaryenOp BinaryenTruncSatZeroUVecF64x2ToVecI32x4(void);
+BINARYEN_API BinaryenOp BinaryenDemoteZeroVecF64x2ToVecF32x4(void);
+BINARYEN_API BinaryenOp BinaryenPromoteLowVecF32x4ToVecF64x2(void);
BINARYEN_API BinaryenOp BinaryenSwizzleVec8x16(void);
BINARYEN_API BinaryenOp BinaryenRefIsNull(void);
BINARYEN_API BinaryenOp BinaryenRefIsFunc(void);
diff --git a/src/js/binaryen.js-post.js b/src/js/binaryen.js-post.js
index 15e342eb8..7d13395a1 100644
--- a/src/js/binaryen.js-post.js
+++ b/src/js/binaryen.js-post.js
@@ -493,6 +493,12 @@ function initializeConstants() {
'ExtendHighSVecI32x4ToVecI64x2',
'ExtendLowUVecI32x4ToVecI64x2',
'ExtendHighUVecI32x4ToVecI64x2',
+ 'ConvertLowSVecI32x4ToVecF64x2',
+ 'ConvertLowUVecI32x4ToVecF64x2',
+ 'TruncSatZeroSVecF64x2ToVecI32x4',
+ 'TruncSatZeroUVecF64x2ToVecI32x4',
+ 'DemoteZeroVecF64x2ToVecF32x4',
+ 'PromoteLowVecF32x4ToVecF64x2',
'SwizzleVec8x16',
'RefIsNull',
'RefIsFunc',
@@ -1856,6 +1862,12 @@ function wrapModule(module, self = {}) {
'extend_high_i16x8_u'(value) {
return Module['_BinaryenUnary'](module, Module['ExtendHighUVecI16x8ToVecI32x4'], value);
},
+ 'trunc_sat_f64x2_s_zero'(value) {
+ return Module['_BinaryenUnary'](module, Module['TruncSatZeroSVecF64x2ToVecI32x4'], value);
+ },
+ 'trunc_sat_f64x2_u_zero'(value) {
+ return Module['_BinaryenUnary'](module, Module['TruncSatZeroUVecF64x2ToVecI32x4'], value);
+ },
};
self['i64x2'] = {
@@ -2009,6 +2021,9 @@ function wrapModule(module, self = {}) {
'convert_i32x4_u'(value) {
return Module['_BinaryenUnary'](module, Module['ConvertUVecI32x4ToVecF32x4'], value);
},
+ 'demote_f64x2_zero'(value) {
+ return Module['_BinaryenUnary'](module, Module['DemoteZeroVecF64x2ToVecF32x4'], value);
+ },
};
self['f64x2'] = {
@@ -2084,6 +2099,15 @@ function wrapModule(module, self = {}) {
'nearest'(value) {
return Module['_BinaryenUnary'](module, Module['NearestVecF64x2'], value);
},
+ 'convert_low_i32x4_s'(value) {
+ return Module['_BinaryenUnary'](module, Module['ConvertLowSVecI32x4ToVecF64x2'], value);
+ },
+ 'convert_low_i32x4_u'(value) {
+ return Module['_BinaryenUnary'](module, Module['ConvertLowUVecI32x4ToVecF64x2'], value);
+ },
+ 'promote_low_f32x4'(value) {
+ return Module['_BinaryenUnary'](module, Module['PromoteLowVecF32x4ToVecF64x2'], value);
+ },
};
self['funcref'] = {