diff options
author | Daniel Wirtz <dcode@dcode.io> | 2021-04-07 23:04:20 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-07 23:04:20 +0200 |
commit | 2f2d5a80197b837aea928a0a604a13cc1c74219b (patch) | |
tree | 7f2edb11c605b80f7b093f984b0fe9d7d78e2c7d /src | |
parent | b3484a7a44de4d46b0fec598074ca3f8b33a293c (diff) | |
download | binaryen-2f2d5a80197b837aea928a0a604a13cc1c74219b.tar.gz binaryen-2f2d5a80197b837aea928a0a604a13cc1c74219b.tar.bz2 binaryen-2f2d5a80197b837aea928a0a604a13cc1c74219b.zip |
Add various SIMD instructions to C/JS API (#3777)
Adds C/JS APIs for the SIMD instructions
* PopcntVecI8x16
* AbsVecI64x2
* AllTrueVecI64x2
* BitmaskVecI64x2
* EqVecI64x2
* NeVecI64x2
* LtSVecI64x2
* GtSVecI64x2
* LeSVecI64x2
* GeSVecI64x2
Diffstat (limited to 'src')
-rw-r--r-- | src/binaryen-c.cpp | 10 | ||||
-rw-r--r-- | src/binaryen-c.h | 11 | ||||
-rw-r--r-- | src/js/binaryen.js-post.js | 40 |
3 files changed, 60 insertions, 1 deletions
diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp index b45f20857..00a907ab4 100644 --- a/src/binaryen-c.cpp +++ b/src/binaryen-c.cpp @@ -508,6 +508,12 @@ BinaryenOp BinaryenLeSVecI32x4(void) { return LeSVecI32x4; } BinaryenOp BinaryenLeUVecI32x4(void) { return LeUVecI32x4; } BinaryenOp BinaryenGeSVecI32x4(void) { return GeSVecI32x4; } BinaryenOp BinaryenGeUVecI32x4(void) { return GeUVecI32x4; } +BinaryenOp BinaryenEqVecI64x2(void) { return EqVecI64x2; } +BinaryenOp BinaryenNeVecI64x2(void) { return NeVecI64x2; } +BinaryenOp BinaryenLtSVecI64x2(void) { return LtSVecI64x2; } +BinaryenOp BinaryenGtSVecI64x2(void) { return GtSVecI64x2; } +BinaryenOp BinaryenLeSVecI64x2(void) { return LeSVecI64x2; } +BinaryenOp BinaryenGeSVecI64x2(void) { return GeSVecI64x2; } BinaryenOp BinaryenEqVecF32x4(void) { return EqVecF32x4; } BinaryenOp BinaryenNeVecF32x4(void) { return NeVecF32x4; } BinaryenOp BinaryenLtVecF32x4(void) { return LtVecF32x4; } @@ -531,6 +537,7 @@ BinaryenOp BinaryenAbsVecI8x16(void) { return AbsVecI8x16; } BinaryenOp BinaryenNegVecI8x16(void) { return NegVecI8x16; } BinaryenOp BinaryenAllTrueVecI8x16(void) { return AllTrueVecI8x16; } BinaryenOp BinaryenBitmaskVecI8x16(void) { return BitmaskVecI8x16; } +BinaryenOp BinaryenPopcntVecI8x16(void) { return PopcntVecI8x16; } BinaryenOp BinaryenShlVecI8x16(void) { return ShlVecI8x16; } BinaryenOp BinaryenShrSVecI8x16(void) { return ShrSVecI8x16; } BinaryenOp BinaryenShrUVecI8x16(void) { return ShrUVecI8x16; } @@ -581,7 +588,10 @@ BinaryenOp BinaryenMaxUVecI32x4(void) { return MaxUVecI32x4; } BinaryenOp BinaryenDotSVecI16x8ToVecI32x4(void) { return DotSVecI16x8ToVecI32x4; } +BinaryenOp BinaryenAbsVecI64x2(void) { return AbsVecI64x2; } BinaryenOp BinaryenNegVecI64x2(void) { return NegVecI64x2; } +BinaryenOp BinaryenAllTrueVecI64x2(void) { return AllTrueVecI64x2; } +BinaryenOp BinaryenBitmaskVecI64x2(void) { return BitmaskVecI64x2; } BinaryenOp BinaryenShlVecI64x2(void) { return ShlVecI64x2; } BinaryenOp BinaryenShrSVecI64x2(void) { return ShrSVecI64x2; } BinaryenOp BinaryenShrUVecI64x2(void) { return ShrUVecI64x2; } diff --git a/src/binaryen-c.h b/src/binaryen-c.h index 686fb5262..33d2438e1 100644 --- a/src/binaryen-c.h +++ b/src/binaryen-c.h @@ -409,6 +409,12 @@ BINARYEN_API BinaryenOp BinaryenLeSVecI32x4(void); BINARYEN_API BinaryenOp BinaryenLeUVecI32x4(void); BINARYEN_API BinaryenOp BinaryenGeSVecI32x4(void); BINARYEN_API BinaryenOp BinaryenGeUVecI32x4(void); +BINARYEN_API BinaryenOp BinaryenEqVecI64x2(void); +BINARYEN_API BinaryenOp BinaryenNeVecI64x2(void); +BINARYEN_API BinaryenOp BinaryenLtSVecI64x2(void); +BINARYEN_API BinaryenOp BinaryenGtSVecI64x2(void); +BINARYEN_API BinaryenOp BinaryenLeSVecI64x2(void); +BINARYEN_API BinaryenOp BinaryenGeSVecI64x2(void); BINARYEN_API BinaryenOp BinaryenEqVecF32x4(void); BINARYEN_API BinaryenOp BinaryenNeVecF32x4(void); BINARYEN_API BinaryenOp BinaryenLtVecF32x4(void); @@ -428,7 +434,7 @@ BINARYEN_API BinaryenOp BinaryenXorVec128(void); BINARYEN_API BinaryenOp BinaryenAndNotVec128(void); BINARYEN_API BinaryenOp BinaryenBitselectVec128(void); BINARYEN_API BinaryenOp BinaryenAnyTrueVec128(void); -// TODO: Add i8x16.popcnt to C and JS APIs once merged to the proposal +BINARYEN_API BinaryenOp BinaryenPopcntVecI8x16(void); BINARYEN_API BinaryenOp BinaryenAbsVecI8x16(void); BINARYEN_API BinaryenOp BinaryenNegVecI8x16(void); BINARYEN_API BinaryenOp BinaryenAllTrueVecI8x16(void); @@ -483,7 +489,10 @@ BINARYEN_API BinaryenOp BinaryenMinUVecI32x4(void); BINARYEN_API BinaryenOp BinaryenMaxSVecI32x4(void); BINARYEN_API BinaryenOp BinaryenMaxUVecI32x4(void); BINARYEN_API BinaryenOp BinaryenDotSVecI16x8ToVecI32x4(void); +BINARYEN_API BinaryenOp BinaryenAbsVecI64x2(void); BINARYEN_API BinaryenOp BinaryenNegVecI64x2(void); +BINARYEN_API BinaryenOp BinaryenAllTrueVecI64x2(void); +BINARYEN_API BinaryenOp BinaryenBitmaskVecI64x2(void); BINARYEN_API BinaryenOp BinaryenShlVecI64x2(void); BINARYEN_API BinaryenOp BinaryenShrSVecI64x2(void); BINARYEN_API BinaryenOp BinaryenShrUVecI64x2(void); diff --git a/src/js/binaryen.js-post.js b/src/js/binaryen.js-post.js index 4c8a8c91e..f5ab04642 100644 --- a/src/js/binaryen.js-post.js +++ b/src/js/binaryen.js-post.js @@ -341,6 +341,12 @@ function initializeConstants() { 'LeUVecI32x4', 'GeSVecI32x4', 'GeUVecI32x4', + 'EqVecI64x2', + 'NeVecI64x2', + 'LtSVecI64x2', + 'GtSVecI64x2', + 'LeSVecI64x2', + 'GeSVecI64x2', 'EqVecF32x4', 'NeVecF32x4', 'LtVecF32x4', @@ -360,6 +366,7 @@ function initializeConstants() { 'AndNotVec128', 'BitselectVec128', 'AnyTrueVec128', + 'PopcntVecI8x16', 'AbsVecI8x16', 'NegVecI8x16', 'AllTrueVecI8x16', @@ -412,7 +419,10 @@ function initializeConstants() { 'MinUVecI32x4', 'MaxSVecI32x4', 'MaxUVecI32x4', + 'AbsVecI64x2', 'NegVecI64x2', + 'AllTrueVecI64x2', + 'BitmaskVecI64x2', 'ShlVecI64x2', 'ShrSVecI64x2', 'ShrUVecI64x2', @@ -1550,6 +1560,9 @@ function wrapModule(module, self = {}) { 'bitmask'(value) { return Module['_BinaryenUnary'](module, Module['BitmaskVecI8x16'], value); }, + 'popcnt'(value) { + return Module['_BinaryenUnary'](module, Module['PopcntVecI8x16'], value); + }, 'shl'(vec, shift) { return Module['_BinaryenSIMDShift'](module, Module['ShlVecI8x16'], vec, shift); }, @@ -1835,9 +1848,36 @@ function wrapModule(module, self = {}) { 'replace_lane'(vec, index, value) { return Module['_BinaryenSIMDReplace'](module, Module['ReplaceLaneVecI64x2'], vec, index, value); }, + 'eq'(left, right) { + return Module['_BinaryenBinary'](module, Module['EqVecI64x2'], left, right); + }, + 'ne'(left, right) { + return Module['_BinaryenBinary'](module, Module['NeVecI64x2'], left, right); + }, + 'lt_s'(left, right) { + return Module['_BinaryenBinary'](module, Module['LtSVecI64x2'], left, right); + }, + 'gt_s'(left, right) { + return Module['_BinaryenBinary'](module, Module['GtSVecI64x2'], left, right); + }, + 'le_s'(left, right) { + return Module['_BinaryenBinary'](module, Module['LeSVecI64x2'], left, right); + }, + 'ge_s'(left, right) { + return Module['_BinaryenBinary'](module, Module['GeSVecI64x2'], left, right); + }, + 'abs'(value) { + return Module['_BinaryenUnary'](module, Module['AbsVecI64x2'], value); + }, 'neg'(value) { return Module['_BinaryenUnary'](module, Module['NegVecI64x2'], value); }, + 'all_true'(value) { + return Module['_BinaryenUnary'](module, Module['AllTrueVecI64x2'], value); + }, + 'bitmask'(value) { + return Module['_BinaryenUnary'](module, Module['BitmaskVecI64x2'], value); + }, 'shl'(vec, shift) { return Module['_BinaryenSIMDShift'](module, Module['ShlVecI64x2'], vec, shift); }, |