diff options
author | Thomas Lively <7121787+tlively@users.noreply.github.com> | 2019-09-03 14:13:29 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-03 14:13:29 -0700 |
commit | 0faa68b9dfbe478c6d238a5c55ac61b54a86a3c3 (patch) | |
tree | 9ca1c6e09858ebcefb0dc14f60c95293fb6976ef /src/js | |
parent | 445881f6c8a28faae22a764c96449be86b48a96b (diff) | |
download | binaryen-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.js | 29 |
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 { |