diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-12 14:27:29 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-13 09:35:20 +0000 |
commit | c30a6232df03e1efbd9f3b226777b07e087a1122 (patch) | |
tree | e992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/v8/src/wasm/baseline/liftoff-assembler.h | |
parent | 7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff) | |
download | qtwebengine-chromium-85-based.tar.gz |
BASELINE: Update Chromium to 85.0.4183.14085-based
Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/v8/src/wasm/baseline/liftoff-assembler.h')
-rw-r--r-- | chromium/v8/src/wasm/baseline/liftoff-assembler.h | 104 |
1 files changed, 79 insertions, 25 deletions
diff --git a/chromium/v8/src/wasm/baseline/liftoff-assembler.h b/chromium/v8/src/wasm/baseline/liftoff-assembler.h index 3377990496f..aad75b18597 100644 --- a/chromium/v8/src/wasm/baseline/liftoff-assembler.h +++ b/chromium/v8/src/wasm/baseline/liftoff-assembler.h @@ -56,20 +56,6 @@ class LiftoffAssembler : public TurboAssembler { DCHECK(type_ == kWasmI32 || type_ == kWasmI64); } - bool operator==(const VarState& other) const { - if (loc_ != other.loc_) return false; - if (type_ != other.type_) return false; - switch (loc_) { - case kStack: - return true; - case kRegister: - return reg_ == other.reg_; - case kIntConst: - return i32_const_ == other.i32_const_; - } - UNREACHABLE(); - } - bool is_stack() const { return loc_ == kStack; } bool is_gp_reg() const { return loc_ == kRegister && reg_.is_gp(); } bool is_fp_reg() const { return loc_ == kRegister && reg_.is_fp(); } @@ -140,6 +126,8 @@ class LiftoffAssembler : public TurboAssembler { CacheState() = default; CacheState(CacheState&&) V8_NOEXCEPT = default; CacheState& operator=(CacheState&&) V8_NOEXCEPT = default; + // Disallow copy construction. + CacheState(const CacheState&) = delete; base::SmallVector<VarState, 8> stack_state; LiftoffRegList used_registers; @@ -277,14 +265,23 @@ class LiftoffAssembler : public TurboAssembler { private: // Make the copy assignment operator private (to be used from {Split()}). CacheState& operator=(const CacheState&) V8_NOEXCEPT = default; - // Disallow copy construction. - CacheState(const CacheState&) = delete; }; explicit LiftoffAssembler(std::unique_ptr<AssemblerBuffer>); ~LiftoffAssembler() override; - LiftoffRegister PopToRegister(LiftoffRegList pinned = {}); + LiftoffRegister LoadToRegister(VarState slot, LiftoffRegList pinned); + + LiftoffRegister PopToRegister(LiftoffRegList pinned = {}) { + DCHECK(!cache_state_.stack_state.empty()); + VarState slot = cache_state_.stack_state.back(); + cache_state_.stack_state.pop_back(); + if (slot.is_reg()) { + cache_state_.dec_used(slot.reg()); + return slot.reg(); + } + return LoadToRegister(slot, pinned); + } // Returns the register which holds the value of stack slot {index}. If the // value is not stored in a register yet, a register is allocated for it. The @@ -340,7 +337,7 @@ class LiftoffAssembler : public TurboAssembler { // possible. LiftoffRegister GetUnusedRegister( RegClass rc, std::initializer_list<LiftoffRegister> try_first, - LiftoffRegList pinned = {}) { + LiftoffRegList pinned) { for (LiftoffRegister reg : try_first) { DCHECK_EQ(reg.reg_class(), rc); if (cache_state_.is_free(reg)) return reg; @@ -349,7 +346,7 @@ class LiftoffAssembler : public TurboAssembler { } // Get an unused register for class {rc}, potentially spilling to free one. - LiftoffRegister GetUnusedRegister(RegClass rc, LiftoffRegList pinned = {}) { + LiftoffRegister GetUnusedRegister(RegClass rc, LiftoffRegList pinned) { if (kNeedI64RegPair && rc == kGpRegPair) { LiftoffRegList candidates = kGpCacheRegList; Register low = pinned.set(GetUnusedRegister(candidates, pinned)).gp(); @@ -733,6 +730,15 @@ class LiftoffAssembler : public TurboAssembler { inline void emit_f64_set_cond(Condition condition, Register dst, DoubleRegister lhs, DoubleRegister rhs); + inline void LoadTransform(LiftoffRegister dst, Register src_addr, + Register offset_reg, uint32_t offset_imm, + LoadType type, LoadTransformationKind transform, + uint32_t* protected_load_pc); + inline void emit_s8x16_shuffle(LiftoffRegister dst, LiftoffRegister lhs, + LiftoffRegister rhs, + const uint8_t shuffle[16]); + inline void emit_s8x16_swizzle(LiftoffRegister dst, LiftoffRegister lhs, + LiftoffRegister rhs); inline void emit_i8x16_splat(LiftoffRegister dst, LiftoffRegister src); inline void emit_i16x8_splat(LiftoffRegister dst, LiftoffRegister src); inline void emit_i32x4_splat(LiftoffRegister dst, LiftoffRegister src); @@ -801,10 +807,21 @@ class LiftoffAssembler : public TurboAssembler { inline void emit_s128_select(LiftoffRegister dst, LiftoffRegister src1, LiftoffRegister src2, LiftoffRegister mask); inline void emit_i8x16_neg(LiftoffRegister dst, LiftoffRegister src); + inline void emit_v8x16_anytrue(LiftoffRegister dst, LiftoffRegister src); + inline void emit_v8x16_alltrue(LiftoffRegister dst, LiftoffRegister src); + inline void emit_i8x16_bitmask(LiftoffRegister dst, LiftoffRegister src); inline void emit_i8x16_shl(LiftoffRegister dst, LiftoffRegister lhs, LiftoffRegister rhs); inline void emit_i8x16_shli(LiftoffRegister dst, LiftoffRegister lhs, int32_t rhs); + inline void emit_i8x16_shr_s(LiftoffRegister dst, LiftoffRegister lhs, + LiftoffRegister rhs); + inline void emit_i8x16_shri_s(LiftoffRegister dst, LiftoffRegister lhs, + int32_t rhs); + inline void emit_i8x16_shr_u(LiftoffRegister dst, LiftoffRegister lhs, + LiftoffRegister rhs); + inline void emit_i8x16_shri_u(LiftoffRegister dst, LiftoffRegister lhs, + int32_t rhs); inline void emit_i8x16_add(LiftoffRegister dst, LiftoffRegister lhs, LiftoffRegister rhs); inline void emit_i8x16_add_saturate_s(LiftoffRegister dst, @@ -832,10 +849,21 @@ class LiftoffAssembler : public TurboAssembler { inline void emit_i8x16_max_u(LiftoffRegister dst, LiftoffRegister lhs, LiftoffRegister rhs); inline void emit_i16x8_neg(LiftoffRegister dst, LiftoffRegister src); + inline void emit_v16x8_anytrue(LiftoffRegister dst, LiftoffRegister src); + inline void emit_v16x8_alltrue(LiftoffRegister dst, LiftoffRegister src); + inline void emit_i16x8_bitmask(LiftoffRegister dst, LiftoffRegister src); inline void emit_i16x8_shl(LiftoffRegister dst, LiftoffRegister lhs, LiftoffRegister rhs); inline void emit_i16x8_shli(LiftoffRegister dst, LiftoffRegister lhs, int32_t rhs); + inline void emit_i16x8_shr_s(LiftoffRegister dst, LiftoffRegister lhs, + LiftoffRegister rhs); + inline void emit_i16x8_shri_s(LiftoffRegister dst, LiftoffRegister lhs, + int32_t rhs); + inline void emit_i16x8_shr_u(LiftoffRegister dst, LiftoffRegister lhs, + LiftoffRegister rhs); + inline void emit_i16x8_shri_u(LiftoffRegister dst, LiftoffRegister lhs, + int32_t rhs); inline void emit_i16x8_add(LiftoffRegister dst, LiftoffRegister lhs, LiftoffRegister rhs); inline void emit_i16x8_add_saturate_s(LiftoffRegister dst, @@ -863,10 +891,21 @@ class LiftoffAssembler : public TurboAssembler { inline void emit_i16x8_max_u(LiftoffRegister dst, LiftoffRegister lhs, LiftoffRegister rhs); inline void emit_i32x4_neg(LiftoffRegister dst, LiftoffRegister src); + inline void emit_v32x4_anytrue(LiftoffRegister dst, LiftoffRegister src); + inline void emit_v32x4_alltrue(LiftoffRegister dst, LiftoffRegister src); + inline void emit_i32x4_bitmask(LiftoffRegister dst, LiftoffRegister src); inline void emit_i32x4_shl(LiftoffRegister dst, LiftoffRegister lhs, LiftoffRegister rhs); inline void emit_i32x4_shli(LiftoffRegister dst, LiftoffRegister lhs, int32_t rhs); + inline void emit_i32x4_shr_s(LiftoffRegister dst, LiftoffRegister lhs, + LiftoffRegister rhs); + inline void emit_i32x4_shri_s(LiftoffRegister dst, LiftoffRegister lhs, + int32_t rhs); + inline void emit_i32x4_shr_u(LiftoffRegister dst, LiftoffRegister lhs, + LiftoffRegister rhs); + inline void emit_i32x4_shri_u(LiftoffRegister dst, LiftoffRegister lhs, + int32_t rhs); inline void emit_i32x4_add(LiftoffRegister dst, LiftoffRegister lhs, LiftoffRegister rhs); inline void emit_i32x4_sub(LiftoffRegister dst, LiftoffRegister lhs, @@ -886,6 +925,14 @@ class LiftoffAssembler : public TurboAssembler { LiftoffRegister rhs); inline void emit_i64x2_shli(LiftoffRegister dst, LiftoffRegister lhs, int32_t rhs); + inline void emit_i64x2_shr_s(LiftoffRegister dst, LiftoffRegister lhs, + LiftoffRegister rhs); + inline void emit_i64x2_shri_s(LiftoffRegister dst, LiftoffRegister lhs, + int32_t rhs); + inline void emit_i64x2_shr_u(LiftoffRegister dst, LiftoffRegister lhs, + LiftoffRegister rhs); + inline void emit_i64x2_shri_u(LiftoffRegister dst, LiftoffRegister lhs, + int32_t rhs); inline void emit_i64x2_add(LiftoffRegister dst, LiftoffRegister lhs, LiftoffRegister rhs); inline void emit_i64x2_sub(LiftoffRegister dst, LiftoffRegister lhs, @@ -922,6 +969,14 @@ class LiftoffAssembler : public TurboAssembler { LiftoffRegister rhs); inline void emit_f64x2_max(LiftoffRegister dst, LiftoffRegister lhs, LiftoffRegister rhs); + inline void emit_i32x4_sconvert_f32x4(LiftoffRegister dst, + LiftoffRegister src); + inline void emit_i32x4_uconvert_f32x4(LiftoffRegister dst, + LiftoffRegister src); + inline void emit_f32x4_sconvert_i32x4(LiftoffRegister dst, + LiftoffRegister src); + inline void emit_f32x4_uconvert_i32x4(LiftoffRegister dst, + LiftoffRegister src); inline void emit_i8x16_sconvert_i16x8(LiftoffRegister dst, LiftoffRegister lhs, LiftoffRegister rhs); @@ -1074,7 +1129,6 @@ class LiftoffAssembler : public TurboAssembler { } private: - LiftoffRegister LoadToRegister(VarState slot, LiftoffRegList pinned); LiftoffRegister LoadI64HalfIntoRegister(VarState slot, RegPairHalf half); uint32_t num_locals_ = 0; @@ -1090,8 +1144,8 @@ class LiftoffAssembler : public TurboAssembler { LiftoffBailoutReason bailout_reason_ = kSuccess; const char* bailout_detail_ = nullptr; - LiftoffRegister SpillOneRegister(LiftoffRegList candidates, - LiftoffRegList pinned); + V8_NOINLINE LiftoffRegister SpillOneRegister(LiftoffRegList candidates, + LiftoffRegList pinned); // Spill one or two fp registers to get a pair of adjacent fp registers. LiftoffRegister SpillAdjacentFpRegisters(LiftoffRegList pinned); }; @@ -1212,19 +1266,19 @@ class LiftoffStackSlots { } void Add(const LiftoffAssembler::VarState& src) { slots_.emplace_back(src); } + void Reverse() { std::reverse(slots_.begin(), slots_.end()); } + inline void Construct(); private: struct Slot { - // Allow move construction. - Slot(Slot&&) V8_NOEXCEPT = default; Slot(const LiftoffAssembler::VarState& src, uint32_t src_offset, RegPairHalf half) : src_(src), src_offset_(src_offset), half_(half) {} explicit Slot(const LiftoffAssembler::VarState& src) : src_(src), half_(kLowWord) {} - const LiftoffAssembler::VarState src_; + LiftoffAssembler::VarState src_; uint32_t src_offset_ = 0; RegPairHalf half_; }; |