summaryrefslogtreecommitdiff
path: root/src/js
diff options
context:
space:
mode:
authorThomas Lively <7121787+tlively@users.noreply.github.com>2019-09-03 14:13:29 -0700
committerGitHub <noreply@github.com>2019-09-03 14:13:29 -0700
commit0faa68b9dfbe478c6d238a5c55ac61b54a86a3c3 (patch)
tree9ca1c6e09858ebcefb0dc14f60c95293fb6976ef /src/js
parent445881f6c8a28faae22a764c96449be86b48a96b (diff)
downloadbinaryen-0faa68b9dfbe478c6d238a5c55ac61b54a86a3c3.tar.gz
binaryen-0faa68b9dfbe478c6d238a5c55ac61b54a86a3c3.tar.bz2
binaryen-0faa68b9dfbe478c6d238a5c55ac61b54a86a3c3.zip
QFMA/QFMS instructions (#2328)
Renames the SIMDBitselect class to SIMDTernary and adds the new {f32x4,f64x2}.qfm{a,s} ternary instructions. Because the SIMDBitselect class is no more, this is a backwards-incompatible change to the C interface. The new instructions are not yet used in the fuzzer because they are not yet implemented in V8. The corresponding LLVM commit is https://reviews.llvm.org/rL370556.
Diffstat (limited to 'src/js')
-rw-r--r--src/js/binaryen.js-post.js29
1 files changed, 23 insertions, 6 deletions
diff --git a/src/js/binaryen.js-post.js b/src/js/binaryen.js-post.js
index 30a023b2c..bb5e4b21e 100644
--- a/src/js/binaryen.js-post.js
+++ b/src/js/binaryen.js-post.js
@@ -74,7 +74,7 @@ Module['AtomicFenceId'] = Module['_BinaryenAtomicFenceId']();
Module['SIMDExtractId'] = Module['_BinaryenSIMDExtractId']();
Module['SIMDReplaceId'] = Module['_BinaryenSIMDReplaceId']();
Module['SIMDShuffleId'] = Module['_BinaryenSIMDShuffleId']();
-Module['SIMDBitselectId'] = Module['_BinaryenSIMDBitselectId']();
+Module['SIMDTernaryId'] = Module['_BinaryenSIMDTernaryId']();
Module['SIMDShiftId'] = Module['_BinaryenSIMDShiftId']();
Module['MemoryInitId'] = Module['_BinaryenMemoryInitId']();
Module['DataDropId'] = Module['_BinaryenDataDropId']();
@@ -366,6 +366,8 @@ Module['SubVecI64x2'] = Module['_BinaryenSubVecI64x2']();
Module['AbsVecF32x4'] = Module['_BinaryenAbsVecF32x4']();
Module['NegVecF32x4'] = Module['_BinaryenNegVecF32x4']();
Module['SqrtVecF32x4'] = Module['_BinaryenSqrtVecF32x4']();
+Module['QFMAVecF32x4'] = Module['_BinaryenQFMAVecF32x4']();
+Module['QFMSVecF32x4'] = Module['_BinaryenQFMSVecF32x4']();
Module['AddVecF32x4'] = Module['_BinaryenAddVecF32x4']();
Module['SubVecF32x4'] = Module['_BinaryenSubVecF32x4']();
Module['MulVecF32x4'] = Module['_BinaryenMulVecF32x4']();
@@ -375,6 +377,8 @@ Module['MaxVecF32x4'] = Module['_BinaryenMaxVecF32x4']();
Module['AbsVecF64x2'] = Module['_BinaryenAbsVecF64x2']();
Module['NegVecF64x2'] = Module['_BinaryenNegVecF64x2']();
Module['SqrtVecF64x2'] = Module['_BinaryenSqrtVecF64x2']();
+Module['QFMAVecF64x2'] = Module['_BinaryenQFMAVecF64x2']();
+Module['QFMSVecF64x2'] = Module['_BinaryenQFMSVecF64x2']();
Module['AddVecF64x2'] = Module['_BinaryenAddVecF64x2']();
Module['SubVecF64x2'] = Module['_BinaryenSubVecF64x2']();
Module['MulVecF64x2'] = Module['_BinaryenMulVecF64x2']();
@@ -1323,7 +1327,7 @@ function wrapModule(module, self) {
return Module['_BinaryenUnary'](module, Module['XorVec128'], value);
},
'bitselect': function(left, right, cond) {
- return Module['_BinaryenSIMDBitselect'](module, left, right, cond);
+ return Module['_BinaryenSIMDTernary'](module, Module['Bitselect'], left, right, cond);
},
'pop': function() {
return Module['_BinaryenPop'](module, Module['v128']);
@@ -1660,6 +1664,12 @@ function wrapModule(module, self) {
'sqrt': function(value) {
return Module['_BinaryenUnary'](module, Module['SqrtVecF32x4'], value);
},
+ 'qfma': function(a, b, c) {
+ return Module['_BinaryenSIMDTernary'](module, Module['QFMAVecF32x4'], a, b, c);
+ },
+ 'qfms': function(a, b, c) {
+ return Module['_BinaryenSIMDTernary'](module, Module['QFMSVecF32x4'], a, b, c);
+ },
'add': function(left, right) {
return Module['_BinaryenBinary'](module, Module['AddVecF32x4'], left, right);
},
@@ -1723,6 +1733,12 @@ function wrapModule(module, self) {
'sqrt': function(value) {
return Module['_BinaryenUnary'](module, Module['SqrtVecF64x2'], value);
},
+ 'qfma': function(a, b, c) {
+ return Module['_BinaryenSIMDTernary'](module, Module['QFMAVecF64x2'], a, b, c);
+ },
+ 'qfms': function(a, b, c) {
+ return Module['_BinaryenSIMDTernary'](module, Module['QFMSVecF64x2'], a, b, c);
+ },
'add': function(left, right) {
return Module['_BinaryenBinary'](module, Module['AddVecF64x2'], left, right);
},
@@ -2370,13 +2386,14 @@ Module['getExpressionInfo'] = function(expr) {
'mask': mask
};
});
- case Module['SIMDBitselectId']:
+ case Module['SIMDTernaryId']:
return {
'id': id,
'type': type,
- 'left': Module['_BinaryenSIMDBitselectGetLeft'](expr),
- 'right': Module['_BinaryenSIMDBitselectGetRight'](expr),
- 'cond': Module['_BinaryenSIMDBitselectGetCond'](expr)
+ 'op': Module['_BinaryenSIMDTernaryGetOp'](expr),
+ 'a': Module['_BinaryenSIMDTernaryGetA'](expr),
+ 'b': Module['_BinaryenSIMDTernaryGetB'](expr),
+ 'c': Module['_BinaryenSIMDTernaryGetC'](expr)
};
case Module['SIMDShiftId']:
return {