diff options
author | Thomas Lively <7121787+tlively@users.noreply.github.com> | 2020-12-11 19:06:34 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-11 19:06:34 -0500 |
commit | dd33ae0512aa97f537d40e61631d268c8a8fd17e (patch) | |
tree | e5c219ba349e56940669bb873bb57a3f2626bf77 /src/wasm/wasm-stack.cpp | |
parent | 290147d8d43a7448d68939ec711b524ba4fb3fbd (diff) | |
download | binaryen-dd33ae0512aa97f537d40e61631d268c8a8fd17e.tar.gz binaryen-dd33ae0512aa97f537d40e61631d268c8a8fd17e.tar.bz2 binaryen-dd33ae0512aa97f537d40e61631d268c8a8fd17e.zip |
Prototype SIMD instructions implemented in LLVM (#3440)
- i64x2.eq (https://github.com/WebAssembly/simd/pull/381)
- i64x2 widens (https://github.com/WebAssembly/simd/pull/290)
- i64x2.bitmask (https://github.com/WebAssembly/simd/pull/368)
- signselect ops (https://github.com/WebAssembly/simd/pull/124)
Diffstat (limited to 'src/wasm/wasm-stack.cpp')
-rw-r--r-- | src/wasm/wasm-stack.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/wasm/wasm-stack.cpp b/src/wasm/wasm-stack.cpp index 741aef5ce..3a24d0cc0 100644 --- a/src/wasm/wasm-stack.cpp +++ b/src/wasm/wasm-stack.cpp @@ -560,6 +560,18 @@ void BinaryInstWriter::visitSIMDTernary(SIMDTernary* curr) { case QFMSF64x2: o << U32LEB(BinaryConsts::F64x2QFMS); break; + case SignSelectVec8x16: + o << U32LEB(BinaryConsts::V8x16SignSelect); + break; + case SignSelectVec16x8: + o << U32LEB(BinaryConsts::V16x8SignSelect); + break; + case SignSelectVec32x4: + o << U32LEB(BinaryConsts::V32x4SignSelect); + break; + case SignSelectVec64x2: + o << U32LEB(BinaryConsts::V64x2SignSelect); + break; } } @@ -1024,6 +1036,10 @@ void BinaryInstWriter::visitUnary(Unary* curr) { o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2AllTrue); break; + case BitmaskVecI64x2: + o << int8_t(BinaryConsts::SIMDPrefix) + << U32LEB(BinaryConsts::I64x2Bitmask); + break; case AbsVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Abs); break; @@ -1132,6 +1148,22 @@ void BinaryInstWriter::visitUnary(Unary* curr) { o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4WidenHighUI16x8); break; + case WidenLowSVecI32x4ToVecI64x2: + o << int8_t(BinaryConsts::SIMDPrefix) + << U32LEB(BinaryConsts::I64x2WidenLowSI32x4); + break; + case WidenHighSVecI32x4ToVecI64x2: + o << int8_t(BinaryConsts::SIMDPrefix) + << U32LEB(BinaryConsts::I64x2WidenHighSI32x4); + break; + case WidenLowUVecI32x4ToVecI64x2: + o << int8_t(BinaryConsts::SIMDPrefix) + << U32LEB(BinaryConsts::I64x2WidenLowUI32x4); + break; + case WidenHighUVecI32x4ToVecI64x2: + o << int8_t(BinaryConsts::SIMDPrefix) + << U32LEB(BinaryConsts::I64x2WidenHighUI32x4); + break; case InvalidUnary: WASM_UNREACHABLE("invalid unary op"); } @@ -1461,6 +1493,9 @@ void BinaryInstWriter::visitBinary(Binary* curr) { case GeUVecI32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4GeU); break; + case EqVecI64x2: + o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2Eq); + break; case EqVecF32x4: o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Eq); break; |