deps: V8: cherry-pick 7ef6a001762 · nodejs/node@07bcd28

@@ -2618,12 +2618,12 @@ int32_t MacroAssembler::GetOffset(Label* L, OffsetSize bits) {

26182618

}

2619261926202620

Register MacroAssembler::GetRkAsRegisterHelper(const Operand& rk,

2621-

Register scratch) {

2621+

UseScratchRegisterScope temps) {

26222622

Register r2 = no_reg;

26232623

if (rk.is_reg()) {

26242624

r2 = rk.rm();

26252625

} else {

2626-

r2 = scratch;

2626+

r2 = temps.Acquire();

26272627

li(r2, rk);

26282628

}

26292629

@@ -2635,7 +2635,6 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond,

26352635

bool need_link) {

26362636

UseScratchRegisterScope temps(this);

26372637

BlockTrampolinePoolScope block_trampoline_pool(this);

2638-

Register scratch = temps.Acquire();

26392638

DCHECK_NE(rj, zero_reg);

2640263926412640

// Be careful to always use shifted_branch_offset only just before the

@@ -2671,7 +2670,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond,

26712670

if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false;

26722671

if (need_link) pcaddi(ra, 2);

26732672

// We don't want any other register but scratch clobbered.

2674-

Register sc = GetRkAsRegisterHelper(rk, scratch);

2673+

Register sc = GetRkAsRegisterHelper(rk, temps);

26752674

offset = GetOffset(L, OffsetSize::kOffset16);

26762675

beq(rj, sc, offset);

26772676

}

@@ -2693,7 +2692,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond,

26932692

if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false;

26942693

if (need_link) pcaddi(ra, 2);

26952694

// We don't want any other register but scratch clobbered.

2696-

Register sc = GetRkAsRegisterHelper(rk, scratch);

2695+

Register sc = GetRkAsRegisterHelper(rk, temps);

26972696

offset = GetOffset(L, OffsetSize::kOffset16);

26982697

bne(rj, sc, offset);

26992698

}

@@ -2712,7 +2711,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond,

27122711

} else {

27132712

if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false;

27142713

if (need_link) pcaddi(ra, 2);

2715-

Register sc = GetRkAsRegisterHelper(rk, scratch);

2714+

Register sc = GetRkAsRegisterHelper(rk, temps);

27162715

DCHECK(rj != sc);

27172716

offset = GetOffset(L, OffsetSize::kOffset16);

27182717

blt(sc, rj, offset);

@@ -2733,7 +2732,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond,

27332732

} else {

27342733

if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false;

27352734

if (need_link) pcaddi(ra, 2);

2736-

Register sc = GetRkAsRegisterHelper(rk, scratch);

2735+

Register sc = GetRkAsRegisterHelper(rk, temps);

27372736

DCHECK(rj != sc);

27382737

offset = GetOffset(L, OffsetSize::kOffset16);

27392738

bge(rj, sc, offset);

@@ -2751,7 +2750,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond,

27512750

} else {

27522751

if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false;

27532752

if (need_link) pcaddi(ra, 2);

2754-

Register sc = GetRkAsRegisterHelper(rk, scratch);

2753+

Register sc = GetRkAsRegisterHelper(rk, temps);

27552754

DCHECK(rj != sc);

27562755

offset = GetOffset(L, OffsetSize::kOffset16);

27572756

blt(rj, sc, offset);

@@ -2772,7 +2771,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond,

27722771

} else {

27732772

if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false;

27742773

if (need_link) pcaddi(ra, 2);

2775-

Register sc = GetRkAsRegisterHelper(rk, scratch);

2774+

Register sc = GetRkAsRegisterHelper(rk, temps);

27762775

DCHECK(rj != sc);

27772776

offset = GetOffset(L, OffsetSize::kOffset16);

27782777

bge(sc, rj, offset);

@@ -2792,7 +2791,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond,

27922791

} else {

27932792

if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false;

27942793

if (need_link) pcaddi(ra, 2);

2795-

Register sc = GetRkAsRegisterHelper(rk, scratch);

2794+

Register sc = GetRkAsRegisterHelper(rk, temps);

27962795

DCHECK(rj != sc);

27972796

offset = GetOffset(L, OffsetSize::kOffset16);

27982797

bltu(sc, rj, offset);

@@ -2813,7 +2812,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond,

28132812

} else {

28142813

if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false;

28152814

if (need_link) pcaddi(ra, 2);

2816-

Register sc = GetRkAsRegisterHelper(rk, scratch);

2815+

Register sc = GetRkAsRegisterHelper(rk, temps);

28172816

DCHECK(rj != sc);

28182817

offset = GetOffset(L, OffsetSize::kOffset16);

28192818

bgeu(rj, sc, offset);

@@ -2828,7 +2827,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond,

28282827

} else {

28292828

if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false;

28302829

if (need_link) pcaddi(ra, 2);

2831-

Register sc = GetRkAsRegisterHelper(rk, scratch);

2830+

Register sc = GetRkAsRegisterHelper(rk, temps);

28322831

DCHECK(rj != sc);

28332832

offset = GetOffset(L, OffsetSize::kOffset16);

28342833

bltu(rj, sc, offset);

@@ -2848,7 +2847,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond,

28482847

} else {

28492848

if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false;

28502849

if (need_link) pcaddi(ra, 2);

2851-

Register sc = GetRkAsRegisterHelper(rk, scratch);

2850+

Register sc = GetRkAsRegisterHelper(rk, temps);

28522851

DCHECK(rj != sc);

28532852

offset = GetOffset(L, OffsetSize::kOffset16);

28542853

bgeu(sc, rj, offset);

@@ -3079,10 +3078,12 @@ void MacroAssembler::CompareTaggedRootAndBranch(const Register& obj,

30793078

// Some smi roots contain system pointer size values like stack limits.

30803079

DCHECK(base::IsInRange(index, RootIndex::kFirstStrongOrReadOnlyRoot,

30813080

RootIndex::kLastStrongOrReadOnlyRoot));

3082-

Register temp = temps.Acquire();

3083-

DCHECK(!AreAliased(obj, temp));

3084-

LoadRoot(temp, index);

3085-

CompareTaggedAndBranch(target, cc, obj, Operand(temp));

3081+

Register scratch1 = temps.Acquire();

3082+

Register scratch2 = temps.Acquire();

3083+

DCHECK(!AreAliased(obj, scratch1, scratch2));

3084+

slli_w(scratch1, obj, 0);

3085+

LoadTaggedRoot(scratch2, index);

3086+

Branch(target, cc, scratch1, Operand(scratch2));

30863087

}

3087308830883089

// Compare the object in a register to a value from the root list.