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:
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;