tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 3f463ccfc6938fdd5fcaaede6608feb4e2c0ff0d
parent 089a74ef4ada8f1289878ff3caf21be428bd3a82
Author: André Bargull <andre.bargull@gmail.com>
Date:   Wed, 22 Oct 2025 15:31:21 +0000

Bug 1995704 - Part 1: Improve register allocation for LPowHalfD. r=spidermonkey-reviewers,jandem

- `defineReuseInput` isn't needed for arm32, loong64, mips64, and riscv64.
- `useRegisterAtStart` can be used for arm64.

And use `Fneg` for ARM64 to save one instruction.

Differential Revision: https://phabricator.services.mozilla.com/D269548

Diffstat:
Mjs/src/jit/arm/Lowering-arm.cpp | 2+-
Mjs/src/jit/arm64/CodeGenerator-arm64.cpp | 3+--
Mjs/src/jit/arm64/Lowering-arm64.cpp | 2+-
Mjs/src/jit/loong64/Lowering-loong64.cpp | 2+-
Mjs/src/jit/mips-shared/Lowering-mips-shared.cpp | 2+-
Mjs/src/jit/riscv64/Lowering-riscv64.cpp | 2+-
6 files changed, 6 insertions(+), 7 deletions(-)

diff --git a/js/src/jit/arm/Lowering-arm.cpp b/js/src/jit/arm/Lowering-arm.cpp @@ -500,7 +500,7 @@ void LIRGenerator::visitPowHalf(MPowHalf* ins) { MDefinition* input = ins->input(); MOZ_ASSERT(input->type() == MIRType::Double); LPowHalfD* lir = new (alloc()) LPowHalfD(useRegisterAtStart(input)); - defineReuseInput(lir, ins, 0); + define(lir, ins); } void LIRGeneratorARM::lowerWasmSelectI(MWasmSelect* select) { diff --git a/js/src/jit/arm64/CodeGenerator-arm64.cpp b/js/src/jit/arm64/CodeGenerator-arm64.cpp @@ -1005,8 +1005,7 @@ void CodeGenerator::visitPowHalfD(LPowHalfD* ins) { masm.branchDouble(cond, input, scratch, &sqrt); // Math.pow(-Infinity, 0.5) == Infinity. - masm.zeroDouble(output); - masm.subDouble(scratch, output); + masm.Fneg(ARMFPRegister(output, 64), ARMFPRegister(scratch, 64)); masm.jump(&done); masm.bind(&sqrt); diff --git a/js/src/jit/arm64/Lowering-arm64.cpp b/js/src/jit/arm64/Lowering-arm64.cpp @@ -363,7 +363,7 @@ void LIRGeneratorARM64::lowerWasmBuiltinModI64(MWasmBuiltinModI64* mod) { void LIRGenerator::visitPowHalf(MPowHalf* ins) { MDefinition* input = ins->input(); MOZ_ASSERT(input->type() == MIRType::Double); - LPowHalfD* lir = new (alloc()) LPowHalfD(useRegister(input)); + LPowHalfD* lir = new (alloc()) LPowHalfD(useRegisterAtStart(input)); define(lir, ins); } diff --git a/js/src/jit/loong64/Lowering-loong64.cpp b/js/src/jit/loong64/Lowering-loong64.cpp @@ -561,7 +561,7 @@ void LIRGenerator::visitPowHalf(MPowHalf* ins) { MDefinition* input = ins->input(); MOZ_ASSERT(input->type() == MIRType::Double); LPowHalfD* lir = new (alloc()) LPowHalfD(useRegisterAtStart(input)); - defineReuseInput(lir, ins, 0); + define(lir, ins); } void LIRGenerator::visitExtendInt32ToInt64(MExtendInt32ToInt64* ins) { diff --git a/js/src/jit/mips-shared/Lowering-mips-shared.cpp b/js/src/jit/mips-shared/Lowering-mips-shared.cpp @@ -269,7 +269,7 @@ void LIRGenerator::visitPowHalf(MPowHalf* ins) { MDefinition* input = ins->input(); MOZ_ASSERT(input->type() == MIRType::Double); LPowHalfD* lir = new (alloc()) LPowHalfD(useRegisterAtStart(input)); - defineReuseInput(lir, ins, 0); + define(lir, ins); } void LIRGeneratorMIPSShared::lowerWasmSelectI(MWasmSelect* select) { diff --git a/js/src/jit/riscv64/Lowering-riscv64.cpp b/js/src/jit/riscv64/Lowering-riscv64.cpp @@ -561,7 +561,7 @@ void LIRGenerator::visitPowHalf(MPowHalf* ins) { MDefinition* input = ins->input(); MOZ_ASSERT(input->type() == MIRType::Double); LPowHalfD* lir = new (alloc()) LPowHalfD(useRegisterAtStart(input)); - defineReuseInput(lir, ins, 0); + define(lir, ins); } void LIRGenerator::visitExtendInt32ToInt64(MExtendInt32ToInt64* ins) {