summaryrefslogtreecommitdiff
path: root/src/wasm/wasm-stack.cpp
diff options
context:
space:
mode:
authorThomas Lively <7121787+tlively@users.noreply.github.com>2020-12-11 19:06:34 -0500
committerGitHub <noreply@github.com>2020-12-11 19:06:34 -0500
commitdd33ae0512aa97f537d40e61631d268c8a8fd17e (patch)
treee5c219ba349e56940669bb873bb57a3f2626bf77 /src/wasm/wasm-stack.cpp
parent290147d8d43a7448d68939ec711b524ba4fb3fbd (diff)
downloadbinaryen-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.cpp35
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;