mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-25 16:47:29 +09:00
Issue #3049 - Fix loongarch64 value decoding and exception tail
This commit is contained in:
parent
63a142a912
commit
cc49913ad9
2 changed files with 14 additions and 15 deletions
|
|
@ -2931,6 +2931,7 @@ void MacroAssemblerLOONGARCH64Compat::loadPtr(wasm::SymbolicAddress address,
|
||||||
void MacroAssemblerLOONGARCH64Compat::loadPrivate(const Address& address,
|
void MacroAssemblerLOONGARCH64Compat::loadPrivate(const Address& address,
|
||||||
Register dest) {
|
Register dest) {
|
||||||
loadPtr(address, dest);
|
loadPtr(address, dest);
|
||||||
|
as_slli_d(dest, dest, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MacroAssemblerLOONGARCH64Compat::store8(Imm32 imm, const Address& address) {
|
void MacroAssemblerLOONGARCH64Compat::store8(Imm32 imm, const Address& address) {
|
||||||
|
|
@ -3159,58 +3160,58 @@ void MacroAssemblerLOONGARCH64Compat::unboxDouble(const BaseIndex& src,
|
||||||
|
|
||||||
void MacroAssemblerLOONGARCH64Compat::unboxString(const ValueOperand& operand,
|
void MacroAssemblerLOONGARCH64Compat::unboxString(const ValueOperand& operand,
|
||||||
Register dest) {
|
Register dest) {
|
||||||
unboxNonDouble(operand, dest, JSVAL_TYPE_STRING);
|
unboxNonDouble(operand, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MacroAssemblerLOONGARCH64Compat::unboxString(Register src, Register dest) {
|
void MacroAssemblerLOONGARCH64Compat::unboxString(Register src, Register dest) {
|
||||||
unboxNonDouble(src, dest, JSVAL_TYPE_STRING);
|
as_bstrpick_d(dest, src, JSVAL_TAG_SHIFT - 1, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MacroAssemblerLOONGARCH64Compat::unboxString(const Address& src,
|
void MacroAssemblerLOONGARCH64Compat::unboxString(const Address& src,
|
||||||
Register dest) {
|
Register dest) {
|
||||||
unboxNonDouble(src, dest, JSVAL_TYPE_STRING);
|
unboxNonDouble(src, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MacroAssemblerLOONGARCH64Compat::unboxSymbol(const ValueOperand& operand,
|
void MacroAssemblerLOONGARCH64Compat::unboxSymbol(const ValueOperand& operand,
|
||||||
Register dest) {
|
Register dest) {
|
||||||
unboxNonDouble(operand, dest, JSVAL_TYPE_SYMBOL);
|
unboxNonDouble(operand, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MacroAssemblerLOONGARCH64Compat::unboxSymbol(Register src, Register dest) {
|
void MacroAssemblerLOONGARCH64Compat::unboxSymbol(Register src, Register dest) {
|
||||||
unboxNonDouble(src, dest, JSVAL_TYPE_SYMBOL);
|
as_bstrpick_d(dest, src, JSVAL_TAG_SHIFT - 1, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MacroAssemblerLOONGARCH64Compat::unboxSymbol(const Address& src,
|
void MacroAssemblerLOONGARCH64Compat::unboxSymbol(const Address& src,
|
||||||
Register dest) {
|
Register dest) {
|
||||||
unboxNonDouble(src, dest, JSVAL_TYPE_SYMBOL);
|
unboxNonDouble(src, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MacroAssemblerLOONGARCH64Compat::unboxBigInt(const ValueOperand& operand,
|
void MacroAssemblerLOONGARCH64Compat::unboxBigInt(const ValueOperand& operand,
|
||||||
Register dest) {
|
Register dest) {
|
||||||
unboxNonDouble(operand, dest, JSVAL_TYPE_BIGINT);
|
unboxNonDouble(operand, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MacroAssemblerLOONGARCH64Compat::unboxBigInt(Register src, Register dest) {
|
void MacroAssemblerLOONGARCH64Compat::unboxBigInt(Register src, Register dest) {
|
||||||
unboxNonDouble(src, dest, JSVAL_TYPE_BIGINT);
|
as_bstrpick_d(dest, src, JSVAL_TAG_SHIFT - 1, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MacroAssemblerLOONGARCH64Compat::unboxBigInt(const Address& src,
|
void MacroAssemblerLOONGARCH64Compat::unboxBigInt(const Address& src,
|
||||||
Register dest) {
|
Register dest) {
|
||||||
unboxNonDouble(src, dest, JSVAL_TYPE_BIGINT);
|
unboxNonDouble(src, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MacroAssemblerLOONGARCH64Compat::unboxObject(const ValueOperand& src,
|
void MacroAssemblerLOONGARCH64Compat::unboxObject(const ValueOperand& src,
|
||||||
Register dest) {
|
Register dest) {
|
||||||
unboxNonDouble(src, dest, JSVAL_TYPE_OBJECT);
|
unboxNonDouble(src, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MacroAssemblerLOONGARCH64Compat::unboxObject(Register src, Register dest) {
|
void MacroAssemblerLOONGARCH64Compat::unboxObject(Register src, Register dest) {
|
||||||
unboxNonDouble(src, dest, JSVAL_TYPE_OBJECT);
|
as_bstrpick_d(dest, src, JSVAL_TAG_SHIFT - 1, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MacroAssemblerLOONGARCH64Compat::unboxObject(const Address& src,
|
void MacroAssemblerLOONGARCH64Compat::unboxObject(const Address& src,
|
||||||
Register dest) {
|
Register dest) {
|
||||||
unboxNonDouble(src, dest, JSVAL_TYPE_OBJECT);
|
unboxNonDouble(src, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MacroAssemblerLOONGARCH64Compat::unboxNonDouble(const ValueOperand& operand,
|
void MacroAssemblerLOONGARCH64Compat::unboxNonDouble(const ValueOperand& operand,
|
||||||
|
|
@ -3513,8 +3514,6 @@ void MacroAssemblerLOONGARCH64Compat::handleFailureWithHandlerTail(void* handler
|
||||||
asMasm().moveValue(MagicValue(JS_ION_ERROR), JSReturnOperand);
|
asMasm().moveValue(MagicValue(JS_ION_ERROR), JSReturnOperand);
|
||||||
loadPtr(Address(StackPointer, offsetof(ResumeFromException, stackPointer)),
|
loadPtr(Address(StackPointer, offsetof(ResumeFromException, stackPointer)),
|
||||||
StackPointer);
|
StackPointer);
|
||||||
loadPtr(Address(StackPointer, 0), ra);
|
|
||||||
asMasm().addPtr(Imm32(sizeof(intptr_t)), StackPointer);
|
|
||||||
ret();
|
ret();
|
||||||
|
|
||||||
// If we found a catch handler, this must be a baseline frame. Restore
|
// If we found a catch handler, this must be a baseline frame. Restore
|
||||||
|
|
|
||||||
|
|
@ -669,7 +669,7 @@ class MacroAssemblerLOONGARCH64Compat : public MacroAssemblerLOONGARCH64 {
|
||||||
void unboxObject(Register src, Register dest);
|
void unboxObject(Register src, Register dest);
|
||||||
void unboxObject(const Address& src, Register dest);
|
void unboxObject(const Address& src, Register dest);
|
||||||
void unboxObject(const BaseIndex& src, Register dest) {
|
void unboxObject(const BaseIndex& src, Register dest) {
|
||||||
unboxNonDouble(src, dest, JSVAL_TYPE_OBJECT);
|
unboxNonDouble(src, dest);
|
||||||
}
|
}
|
||||||
void unboxValue(const ValueOperand& src, AnyRegister dest);
|
void unboxValue(const ValueOperand& src, AnyRegister dest);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue