Issue #3049 - loongarch64: fix JIT value boxing and unboxing

This commit is contained in:
Basilisk-Dev 2026-04-25 11:50:42 -04:00 committed by wuggy
commit 95c0370fb0
2 changed files with 6 additions and 6 deletions

View file

@ -3995,7 +3995,8 @@ void MacroAssemblerLOONGARCH64Compat::tagValue(JSValueType type, Register payloa
as_or(scratch, payload, zero);
payload = scratch;
}
ma_li(dest.valueReg(), ImmWord(JSVAL_TYPE_TO_SHIFTED_TAG(type)));
ma_li(dest.valueReg(), Imm32(int32_t(JSVAL_TYPE_TO_TAG(type))));
as_slli_d(dest.valueReg(), dest.valueReg(), JSVAL_TAG_SHIFT);
if (type == JSVAL_TYPE_INT32 || type == JSVAL_TYPE_BOOLEAN) {
as_bstrins_d(dest.valueReg(), payload, 31, 0);
} else {

View file

@ -864,10 +864,8 @@ class MacroAssemblerLOONGARCH64Compat : public MacroAssemblerLOONGARCH64 {
as_slli_w(dest, src, 0);
return;
}
ScratchRegisterScope scratch(asMasm());
MOZ_ASSERT(scratch != src);
mov(ImmWord(JSVAL_TYPE_TO_SHIFTED_TAG(type)), scratch);
as_xor(dest, src, scratch);
as_bstrpick_d(dest, src, JSVAL_TAG_SHIFT - 1, 0);
}
template <typename T>
@ -1089,7 +1087,8 @@ class MacroAssemblerLOONGARCH64Compat : public MacroAssemblerLOONGARCH64 {
bind(&upper32BitsSignExtended);
}
#endif
ma_li(dest, ImmWord(JSVAL_TYPE_TO_SHIFTED_TAG(type)));
ma_li(dest, Imm32(int32_t(JSVAL_TYPE_TO_TAG(type))));
as_slli_d(dest, dest, JSVAL_TAG_SHIFT);
if (type == JSVAL_TYPE_INT32 || type == JSVAL_TYPE_BOOLEAN) {
as_bstrins_d(dest, src, 31, 0);
} else {