Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (225359 => 225360)
--- trunk/Source/_javascript_Core/ChangeLog 2017-11-30 23:17:34 UTC (rev 225359)
+++ trunk/Source/_javascript_Core/ChangeLog 2017-11-30 23:22:18 UTC (rev 225360)
@@ -1,3 +1,35 @@
+2017-11-29 Yusuke Suzuki <utatane....@gmail.com>
+
+ [JSC] Use getEffectiveAddress more in JSC
+ https://bugs.webkit.org/show_bug.cgi?id=180154
+
+ Reviewed by Mark Lam.
+
+ We can use MacroAssembler::getEffectiveAddress for stack height calculation.
+ And we also add MacroAssembler::negPtr(src, dest) variation.
+
+ * assembler/MacroAssembler.h:
+ (JSC::MacroAssembler::negPtr):
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::neg32):
+ * assembler/MacroAssemblerARM64.h:
+ (JSC::MacroAssemblerARM64::neg32):
+ (JSC::MacroAssemblerARM64::neg64):
+ * assembler/MacroAssemblerARMv7.h:
+ (JSC::MacroAssemblerARMv7::neg32):
+ * assembler/MacroAssemblerMIPS.h:
+ (JSC::MacroAssemblerMIPS::neg32):
+ * assembler/MacroAssemblerX86Common.h:
+ (JSC::MacroAssemblerX86Common::neg32):
+ * assembler/MacroAssemblerX86_64.h:
+ (JSC::MacroAssemblerX86_64::neg64):
+ * dfg/DFGThunks.cpp:
+ (JSC::DFG::osrEntryThunkGenerator):
+ * ftl/FTLLowerDFGToB3.cpp:
+ (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargsSpread):
+ * jit/SetupVarargsFrame.cpp:
+ (JSC::emitSetVarargsFrame):
+
2017-11-30 Mark Lam <mark....@apple.com>
jsc shell's flashHeapAccess() should not do JS work after releasing access to the heap.
Modified: trunk/Source/_javascript_Core/assembler/MacroAssembler.h (225359 => 225360)
--- trunk/Source/_javascript_Core/assembler/MacroAssembler.h 2017-11-30 23:17:34 UTC (rev 225359)
+++ trunk/Source/_javascript_Core/assembler/MacroAssembler.h 2017-11-30 23:22:18 UTC (rev 225360)
@@ -597,6 +597,11 @@
neg32(dest);
}
+ void negPtr(RegisterID src, RegisterID dest)
+ {
+ neg32(src, dest);
+ }
+
void orPtr(RegisterID src, RegisterID dest)
{
or32(src, dest);
@@ -906,6 +911,11 @@
neg64(dest);
}
+ void negPtr(RegisterID src, RegisterID dest)
+ {
+ neg64(src, dest);
+ }
+
void orPtr(RegisterID src, RegisterID dest)
{
or64(src, dest);
Modified: trunk/Source/_javascript_Core/assembler/MacroAssemblerARM.h (225359 => 225360)
--- trunk/Source/_javascript_Core/assembler/MacroAssemblerARM.h 2017-11-30 23:17:34 UTC (rev 225359)
+++ trunk/Source/_javascript_Core/assembler/MacroAssemblerARM.h 2017-11-30 23:22:18 UTC (rev 225360)
@@ -224,6 +224,11 @@
m_assembler.rsbs(srcDest, srcDest, ARMAssembler::getOp2Byte(0));
}
+ void neg32(RegisterID src, RegisterID dest)
+ {
+ m_assembler.rsbs(dest, src, ARMAssembler::getOp2Byte(0));
+ }
+
void or32(RegisterID src, RegisterID dest)
{
m_assembler.orrs(dest, dest, src);
Modified: trunk/Source/_javascript_Core/assembler/MacroAssemblerARM64.h (225359 => 225360)
--- trunk/Source/_javascript_Core/assembler/MacroAssemblerARM64.h 2017-11-30 23:17:34 UTC (rev 225359)
+++ trunk/Source/_javascript_Core/assembler/MacroAssemblerARM64.h 2017-11-30 23:22:18 UTC (rev 225360)
@@ -568,11 +568,21 @@
m_assembler.neg<32>(dest, dest);
}
+ void neg32(RegisterID src, RegisterID dest)
+ {
+ m_assembler.neg<32>(dest, src);
+ }
+
void neg64(RegisterID dest)
{
m_assembler.neg<64>(dest, dest);
}
+ void neg64(RegisterID src, RegisterID dest)
+ {
+ m_assembler.neg<64>(dest, src);
+ }
+
void or32(RegisterID src, RegisterID dest)
{
or32(dest, src, dest);
Modified: trunk/Source/_javascript_Core/assembler/MacroAssemblerARMv7.h (225359 => 225360)
--- trunk/Source/_javascript_Core/assembler/MacroAssemblerARMv7.h 2017-11-30 23:17:34 UTC (rev 225359)
+++ trunk/Source/_javascript_Core/assembler/MacroAssemblerARMv7.h 2017-11-30 23:22:18 UTC (rev 225360)
@@ -348,6 +348,11 @@
m_assembler.neg(srcDest, srcDest);
}
+ void neg32(RegisterID src, RegisterID dest)
+ {
+ m_assembler.neg(dest, src);
+ }
+
void or32(RegisterID src, RegisterID dest)
{
m_assembler.orr(dest, dest, src);
Modified: trunk/Source/_javascript_Core/assembler/MacroAssemblerMIPS.h (225359 => 225360)
--- trunk/Source/_javascript_Core/assembler/MacroAssemblerMIPS.h 2017-11-30 23:17:34 UTC (rev 225359)
+++ trunk/Source/_javascript_Core/assembler/MacroAssemblerMIPS.h 2017-11-30 23:22:18 UTC (rev 225360)
@@ -384,6 +384,11 @@
m_assembler.subu(srcDest, MIPSRegisters::zero, srcDest);
}
+ void neg32(RegisterID src, RegisterID dest)
+ {
+ m_assembler.subu(dest, MIPSRegisters::zero, src);
+ }
+
void or32(RegisterID src, RegisterID dest)
{
m_assembler.orInsn(dest, dest, src);
Modified: trunk/Source/_javascript_Core/assembler/MacroAssemblerX86Common.h (225359 => 225360)
--- trunk/Source/_javascript_Core/assembler/MacroAssemblerX86Common.h 2017-11-30 23:17:34 UTC (rev 225359)
+++ trunk/Source/_javascript_Core/assembler/MacroAssemblerX86Common.h 2017-11-30 23:22:18 UTC (rev 225360)
@@ -511,6 +511,12 @@
m_assembler.negl_r(srcDest);
}
+ void neg32(RegisterID src, RegisterID dest)
+ {
+ move32IfNeeded(src, dest);
+ m_assembler.negl_r(dest);
+ }
+
void neg32(Address srcDest)
{
m_assembler.negl_m(srcDest.offset, srcDest.base);
Modified: trunk/Source/_javascript_Core/assembler/MacroAssemblerX86_64.h (225359 => 225360)
--- trunk/Source/_javascript_Core/assembler/MacroAssemblerX86_64.h 2017-11-30 23:17:34 UTC (rev 225359)
+++ trunk/Source/_javascript_Core/assembler/MacroAssemblerX86_64.h 2017-11-30 23:22:18 UTC (rev 225360)
@@ -619,6 +619,12 @@
m_assembler.negq_r(dest);
}
+ void neg64(RegisterID src, RegisterID dest)
+ {
+ move(src, dest);
+ m_assembler.negq_r(dest);
+ }
+
void neg64(Address dest)
{
m_assembler.negq_m(dest.offset, dest.base);
Modified: trunk/Source/_javascript_Core/dfg/DFGThunks.cpp (225359 => 225360)
--- trunk/Source/_javascript_Core/dfg/DFGThunks.cpp 2017-11-30 23:17:34 UTC (rev 225359)
+++ trunk/Source/_javascript_Core/dfg/DFGThunks.cpp 2017-11-30 23:22:18 UTC (rev 225360)
@@ -123,15 +123,12 @@
jit.move(GPRInfo::returnValueGPR2, GPRInfo::regT0);
jit.loadPtr(MacroAssembler::Address(GPRInfo::regT0, offsetOfFrameSize), GPRInfo::regT1); // Load the frame size.
- jit.move(GPRInfo::regT1, GPRInfo::regT2);
- jit.lshiftPtr(MacroAssembler::Imm32(3), GPRInfo::regT2);
- jit.move(GPRInfo::callFrameRegister, MacroAssembler::stackPointerRegister);
- jit.subPtr(GPRInfo::regT2, MacroAssembler::stackPointerRegister);
+ jit.negPtr(GPRInfo::regT1, GPRInfo::regT2);
+ jit.getEffectiveAddress(MacroAssembler::BaseIndex(GPRInfo::callFrameRegister, GPRInfo::regT2, MacroAssembler::TimesEight), MacroAssembler::stackPointerRegister);
MacroAssembler::Label loop = jit.label();
jit.subPtr(MacroAssembler::TrustedImm32(1), GPRInfo::regT1);
- jit.move(GPRInfo::regT1, GPRInfo::regT4);
- jit.negPtr(GPRInfo::regT4);
+ jit.negPtr(GPRInfo::regT1, GPRInfo::regT4);
jit.load32(MacroAssembler::BaseIndex(GPRInfo::regT0, GPRInfo::regT1, MacroAssembler::TimesEight, offsetOfLocals), GPRInfo::regT2);
jit.load32(MacroAssembler::BaseIndex(GPRInfo::regT0, GPRInfo::regT1, MacroAssembler::TimesEight, offsetOfLocals + sizeof(int32_t)), GPRInfo::regT3);
jit.store32(GPRInfo::regT2, MacroAssembler::BaseIndex(GPRInfo::callFrameRegister, GPRInfo::regT4, MacroAssembler::TimesEight, -static_cast<intptr_t>(sizeof(Register))));
Modified: trunk/Source/_javascript_Core/ftl/FTLLowerDFGToB3.cpp (225359 => 225360)
--- trunk/Source/_javascript_Core/ftl/FTLLowerDFGToB3.cpp 2017-11-30 23:17:34 UTC (rev 225359)
+++ trunk/Source/_javascript_Core/ftl/FTLLowerDFGToB3.cpp 2017-11-30 23:22:18 UTC (rev 225360)
@@ -7233,8 +7233,7 @@
jit.addPtr(CCallHelpers::TrustedImm32(stackAlignmentRegisters() - 1), scratchGPR1);
jit.andPtr(CCallHelpers::TrustedImm32(~(stackAlignmentRegisters() - 1)), scratchGPR1);
jit.negPtr(scratchGPR1);
- jit.lshiftPtr(CCallHelpers::Imm32(3), scratchGPR1);
- jit.addPtr(GPRInfo::callFrameRegister, scratchGPR1);
+ jit.getEffectiveAddress(CCallHelpers::BaseIndex(GPRInfo::callFrameRegister, scratchGPR1, CCallHelpers::TimesEight), scratchGPR1);
// Before touching stack values, we should update the stack pointer to protect them from signal stack.
jit.addPtr(CCallHelpers::TrustedImm32(sizeof(CallerFrameAndPC)), scratchGPR1, CCallHelpers::stackPointerRegister);
Modified: trunk/Source/_javascript_Core/jit/SetupVarargsFrame.cpp (225359 => 225360)
--- trunk/Source/_javascript_Core/jit/SetupVarargsFrame.cpp 2017-11-30 23:17:34 UTC (rev 225359)
+++ trunk/Source/_javascript_Core/jit/SetupVarargsFrame.cpp 2017-11-30 23:22:18 UTC (rev 225360)
@@ -56,8 +56,7 @@
// Now resultGPR has the right stack frame offset in Register units.
jit.negPtr(resultGPR);
- jit.lshiftPtr(CCallHelpers::Imm32(3), resultGPR);
- jit.addPtr(GPRInfo::callFrameRegister, resultGPR);
+ jit.getEffectiveAddress(CCallHelpers::BaseIndex(GPRInfo::callFrameRegister, resultGPR, CCallHelpers::TimesEight), resultGPR);
}
static void emitSetupVarargsFrameFastCase(VM& vm, CCallHelpers& jit, GPRReg numUsedSlotsGPR, GPRReg scratchGPR1, GPRReg scratchGPR2, GPRReg scratchGPR3, ValueRecovery argCountRecovery, VirtualRegister firstArgumentReg, unsigned firstVarArgOffset, CCallHelpers::JumpList& slowCase)