Diff
Modified: branches/jsc-tailcall/Source/_javascript_Core/CMakeLists.txt (186819 => 186820)
--- branches/jsc-tailcall/Source/_javascript_Core/CMakeLists.txt 2015-07-14 21:56:14 UTC (rev 186819)
+++ branches/jsc-tailcall/Source/_javascript_Core/CMakeLists.txt 2015-07-14 22:06:57 UTC (rev 186820)
@@ -340,7 +340,6 @@
interpreter/StackVisitor.cpp
jit/AccessorCallJITStubRoutine.cpp
- jit/ArityCheckFailReturnThunks.cpp
jit/AssemblyHelpers.cpp
jit/BinarySwitch.cpp
jit/ExecutableAllocationFuzz.cpp
Modified: branches/jsc-tailcall/Source/_javascript_Core/ChangeLog (186819 => 186820)
--- branches/jsc-tailcall/Source/_javascript_Core/ChangeLog 2015-07-14 21:56:14 UTC (rev 186819)
+++ branches/jsc-tailcall/Source/_javascript_Core/ChangeLog 2015-07-14 22:06:57 UTC (rev 186820)
@@ -1,3 +1,32 @@
+2015-07-13 Basile Clement <[email protected]>
+
+ jsc-tailcall: Get rid of the arity fixup return thunk
+ https://bugs.webkit.org/show_bug.cgi?id=146847
+
+ Reviewed by Michael Saboff.
+
+ This removes the arity check fail return thunk since it is now the
+ caller's responsibility to restore the stack pointer.
+
+ * CMakeLists.txt:
+ * _javascript_Core.vcxproj/_javascript_Core.vcxproj:
+ * _javascript_Core.vcxproj/_javascript_Core.vcxproj.filters:
+ * _javascript_Core.xcodeproj/project.pbxproj:
+ * dfg/DFGJITCompiler.cpp:
+ * ftl/FTLLink.cpp:
+ * jit/ArityCheckFailReturnThunks.cpp: Removed.
+ * jit/ArityCheckFailReturnThunks.h: Removed.
+ * jit/JIT.cpp:
+ * jit/ThunkGenerators.cpp:
+ * llint/LowLevelInterpreter32_64.asm:
+ * llint/LowLevelInterpreter64.asm:
+ * runtime/CommonSlowPaths.cpp:
+ (JSC::setupArityCheckData):
+ * runtime/CommonSlowPaths.h:
+ * runtime/Options.h:
+ * runtime/VM.cpp:
+ * runtime/VM.h:
+
2015-07-14 Basile Clement <[email protected]>
jsc-tailcall: Temporarily disable FTL
Modified: branches/jsc-tailcall/Source/_javascript_Core/_javascript_Core.vcxproj/_javascript_Core.vcxproj (186819 => 186820)
--- branches/jsc-tailcall/Source/_javascript_Core/_javascript_Core.vcxproj/_javascript_Core.vcxproj 2015-07-14 21:56:14 UTC (rev 186819)
+++ branches/jsc-tailcall/Source/_javascript_Core/_javascript_Core.vcxproj/_javascript_Core.vcxproj 2015-07-14 22:06:57 UTC (rev 186820)
@@ -604,7 +604,6 @@
<ClCompile Include="..\interpreter\ProtoCallFrame.cpp" />
<ClCompile Include="..\interpreter\StackVisitor.cpp" />
<ClCompile Include="..\jit\AccessorCallJITStubRoutine.cpp" />
- <ClCompile Include="..\jit\ArityCheckFailReturnThunks.cpp" />
<ClCompile Include="..\jit\AssemblyHelpers.cpp" />
<ClCompile Include="..\jit\BinarySwitch.cpp" />
<ClCompile Include="..\jit\ExecutableAllocationFuzz.cpp" />
@@ -1367,7 +1366,6 @@
<ClInclude Include="..\interpreter\Register.h" />
<ClInclude Include="..\interpreter\StackVisitor.h" />
<ClInclude Include="..\jit\AccessorCallJITStubRoutine.h" />
- <ClInclude Include="..\jit\ArityCheckFailReturnThunks.h" />
<ClInclude Include="..\jit\AssemblyHelpers.h" />
<ClInclude Include="..\jit\BinarySwitch.h" />
<ClInclude Include="..\jit\CCallHelpers.h" />
Modified: branches/jsc-tailcall/Source/_javascript_Core/_javascript_Core.vcxproj/_javascript_Core.vcxproj.filters (186819 => 186820)
--- branches/jsc-tailcall/Source/_javascript_Core/_javascript_Core.vcxproj/_javascript_Core.vcxproj.filters 2015-07-14 21:56:14 UTC (rev 186819)
+++ branches/jsc-tailcall/Source/_javascript_Core/_javascript_Core.vcxproj/_javascript_Core.vcxproj.filters 2015-07-14 22:06:57 UTC (rev 186820)
@@ -1413,9 +1413,6 @@
<ClCompile Include="$(ConfigurationBuildDir)\obj$(PlatformArchitecture)\$(ProjectName)\DerivedSources\InspectorProtocolObjects.cpp">
<Filter>Derived Sources</Filter>
</ClCompile>
- <ClCompile Include="..\jit\ArityCheckFailReturnThunks.cpp">
- <Filter>jit</Filter>
- </ClCompile>
<ClCompile Include="..\jit\RegisterPreservationWrapperGenerator.cpp">
<Filter>jit</Filter>
</ClCompile>
@@ -3842,9 +3839,6 @@
<Filter>runtime</Filter>
</ClInclude>
<ClInclude Include="$(ConfigurationBuildDir)\obj$(PlatformArchitecture)\$(ProjectName)\DerivedSources\JSDataViewPrototype.lut.h" />
- <ClInclude Include="..\jit\ArityCheckFailReturnThunks.h">
- <Filter>jit</Filter>
- </ClInclude>
<ClInclude Include="..\jit\RegisterPreservationWrapperGenerator.h">
<Filter>jit</Filter>
</ClInclude>
Modified: branches/jsc-tailcall/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj (186819 => 186820)
--- branches/jsc-tailcall/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj 2015-07-14 21:56:14 UTC (rev 186819)
+++ branches/jsc-tailcall/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj 2015-07-14 22:06:57 UTC (rev 186820)
@@ -385,8 +385,6 @@
0F6B1CC41862C47800845D97 /* FTLRegisterAtOffset.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F6B1CC01862C47800845D97 /* FTLRegisterAtOffset.h */; settings = {ATTRIBUTES = (Private, ); }; };
0F6B1CC51862C47800845D97 /* FTLUnwindInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F6B1CC11862C47800845D97 /* FTLUnwindInfo.cpp */; };
0F6B1CC61862C47800845D97 /* FTLUnwindInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F6B1CC21862C47800845D97 /* FTLUnwindInfo.h */; settings = {ATTRIBUTES = (Private, ); }; };
- 0F6B1CC918641DF800845D97 /* ArityCheckFailReturnThunks.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F6B1CC718641DF800845D97 /* ArityCheckFailReturnThunks.cpp */; };
- 0F6B1CCA18641DF800845D97 /* ArityCheckFailReturnThunks.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F6B1CC818641DF800845D97 /* ArityCheckFailReturnThunks.h */; settings = {ATTRIBUTES = (Private, ); }; };
0F6C73501AC9F99F00BE1682 /* VariableWriteFireDetail.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F6C734E1AC9F99F00BE1682 /* VariableWriteFireDetail.cpp */; };
0F6C73511AC9F99F00BE1682 /* VariableWriteFireDetail.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F6C734F1AC9F99F00BE1682 /* VariableWriteFireDetail.h */; settings = {ATTRIBUTES = (Private, ); }; };
0F6E845A19030BEF00562741 /* DFGVariableAccessData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F6E845919030BEF00562741 /* DFGVariableAccessData.cpp */; };
@@ -2127,8 +2125,6 @@
0F6B1CC01862C47800845D97 /* FTLRegisterAtOffset.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FTLRegisterAtOffset.h; path = ftl/FTLRegisterAtOffset.h; sourceTree = "<group>"; };
0F6B1CC11862C47800845D97 /* FTLUnwindInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FTLUnwindInfo.cpp; path = ftl/FTLUnwindInfo.cpp; sourceTree = "<group>"; };
0F6B1CC21862C47800845D97 /* FTLUnwindInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FTLUnwindInfo.h; path = ftl/FTLUnwindInfo.h; sourceTree = "<group>"; };
- 0F6B1CC718641DF800845D97 /* ArityCheckFailReturnThunks.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ArityCheckFailReturnThunks.cpp; sourceTree = "<group>"; };
- 0F6B1CC818641DF800845D97 /* ArityCheckFailReturnThunks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ArityCheckFailReturnThunks.h; sourceTree = "<group>"; };
0F6C734E1AC9F99F00BE1682 /* VariableWriteFireDetail.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VariableWriteFireDetail.cpp; sourceTree = "<group>"; };
0F6C734F1AC9F99F00BE1682 /* VariableWriteFireDetail.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VariableWriteFireDetail.h; sourceTree = "<group>"; };
0F6E845919030BEF00562741 /* DFGVariableAccessData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGVariableAccessData.cpp; path = dfg/DFGVariableAccessData.cpp; sourceTree = "<group>"; };
@@ -3905,8 +3901,6 @@
0FF054F81AC35B4400E5BE57 /* ExecutableAllocationFuzz.h */,
0F7576D018E1FEE9002EF4CD /* AccessorCallJITStubRoutine.cpp */,
0F7576D118E1FEE9002EF4CD /* AccessorCallJITStubRoutine.h */,
- 0F6B1CC718641DF800845D97 /* ArityCheckFailReturnThunks.cpp */,
- 0F6B1CC818641DF800845D97 /* ArityCheckFailReturnThunks.h */,
0F24E53B17EA9F5900ABB217 /* AssemblyHelpers.cpp */,
0F24E53C17EA9F5900ABB217 /* AssemblyHelpers.h */,
0F64B26F1A784BAF006E4E66 /* BinarySwitch.cpp */,
@@ -5612,7 +5606,6 @@
BC18C3E50E16F5CD00B34460 /* APICast.h in Headers */,
BCF605140E203EF800B9A64D /* ArgList.h in Headers */,
2A88067919107D5500CB0BBB /* DFGFunctionWhitelist.h in Headers */,
- 0F6B1CCA18641DF800845D97 /* ArityCheckFailReturnThunks.h in Headers */,
0F6B1CB91861244C00845D97 /* ArityCheckMode.h in Headers */,
A1A009C11831A26E00CF8711 /* ARM64Assembler.h in Headers */,
0F898F321B27689F0083A33C /* DFGIntegerRangeOptimizationPhase.h in Headers */,
@@ -7013,7 +7006,6 @@
0FE050151AA9091100D33B33 /* DirectArgumentsOffset.cpp in Sources */,
0F55F0F414D1063900AC7649 /* AbstractPC.cpp in Sources */,
147F39BD107EC37600427A48 /* ArgList.cpp in Sources */,
- 0F6B1CC918641DF800845D97 /* ArityCheckFailReturnThunks.cpp in Sources */,
0F743BAA16B88249009F9277 /* ARM64Disassembler.cpp in Sources */,
86D3B2C310156BDE002865E7 /* ARMAssembler.cpp in Sources */,
65C02850171795E200351E35 /* ARMv7Disassembler.cpp in Sources */,
Modified: branches/jsc-tailcall/Source/_javascript_Core/dfg/DFGJITCompiler.cpp (186819 => 186820)
--- branches/jsc-tailcall/Source/_javascript_Core/dfg/DFGJITCompiler.cpp 2015-07-14 21:56:14 UTC (rev 186819)
+++ branches/jsc-tailcall/Source/_javascript_Core/dfg/DFGJITCompiler.cpp 2015-07-14 22:06:57 UTC (rev 186820)
@@ -28,7 +28,6 @@
#if ENABLE(DFG_JIT)
-#include "ArityCheckFailReturnThunks.h"
#include "CodeBlock.h"
#include "DFGFailedFinalizer.h"
#include "DFGInlineCacheWrapperInlines.h"
@@ -400,11 +399,6 @@
addPtr(TrustedImm32(maxFrameExtentForSlowPathCall), stackPointerRegister);
branchTest32(Zero, GPRInfo::returnValueGPR).linkTo(fromArityCheck, this);
emitStoreCodeOrigin(CodeOrigin(0));
- GPRReg thunkReg = GPRInfo::argumentGPR1;
- CodeLocationLabel* arityThunkLabels =
- m_vm->arityCheckFailReturnThunks->returnPCsFor(*m_vm, m_codeBlock->numParameters());
- move(TrustedImmPtr(arityThunkLabels), thunkReg);
- loadPtr(BaseIndex(thunkReg, GPRInfo::returnValueGPR, timesPtr()), thunkReg);
move(GPRInfo::returnValueGPR, GPRInfo::argumentGPR0);
m_callArityFixup = call();
jump(fromArityCheck);
Modified: branches/jsc-tailcall/Source/_javascript_Core/ftl/FTLLink.cpp (186819 => 186820)
--- branches/jsc-tailcall/Source/_javascript_Core/ftl/FTLLink.cpp 2015-07-14 21:56:14 UTC (rev 186819)
+++ branches/jsc-tailcall/Source/_javascript_Core/ftl/FTLLink.cpp 2015-07-14 22:06:57 UTC (rev 186820)
@@ -28,7 +28,6 @@
#if ENABLE(FTL_JIT)
-#include "ArityCheckFailReturnThunks.h"
#include "CCallHelpers.h"
#include "CodeBlockWithJITType.h"
#include "DFGCommon.h"
@@ -169,10 +168,6 @@
jit.emitFunctionEpilogue();
mainPathJumps.append(jit.branchTest32(CCallHelpers::Zero, GPRInfo::argumentGPR0));
jit.emitFunctionPrologue();
- CodeLocationLabel* arityThunkLabels =
- vm.arityCheckFailReturnThunks->returnPCsFor(vm, codeBlock->numParameters());
- jit.move(CCallHelpers::TrustedImmPtr(arityThunkLabels), GPRInfo::argumentGPR1);
- jit.loadPtr(CCallHelpers::BaseIndex(GPRInfo::argumentGPR1, GPRInfo::argumentGPR0, CCallHelpers::timesPtr()), GPRInfo::argumentGPR1);
CCallHelpers::Call callArityFixup = jit.call();
jit.emitFunctionEpilogue();
mainPathJumps.append(jit.jump());
Deleted: branches/jsc-tailcall/Source/_javascript_Core/jit/ArityCheckFailReturnThunks.cpp (186819 => 186820)
--- branches/jsc-tailcall/Source/_javascript_Core/jit/ArityCheckFailReturnThunks.cpp 2015-07-14 21:56:14 UTC (rev 186819)
+++ branches/jsc-tailcall/Source/_javascript_Core/jit/ArityCheckFailReturnThunks.cpp 2015-07-14 22:06:57 UTC (rev 186820)
@@ -1,135 +0,0 @@
-/*
- * Copyright (C) 2013 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "ArityCheckFailReturnThunks.h"
-
-#if ENABLE(JIT)
-
-#include "AssemblyHelpers.h"
-#include "LinkBuffer.h"
-#include "JSCInlines.h"
-#include "StackAlignment.h"
-
-namespace JSC {
-
-ArityCheckFailReturnThunks::ArityCheckFailReturnThunks()
- : m_nextSize(0)
-{
-}
-
-ArityCheckFailReturnThunks::~ArityCheckFailReturnThunks() { }
-
-CodeLocationLabel* ArityCheckFailReturnThunks::returnPCsFor(
- VM& vm, unsigned numExpectedArgumentsIncludingThis)
-{
- ASSERT(numExpectedArgumentsIncludingThis >= 1);
-
- numExpectedArgumentsIncludingThis = WTF::roundUpToMultipleOf(
- stackAlignmentRegisters(), numExpectedArgumentsIncludingThis);
-
- {
- ConcurrentJITLocker locker(m_lock);
- if (numExpectedArgumentsIncludingThis < m_nextSize)
- return m_returnPCArrays.last().get();
- }
-
- ASSERT(!isCompilationThread());
-
- numExpectedArgumentsIncludingThis = std::max(numExpectedArgumentsIncludingThis, m_nextSize * 2);
-
- AssemblyHelpers jit(&vm, 0);
-
- Vector<AssemblyHelpers::Label> labels;
-
- for (unsigned size = m_nextSize; size <= numExpectedArgumentsIncludingThis; size += stackAlignmentRegisters()) {
- labels.append(jit.label());
-
- jit.load32(
- AssemblyHelpers::Address(
- AssemblyHelpers::stackPointerRegister,
- (JSStack::ArgumentCount - JSStack::CallerFrameAndPCSize) * sizeof(Register) +
- PayloadOffset),
- GPRInfo::regT4);
- jit.add32(
- AssemblyHelpers::TrustedImm32(
- JSStack::CallFrameHeaderSize - JSStack::CallerFrameAndPCSize + size - 1),
- GPRInfo::regT4, GPRInfo::regT2);
- jit.lshift32(AssemblyHelpers::TrustedImm32(3), GPRInfo::regT2);
- jit.addPtr(AssemblyHelpers::stackPointerRegister, GPRInfo::regT2);
- jit.loadPtr(GPRInfo::regT2, GPRInfo::regT2);
-
- jit.addPtr(
- AssemblyHelpers::TrustedImm32(size * sizeof(Register)),
- AssemblyHelpers::stackPointerRegister);
-
- // Thunks like ours want to use the return PC to figure out where things
- // were saved. So, we pay it forward.
- jit.store32(
- GPRInfo::regT4,
- AssemblyHelpers::Address(
- AssemblyHelpers::stackPointerRegister,
- (JSStack::ArgumentCount - JSStack::CallerFrameAndPCSize) * sizeof(Register) +
- PayloadOffset));
-
- jit.jump(GPRInfo::regT2);
- }
-
- // Sadly, we cannot fail here because the LLInt may need us.
- LinkBuffer linkBuffer(vm, jit, GLOBAL_THUNK_ID, JITCompilationMustSucceed);
-
- unsigned returnPCsSize = numExpectedArgumentsIncludingThis / stackAlignmentRegisters() + 1;
- std::unique_ptr<CodeLocationLabel[]> returnPCs =
- std::make_unique<CodeLocationLabel[]>(returnPCsSize);
- for (unsigned size = 0; size <= numExpectedArgumentsIncludingThis; size += stackAlignmentRegisters()) {
- unsigned index = size / stackAlignmentRegisters();
- RELEASE_ASSERT(index < returnPCsSize);
- if (size < m_nextSize)
- returnPCs[index] = m_returnPCArrays.last()[index];
- else
- returnPCs[index] = linkBuffer.locationOf(labels[(size - m_nextSize) / stackAlignmentRegisters()]);
- }
-
- CodeLocationLabel* result = returnPCs.get();
-
- {
- ConcurrentJITLocker locker(m_lock);
- m_returnPCArrays.append(WTF::move(returnPCs));
- m_refs.append(FINALIZE_CODE(linkBuffer, ("Arity check fail return thunks for up to numArgs = %u", numExpectedArgumentsIncludingThis)));
- m_nextSize = numExpectedArgumentsIncludingThis + stackAlignmentRegisters();
- }
-
- return result;
-}
-
-CodeLocationLabel ArityCheckFailReturnThunks::returnPCFor(VM& vm, unsigned slotsToAdd)
-{
- return returnPCsFor(vm, slotsToAdd)[slotsToAdd / stackAlignmentRegisters()];
-}
-
-} // namespace JSC
-
-#endif // ENABLE(JIT)
-
Deleted: branches/jsc-tailcall/Source/_javascript_Core/jit/ArityCheckFailReturnThunks.h (186819 => 186820)
--- branches/jsc-tailcall/Source/_javascript_Core/jit/ArityCheckFailReturnThunks.h 2015-07-14 21:56:14 UTC (rev 186819)
+++ branches/jsc-tailcall/Source/_javascript_Core/jit/ArityCheckFailReturnThunks.h 2015-07-14 22:06:57 UTC (rev 186820)
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2013 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef ArityCheckFailReturnThunks_h
-#define ArityCheckFailReturnThunks_h
-
-#if ENABLE(JIT)
-
-#include "CodeLocation.h"
-#include "ConcurrentJITLock.h"
-#include <wtf/HashMap.h>
-
-namespace JSC {
-
-class ArityCheckFailReturnThunks {
-public:
- ArityCheckFailReturnThunks();
- ~ArityCheckFailReturnThunks();
-
- // Returns a pointer to an array of return labels indexed by missingArgs.
- CodeLocationLabel* returnPCsFor(VM&, unsigned numExpectedArgumentsIncludingThis);
-
- CodeLocationLabel returnPCFor(VM&, unsigned slotsToAdd);
-
-private:
- Vector<std::unique_ptr<CodeLocationLabel[]>> m_returnPCArrays;
- unsigned m_nextSize;
- Vector<MacroAssemblerCodeRef> m_refs;
- ConcurrentJITLock m_lock;
-};
-
-} // namespace JSC
-
-#endif // ENABLE(JIT)
-
-#endif // ArityCheckFailReturnThunks_h
-
Modified: branches/jsc-tailcall/Source/_javascript_Core/jit/JIT.cpp (186819 => 186820)
--- branches/jsc-tailcall/Source/_javascript_Core/jit/JIT.cpp 2015-07-14 21:56:14 UTC (rev 186819)
+++ branches/jsc-tailcall/Source/_javascript_Core/jit/JIT.cpp 2015-07-14 22:06:57 UTC (rev 186820)
@@ -29,7 +29,6 @@
#include "JIT.h"
-#include "ArityCheckFailReturnThunks.h"
#include "CodeBlock.h"
#include "CodeBlockWithJITType.h"
#include "DFGCapabilities.h"
@@ -586,11 +585,6 @@
if (maxFrameExtentForSlowPathCall)
addPtr(TrustedImm32(maxFrameExtentForSlowPathCall), stackPointerRegister);
branchTest32(Zero, returnValueGPR).linkTo(beginLabel, this);
- GPRReg thunkReg = GPRInfo::argumentGPR1;
- CodeLocationLabel* failThunkLabels =
- m_vm->arityCheckFailReturnThunks->returnPCsFor(*m_vm, m_codeBlock->numParameters());
- move(TrustedImmPtr(failThunkLabels), thunkReg);
- loadPtr(BaseIndex(thunkReg, returnValueGPR, timesPtr()), thunkReg);
move(returnValueGPR, GPRInfo::argumentGPR0);
emitNakedCall(m_vm->getCTIStub(arityFixupGenerator).code());
Modified: branches/jsc-tailcall/Source/_javascript_Core/jit/ThunkGenerators.cpp (186819 => 186820)
--- branches/jsc-tailcall/Source/_javascript_Core/jit/ThunkGenerators.cpp 2015-07-14 21:56:14 UTC (rev 186819)
+++ branches/jsc-tailcall/Source/_javascript_Core/jit/ThunkGenerators.cpp 2015-07-14 22:06:57 UTC (rev 186820)
@@ -438,13 +438,6 @@
jit.addPtr(JSInterfaceJIT::regT5, JSInterfaceJIT::callFrameRegister);
jit.addPtr(JSInterfaceJIT::regT5, JSInterfaceJIT::stackPointerRegister);
- // Save the original return PC.
- jit.loadPtr(JSInterfaceJIT::Address(JSInterfaceJIT::callFrameRegister, CallFrame::returnPCOffset()), GPRInfo::regT5);
- jit.storePtr(GPRInfo::regT5, MacroAssembler::BaseIndex(JSInterfaceJIT::regT3, JSInterfaceJIT::argumentGPR0, JSInterfaceJIT::TimesEight));
-
- // Install the new return PC.
- jit.storePtr(GPRInfo::argumentGPR1, JSInterfaceJIT::Address(JSInterfaceJIT::callFrameRegister, CallFrame::returnPCOffset()));
-
# if CPU(X86_64)
jit.push(JSInterfaceJIT::regT4);
# endif
@@ -486,13 +479,6 @@
jit.addPtr(JSInterfaceJIT::regT5, JSInterfaceJIT::callFrameRegister);
jit.addPtr(JSInterfaceJIT::regT5, JSInterfaceJIT::stackPointerRegister);
- // Save the original return PC.
- jit.loadPtr(JSInterfaceJIT::Address(JSInterfaceJIT::callFrameRegister, CallFrame::returnPCOffset()), GPRInfo::regT5);
- jit.storePtr(GPRInfo::regT5, MacroAssembler::BaseIndex(JSInterfaceJIT::regT3, JSInterfaceJIT::argumentGPR0, JSInterfaceJIT::TimesEight));
-
- // Install the new return PC.
- jit.storePtr(GPRInfo::argumentGPR1, JSInterfaceJIT::Address(JSInterfaceJIT::callFrameRegister, CallFrame::returnPCOffset()));
-
# if CPU(X86)
jit.push(JSInterfaceJIT::regT4);
# endif
Modified: branches/jsc-tailcall/Source/_javascript_Core/llint/LowLevelInterpreter32_64.asm (186819 => 186820)
--- branches/jsc-tailcall/Source/_javascript_Core/llint/LowLevelInterpreter32_64.asm 2015-07-14 21:56:14 UTC (rev 186819)
+++ branches/jsc-tailcall/Source/_javascript_Core/llint/LowLevelInterpreter32_64.asm 2015-07-14 22:06:57 UTC (rev 186820)
@@ -574,7 +574,6 @@
btpz t3, .proceedInline
loadp CommonSlowPaths::ArityCheckData::paddedStackSpace[r1], a0
- loadp CommonSlowPaths::ArityCheckData::returnPC[r1], a1
call t3
if ASSERT_ENABLED
loadp ReturnPC[cfr], t0
Modified: branches/jsc-tailcall/Source/_javascript_Core/llint/LowLevelInterpreter64.asm (186819 => 186820)
--- branches/jsc-tailcall/Source/_javascript_Core/llint/LowLevelInterpreter64.asm 2015-07-14 21:56:14 UTC (rev 186819)
+++ branches/jsc-tailcall/Source/_javascript_Core/llint/LowLevelInterpreter64.asm 2015-07-14 22:06:57 UTC (rev 186820)
@@ -498,7 +498,6 @@
btpz t3, .proceedInline
loadp CommonSlowPaths::ArityCheckData::paddedStackSpace[r1], a0
- loadp CommonSlowPaths::ArityCheckData::returnPC[r1], a1
call t3
if ASSERT_ENABLED
loadp ReturnPC[cfr], t0
Modified: branches/jsc-tailcall/Source/_javascript_Core/runtime/CommonSlowPaths.cpp (186819 => 186820)
--- branches/jsc-tailcall/Source/_javascript_Core/runtime/CommonSlowPaths.cpp 2015-07-14 21:56:14 UTC (rev 186819)
+++ branches/jsc-tailcall/Source/_javascript_Core/runtime/CommonSlowPaths.cpp 2015-07-14 22:06:57 UTC (rev 186820)
@@ -25,7 +25,6 @@
#include "config.h"
#include "CommonSlowPaths.h"
-#include "ArityCheckFailReturnThunks.h"
#include "ArrayConstructor.h"
#include "CallFrame.h"
#include "ClonedArguments.h"
@@ -167,15 +166,11 @@
CommonSlowPaths::ArityCheckData* result = vm.arityCheckData.get();
result->paddedStackSpace = slotsToAdd;
#if ENABLE(JIT)
- if (vm.canUseJIT()) {
+ if (vm.canUseJIT())
result->thunkToCall = vm.getCTIStub(arityFixupGenerator).code().executableAddress();
- result->returnPC = vm.arityCheckFailReturnThunks->returnPCFor(vm, slotsToAdd * stackAlignmentRegisters()).executableAddress();
- } else
+ else
#endif
- {
result->thunkToCall = 0;
- result->returnPC = 0;
- }
return result;
}
Modified: branches/jsc-tailcall/Source/_javascript_Core/runtime/CommonSlowPaths.h (186819 => 186820)
--- branches/jsc-tailcall/Source/_javascript_Core/runtime/CommonSlowPaths.h 2015-07-14 21:56:14 UTC (rev 186819)
+++ branches/jsc-tailcall/Source/_javascript_Core/runtime/CommonSlowPaths.h 2015-07-14 22:06:57 UTC (rev 186820)
@@ -49,7 +49,6 @@
struct ArityCheckData {
unsigned paddedStackSpace;
void* thunkToCall;
- void* returnPC;
};
ALWAYS_INLINE int arityCheckFor(ExecState* exec, JSStack* stack, CodeSpecializationKind kind)
Modified: branches/jsc-tailcall/Source/_javascript_Core/runtime/VM.cpp (186819 => 186820)
--- branches/jsc-tailcall/Source/_javascript_Core/runtime/VM.cpp 2015-07-14 21:56:14 UTC (rev 186819)
+++ branches/jsc-tailcall/Source/_javascript_Core/runtime/VM.cpp 2015-07-14 22:06:57 UTC (rev 186820)
@@ -30,7 +30,6 @@
#include "VM.h"
#include "ArgList.h"
-#include "ArityCheckFailReturnThunks.h"
#include "ArrayBufferNeuteringWatchpoint.h"
#include "BuiltinExecutables.h"
#include "CodeBlock.h"
@@ -246,7 +245,6 @@
#if ENABLE(JIT)
jitStubs = std::make_unique<JITThunks>();
- arityCheckFailReturnThunks = std::make_unique<ArityCheckFailReturnThunks>();
#endif
arityCheckData = std::make_unique<CommonSlowPaths::ArityCheckData>();
Modified: branches/jsc-tailcall/Source/_javascript_Core/runtime/VM.h (186819 => 186820)
--- branches/jsc-tailcall/Source/_javascript_Core/runtime/VM.h 2015-07-14 21:56:14 UTC (rev 186819)
+++ branches/jsc-tailcall/Source/_javascript_Core/runtime/VM.h 2015-07-14 22:06:57 UTC (rev 186820)
@@ -71,7 +71,6 @@
namespace JSC {
-class ArityCheckFailReturnThunks;
class BuiltinExecutables;
class CodeBlock;
class CodeCache;
@@ -339,7 +338,6 @@
}
NativeExecutable* getHostFunction(NativeFunction, Intrinsic);
- std::unique_ptr<ArityCheckFailReturnThunks> arityCheckFailReturnThunks;
#endif // ENABLE(JIT)
std::unique_ptr<CommonSlowPaths::ArityCheckData> arityCheckData;
#if ENABLE(FTL_JIT)