mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-07 00:08:39 +09:00
Issue #3049 - loongarch64: fix scaled JIT memory addressing
This commit is contained in:
parent
bc45dc267d
commit
df4de67d30
2 changed files with 23 additions and 23 deletions
|
|
@ -1056,30 +1056,30 @@ BufferOffset AssemblerLOONGARCH64::as_stx_d(Register rd, Register rj, Register r
|
|||
|
||||
BufferOffset AssemblerLOONGARCH64::as_ldptr_w(Register rd, Register rj,
|
||||
int32_t si14) {
|
||||
MOZ_ASSERT(is_intN(si14, 14) && ((si14 & 0x3) == 0));
|
||||
MOZ_ASSERT(is_intN(si14, 16) && ((si14 & 0x3) == 0));
|
||||
spew("ldptr_w %3s,%3s,0x%x", rd.name(), rj.name(), si14);
|
||||
return writeInst(InstImm(op_ldptr_w, si14, rj, rd, 14).encode());
|
||||
return writeInst(InstImm(op_ldptr_w, si14 >> 2, rj, rd, 14).encode());
|
||||
}
|
||||
|
||||
BufferOffset AssemblerLOONGARCH64::as_ldptr_d(Register rd, Register rj,
|
||||
int32_t si14) {
|
||||
MOZ_ASSERT(is_intN(si14, 14) && ((si14 & 0x3) == 0));
|
||||
MOZ_ASSERT(is_intN(si14, 16) && ((si14 & 0x3) == 0));
|
||||
spew("ldptr_d %3s,%3s,0x%x", rd.name(), rj.name(), si14);
|
||||
return writeInst(InstImm(op_ldptr_d, si14, rj, rd, 14).encode());
|
||||
return writeInst(InstImm(op_ldptr_d, si14 >> 2, rj, rd, 14).encode());
|
||||
}
|
||||
|
||||
BufferOffset AssemblerLOONGARCH64::as_stptr_w(Register rd, Register rj,
|
||||
int32_t si14) {
|
||||
MOZ_ASSERT(is_intN(si14, 14) && ((si14 & 0x3) == 0));
|
||||
MOZ_ASSERT(is_intN(si14, 16) && ((si14 & 0x3) == 0));
|
||||
spew("stptr_w %3s,%3s,0x%x", rd.name(), rj.name(), si14);
|
||||
return writeInst(InstImm(op_stptr_w, si14, rj, rd, 14).encode());
|
||||
return writeInst(InstImm(op_stptr_w, si14 >> 2, rj, rd, 14).encode());
|
||||
}
|
||||
|
||||
BufferOffset AssemblerLOONGARCH64::as_stptr_d(Register rd, Register rj,
|
||||
int32_t si14) {
|
||||
MOZ_ASSERT(is_intN(si14, 14) && ((si14 & 0x3) == 0));
|
||||
MOZ_ASSERT(is_intN(si14, 16) && ((si14 & 0x3) == 0));
|
||||
spew("stptr_d %3s,%3s,0x%x", rd.name(), rj.name(), si14);
|
||||
return writeInst(InstImm(op_stptr_d, si14, rj, rd, 14).encode());
|
||||
return writeInst(InstImm(op_stptr_d, si14 >> 2, rj, rd, 14).encode());
|
||||
}
|
||||
|
||||
BufferOffset AssemblerLOONGARCH64::as_preld(int32_t hint, Register rj,
|
||||
|
|
@ -1308,26 +1308,26 @@ BufferOffset AssemblerLOONGARCH64::as_ammin_db_du(Register rd, Register rj,
|
|||
|
||||
BufferOffset AssemblerLOONGARCH64::as_ll_w(Register rd, Register rj, int32_t si14) {
|
||||
spew("ll_w %3s,%3s,0x%x", rd.name(), rj.name(), si14);
|
||||
MOZ_ASSERT(is_intN(si14, 14) && ((si14 & 0x3) == 0));
|
||||
return writeInst(InstImm(op_ll_w, si14, rj, rd, 14).encode());
|
||||
MOZ_ASSERT(is_intN(si14, 16) && ((si14 & 0x3) == 0));
|
||||
return writeInst(InstImm(op_ll_w, si14 >> 2, rj, rd, 14).encode());
|
||||
}
|
||||
|
||||
BufferOffset AssemblerLOONGARCH64::as_ll_d(Register rd, Register rj, int32_t si14) {
|
||||
spew("ll_d %3s,%3s,0x%x", rd.name(), rj.name(), si14);
|
||||
MOZ_ASSERT(is_intN(si14, 14) && ((si14 & 0x3) == 0));
|
||||
return writeInst(InstImm(op_ll_d, si14, rj, rd, 14).encode());
|
||||
MOZ_ASSERT(is_intN(si14, 16) && ((si14 & 0x3) == 0));
|
||||
return writeInst(InstImm(op_ll_d, si14 >> 2, rj, rd, 14).encode());
|
||||
}
|
||||
|
||||
BufferOffset AssemblerLOONGARCH64::as_sc_w(Register rd, Register rj, int32_t si14) {
|
||||
spew("sc_w %3s,%3s,0x%x", rd.name(), rj.name(), si14);
|
||||
MOZ_ASSERT(is_intN(si14, 14) && ((si14 & 0x3) == 0));
|
||||
return writeInst(InstImm(op_sc_w, si14, rj, rd, 14).encode());
|
||||
MOZ_ASSERT(is_intN(si14, 16) && ((si14 & 0x3) == 0));
|
||||
return writeInst(InstImm(op_sc_w, si14 >> 2, rj, rd, 14).encode());
|
||||
}
|
||||
|
||||
BufferOffset AssemblerLOONGARCH64::as_sc_d(Register rd, Register rj, int32_t si14) {
|
||||
spew("sc_d %3s,%3s,0x%x", rd.name(), rj.name(), si14);
|
||||
MOZ_ASSERT(is_intN(si14, 14) && ((si14 & 0x3) == 0));
|
||||
return writeInst(InstImm(op_sc_d, si14, rj, rd, 14).encode());
|
||||
MOZ_ASSERT(is_intN(si14, 16) && ((si14 & 0x3) == 0));
|
||||
return writeInst(InstImm(op_sc_d, si14 >> 2, rj, rd, 14).encode());
|
||||
}
|
||||
|
||||
// Barrier instructions
|
||||
|
|
|
|||
|
|
@ -943,7 +943,7 @@ void MacroAssemblerLOONGARCH64::ma_load(Register dest, Address address,
|
|||
if ((address.offset & 0x3) == 0 &&
|
||||
(size == SizeDouble ||
|
||||
(size == SizeWord && SignExtend == extension))) {
|
||||
if (!is_intN(address.offset, 14)) {
|
||||
if (!Imm16::IsInSignedRange(address.offset)) {
|
||||
ma_li(ScratchRegister, Imm32(address.offset));
|
||||
as_add_d(ScratchRegister, address.base, ScratchRegister);
|
||||
base = ScratchRegister;
|
||||
|
|
@ -1014,7 +1014,7 @@ void MacroAssemblerLOONGARCH64::ma_store(Register data, Address address,
|
|||
case SizeWord:
|
||||
case SizeDouble:
|
||||
if ((address.offset & 0x3) == 0) {
|
||||
if (!is_intN(address.offset, 14)) {
|
||||
if (!Imm16::IsInSignedRange(address.offset)) {
|
||||
ma_li(ScratchRegister, Imm32(address.offset));
|
||||
as_add_d(ScratchRegister, address.base, ScratchRegister);
|
||||
base = ScratchRegister;
|
||||
|
|
@ -1060,7 +1060,7 @@ void MacroAssemblerLOONGARCH64Compat::computeScaledAddress(const BaseIndex& addr
|
|||
|
||||
if (shift) {
|
||||
MOZ_ASSERT(shift <= 4);
|
||||
as_alsl_d(dest, index, base, shift);
|
||||
as_alsl_d(dest, index, base, shift - 1);
|
||||
} else {
|
||||
as_add_d(dest, base, index);
|
||||
}
|
||||
|
|
@ -3160,7 +3160,7 @@ void MacroAssemblerLOONGARCH64Compat::load32(const BaseIndex& address,
|
|||
ma_li(scratch, Imm32(offset));
|
||||
if (shift != 0) {
|
||||
MOZ_ASSERT(shift <= 4);
|
||||
as_alsl_d(scratch, index, scratch, shift);
|
||||
as_alsl_d(scratch, index, scratch, shift - 1);
|
||||
} else {
|
||||
as_add_d(scratch, index, scratch);
|
||||
}
|
||||
|
|
@ -3204,7 +3204,7 @@ void MacroAssemblerLOONGARCH64Compat::loadPtr(const BaseIndex& src, Register des
|
|||
ma_li(scratch, Imm32(offset));
|
||||
if (shift != 0) {
|
||||
MOZ_ASSERT(shift <= 4);
|
||||
as_alsl_d(scratch, index, scratch, shift);
|
||||
as_alsl_d(scratch, index, scratch, shift - 1);
|
||||
} else {
|
||||
as_add_d(scratch, index, scratch);
|
||||
}
|
||||
|
|
@ -3355,7 +3355,7 @@ void MacroAssemblerLOONGARCH64Compat::storePtr(Register src,
|
|||
if (shift == 0) {
|
||||
as_add_d(scratch, base, index);
|
||||
} else {
|
||||
as_alsl_d(scratch, index, base, shift);
|
||||
as_alsl_d(scratch, index, base, shift - 1);
|
||||
}
|
||||
as_st_d(src, scratch, offset);
|
||||
} else {
|
||||
|
|
@ -3364,7 +3364,7 @@ void MacroAssemblerLOONGARCH64Compat::storePtr(Register src,
|
|||
if (shift == 0) {
|
||||
as_add_d(scratch, scratch, index);
|
||||
} else {
|
||||
as_alsl_d(scratch, index, scratch, shift);
|
||||
as_alsl_d(scratch, index, scratch, shift - 1);
|
||||
}
|
||||
as_stx_d(src, base, scratch);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue