@@ -2618,12 +2618,12 @@ int32_t MacroAssembler::GetOffset(Label* L, OffsetSize bits) { |
2618 | 2618 | } |
2619 | 2619 |
|
2620 | 2620 | Register MacroAssembler::GetRkAsRegisterHelper(const Operand& rk, |
2621 | | - Register scratch) { |
| 2621 | + UseScratchRegisterScope temps) { |
2622 | 2622 | Register r2 = no_reg; |
2623 | 2623 | if (rk.is_reg()) { |
2624 | 2624 | r2 = rk.rm(); |
2625 | 2625 | } else { |
2626 | | - r2 = scratch; |
| 2626 | + r2 = temps.Acquire(); |
2627 | 2627 | li(r2, rk); |
2628 | 2628 | } |
2629 | 2629 |
|
@@ -2635,7 +2635,6 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond, |
2635 | 2635 | bool need_link) { |
2636 | 2636 | UseScratchRegisterScope temps(this); |
2637 | 2637 | BlockTrampolinePoolScope block_trampoline_pool(this); |
2638 | | - Register scratch = temps.Acquire(); |
2639 | 2638 | DCHECK_NE(rj, zero_reg); |
2640 | 2639 |
|
2641 | 2640 | // Be careful to always use shifted_branch_offset only just before the |
@@ -2671,7 +2670,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond, |
2671 | 2670 | if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false; |
2672 | 2671 | if (need_link) pcaddi(ra, 2); |
2673 | 2672 | // We don't want any other register but scratch clobbered. |
2674 | | - Register sc = GetRkAsRegisterHelper(rk, scratch); |
| 2673 | + Register sc = GetRkAsRegisterHelper(rk, temps); |
2675 | 2674 | offset = GetOffset(L, OffsetSize::kOffset16); |
2676 | 2675 | beq(rj, sc, offset); |
2677 | 2676 | } |
@@ -2693,7 +2692,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond, |
2693 | 2692 | if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false; |
2694 | 2693 | if (need_link) pcaddi(ra, 2); |
2695 | 2694 | // We don't want any other register but scratch clobbered. |
2696 | | - Register sc = GetRkAsRegisterHelper(rk, scratch); |
| 2695 | + Register sc = GetRkAsRegisterHelper(rk, temps); |
2697 | 2696 | offset = GetOffset(L, OffsetSize::kOffset16); |
2698 | 2697 | bne(rj, sc, offset); |
2699 | 2698 | } |
@@ -2712,7 +2711,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond, |
2712 | 2711 | } else { |
2713 | 2712 | if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false; |
2714 | 2713 | if (need_link) pcaddi(ra, 2); |
2715 | | - Register sc = GetRkAsRegisterHelper(rk, scratch); |
| 2714 | + Register sc = GetRkAsRegisterHelper(rk, temps); |
2716 | 2715 | DCHECK(rj != sc); |
2717 | 2716 | offset = GetOffset(L, OffsetSize::kOffset16); |
2718 | 2717 | blt(sc, rj, offset); |
@@ -2733,7 +2732,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond, |
2733 | 2732 | } else { |
2734 | 2733 | if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false; |
2735 | 2734 | if (need_link) pcaddi(ra, 2); |
2736 | | - Register sc = GetRkAsRegisterHelper(rk, scratch); |
| 2735 | + Register sc = GetRkAsRegisterHelper(rk, temps); |
2737 | 2736 | DCHECK(rj != sc); |
2738 | 2737 | offset = GetOffset(L, OffsetSize::kOffset16); |
2739 | 2738 | bge(rj, sc, offset); |
@@ -2751,7 +2750,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond, |
2751 | 2750 | } else { |
2752 | 2751 | if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false; |
2753 | 2752 | if (need_link) pcaddi(ra, 2); |
2754 | | - Register sc = GetRkAsRegisterHelper(rk, scratch); |
| 2753 | + Register sc = GetRkAsRegisterHelper(rk, temps); |
2755 | 2754 | DCHECK(rj != sc); |
2756 | 2755 | offset = GetOffset(L, OffsetSize::kOffset16); |
2757 | 2756 | blt(rj, sc, offset); |
@@ -2772,7 +2771,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond, |
2772 | 2771 | } else { |
2773 | 2772 | if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false; |
2774 | 2773 | if (need_link) pcaddi(ra, 2); |
2775 | | - Register sc = GetRkAsRegisterHelper(rk, scratch); |
| 2774 | + Register sc = GetRkAsRegisterHelper(rk, temps); |
2776 | 2775 | DCHECK(rj != sc); |
2777 | 2776 | offset = GetOffset(L, OffsetSize::kOffset16); |
2778 | 2777 | bge(sc, rj, offset); |
@@ -2792,7 +2791,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond, |
2792 | 2791 | } else { |
2793 | 2792 | if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false; |
2794 | 2793 | if (need_link) pcaddi(ra, 2); |
2795 | | - Register sc = GetRkAsRegisterHelper(rk, scratch); |
| 2794 | + Register sc = GetRkAsRegisterHelper(rk, temps); |
2796 | 2795 | DCHECK(rj != sc); |
2797 | 2796 | offset = GetOffset(L, OffsetSize::kOffset16); |
2798 | 2797 | bltu(sc, rj, offset); |
@@ -2813,7 +2812,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond, |
2813 | 2812 | } else { |
2814 | 2813 | if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false; |
2815 | 2814 | if (need_link) pcaddi(ra, 2); |
2816 | | - Register sc = GetRkAsRegisterHelper(rk, scratch); |
| 2815 | + Register sc = GetRkAsRegisterHelper(rk, temps); |
2817 | 2816 | DCHECK(rj != sc); |
2818 | 2817 | offset = GetOffset(L, OffsetSize::kOffset16); |
2819 | 2818 | bgeu(rj, sc, offset); |
@@ -2828,7 +2827,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond, |
2828 | 2827 | } else { |
2829 | 2828 | if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false; |
2830 | 2829 | if (need_link) pcaddi(ra, 2); |
2831 | | - Register sc = GetRkAsRegisterHelper(rk, scratch); |
| 2830 | + Register sc = GetRkAsRegisterHelper(rk, temps); |
2832 | 2831 | DCHECK(rj != sc); |
2833 | 2832 | offset = GetOffset(L, OffsetSize::kOffset16); |
2834 | 2833 | bltu(rj, sc, offset); |
@@ -2848,7 +2847,7 @@ bool MacroAssembler::BranchShortOrFallback(Label* L, Condition cond, |
2848 | 2847 | } else { |
2849 | 2848 | if (L->is_bound() && !is_near(L, OffsetSize::kOffset16)) return false; |
2850 | 2849 | if (need_link) pcaddi(ra, 2); |
2851 | | - Register sc = GetRkAsRegisterHelper(rk, scratch); |
| 2850 | + Register sc = GetRkAsRegisterHelper(rk, temps); |
2852 | 2851 | DCHECK(rj != sc); |
2853 | 2852 | offset = GetOffset(L, OffsetSize::kOffset16); |
2854 | 2853 | bgeu(sc, rj, offset); |
@@ -3079,10 +3078,12 @@ void MacroAssembler::CompareTaggedRootAndBranch(const Register& obj, |
3079 | 3078 | // Some smi roots contain system pointer size values like stack limits. |
3080 | 3079 | DCHECK(base::IsInRange(index, RootIndex::kFirstStrongOrReadOnlyRoot, |
3081 | 3080 | 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)); |
3086 | 3087 | } |
3087 | 3088 |
|
3088 | 3089 | // Compare the object in a register to a value from the root list. |
|