tor-browser

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

commit b9530ae96899ace81863a9b30306a57634a27cde
parent 6276b3a03fb6aec4665902c8584f52491190a12f
Author: André Bargull <andre.bargull@gmail.com>
Date:   Thu, 23 Oct 2025 09:56:08 +0000

Bug 1995492: Handle BaseIndex offset in some riscv64 MacroAssembler methods. r=spidermonkey-reviewers,iain

These methods are probably currently always called with `index` being zero.

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

Diffstat:
Mjs/src/jit/riscv64/MacroAssembler-riscv64.cpp | 10++++------
Mjs/src/jit/riscv64/MacroAssembler-riscv64.h | 4++--
2 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/js/src/jit/riscv64/MacroAssembler-riscv64.cpp b/js/src/jit/riscv64/MacroAssembler-riscv64.cpp @@ -1190,16 +1190,14 @@ FaultingCodeOffset MacroAssemblerRiscv64::ma_store( Imm32 imm, const BaseIndex& dest, LoadStoreSize size, LoadStoreExtension extension) { UseScratchRegisterScope temps(this); - Register scratch = temps.Acquire(); + Register address = temps.Acquire(); - // Make sure that scratch contains absolute address so that - // offset is 0. computeScaledAddress(dest, address); - // Scrach register is free now, use it for loading imm value + Register scratch = temps.Acquire(); ma_li(scratch, imm); - return ma_store(scratch, Address(address, 0), size, extension); + return ma_store(scratch, Address(address, dest.offset), size, extension); } FaultingCodeOffset MacroAssemblerRiscv64::ma_store( @@ -2156,11 +2154,11 @@ void MacroAssemblerRiscv64Compat::storeValue(const Value& val, Address dest) { void MacroAssemblerRiscv64Compat::storeValue(const Value& val, BaseIndex dest) { UseScratchRegisterScope temps(this); Register scratch = temps.Acquire(); - Register scratch2 = temps.Acquire(); computeScaledAddress(dest, scratch); int32_t offset = dest.offset; if (!is_int12(offset)) { + Register scratch2 = temps.Acquire(); ma_li(scratch2, Imm32(offset)); add(scratch, scratch, scratch2); offset = 0; diff --git a/js/src/jit/riscv64/MacroAssembler-riscv64.h b/js/src/jit/riscv64/MacroAssembler-riscv64.h @@ -1123,7 +1123,7 @@ class MacroAssemblerRiscv64Compat : public MacroAssemblerRiscv64 { FaultingCodeOffset loadDouble(const BaseIndex& src, FloatRegister dest) { UseScratchRegisterScope temps(this); Register scratch = temps.Acquire(); - computeScaledAddress(src, scratch); + computeEffectiveAddress(src, scratch); FaultingCodeOffset fco = FaultingCodeOffset(currentOffset()); fld(dest, scratch, 0); return fco; @@ -1136,7 +1136,7 @@ class MacroAssemblerRiscv64Compat : public MacroAssemblerRiscv64 { FaultingCodeOffset loadFloat32(const BaseIndex& src, FloatRegister dest) { UseScratchRegisterScope temps(this); Register scratch = temps.Acquire(); - computeScaledAddress(src, scratch); + computeEffectiveAddress(src, scratch); FaultingCodeOffset fco = FaultingCodeOffset(currentOffset()); flw(dest, scratch, 0); return fco;