summaryrefslogtreecommitdiff
path: root/src/wasm/wasm-stack.cpp
diff options
context:
space:
mode:
authorThomas Lively <7121787+tlively@users.noreply.github.com>2021-04-05 12:33:25 -0700
committerGitHub <noreply@github.com>2021-04-05 12:33:25 -0700
commit1bb172c789bb3a61aeaae78f5464d0544627ed3e (patch)
tree6bcfd54944e52f9c3f8354a3d3f523f45a5ee670 /src/wasm/wasm-stack.cpp
parentc59df4cda843ef11ad261f5c889dddc9a9d59d3b (diff)
downloadbinaryen-1bb172c789bb3a61aeaae78f5464d0544627ed3e.tar.gz
binaryen-1bb172c789bb3a61aeaae78f5464d0544627ed3e.tar.bz2
binaryen-1bb172c789bb3a61aeaae78f5464d0544627ed3e.zip
Update SIMD names and opcodes (#3771)
Also removes experimental SIMD instructions that were not included in the final spec proposal.
Diffstat (limited to 'src/wasm/wasm-stack.cpp')
-rw-r--r--src/wasm/wasm-stack.cpp156
1 files changed, 50 insertions, 106 deletions
diff --git a/src/wasm/wasm-stack.cpp b/src/wasm/wasm-stack.cpp
index b1e9a75cc..87dfe8247 100644
--- a/src/wasm/wasm-stack.cpp
+++ b/src/wasm/wasm-stack.cpp
@@ -546,30 +546,6 @@ void BinaryInstWriter::visitSIMDTernary(SIMDTernary* curr) {
case Bitselect:
o << U32LEB(BinaryConsts::V128Bitselect);
break;
- case QFMAF32x4:
- o << U32LEB(BinaryConsts::F32x4QFMA);
- break;
- case QFMSF32x4:
- o << U32LEB(BinaryConsts::F32x4QFMS);
- break;
- case QFMAF64x2:
- o << U32LEB(BinaryConsts::F64x2QFMA);
- break;
- 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;
}
}
@@ -692,33 +668,6 @@ void BinaryInstWriter::visitSIMDLoadStoreLane(SIMDLoadStoreLane* curr) {
o << curr->index;
}
-void BinaryInstWriter::visitSIMDWiden(SIMDWiden* curr) {
- o << int8_t(BinaryConsts::SIMDPrefix);
- switch (curr->op) {
- case WidenSVecI8x16ToVecI32x4:
- o << U32LEB(BinaryConsts::I32x4WidenSI8x16);
- break;
- case WidenUVecI8x16ToVecI32x4:
- o << U32LEB(BinaryConsts::I32x4WidenUI8x16);
- break;
- }
- o << uint8_t(curr->index);
-}
-
-void BinaryInstWriter::visitPrefetch(Prefetch* curr) {
- o << int8_t(BinaryConsts::SIMDPrefix);
- switch (curr->op) {
- case PrefetchTemporal:
- o << U32LEB(BinaryConsts::PrefetchT);
- break;
- case PrefetchNontemporal:
- o << U32LEB(BinaryConsts::PrefetchNT);
- break;
- }
- assert(curr->align);
- emitMemoryAccess(curr->align, /*(unused) bytes=*/0, curr->offset);
-}
-
void BinaryInstWriter::visitMemoryInit(MemoryInit* curr) {
o << int8_t(BinaryConsts::MiscPrefix);
o << U32LEB(BinaryConsts::MemoryInit);
@@ -992,16 +941,16 @@ void BinaryInstWriter::visitUnary(Unary* curr) {
case NotVec128:
o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::V128Not);
break;
+ case AnyTrueVec128:
+ o << int8_t(BinaryConsts::SIMDPrefix)
+ << U32LEB(BinaryConsts::V128AnyTrue);
+ break;
case AbsVecI8x16:
o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16Abs);
break;
case NegVecI8x16:
o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16Neg);
break;
- case AnyTrueVecI8x16:
- o << int8_t(BinaryConsts::SIMDPrefix)
- << U32LEB(BinaryConsts::I8x16AnyTrue);
- break;
case AllTrueVecI8x16:
o << int8_t(BinaryConsts::SIMDPrefix)
<< U32LEB(BinaryConsts::I8x16AllTrue);
@@ -1020,10 +969,6 @@ void BinaryInstWriter::visitUnary(Unary* curr) {
case NegVecI16x8:
o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I16x8Neg);
break;
- case AnyTrueVecI16x8:
- o << int8_t(BinaryConsts::SIMDPrefix)
- << U32LEB(BinaryConsts::I16x8AnyTrue);
- break;
case AllTrueVecI16x8:
o << int8_t(BinaryConsts::SIMDPrefix)
<< U32LEB(BinaryConsts::I16x8AllTrue);
@@ -1038,10 +983,6 @@ void BinaryInstWriter::visitUnary(Unary* curr) {
case NegVecI32x4:
o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I32x4Neg);
break;
- case AnyTrueVecI32x4:
- o << int8_t(BinaryConsts::SIMDPrefix)
- << U32LEB(BinaryConsts::I32x4AnyTrue);
- break;
case AllTrueVecI32x4:
o << int8_t(BinaryConsts::SIMDPrefix)
<< U32LEB(BinaryConsts::I32x4AllTrue);
@@ -1050,9 +991,16 @@ void BinaryInstWriter::visitUnary(Unary* curr) {
o << int8_t(BinaryConsts::SIMDPrefix)
<< U32LEB(BinaryConsts::I32x4Bitmask);
break;
+ case AbsVecI64x2:
+ o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2Abs);
+ break;
case NegVecI64x2:
o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2Neg);
break;
+ case AllTrueVecI64x2:
+ o << int8_t(BinaryConsts::SIMDPrefix)
+ << U32LEB(BinaryConsts::I64x2AllTrue);
+ break;
case BitmaskVecI64x2:
o << int8_t(BinaryConsts::SIMDPrefix)
<< U32LEB(BinaryConsts::I64x2Bitmask);
@@ -1125,14 +1073,6 @@ void BinaryInstWriter::visitUnary(Unary* curr) {
o << int8_t(BinaryConsts::SIMDPrefix)
<< U32LEB(BinaryConsts::I32x4TruncSatUF32x4);
break;
- case TruncSatSVecF64x2ToVecI64x2:
- o << int8_t(BinaryConsts::SIMDPrefix)
- << U32LEB(BinaryConsts::I64x2TruncSatSF64x2);
- break;
- case TruncSatUVecF64x2ToVecI64x2:
- o << int8_t(BinaryConsts::SIMDPrefix)
- << U32LEB(BinaryConsts::I64x2TruncSatUF64x2);
- break;
case ConvertSVecI32x4ToVecF32x4:
o << int8_t(BinaryConsts::SIMDPrefix)
<< U32LEB(BinaryConsts::F32x4ConvertSI32x4);
@@ -1141,61 +1081,53 @@ void BinaryInstWriter::visitUnary(Unary* curr) {
o << int8_t(BinaryConsts::SIMDPrefix)
<< U32LEB(BinaryConsts::F32x4ConvertUI32x4);
break;
- case ConvertSVecI64x2ToVecF64x2:
- o << int8_t(BinaryConsts::SIMDPrefix)
- << U32LEB(BinaryConsts::F64x2ConvertSI64x2);
- break;
- case ConvertUVecI64x2ToVecF64x2:
- o << int8_t(BinaryConsts::SIMDPrefix)
- << U32LEB(BinaryConsts::F64x2ConvertUI64x2);
- break;
- case WidenLowSVecI8x16ToVecI16x8:
+ case ExtendLowSVecI8x16ToVecI16x8:
o << int8_t(BinaryConsts::SIMDPrefix)
- << U32LEB(BinaryConsts::I16x8WidenLowSI8x16);
+ << U32LEB(BinaryConsts::I16x8ExtendLowSI8x16);
break;
- case WidenHighSVecI8x16ToVecI16x8:
+ case ExtendHighSVecI8x16ToVecI16x8:
o << int8_t(BinaryConsts::SIMDPrefix)
- << U32LEB(BinaryConsts::I16x8WidenHighSI8x16);
+ << U32LEB(BinaryConsts::I16x8ExtendHighSI8x16);
break;
- case WidenLowUVecI8x16ToVecI16x8:
+ case ExtendLowUVecI8x16ToVecI16x8:
o << int8_t(BinaryConsts::SIMDPrefix)
- << U32LEB(BinaryConsts::I16x8WidenLowUI8x16);
+ << U32LEB(BinaryConsts::I16x8ExtendLowUI8x16);
break;
- case WidenHighUVecI8x16ToVecI16x8:
+ case ExtendHighUVecI8x16ToVecI16x8:
o << int8_t(BinaryConsts::SIMDPrefix)
- << U32LEB(BinaryConsts::I16x8WidenHighUI8x16);
+ << U32LEB(BinaryConsts::I16x8ExtendHighUI8x16);
break;
- case WidenLowSVecI16x8ToVecI32x4:
+ case ExtendLowSVecI16x8ToVecI32x4:
o << int8_t(BinaryConsts::SIMDPrefix)
- << U32LEB(BinaryConsts::I32x4WidenLowSI16x8);
+ << U32LEB(BinaryConsts::I32x4ExtendLowSI16x8);
break;
- case WidenHighSVecI16x8ToVecI32x4:
+ case ExtendHighSVecI16x8ToVecI32x4:
o << int8_t(BinaryConsts::SIMDPrefix)
- << U32LEB(BinaryConsts::I32x4WidenHighSI16x8);
+ << U32LEB(BinaryConsts::I32x4ExtendHighSI16x8);
break;
- case WidenLowUVecI16x8ToVecI32x4:
+ case ExtendLowUVecI16x8ToVecI32x4:
o << int8_t(BinaryConsts::SIMDPrefix)
- << U32LEB(BinaryConsts::I32x4WidenLowUI16x8);
+ << U32LEB(BinaryConsts::I32x4ExtendLowUI16x8);
break;
- case WidenHighUVecI16x8ToVecI32x4:
+ case ExtendHighUVecI16x8ToVecI32x4:
o << int8_t(BinaryConsts::SIMDPrefix)
- << U32LEB(BinaryConsts::I32x4WidenHighUI16x8);
+ << U32LEB(BinaryConsts::I32x4ExtendHighUI16x8);
break;
- case WidenLowSVecI32x4ToVecI64x2:
+ case ExtendLowSVecI32x4ToVecI64x2:
o << int8_t(BinaryConsts::SIMDPrefix)
- << U32LEB(BinaryConsts::I64x2WidenLowSI32x4);
+ << U32LEB(BinaryConsts::I64x2ExtendLowSI32x4);
break;
- case WidenHighSVecI32x4ToVecI64x2:
+ case ExtendHighSVecI32x4ToVecI64x2:
o << int8_t(BinaryConsts::SIMDPrefix)
- << U32LEB(BinaryConsts::I64x2WidenHighSI32x4);
+ << U32LEB(BinaryConsts::I64x2ExtendHighSI32x4);
break;
- case WidenLowUVecI32x4ToVecI64x2:
+ case ExtendLowUVecI32x4ToVecI64x2:
o << int8_t(BinaryConsts::SIMDPrefix)
- << U32LEB(BinaryConsts::I64x2WidenLowUI32x4);
+ << U32LEB(BinaryConsts::I64x2ExtendLowUI32x4);
break;
- case WidenHighUVecI32x4ToVecI64x2:
+ case ExtendHighUVecI32x4ToVecI64x2:
o << int8_t(BinaryConsts::SIMDPrefix)
- << U32LEB(BinaryConsts::I64x2WidenHighUI32x4);
+ << U32LEB(BinaryConsts::I64x2ExtendHighUI32x4);
break;
case ConvertLowSVecI32x4ToVecF64x2:
o << int8_t(BinaryConsts::SIMDPrefix)
@@ -1553,6 +1485,21 @@ void BinaryInstWriter::visitBinary(Binary* curr) {
case EqVecI64x2:
o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2Eq);
break;
+ case NeVecI64x2:
+ o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2Ne);
+ break;
+ case LtSVecI64x2:
+ o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2LtS);
+ break;
+ case GtSVecI64x2:
+ o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2GtS);
+ break;
+ case LeSVecI64x2:
+ o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2LeS);
+ break;
+ case GeSVecI64x2:
+ o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I64x2GeS);
+ break;
case EqVecF32x4:
o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::F32x4Eq);
break;
@@ -1623,9 +1570,6 @@ void BinaryInstWriter::visitBinary(Binary* curr) {
o << int8_t(BinaryConsts::SIMDPrefix)
<< U32LEB(BinaryConsts::I8x16SubSatU);
break;
- case MulVecI8x16:
- o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16Mul);
- break;
case MinSVecI8x16:
o << int8_t(BinaryConsts::SIMDPrefix) << U32LEB(BinaryConsts::I8x16MinS);
break;