diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/literal.h | 4 | ||||
-rw-r--r-- | src/wasm-interpreter.h | 4 | ||||
-rw-r--r-- | src/wasm/literal.cpp | 12 |
3 files changed, 20 insertions, 0 deletions
diff --git a/src/literal.h b/src/literal.h index 0b1b6fa90..28e6f03cf 100644 --- a/src/literal.h +++ b/src/literal.h @@ -628,6 +628,10 @@ public: Literal extendHighSToVecI32x4() const; Literal extendLowUToVecI32x4() const; Literal extendHighUToVecI32x4() const; + Literal extendLowSToVecI64x2() const; + Literal extendHighSToVecI64x2() const; + Literal extendLowUToVecI64x2() const; + Literal extendHighUToVecI64x2() const; Literal swizzleVec8x16(const Literal& other) const; // Checks if an RTT value is a sub-rtt of another, that is, whether GC data diff --git a/src/wasm-interpreter.h b/src/wasm-interpreter.h index f646ed976..872d90603 100644 --- a/src/wasm-interpreter.h +++ b/src/wasm-interpreter.h @@ -562,9 +562,13 @@ public: case ExtendHighUVecI16x8ToVecI32x4: return value.extendHighUToVecI32x4(); case ExtendLowSVecI32x4ToVecI64x2: + return value.extendLowSToVecI64x2(); case ExtendHighSVecI32x4ToVecI64x2: + return value.extendHighSToVecI64x2(); case ExtendLowUVecI32x4ToVecI64x2: + return value.extendLowUToVecI64x2(); case ExtendHighUVecI32x4ToVecI64x2: + return value.extendHighUToVecI64x2(); case ConvertLowSVecI32x4ToVecF64x2: case ConvertLowUVecI32x4ToVecF64x2: case TruncSatZeroSVecF64x2ToVecI32x4: diff --git a/src/wasm/literal.cpp b/src/wasm/literal.cpp index 2c5bff5b1..5a8ec3df3 100644 --- a/src/wasm/literal.cpp +++ b/src/wasm/literal.cpp @@ -2387,6 +2387,18 @@ Literal Literal::extendLowUToVecI32x4() const { Literal Literal::extendHighUToVecI32x4() const { return extend<4, uint16_t, uint32_t, LaneOrder::High>(*this); } +Literal Literal::extendLowSToVecI64x2() const { + return extend<2, int32_t, int64_t, LaneOrder::Low>(*this); +} +Literal Literal::extendHighSToVecI64x2() const { + return extend<2, int32_t, int64_t, LaneOrder::High>(*this); +} +Literal Literal::extendLowUToVecI64x2() const { + return extend<2, uint32_t, uint64_t, LaneOrder::Low>(*this); +} +Literal Literal::extendHighUToVecI64x2() const { + return extend<2, uint32_t, uint64_t, LaneOrder::High>(*this); +} Literal Literal::extMulLowSI16x8(const Literal& other) const { WASM_UNREACHABLE("TODO: implement SIMD extending multiplications"); |