diff --git a/js/src/jit/loongarch64/MacroAssembler-loongarch64.cpp b/js/src/jit/loongarch64/MacroAssembler-loongarch64.cpp index c74909b907..3d961c9e35 100644 --- a/js/src/jit/loongarch64/MacroAssembler-loongarch64.cpp +++ b/js/src/jit/loongarch64/MacroAssembler-loongarch64.cpp @@ -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 { diff --git a/js/src/jit/loongarch64/MacroAssembler-loongarch64.h b/js/src/jit/loongarch64/MacroAssembler-loongarch64.h index af2a29de76..c2615cb459 100644 --- a/js/src/jit/loongarch64/MacroAssembler-loongarch64.h +++ b/js/src/jit/loongarch64/MacroAssembler-loongarch64.h @@ -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 @@ -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 {