Diff
Modified: releases/WebKitGTK/webkit-2.12/Source/_javascript_Core/ChangeLog (198016 => 198017)
--- releases/WebKitGTK/webkit-2.12/Source/_javascript_Core/ChangeLog 2016-03-11 14:28:51 UTC (rev 198016)
+++ releases/WebKitGTK/webkit-2.12/Source/_javascript_Core/ChangeLog 2016-03-11 14:37:34 UTC (rev 198017)
@@ -1,3 +1,35 @@
+2016-03-07 Csaba Osztrogonác <[email protected]>
+
+ Fix the ARM build after r197687
+ https://bugs.webkit.org/show_bug.cgi?id=155128
+
+ Reviewed by Saam Barati.
+
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::moveZeroToDouble):
+
+2016-03-07 Benjamin Poulain <[email protected]>
+
+ [JSC] Improve how DFG zero Floating Point registers
+ https://bugs.webkit.org/show_bug.cgi?id=155096
+
+ Reviewed by Geoffrey Garen.
+
+ DFG had a weird way of zeroing a FPR:
+ -zero a GP.
+ -move that to a FP.
+
+ Filip added moveZeroToDouble() for B3. This patch
+ uses that in the lower tiers.
+
+ * assembler/MacroAssemblerARMv7.h:
+ (JSC::MacroAssemblerARMv7::moveZeroToDouble):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
+ * jit/ThunkGenerators.cpp:
+ (JSC::floorThunkGenerator):
+ (JSC::roundThunkGenerator):
+
2016-03-07 Andreas Kling <[email protected]>
REGRESSION (r197303): Web Inspector crashes web process when inspecting an element on TOT
Modified: releases/WebKitGTK/webkit-2.12/Source/_javascript_Core/assembler/MacroAssemblerARM.h (198016 => 198017)
--- releases/WebKitGTK/webkit-2.12/Source/_javascript_Core/assembler/MacroAssemblerARM.h 2016-03-11 14:28:51 UTC (rev 198016)
+++ releases/WebKitGTK/webkit-2.12/Source/_javascript_Core/assembler/MacroAssemblerARM.h 2016-03-11 14:37:34 UTC (rev 198017)
@@ -1201,6 +1201,12 @@
m_assembler.vmov_f64(dest, src);
}
+ void moveZeroToDouble(FPRegisterID reg)
+ {
+ static double zeroConstant = 0.;
+ loadDouble(TrustedImmPtr(&zeroConstant), reg);
+ }
+
void addDouble(FPRegisterID src, FPRegisterID dest)
{
m_assembler.vadd_f64(dest, dest, src);
Modified: releases/WebKitGTK/webkit-2.12/Source/_javascript_Core/assembler/MacroAssemblerARMv7.h (198016 => 198017)
--- releases/WebKitGTK/webkit-2.12/Source/_javascript_Core/assembler/MacroAssemblerARMv7.h 2016-03-11 14:28:51 UTC (rev 198016)
+++ releases/WebKitGTK/webkit-2.12/Source/_javascript_Core/assembler/MacroAssemblerARMv7.h 2016-03-11 14:37:34 UTC (rev 198017)
@@ -929,6 +929,12 @@
m_assembler.vmov(dest, src);
}
+ void moveZeroToDouble(FPRegisterID reg)
+ {
+ static double zeroConstant = 0.;
+ loadDouble(TrustedImmPtr(&zeroConstant), reg);
+ }
+
void loadDouble(TrustedImmPtr address, FPRegisterID dest)
{
move(address, addressTempRegister);
Modified: releases/WebKitGTK/webkit-2.12/Source/_javascript_Core/dfg/DFGSpeculativeJIT64.cpp (198016 => 198017)
--- releases/WebKitGTK/webkit-2.12/Source/_javascript_Core/dfg/DFGSpeculativeJIT64.cpp 2016-03-11 14:28:51 UTC (rev 198016)
+++ releases/WebKitGTK/webkit-2.12/Source/_javascript_Core/dfg/DFGSpeculativeJIT64.cpp 2016-03-11 14:37:34 UTC (rev 198017)
@@ -1133,13 +1133,17 @@
if (info.registerFormat() == DataFormatNone) {
if (edge->hasConstant()) {
- GPRReg gpr = allocate();
-
if (edge->isNumberConstant()) {
FPRReg fpr = fprAllocate();
- m_jit.move(MacroAssembler::Imm64(reinterpretDoubleToInt64(edge->asNumber())), gpr);
- m_jit.move64ToDouble(gpr, fpr);
- unlock(gpr);
+ int64_t doubleAsInt = reinterpretDoubleToInt64(edge->asNumber());
+ if (!doubleAsInt)
+ m_jit.moveZeroToDouble(fpr);
+ else {
+ GPRReg gpr = allocate();
+ m_jit.move(MacroAssembler::Imm64(doubleAsInt), gpr);
+ m_jit.move64ToDouble(gpr, fpr);
+ unlock(gpr);
+ }
m_fprs.retain(fpr, virtualRegister, SpillOrderDouble);
info.fillDouble(*m_stream, fpr);
Modified: releases/WebKitGTK/webkit-2.12/Source/_javascript_Core/jit/ThunkGenerators.cpp (198016 => 198017)
--- releases/WebKitGTK/webkit-2.12/Source/_javascript_Core/jit/ThunkGenerators.cpp 2016-03-11 14:28:51 UTC (rev 198016)
+++ releases/WebKitGTK/webkit-2.12/Source/_javascript_Core/jit/ThunkGenerators.cpp 2016-03-11 14:37:34 UTC (rev 198017)
@@ -774,7 +774,6 @@
static const double _oneConstant_ = 1.0;
static const double negativeHalfConstant = -0.5;
-static const double zeroConstant = 0.0;
static const double halfConstant = 0.5;
MacroAssemblerCodeRef floorThunkGenerator(VM* vm)
@@ -798,7 +797,7 @@
SpecializedThunkJIT::Jump intResult;
SpecializedThunkJIT::JumpList doubleResult;
if (jit.supportsFloatingPointTruncate()) {
- jit.loadDouble(MacroAssembler::TrustedImmPtr(&zeroConstant), SpecializedThunkJIT::fpRegT1);
+ jit.moveZeroToDouble(SpecializedThunkJIT::fpRegT1);
doubleResult.append(jit.branchDouble(MacroAssembler::DoubleEqual, SpecializedThunkJIT::fpRegT0, SpecializedThunkJIT::fpRegT1));
SpecializedThunkJIT::JumpList slowPath;
// Handle the negative doubles in the slow path for now.
@@ -854,7 +853,7 @@
SpecializedThunkJIT::Jump intResult;
SpecializedThunkJIT::JumpList doubleResult;
if (jit.supportsFloatingPointTruncate()) {
- jit.loadDouble(MacroAssembler::TrustedImmPtr(&zeroConstant), SpecializedThunkJIT::fpRegT1);
+ jit.moveZeroToDouble(SpecializedThunkJIT::fpRegT1);
doubleResult.append(jit.branchDouble(MacroAssembler::DoubleEqual, SpecializedThunkJIT::fpRegT0, SpecializedThunkJIT::fpRegT1));
SpecializedThunkJIT::JumpList slowPath;
// Handle the negative doubles in the slow path for now.