Modified: trunk/Source/_javascript_Core/ChangeLog (292456 => 292457)
--- trunk/Source/_javascript_Core/ChangeLog 2022-04-06 10:05:05 UTC (rev 292456)
+++ trunk/Source/_javascript_Core/ChangeLog 2022-04-06 10:13:31 UTC (rev 292457)
@@ -1,3 +1,21 @@
+2022-04-06 Xan Lopez <[email protected]>
+
+ [JSC] Add DoNotHaveTagRegisters mode to unboxDouble
+ https://bugs.webkit.org/show_bug.cgi?id=238018
+
+ Reviewed by Yusuke Suzuki.
+
+ Wasm cannot use unboxDouble as-is because
+ GPRInfo::numberTagRegister is not available. Add a
+ DoNotHaveTagRegister mode so we can get rid of some duplicated
+ code.
+
+ * jit/AssemblyHelpers.h:
+ (JSC::AssemblyHelpers::unboxDoubleWithoutAssertions):
+ (JSC::AssemblyHelpers::unboxDouble):
+ * wasm/js/WasmToJS.cpp:
+ (JSC::Wasm::wasmToJS):
+
2022-04-06 Adrian Perez de Castro <[email protected]>
[JSC] Nested includes do not change offlineasm hash output
Modified: trunk/Source/_javascript_Core/jit/AssemblyHelpers.h (292456 => 292457)
--- trunk/Source/_javascript_Core/jit/AssemblyHelpers.h 2022-04-06 10:05:05 UTC (rev 292456)
+++ trunk/Source/_javascript_Core/jit/AssemblyHelpers.h 2022-04-06 10:13:31 UTC (rev 292457)
@@ -1369,16 +1369,20 @@
}
return gpr;
}
- FPRReg unboxDoubleWithoutAssertions(GPRReg gpr, GPRReg resultGPR, FPRReg fpr)
+ FPRReg unboxDoubleWithoutAssertions(GPRReg gpr, GPRReg resultGPR, FPRReg fpr, TagRegistersMode mode = HaveTagRegisters)
{
- add64(GPRInfo::numberTagRegister, gpr, resultGPR);
+ if (mode == DoNotHaveTagRegisters) {
+ move(TrustedImm64(JSValue::NumberTag), resultGPR);
+ add64(gpr, resultGPR);
+ } else
+ add64(GPRInfo::numberTagRegister, gpr, resultGPR);
move64ToDouble(resultGPR, fpr);
return fpr;
}
- FPRReg unboxDouble(GPRReg gpr, GPRReg resultGPR, FPRReg fpr)
+ FPRReg unboxDouble(GPRReg gpr, GPRReg resultGPR, FPRReg fpr, TagRegistersMode mode = HaveTagRegisters)
{
jitAssertIsJSDouble(gpr);
- return unboxDoubleWithoutAssertions(gpr, resultGPR, fpr);
+ return unboxDoubleWithoutAssertions(gpr, resultGPR, fpr, mode);
}
void boxDouble(FPRReg fpr, JSValueRegs regs, TagRegistersMode mode = HaveTagRegisters)
Modified: trunk/Source/_javascript_Core/wasm/js/WasmToJS.cpp (292456 => 292457)
--- trunk/Source/_javascript_Core/wasm/js/WasmToJS.cpp 2022-04-06 10:05:05 UTC (rev 292456)
+++ trunk/Source/_javascript_Core/wasm/js/WasmToJS.cpp 2022-04-06 10:13:31 UTC (rev 292457)
@@ -328,9 +328,7 @@
done.append(jit.jump());
isDouble.link(&jit);
- jit.move(JIT::TrustedImm64(JSValue::NumberTag), GPRInfo::returnValueGPR2);
- jit.add64(GPRInfo::returnValueGPR2, GPRInfo::returnValueGPR);
- jit.move64ToDouble(GPRInfo::returnValueGPR, dest);
+ jit.unboxDoubleWithoutAssertions(GPRInfo::returnValueGPR, GPRInfo::returnValueGPR2, dest, DoNotHaveTagRegisters);
jit.convertDoubleToFloat(dest, dest);
done.append(jit.jump());
@@ -359,9 +357,7 @@
done.append(jit.jump());
isDouble.link(&jit);
- jit.move(JIT::TrustedImm64(JSValue::NumberTag), GPRInfo::returnValueGPR2);
- jit.add64(GPRInfo::returnValueGPR2, GPRInfo::returnValueGPR);
- jit.move64ToDouble(GPRInfo::returnValueGPR, dest);
+ jit.unboxDoubleWithoutAssertions(GPRInfo::returnValueGPR, GPRInfo::returnValueGPR2, dest, DoNotHaveTagRegisters);
done.append(jit.jump());
notANumber.link(&jit);