From edd2c596a98660c342982ab83b7d9302e3832d1a Mon Sep 17 00:00:00 2001 From: Mingtao Zhou Date: Wed, 15 Oct 2025 10:17:29 +0800 Subject: [PATCH] deps: V8: cherry-pick 7ef6a001762 Origin commit message: [loong64] Fix no pointer compression build 1. Fix a typo that breaks no static root build. 2. Use less scratch regs in some compare and branch functions. This bug is triggered by Node.js loong64 port. Change-Id: If251906cc07feca237c75f0b65517526085f61dd Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/7031299 Reviewed-by: Leszek Swirski Auto-Submit: Zhao Jiazhong Commit-Queue: Zhao Jiazhong Cr-Commit-Position: refs/heads/main@{#103105} Refs: https://github.com/v8/v8/commit/7ef6a00176207b26a2585b163c12f35bedc9c1cf --- common.gypi | 2 +- .../src/builtins/loong64/builtins-loong64.cc | 2 +- .../loong64/macro-assembler-loong64.cc | 35 ++++++++++--------- .../codegen/loong64/macro-assembler-loong64.h | 3 +- 4 files changed, 22 insertions(+), 20 deletions(-) diff --git a/common.gypi b/common.gypi index 592c4e9294e05f..63301644b949f0 100644 --- a/common.gypi +++ b/common.gypi @@ -38,7 +38,7 @@ # Reset this number to 0 on major V8 upgrades. # Increment by one for each non-official patch applied to deps/v8. - 'v8_embedder_string': '-node.10', + 'v8_embedder_string': '-node.11', ##### V8 defaults for Node.js ##### diff --git a/deps/v8/src/builtins/loong64/builtins-loong64.cc b/deps/v8/src/builtins/loong64/builtins-loong64.cc index f93e4911af5857..53c4a1c9afe9c8 100644 --- a/deps/v8/src/builtins/loong64/builtins-loong64.cc +++ b/deps/v8/src/builtins/loong64/builtins-loong64.cc @@ -328,7 +328,7 @@ static void GetSharedFunctionInfoBytecodeOrBaseline( if (v8_flags.debug_code) { Label not_baseline; __ GetObjectType(data, scratch1, scratch1); - __ Branch(¬_baseline, ne, scratch1, Operand(CODETYPE)); + __ Branch(¬_baseline, ne, scratch1, Operand(CODE_TYPE)); AssertCodeIsBaseline(masm, data, scratch1); __ Branch(is_baseline); __ bind(¬_baseline); diff --git a/deps/v8/src/codegen/loong64/macro-assembler-loong64.cc b/deps/v8/src/codegen/loong64/macro-assembler-loong64.cc index e5fb03c9401083..c0e1860f4b7f33 100644 --- a/deps/v8/src/codegen/loong64/macro-assembler-loong64.cc +++ b/deps/v8/src/codegen/loong64/macro-assembler-loong64.cc @@ -2618,12 +2618,12 @@ int32_t MacroAssembler::GetOffset(Label* L, OffsetSize bits) { } Register MacroAssembler::GetRkAsRegisterHelper(const Operand& rk, - Register scratch) { + UseScratchRegisterScope temps) { Register r2 = no_reg; if (rk.is_reg()) { r2 = rk.rm(); } else { - r2 = scratch; + r2 = temps.Acquire(); li(r2, rk); } @@ -2635,7 +2635,6 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond, bool need_link) { UseScratchRegisterScope temps(this); BlockTrampolinePoolScope block_trampoline_pool(this); - Register scratch = temps.Acquire(); DCHECK_NE(rj, zero_reg); // Be careful to always use shifted_branch_offset only just before the @@ -2671,7 +2670,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond, if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false; if (need_link) pcaddi(ra, 2); // We don't want any other register but scratch clobbered. - Register sc = GetRkAsRegisterHelper(rk, scratch); + Register sc = GetRkAsRegisterHelper(rk, temps); offset = GetOffset(L, OffsetSize::kOffset16); beq(rj, sc, offset); } @@ -2693,7 +2692,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond, if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false; if (need_link) pcaddi(ra, 2); // We don't want any other register but scratch clobbered. - Register sc = GetRkAsRegisterHelper(rk, scratch); + Register sc = GetRkAsRegisterHelper(rk, temps); offset = GetOffset(L, OffsetSize::kOffset16); bne(rj, sc, offset); } @@ -2712,7 +2711,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond, } else { if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false; if (need_link) pcaddi(ra, 2); - Register sc = GetRkAsRegisterHelper(rk, scratch); + Register sc = GetRkAsRegisterHelper(rk, temps); DCHECK(rj != sc); offset = GetOffset(L, OffsetSize::kOffset16); blt(sc, rj, offset); @@ -2733,7 +2732,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond, } else { if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false; if (need_link) pcaddi(ra, 2); - Register sc = GetRkAsRegisterHelper(rk, scratch); + Register sc = GetRkAsRegisterHelper(rk, temps); DCHECK(rj != sc); offset = GetOffset(L, OffsetSize::kOffset16); bge(rj, sc, offset); @@ -2751,7 +2750,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond, } else { if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false; if (need_link) pcaddi(ra, 2); - Register sc = GetRkAsRegisterHelper(rk, scratch); + Register sc = GetRkAsRegisterHelper(rk, temps); DCHECK(rj != sc); offset = GetOffset(L, OffsetSize::kOffset16); blt(rj, sc, offset); @@ -2772,7 +2771,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond, } else { if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false; if (need_link) pcaddi(ra, 2); - Register sc = GetRkAsRegisterHelper(rk, scratch); + Register sc = GetRkAsRegisterHelper(rk, temps); DCHECK(rj != sc); offset = GetOffset(L, OffsetSize::kOffset16); bge(sc, rj, offset); @@ -2792,7 +2791,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond, } else { if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false; if (need_link) pcaddi(ra, 2); - Register sc = GetRkAsRegisterHelper(rk, scratch); + Register sc = GetRkAsRegisterHelper(rk, temps); DCHECK(rj != sc); offset = GetOffset(L, OffsetSize::kOffset16); bltu(sc, rj, offset); @@ -2813,7 +2812,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond, } else { if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false; if (need_link) pcaddi(ra, 2); - Register sc = GetRkAsRegisterHelper(rk, scratch); + Register sc = GetRkAsRegisterHelper(rk, temps); DCHECK(rj != sc); offset = GetOffset(L, OffsetSize::kOffset16); bgeu(rj, sc, offset); @@ -2828,7 +2827,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond, } else { if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false; if (need_link) pcaddi(ra, 2); - Register sc = GetRkAsRegisterHelper(rk, scratch); + Register sc = GetRkAsRegisterHelper(rk, temps); DCHECK(rj != sc); offset = GetOffset(L, OffsetSize::kOffset16); bltu(rj, sc, offset); @@ -2848,7 +2847,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond, } else { if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false; if (need_link) pcaddi(ra, 2); - Register sc = GetRkAsRegisterHelper(rk, scratch); + Register sc = GetRkAsRegisterHelper(rk, temps); DCHECK(rj != sc); offset = GetOffset(L, OffsetSize::kOffset16); bgeu(sc, rj, offset); @@ -3079,10 +3078,12 @@ void MacroAssembler::CompareTaggedRootAndBranch(const Register& obj, // Some smi roots contain system pointer size values like stack limits. DCHECK(base::IsInRange(index, RootIndex::kFirstStrongOrReadOnlyRoot, RootIndex::kLastStrongOrReadOnlyRoot)); - Register temp = temps.Acquire(); - DCHECK(!AreAliased(obj, temp)); - LoadRoot(temp, index); - CompareTaggedAndBranch(target, cc, obj, Operand(temp)); + Register scratch1 = temps.Acquire(); + Register scratch2 = temps.Acquire(); + DCHECK(!AreAliased(obj, scratch1, scratch2)); + slli_w(scratch1, obj, 0); + LoadTaggedRoot(scratch2, index); + Branch(target, cc, scratch1, Operand(scratch2)); } // Compare the object in a register to a value from the root list. diff --git a/deps/v8/src/codegen/loong64/macro-assembler-loong64.h b/deps/v8/src/codegen/loong64/macro-assembler-loong64.h index e08ec7e30a8f68..0e352af469f0c8 100644 --- a/deps/v8/src/codegen/loong64/macro-assembler-loong64.h +++ b/deps/v8/src/codegen/loong64/macro-assembler-loong64.h @@ -1286,7 +1286,8 @@ class V8_EXPORT_PRIVATE MacroAssembler : public MacroAssemblerBase { } protected: - inline Register GetRkAsRegisterHelper(const Operand& rk, Register scratch); + inline Register GetRkAsRegisterHelper(const Operand& rk, + UseScratchRegisterScope temps); inline int32_t GetOffset(Label* L, OffsetSize bits); private: