diff options
Diffstat (limited to 'src/wasm/literal.cpp')
-rw-r--r-- | src/wasm/literal.cpp | 93 |
1 files changed, 47 insertions, 46 deletions
diff --git a/src/wasm/literal.cpp b/src/wasm/literal.cpp index 54e817189..0c5a48b8e 100644 --- a/src/wasm/literal.cpp +++ b/src/wasm/literal.cpp @@ -1735,6 +1735,9 @@ Literal Literal::absI16x8() const { Literal Literal::absI32x4() const { return unary<4, &Literal::getLanesI32x4, &Literal::abs>(*this); } +Literal Literal::absI64x2() const { + return unary<2, &Literal::getLanesI64x2, &Literal::abs>(*this); +} Literal Literal::negI8x16() const { return unary<16, &Literal::getLanesUI8x16, &Literal::neg>(*this); } @@ -1798,30 +1801,17 @@ Literal Literal::truncSatToSI32x4() const { Literal Literal::truncSatToUI32x4() const { return unary<4, &Literal::getLanesF32x4, &Literal::truncSatToUI32>(*this); } -Literal Literal::truncSatToSI64x2() const { - return unary<2, &Literal::getLanesF64x2, &Literal::truncSatToSI64>(*this); -} -Literal Literal::truncSatToUI64x2() const { - return unary<2, &Literal::getLanesF64x2, &Literal::truncSatToUI64>(*this); -} Literal Literal::convertSToF32x4() const { return unary<4, &Literal::getLanesI32x4, &Literal::convertSIToF32>(*this); } Literal Literal::convertUToF32x4() const { return unary<4, &Literal::getLanesI32x4, &Literal::convertUIToF32>(*this); } -Literal Literal::convertSToF64x2() const { - return unary<2, &Literal::getLanesI64x2, &Literal::convertSIToF64>(*this); -} -Literal Literal::convertUToF64x2() const { - return unary<2, &Literal::getLanesI64x2, &Literal::convertUIToF64>(*this); -} -template<int Lanes, LaneArray<Lanes> (Literal::*IntoLanes)() const> -static Literal any_true(const Literal& val) { - LaneArray<Lanes> lanes = (val.*IntoLanes)(); - for (size_t i = 0; i < Lanes; ++i) { - if (lanes[i] != Literal::makeZero(lanes[i].type)) { +Literal Literal::anyTrueV128() const { + auto lanes = getLanesI32x4(); + for (size_t i = 0; i < 4; ++i) { + if (lanes[i].geti32() != 0) { return Literal(int32_t(1)); } } @@ -1851,33 +1841,27 @@ static Literal bitmask(const Literal& val) { return Literal(result); } -Literal Literal::anyTrueI8x16() const { - return any_true<16, &Literal::getLanesUI8x16>(*this); -} Literal Literal::allTrueI8x16() const { return all_true<16, &Literal::getLanesUI8x16>(*this); } Literal Literal::bitmaskI8x16() const { return bitmask<16, &Literal::getLanesSI8x16>(*this); } -Literal Literal::anyTrueI16x8() const { - return any_true<8, &Literal::getLanesUI16x8>(*this); -} Literal Literal::allTrueI16x8() const { return all_true<8, &Literal::getLanesUI16x8>(*this); } Literal Literal::bitmaskI16x8() const { return bitmask<8, &Literal::getLanesSI16x8>(*this); } -Literal Literal::anyTrueI32x4() const { - return any_true<4, &Literal::getLanesI32x4>(*this); -} Literal Literal::allTrueI32x4() const { return all_true<4, &Literal::getLanesI32x4>(*this); } Literal Literal::bitmaskI32x4() const { return bitmask<4, &Literal::getLanesI32x4>(*this); } +Literal Literal::allTrueI64x2() const { + return all_true<2, &Literal::getLanesI64x2>(*this); +} template<int Lanes, LaneArray<Lanes> (Literal::*IntoLanes)() const, @@ -2039,6 +2023,26 @@ Literal Literal::eqI64x2(const Literal& other) const { return compare<2, &Literal::getLanesI64x2, &Literal::eq, int64_t>(*this, other); } +Literal Literal::neI64x2(const Literal& other) const { + return compare<2, &Literal::getLanesI64x2, &Literal::ne, int64_t>(*this, + other); +} +Literal Literal::ltSI64x2(const Literal& other) const { + return compare<2, &Literal::getLanesI64x2, &Literal::ltS, int64_t>(*this, + other); +} +Literal Literal::gtSI64x2(const Literal& other) const { + return compare<2, &Literal::getLanesI64x2, &Literal::gtS, int64_t>(*this, + other); +} +Literal Literal::leSI64x2(const Literal& other) const { + return compare<2, &Literal::getLanesI64x2, &Literal::leS, int64_t>(*this, + other); +} +Literal Literal::geSI64x2(const Literal& other) const { + return compare<2, &Literal::getLanesI64x2, &Literal::geS, int64_t>(*this, + other); +} Literal Literal::eqF32x4(const Literal& other) const { return compare<4, &Literal::getLanesF32x4, &Literal::eq>(*this, other); } @@ -2125,9 +2129,6 @@ Literal Literal::subSaturateUI8x16(const Literal& other) const { return binary<16, &Literal::getLanesSI8x16, &Literal::subSatUI8>(*this, other); } -Literal Literal::mulI8x16(const Literal& other) const { - return binary<16, &Literal::getLanesUI8x16, &Literal::mul>(*this, other); -} Literal Literal::minSI8x16(const Literal& other) const { return binary<16, &Literal::getLanesSI8x16, &Literal::minInt>(*this, other); } @@ -2329,7 +2330,7 @@ enum class LaneOrder { Low, High }; template<size_t Lanes, LaneArray<Lanes * 2> (Literal::*IntoLanes)() const, LaneOrder Side> -Literal widen(const Literal& vec) { +Literal extend(const Literal& vec) { LaneArray<Lanes* 2> lanes = (vec.*IntoLanes)(); LaneArray<Lanes> result; for (size_t i = 0; i < Lanes; ++i) { @@ -2338,29 +2339,29 @@ Literal widen(const Literal& vec) { return Literal(result); } -Literal Literal::widenLowSToVecI16x8() const { - return widen<8, &Literal::getLanesSI8x16, LaneOrder::Low>(*this); +Literal Literal::extendLowSToVecI16x8() const { + return extend<8, &Literal::getLanesSI8x16, LaneOrder::Low>(*this); } -Literal Literal::widenHighSToVecI16x8() const { - return widen<8, &Literal::getLanesSI8x16, LaneOrder::High>(*this); +Literal Literal::extendHighSToVecI16x8() const { + return extend<8, &Literal::getLanesSI8x16, LaneOrder::High>(*this); } -Literal Literal::widenLowUToVecI16x8() const { - return widen<8, &Literal::getLanesUI8x16, LaneOrder::Low>(*this); +Literal Literal::extendLowUToVecI16x8() const { + return extend<8, &Literal::getLanesUI8x16, LaneOrder::Low>(*this); } -Literal Literal::widenHighUToVecI16x8() const { - return widen<8, &Literal::getLanesUI8x16, LaneOrder::High>(*this); +Literal Literal::extendHighUToVecI16x8() const { + return extend<8, &Literal::getLanesUI8x16, LaneOrder::High>(*this); } -Literal Literal::widenLowSToVecI32x4() const { - return widen<4, &Literal::getLanesSI16x8, LaneOrder::Low>(*this); +Literal Literal::extendLowSToVecI32x4() const { + return extend<4, &Literal::getLanesSI16x8, LaneOrder::Low>(*this); } -Literal Literal::widenHighSToVecI32x4() const { - return widen<4, &Literal::getLanesSI16x8, LaneOrder::High>(*this); +Literal Literal::extendHighSToVecI32x4() const { + return extend<4, &Literal::getLanesSI16x8, LaneOrder::High>(*this); } -Literal Literal::widenLowUToVecI32x4() const { - return widen<4, &Literal::getLanesUI16x8, LaneOrder::Low>(*this); +Literal Literal::extendLowUToVecI32x4() const { + return extend<4, &Literal::getLanesUI16x8, LaneOrder::Low>(*this); } -Literal Literal::widenHighUToVecI32x4() const { - return widen<4, &Literal::getLanesUI16x8, LaneOrder::High>(*this); +Literal Literal::extendHighUToVecI32x4() const { + return extend<4, &Literal::getLanesUI16x8, LaneOrder::High>(*this); } Literal Literal::extMulLowSI16x8(const Literal& other) const { |