From 203d9c8cb66751f5944f493bfaf0a8120a5899f7 Mon Sep 17 00:00:00 2001 From: Victor Gomes Date: Wed, 4 Jan 2023 16:06:23 +0100 Subject: [PATCH] [maglev][arm64] Fix InterruptBudget IRs Use a temporary for feedback cell, since if the `amount` is big enough, the macro instructions Add/Sub might need a temporary register as well. Bug: v8:7700 Change-Id: I2930f525ab3bf7d92fc1a47d9c483577c6186400 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/4135889 Reviewed-by: Darius Mercadier Commit-Queue: Darius Mercadier Auto-Submit: Victor Gomes Cr-Commit-Position: refs/heads/main@{#85096} --- src/maglev/arm64/maglev-ir-arm64.cc | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/maglev/arm64/maglev-ir-arm64.cc b/src/maglev/arm64/maglev-ir-arm64.cc index 20ebd60523..bca29453aa 100644 --- a/src/maglev/arm64/maglev-ir-arm64.cc +++ b/src/maglev/arm64/maglev-ir-arm64.cc @@ -1679,11 +1679,13 @@ void GeneratorStore::GenerateCode(MaglevAssembler* masm, FieldMemOperand(generator, JSGeneratorObject::kInputOrDebugPosOffset)); } -void IncreaseInterruptBudget::SetValueLocationConstraints() {} +void IncreaseInterruptBudget::SetValueLocationConstraints() { + set_temporaries_needed(1); +} void IncreaseInterruptBudget::GenerateCode(MaglevAssembler* masm, const ProcessingState& state) { UseScratchRegisterScope temps(masm); - Register feedback_cell = temps.AcquireX(); + Register feedback_cell = general_temporaries().PopFirst(); Register budget = temps.AcquireW(); __ Ldr(feedback_cell, MemOperand(fp, StandardFrameConstants::kFunctionOffset)); @@ -1698,12 +1700,14 @@ void IncreaseInterruptBudget::GenerateCode(MaglevAssembler* masm, } int ReduceInterruptBudget::MaxCallStackArgs() const { return 1; } -void ReduceInterruptBudget::SetValueLocationConstraints() {} +void ReduceInterruptBudget::SetValueLocationConstraints() { + set_temporaries_needed(1); +} void ReduceInterruptBudget::GenerateCode(MaglevAssembler* masm, const ProcessingState& state) { { UseScratchRegisterScope temps(masm); - Register feedback_cell = temps.AcquireX(); + Register feedback_cell = general_temporaries().PopFirst(); Register budget = temps.AcquireW(); __ Ldr(feedback_cell, MemOperand(fp, StandardFrameConstants::kFunctionOffset));