haikuwebkit/Source/JavaScriptCore/ftl/FTLSlowPathCall.h

167 lines
6.4 KiB
C
Raw Permalink Normal View History

FTL should be able to do some simple inline caches using LLVM patchpoints https://bugs.webkit.org/show_bug.cgi?id=123164 Source/JavaScriptCore: Reviewed by Mark Hahnenberg. This implements GetById inline caches in the FTL using llvm.webkit.patchpoint. The idea is that we ask LLVM for a nop slide the size of a GetById inline cache and then fill in the code after LLVM compilation is complete. For now, we just use the system calling convention for the arguments and return. We also still make some assumptions about registers that aren't correct. But, most of the scaffolding is there and this will successfully patch an inline cache. * JavaScriptCore.xcodeproj/project.pbxproj: * assembler/AbstractMacroAssembler.h: * assembler/LinkBuffer.cpp: (JSC::LinkBuffer::finalizeCodeWithoutDisassembly): (JSC::LinkBuffer::linkCode): (JSC::LinkBuffer::allocate): * assembler/LinkBuffer.h: (JSC::LinkBuffer::LinkBuffer): (JSC::LinkBuffer::link): * ftl/FTLAbbreviations.h: (JSC::FTL::constNull): (JSC::FTL::buildCall): * ftl/FTLCapabilities.cpp: (JSC::FTL::canCompile): * ftl/FTLCompile.cpp: (JSC::FTL::fixFunctionBasedOnStackMaps): * ftl/FTLInlineCacheDescriptor.h: Added. (JSC::FTL::InlineCacheDescriptor::InlineCacheDescriptor): (JSC::FTL::GetByIdDescriptor::GetByIdDescriptor): (JSC::FTL::GetByIdDescriptor::stackmapID): (JSC::FTL::GetByIdDescriptor::codeOrigin): (JSC::FTL::GetByIdDescriptor::uid): * ftl/FTLInlineCacheSize.cpp: Added. (JSC::FTL::sizeOfGetById): (JSC::FTL::sizeOfPutById): * ftl/FTLInlineCacheSize.h: Added. * ftl/FTLIntrinsicRepository.h: * ftl/FTLJITFinalizer.cpp: (JSC::FTL::JITFinalizer::finalizeFunction): * ftl/FTLJITFinalizer.h: * ftl/FTLLocation.cpp: (JSC::FTL::Location::directGPR): * ftl/FTLLocation.h: * ftl/FTLLowerDFGToLLVM.cpp: (JSC::FTL::LowerDFGToLLVM::compileGetById): * ftl/FTLOutput.h: (JSC::FTL::Output::call): * ftl/FTLSlowPathCall.cpp: Added. (JSC::FTL::callOperation): * ftl/FTLSlowPathCall.h: Added. (JSC::FTL::SlowPathCall::SlowPathCall): (JSC::FTL::SlowPathCall::call): (JSC::FTL::SlowPathCall::key): * ftl/FTLSlowPathCallKey.cpp: Added. (JSC::FTL::SlowPathCallKey::dump): * ftl/FTLSlowPathCallKey.h: Added. (JSC::FTL::SlowPathCallKey::SlowPathCallKey): (JSC::FTL::SlowPathCallKey::usedRegisters): (JSC::FTL::SlowPathCallKey::callTarget): (JSC::FTL::SlowPathCallKey::offset): (JSC::FTL::SlowPathCallKey::isEmptyValue): (JSC::FTL::SlowPathCallKey::isDeletedValue): (JSC::FTL::SlowPathCallKey::operator==): (JSC::FTL::SlowPathCallKey::hash): (JSC::FTL::SlowPathCallKeyHash::hash): (JSC::FTL::SlowPathCallKeyHash::equal): * ftl/FTLStackMaps.cpp: (JSC::FTL::StackMaps::Location::directGPR): * ftl/FTLStackMaps.h: * ftl/FTLState.h: * ftl/FTLThunks.cpp: (JSC::FTL::slowPathCallThunkGenerator): * ftl/FTLThunks.h: (JSC::FTL::Thunks::getSlowPathCallThunk): * jit/CCallHelpers.h: (JSC::CCallHelpers::setupArguments): * jit/GPRInfo.h: * jit/JITInlineCacheGenerator.cpp: (JSC::garbageStubInfo): (JSC::JITInlineCacheGenerator::JITInlineCacheGenerator): (JSC::JITByIdGenerator::finalize): * jit/JITInlineCacheGenerator.h: (JSC::JITByIdGenerator::slowPathBegin): * jit/RegisterSet.cpp: (JSC::RegisterSet::stackRegisters): (JSC::RegisterSet::specialRegisters): (JSC::RegisterSet::calleeSaveRegisters): (JSC::RegisterSet::allGPRs): (JSC::RegisterSet::allFPRs): (JSC::RegisterSet::allRegisters): (JSC::RegisterSet::dump): * jit/RegisterSet.h: (JSC::RegisterSet::exclude): (JSC::RegisterSet::numberOfSetRegisters): (JSC::RegisterSet::RegisterSet): (JSC::RegisterSet::isEmptyValue): (JSC::RegisterSet::isDeletedValue): (JSC::RegisterSet::operator==): (JSC::RegisterSet::hash): (JSC::RegisterSetHash::hash): (JSC::RegisterSetHash::equal): * runtime/Options.h: Source/WTF: Reviewed by Mark Hahnenberg. This needed some better bitvector support, like merging (|=), excluding (&=~), hashing, and bit counting. * wtf/BitVector.cpp: (WTF::BitVector::setSlow): (WTF::BitVector::excludeSlow): (WTF::BitVector::bitCountSlow): (WTF::BitVector::equalsSlowCase): (WTF::BitVector::hashSlowCase): (WTF::BitVector::dump): * wtf/BitVector.h: (WTF::BitVector::merge): (WTF::BitVector::exclude): (WTF::BitVector::bitCount): (WTF::BitVector::BitVector): (WTF::BitVector::isEmptyValue): (WTF::BitVector::isDeletedValue): (WTF::BitVector::isEmptyOrDeletedValue): (WTF::BitVector::operator==): (WTF::BitVector::hash): (WTF::BitVectorHash::hash): (WTF::BitVectorHash::equal): * wtf/HashTraits.h: (WTF::CustomHashTraits::constructDeletedValue): (WTF::CustomHashTraits::isDeletedValue): (WTF::CustomHashTraits::emptyValue): (WTF::CustomHashTraits::isEmptyValue): * wtf/StdLibExtras.h: (WTF::bitCount): Canonical link: https://commits.webkit.org/141315@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@157872 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-23 18:22:09 +00:00
/*
Improve FunctionPtr and use it in the JIT CallRecord. https://bugs.webkit.org/show_bug.cgi?id=183756 <rdar://problem/38641335> Reviewed by JF Bastien. 1. FunctionPtr hold a C/C++ function pointer by default. Change its default PtrTag to reflect that. 2. Delete the FunctionPtr::value() method. It is effectively a duplicate of executableAddress(). 3. Fix the FunctionPtr constructor that takes arbitrary pointers to be able to take "any" pointer. "any" in this case means that the pointer may not be typed as a C/C++ function to the C++ compiler (due to upstream casting or usage of void* as a storage type), but it is still expected to be pointing to a C/C++ function. 4. Added a FunctionPtr constructor that takes another FunctionPtr. This is a convenience constructor that lets us retag the underlying pointer. The other FunctionPtr is still expected to point to a C/C++ function. 5. Added PtrTag assertion placeholder functions to be implemented later. 6. Change the JIT CallRecord to embed a FunctionPtr callee instead of a void* to pointer. This improves type safety, and assists in getting pointer tagging right later. 7. Added versions of JIT callOperations methods that will take a PtrTag. This is preparation for more more pointer tagging work later. * assembler/MacroAssemblerARM.h: (JSC::MacroAssemblerARM::linkCall): * assembler/MacroAssemblerARMv7.h: (JSC::MacroAssemblerARMv7::linkCall): * assembler/MacroAssemblerCodeRef.h: (JSC::FunctionPtr::FunctionPtr): (JSC::FunctionPtr::operator bool const): (JSC::FunctionPtr::operator! const): (JSC::ReturnAddressPtr::ReturnAddressPtr): (JSC::MacroAssemblerCodePtr::retagged const): (JSC::MacroAssemblerCodeRef::retaggedCode const): (JSC::FunctionPtr::value const): Deleted. * assembler/MacroAssemblerMIPS.h: (JSC::MacroAssemblerMIPS::linkCall): * assembler/MacroAssemblerX86.h: (JSC::MacroAssemblerX86::linkCall): * assembler/MacroAssemblerX86_64.h: (JSC::MacroAssemblerX86_64::callWithSlowPathReturnType): (JSC::MacroAssemblerX86_64::linkCall): * bytecode/AccessCase.cpp: (JSC::AccessCase::generateImpl): * ftl/FTLSlowPathCall.cpp: (JSC::FTL::SlowPathCallContext::makeCall): * ftl/FTLSlowPathCall.h: (JSC::FTL::callOperation): * ftl/FTLThunks.cpp: (JSC::FTL::osrExitGenerationThunkGenerator): (JSC::FTL::lazySlowPathGenerationThunkGenerator): (JSC::FTL::slowPathCallThunkGenerator): * jit/JIT.cpp: (JSC::JIT::link): (JSC::JIT::privateCompileExceptionHandlers): * jit/JIT.h: (JSC::CallRecord::CallRecord): (JSC::JIT::appendCall): (JSC::JIT::appendCallWithSlowPathReturnType): (JSC::JIT::callOperation): (JSC::JIT::callOperationWithProfile): (JSC::JIT::callOperationWithResult): (JSC::JIT::callOperationNoExceptionCheck): (JSC::JIT::callOperationWithCallFrameRollbackOnException): * jit/JITArithmetic.cpp: (JSC::JIT::emitMathICFast): (JSC::JIT::emitMathICSlow): * jit/JITInlines.h: (JSC::JIT::emitNakedCall): (JSC::JIT::emitNakedTailCall): (JSC::JIT::appendCallWithExceptionCheck): (JSC::JIT::appendCallWithExceptionCheckAndSlowPathReturnType): (JSC::JIT::appendCallWithCallFrameRollbackOnException): (JSC::JIT::appendCallWithExceptionCheckSetJSValueResult): (JSC::JIT::appendCallWithExceptionCheckSetJSValueResultWithProfile): * jit/JITPropertyAccess.cpp: (JSC::JIT::emitSlow_op_get_by_val): (JSC::JIT::emitSlow_op_put_by_val): (JSC::JIT::privateCompileGetByValWithCachedId): (JSC::JIT::privateCompilePutByVal): (JSC::JIT::privateCompilePutByValWithCachedId): * jit/JITPropertyAccess32_64.cpp: (JSC::JIT::emitSlow_op_put_by_val): * jit/Repatch.cpp: (JSC::linkPolymorphicCall): * jit/SlowPathCall.h: (JSC::JITSlowPathCall::JITSlowPathCall): (JSC::JITSlowPathCall::call): * jit/ThunkGenerators.cpp: (JSC::nativeForGenerator): * runtime/PtrTag.h: (JSC::nextPtrTagID): (JSC::assertIsCFunctionPtr): (JSC::assertIsNullOrCFunctionPtr): (JSC::assertIsNotTagged): (JSC::assertIsTagged): (JSC::assertIsNullOrTagged): (JSC::assertIsTaggedWith): (JSC::assertIsNullOrTaggedWith): (JSC::uniquePtrTagID): Deleted. Canonical link: https://commits.webkit.org/199413@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@229767 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-03-20 18:10:16 +00:00
* Copyright (C) 2013-2018 Apple Inc. All rights reserved.
FTL should be able to do some simple inline caches using LLVM patchpoints https://bugs.webkit.org/show_bug.cgi?id=123164 Source/JavaScriptCore: Reviewed by Mark Hahnenberg. This implements GetById inline caches in the FTL using llvm.webkit.patchpoint. The idea is that we ask LLVM for a nop slide the size of a GetById inline cache and then fill in the code after LLVM compilation is complete. For now, we just use the system calling convention for the arguments and return. We also still make some assumptions about registers that aren't correct. But, most of the scaffolding is there and this will successfully patch an inline cache. * JavaScriptCore.xcodeproj/project.pbxproj: * assembler/AbstractMacroAssembler.h: * assembler/LinkBuffer.cpp: (JSC::LinkBuffer::finalizeCodeWithoutDisassembly): (JSC::LinkBuffer::linkCode): (JSC::LinkBuffer::allocate): * assembler/LinkBuffer.h: (JSC::LinkBuffer::LinkBuffer): (JSC::LinkBuffer::link): * ftl/FTLAbbreviations.h: (JSC::FTL::constNull): (JSC::FTL::buildCall): * ftl/FTLCapabilities.cpp: (JSC::FTL::canCompile): * ftl/FTLCompile.cpp: (JSC::FTL::fixFunctionBasedOnStackMaps): * ftl/FTLInlineCacheDescriptor.h: Added. (JSC::FTL::InlineCacheDescriptor::InlineCacheDescriptor): (JSC::FTL::GetByIdDescriptor::GetByIdDescriptor): (JSC::FTL::GetByIdDescriptor::stackmapID): (JSC::FTL::GetByIdDescriptor::codeOrigin): (JSC::FTL::GetByIdDescriptor::uid): * ftl/FTLInlineCacheSize.cpp: Added. (JSC::FTL::sizeOfGetById): (JSC::FTL::sizeOfPutById): * ftl/FTLInlineCacheSize.h: Added. * ftl/FTLIntrinsicRepository.h: * ftl/FTLJITFinalizer.cpp: (JSC::FTL::JITFinalizer::finalizeFunction): * ftl/FTLJITFinalizer.h: * ftl/FTLLocation.cpp: (JSC::FTL::Location::directGPR): * ftl/FTLLocation.h: * ftl/FTLLowerDFGToLLVM.cpp: (JSC::FTL::LowerDFGToLLVM::compileGetById): * ftl/FTLOutput.h: (JSC::FTL::Output::call): * ftl/FTLSlowPathCall.cpp: Added. (JSC::FTL::callOperation): * ftl/FTLSlowPathCall.h: Added. (JSC::FTL::SlowPathCall::SlowPathCall): (JSC::FTL::SlowPathCall::call): (JSC::FTL::SlowPathCall::key): * ftl/FTLSlowPathCallKey.cpp: Added. (JSC::FTL::SlowPathCallKey::dump): * ftl/FTLSlowPathCallKey.h: Added. (JSC::FTL::SlowPathCallKey::SlowPathCallKey): (JSC::FTL::SlowPathCallKey::usedRegisters): (JSC::FTL::SlowPathCallKey::callTarget): (JSC::FTL::SlowPathCallKey::offset): (JSC::FTL::SlowPathCallKey::isEmptyValue): (JSC::FTL::SlowPathCallKey::isDeletedValue): (JSC::FTL::SlowPathCallKey::operator==): (JSC::FTL::SlowPathCallKey::hash): (JSC::FTL::SlowPathCallKeyHash::hash): (JSC::FTL::SlowPathCallKeyHash::equal): * ftl/FTLStackMaps.cpp: (JSC::FTL::StackMaps::Location::directGPR): * ftl/FTLStackMaps.h: * ftl/FTLState.h: * ftl/FTLThunks.cpp: (JSC::FTL::slowPathCallThunkGenerator): * ftl/FTLThunks.h: (JSC::FTL::Thunks::getSlowPathCallThunk): * jit/CCallHelpers.h: (JSC::CCallHelpers::setupArguments): * jit/GPRInfo.h: * jit/JITInlineCacheGenerator.cpp: (JSC::garbageStubInfo): (JSC::JITInlineCacheGenerator::JITInlineCacheGenerator): (JSC::JITByIdGenerator::finalize): * jit/JITInlineCacheGenerator.h: (JSC::JITByIdGenerator::slowPathBegin): * jit/RegisterSet.cpp: (JSC::RegisterSet::stackRegisters): (JSC::RegisterSet::specialRegisters): (JSC::RegisterSet::calleeSaveRegisters): (JSC::RegisterSet::allGPRs): (JSC::RegisterSet::allFPRs): (JSC::RegisterSet::allRegisters): (JSC::RegisterSet::dump): * jit/RegisterSet.h: (JSC::RegisterSet::exclude): (JSC::RegisterSet::numberOfSetRegisters): (JSC::RegisterSet::RegisterSet): (JSC::RegisterSet::isEmptyValue): (JSC::RegisterSet::isDeletedValue): (JSC::RegisterSet::operator==): (JSC::RegisterSet::hash): (JSC::RegisterSetHash::hash): (JSC::RegisterSetHash::equal): * runtime/Options.h: Source/WTF: Reviewed by Mark Hahnenberg. This needed some better bitvector support, like merging (|=), excluding (&=~), hashing, and bit counting. * wtf/BitVector.cpp: (WTF::BitVector::setSlow): (WTF::BitVector::excludeSlow): (WTF::BitVector::bitCountSlow): (WTF::BitVector::equalsSlowCase): (WTF::BitVector::hashSlowCase): (WTF::BitVector::dump): * wtf/BitVector.h: (WTF::BitVector::merge): (WTF::BitVector::exclude): (WTF::BitVector::bitCount): (WTF::BitVector::BitVector): (WTF::BitVector::isEmptyValue): (WTF::BitVector::isDeletedValue): (WTF::BitVector::isEmptyOrDeletedValue): (WTF::BitVector::operator==): (WTF::BitVector::hash): (WTF::BitVectorHash::hash): (WTF::BitVectorHash::equal): * wtf/HashTraits.h: (WTF::CustomHashTraits::constructDeletedValue): (WTF::CustomHashTraits::isDeletedValue): (WTF::CustomHashTraits::emptyValue): (WTF::CustomHashTraits::isEmptyValue): * wtf/StdLibExtras.h: (WTF::bitCount): Canonical link: https://commits.webkit.org/141315@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@157872 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-23 18:22:09 +00:00
*
* 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.
*/
#pragma once
FTL should be able to do some simple inline caches using LLVM patchpoints https://bugs.webkit.org/show_bug.cgi?id=123164 Source/JavaScriptCore: Reviewed by Mark Hahnenberg. This implements GetById inline caches in the FTL using llvm.webkit.patchpoint. The idea is that we ask LLVM for a nop slide the size of a GetById inline cache and then fill in the code after LLVM compilation is complete. For now, we just use the system calling convention for the arguments and return. We also still make some assumptions about registers that aren't correct. But, most of the scaffolding is there and this will successfully patch an inline cache. * JavaScriptCore.xcodeproj/project.pbxproj: * assembler/AbstractMacroAssembler.h: * assembler/LinkBuffer.cpp: (JSC::LinkBuffer::finalizeCodeWithoutDisassembly): (JSC::LinkBuffer::linkCode): (JSC::LinkBuffer::allocate): * assembler/LinkBuffer.h: (JSC::LinkBuffer::LinkBuffer): (JSC::LinkBuffer::link): * ftl/FTLAbbreviations.h: (JSC::FTL::constNull): (JSC::FTL::buildCall): * ftl/FTLCapabilities.cpp: (JSC::FTL::canCompile): * ftl/FTLCompile.cpp: (JSC::FTL::fixFunctionBasedOnStackMaps): * ftl/FTLInlineCacheDescriptor.h: Added. (JSC::FTL::InlineCacheDescriptor::InlineCacheDescriptor): (JSC::FTL::GetByIdDescriptor::GetByIdDescriptor): (JSC::FTL::GetByIdDescriptor::stackmapID): (JSC::FTL::GetByIdDescriptor::codeOrigin): (JSC::FTL::GetByIdDescriptor::uid): * ftl/FTLInlineCacheSize.cpp: Added. (JSC::FTL::sizeOfGetById): (JSC::FTL::sizeOfPutById): * ftl/FTLInlineCacheSize.h: Added. * ftl/FTLIntrinsicRepository.h: * ftl/FTLJITFinalizer.cpp: (JSC::FTL::JITFinalizer::finalizeFunction): * ftl/FTLJITFinalizer.h: * ftl/FTLLocation.cpp: (JSC::FTL::Location::directGPR): * ftl/FTLLocation.h: * ftl/FTLLowerDFGToLLVM.cpp: (JSC::FTL::LowerDFGToLLVM::compileGetById): * ftl/FTLOutput.h: (JSC::FTL::Output::call): * ftl/FTLSlowPathCall.cpp: Added. (JSC::FTL::callOperation): * ftl/FTLSlowPathCall.h: Added. (JSC::FTL::SlowPathCall::SlowPathCall): (JSC::FTL::SlowPathCall::call): (JSC::FTL::SlowPathCall::key): * ftl/FTLSlowPathCallKey.cpp: Added. (JSC::FTL::SlowPathCallKey::dump): * ftl/FTLSlowPathCallKey.h: Added. (JSC::FTL::SlowPathCallKey::SlowPathCallKey): (JSC::FTL::SlowPathCallKey::usedRegisters): (JSC::FTL::SlowPathCallKey::callTarget): (JSC::FTL::SlowPathCallKey::offset): (JSC::FTL::SlowPathCallKey::isEmptyValue): (JSC::FTL::SlowPathCallKey::isDeletedValue): (JSC::FTL::SlowPathCallKey::operator==): (JSC::FTL::SlowPathCallKey::hash): (JSC::FTL::SlowPathCallKeyHash::hash): (JSC::FTL::SlowPathCallKeyHash::equal): * ftl/FTLStackMaps.cpp: (JSC::FTL::StackMaps::Location::directGPR): * ftl/FTLStackMaps.h: * ftl/FTLState.h: * ftl/FTLThunks.cpp: (JSC::FTL::slowPathCallThunkGenerator): * ftl/FTLThunks.h: (JSC::FTL::Thunks::getSlowPathCallThunk): * jit/CCallHelpers.h: (JSC::CCallHelpers::setupArguments): * jit/GPRInfo.h: * jit/JITInlineCacheGenerator.cpp: (JSC::garbageStubInfo): (JSC::JITInlineCacheGenerator::JITInlineCacheGenerator): (JSC::JITByIdGenerator::finalize): * jit/JITInlineCacheGenerator.h: (JSC::JITByIdGenerator::slowPathBegin): * jit/RegisterSet.cpp: (JSC::RegisterSet::stackRegisters): (JSC::RegisterSet::specialRegisters): (JSC::RegisterSet::calleeSaveRegisters): (JSC::RegisterSet::allGPRs): (JSC::RegisterSet::allFPRs): (JSC::RegisterSet::allRegisters): (JSC::RegisterSet::dump): * jit/RegisterSet.h: (JSC::RegisterSet::exclude): (JSC::RegisterSet::numberOfSetRegisters): (JSC::RegisterSet::RegisterSet): (JSC::RegisterSet::isEmptyValue): (JSC::RegisterSet::isDeletedValue): (JSC::RegisterSet::operator==): (JSC::RegisterSet::hash): (JSC::RegisterSetHash::hash): (JSC::RegisterSetHash::equal): * runtime/Options.h: Source/WTF: Reviewed by Mark Hahnenberg. This needed some better bitvector support, like merging (|=), excluding (&=~), hashing, and bit counting. * wtf/BitVector.cpp: (WTF::BitVector::setSlow): (WTF::BitVector::excludeSlow): (WTF::BitVector::bitCountSlow): (WTF::BitVector::equalsSlowCase): (WTF::BitVector::hashSlowCase): (WTF::BitVector::dump): * wtf/BitVector.h: (WTF::BitVector::merge): (WTF::BitVector::exclude): (WTF::BitVector::bitCount): (WTF::BitVector::BitVector): (WTF::BitVector::isEmptyValue): (WTF::BitVector::isDeletedValue): (WTF::BitVector::isEmptyOrDeletedValue): (WTF::BitVector::operator==): (WTF::BitVector::hash): (WTF::BitVectorHash::hash): (WTF::BitVectorHash::equal): * wtf/HashTraits.h: (WTF::CustomHashTraits::constructDeletedValue): (WTF::CustomHashTraits::isDeletedValue): (WTF::CustomHashTraits::emptyValue): (WTF::CustomHashTraits::isEmptyValue): * wtf/StdLibExtras.h: (WTF::bitCount): Canonical link: https://commits.webkit.org/141315@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@157872 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-23 18:22:09 +00:00
#if ENABLE(FTL_JIT)
#include "CCallHelpers.h"
#include "FTLSlowPathCallKey.h"
AssemblyHelpers should not have a VM field https://bugs.webkit.org/show_bug.cgi?id=170207 Reviewed by Yusuke Suzuki. APIs that need VM should take one as a parameter. When doing position independent code for Wasm, we can't tie code generation to a VM. * b3/B3Compile.cpp: (JSC::B3::compile): * b3/air/testair.cpp: * b3/testb3.cpp: (JSC::B3::testEntrySwitchSimple): (JSC::B3::testEntrySwitchNoEntrySwitch): (JSC::B3::testEntrySwitchWithCommonPaths): (JSC::B3::testEntrySwitchWithCommonPathsAndNonTrivialEntrypoint): (JSC::B3::testEntrySwitchLoop): * bytecode/AccessCase.cpp: (JSC::AccessCase::generateWithGuard): (JSC::AccessCase::generateImpl): * bytecode/DOMJITAccessCasePatchpointParams.cpp: (JSC::SlowPathCallGeneratorWithArguments::generateImpl): * bytecode/InlineAccess.cpp: (JSC::InlineAccess::dumpCacheSizesAndCrash): (JSC::InlineAccess::generateSelfPropertyAccess): (JSC::InlineAccess::generateSelfPropertyReplace): (JSC::InlineAccess::generateArrayLength): (JSC::InlineAccess::rewireStubAsJump): * bytecode/InlineAccess.h: * bytecode/PolymorphicAccess.cpp: (JSC::AccessGenerationState::emitExplicitExceptionHandler): (JSC::PolymorphicAccess::regenerate): * bytecode/PolymorphicAccess.h: (JSC::AccessGenerationState::AccessGenerationState): * dfg/DFGJITCompiler.cpp: (JSC::DFG::JITCompiler::JITCompiler): (JSC::DFG::JITCompiler::compileExceptionHandlers): (JSC::DFG::JITCompiler::link): (JSC::DFG::JITCompiler::compile): (JSC::DFG::JITCompiler::compileFunction): (JSC::DFG::JITCompiler::exceptionCheck): * dfg/DFGJITCompiler.h: (JSC::DFG::JITCompiler::exceptionCheckWithCallFrameRollback): (JSC::DFG::JITCompiler::fastExceptionCheck): (JSC::DFG::JITCompiler::vm): * dfg/DFGOSRExitCompiler.cpp: * dfg/DFGOSRExitCompiler.h: * dfg/DFGOSRExitCompiler32_64.cpp: (JSC::DFG::OSRExitCompiler::compileExit): * dfg/DFGOSRExitCompiler64.cpp: (JSC::DFG::OSRExitCompiler::compileExit): * dfg/DFGOSRExitCompilerCommon.cpp: (JSC::DFG::adjustAndJumpToTarget): * dfg/DFGOSRExitCompilerCommon.h: * dfg/DFGSpeculativeJIT.cpp: (JSC::DFG::SpeculativeJIT::emitAllocateRawObject): (JSC::DFG::SpeculativeJIT::checkArray): (JSC::DFG::SpeculativeJIT::compileCurrentBlock): (JSC::DFG::SpeculativeJIT::compileInstanceOfForObject): (JSC::DFG::SpeculativeJIT::compileMakeRope): (JSC::DFG::SpeculativeJIT::compileGetGlobalObject): (JSC::DFG::SpeculativeJIT::compileNewFunctionCommon): (JSC::DFG::SpeculativeJIT::compileCreateActivation): (JSC::DFG::SpeculativeJIT::compileCreateDirectArguments): (JSC::DFG::SpeculativeJIT::compileSpread): (JSC::DFG::SpeculativeJIT::compileArraySlice): (JSC::DFG::SpeculativeJIT::compileNukeStructureAndSetButterfly): (JSC::DFG::SpeculativeJIT::compileNewStringObject): (JSC::DFG::SpeculativeJIT::compileNewTypedArray): (JSC::DFG::SpeculativeJIT::compileStoreBarrier): * dfg/DFGSpeculativeJIT.h: (JSC::DFG::SpeculativeJIT::emitAllocateJSObjectWithKnownSize): (JSC::DFG::SpeculativeJIT::emitAllocateJSObject): (JSC::DFG::SpeculativeJIT::emitAllocateVariableSizedJSObject): (JSC::DFG::SpeculativeJIT::emitAllocateDestructibleObject): * dfg/DFGSpeculativeJIT32_64.cpp: (JSC::DFG::SpeculativeJIT::emitCall): (JSC::DFG::SpeculativeJIT::compileLogicalNot): (JSC::DFG::SpeculativeJIT::emitBranch): (JSC::DFG::SpeculativeJIT::compile): * dfg/DFGSpeculativeJIT64.cpp: (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNullOrUndefined): (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNullOrUndefined): (JSC::DFG::SpeculativeJIT::emitCall): (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot): (JSC::DFG::SpeculativeJIT::compileLogicalNot): (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch): (JSC::DFG::SpeculativeJIT::emitBranch): (JSC::DFG::SpeculativeJIT::compile): (JSC::DFG::SpeculativeJIT::compileAllocateNewArrayWithSize): * dfg/DFGThunks.cpp: (JSC::DFG::osrEntryThunkGenerator): * ftl/FTLCompile.cpp: (JSC::FTL::compile): * ftl/FTLJITFinalizer.h: * ftl/FTLLazySlowPath.cpp: (JSC::FTL::LazySlowPath::generate): * ftl/FTLLazySlowPathCall.h: (JSC::FTL::createLazyCallGenerator): * ftl/FTLLink.cpp: (JSC::FTL::link): * ftl/FTLLowerDFGToB3.cpp: (JSC::FTL::DFG::LowerDFGToB3::lower): (JSC::FTL::DFG::LowerDFGToB3::compileCreateActivation): (JSC::FTL::DFG::LowerDFGToB3::compileNewFunction): (JSC::FTL::DFG::LowerDFGToB3::compileCreateDirectArguments): (JSC::FTL::DFG::LowerDFGToB3::compileNewTypedArray): (JSC::FTL::DFG::LowerDFGToB3::compileMakeRope): (JSC::FTL::DFG::LowerDFGToB3::compileNotifyWrite): (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargsSpread): (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargs): (JSC::FTL::DFG::LowerDFGToB3::compileCallEval): (JSC::FTL::DFG::LowerDFGToB3::compileIsObjectOrNull): (JSC::FTL::DFG::LowerDFGToB3::compileIsFunction): (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeNewObject): (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeCreateActivation): (JSC::FTL::DFG::LowerDFGToB3::compileCheckTraps): (JSC::FTL::DFG::LowerDFGToB3::allocatePropertyStorageWithSizeImpl): (JSC::FTL::DFG::LowerDFGToB3::allocateObject): (JSC::FTL::DFG::LowerDFGToB3::allocateJSArray): (JSC::FTL::DFG::LowerDFGToB3::buildTypeOf): * ftl/FTLOSRExitCompiler.cpp: (JSC::FTL::compileStub): * ftl/FTLSlowPathCall.h: (JSC::FTL::callOperation): * ftl/FTLState.h: (JSC::FTL::State::vm): * ftl/FTLThunks.cpp: (JSC::FTL::genericGenerationThunkGenerator): (JSC::FTL::slowPathCallThunkGenerator): * jit/AssemblyHelpers.cpp: (JSC::AssemblyHelpers::jitReleaseAssertNoException): (JSC::AssemblyHelpers::callExceptionFuzz): (JSC::AssemblyHelpers::emitJumpIfException): (JSC::AssemblyHelpers::emitExceptionCheck): (JSC::AssemblyHelpers::emitNonPatchableExceptionCheck): (JSC::AssemblyHelpers::emitLoadStructure): (JSC::AssemblyHelpers::emitRandomThunk): (JSC::AssemblyHelpers::restoreCalleeSavesFromVMEntryFrameCalleeSavesBuffer): (JSC::AssemblyHelpers::emitConvertValueToBoolean): (JSC::AssemblyHelpers::debugCall): * jit/AssemblyHelpers.h: (JSC::AssemblyHelpers::AssemblyHelpers): (JSC::AssemblyHelpers::codeBlock): (JSC::AssemblyHelpers::copyCalleeSavesToVMEntryFrameCalleeSavesBuffer): (JSC::AssemblyHelpers::copyCalleeSavesFromFrameOrRegisterToVMEntryFrameCalleeSavesBuffer): (JSC::AssemblyHelpers::barrierBranch): (JSC::AssemblyHelpers::barrierStoreLoadFence): (JSC::AssemblyHelpers::mutatorFence): (JSC::AssemblyHelpers::storeButterfly): (JSC::AssemblyHelpers::nukeStructureAndStoreButterfly): (JSC::AssemblyHelpers::jumpIfMutatorFenceNotNeeded): (JSC::AssemblyHelpers::emitAllocateJSObjectWithKnownSize): (JSC::AssemblyHelpers::emitAllocateJSObject): (JSC::AssemblyHelpers::emitAllocateVariableSizedCell): (JSC::AssemblyHelpers::emitAllocateVariableSizedJSObject): (JSC::AssemblyHelpers::emitAllocateDestructibleObject): (JSC::AssemblyHelpers::vm): Deleted. (JSC::AssemblyHelpers::debugCall): Deleted. * jit/CCallHelpers.cpp: (JSC::CCallHelpers::ensureShadowChickenPacket): * jit/CCallHelpers.h: (JSC::CCallHelpers::CCallHelpers): (JSC::CCallHelpers::jumpToExceptionHandler): * jit/JIT.cpp: (JSC::JIT::emitEnterOptimizationCheck): (JSC::JIT::privateCompileExceptionHandlers): * jit/JIT.h: (JSC::JIT::exceptionCheck): (JSC::JIT::exceptionCheckWithCallFrameRollback): * jit/JITMathIC.h: (JSC::JITMathIC::generateOutOfLine): * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_instanceof): (JSC::JIT::emit_op_is_undefined): (JSC::JIT::emit_op_jfalse): (JSC::JIT::emit_op_jeq_null): (JSC::JIT::emit_op_jneq_null): (JSC::JIT::emit_op_jtrue): (JSC::JIT::emit_op_throw): (JSC::JIT::emit_op_catch): (JSC::JIT::emit_op_eq_null): (JSC::JIT::emit_op_neq_null): (JSC::JIT::emitSlow_op_loop_hint): (JSC::JIT::emit_op_log_shadow_chicken_prologue): (JSC::JIT::emit_op_log_shadow_chicken_tail): * jit/JITOpcodes32_64.cpp: (JSC::JIT::privateCompileCTINativeCall): (JSC::JIT::emit_op_new_object): (JSC::JIT::emit_op_jfalse): (JSC::JIT::emit_op_jtrue): (JSC::JIT::emit_op_throw): (JSC::JIT::emit_op_catch): (JSC::JIT::emit_op_create_this): (JSC::JIT::emit_op_log_shadow_chicken_prologue): (JSC::JIT::emit_op_log_shadow_chicken_tail): * jit/JITPropertyAccess.cpp: (JSC::JIT::emitWriteBarrier): * jit/JSInterfaceJIT.h: (JSC::JSInterfaceJIT::JSInterfaceJIT): (JSC::JSInterfaceJIT::vm): * jit/Repatch.cpp: (JSC::tryCacheGetByID): (JSC::tryCachePutByID): (JSC::linkPolymorphicCall): (JSC::resetGetByID): (JSC::resetPutByID): * jit/SetupVarargsFrame.cpp: (JSC::emitSetupVarargsFrameFastCase): * jit/SetupVarargsFrame.h: * jit/SpecializedThunkJIT.h: (JSC::SpecializedThunkJIT::loadArgumentWithSpecificClass): * jit/ThunkGenerators.cpp: (JSC::throwExceptionFromCallSlowPathGenerator): (JSC::linkCallThunkGenerator): (JSC::linkPolymorphicCallThunkGenerator): (JSC::virtualThunkFor): (JSC::nativeForGenerator): (JSC::randomThunkGenerator): (JSC::boundThisNoArgsFunctionCallGenerator): (JSC::throwExceptionFromWasmThunkGenerator): * wasm/WasmB3IRGenerator.cpp: (JSC::Wasm::parseAndCompile): * wasm/WasmBinding.cpp: (JSC::Wasm::wasmToJs): (JSC::Wasm::wasmToWasm): Canonical link: https://commits.webkit.org/187145@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@214531 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-03-29 06:15:23 +00:00
#include "FTLState.h"
FTL should be able to do some simple inline caches using LLVM patchpoints https://bugs.webkit.org/show_bug.cgi?id=123164 Source/JavaScriptCore: Reviewed by Mark Hahnenberg. This implements GetById inline caches in the FTL using llvm.webkit.patchpoint. The idea is that we ask LLVM for a nop slide the size of a GetById inline cache and then fill in the code after LLVM compilation is complete. For now, we just use the system calling convention for the arguments and return. We also still make some assumptions about registers that aren't correct. But, most of the scaffolding is there and this will successfully patch an inline cache. * JavaScriptCore.xcodeproj/project.pbxproj: * assembler/AbstractMacroAssembler.h: * assembler/LinkBuffer.cpp: (JSC::LinkBuffer::finalizeCodeWithoutDisassembly): (JSC::LinkBuffer::linkCode): (JSC::LinkBuffer::allocate): * assembler/LinkBuffer.h: (JSC::LinkBuffer::LinkBuffer): (JSC::LinkBuffer::link): * ftl/FTLAbbreviations.h: (JSC::FTL::constNull): (JSC::FTL::buildCall): * ftl/FTLCapabilities.cpp: (JSC::FTL::canCompile): * ftl/FTLCompile.cpp: (JSC::FTL::fixFunctionBasedOnStackMaps): * ftl/FTLInlineCacheDescriptor.h: Added. (JSC::FTL::InlineCacheDescriptor::InlineCacheDescriptor): (JSC::FTL::GetByIdDescriptor::GetByIdDescriptor): (JSC::FTL::GetByIdDescriptor::stackmapID): (JSC::FTL::GetByIdDescriptor::codeOrigin): (JSC::FTL::GetByIdDescriptor::uid): * ftl/FTLInlineCacheSize.cpp: Added. (JSC::FTL::sizeOfGetById): (JSC::FTL::sizeOfPutById): * ftl/FTLInlineCacheSize.h: Added. * ftl/FTLIntrinsicRepository.h: * ftl/FTLJITFinalizer.cpp: (JSC::FTL::JITFinalizer::finalizeFunction): * ftl/FTLJITFinalizer.h: * ftl/FTLLocation.cpp: (JSC::FTL::Location::directGPR): * ftl/FTLLocation.h: * ftl/FTLLowerDFGToLLVM.cpp: (JSC::FTL::LowerDFGToLLVM::compileGetById): * ftl/FTLOutput.h: (JSC::FTL::Output::call): * ftl/FTLSlowPathCall.cpp: Added. (JSC::FTL::callOperation): * ftl/FTLSlowPathCall.h: Added. (JSC::FTL::SlowPathCall::SlowPathCall): (JSC::FTL::SlowPathCall::call): (JSC::FTL::SlowPathCall::key): * ftl/FTLSlowPathCallKey.cpp: Added. (JSC::FTL::SlowPathCallKey::dump): * ftl/FTLSlowPathCallKey.h: Added. (JSC::FTL::SlowPathCallKey::SlowPathCallKey): (JSC::FTL::SlowPathCallKey::usedRegisters): (JSC::FTL::SlowPathCallKey::callTarget): (JSC::FTL::SlowPathCallKey::offset): (JSC::FTL::SlowPathCallKey::isEmptyValue): (JSC::FTL::SlowPathCallKey::isDeletedValue): (JSC::FTL::SlowPathCallKey::operator==): (JSC::FTL::SlowPathCallKey::hash): (JSC::FTL::SlowPathCallKeyHash::hash): (JSC::FTL::SlowPathCallKeyHash::equal): * ftl/FTLStackMaps.cpp: (JSC::FTL::StackMaps::Location::directGPR): * ftl/FTLStackMaps.h: * ftl/FTLState.h: * ftl/FTLThunks.cpp: (JSC::FTL::slowPathCallThunkGenerator): * ftl/FTLThunks.h: (JSC::FTL::Thunks::getSlowPathCallThunk): * jit/CCallHelpers.h: (JSC::CCallHelpers::setupArguments): * jit/GPRInfo.h: * jit/JITInlineCacheGenerator.cpp: (JSC::garbageStubInfo): (JSC::JITInlineCacheGenerator::JITInlineCacheGenerator): (JSC::JITByIdGenerator::finalize): * jit/JITInlineCacheGenerator.h: (JSC::JITByIdGenerator::slowPathBegin): * jit/RegisterSet.cpp: (JSC::RegisterSet::stackRegisters): (JSC::RegisterSet::specialRegisters): (JSC::RegisterSet::calleeSaveRegisters): (JSC::RegisterSet::allGPRs): (JSC::RegisterSet::allFPRs): (JSC::RegisterSet::allRegisters): (JSC::RegisterSet::dump): * jit/RegisterSet.h: (JSC::RegisterSet::exclude): (JSC::RegisterSet::numberOfSetRegisters): (JSC::RegisterSet::RegisterSet): (JSC::RegisterSet::isEmptyValue): (JSC::RegisterSet::isDeletedValue): (JSC::RegisterSet::operator==): (JSC::RegisterSet::hash): (JSC::RegisterSetHash::hash): (JSC::RegisterSetHash::equal): * runtime/Options.h: Source/WTF: Reviewed by Mark Hahnenberg. This needed some better bitvector support, like merging (|=), excluding (&=~), hashing, and bit counting. * wtf/BitVector.cpp: (WTF::BitVector::setSlow): (WTF::BitVector::excludeSlow): (WTF::BitVector::bitCountSlow): (WTF::BitVector::equalsSlowCase): (WTF::BitVector::hashSlowCase): (WTF::BitVector::dump): * wtf/BitVector.h: (WTF::BitVector::merge): (WTF::BitVector::exclude): (WTF::BitVector::bitCount): (WTF::BitVector::BitVector): (WTF::BitVector::isEmptyValue): (WTF::BitVector::isDeletedValue): (WTF::BitVector::isEmptyOrDeletedValue): (WTF::BitVector::operator==): (WTF::BitVector::hash): (WTF::BitVectorHash::hash): (WTF::BitVectorHash::equal): * wtf/HashTraits.h: (WTF::CustomHashTraits::constructDeletedValue): (WTF::CustomHashTraits::isDeletedValue): (WTF::CustomHashTraits::emptyValue): (WTF::CustomHashTraits::isEmptyValue): * wtf/StdLibExtras.h: (WTF::bitCount): Canonical link: https://commits.webkit.org/141315@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@157872 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-23 18:22:09 +00:00
namespace JSC { namespace FTL {
class SlowPathCall {
public:
SlowPathCall() { }
SlowPathCall(MacroAssembler::Call call, const SlowPathCallKey& key)
: m_call(call)
, m_key(key)
{
}
MacroAssembler::Call call() const { return m_call; }
SlowPathCallKey key() const { return m_key; }
private:
MacroAssembler::Call m_call;
SlowPathCallKey m_key;
};
FTL should generate code to call slow paths lazily https://bugs.webkit.org/show_bug.cgi?id=149936 Reviewed by Saam Barati. Source/JavaScriptCore: We often have complex slow paths in FTL-generated code. Those slow paths may never run. Even if they do run, they don't need stellar performance. So, it doesn't make sense to have LLVM worry about compiling such slow path code. This patch enables us to use our own MacroAssembler for compiling the slow path inside FTL code. It does this by using a crazy lambda thingy (see FTLLowerDFGToLLVM.cpp's lazySlowPath() and its documentation). The result is quite natural to use. Even for straight slow path calls via something like vmCall(), the lazySlowPath offers the benefit that the call marshalling and the exception checking are not expressed using LLVM IR and do not require LLVM to think about it. It also has the benefit that we never generate the code if it never runs. That's great, since function calls usually involve ~10 instructions total (move arguments to argument registers, make the call, check exception, etc.). This patch adds the lazy slow path abstraction and uses it for some slow paths in the FTL. The code we generate with lazy slow paths is worse than the code that LLVM would have generated. Therefore, a lazy slow path only makes sense when we have strong evidence that the slow path will execute infrequently relative to the fast path. This completely precludes the use of lazy slow paths for out-of-line Nodes that unconditionally call a C++ function. It also precludes their use for the GetByVal out-of-bounds handler, since when we generate a GetByVal with an out-of-bounds handler it means that we only know that the out-of-bounds case executed at least once. So, for all we know, it may actually be the common case. So, this patch just deployed the lazy slow path for GC slow paths and masquerades-as-undefined slow paths. It makes sense for GC slow paths because those have a statistical guarantee of slow path frequency - probably bounded at less than 1/10. It makes sense for masquerades-as- undefined because we can say quite confidently that this is an uncommon scenario on the modern Web. Something that's always been challenging about abstractions involving the MacroAssembler is that linking is a separate phase, and there is no way for someone who is just given access to the MacroAssembler& to emit code that requires linking, since linking happens once we have emitted all code and we are creating the LinkBuffer. Moreover, the FTL requires that the final parts of linking happen on the main thread. This patch ran into this issue, and solved it comprehensively, by introducing MacroAssembler::addLinkTask(). This takes a lambda and runs it at the bitter end of linking - when performFinalization() is called. This ensure that the task added by addLinkTask() runs on the main thread. This patch doesn't replace all of the previously existing idioms for dealing with this issue; we can do that later. This shows small speed-ups on a bunch of things. No big win on any benchmark aggregate. But mainly this is done for https://bugs.webkit.org/show_bug.cgi?id=149852, where we found that outlining the slow path in this way was a significant speed boost. * CMakeLists.txt: * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: * JavaScriptCore.xcodeproj/project.pbxproj: * assembler/AbstractMacroAssembler.h: (JSC::AbstractMacroAssembler::replaceWithAddressComputation): (JSC::AbstractMacroAssembler::addLinkTask): (JSC::AbstractMacroAssembler::AbstractMacroAssembler): * assembler/LinkBuffer.cpp: (JSC::LinkBuffer::linkCode): (JSC::LinkBuffer::allocate): (JSC::LinkBuffer::performFinalization): * assembler/LinkBuffer.h: (JSC::LinkBuffer::wasAlreadyDisassembled): (JSC::LinkBuffer::didAlreadyDisassemble): (JSC::LinkBuffer::vm): (JSC::LinkBuffer::executableOffsetFor): * bytecode/CodeOrigin.h: (JSC::CodeOrigin::CodeOrigin): (JSC::CodeOrigin::isSet): (JSC::CodeOrigin::operator bool): (JSC::CodeOrigin::isHashTableDeletedValue): (JSC::CodeOrigin::operator!): Deleted. * ftl/FTLCompile.cpp: (JSC::FTL::mmAllocateDataSection): * ftl/FTLInlineCacheDescriptor.h: (JSC::FTL::InlineCacheDescriptor::InlineCacheDescriptor): (JSC::FTL::CheckInDescriptor::CheckInDescriptor): (JSC::FTL::LazySlowPathDescriptor::LazySlowPathDescriptor): * ftl/FTLJITCode.h: * ftl/FTLJITFinalizer.cpp: (JSC::FTL::JITFinalizer::finalizeFunction): * ftl/FTLJITFinalizer.h: * ftl/FTLLazySlowPath.cpp: Added. (JSC::FTL::LazySlowPath::LazySlowPath): (JSC::FTL::LazySlowPath::~LazySlowPath): (JSC::FTL::LazySlowPath::generate): * ftl/FTLLazySlowPath.h: Added. (JSC::FTL::LazySlowPath::createGenerator): (JSC::FTL::LazySlowPath::patchpoint): (JSC::FTL::LazySlowPath::usedRegisters): (JSC::FTL::LazySlowPath::callSiteIndex): (JSC::FTL::LazySlowPath::stub): * ftl/FTLLazySlowPathCall.h: Added. (JSC::FTL::createLazyCallGenerator): * ftl/FTLLowerDFGToLLVM.cpp: (JSC::FTL::DFG::LowerDFGToLLVM::compileCreateActivation): (JSC::FTL::DFG::LowerDFGToLLVM::compileNewFunction): (JSC::FTL::DFG::LowerDFGToLLVM::compileCreateDirectArguments): (JSC::FTL::DFG::LowerDFGToLLVM::compileNewArrayWithSize): (JSC::FTL::DFG::LowerDFGToLLVM::compileMakeRope): (JSC::FTL::DFG::LowerDFGToLLVM::compileNotifyWrite): (JSC::FTL::DFG::LowerDFGToLLVM::compileIsObjectOrNull): (JSC::FTL::DFG::LowerDFGToLLVM::compileIsFunction): (JSC::FTL::DFG::LowerDFGToLLVM::compileIn): (JSC::FTL::DFG::LowerDFGToLLVM::compileMaterializeNewObject): (JSC::FTL::DFG::LowerDFGToLLVM::compileMaterializeCreateActivation): (JSC::FTL::DFG::LowerDFGToLLVM::compileCheckWatchdogTimer): (JSC::FTL::DFG::LowerDFGToLLVM::allocatePropertyStorageWithSizeImpl): (JSC::FTL::DFG::LowerDFGToLLVM::allocateObject): (JSC::FTL::DFG::LowerDFGToLLVM::allocateJSArray): (JSC::FTL::DFG::LowerDFGToLLVM::buildTypeOf): (JSC::FTL::DFG::LowerDFGToLLVM::sensibleDoubleToInt32): (JSC::FTL::DFG::LowerDFGToLLVM::lazySlowPath): (JSC::FTL::DFG::LowerDFGToLLVM::speculate): (JSC::FTL::DFG::LowerDFGToLLVM::emitStoreBarrier): * ftl/FTLOperations.cpp: (JSC::FTL::operationMaterializeObjectInOSR): (JSC::FTL::compileFTLLazySlowPath): * ftl/FTLOperations.h: * ftl/FTLSlowPathCall.cpp: (JSC::FTL::SlowPathCallContext::SlowPathCallContext): (JSC::FTL::SlowPathCallContext::~SlowPathCallContext): (JSC::FTL::SlowPathCallContext::keyWithTarget): (JSC::FTL::SlowPathCallContext::makeCall): (JSC::FTL::callSiteIndexForCodeOrigin): (JSC::FTL::storeCodeOrigin): Deleted. (JSC::FTL::callOperation): Deleted. * ftl/FTLSlowPathCall.h: (JSC::FTL::callOperation): * ftl/FTLState.h: * ftl/FTLThunks.cpp: (JSC::FTL::genericGenerationThunkGenerator): (JSC::FTL::osrExitGenerationThunkGenerator): (JSC::FTL::lazySlowPathGenerationThunkGenerator): (JSC::FTL::registerClobberCheck): * ftl/FTLThunks.h: * interpreter/CallFrame.h: (JSC::CallSiteIndex::CallSiteIndex): (JSC::CallSiteIndex::operator bool): (JSC::CallSiteIndex::bits): * jit/CCallHelpers.h: (JSC::CCallHelpers::setupArgument): (JSC::CCallHelpers::setupArgumentsWithExecState): * jit/JITOperations.cpp: Source/WTF: Enables SharedTask to handle any function type, not just void(). It's probably better to use SharedTask instead of std::function in performance-sensitive code. std::function uses the system malloc and has copy semantics. SharedTask uses FastMalloc and has aliasing semantics. So, you can just trust that it will have sensible performance characteristics. * wtf/ParallelHelperPool.cpp: (WTF::ParallelHelperClient::~ParallelHelperClient): (WTF::ParallelHelperClient::setTask): (WTF::ParallelHelperClient::doSomeHelping): (WTF::ParallelHelperClient::runTaskInParallel): (WTF::ParallelHelperClient::finish): (WTF::ParallelHelperClient::claimTask): (WTF::ParallelHelperClient::runTask): (WTF::ParallelHelperPool::doSomeHelping): (WTF::ParallelHelperPool::helperThreadBody): * wtf/ParallelHelperPool.h: (WTF::ParallelHelperClient::setFunction): (WTF::ParallelHelperClient::runFunctionInParallel): (WTF::ParallelHelperClient::pool): * wtf/SharedTask.h: (WTF::createSharedTask): (WTF::SharedTask::SharedTask): Deleted. (WTF::SharedTask::~SharedTask): Deleted. (WTF::SharedTaskFunctor::SharedTaskFunctor): Deleted. Canonical link: https://commits.webkit.org/168154@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@190860 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-10-12 17:56:26 +00:00
// This will be an RAII thingy that will set up the necessary stack sizes and offsets and such.
class SlowPathCallContext {
public:
[JSC] Use DataIC for AccessCase https://bugs.webkit.org/show_bug.cgi?id=226072 Reviewed by Saam Barati and Filip Pizlo. Source/JavaScriptCore: This patch adds non-repatching IC for Baseline JIT in ARM64. This does not work in non-ARM64 architectures (including X64) due to the use of link-register. 1. We add non-repatching IC, which is enabled only in Baseline due to performance reason. We are using the existing IC in DFG and FTL. Non-repatching includes fast-path, and slow-path's operation function. 2. We still keep InlineAccess in all tiers. Removing that causes 0.3 ~ 1.0% regression in Speedometer2. This means that we still need some repatching when we first introduce stubs. 3. We add a mechanism to share generated code stubs in non-repatching IC. Currently, getter / setter / custom accessors are excluded since their code relies on JSGlobalObject, CodeBlock etc. which are not included in AccessCase's data structure. 4. This patch still relies on that CodeBlock will be destroyed synchronously since we need to ensure that sharing-hash-table does not include already-dead JIT code stubs. We can fix it (e.g. annotating epoch to these stubs, bump them in finalizeUnconditionally), but we avoid doing that to prevent from further enlarging this patch. This patch is already significant in its size. 5. Added callOperation(Address) support in CCallHelpers, which can save the target in nonArgGPR0, and call it so that we can use Address including GPR which is also used for arguments. Performance is neutral in JetStream2 and Speedometer2. But it offers the way to remove some code generation in Baseline. * assembler/MacroAssemblerARM64E.h: (JSC::MacroAssemblerARM64E::call): * bytecode/AccessCase.cpp: (JSC::AccessCase::create): (JSC::AccessCase::createTransition): (JSC::AccessCase::createDelete): (JSC::AccessCase::createCheckPrivateBrand): (JSC::AccessCase::createSetPrivateBrand): (JSC::AccessCase::fromStructureStubInfo): (JSC::AccessCase::clone const): (JSC::AccessCase::generateWithGuard): (JSC::AccessCase::generateImpl): (JSC::AccessCase::canBeShared): * bytecode/AccessCase.h: (JSC::AccessCase::hash const): (JSC::AccessCase::AccessCase): (JSC::SharedJITStubSet::Hash::Key::Key): (JSC::SharedJITStubSet::Hash::Key::isHashTableDeletedValue const): (JSC::SharedJITStubSet::Hash::Key::operator==): (JSC::SharedJITStubSet::Hash::hash): (JSC::SharedJITStubSet::Hash::equal): (JSC::SharedJITStubSet::Searcher::Translator::hash): (JSC::SharedJITStubSet::Searcher::Translator::equal): (JSC::SharedJITStubSet::PointerTranslator::hash): (JSC::SharedJITStubSet::PointerTranslator::equal): (JSC::SharedJITStubSet::add): (JSC::SharedJITStubSet::remove): (JSC::SharedJITStubSet::find): * bytecode/ByValInfo.h: (JSC::ByValInfo::setUp): (JSC::ByValInfo::offsetOfSlowOperation): (JSC::ByValInfo::offsetOfNotIndexJumpTarget): (JSC::ByValInfo::offsetOfBadTypeJumpTarget): * bytecode/CallLinkInfo.cpp: (JSC::CallLinkInfo::initializeDirectCall): (JSC::CallLinkInfo::setDirectCallTarget): * bytecode/CodeBlock.h: (JSC::CodeBlock::useDataIC const): * bytecode/GetterSetterAccessCase.cpp: (JSC::GetterSetterAccessCase::create): (JSC::GetterSetterAccessCase::clone const): (JSC::GetterSetterAccessCase::emitDOMJITGetter): * bytecode/GetterSetterAccessCase.h: * bytecode/InlineAccess.cpp: (JSC::getScratchRegister): (JSC::InlineAccess::rewireStubAsJumpInAccessNotUsingInlineAccess): (JSC::InlineAccess::rewireStubAsJumpInAccess): (JSC::InlineAccess::resetStubAsJumpInAccess): (JSC::InlineAccess::resetStubAsJumpInAccessNotUsingInlineAccess): (JSC::InlineAccess::rewireStubAsJump): Deleted. * bytecode/InlineAccess.h: * bytecode/InstanceOfAccessCase.cpp: (JSC::InstanceOfAccessCase::create): (JSC::InstanceOfAccessCase::clone const): * bytecode/InstanceOfAccessCase.h: * bytecode/IntrinsicGetterAccessCase.cpp: (JSC::IntrinsicGetterAccessCase::create): (JSC::IntrinsicGetterAccessCase::clone const): * bytecode/IntrinsicGetterAccessCase.h: * bytecode/ModuleNamespaceAccessCase.cpp: (JSC::ModuleNamespaceAccessCase::create): (JSC::ModuleNamespaceAccessCase::clone const): * bytecode/ModuleNamespaceAccessCase.h: * bytecode/ObjectPropertyConditionSet.h: (JSC::ObjectPropertyConditionSet::hash const): (JSC::ObjectPropertyConditionSet::operator==): (JSC::ObjectPropertyConditionSet::operator!=): * bytecode/PolymorphicAccess.cpp: (JSC::AccessGenerationState::installWatchpoint): (JSC::AccessGenerationState::succeed): (JSC::AccessGenerationState::preserveLiveRegistersToStackForCallWithoutExceptions): (JSC::PolymorphicAccess::addCases): (JSC::PolymorphicAccess::addCase): (JSC::PolymorphicAccess::visitWeak const): (JSC::PolymorphicAccess::regenerate): * bytecode/PolymorphicAccess.h: (JSC::AccessGenerationState::AccessGenerationState): (JSC::AccessGenerationState::preserveLiveRegistersToStackForCallWithoutExceptions): * bytecode/ProxyableAccessCase.cpp: (JSC::ProxyableAccessCase::create): (JSC::ProxyableAccessCase::clone const): * bytecode/ProxyableAccessCase.h: * bytecode/StructureStubInfo.cpp: (JSC::StructureStubInfo::StructureStubInfo): (JSC::StructureStubInfo::addAccessCase): (JSC::StructureStubInfo::reset): * bytecode/StructureStubInfo.h: (JSC::StructureStubInfo::offsetOfCodePtr): (JSC::StructureStubInfo::offsetOfSlowPathStartLocation): (JSC::StructureStubInfo::offsetOfSlowOperation): (JSC::StructureStubInfo::patchableJump): Deleted. * dfg/DFGJITCompiler.h: (JSC::DFG::JITCompiler::appendCall): * dfg/DFGSlowPathGenerator.h: (JSC::DFG::slowPathICCall): * dfg/DFGSpeculativeJIT.cpp: (JSC::DFG::SpeculativeJIT::compileGetById): (JSC::DFG::SpeculativeJIT::compileGetByIdFlush): (JSC::DFG::SpeculativeJIT::compileDeleteById): (JSC::DFG::SpeculativeJIT::compileDeleteByVal): (JSC::DFG::SpeculativeJIT::compileInById): (JSC::DFG::SpeculativeJIT::compileInByVal): (JSC::DFG::SpeculativeJIT::compileGetPrivateNameByVal): (JSC::DFG::SpeculativeJIT::compileGetPrivateNameById): (JSC::DFG::SpeculativeJIT::compilePutPrivateNameById): (JSC::DFG::SpeculativeJIT::compileCheckPrivateBrand): (JSC::DFG::SpeculativeJIT::compileSetPrivateBrand): (JSC::DFG::SpeculativeJIT::compileInstanceOfForCells): (JSC::DFG::SpeculativeJIT::compileInstanceOf): (JSC::DFG::SpeculativeJIT::compilePutByIdFlush): (JSC::DFG::SpeculativeJIT::compilePutById): (JSC::DFG::SpeculativeJIT::compilePutByIdDirect): (JSC::DFG::SpeculativeJIT::cachedPutById): * dfg/DFGSpeculativeJIT.h: (JSC::DFG::SpeculativeJIT::callOperation): (JSC::DFG::SpeculativeJIT::appendCall): (JSC::DFG::SpeculativeJIT::appendCallSetResult): * dfg/DFGSpeculativeJIT32_64.cpp: (JSC::DFG::SpeculativeJIT::cachedGetById): (JSC::DFG::SpeculativeJIT::cachedGetByIdWithThis): (JSC::DFG::SpeculativeJIT::compile): * dfg/DFGSpeculativeJIT64.cpp: (JSC::DFG::SpeculativeJIT::cachedGetById): (JSC::DFG::SpeculativeJIT::cachedGetByIdWithThis): (JSC::DFG::SpeculativeJIT::compile): * ftl/FTLLowerDFGToB3.cpp: (JSC::FTL::DFG::LowerDFGToB3::getPrivateName): (JSC::FTL::DFG::LowerDFGToB3::compilePrivateBrandAccess): (JSC::FTL::DFG::LowerDFGToB3::cachedPutById): (JSC::FTL::DFG::LowerDFGToB3::compileGetByVal): (JSC::FTL::DFG::LowerDFGToB3::compileDelBy): (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq): * ftl/FTLSlowPathCall.cpp: (JSC::FTL::SlowPathCallContext::SlowPathCallContext): (JSC::FTL::SlowPathCallContext::keyWithTarget const): (JSC::FTL::SlowPathCallContext::makeCall): * ftl/FTLSlowPathCall.h: (JSC::FTL::callOperation): * ftl/FTLSlowPathCallKey.cpp: (JSC::FTL::SlowPathCallKey::dump const): * ftl/FTLSlowPathCallKey.h: (JSC::FTL::SlowPathCallKey::SlowPathCallKey): (JSC::FTL::SlowPathCallKey::indirectOffset const): (JSC::FTL::SlowPathCallKey::withCallTarget): (JSC::FTL::SlowPathCallKey::operator== const): (JSC::FTL::SlowPathCallKey::hash const): * ftl/FTLThunks.cpp: (JSC::FTL::genericGenerationThunkGenerator): (JSC::FTL::slowPathCallThunkGenerator): * jit/AssemblyHelpers.cpp: (JSC::AssemblyHelpers::emitVirtualCall): * jit/CCallHelpers.cpp: (JSC::CCallHelpers::emitJITCodeOver): * jit/CCallHelpers.h: (JSC::CCallHelpers::ArgCollection::ArgCollection): (JSC::CCallHelpers::ArgCollection::pushRegArg): (JSC::CCallHelpers::ArgCollection::pushExtraRegArg): (JSC::CCallHelpers::ArgCollection::pushNonArg): (JSC::CCallHelpers::ArgCollection::addGPRArg): (JSC::CCallHelpers::ArgCollection::addGPRExtraArg): (JSC::CCallHelpers::ArgCollection::addStackArg): (JSC::CCallHelpers::ArgCollection::addPoke): (JSC::CCallHelpers::calculatePokeOffset): (JSC::CCallHelpers::pokeForArgument): (JSC::CCallHelpers::stackAligned): (JSC::CCallHelpers::marshallArgumentRegister): (JSC::CCallHelpers::setupArgumentsImpl): (JSC::CCallHelpers::pokeArgumentsAligned): (JSC::CCallHelpers::std::is_integral<CURRENT_ARGUMENT_TYPE>::value): (JSC::CCallHelpers::std::is_pointer<CURRENT_ARGUMENT_TYPE>::value): (JSC::CCallHelpers::setupArgumentsEntryImpl): (JSC::CCallHelpers::setupArguments): (JSC::CCallHelpers::setupArgumentsForIndirectCall): * jit/GCAwareJITStubRoutine.cpp: (JSC::GCAwareJITStubRoutine::GCAwareJITStubRoutine): (JSC::GCAwareJITStubRoutine::makeGCAware): (JSC::GCAwareJITStubRoutine::observeZeroRefCount): (JSC::PolymorphicAccessJITStubRoutine::PolymorphicAccessJITStubRoutine): (JSC::PolymorphicAccessJITStubRoutine::observeZeroRefCount): (JSC::PolymorphicAccessJITStubRoutine::computeHash): (JSC::MarkingGCAwareJITStubRoutine::MarkingGCAwareJITStubRoutine): (JSC::GCAwareJITStubRoutineWithExceptionHandler::GCAwareJITStubRoutineWithExceptionHandler): (JSC::createICJITStubRoutine): (JSC::createJITStubRoutine): Deleted. * jit/GCAwareJITStubRoutine.h: (JSC::GCAwareJITStubRoutine::create): (JSC::PolymorphicAccessJITStubRoutine::cases const): (JSC::PolymorphicAccessJITStubRoutine::weakStructures const): (JSC::PolymorphicAccessJITStubRoutine::hash const): * jit/GPRInfo.h: * jit/JIT.cpp: (JSC::JIT::link): * jit/JIT.h: * jit/JITCall.cpp: (JSC::JIT::emit_op_iterator_open): (JSC::JIT::emitSlow_op_iterator_open): (JSC::JIT::emit_op_iterator_next): (JSC::JIT::emitSlow_op_iterator_next): * jit/JITCall32_64.cpp: (JSC::JIT::emit_op_iterator_open): (JSC::JIT::emit_op_iterator_next): * jit/JITCode.h: (JSC::JITCode::useDataIC): * jit/JITInlineCacheGenerator.cpp: (JSC::JITInlineCacheGenerator::JITInlineCacheGenerator): (JSC::JITInlineCacheGenerator::finalize): (JSC::JITByIdGenerator::JITByIdGenerator): (JSC::JITByIdGenerator::finalize): (JSC::JITByIdGenerator::generateFastCommon): (JSC::JITGetByIdGenerator::JITGetByIdGenerator): (JSC::JITGetByIdWithThisGenerator::JITGetByIdWithThisGenerator): (JSC::JITPutByIdGenerator::JITPutByIdGenerator): (JSC::JITDelByValGenerator::JITDelByValGenerator): (JSC::JITDelByValGenerator::generateFastPath): (JSC::JITDelByValGenerator::finalize): (JSC::JITDelByIdGenerator::JITDelByIdGenerator): (JSC::JITDelByIdGenerator::generateFastPath): (JSC::JITDelByIdGenerator::finalize): (JSC::JITInByValGenerator::JITInByValGenerator): (JSC::JITInByValGenerator::generateFastPath): (JSC::JITInByValGenerator::finalize): (JSC::JITInByIdGenerator::JITInByIdGenerator): (JSC::JITInstanceOfGenerator::JITInstanceOfGenerator): (JSC::JITInstanceOfGenerator::generateFastPath): (JSC::JITInstanceOfGenerator::finalize): (JSC::JITGetByValGenerator::JITGetByValGenerator): (JSC::JITGetByValGenerator::generateFastPath): (JSC::JITGetByValGenerator::finalize): (JSC::JITPrivateBrandAccessGenerator::JITPrivateBrandAccessGenerator): (JSC::JITPrivateBrandAccessGenerator::generateFastPath): (JSC::JITPrivateBrandAccessGenerator::finalize): * jit/JITInlineCacheGenerator.h: (JSC::JITGetByIdGenerator::JITGetByIdGenerator): Deleted. (JSC::JITGetByIdWithThisGenerator::JITGetByIdWithThisGenerator): Deleted. (JSC::JITPutByIdGenerator::JITPutByIdGenerator): Deleted. (JSC::JITDelByValGenerator::JITDelByValGenerator): Deleted. (JSC::JITDelByValGenerator::slowPathJump const): Deleted. (JSC::JITDelByIdGenerator::JITDelByIdGenerator): Deleted. (JSC::JITDelByIdGenerator::slowPathJump const): Deleted. (JSC::JITInByIdGenerator::JITInByIdGenerator): Deleted. (JSC::JITInstanceOfGenerator::JITInstanceOfGenerator): Deleted. (JSC::JITGetByValGenerator::JITGetByValGenerator): Deleted. (JSC::JITGetByValGenerator::slowPathJump const): Deleted. (JSC::JITPrivateBrandAccessGenerator::JITPrivateBrandAccessGenerator): Deleted. (JSC::JITPrivateBrandAccessGenerator::slowPathJump const): Deleted. * jit/JITInlines.h: (JSC::JIT::emitLoadForArrayMode): (JSC::JIT::appendCallWithExceptionCheck): (JSC::JIT::appendCallWithExceptionCheckSetJSValueResult): (JSC::JIT::appendCallWithExceptionCheckSetJSValueResultWithProfile): * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_instanceof): (JSC::JIT::emitSlow_op_instanceof): (JSC::JIT::privateCompileHasIndexedProperty): (JSC::JIT::emit_op_has_enumerable_indexed_property): (JSC::JIT::emitSlow_op_has_enumerable_indexed_property): * jit/JITOpcodes32_64.cpp: (JSC::JIT::emit_op_instanceof): (JSC::JIT::privateCompileHasIndexedProperty): (JSC::JIT::emit_op_has_enumerable_indexed_property): * jit/JITOperations.cpp: (JSC::JSC_DEFINE_JIT_OPERATION): * jit/JITPropertyAccess.cpp: (JSC::JIT::emit_op_get_by_val): (JSC::JIT::emitSlow_op_get_by_val): (JSC::JIT::slow_op_get_by_val_prepareCallGenerator): (JSC::JIT::emit_op_get_private_name): (JSC::JIT::emitSlow_op_get_private_name): (JSC::JIT::slow_op_get_private_name_prepareCallGenerator): (JSC::JIT::emit_op_set_private_brand): (JSC::JIT::emitSlow_op_set_private_brand): (JSC::JIT::emit_op_check_private_brand): (JSC::JIT::emitSlow_op_check_private_brand): (JSC::JIT::emit_op_put_by_val): (JSC::JIT::emitGenericContiguousPutByVal): (JSC::JIT::emitArrayStoragePutByVal): (JSC::JIT::emitPutByValWithCachedId): (JSC::JIT::emitSlow_op_put_by_val): (JSC::JIT::slow_op_put_by_val_prepareCallGenerator): (JSC::JIT::emit_op_put_private_name): (JSC::JIT::emitSlow_op_put_private_name): (JSC::JIT::slow_op_put_private_name_prepareCallGenerator): (JSC::JIT::emit_op_del_by_id): (JSC::JIT::emitSlow_op_del_by_id): (JSC::JIT::slow_op_del_by_id_prepareCallGenerator): (JSC::JIT::emit_op_del_by_val): (JSC::JIT::emitSlow_op_del_by_val): (JSC::JIT::slow_op_del_by_val_prepareCallGenerator): (JSC::JIT::emit_op_try_get_by_id): (JSC::JIT::emitSlow_op_try_get_by_id): (JSC::JIT::emit_op_get_by_id_direct): (JSC::JIT::emitSlow_op_get_by_id_direct): (JSC::JIT::emit_op_get_by_id): (JSC::JIT::emit_op_get_by_id_with_this): (JSC::JIT::emitSlow_op_get_by_id): (JSC::JIT::slow_op_get_by_id_prepareCallGenerator): (JSC::JIT::emitSlow_op_get_by_id_with_this): (JSC::JIT::slow_op_get_by_id_with_this_prepareCallGenerator): (JSC::JIT::emit_op_put_by_id): (JSC::JIT::emitSlow_op_put_by_id): (JSC::JIT::slow_op_put_by_id_prepareCallGenerator): (JSC::JIT::emit_op_in_by_id): (JSC::JIT::emitSlow_op_in_by_id): (JSC::JIT::emit_op_in_by_val): (JSC::JIT::emitSlow_op_in_by_val): (JSC::JIT::privateCompilePutByVal): (JSC::JIT::privateCompilePutPrivateNameWithCachedId): (JSC::JIT::privateCompilePutByValWithCachedId): (JSC::JIT::emitDoubleLoad): (JSC::JIT::emitContiguousLoad): (JSC::JIT::emitArrayStorageLoad): (JSC::JIT::emitIntTypedArrayPutByVal): (JSC::JIT::emitFloatTypedArrayPutByVal): * jit/JITPropertyAccess32_64.cpp: (JSC::JIT::emit_op_del_by_id): (JSC::JIT::emit_op_del_by_val): (JSC::JIT::emit_op_get_by_val): (JSC::JIT::emit_op_get_private_name): (JSC::JIT::emit_op_set_private_brand): (JSC::JIT::emit_op_check_private_brand): (JSC::JIT::emit_op_put_by_val): (JSC::JIT::emitGenericContiguousPutByVal): (JSC::JIT::emitArrayStoragePutByVal): (JSC::JIT::emit_op_try_get_by_id): (JSC::JIT::emit_op_get_by_id_direct): (JSC::JIT::emit_op_get_by_id): (JSC::JIT::emit_op_get_by_id_with_this): (JSC::JIT::emit_op_put_by_id): (JSC::JIT::emit_op_in_by_id): (JSC::JIT::emit_op_in_by_val): * jit/JITStubRoutine.h: * jit/PolymorphicCallStubRoutine.cpp: (JSC::PolymorphicCallStubRoutine::PolymorphicCallStubRoutine): * jit/Repatch.cpp: (JSC::readPutICCallTarget): (JSC::repatchSlowPathCall): (JSC::tryCacheGetBy): (JSC::repatchGetBy): (JSC::tryCacheArrayGetByVal): (JSC::repatchArrayGetByVal): (JSC::tryCachePutByID): (JSC::repatchPutByID): (JSC::tryCacheDeleteBy): (JSC::repatchDeleteBy): (JSC::tryCacheInBy): (JSC::repatchInBy): (JSC::tryCacheCheckPrivateBrand): (JSC::repatchCheckPrivateBrand): (JSC::tryCacheSetPrivateBrand): (JSC::repatchSetPrivateBrand): (JSC::tryCacheInstanceOf): (JSC::repatchInstanceOf): (JSC::linkSlowFor): (JSC::linkVirtualFor): (JSC::resetGetBy): (JSC::resetPutByID): (JSC::resetDelBy): (JSC::resetInBy): (JSC::resetInstanceOf): (JSC::resetCheckPrivateBrand): (JSC::resetSetPrivateBrand): (JSC::resetPatchableJump): Deleted. * jit/Repatch.h: * runtime/Options.cpp: (JSC::Options::recomputeDependentOptions): * runtime/OptionsList.h: * runtime/StructureIDTable.h: * runtime/VM.cpp: (JSC::VM::VM): (JSC::VM::~VM): * runtime/VM.h: Tools: * Scripts/run-jsc-stress-tests: Canonical link: https://commits.webkit.org/238638@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@278656 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-06-09 11:17:36 +00:00
SlowPathCallContext(RegisterSet usedRegisters, CCallHelpers&, unsigned numArgs, GPRReg returnRegister, GPRReg indirectCallTargetRegister);
FTL should generate code to call slow paths lazily https://bugs.webkit.org/show_bug.cgi?id=149936 Reviewed by Saam Barati. Source/JavaScriptCore: We often have complex slow paths in FTL-generated code. Those slow paths may never run. Even if they do run, they don't need stellar performance. So, it doesn't make sense to have LLVM worry about compiling such slow path code. This patch enables us to use our own MacroAssembler for compiling the slow path inside FTL code. It does this by using a crazy lambda thingy (see FTLLowerDFGToLLVM.cpp's lazySlowPath() and its documentation). The result is quite natural to use. Even for straight slow path calls via something like vmCall(), the lazySlowPath offers the benefit that the call marshalling and the exception checking are not expressed using LLVM IR and do not require LLVM to think about it. It also has the benefit that we never generate the code if it never runs. That's great, since function calls usually involve ~10 instructions total (move arguments to argument registers, make the call, check exception, etc.). This patch adds the lazy slow path abstraction and uses it for some slow paths in the FTL. The code we generate with lazy slow paths is worse than the code that LLVM would have generated. Therefore, a lazy slow path only makes sense when we have strong evidence that the slow path will execute infrequently relative to the fast path. This completely precludes the use of lazy slow paths for out-of-line Nodes that unconditionally call a C++ function. It also precludes their use for the GetByVal out-of-bounds handler, since when we generate a GetByVal with an out-of-bounds handler it means that we only know that the out-of-bounds case executed at least once. So, for all we know, it may actually be the common case. So, this patch just deployed the lazy slow path for GC slow paths and masquerades-as-undefined slow paths. It makes sense for GC slow paths because those have a statistical guarantee of slow path frequency - probably bounded at less than 1/10. It makes sense for masquerades-as- undefined because we can say quite confidently that this is an uncommon scenario on the modern Web. Something that's always been challenging about abstractions involving the MacroAssembler is that linking is a separate phase, and there is no way for someone who is just given access to the MacroAssembler& to emit code that requires linking, since linking happens once we have emitted all code and we are creating the LinkBuffer. Moreover, the FTL requires that the final parts of linking happen on the main thread. This patch ran into this issue, and solved it comprehensively, by introducing MacroAssembler::addLinkTask(). This takes a lambda and runs it at the bitter end of linking - when performFinalization() is called. This ensure that the task added by addLinkTask() runs on the main thread. This patch doesn't replace all of the previously existing idioms for dealing with this issue; we can do that later. This shows small speed-ups on a bunch of things. No big win on any benchmark aggregate. But mainly this is done for https://bugs.webkit.org/show_bug.cgi?id=149852, where we found that outlining the slow path in this way was a significant speed boost. * CMakeLists.txt: * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: * JavaScriptCore.xcodeproj/project.pbxproj: * assembler/AbstractMacroAssembler.h: (JSC::AbstractMacroAssembler::replaceWithAddressComputation): (JSC::AbstractMacroAssembler::addLinkTask): (JSC::AbstractMacroAssembler::AbstractMacroAssembler): * assembler/LinkBuffer.cpp: (JSC::LinkBuffer::linkCode): (JSC::LinkBuffer::allocate): (JSC::LinkBuffer::performFinalization): * assembler/LinkBuffer.h: (JSC::LinkBuffer::wasAlreadyDisassembled): (JSC::LinkBuffer::didAlreadyDisassemble): (JSC::LinkBuffer::vm): (JSC::LinkBuffer::executableOffsetFor): * bytecode/CodeOrigin.h: (JSC::CodeOrigin::CodeOrigin): (JSC::CodeOrigin::isSet): (JSC::CodeOrigin::operator bool): (JSC::CodeOrigin::isHashTableDeletedValue): (JSC::CodeOrigin::operator!): Deleted. * ftl/FTLCompile.cpp: (JSC::FTL::mmAllocateDataSection): * ftl/FTLInlineCacheDescriptor.h: (JSC::FTL::InlineCacheDescriptor::InlineCacheDescriptor): (JSC::FTL::CheckInDescriptor::CheckInDescriptor): (JSC::FTL::LazySlowPathDescriptor::LazySlowPathDescriptor): * ftl/FTLJITCode.h: * ftl/FTLJITFinalizer.cpp: (JSC::FTL::JITFinalizer::finalizeFunction): * ftl/FTLJITFinalizer.h: * ftl/FTLLazySlowPath.cpp: Added. (JSC::FTL::LazySlowPath::LazySlowPath): (JSC::FTL::LazySlowPath::~LazySlowPath): (JSC::FTL::LazySlowPath::generate): * ftl/FTLLazySlowPath.h: Added. (JSC::FTL::LazySlowPath::createGenerator): (JSC::FTL::LazySlowPath::patchpoint): (JSC::FTL::LazySlowPath::usedRegisters): (JSC::FTL::LazySlowPath::callSiteIndex): (JSC::FTL::LazySlowPath::stub): * ftl/FTLLazySlowPathCall.h: Added. (JSC::FTL::createLazyCallGenerator): * ftl/FTLLowerDFGToLLVM.cpp: (JSC::FTL::DFG::LowerDFGToLLVM::compileCreateActivation): (JSC::FTL::DFG::LowerDFGToLLVM::compileNewFunction): (JSC::FTL::DFG::LowerDFGToLLVM::compileCreateDirectArguments): (JSC::FTL::DFG::LowerDFGToLLVM::compileNewArrayWithSize): (JSC::FTL::DFG::LowerDFGToLLVM::compileMakeRope): (JSC::FTL::DFG::LowerDFGToLLVM::compileNotifyWrite): (JSC::FTL::DFG::LowerDFGToLLVM::compileIsObjectOrNull): (JSC::FTL::DFG::LowerDFGToLLVM::compileIsFunction): (JSC::FTL::DFG::LowerDFGToLLVM::compileIn): (JSC::FTL::DFG::LowerDFGToLLVM::compileMaterializeNewObject): (JSC::FTL::DFG::LowerDFGToLLVM::compileMaterializeCreateActivation): (JSC::FTL::DFG::LowerDFGToLLVM::compileCheckWatchdogTimer): (JSC::FTL::DFG::LowerDFGToLLVM::allocatePropertyStorageWithSizeImpl): (JSC::FTL::DFG::LowerDFGToLLVM::allocateObject): (JSC::FTL::DFG::LowerDFGToLLVM::allocateJSArray): (JSC::FTL::DFG::LowerDFGToLLVM::buildTypeOf): (JSC::FTL::DFG::LowerDFGToLLVM::sensibleDoubleToInt32): (JSC::FTL::DFG::LowerDFGToLLVM::lazySlowPath): (JSC::FTL::DFG::LowerDFGToLLVM::speculate): (JSC::FTL::DFG::LowerDFGToLLVM::emitStoreBarrier): * ftl/FTLOperations.cpp: (JSC::FTL::operationMaterializeObjectInOSR): (JSC::FTL::compileFTLLazySlowPath): * ftl/FTLOperations.h: * ftl/FTLSlowPathCall.cpp: (JSC::FTL::SlowPathCallContext::SlowPathCallContext): (JSC::FTL::SlowPathCallContext::~SlowPathCallContext): (JSC::FTL::SlowPathCallContext::keyWithTarget): (JSC::FTL::SlowPathCallContext::makeCall): (JSC::FTL::callSiteIndexForCodeOrigin): (JSC::FTL::storeCodeOrigin): Deleted. (JSC::FTL::callOperation): Deleted. * ftl/FTLSlowPathCall.h: (JSC::FTL::callOperation): * ftl/FTLState.h: * ftl/FTLThunks.cpp: (JSC::FTL::genericGenerationThunkGenerator): (JSC::FTL::osrExitGenerationThunkGenerator): (JSC::FTL::lazySlowPathGenerationThunkGenerator): (JSC::FTL::registerClobberCheck): * ftl/FTLThunks.h: * interpreter/CallFrame.h: (JSC::CallSiteIndex::CallSiteIndex): (JSC::CallSiteIndex::operator bool): (JSC::CallSiteIndex::bits): * jit/CCallHelpers.h: (JSC::CCallHelpers::setupArgument): (JSC::CCallHelpers::setupArgumentsWithExecState): * jit/JITOperations.cpp: Source/WTF: Enables SharedTask to handle any function type, not just void(). It's probably better to use SharedTask instead of std::function in performance-sensitive code. std::function uses the system malloc and has copy semantics. SharedTask uses FastMalloc and has aliasing semantics. So, you can just trust that it will have sensible performance characteristics. * wtf/ParallelHelperPool.cpp: (WTF::ParallelHelperClient::~ParallelHelperClient): (WTF::ParallelHelperClient::setTask): (WTF::ParallelHelperClient::doSomeHelping): (WTF::ParallelHelperClient::runTaskInParallel): (WTF::ParallelHelperClient::finish): (WTF::ParallelHelperClient::claimTask): (WTF::ParallelHelperClient::runTask): (WTF::ParallelHelperPool::doSomeHelping): (WTF::ParallelHelperPool::helperThreadBody): * wtf/ParallelHelperPool.h: (WTF::ParallelHelperClient::setFunction): (WTF::ParallelHelperClient::runFunctionInParallel): (WTF::ParallelHelperClient::pool): * wtf/SharedTask.h: (WTF::createSharedTask): (WTF::SharedTask::SharedTask): Deleted. (WTF::SharedTask::~SharedTask): Deleted. (WTF::SharedTaskFunctor::SharedTaskFunctor): Deleted. Canonical link: https://commits.webkit.org/168154@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@190860 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-10-12 17:56:26 +00:00
~SlowPathCallContext();
// NOTE: The call that this returns is already going to be linked by the JIT using addLinkTask(),
// so there is no need for you to link it yourself.
Templatize CodePtr/Refs/FunctionPtrs with PtrTags. https://bugs.webkit.org/show_bug.cgi?id=184702 <rdar://problem/35391681> Reviewed by Filip Pizlo and Saam Barati. Source/JavaScriptCore: 1. Templatized MacroAssemblerCodePtr/Ref, FunctionPtr, and CodeLocation variants to take a PtrTag template argument. 2. Replaced some uses of raw pointers with the equivalent CodePtr / FunctionPtr. * assembler/AbstractMacroAssembler.h: (JSC::AbstractMacroAssembler::differenceBetweenCodePtr): (JSC::AbstractMacroAssembler::linkJump): (JSC::AbstractMacroAssembler::linkPointer): (JSC::AbstractMacroAssembler::getLinkerAddress): (JSC::AbstractMacroAssembler::repatchJump): (JSC::AbstractMacroAssembler::repatchJumpToNop): (JSC::AbstractMacroAssembler::repatchNearCall): (JSC::AbstractMacroAssembler::repatchCompact): (JSC::AbstractMacroAssembler::repatchInt32): (JSC::AbstractMacroAssembler::repatchPointer): (JSC::AbstractMacroAssembler::readPointer): (JSC::AbstractMacroAssembler::replaceWithLoad): (JSC::AbstractMacroAssembler::replaceWithAddressComputation): * assembler/CodeLocation.h: (JSC::CodeLocationCommon:: const): (JSC::CodeLocationCommon::CodeLocationCommon): (JSC::CodeLocationInstruction::CodeLocationInstruction): (JSC::CodeLocationLabel::CodeLocationLabel): (JSC::CodeLocationLabel::retagged): (JSC::CodeLocationLabel:: const): (JSC::CodeLocationJump::CodeLocationJump): (JSC::CodeLocationJump::retagged): (JSC::CodeLocationCall::CodeLocationCall): (JSC::CodeLocationCall::retagged): (JSC::CodeLocationNearCall::CodeLocationNearCall): (JSC::CodeLocationDataLabel32::CodeLocationDataLabel32): (JSC::CodeLocationDataLabelCompact::CodeLocationDataLabelCompact): (JSC::CodeLocationDataLabelPtr::CodeLocationDataLabelPtr): (JSC::CodeLocationConvertibleLoad::CodeLocationConvertibleLoad): (JSC::CodeLocationCommon<tag>::instructionAtOffset): (JSC::CodeLocationCommon<tag>::labelAtOffset): (JSC::CodeLocationCommon<tag>::jumpAtOffset): (JSC::CodeLocationCommon<tag>::callAtOffset): (JSC::CodeLocationCommon<tag>::nearCallAtOffset): (JSC::CodeLocationCommon<tag>::dataLabelPtrAtOffset): (JSC::CodeLocationCommon<tag>::dataLabel32AtOffset): (JSC::CodeLocationCommon<tag>::dataLabelCompactAtOffset): (JSC::CodeLocationCommon<tag>::convertibleLoadAtOffset): (JSC::CodeLocationCommon::instructionAtOffset): Deleted. (JSC::CodeLocationCommon::labelAtOffset): Deleted. (JSC::CodeLocationCommon::jumpAtOffset): Deleted. (JSC::CodeLocationCommon::callAtOffset): Deleted. (JSC::CodeLocationCommon::nearCallAtOffset): Deleted. (JSC::CodeLocationCommon::dataLabelPtrAtOffset): Deleted. (JSC::CodeLocationCommon::dataLabel32AtOffset): Deleted. (JSC::CodeLocationCommon::dataLabelCompactAtOffset): Deleted. (JSC::CodeLocationCommon::convertibleLoadAtOffset): Deleted. * assembler/LinkBuffer.cpp: (JSC::LinkBuffer::finalizeCodeWithoutDisassemblyImpl): (JSC::LinkBuffer::finalizeCodeWithDisassemblyImpl): (JSC::LinkBuffer::finalizeCodeWithoutDisassembly): Deleted. (JSC::LinkBuffer::finalizeCodeWithDisassembly): Deleted. * assembler/LinkBuffer.h: (JSC::LinkBuffer::link): (JSC::LinkBuffer::patch): (JSC::LinkBuffer::entrypoint): (JSC::LinkBuffer::locationOf): (JSC::LinkBuffer::locationOfNearCall): (JSC::LinkBuffer::finalizeCodeWithoutDisassembly): (JSC::LinkBuffer::finalizeCodeWithDisassembly): (JSC::LinkBuffer::trampolineAt): * assembler/MacroAssemblerARM.h: (JSC::MacroAssemblerARM::readCallTarget): (JSC::MacroAssemblerARM::replaceWithJump): (JSC::MacroAssemblerARM::startOfPatchableBranch32WithPatchOnAddress): (JSC::MacroAssemblerARM::startOfPatchableBranchPtrWithPatchOnAddress): (JSC::MacroAssemblerARM::startOfBranchPtrWithPatchOnRegister): (JSC::MacroAssemblerARM::revertJumpReplacementToBranchPtrWithPatch): (JSC::MacroAssemblerARM::revertJumpReplacementToPatchableBranch32WithPatch): (JSC::MacroAssemblerARM::revertJumpReplacementToPatchableBranchPtrWithPatch): (JSC::MacroAssemblerARM::repatchCall): (JSC::MacroAssemblerARM::linkCall): * assembler/MacroAssemblerARM64.h: (JSC::MacroAssemblerARM64::readCallTarget): (JSC::MacroAssemblerARM64::replaceWithVMHalt): (JSC::MacroAssemblerARM64::replaceWithJump): (JSC::MacroAssemblerARM64::startOfBranchPtrWithPatchOnRegister): (JSC::MacroAssemblerARM64::startOfPatchableBranchPtrWithPatchOnAddress): (JSC::MacroAssemblerARM64::startOfPatchableBranch32WithPatchOnAddress): (JSC::MacroAssemblerARM64::revertJumpReplacementToBranchPtrWithPatch): (JSC::MacroAssemblerARM64::revertJumpReplacementToPatchableBranchPtrWithPatch): (JSC::MacroAssemblerARM64::revertJumpReplacementToPatchableBranch32WithPatch): (JSC::MacroAssemblerARM64::repatchCall): (JSC::MacroAssemblerARM64::linkCall): * assembler/MacroAssemblerARMv7.h: (JSC::MacroAssemblerARMv7::replaceWithJump): (JSC::MacroAssemblerARMv7::readCallTarget): (JSC::MacroAssemblerARMv7::startOfBranchPtrWithPatchOnRegister): (JSC::MacroAssemblerARMv7::revertJumpReplacementToBranchPtrWithPatch): (JSC::MacroAssemblerARMv7::startOfPatchableBranchPtrWithPatchOnAddress): (JSC::MacroAssemblerARMv7::startOfPatchableBranch32WithPatchOnAddress): (JSC::MacroAssemblerARMv7::revertJumpReplacementToPatchableBranchPtrWithPatch): (JSC::MacroAssemblerARMv7::revertJumpReplacementToPatchableBranch32WithPatch): (JSC::MacroAssemblerARMv7::repatchCall): (JSC::MacroAssemblerARMv7::linkCall): * assembler/MacroAssemblerCodeRef.cpp: (JSC::MacroAssemblerCodePtrBase::dumpWithName): (JSC::MacroAssemblerCodeRefBase::tryToDisassemble): (JSC::MacroAssemblerCodeRefBase::disassembly): (JSC::MacroAssemblerCodePtr::createLLIntCodePtr): Deleted. (JSC::MacroAssemblerCodePtr::dumpWithName const): Deleted. (JSC::MacroAssemblerCodePtr::dump const): Deleted. (JSC::MacroAssemblerCodeRef::createLLIntCodeRef): Deleted. (JSC::MacroAssemblerCodeRef::tryToDisassemble const): Deleted. (JSC::MacroAssemblerCodeRef::disassembly const): Deleted. (JSC::MacroAssemblerCodeRef::dump const): Deleted. * assembler/MacroAssemblerCodeRef.h: (JSC::FunctionPtr::FunctionPtr): (JSC::FunctionPtr::retagged const): (JSC::FunctionPtr::retaggedExecutableAddress const): (JSC::FunctionPtr::operator== const): (JSC::FunctionPtr::operator!= const): (JSC::ReturnAddressPtr::ReturnAddressPtr): (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr): (JSC::MacroAssemblerCodePtr::createFromExecutableAddress): (JSC::MacroAssemblerCodePtr::retagged const): (JSC::MacroAssemblerCodePtr:: const): (JSC::MacroAssemblerCodePtr::dumpWithName const): (JSC::MacroAssemblerCodePtr::dump const): (JSC::MacroAssemblerCodePtrHash::hash): (JSC::MacroAssemblerCodePtrHash::equal): (JSC::MacroAssemblerCodeRef::MacroAssemblerCodeRef): (JSC::MacroAssemblerCodeRef::createSelfManagedCodeRef): (JSC::MacroAssemblerCodeRef::code const): (JSC::MacroAssemblerCodeRef::retaggedCode const): (JSC::MacroAssemblerCodeRef::retagged const): (JSC::MacroAssemblerCodeRef::tryToDisassemble const): (JSC::MacroAssemblerCodeRef::disassembly const): (JSC::MacroAssemblerCodeRef::dump const): (JSC::FunctionPtr<tag>::FunctionPtr): * assembler/MacroAssemblerMIPS.h: (JSC::MacroAssemblerMIPS::readCallTarget): (JSC::MacroAssemblerMIPS::replaceWithJump): (JSC::MacroAssemblerMIPS::startOfPatchableBranch32WithPatchOnAddress): (JSC::MacroAssemblerMIPS::startOfBranchPtrWithPatchOnRegister): (JSC::MacroAssemblerMIPS::revertJumpReplacementToBranchPtrWithPatch): (JSC::MacroAssemblerMIPS::startOfPatchableBranchPtrWithPatchOnAddress): (JSC::MacroAssemblerMIPS::revertJumpReplacementToPatchableBranch32WithPatch): (JSC::MacroAssemblerMIPS::revertJumpReplacementToPatchableBranchPtrWithPatch): (JSC::MacroAssemblerMIPS::repatchCall): (JSC::MacroAssemblerMIPS::linkCall): * assembler/MacroAssemblerX86.h: (JSC::MacroAssemblerX86::readCallTarget): (JSC::MacroAssemblerX86::startOfBranchPtrWithPatchOnRegister): (JSC::MacroAssemblerX86::startOfPatchableBranchPtrWithPatchOnAddress): (JSC::MacroAssemblerX86::startOfPatchableBranch32WithPatchOnAddress): (JSC::MacroAssemblerX86::revertJumpReplacementToBranchPtrWithPatch): (JSC::MacroAssemblerX86::revertJumpReplacementToPatchableBranchPtrWithPatch): (JSC::MacroAssemblerX86::revertJumpReplacementToPatchableBranch32WithPatch): (JSC::MacroAssemblerX86::repatchCall): (JSC::MacroAssemblerX86::linkCall): * assembler/MacroAssemblerX86Common.h: (JSC::MacroAssemblerX86Common::repatchCompact): (JSC::MacroAssemblerX86Common::replaceWithVMHalt): (JSC::MacroAssemblerX86Common::replaceWithJump): * assembler/MacroAssemblerX86_64.h: (JSC::MacroAssemblerX86_64::readCallTarget): (JSC::MacroAssemblerX86_64::startOfBranchPtrWithPatchOnRegister): (JSC::MacroAssemblerX86_64::startOfBranch32WithPatchOnRegister): (JSC::MacroAssemblerX86_64::startOfPatchableBranchPtrWithPatchOnAddress): (JSC::MacroAssemblerX86_64::startOfPatchableBranch32WithPatchOnAddress): (JSC::MacroAssemblerX86_64::revertJumpReplacementToPatchableBranchPtrWithPatch): (JSC::MacroAssemblerX86_64::revertJumpReplacementToPatchableBranch32WithPatch): (JSC::MacroAssemblerX86_64::revertJumpReplacementToBranchPtrWithPatch): (JSC::MacroAssemblerX86_64::repatchCall): (JSC::MacroAssemblerX86_64::linkCall): * assembler/testmasm.cpp: (JSC::compile): (JSC::invoke): (JSC::testProbeModifiesProgramCounter): * b3/B3Compilation.cpp: (JSC::B3::Compilation::Compilation): * b3/B3Compilation.h: (JSC::B3::Compilation::code const): (JSC::B3::Compilation::codeRef const): * b3/B3Compile.cpp: (JSC::B3::compile): * b3/B3LowerMacros.cpp: * b3/air/AirDisassembler.cpp: (JSC::B3::Air::Disassembler::dump): * b3/air/testair.cpp: * b3/testb3.cpp: (JSC::B3::invoke): (JSC::B3::testInterpreter): (JSC::B3::testEntrySwitchSimple): (JSC::B3::testEntrySwitchNoEntrySwitch): (JSC::B3::testEntrySwitchWithCommonPaths): (JSC::B3::testEntrySwitchWithCommonPathsAndNonTrivialEntrypoint): (JSC::B3::testEntrySwitchLoop): * bytecode/AccessCase.cpp: (JSC::AccessCase::generateImpl): * bytecode/AccessCaseSnippetParams.cpp: (JSC::SlowPathCallGeneratorWithArguments::generateImpl): * bytecode/ByValInfo.h: (JSC::ByValInfo::ByValInfo): * bytecode/CallLinkInfo.cpp: (JSC::CallLinkInfo::callReturnLocation): (JSC::CallLinkInfo::patchableJump): (JSC::CallLinkInfo::hotPathBegin): (JSC::CallLinkInfo::slowPathStart): * bytecode/CallLinkInfo.h: (JSC::CallLinkInfo::setCallLocations): (JSC::CallLinkInfo::hotPathOther): * bytecode/CodeBlock.cpp: (JSC::CodeBlock::finishCreation): * bytecode/GetByIdStatus.cpp: (JSC::GetByIdStatus::computeForStubInfoWithoutExitSiteFeedback): * bytecode/GetByIdVariant.cpp: (JSC::GetByIdVariant::GetByIdVariant): (JSC::GetByIdVariant::dumpInContext const): * bytecode/GetByIdVariant.h: (JSC::GetByIdVariant::customAccessorGetter const): * bytecode/GetterSetterAccessCase.cpp: (JSC::GetterSetterAccessCase::create): (JSC::GetterSetterAccessCase::GetterSetterAccessCase): (JSC::GetterSetterAccessCase::dumpImpl const): * bytecode/GetterSetterAccessCase.h: (JSC::GetterSetterAccessCase::customAccessor const): (): Deleted. * bytecode/HandlerInfo.h: (JSC::HandlerInfo::initialize): * bytecode/InlineAccess.cpp: (JSC::linkCodeInline): (JSC::InlineAccess::rewireStubAsJump): * bytecode/InlineAccess.h: * bytecode/JumpTable.h: (JSC::StringJumpTable::ctiForValue): (JSC::SimpleJumpTable::ctiForValue): * bytecode/LLIntCallLinkInfo.h: (JSC::LLIntCallLinkInfo::unlink): * bytecode/PolymorphicAccess.cpp: (JSC::AccessGenerationState::emitExplicitExceptionHandler): (JSC::PolymorphicAccess::regenerate): * bytecode/PolymorphicAccess.h: (JSC::AccessGenerationResult::AccessGenerationResult): (JSC::AccessGenerationResult::code const): * bytecode/StructureStubInfo.h: (JSC::StructureStubInfo::slowPathCallLocation): (JSC::StructureStubInfo::doneLocation): (JSC::StructureStubInfo::slowPathStartLocation): (JSC::StructureStubInfo::patchableJumpForIn): * dfg/DFGCommonData.h: (JSC::DFG::CommonData::appendCatchEntrypoint): * dfg/DFGDisassembler.cpp: (JSC::DFG::Disassembler::dumpDisassembly): * dfg/DFGDriver.h: * dfg/DFGJITCompiler.cpp: (JSC::DFG::JITCompiler::linkOSRExits): (JSC::DFG::JITCompiler::compileExceptionHandlers): (JSC::DFG::JITCompiler::link): (JSC::DFG::JITCompiler::compileFunction): (JSC::DFG::JITCompiler::noticeCatchEntrypoint): * dfg/DFGJITCompiler.h: (JSC::DFG::CallLinkRecord::CallLinkRecord): (JSC::DFG::JITCompiler::appendCall): (JSC::DFG::JITCompiler::JSCallRecord::JSCallRecord): (JSC::DFG::JITCompiler::JSDirectCallRecord::JSDirectCallRecord): (JSC::DFG::JITCompiler::JSDirectTailCallRecord::JSDirectTailCallRecord): * dfg/DFGJITFinalizer.cpp: (JSC::DFG::JITFinalizer::JITFinalizer): (JSC::DFG::JITFinalizer::finalize): (JSC::DFG::JITFinalizer::finalizeFunction): * dfg/DFGJITFinalizer.h: * dfg/DFGJumpReplacement.h: (JSC::DFG::JumpReplacement::JumpReplacement): * dfg/DFGNode.h: * dfg/DFGOSREntry.cpp: (JSC::DFG::prepareOSREntry): (JSC::DFG::prepareCatchOSREntry): * dfg/DFGOSREntry.h: (JSC::DFG::prepareOSREntry): * dfg/DFGOSRExit.cpp: (JSC::DFG::OSRExit::executeOSRExit): (JSC::DFG::reifyInlinedCallFrames): (JSC::DFG::adjustAndJumpToTarget): (JSC::DFG::OSRExit::codeLocationForRepatch const): (JSC::DFG::OSRExit::emitRestoreArguments): (JSC::DFG::OSRExit::compileOSRExit): * dfg/DFGOSRExit.h: * dfg/DFGOSRExitCompilerCommon.cpp: (JSC::DFG::handleExitCounts): (JSC::DFG::reifyInlinedCallFrames): (JSC::DFG::osrWriteBarrier): (JSC::DFG::adjustAndJumpToTarget): * dfg/DFGOperations.cpp: * dfg/DFGSlowPathGenerator.h: (JSC::DFG::CallResultAndArgumentsSlowPathGenerator::CallResultAndArgumentsSlowPathGenerator): (JSC::DFG::CallResultAndArgumentsSlowPathGenerator::unpackAndGenerate): (JSC::DFG::slowPathCall): * dfg/DFGSpeculativeJIT.cpp: (JSC::DFG::SpeculativeJIT::compileMathIC): (JSC::DFG::SpeculativeJIT::compileCallDOM): (JSC::DFG::SpeculativeJIT::compileCallDOMGetter): (JSC::DFG::SpeculativeJIT::emitSwitchIntJump): (JSC::DFG::SpeculativeJIT::emitSwitchImm): (JSC::DFG::SpeculativeJIT::emitSwitchStringOnString): (JSC::DFG::SpeculativeJIT::compileHasIndexedProperty): (JSC::DFG::SpeculativeJIT::compileGetDirectPname): (JSC::DFG::SpeculativeJIT::cachedPutById): * dfg/DFGSpeculativeJIT.h: (JSC::DFG::SpeculativeJIT::callOperation): (JSC::DFG::SpeculativeJIT::appendCall): (JSC::DFG::SpeculativeJIT::appendCallWithCallFrameRollbackOnException): (JSC::DFG::SpeculativeJIT::appendCallWithCallFrameRollbackOnExceptionSetResult): (JSC::DFG::SpeculativeJIT::appendCallSetResult): * dfg/DFGSpeculativeJIT64.cpp: (JSC::DFG::SpeculativeJIT::cachedGetById): (JSC::DFG::SpeculativeJIT::cachedGetByIdWithThis): (JSC::DFG::SpeculativeJIT::compile): * dfg/DFGThunks.cpp: (JSC::DFG::osrExitThunkGenerator): (JSC::DFG::osrExitGenerationThunkGenerator): (JSC::DFG::osrEntryThunkGenerator): * dfg/DFGThunks.h: * disassembler/ARM64Disassembler.cpp: (JSC::tryToDisassemble): * disassembler/ARMv7Disassembler.cpp: (JSC::tryToDisassemble): * disassembler/Disassembler.cpp: (JSC::disassemble): (JSC::disassembleAsynchronously): * disassembler/Disassembler.h: (JSC::tryToDisassemble): * disassembler/UDis86Disassembler.cpp: (JSC::tryToDisassembleWithUDis86): * disassembler/UDis86Disassembler.h: (JSC::tryToDisassembleWithUDis86): * disassembler/X86Disassembler.cpp: (JSC::tryToDisassemble): * ftl/FTLCompile.cpp: (JSC::FTL::compile): * ftl/FTLExceptionTarget.cpp: (JSC::FTL::ExceptionTarget::label): (JSC::FTL::ExceptionTarget::jumps): * ftl/FTLExceptionTarget.h: * ftl/FTLGeneratedFunction.h: * ftl/FTLJITCode.cpp: (JSC::FTL::JITCode::initializeB3Code): (JSC::FTL::JITCode::initializeAddressForCall): (JSC::FTL::JITCode::initializeArityCheckEntrypoint): (JSC::FTL::JITCode::addressForCall): (JSC::FTL::JITCode::executableAddressAtOffset): * ftl/FTLJITCode.h: (JSC::FTL::JITCode::b3Code const): * ftl/FTLJITFinalizer.cpp: (JSC::FTL::JITFinalizer::finalizeCommon): * ftl/FTLLazySlowPath.cpp: (JSC::FTL::LazySlowPath::initialize): (JSC::FTL::LazySlowPath::generate): * ftl/FTLLazySlowPath.h: (JSC::FTL::LazySlowPath::patchableJump const): (JSC::FTL::LazySlowPath::done const): (JSC::FTL::LazySlowPath::stub const): * ftl/FTLLazySlowPathCall.h: (JSC::FTL::createLazyCallGenerator): * ftl/FTLLink.cpp: (JSC::FTL::link): * ftl/FTLLowerDFGToB3.cpp: (JSC::FTL::DFG::LowerDFGToB3::lower): (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstruct): (JSC::FTL::DFG::LowerDFGToB3::compileDirectCallOrConstruct): (JSC::FTL::DFG::LowerDFGToB3::compileTailCall): (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargsSpread): (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargs): (JSC::FTL::DFG::LowerDFGToB3::compileCallEval): (JSC::FTL::DFG::LowerDFGToB3::compileInvalidationPoint): (JSC::FTL::DFG::LowerDFGToB3::compileIn): (JSC::FTL::DFG::LowerDFGToB3::compileCheckSubClass): (JSC::FTL::DFG::LowerDFGToB3::compileCallDOM): (JSC::FTL::DFG::LowerDFGToB3::compileCallDOMGetter): (JSC::FTL::DFG::LowerDFGToB3::lazySlowPath): * ftl/FTLOSRExit.cpp: (JSC::FTL::OSRExit::codeLocationForRepatch const): * ftl/FTLOSRExit.h: * ftl/FTLOSRExitCompiler.cpp: (JSC::FTL::compileStub): (JSC::FTL::compileFTLOSRExit): * ftl/FTLOSRExitHandle.cpp: (JSC::FTL::OSRExitHandle::emitExitThunk): * ftl/FTLOperations.cpp: (JSC::FTL::compileFTLLazySlowPath): * ftl/FTLPatchpointExceptionHandle.cpp: (JSC::FTL::PatchpointExceptionHandle::scheduleExitCreationForUnwind): * ftl/FTLSlowPathCall.cpp: (JSC::FTL::SlowPathCallContext::keyWithTarget const): (JSC::FTL::SlowPathCallContext::makeCall): * ftl/FTLSlowPathCall.h: (JSC::FTL::callOperation): * ftl/FTLSlowPathCallKey.cpp: (JSC::FTL::SlowPathCallKey::dump const): * ftl/FTLSlowPathCallKey.h: (JSC::FTL::SlowPathCallKey::SlowPathCallKey): (JSC::FTL::SlowPathCallKey::callTarget const): (JSC::FTL::SlowPathCallKey::withCallTarget): (JSC::FTL::SlowPathCallKey::hash const): (JSC::FTL::SlowPathCallKey::callPtrTag const): Deleted. * ftl/FTLState.cpp: (JSC::FTL::State::State): * ftl/FTLThunks.cpp: (JSC::FTL::genericGenerationThunkGenerator): (JSC::FTL::osrExitGenerationThunkGenerator): (JSC::FTL::lazySlowPathGenerationThunkGenerator): (JSC::FTL::slowPathCallThunkGenerator): * ftl/FTLThunks.h: (JSC::FTL::generateIfNecessary): (JSC::FTL::keyForThunk): (JSC::FTL::Thunks::getSlowPathCallThunk): (JSC::FTL::Thunks::keyForSlowPathCallThunk): * interpreter/InterpreterInlines.h: (JSC::Interpreter::getOpcodeID): * jit/AssemblyHelpers.cpp: (JSC::AssemblyHelpers::callExceptionFuzz): (JSC::AssemblyHelpers::emitDumbVirtualCall): (JSC::AssemblyHelpers::debugCall): * jit/CCallHelpers.cpp: (JSC::CCallHelpers::ensureShadowChickenPacket): * jit/ExecutableAllocator.cpp: (JSC::FixedVMPoolExecutableAllocator::initializeSeparatedWXHeaps): (JSC::FixedVMPoolExecutableAllocator::jitWriteThunkGenerator): * jit/ExecutableAllocator.h: (JSC::performJITMemcpy): * jit/GCAwareJITStubRoutine.cpp: (JSC::GCAwareJITStubRoutine::GCAwareJITStubRoutine): (JSC::MarkingGCAwareJITStubRoutine::MarkingGCAwareJITStubRoutine): (JSC::GCAwareJITStubRoutineWithExceptionHandler::GCAwareJITStubRoutineWithExceptionHandler): (JSC::createJITStubRoutine): * jit/GCAwareJITStubRoutine.h: (JSC::createJITStubRoutine): * jit/JIT.cpp: (JSC::ctiPatchCallByReturnAddress): (JSC::JIT::compileWithoutLinking): (JSC::JIT::link): (JSC::JIT::privateCompileExceptionHandlers): * jit/JIT.h: (JSC::CallRecord::CallRecord): * jit/JITArithmetic.cpp: (JSC::JIT::emitMathICFast): (JSC::JIT::emitMathICSlow): * jit/JITCall.cpp: (JSC::JIT::compileOpCallSlowCase): * jit/JITCall32_64.cpp: (JSC::JIT::compileOpCallSlowCase): * jit/JITCode.cpp: (JSC::JITCodeWithCodeRef::JITCodeWithCodeRef): (JSC::JITCodeWithCodeRef::executableAddressAtOffset): (JSC::DirectJITCode::DirectJITCode): (JSC::DirectJITCode::initializeCodeRef): (JSC::DirectJITCode::addressForCall): (JSC::NativeJITCode::NativeJITCode): (JSC::NativeJITCode::initializeCodeRef): (JSC::NativeJITCode::addressForCall): * jit/JITCode.h: * jit/JITCodeMap.h: (JSC::JITCodeMap::Entry::Entry): (JSC::JITCodeMap::Entry::codeLocation): (JSC::JITCodeMap::append): (JSC::JITCodeMap::find const): * jit/JITDisassembler.cpp: (JSC::JITDisassembler::dumpDisassembly): * jit/JITExceptions.cpp: (JSC::genericUnwind): * jit/JITInlineCacheGenerator.cpp: (JSC::JITByIdGenerator::finalize): * jit/JITInlines.h: (JSC::JIT::emitNakedCall): (JSC::JIT::emitNakedTailCall): (JSC::JIT::appendCallWithExceptionCheck): (JSC::JIT::appendCallWithExceptionCheckAndSlowPathReturnType): (JSC::JIT::appendCallWithCallFrameRollbackOnException): (JSC::JIT::appendCallWithExceptionCheckSetJSValueResult): (JSC::JIT::appendCallWithExceptionCheckSetJSValueResultWithProfile): * jit/JITMathIC.h: (JSC::isProfileEmpty): * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_catch): (JSC::JIT::emit_op_switch_imm): (JSC::JIT::emit_op_switch_char): (JSC::JIT::emit_op_switch_string): (JSC::JIT::privateCompileHasIndexedProperty): (JSC::JIT::emitSlow_op_has_indexed_property): * jit/JITOpcodes32_64.cpp: (JSC::JIT::privateCompileHasIndexedProperty): * jit/JITOperations.cpp: (JSC::getByVal): * jit/JITPropertyAccess.cpp: (JSC::JIT::stringGetByValStubGenerator): (JSC::JIT::emitGetByValWithCachedId): (JSC::JIT::emitSlow_op_get_by_val): (JSC::JIT::emitPutByValWithCachedId): (JSC::JIT::emitSlow_op_put_by_val): (JSC::JIT::emitSlow_op_try_get_by_id): (JSC::JIT::emitSlow_op_get_by_id_direct): (JSC::JIT::emitSlow_op_get_by_id): (JSC::JIT::emitSlow_op_get_by_id_with_this): (JSC::JIT::emitSlow_op_put_by_id): (JSC::JIT::privateCompileGetByVal): (JSC::JIT::privateCompileGetByValWithCachedId): (JSC::JIT::privateCompilePutByVal): (JSC::JIT::privateCompilePutByValWithCachedId): * jit/JITPropertyAccess32_64.cpp: (JSC::JIT::stringGetByValStubGenerator): (JSC::JIT::emitSlow_op_get_by_val): (JSC::JIT::emitSlow_op_put_by_val): * jit/JITStubRoutine.h: (JSC::JITStubRoutine::JITStubRoutine): (JSC::JITStubRoutine::createSelfManagedRoutine): (JSC::JITStubRoutine::code const): (JSC::JITStubRoutine::asCodePtr): * jit/JITThunks.cpp: (JSC::JITThunks::ctiNativeCall): (JSC::JITThunks::ctiNativeConstruct): (JSC::JITThunks::ctiNativeTailCall): (JSC::JITThunks::ctiNativeTailCallWithoutSavedTags): (JSC::JITThunks::ctiInternalFunctionCall): (JSC::JITThunks::ctiInternalFunctionConstruct): (JSC::JITThunks::ctiStub): (JSC::JITThunks::existingCTIStub): (JSC::JITThunks::hostFunctionStub): * jit/JITThunks.h: * jit/PCToCodeOriginMap.cpp: (JSC::PCToCodeOriginMap::PCToCodeOriginMap): * jit/PCToCodeOriginMap.h: * jit/PolymorphicCallStubRoutine.cpp: (JSC::PolymorphicCallStubRoutine::PolymorphicCallStubRoutine): * jit/PolymorphicCallStubRoutine.h: * jit/Repatch.cpp: (JSC::readPutICCallTarget): (JSC::ftlThunkAwareRepatchCall): (JSC::appropriateOptimizingGetByIdFunction): (JSC::appropriateGetByIdFunction): (JSC::tryCacheGetByID): (JSC::repatchGetByID): (JSC::tryCachePutByID): (JSC::repatchPutByID): (JSC::tryCacheIn): (JSC::repatchIn): (JSC::linkSlowFor): (JSC::linkFor): (JSC::linkDirectFor): (JSC::revertCall): (JSC::unlinkFor): (JSC::linkVirtualFor): (JSC::linkPolymorphicCall): (JSC::resetGetByID): (JSC::resetPutByID): * jit/Repatch.h: * jit/SlowPathCall.h: (JSC::JITSlowPathCall::call): * jit/SpecializedThunkJIT.h: (JSC::SpecializedThunkJIT::finalize): (JSC::SpecializedThunkJIT::callDoubleToDouble): (JSC::SpecializedThunkJIT::callDoubleToDoublePreservingReturn): * jit/ThunkGenerator.h: * jit/ThunkGenerators.cpp: (JSC::throwExceptionFromCallSlowPathGenerator): (JSC::slowPathFor): (JSC::linkCallThunkGenerator): (JSC::linkPolymorphicCallThunkGenerator): (JSC::virtualThunkFor): (JSC::nativeForGenerator): (JSC::nativeCallGenerator): (JSC::nativeTailCallGenerator): (JSC::nativeTailCallWithoutSavedTagsGenerator): (JSC::nativeConstructGenerator): (JSC::internalFunctionCallGenerator): (JSC::internalFunctionConstructGenerator): (JSC::arityFixupGenerator): (JSC::unreachableGenerator): (JSC::charCodeAtThunkGenerator): (JSC::charAtThunkGenerator): (JSC::fromCharCodeThunkGenerator): (JSC::clz32ThunkGenerator): (JSC::sqrtThunkGenerator): (JSC::floorThunkGenerator): (JSC::ceilThunkGenerator): (JSC::truncThunkGenerator): (JSC::roundThunkGenerator): (JSC::expThunkGenerator): (JSC::logThunkGenerator): (JSC::absThunkGenerator): (JSC::imulThunkGenerator): (JSC::randomThunkGenerator): (JSC::boundThisNoArgsFunctionCallGenerator): * jit/ThunkGenerators.h: * llint/LLIntData.cpp: (JSC::LLInt::initialize): * llint/LLIntData.h: (JSC::LLInt::getExecutableAddress): (JSC::LLInt::getCodePtr): (JSC::LLInt::getCodeRef): (JSC::LLInt::getCodeFunctionPtr): * llint/LLIntEntrypoint.cpp: (JSC::LLInt::setFunctionEntrypoint): (JSC::LLInt::setEvalEntrypoint): (JSC::LLInt::setProgramEntrypoint): (JSC::LLInt::setModuleProgramEntrypoint): * llint/LLIntExceptions.cpp: (JSC::LLInt::callToThrow): * llint/LLIntSlowPaths.cpp: (JSC::LLInt::LLINT_SLOW_PATH_DECL): (JSC::LLInt::setUpCall): * llint/LLIntThunks.cpp: (JSC::vmEntryToWasm): (JSC::LLInt::generateThunkWithJumpTo): (JSC::LLInt::functionForCallEntryThunkGenerator): (JSC::LLInt::functionForConstructEntryThunkGenerator): (JSC::LLInt::functionForCallArityCheckThunkGenerator): (JSC::LLInt::functionForConstructArityCheckThunkGenerator): (JSC::LLInt::evalEntryThunkGenerator): (JSC::LLInt::programEntryThunkGenerator): (JSC::LLInt::moduleProgramEntryThunkGenerator): * llint/LLIntThunks.h: * llint/LowLevelInterpreter.asm: * llint/LowLevelInterpreter32_64.asm: * llint/LowLevelInterpreter64.asm: * profiler/ProfilerCompilation.cpp: (JSC::Profiler::Compilation::addOSRExitSite): * profiler/ProfilerCompilation.h: * profiler/ProfilerOSRExitSite.cpp: (JSC::Profiler::OSRExitSite::toJS const): * profiler/ProfilerOSRExitSite.h: (JSC::Profiler::OSRExitSite::OSRExitSite): (JSC::Profiler::OSRExitSite::codeAddress const): (JSC::Profiler::OSRExitSite:: const): Deleted. * runtime/ExecutableBase.cpp: (JSC::ExecutableBase::clearCode): * runtime/ExecutableBase.h: (JSC::ExecutableBase::entrypointFor): * runtime/NativeExecutable.cpp: (JSC::NativeExecutable::finishCreation): * runtime/NativeFunction.h: (JSC::TaggedNativeFunction::TaggedNativeFunction): (JSC::TaggedNativeFunction::operator NativeFunction): * runtime/PtrTag.h: (JSC::tagCodePtr): (JSC::untagCodePtr): (JSC::retagCodePtr): (JSC::tagCFunctionPtr): (JSC::untagCFunctionPtr): (JSC::nextPtrTagID): Deleted. * runtime/PutPropertySlot.h: (JSC::PutPropertySlot::PutPropertySlot): (JSC::PutPropertySlot::setCustomValue): (JSC::PutPropertySlot::setCustomAccessor): (JSC::PutPropertySlot::customSetter const): * runtime/ScriptExecutable.cpp: (JSC::ScriptExecutable::installCode): * runtime/VM.cpp: (JSC::VM::getHostFunction): (JSC::VM::getCTIInternalFunctionTrampolineFor): * runtime/VM.h: (JSC::VM::getCTIStub): * wasm/WasmB3IRGenerator.cpp: (JSC::Wasm::B3IRGenerator::B3IRGenerator): (JSC::Wasm::B3IRGenerator::emitExceptionCheck): (JSC::Wasm::B3IRGenerator::emitTierUpCheck): (JSC::Wasm::B3IRGenerator::addCall): (JSC::Wasm::B3IRGenerator::addCallIndirect): * wasm/WasmBBQPlan.cpp: (JSC::Wasm::BBQPlan::prepare): (JSC::Wasm::BBQPlan::complete): * wasm/WasmBBQPlan.h: * wasm/WasmBinding.cpp: (JSC::Wasm::wasmToWasm): * wasm/WasmBinding.h: * wasm/WasmCallee.h: (JSC::Wasm::Callee::entrypoint const): * wasm/WasmCallingConvention.h: (JSC::Wasm::CallingConvention::setupFrameInPrologue const): * wasm/WasmCodeBlock.h: (JSC::Wasm::CodeBlock::entrypointLoadLocationFromFunctionIndexSpace): * wasm/WasmFaultSignalHandler.cpp: (JSC::Wasm::trapHandler): * wasm/WasmFormat.h: * wasm/WasmInstance.h: * wasm/WasmOMGPlan.cpp: (JSC::Wasm::OMGPlan::work): * wasm/WasmThunks.cpp: (JSC::Wasm::throwExceptionFromWasmThunkGenerator): (JSC::Wasm::throwStackOverflowFromWasmThunkGenerator): (JSC::Wasm::triggerOMGTierUpThunkGenerator): (JSC::Wasm::Thunks::stub): (JSC::Wasm::Thunks::existingStub): * wasm/WasmThunks.h: * wasm/js/JSToWasm.cpp: (JSC::Wasm::createJSToWasmWrapper): * wasm/js/JSWebAssemblyCodeBlock.h: * wasm/js/WasmToJS.cpp: (JSC::Wasm::handleBadI64Use): (JSC::Wasm::wasmToJS): * wasm/js/WasmToJS.h: * wasm/js/WebAssemblyFunction.h: * yarr/YarrJIT.cpp: (JSC::Yarr::YarrGenerator::loadFromFrameAndJump): (JSC::Yarr::YarrGenerator::BacktrackingState::linkDataLabels): (JSC::Yarr::YarrGenerator::compile): * yarr/YarrJIT.h: (JSC::Yarr::YarrCodeBlock::set8BitCode): (JSC::Yarr::YarrCodeBlock::set16BitCode): (JSC::Yarr::YarrCodeBlock::set8BitCodeMatchOnly): (JSC::Yarr::YarrCodeBlock::set16BitCodeMatchOnly): (JSC::Yarr::YarrCodeBlock::execute): (JSC::Yarr::YarrCodeBlock::clear): Source/WebCore: No new tests. This is covered by existing tests. * WebCore.xcodeproj/project.pbxproj: * css/ElementRuleCollector.cpp: (WebCore::ElementRuleCollector::ruleMatches): * cssjit/CSSPtrTag.h: Added. * cssjit/CompiledSelector.h: * cssjit/FunctionCall.h: (WebCore::FunctionCall::FunctionCall): (WebCore::FunctionCall::setFunctionAddress): (WebCore::FunctionCall::prepareAndCall): * cssjit/SelectorCompiler.cpp: (WebCore::SelectorCompiler::compileSelector): (WebCore::SelectorCompiler::SelectorFragment::appendUnoptimizedPseudoClassWithContext): (WebCore::SelectorCompiler::addPseudoClassType): (WebCore::SelectorCompiler::SelectorCodeGenerator::compile): (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributeFunctionCallValueMatching): (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementFunctionCallTest): (WebCore::SelectorCompiler::SelectorCodeGenerator::generateContextFunctionCallTest): * cssjit/SelectorCompiler.h: (WebCore::SelectorCompiler::ruleCollectorSimpleSelectorCheckerFunction): (WebCore::SelectorCompiler::querySelectorSimpleSelectorCheckerFunction): (WebCore::SelectorCompiler::ruleCollectorSelectorCheckerFunctionWithCheckingContext): (WebCore::SelectorCompiler::querySelectorSelectorCheckerFunctionWithCheckingContext): * dom/SelectorQuery.cpp: (WebCore::SelectorDataList::executeCompiledSingleMultiSelectorData const): (WebCore::SelectorDataList::execute const): * dom/SelectorQuery.h: Canonical link: https://commits.webkit.org/200234@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@230748 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-04-18 03:31:09 +00:00
SlowPathCall makeCall(VM&, FunctionPtr<CFunctionPtrTag> callTarget);
[JSC] Use DataIC for AccessCase https://bugs.webkit.org/show_bug.cgi?id=226072 Reviewed by Saam Barati and Filip Pizlo. Source/JavaScriptCore: This patch adds non-repatching IC for Baseline JIT in ARM64. This does not work in non-ARM64 architectures (including X64) due to the use of link-register. 1. We add non-repatching IC, which is enabled only in Baseline due to performance reason. We are using the existing IC in DFG and FTL. Non-repatching includes fast-path, and slow-path's operation function. 2. We still keep InlineAccess in all tiers. Removing that causes 0.3 ~ 1.0% regression in Speedometer2. This means that we still need some repatching when we first introduce stubs. 3. We add a mechanism to share generated code stubs in non-repatching IC. Currently, getter / setter / custom accessors are excluded since their code relies on JSGlobalObject, CodeBlock etc. which are not included in AccessCase's data structure. 4. This patch still relies on that CodeBlock will be destroyed synchronously since we need to ensure that sharing-hash-table does not include already-dead JIT code stubs. We can fix it (e.g. annotating epoch to these stubs, bump them in finalizeUnconditionally), but we avoid doing that to prevent from further enlarging this patch. This patch is already significant in its size. 5. Added callOperation(Address) support in CCallHelpers, which can save the target in nonArgGPR0, and call it so that we can use Address including GPR which is also used for arguments. Performance is neutral in JetStream2 and Speedometer2. But it offers the way to remove some code generation in Baseline. * assembler/MacroAssemblerARM64E.h: (JSC::MacroAssemblerARM64E::call): * bytecode/AccessCase.cpp: (JSC::AccessCase::create): (JSC::AccessCase::createTransition): (JSC::AccessCase::createDelete): (JSC::AccessCase::createCheckPrivateBrand): (JSC::AccessCase::createSetPrivateBrand): (JSC::AccessCase::fromStructureStubInfo): (JSC::AccessCase::clone const): (JSC::AccessCase::generateWithGuard): (JSC::AccessCase::generateImpl): (JSC::AccessCase::canBeShared): * bytecode/AccessCase.h: (JSC::AccessCase::hash const): (JSC::AccessCase::AccessCase): (JSC::SharedJITStubSet::Hash::Key::Key): (JSC::SharedJITStubSet::Hash::Key::isHashTableDeletedValue const): (JSC::SharedJITStubSet::Hash::Key::operator==): (JSC::SharedJITStubSet::Hash::hash): (JSC::SharedJITStubSet::Hash::equal): (JSC::SharedJITStubSet::Searcher::Translator::hash): (JSC::SharedJITStubSet::Searcher::Translator::equal): (JSC::SharedJITStubSet::PointerTranslator::hash): (JSC::SharedJITStubSet::PointerTranslator::equal): (JSC::SharedJITStubSet::add): (JSC::SharedJITStubSet::remove): (JSC::SharedJITStubSet::find): * bytecode/ByValInfo.h: (JSC::ByValInfo::setUp): (JSC::ByValInfo::offsetOfSlowOperation): (JSC::ByValInfo::offsetOfNotIndexJumpTarget): (JSC::ByValInfo::offsetOfBadTypeJumpTarget): * bytecode/CallLinkInfo.cpp: (JSC::CallLinkInfo::initializeDirectCall): (JSC::CallLinkInfo::setDirectCallTarget): * bytecode/CodeBlock.h: (JSC::CodeBlock::useDataIC const): * bytecode/GetterSetterAccessCase.cpp: (JSC::GetterSetterAccessCase::create): (JSC::GetterSetterAccessCase::clone const): (JSC::GetterSetterAccessCase::emitDOMJITGetter): * bytecode/GetterSetterAccessCase.h: * bytecode/InlineAccess.cpp: (JSC::getScratchRegister): (JSC::InlineAccess::rewireStubAsJumpInAccessNotUsingInlineAccess): (JSC::InlineAccess::rewireStubAsJumpInAccess): (JSC::InlineAccess::resetStubAsJumpInAccess): (JSC::InlineAccess::resetStubAsJumpInAccessNotUsingInlineAccess): (JSC::InlineAccess::rewireStubAsJump): Deleted. * bytecode/InlineAccess.h: * bytecode/InstanceOfAccessCase.cpp: (JSC::InstanceOfAccessCase::create): (JSC::InstanceOfAccessCase::clone const): * bytecode/InstanceOfAccessCase.h: * bytecode/IntrinsicGetterAccessCase.cpp: (JSC::IntrinsicGetterAccessCase::create): (JSC::IntrinsicGetterAccessCase::clone const): * bytecode/IntrinsicGetterAccessCase.h: * bytecode/ModuleNamespaceAccessCase.cpp: (JSC::ModuleNamespaceAccessCase::create): (JSC::ModuleNamespaceAccessCase::clone const): * bytecode/ModuleNamespaceAccessCase.h: * bytecode/ObjectPropertyConditionSet.h: (JSC::ObjectPropertyConditionSet::hash const): (JSC::ObjectPropertyConditionSet::operator==): (JSC::ObjectPropertyConditionSet::operator!=): * bytecode/PolymorphicAccess.cpp: (JSC::AccessGenerationState::installWatchpoint): (JSC::AccessGenerationState::succeed): (JSC::AccessGenerationState::preserveLiveRegistersToStackForCallWithoutExceptions): (JSC::PolymorphicAccess::addCases): (JSC::PolymorphicAccess::addCase): (JSC::PolymorphicAccess::visitWeak const): (JSC::PolymorphicAccess::regenerate): * bytecode/PolymorphicAccess.h: (JSC::AccessGenerationState::AccessGenerationState): (JSC::AccessGenerationState::preserveLiveRegistersToStackForCallWithoutExceptions): * bytecode/ProxyableAccessCase.cpp: (JSC::ProxyableAccessCase::create): (JSC::ProxyableAccessCase::clone const): * bytecode/ProxyableAccessCase.h: * bytecode/StructureStubInfo.cpp: (JSC::StructureStubInfo::StructureStubInfo): (JSC::StructureStubInfo::addAccessCase): (JSC::StructureStubInfo::reset): * bytecode/StructureStubInfo.h: (JSC::StructureStubInfo::offsetOfCodePtr): (JSC::StructureStubInfo::offsetOfSlowPathStartLocation): (JSC::StructureStubInfo::offsetOfSlowOperation): (JSC::StructureStubInfo::patchableJump): Deleted. * dfg/DFGJITCompiler.h: (JSC::DFG::JITCompiler::appendCall): * dfg/DFGSlowPathGenerator.h: (JSC::DFG::slowPathICCall): * dfg/DFGSpeculativeJIT.cpp: (JSC::DFG::SpeculativeJIT::compileGetById): (JSC::DFG::SpeculativeJIT::compileGetByIdFlush): (JSC::DFG::SpeculativeJIT::compileDeleteById): (JSC::DFG::SpeculativeJIT::compileDeleteByVal): (JSC::DFG::SpeculativeJIT::compileInById): (JSC::DFG::SpeculativeJIT::compileInByVal): (JSC::DFG::SpeculativeJIT::compileGetPrivateNameByVal): (JSC::DFG::SpeculativeJIT::compileGetPrivateNameById): (JSC::DFG::SpeculativeJIT::compilePutPrivateNameById): (JSC::DFG::SpeculativeJIT::compileCheckPrivateBrand): (JSC::DFG::SpeculativeJIT::compileSetPrivateBrand): (JSC::DFG::SpeculativeJIT::compileInstanceOfForCells): (JSC::DFG::SpeculativeJIT::compileInstanceOf): (JSC::DFG::SpeculativeJIT::compilePutByIdFlush): (JSC::DFG::SpeculativeJIT::compilePutById): (JSC::DFG::SpeculativeJIT::compilePutByIdDirect): (JSC::DFG::SpeculativeJIT::cachedPutById): * dfg/DFGSpeculativeJIT.h: (JSC::DFG::SpeculativeJIT::callOperation): (JSC::DFG::SpeculativeJIT::appendCall): (JSC::DFG::SpeculativeJIT::appendCallSetResult): * dfg/DFGSpeculativeJIT32_64.cpp: (JSC::DFG::SpeculativeJIT::cachedGetById): (JSC::DFG::SpeculativeJIT::cachedGetByIdWithThis): (JSC::DFG::SpeculativeJIT::compile): * dfg/DFGSpeculativeJIT64.cpp: (JSC::DFG::SpeculativeJIT::cachedGetById): (JSC::DFG::SpeculativeJIT::cachedGetByIdWithThis): (JSC::DFG::SpeculativeJIT::compile): * ftl/FTLLowerDFGToB3.cpp: (JSC::FTL::DFG::LowerDFGToB3::getPrivateName): (JSC::FTL::DFG::LowerDFGToB3::compilePrivateBrandAccess): (JSC::FTL::DFG::LowerDFGToB3::cachedPutById): (JSC::FTL::DFG::LowerDFGToB3::compileGetByVal): (JSC::FTL::DFG::LowerDFGToB3::compileDelBy): (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq): * ftl/FTLSlowPathCall.cpp: (JSC::FTL::SlowPathCallContext::SlowPathCallContext): (JSC::FTL::SlowPathCallContext::keyWithTarget const): (JSC::FTL::SlowPathCallContext::makeCall): * ftl/FTLSlowPathCall.h: (JSC::FTL::callOperation): * ftl/FTLSlowPathCallKey.cpp: (JSC::FTL::SlowPathCallKey::dump const): * ftl/FTLSlowPathCallKey.h: (JSC::FTL::SlowPathCallKey::SlowPathCallKey): (JSC::FTL::SlowPathCallKey::indirectOffset const): (JSC::FTL::SlowPathCallKey::withCallTarget): (JSC::FTL::SlowPathCallKey::operator== const): (JSC::FTL::SlowPathCallKey::hash const): * ftl/FTLThunks.cpp: (JSC::FTL::genericGenerationThunkGenerator): (JSC::FTL::slowPathCallThunkGenerator): * jit/AssemblyHelpers.cpp: (JSC::AssemblyHelpers::emitVirtualCall): * jit/CCallHelpers.cpp: (JSC::CCallHelpers::emitJITCodeOver): * jit/CCallHelpers.h: (JSC::CCallHelpers::ArgCollection::ArgCollection): (JSC::CCallHelpers::ArgCollection::pushRegArg): (JSC::CCallHelpers::ArgCollection::pushExtraRegArg): (JSC::CCallHelpers::ArgCollection::pushNonArg): (JSC::CCallHelpers::ArgCollection::addGPRArg): (JSC::CCallHelpers::ArgCollection::addGPRExtraArg): (JSC::CCallHelpers::ArgCollection::addStackArg): (JSC::CCallHelpers::ArgCollection::addPoke): (JSC::CCallHelpers::calculatePokeOffset): (JSC::CCallHelpers::pokeForArgument): (JSC::CCallHelpers::stackAligned): (JSC::CCallHelpers::marshallArgumentRegister): (JSC::CCallHelpers::setupArgumentsImpl): (JSC::CCallHelpers::pokeArgumentsAligned): (JSC::CCallHelpers::std::is_integral<CURRENT_ARGUMENT_TYPE>::value): (JSC::CCallHelpers::std::is_pointer<CURRENT_ARGUMENT_TYPE>::value): (JSC::CCallHelpers::setupArgumentsEntryImpl): (JSC::CCallHelpers::setupArguments): (JSC::CCallHelpers::setupArgumentsForIndirectCall): * jit/GCAwareJITStubRoutine.cpp: (JSC::GCAwareJITStubRoutine::GCAwareJITStubRoutine): (JSC::GCAwareJITStubRoutine::makeGCAware): (JSC::GCAwareJITStubRoutine::observeZeroRefCount): (JSC::PolymorphicAccessJITStubRoutine::PolymorphicAccessJITStubRoutine): (JSC::PolymorphicAccessJITStubRoutine::observeZeroRefCount): (JSC::PolymorphicAccessJITStubRoutine::computeHash): (JSC::MarkingGCAwareJITStubRoutine::MarkingGCAwareJITStubRoutine): (JSC::GCAwareJITStubRoutineWithExceptionHandler::GCAwareJITStubRoutineWithExceptionHandler): (JSC::createICJITStubRoutine): (JSC::createJITStubRoutine): Deleted. * jit/GCAwareJITStubRoutine.h: (JSC::GCAwareJITStubRoutine::create): (JSC::PolymorphicAccessJITStubRoutine::cases const): (JSC::PolymorphicAccessJITStubRoutine::weakStructures const): (JSC::PolymorphicAccessJITStubRoutine::hash const): * jit/GPRInfo.h: * jit/JIT.cpp: (JSC::JIT::link): * jit/JIT.h: * jit/JITCall.cpp: (JSC::JIT::emit_op_iterator_open): (JSC::JIT::emitSlow_op_iterator_open): (JSC::JIT::emit_op_iterator_next): (JSC::JIT::emitSlow_op_iterator_next): * jit/JITCall32_64.cpp: (JSC::JIT::emit_op_iterator_open): (JSC::JIT::emit_op_iterator_next): * jit/JITCode.h: (JSC::JITCode::useDataIC): * jit/JITInlineCacheGenerator.cpp: (JSC::JITInlineCacheGenerator::JITInlineCacheGenerator): (JSC::JITInlineCacheGenerator::finalize): (JSC::JITByIdGenerator::JITByIdGenerator): (JSC::JITByIdGenerator::finalize): (JSC::JITByIdGenerator::generateFastCommon): (JSC::JITGetByIdGenerator::JITGetByIdGenerator): (JSC::JITGetByIdWithThisGenerator::JITGetByIdWithThisGenerator): (JSC::JITPutByIdGenerator::JITPutByIdGenerator): (JSC::JITDelByValGenerator::JITDelByValGenerator): (JSC::JITDelByValGenerator::generateFastPath): (JSC::JITDelByValGenerator::finalize): (JSC::JITDelByIdGenerator::JITDelByIdGenerator): (JSC::JITDelByIdGenerator::generateFastPath): (JSC::JITDelByIdGenerator::finalize): (JSC::JITInByValGenerator::JITInByValGenerator): (JSC::JITInByValGenerator::generateFastPath): (JSC::JITInByValGenerator::finalize): (JSC::JITInByIdGenerator::JITInByIdGenerator): (JSC::JITInstanceOfGenerator::JITInstanceOfGenerator): (JSC::JITInstanceOfGenerator::generateFastPath): (JSC::JITInstanceOfGenerator::finalize): (JSC::JITGetByValGenerator::JITGetByValGenerator): (JSC::JITGetByValGenerator::generateFastPath): (JSC::JITGetByValGenerator::finalize): (JSC::JITPrivateBrandAccessGenerator::JITPrivateBrandAccessGenerator): (JSC::JITPrivateBrandAccessGenerator::generateFastPath): (JSC::JITPrivateBrandAccessGenerator::finalize): * jit/JITInlineCacheGenerator.h: (JSC::JITGetByIdGenerator::JITGetByIdGenerator): Deleted. (JSC::JITGetByIdWithThisGenerator::JITGetByIdWithThisGenerator): Deleted. (JSC::JITPutByIdGenerator::JITPutByIdGenerator): Deleted. (JSC::JITDelByValGenerator::JITDelByValGenerator): Deleted. (JSC::JITDelByValGenerator::slowPathJump const): Deleted. (JSC::JITDelByIdGenerator::JITDelByIdGenerator): Deleted. (JSC::JITDelByIdGenerator::slowPathJump const): Deleted. (JSC::JITInByIdGenerator::JITInByIdGenerator): Deleted. (JSC::JITInstanceOfGenerator::JITInstanceOfGenerator): Deleted. (JSC::JITGetByValGenerator::JITGetByValGenerator): Deleted. (JSC::JITGetByValGenerator::slowPathJump const): Deleted. (JSC::JITPrivateBrandAccessGenerator::JITPrivateBrandAccessGenerator): Deleted. (JSC::JITPrivateBrandAccessGenerator::slowPathJump const): Deleted. * jit/JITInlines.h: (JSC::JIT::emitLoadForArrayMode): (JSC::JIT::appendCallWithExceptionCheck): (JSC::JIT::appendCallWithExceptionCheckSetJSValueResult): (JSC::JIT::appendCallWithExceptionCheckSetJSValueResultWithProfile): * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_instanceof): (JSC::JIT::emitSlow_op_instanceof): (JSC::JIT::privateCompileHasIndexedProperty): (JSC::JIT::emit_op_has_enumerable_indexed_property): (JSC::JIT::emitSlow_op_has_enumerable_indexed_property): * jit/JITOpcodes32_64.cpp: (JSC::JIT::emit_op_instanceof): (JSC::JIT::privateCompileHasIndexedProperty): (JSC::JIT::emit_op_has_enumerable_indexed_property): * jit/JITOperations.cpp: (JSC::JSC_DEFINE_JIT_OPERATION): * jit/JITPropertyAccess.cpp: (JSC::JIT::emit_op_get_by_val): (JSC::JIT::emitSlow_op_get_by_val): (JSC::JIT::slow_op_get_by_val_prepareCallGenerator): (JSC::JIT::emit_op_get_private_name): (JSC::JIT::emitSlow_op_get_private_name): (JSC::JIT::slow_op_get_private_name_prepareCallGenerator): (JSC::JIT::emit_op_set_private_brand): (JSC::JIT::emitSlow_op_set_private_brand): (JSC::JIT::emit_op_check_private_brand): (JSC::JIT::emitSlow_op_check_private_brand): (JSC::JIT::emit_op_put_by_val): (JSC::JIT::emitGenericContiguousPutByVal): (JSC::JIT::emitArrayStoragePutByVal): (JSC::JIT::emitPutByValWithCachedId): (JSC::JIT::emitSlow_op_put_by_val): (JSC::JIT::slow_op_put_by_val_prepareCallGenerator): (JSC::JIT::emit_op_put_private_name): (JSC::JIT::emitSlow_op_put_private_name): (JSC::JIT::slow_op_put_private_name_prepareCallGenerator): (JSC::JIT::emit_op_del_by_id): (JSC::JIT::emitSlow_op_del_by_id): (JSC::JIT::slow_op_del_by_id_prepareCallGenerator): (JSC::JIT::emit_op_del_by_val): (JSC::JIT::emitSlow_op_del_by_val): (JSC::JIT::slow_op_del_by_val_prepareCallGenerator): (JSC::JIT::emit_op_try_get_by_id): (JSC::JIT::emitSlow_op_try_get_by_id): (JSC::JIT::emit_op_get_by_id_direct): (JSC::JIT::emitSlow_op_get_by_id_direct): (JSC::JIT::emit_op_get_by_id): (JSC::JIT::emit_op_get_by_id_with_this): (JSC::JIT::emitSlow_op_get_by_id): (JSC::JIT::slow_op_get_by_id_prepareCallGenerator): (JSC::JIT::emitSlow_op_get_by_id_with_this): (JSC::JIT::slow_op_get_by_id_with_this_prepareCallGenerator): (JSC::JIT::emit_op_put_by_id): (JSC::JIT::emitSlow_op_put_by_id): (JSC::JIT::slow_op_put_by_id_prepareCallGenerator): (JSC::JIT::emit_op_in_by_id): (JSC::JIT::emitSlow_op_in_by_id): (JSC::JIT::emit_op_in_by_val): (JSC::JIT::emitSlow_op_in_by_val): (JSC::JIT::privateCompilePutByVal): (JSC::JIT::privateCompilePutPrivateNameWithCachedId): (JSC::JIT::privateCompilePutByValWithCachedId): (JSC::JIT::emitDoubleLoad): (JSC::JIT::emitContiguousLoad): (JSC::JIT::emitArrayStorageLoad): (JSC::JIT::emitIntTypedArrayPutByVal): (JSC::JIT::emitFloatTypedArrayPutByVal): * jit/JITPropertyAccess32_64.cpp: (JSC::JIT::emit_op_del_by_id): (JSC::JIT::emit_op_del_by_val): (JSC::JIT::emit_op_get_by_val): (JSC::JIT::emit_op_get_private_name): (JSC::JIT::emit_op_set_private_brand): (JSC::JIT::emit_op_check_private_brand): (JSC::JIT::emit_op_put_by_val): (JSC::JIT::emitGenericContiguousPutByVal): (JSC::JIT::emitArrayStoragePutByVal): (JSC::JIT::emit_op_try_get_by_id): (JSC::JIT::emit_op_get_by_id_direct): (JSC::JIT::emit_op_get_by_id): (JSC::JIT::emit_op_get_by_id_with_this): (JSC::JIT::emit_op_put_by_id): (JSC::JIT::emit_op_in_by_id): (JSC::JIT::emit_op_in_by_val): * jit/JITStubRoutine.h: * jit/PolymorphicCallStubRoutine.cpp: (JSC::PolymorphicCallStubRoutine::PolymorphicCallStubRoutine): * jit/Repatch.cpp: (JSC::readPutICCallTarget): (JSC::repatchSlowPathCall): (JSC::tryCacheGetBy): (JSC::repatchGetBy): (JSC::tryCacheArrayGetByVal): (JSC::repatchArrayGetByVal): (JSC::tryCachePutByID): (JSC::repatchPutByID): (JSC::tryCacheDeleteBy): (JSC::repatchDeleteBy): (JSC::tryCacheInBy): (JSC::repatchInBy): (JSC::tryCacheCheckPrivateBrand): (JSC::repatchCheckPrivateBrand): (JSC::tryCacheSetPrivateBrand): (JSC::repatchSetPrivateBrand): (JSC::tryCacheInstanceOf): (JSC::repatchInstanceOf): (JSC::linkSlowFor): (JSC::linkVirtualFor): (JSC::resetGetBy): (JSC::resetPutByID): (JSC::resetDelBy): (JSC::resetInBy): (JSC::resetInstanceOf): (JSC::resetCheckPrivateBrand): (JSC::resetSetPrivateBrand): (JSC::resetPatchableJump): Deleted. * jit/Repatch.h: * runtime/Options.cpp: (JSC::Options::recomputeDependentOptions): * runtime/OptionsList.h: * runtime/StructureIDTable.h: * runtime/VM.cpp: (JSC::VM::VM): (JSC::VM::~VM): * runtime/VM.h: Tools: * Scripts/run-jsc-stress-tests: Canonical link: https://commits.webkit.org/238638@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@278656 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-06-09 11:17:36 +00:00
SlowPathCall makeCall(VM&, CCallHelpers::Address);
FTL should generate code to call slow paths lazily https://bugs.webkit.org/show_bug.cgi?id=149936 Reviewed by Saam Barati. Source/JavaScriptCore: We often have complex slow paths in FTL-generated code. Those slow paths may never run. Even if they do run, they don't need stellar performance. So, it doesn't make sense to have LLVM worry about compiling such slow path code. This patch enables us to use our own MacroAssembler for compiling the slow path inside FTL code. It does this by using a crazy lambda thingy (see FTLLowerDFGToLLVM.cpp's lazySlowPath() and its documentation). The result is quite natural to use. Even for straight slow path calls via something like vmCall(), the lazySlowPath offers the benefit that the call marshalling and the exception checking are not expressed using LLVM IR and do not require LLVM to think about it. It also has the benefit that we never generate the code if it never runs. That's great, since function calls usually involve ~10 instructions total (move arguments to argument registers, make the call, check exception, etc.). This patch adds the lazy slow path abstraction and uses it for some slow paths in the FTL. The code we generate with lazy slow paths is worse than the code that LLVM would have generated. Therefore, a lazy slow path only makes sense when we have strong evidence that the slow path will execute infrequently relative to the fast path. This completely precludes the use of lazy slow paths for out-of-line Nodes that unconditionally call a C++ function. It also precludes their use for the GetByVal out-of-bounds handler, since when we generate a GetByVal with an out-of-bounds handler it means that we only know that the out-of-bounds case executed at least once. So, for all we know, it may actually be the common case. So, this patch just deployed the lazy slow path for GC slow paths and masquerades-as-undefined slow paths. It makes sense for GC slow paths because those have a statistical guarantee of slow path frequency - probably bounded at less than 1/10. It makes sense for masquerades-as- undefined because we can say quite confidently that this is an uncommon scenario on the modern Web. Something that's always been challenging about abstractions involving the MacroAssembler is that linking is a separate phase, and there is no way for someone who is just given access to the MacroAssembler& to emit code that requires linking, since linking happens once we have emitted all code and we are creating the LinkBuffer. Moreover, the FTL requires that the final parts of linking happen on the main thread. This patch ran into this issue, and solved it comprehensively, by introducing MacroAssembler::addLinkTask(). This takes a lambda and runs it at the bitter end of linking - when performFinalization() is called. This ensure that the task added by addLinkTask() runs on the main thread. This patch doesn't replace all of the previously existing idioms for dealing with this issue; we can do that later. This shows small speed-ups on a bunch of things. No big win on any benchmark aggregate. But mainly this is done for https://bugs.webkit.org/show_bug.cgi?id=149852, where we found that outlining the slow path in this way was a significant speed boost. * CMakeLists.txt: * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: * JavaScriptCore.xcodeproj/project.pbxproj: * assembler/AbstractMacroAssembler.h: (JSC::AbstractMacroAssembler::replaceWithAddressComputation): (JSC::AbstractMacroAssembler::addLinkTask): (JSC::AbstractMacroAssembler::AbstractMacroAssembler): * assembler/LinkBuffer.cpp: (JSC::LinkBuffer::linkCode): (JSC::LinkBuffer::allocate): (JSC::LinkBuffer::performFinalization): * assembler/LinkBuffer.h: (JSC::LinkBuffer::wasAlreadyDisassembled): (JSC::LinkBuffer::didAlreadyDisassemble): (JSC::LinkBuffer::vm): (JSC::LinkBuffer::executableOffsetFor): * bytecode/CodeOrigin.h: (JSC::CodeOrigin::CodeOrigin): (JSC::CodeOrigin::isSet): (JSC::CodeOrigin::operator bool): (JSC::CodeOrigin::isHashTableDeletedValue): (JSC::CodeOrigin::operator!): Deleted. * ftl/FTLCompile.cpp: (JSC::FTL::mmAllocateDataSection): * ftl/FTLInlineCacheDescriptor.h: (JSC::FTL::InlineCacheDescriptor::InlineCacheDescriptor): (JSC::FTL::CheckInDescriptor::CheckInDescriptor): (JSC::FTL::LazySlowPathDescriptor::LazySlowPathDescriptor): * ftl/FTLJITCode.h: * ftl/FTLJITFinalizer.cpp: (JSC::FTL::JITFinalizer::finalizeFunction): * ftl/FTLJITFinalizer.h: * ftl/FTLLazySlowPath.cpp: Added. (JSC::FTL::LazySlowPath::LazySlowPath): (JSC::FTL::LazySlowPath::~LazySlowPath): (JSC::FTL::LazySlowPath::generate): * ftl/FTLLazySlowPath.h: Added. (JSC::FTL::LazySlowPath::createGenerator): (JSC::FTL::LazySlowPath::patchpoint): (JSC::FTL::LazySlowPath::usedRegisters): (JSC::FTL::LazySlowPath::callSiteIndex): (JSC::FTL::LazySlowPath::stub): * ftl/FTLLazySlowPathCall.h: Added. (JSC::FTL::createLazyCallGenerator): * ftl/FTLLowerDFGToLLVM.cpp: (JSC::FTL::DFG::LowerDFGToLLVM::compileCreateActivation): (JSC::FTL::DFG::LowerDFGToLLVM::compileNewFunction): (JSC::FTL::DFG::LowerDFGToLLVM::compileCreateDirectArguments): (JSC::FTL::DFG::LowerDFGToLLVM::compileNewArrayWithSize): (JSC::FTL::DFG::LowerDFGToLLVM::compileMakeRope): (JSC::FTL::DFG::LowerDFGToLLVM::compileNotifyWrite): (JSC::FTL::DFG::LowerDFGToLLVM::compileIsObjectOrNull): (JSC::FTL::DFG::LowerDFGToLLVM::compileIsFunction): (JSC::FTL::DFG::LowerDFGToLLVM::compileIn): (JSC::FTL::DFG::LowerDFGToLLVM::compileMaterializeNewObject): (JSC::FTL::DFG::LowerDFGToLLVM::compileMaterializeCreateActivation): (JSC::FTL::DFG::LowerDFGToLLVM::compileCheckWatchdogTimer): (JSC::FTL::DFG::LowerDFGToLLVM::allocatePropertyStorageWithSizeImpl): (JSC::FTL::DFG::LowerDFGToLLVM::allocateObject): (JSC::FTL::DFG::LowerDFGToLLVM::allocateJSArray): (JSC::FTL::DFG::LowerDFGToLLVM::buildTypeOf): (JSC::FTL::DFG::LowerDFGToLLVM::sensibleDoubleToInt32): (JSC::FTL::DFG::LowerDFGToLLVM::lazySlowPath): (JSC::FTL::DFG::LowerDFGToLLVM::speculate): (JSC::FTL::DFG::LowerDFGToLLVM::emitStoreBarrier): * ftl/FTLOperations.cpp: (JSC::FTL::operationMaterializeObjectInOSR): (JSC::FTL::compileFTLLazySlowPath): * ftl/FTLOperations.h: * ftl/FTLSlowPathCall.cpp: (JSC::FTL::SlowPathCallContext::SlowPathCallContext): (JSC::FTL::SlowPathCallContext::~SlowPathCallContext): (JSC::FTL::SlowPathCallContext::keyWithTarget): (JSC::FTL::SlowPathCallContext::makeCall): (JSC::FTL::callSiteIndexForCodeOrigin): (JSC::FTL::storeCodeOrigin): Deleted. (JSC::FTL::callOperation): Deleted. * ftl/FTLSlowPathCall.h: (JSC::FTL::callOperation): * ftl/FTLState.h: * ftl/FTLThunks.cpp: (JSC::FTL::genericGenerationThunkGenerator): (JSC::FTL::osrExitGenerationThunkGenerator): (JSC::FTL::lazySlowPathGenerationThunkGenerator): (JSC::FTL::registerClobberCheck): * ftl/FTLThunks.h: * interpreter/CallFrame.h: (JSC::CallSiteIndex::CallSiteIndex): (JSC::CallSiteIndex::operator bool): (JSC::CallSiteIndex::bits): * jit/CCallHelpers.h: (JSC::CCallHelpers::setupArgument): (JSC::CCallHelpers::setupArgumentsWithExecState): * jit/JITOperations.cpp: Source/WTF: Enables SharedTask to handle any function type, not just void(). It's probably better to use SharedTask instead of std::function in performance-sensitive code. std::function uses the system malloc and has copy semantics. SharedTask uses FastMalloc and has aliasing semantics. So, you can just trust that it will have sensible performance characteristics. * wtf/ParallelHelperPool.cpp: (WTF::ParallelHelperClient::~ParallelHelperClient): (WTF::ParallelHelperClient::setTask): (WTF::ParallelHelperClient::doSomeHelping): (WTF::ParallelHelperClient::runTaskInParallel): (WTF::ParallelHelperClient::finish): (WTF::ParallelHelperClient::claimTask): (WTF::ParallelHelperClient::runTask): (WTF::ParallelHelperPool::doSomeHelping): (WTF::ParallelHelperPool::helperThreadBody): * wtf/ParallelHelperPool.h: (WTF::ParallelHelperClient::setFunction): (WTF::ParallelHelperClient::runFunctionInParallel): (WTF::ParallelHelperClient::pool): * wtf/SharedTask.h: (WTF::createSharedTask): (WTF::SharedTask::SharedTask): Deleted. (WTF::SharedTask::~SharedTask): Deleted. (WTF::SharedTaskFunctor::SharedTaskFunctor): Deleted. Canonical link: https://commits.webkit.org/168154@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@190860 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-10-12 17:56:26 +00:00
private:
Templatize CodePtr/Refs/FunctionPtrs with PtrTags. https://bugs.webkit.org/show_bug.cgi?id=184702 <rdar://problem/35391681> Reviewed by Filip Pizlo and Saam Barati. Source/JavaScriptCore: 1. Templatized MacroAssemblerCodePtr/Ref, FunctionPtr, and CodeLocation variants to take a PtrTag template argument. 2. Replaced some uses of raw pointers with the equivalent CodePtr / FunctionPtr. * assembler/AbstractMacroAssembler.h: (JSC::AbstractMacroAssembler::differenceBetweenCodePtr): (JSC::AbstractMacroAssembler::linkJump): (JSC::AbstractMacroAssembler::linkPointer): (JSC::AbstractMacroAssembler::getLinkerAddress): (JSC::AbstractMacroAssembler::repatchJump): (JSC::AbstractMacroAssembler::repatchJumpToNop): (JSC::AbstractMacroAssembler::repatchNearCall): (JSC::AbstractMacroAssembler::repatchCompact): (JSC::AbstractMacroAssembler::repatchInt32): (JSC::AbstractMacroAssembler::repatchPointer): (JSC::AbstractMacroAssembler::readPointer): (JSC::AbstractMacroAssembler::replaceWithLoad): (JSC::AbstractMacroAssembler::replaceWithAddressComputation): * assembler/CodeLocation.h: (JSC::CodeLocationCommon:: const): (JSC::CodeLocationCommon::CodeLocationCommon): (JSC::CodeLocationInstruction::CodeLocationInstruction): (JSC::CodeLocationLabel::CodeLocationLabel): (JSC::CodeLocationLabel::retagged): (JSC::CodeLocationLabel:: const): (JSC::CodeLocationJump::CodeLocationJump): (JSC::CodeLocationJump::retagged): (JSC::CodeLocationCall::CodeLocationCall): (JSC::CodeLocationCall::retagged): (JSC::CodeLocationNearCall::CodeLocationNearCall): (JSC::CodeLocationDataLabel32::CodeLocationDataLabel32): (JSC::CodeLocationDataLabelCompact::CodeLocationDataLabelCompact): (JSC::CodeLocationDataLabelPtr::CodeLocationDataLabelPtr): (JSC::CodeLocationConvertibleLoad::CodeLocationConvertibleLoad): (JSC::CodeLocationCommon<tag>::instructionAtOffset): (JSC::CodeLocationCommon<tag>::labelAtOffset): (JSC::CodeLocationCommon<tag>::jumpAtOffset): (JSC::CodeLocationCommon<tag>::callAtOffset): (JSC::CodeLocationCommon<tag>::nearCallAtOffset): (JSC::CodeLocationCommon<tag>::dataLabelPtrAtOffset): (JSC::CodeLocationCommon<tag>::dataLabel32AtOffset): (JSC::CodeLocationCommon<tag>::dataLabelCompactAtOffset): (JSC::CodeLocationCommon<tag>::convertibleLoadAtOffset): (JSC::CodeLocationCommon::instructionAtOffset): Deleted. (JSC::CodeLocationCommon::labelAtOffset): Deleted. (JSC::CodeLocationCommon::jumpAtOffset): Deleted. (JSC::CodeLocationCommon::callAtOffset): Deleted. (JSC::CodeLocationCommon::nearCallAtOffset): Deleted. (JSC::CodeLocationCommon::dataLabelPtrAtOffset): Deleted. (JSC::CodeLocationCommon::dataLabel32AtOffset): Deleted. (JSC::CodeLocationCommon::dataLabelCompactAtOffset): Deleted. (JSC::CodeLocationCommon::convertibleLoadAtOffset): Deleted. * assembler/LinkBuffer.cpp: (JSC::LinkBuffer::finalizeCodeWithoutDisassemblyImpl): (JSC::LinkBuffer::finalizeCodeWithDisassemblyImpl): (JSC::LinkBuffer::finalizeCodeWithoutDisassembly): Deleted. (JSC::LinkBuffer::finalizeCodeWithDisassembly): Deleted. * assembler/LinkBuffer.h: (JSC::LinkBuffer::link): (JSC::LinkBuffer::patch): (JSC::LinkBuffer::entrypoint): (JSC::LinkBuffer::locationOf): (JSC::LinkBuffer::locationOfNearCall): (JSC::LinkBuffer::finalizeCodeWithoutDisassembly): (JSC::LinkBuffer::finalizeCodeWithDisassembly): (JSC::LinkBuffer::trampolineAt): * assembler/MacroAssemblerARM.h: (JSC::MacroAssemblerARM::readCallTarget): (JSC::MacroAssemblerARM::replaceWithJump): (JSC::MacroAssemblerARM::startOfPatchableBranch32WithPatchOnAddress): (JSC::MacroAssemblerARM::startOfPatchableBranchPtrWithPatchOnAddress): (JSC::MacroAssemblerARM::startOfBranchPtrWithPatchOnRegister): (JSC::MacroAssemblerARM::revertJumpReplacementToBranchPtrWithPatch): (JSC::MacroAssemblerARM::revertJumpReplacementToPatchableBranch32WithPatch): (JSC::MacroAssemblerARM::revertJumpReplacementToPatchableBranchPtrWithPatch): (JSC::MacroAssemblerARM::repatchCall): (JSC::MacroAssemblerARM::linkCall): * assembler/MacroAssemblerARM64.h: (JSC::MacroAssemblerARM64::readCallTarget): (JSC::MacroAssemblerARM64::replaceWithVMHalt): (JSC::MacroAssemblerARM64::replaceWithJump): (JSC::MacroAssemblerARM64::startOfBranchPtrWithPatchOnRegister): (JSC::MacroAssemblerARM64::startOfPatchableBranchPtrWithPatchOnAddress): (JSC::MacroAssemblerARM64::startOfPatchableBranch32WithPatchOnAddress): (JSC::MacroAssemblerARM64::revertJumpReplacementToBranchPtrWithPatch): (JSC::MacroAssemblerARM64::revertJumpReplacementToPatchableBranchPtrWithPatch): (JSC::MacroAssemblerARM64::revertJumpReplacementToPatchableBranch32WithPatch): (JSC::MacroAssemblerARM64::repatchCall): (JSC::MacroAssemblerARM64::linkCall): * assembler/MacroAssemblerARMv7.h: (JSC::MacroAssemblerARMv7::replaceWithJump): (JSC::MacroAssemblerARMv7::readCallTarget): (JSC::MacroAssemblerARMv7::startOfBranchPtrWithPatchOnRegister): (JSC::MacroAssemblerARMv7::revertJumpReplacementToBranchPtrWithPatch): (JSC::MacroAssemblerARMv7::startOfPatchableBranchPtrWithPatchOnAddress): (JSC::MacroAssemblerARMv7::startOfPatchableBranch32WithPatchOnAddress): (JSC::MacroAssemblerARMv7::revertJumpReplacementToPatchableBranchPtrWithPatch): (JSC::MacroAssemblerARMv7::revertJumpReplacementToPatchableBranch32WithPatch): (JSC::MacroAssemblerARMv7::repatchCall): (JSC::MacroAssemblerARMv7::linkCall): * assembler/MacroAssemblerCodeRef.cpp: (JSC::MacroAssemblerCodePtrBase::dumpWithName): (JSC::MacroAssemblerCodeRefBase::tryToDisassemble): (JSC::MacroAssemblerCodeRefBase::disassembly): (JSC::MacroAssemblerCodePtr::createLLIntCodePtr): Deleted. (JSC::MacroAssemblerCodePtr::dumpWithName const): Deleted. (JSC::MacroAssemblerCodePtr::dump const): Deleted. (JSC::MacroAssemblerCodeRef::createLLIntCodeRef): Deleted. (JSC::MacroAssemblerCodeRef::tryToDisassemble const): Deleted. (JSC::MacroAssemblerCodeRef::disassembly const): Deleted. (JSC::MacroAssemblerCodeRef::dump const): Deleted. * assembler/MacroAssemblerCodeRef.h: (JSC::FunctionPtr::FunctionPtr): (JSC::FunctionPtr::retagged const): (JSC::FunctionPtr::retaggedExecutableAddress const): (JSC::FunctionPtr::operator== const): (JSC::FunctionPtr::operator!= const): (JSC::ReturnAddressPtr::ReturnAddressPtr): (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr): (JSC::MacroAssemblerCodePtr::createFromExecutableAddress): (JSC::MacroAssemblerCodePtr::retagged const): (JSC::MacroAssemblerCodePtr:: const): (JSC::MacroAssemblerCodePtr::dumpWithName const): (JSC::MacroAssemblerCodePtr::dump const): (JSC::MacroAssemblerCodePtrHash::hash): (JSC::MacroAssemblerCodePtrHash::equal): (JSC::MacroAssemblerCodeRef::MacroAssemblerCodeRef): (JSC::MacroAssemblerCodeRef::createSelfManagedCodeRef): (JSC::MacroAssemblerCodeRef::code const): (JSC::MacroAssemblerCodeRef::retaggedCode const): (JSC::MacroAssemblerCodeRef::retagged const): (JSC::MacroAssemblerCodeRef::tryToDisassemble const): (JSC::MacroAssemblerCodeRef::disassembly const): (JSC::MacroAssemblerCodeRef::dump const): (JSC::FunctionPtr<tag>::FunctionPtr): * assembler/MacroAssemblerMIPS.h: (JSC::MacroAssemblerMIPS::readCallTarget): (JSC::MacroAssemblerMIPS::replaceWithJump): (JSC::MacroAssemblerMIPS::startOfPatchableBranch32WithPatchOnAddress): (JSC::MacroAssemblerMIPS::startOfBranchPtrWithPatchOnRegister): (JSC::MacroAssemblerMIPS::revertJumpReplacementToBranchPtrWithPatch): (JSC::MacroAssemblerMIPS::startOfPatchableBranchPtrWithPatchOnAddress): (JSC::MacroAssemblerMIPS::revertJumpReplacementToPatchableBranch32WithPatch): (JSC::MacroAssemblerMIPS::revertJumpReplacementToPatchableBranchPtrWithPatch): (JSC::MacroAssemblerMIPS::repatchCall): (JSC::MacroAssemblerMIPS::linkCall): * assembler/MacroAssemblerX86.h: (JSC::MacroAssemblerX86::readCallTarget): (JSC::MacroAssemblerX86::startOfBranchPtrWithPatchOnRegister): (JSC::MacroAssemblerX86::startOfPatchableBranchPtrWithPatchOnAddress): (JSC::MacroAssemblerX86::startOfPatchableBranch32WithPatchOnAddress): (JSC::MacroAssemblerX86::revertJumpReplacementToBranchPtrWithPatch): (JSC::MacroAssemblerX86::revertJumpReplacementToPatchableBranchPtrWithPatch): (JSC::MacroAssemblerX86::revertJumpReplacementToPatchableBranch32WithPatch): (JSC::MacroAssemblerX86::repatchCall): (JSC::MacroAssemblerX86::linkCall): * assembler/MacroAssemblerX86Common.h: (JSC::MacroAssemblerX86Common::repatchCompact): (JSC::MacroAssemblerX86Common::replaceWithVMHalt): (JSC::MacroAssemblerX86Common::replaceWithJump): * assembler/MacroAssemblerX86_64.h: (JSC::MacroAssemblerX86_64::readCallTarget): (JSC::MacroAssemblerX86_64::startOfBranchPtrWithPatchOnRegister): (JSC::MacroAssemblerX86_64::startOfBranch32WithPatchOnRegister): (JSC::MacroAssemblerX86_64::startOfPatchableBranchPtrWithPatchOnAddress): (JSC::MacroAssemblerX86_64::startOfPatchableBranch32WithPatchOnAddress): (JSC::MacroAssemblerX86_64::revertJumpReplacementToPatchableBranchPtrWithPatch): (JSC::MacroAssemblerX86_64::revertJumpReplacementToPatchableBranch32WithPatch): (JSC::MacroAssemblerX86_64::revertJumpReplacementToBranchPtrWithPatch): (JSC::MacroAssemblerX86_64::repatchCall): (JSC::MacroAssemblerX86_64::linkCall): * assembler/testmasm.cpp: (JSC::compile): (JSC::invoke): (JSC::testProbeModifiesProgramCounter): * b3/B3Compilation.cpp: (JSC::B3::Compilation::Compilation): * b3/B3Compilation.h: (JSC::B3::Compilation::code const): (JSC::B3::Compilation::codeRef const): * b3/B3Compile.cpp: (JSC::B3::compile): * b3/B3LowerMacros.cpp: * b3/air/AirDisassembler.cpp: (JSC::B3::Air::Disassembler::dump): * b3/air/testair.cpp: * b3/testb3.cpp: (JSC::B3::invoke): (JSC::B3::testInterpreter): (JSC::B3::testEntrySwitchSimple): (JSC::B3::testEntrySwitchNoEntrySwitch): (JSC::B3::testEntrySwitchWithCommonPaths): (JSC::B3::testEntrySwitchWithCommonPathsAndNonTrivialEntrypoint): (JSC::B3::testEntrySwitchLoop): * bytecode/AccessCase.cpp: (JSC::AccessCase::generateImpl): * bytecode/AccessCaseSnippetParams.cpp: (JSC::SlowPathCallGeneratorWithArguments::generateImpl): * bytecode/ByValInfo.h: (JSC::ByValInfo::ByValInfo): * bytecode/CallLinkInfo.cpp: (JSC::CallLinkInfo::callReturnLocation): (JSC::CallLinkInfo::patchableJump): (JSC::CallLinkInfo::hotPathBegin): (JSC::CallLinkInfo::slowPathStart): * bytecode/CallLinkInfo.h: (JSC::CallLinkInfo::setCallLocations): (JSC::CallLinkInfo::hotPathOther): * bytecode/CodeBlock.cpp: (JSC::CodeBlock::finishCreation): * bytecode/GetByIdStatus.cpp: (JSC::GetByIdStatus::computeForStubInfoWithoutExitSiteFeedback): * bytecode/GetByIdVariant.cpp: (JSC::GetByIdVariant::GetByIdVariant): (JSC::GetByIdVariant::dumpInContext const): * bytecode/GetByIdVariant.h: (JSC::GetByIdVariant::customAccessorGetter const): * bytecode/GetterSetterAccessCase.cpp: (JSC::GetterSetterAccessCase::create): (JSC::GetterSetterAccessCase::GetterSetterAccessCase): (JSC::GetterSetterAccessCase::dumpImpl const): * bytecode/GetterSetterAccessCase.h: (JSC::GetterSetterAccessCase::customAccessor const): (): Deleted. * bytecode/HandlerInfo.h: (JSC::HandlerInfo::initialize): * bytecode/InlineAccess.cpp: (JSC::linkCodeInline): (JSC::InlineAccess::rewireStubAsJump): * bytecode/InlineAccess.h: * bytecode/JumpTable.h: (JSC::StringJumpTable::ctiForValue): (JSC::SimpleJumpTable::ctiForValue): * bytecode/LLIntCallLinkInfo.h: (JSC::LLIntCallLinkInfo::unlink): * bytecode/PolymorphicAccess.cpp: (JSC::AccessGenerationState::emitExplicitExceptionHandler): (JSC::PolymorphicAccess::regenerate): * bytecode/PolymorphicAccess.h: (JSC::AccessGenerationResult::AccessGenerationResult): (JSC::AccessGenerationResult::code const): * bytecode/StructureStubInfo.h: (JSC::StructureStubInfo::slowPathCallLocation): (JSC::StructureStubInfo::doneLocation): (JSC::StructureStubInfo::slowPathStartLocation): (JSC::StructureStubInfo::patchableJumpForIn): * dfg/DFGCommonData.h: (JSC::DFG::CommonData::appendCatchEntrypoint): * dfg/DFGDisassembler.cpp: (JSC::DFG::Disassembler::dumpDisassembly): * dfg/DFGDriver.h: * dfg/DFGJITCompiler.cpp: (JSC::DFG::JITCompiler::linkOSRExits): (JSC::DFG::JITCompiler::compileExceptionHandlers): (JSC::DFG::JITCompiler::link): (JSC::DFG::JITCompiler::compileFunction): (JSC::DFG::JITCompiler::noticeCatchEntrypoint): * dfg/DFGJITCompiler.h: (JSC::DFG::CallLinkRecord::CallLinkRecord): (JSC::DFG::JITCompiler::appendCall): (JSC::DFG::JITCompiler::JSCallRecord::JSCallRecord): (JSC::DFG::JITCompiler::JSDirectCallRecord::JSDirectCallRecord): (JSC::DFG::JITCompiler::JSDirectTailCallRecord::JSDirectTailCallRecord): * dfg/DFGJITFinalizer.cpp: (JSC::DFG::JITFinalizer::JITFinalizer): (JSC::DFG::JITFinalizer::finalize): (JSC::DFG::JITFinalizer::finalizeFunction): * dfg/DFGJITFinalizer.h: * dfg/DFGJumpReplacement.h: (JSC::DFG::JumpReplacement::JumpReplacement): * dfg/DFGNode.h: * dfg/DFGOSREntry.cpp: (JSC::DFG::prepareOSREntry): (JSC::DFG::prepareCatchOSREntry): * dfg/DFGOSREntry.h: (JSC::DFG::prepareOSREntry): * dfg/DFGOSRExit.cpp: (JSC::DFG::OSRExit::executeOSRExit): (JSC::DFG::reifyInlinedCallFrames): (JSC::DFG::adjustAndJumpToTarget): (JSC::DFG::OSRExit::codeLocationForRepatch const): (JSC::DFG::OSRExit::emitRestoreArguments): (JSC::DFG::OSRExit::compileOSRExit): * dfg/DFGOSRExit.h: * dfg/DFGOSRExitCompilerCommon.cpp: (JSC::DFG::handleExitCounts): (JSC::DFG::reifyInlinedCallFrames): (JSC::DFG::osrWriteBarrier): (JSC::DFG::adjustAndJumpToTarget): * dfg/DFGOperations.cpp: * dfg/DFGSlowPathGenerator.h: (JSC::DFG::CallResultAndArgumentsSlowPathGenerator::CallResultAndArgumentsSlowPathGenerator): (JSC::DFG::CallResultAndArgumentsSlowPathGenerator::unpackAndGenerate): (JSC::DFG::slowPathCall): * dfg/DFGSpeculativeJIT.cpp: (JSC::DFG::SpeculativeJIT::compileMathIC): (JSC::DFG::SpeculativeJIT::compileCallDOM): (JSC::DFG::SpeculativeJIT::compileCallDOMGetter): (JSC::DFG::SpeculativeJIT::emitSwitchIntJump): (JSC::DFG::SpeculativeJIT::emitSwitchImm): (JSC::DFG::SpeculativeJIT::emitSwitchStringOnString): (JSC::DFG::SpeculativeJIT::compileHasIndexedProperty): (JSC::DFG::SpeculativeJIT::compileGetDirectPname): (JSC::DFG::SpeculativeJIT::cachedPutById): * dfg/DFGSpeculativeJIT.h: (JSC::DFG::SpeculativeJIT::callOperation): (JSC::DFG::SpeculativeJIT::appendCall): (JSC::DFG::SpeculativeJIT::appendCallWithCallFrameRollbackOnException): (JSC::DFG::SpeculativeJIT::appendCallWithCallFrameRollbackOnExceptionSetResult): (JSC::DFG::SpeculativeJIT::appendCallSetResult): * dfg/DFGSpeculativeJIT64.cpp: (JSC::DFG::SpeculativeJIT::cachedGetById): (JSC::DFG::SpeculativeJIT::cachedGetByIdWithThis): (JSC::DFG::SpeculativeJIT::compile): * dfg/DFGThunks.cpp: (JSC::DFG::osrExitThunkGenerator): (JSC::DFG::osrExitGenerationThunkGenerator): (JSC::DFG::osrEntryThunkGenerator): * dfg/DFGThunks.h: * disassembler/ARM64Disassembler.cpp: (JSC::tryToDisassemble): * disassembler/ARMv7Disassembler.cpp: (JSC::tryToDisassemble): * disassembler/Disassembler.cpp: (JSC::disassemble): (JSC::disassembleAsynchronously): * disassembler/Disassembler.h: (JSC::tryToDisassemble): * disassembler/UDis86Disassembler.cpp: (JSC::tryToDisassembleWithUDis86): * disassembler/UDis86Disassembler.h: (JSC::tryToDisassembleWithUDis86): * disassembler/X86Disassembler.cpp: (JSC::tryToDisassemble): * ftl/FTLCompile.cpp: (JSC::FTL::compile): * ftl/FTLExceptionTarget.cpp: (JSC::FTL::ExceptionTarget::label): (JSC::FTL::ExceptionTarget::jumps): * ftl/FTLExceptionTarget.h: * ftl/FTLGeneratedFunction.h: * ftl/FTLJITCode.cpp: (JSC::FTL::JITCode::initializeB3Code): (JSC::FTL::JITCode::initializeAddressForCall): (JSC::FTL::JITCode::initializeArityCheckEntrypoint): (JSC::FTL::JITCode::addressForCall): (JSC::FTL::JITCode::executableAddressAtOffset): * ftl/FTLJITCode.h: (JSC::FTL::JITCode::b3Code const): * ftl/FTLJITFinalizer.cpp: (JSC::FTL::JITFinalizer::finalizeCommon): * ftl/FTLLazySlowPath.cpp: (JSC::FTL::LazySlowPath::initialize): (JSC::FTL::LazySlowPath::generate): * ftl/FTLLazySlowPath.h: (JSC::FTL::LazySlowPath::patchableJump const): (JSC::FTL::LazySlowPath::done const): (JSC::FTL::LazySlowPath::stub const): * ftl/FTLLazySlowPathCall.h: (JSC::FTL::createLazyCallGenerator): * ftl/FTLLink.cpp: (JSC::FTL::link): * ftl/FTLLowerDFGToB3.cpp: (JSC::FTL::DFG::LowerDFGToB3::lower): (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstruct): (JSC::FTL::DFG::LowerDFGToB3::compileDirectCallOrConstruct): (JSC::FTL::DFG::LowerDFGToB3::compileTailCall): (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargsSpread): (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargs): (JSC::FTL::DFG::LowerDFGToB3::compileCallEval): (JSC::FTL::DFG::LowerDFGToB3::compileInvalidationPoint): (JSC::FTL::DFG::LowerDFGToB3::compileIn): (JSC::FTL::DFG::LowerDFGToB3::compileCheckSubClass): (JSC::FTL::DFG::LowerDFGToB3::compileCallDOM): (JSC::FTL::DFG::LowerDFGToB3::compileCallDOMGetter): (JSC::FTL::DFG::LowerDFGToB3::lazySlowPath): * ftl/FTLOSRExit.cpp: (JSC::FTL::OSRExit::codeLocationForRepatch const): * ftl/FTLOSRExit.h: * ftl/FTLOSRExitCompiler.cpp: (JSC::FTL::compileStub): (JSC::FTL::compileFTLOSRExit): * ftl/FTLOSRExitHandle.cpp: (JSC::FTL::OSRExitHandle::emitExitThunk): * ftl/FTLOperations.cpp: (JSC::FTL::compileFTLLazySlowPath): * ftl/FTLPatchpointExceptionHandle.cpp: (JSC::FTL::PatchpointExceptionHandle::scheduleExitCreationForUnwind): * ftl/FTLSlowPathCall.cpp: (JSC::FTL::SlowPathCallContext::keyWithTarget const): (JSC::FTL::SlowPathCallContext::makeCall): * ftl/FTLSlowPathCall.h: (JSC::FTL::callOperation): * ftl/FTLSlowPathCallKey.cpp: (JSC::FTL::SlowPathCallKey::dump const): * ftl/FTLSlowPathCallKey.h: (JSC::FTL::SlowPathCallKey::SlowPathCallKey): (JSC::FTL::SlowPathCallKey::callTarget const): (JSC::FTL::SlowPathCallKey::withCallTarget): (JSC::FTL::SlowPathCallKey::hash const): (JSC::FTL::SlowPathCallKey::callPtrTag const): Deleted. * ftl/FTLState.cpp: (JSC::FTL::State::State): * ftl/FTLThunks.cpp: (JSC::FTL::genericGenerationThunkGenerator): (JSC::FTL::osrExitGenerationThunkGenerator): (JSC::FTL::lazySlowPathGenerationThunkGenerator): (JSC::FTL::slowPathCallThunkGenerator): * ftl/FTLThunks.h: (JSC::FTL::generateIfNecessary): (JSC::FTL::keyForThunk): (JSC::FTL::Thunks::getSlowPathCallThunk): (JSC::FTL::Thunks::keyForSlowPathCallThunk): * interpreter/InterpreterInlines.h: (JSC::Interpreter::getOpcodeID): * jit/AssemblyHelpers.cpp: (JSC::AssemblyHelpers::callExceptionFuzz): (JSC::AssemblyHelpers::emitDumbVirtualCall): (JSC::AssemblyHelpers::debugCall): * jit/CCallHelpers.cpp: (JSC::CCallHelpers::ensureShadowChickenPacket): * jit/ExecutableAllocator.cpp: (JSC::FixedVMPoolExecutableAllocator::initializeSeparatedWXHeaps): (JSC::FixedVMPoolExecutableAllocator::jitWriteThunkGenerator): * jit/ExecutableAllocator.h: (JSC::performJITMemcpy): * jit/GCAwareJITStubRoutine.cpp: (JSC::GCAwareJITStubRoutine::GCAwareJITStubRoutine): (JSC::MarkingGCAwareJITStubRoutine::MarkingGCAwareJITStubRoutine): (JSC::GCAwareJITStubRoutineWithExceptionHandler::GCAwareJITStubRoutineWithExceptionHandler): (JSC::createJITStubRoutine): * jit/GCAwareJITStubRoutine.h: (JSC::createJITStubRoutine): * jit/JIT.cpp: (JSC::ctiPatchCallByReturnAddress): (JSC::JIT::compileWithoutLinking): (JSC::JIT::link): (JSC::JIT::privateCompileExceptionHandlers): * jit/JIT.h: (JSC::CallRecord::CallRecord): * jit/JITArithmetic.cpp: (JSC::JIT::emitMathICFast): (JSC::JIT::emitMathICSlow): * jit/JITCall.cpp: (JSC::JIT::compileOpCallSlowCase): * jit/JITCall32_64.cpp: (JSC::JIT::compileOpCallSlowCase): * jit/JITCode.cpp: (JSC::JITCodeWithCodeRef::JITCodeWithCodeRef): (JSC::JITCodeWithCodeRef::executableAddressAtOffset): (JSC::DirectJITCode::DirectJITCode): (JSC::DirectJITCode::initializeCodeRef): (JSC::DirectJITCode::addressForCall): (JSC::NativeJITCode::NativeJITCode): (JSC::NativeJITCode::initializeCodeRef): (JSC::NativeJITCode::addressForCall): * jit/JITCode.h: * jit/JITCodeMap.h: (JSC::JITCodeMap::Entry::Entry): (JSC::JITCodeMap::Entry::codeLocation): (JSC::JITCodeMap::append): (JSC::JITCodeMap::find const): * jit/JITDisassembler.cpp: (JSC::JITDisassembler::dumpDisassembly): * jit/JITExceptions.cpp: (JSC::genericUnwind): * jit/JITInlineCacheGenerator.cpp: (JSC::JITByIdGenerator::finalize): * jit/JITInlines.h: (JSC::JIT::emitNakedCall): (JSC::JIT::emitNakedTailCall): (JSC::JIT::appendCallWithExceptionCheck): (JSC::JIT::appendCallWithExceptionCheckAndSlowPathReturnType): (JSC::JIT::appendCallWithCallFrameRollbackOnException): (JSC::JIT::appendCallWithExceptionCheckSetJSValueResult): (JSC::JIT::appendCallWithExceptionCheckSetJSValueResultWithProfile): * jit/JITMathIC.h: (JSC::isProfileEmpty): * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_catch): (JSC::JIT::emit_op_switch_imm): (JSC::JIT::emit_op_switch_char): (JSC::JIT::emit_op_switch_string): (JSC::JIT::privateCompileHasIndexedProperty): (JSC::JIT::emitSlow_op_has_indexed_property): * jit/JITOpcodes32_64.cpp: (JSC::JIT::privateCompileHasIndexedProperty): * jit/JITOperations.cpp: (JSC::getByVal): * jit/JITPropertyAccess.cpp: (JSC::JIT::stringGetByValStubGenerator): (JSC::JIT::emitGetByValWithCachedId): (JSC::JIT::emitSlow_op_get_by_val): (JSC::JIT::emitPutByValWithCachedId): (JSC::JIT::emitSlow_op_put_by_val): (JSC::JIT::emitSlow_op_try_get_by_id): (JSC::JIT::emitSlow_op_get_by_id_direct): (JSC::JIT::emitSlow_op_get_by_id): (JSC::JIT::emitSlow_op_get_by_id_with_this): (JSC::JIT::emitSlow_op_put_by_id): (JSC::JIT::privateCompileGetByVal): (JSC::JIT::privateCompileGetByValWithCachedId): (JSC::JIT::privateCompilePutByVal): (JSC::JIT::privateCompilePutByValWithCachedId): * jit/JITPropertyAccess32_64.cpp: (JSC::JIT::stringGetByValStubGenerator): (JSC::JIT::emitSlow_op_get_by_val): (JSC::JIT::emitSlow_op_put_by_val): * jit/JITStubRoutine.h: (JSC::JITStubRoutine::JITStubRoutine): (JSC::JITStubRoutine::createSelfManagedRoutine): (JSC::JITStubRoutine::code const): (JSC::JITStubRoutine::asCodePtr): * jit/JITThunks.cpp: (JSC::JITThunks::ctiNativeCall): (JSC::JITThunks::ctiNativeConstruct): (JSC::JITThunks::ctiNativeTailCall): (JSC::JITThunks::ctiNativeTailCallWithoutSavedTags): (JSC::JITThunks::ctiInternalFunctionCall): (JSC::JITThunks::ctiInternalFunctionConstruct): (JSC::JITThunks::ctiStub): (JSC::JITThunks::existingCTIStub): (JSC::JITThunks::hostFunctionStub): * jit/JITThunks.h: * jit/PCToCodeOriginMap.cpp: (JSC::PCToCodeOriginMap::PCToCodeOriginMap): * jit/PCToCodeOriginMap.h: * jit/PolymorphicCallStubRoutine.cpp: (JSC::PolymorphicCallStubRoutine::PolymorphicCallStubRoutine): * jit/PolymorphicCallStubRoutine.h: * jit/Repatch.cpp: (JSC::readPutICCallTarget): (JSC::ftlThunkAwareRepatchCall): (JSC::appropriateOptimizingGetByIdFunction): (JSC::appropriateGetByIdFunction): (JSC::tryCacheGetByID): (JSC::repatchGetByID): (JSC::tryCachePutByID): (JSC::repatchPutByID): (JSC::tryCacheIn): (JSC::repatchIn): (JSC::linkSlowFor): (JSC::linkFor): (JSC::linkDirectFor): (JSC::revertCall): (JSC::unlinkFor): (JSC::linkVirtualFor): (JSC::linkPolymorphicCall): (JSC::resetGetByID): (JSC::resetPutByID): * jit/Repatch.h: * jit/SlowPathCall.h: (JSC::JITSlowPathCall::call): * jit/SpecializedThunkJIT.h: (JSC::SpecializedThunkJIT::finalize): (JSC::SpecializedThunkJIT::callDoubleToDouble): (JSC::SpecializedThunkJIT::callDoubleToDoublePreservingReturn): * jit/ThunkGenerator.h: * jit/ThunkGenerators.cpp: (JSC::throwExceptionFromCallSlowPathGenerator): (JSC::slowPathFor): (JSC::linkCallThunkGenerator): (JSC::linkPolymorphicCallThunkGenerator): (JSC::virtualThunkFor): (JSC::nativeForGenerator): (JSC::nativeCallGenerator): (JSC::nativeTailCallGenerator): (JSC::nativeTailCallWithoutSavedTagsGenerator): (JSC::nativeConstructGenerator): (JSC::internalFunctionCallGenerator): (JSC::internalFunctionConstructGenerator): (JSC::arityFixupGenerator): (JSC::unreachableGenerator): (JSC::charCodeAtThunkGenerator): (JSC::charAtThunkGenerator): (JSC::fromCharCodeThunkGenerator): (JSC::clz32ThunkGenerator): (JSC::sqrtThunkGenerator): (JSC::floorThunkGenerator): (JSC::ceilThunkGenerator): (JSC::truncThunkGenerator): (JSC::roundThunkGenerator): (JSC::expThunkGenerator): (JSC::logThunkGenerator): (JSC::absThunkGenerator): (JSC::imulThunkGenerator): (JSC::randomThunkGenerator): (JSC::boundThisNoArgsFunctionCallGenerator): * jit/ThunkGenerators.h: * llint/LLIntData.cpp: (JSC::LLInt::initialize): * llint/LLIntData.h: (JSC::LLInt::getExecutableAddress): (JSC::LLInt::getCodePtr): (JSC::LLInt::getCodeRef): (JSC::LLInt::getCodeFunctionPtr): * llint/LLIntEntrypoint.cpp: (JSC::LLInt::setFunctionEntrypoint): (JSC::LLInt::setEvalEntrypoint): (JSC::LLInt::setProgramEntrypoint): (JSC::LLInt::setModuleProgramEntrypoint): * llint/LLIntExceptions.cpp: (JSC::LLInt::callToThrow): * llint/LLIntSlowPaths.cpp: (JSC::LLInt::LLINT_SLOW_PATH_DECL): (JSC::LLInt::setUpCall): * llint/LLIntThunks.cpp: (JSC::vmEntryToWasm): (JSC::LLInt::generateThunkWithJumpTo): (JSC::LLInt::functionForCallEntryThunkGenerator): (JSC::LLInt::functionForConstructEntryThunkGenerator): (JSC::LLInt::functionForCallArityCheckThunkGenerator): (JSC::LLInt::functionForConstructArityCheckThunkGenerator): (JSC::LLInt::evalEntryThunkGenerator): (JSC::LLInt::programEntryThunkGenerator): (JSC::LLInt::moduleProgramEntryThunkGenerator): * llint/LLIntThunks.h: * llint/LowLevelInterpreter.asm: * llint/LowLevelInterpreter32_64.asm: * llint/LowLevelInterpreter64.asm: * profiler/ProfilerCompilation.cpp: (JSC::Profiler::Compilation::addOSRExitSite): * profiler/ProfilerCompilation.h: * profiler/ProfilerOSRExitSite.cpp: (JSC::Profiler::OSRExitSite::toJS const): * profiler/ProfilerOSRExitSite.h: (JSC::Profiler::OSRExitSite::OSRExitSite): (JSC::Profiler::OSRExitSite::codeAddress const): (JSC::Profiler::OSRExitSite:: const): Deleted. * runtime/ExecutableBase.cpp: (JSC::ExecutableBase::clearCode): * runtime/ExecutableBase.h: (JSC::ExecutableBase::entrypointFor): * runtime/NativeExecutable.cpp: (JSC::NativeExecutable::finishCreation): * runtime/NativeFunction.h: (JSC::TaggedNativeFunction::TaggedNativeFunction): (JSC::TaggedNativeFunction::operator NativeFunction): * runtime/PtrTag.h: (JSC::tagCodePtr): (JSC::untagCodePtr): (JSC::retagCodePtr): (JSC::tagCFunctionPtr): (JSC::untagCFunctionPtr): (JSC::nextPtrTagID): Deleted. * runtime/PutPropertySlot.h: (JSC::PutPropertySlot::PutPropertySlot): (JSC::PutPropertySlot::setCustomValue): (JSC::PutPropertySlot::setCustomAccessor): (JSC::PutPropertySlot::customSetter const): * runtime/ScriptExecutable.cpp: (JSC::ScriptExecutable::installCode): * runtime/VM.cpp: (JSC::VM::getHostFunction): (JSC::VM::getCTIInternalFunctionTrampolineFor): * runtime/VM.h: (JSC::VM::getCTIStub): * wasm/WasmB3IRGenerator.cpp: (JSC::Wasm::B3IRGenerator::B3IRGenerator): (JSC::Wasm::B3IRGenerator::emitExceptionCheck): (JSC::Wasm::B3IRGenerator::emitTierUpCheck): (JSC::Wasm::B3IRGenerator::addCall): (JSC::Wasm::B3IRGenerator::addCallIndirect): * wasm/WasmBBQPlan.cpp: (JSC::Wasm::BBQPlan::prepare): (JSC::Wasm::BBQPlan::complete): * wasm/WasmBBQPlan.h: * wasm/WasmBinding.cpp: (JSC::Wasm::wasmToWasm): * wasm/WasmBinding.h: * wasm/WasmCallee.h: (JSC::Wasm::Callee::entrypoint const): * wasm/WasmCallingConvention.h: (JSC::Wasm::CallingConvention::setupFrameInPrologue const): * wasm/WasmCodeBlock.h: (JSC::Wasm::CodeBlock::entrypointLoadLocationFromFunctionIndexSpace): * wasm/WasmFaultSignalHandler.cpp: (JSC::Wasm::trapHandler): * wasm/WasmFormat.h: * wasm/WasmInstance.h: * wasm/WasmOMGPlan.cpp: (JSC::Wasm::OMGPlan::work): * wasm/WasmThunks.cpp: (JSC::Wasm::throwExceptionFromWasmThunkGenerator): (JSC::Wasm::throwStackOverflowFromWasmThunkGenerator): (JSC::Wasm::triggerOMGTierUpThunkGenerator): (JSC::Wasm::Thunks::stub): (JSC::Wasm::Thunks::existingStub): * wasm/WasmThunks.h: * wasm/js/JSToWasm.cpp: (JSC::Wasm::createJSToWasmWrapper): * wasm/js/JSWebAssemblyCodeBlock.h: * wasm/js/WasmToJS.cpp: (JSC::Wasm::handleBadI64Use): (JSC::Wasm::wasmToJS): * wasm/js/WasmToJS.h: * wasm/js/WebAssemblyFunction.h: * yarr/YarrJIT.cpp: (JSC::Yarr::YarrGenerator::loadFromFrameAndJump): (JSC::Yarr::YarrGenerator::BacktrackingState::linkDataLabels): (JSC::Yarr::YarrGenerator::compile): * yarr/YarrJIT.h: (JSC::Yarr::YarrCodeBlock::set8BitCode): (JSC::Yarr::YarrCodeBlock::set16BitCode): (JSC::Yarr::YarrCodeBlock::set8BitCodeMatchOnly): (JSC::Yarr::YarrCodeBlock::set16BitCodeMatchOnly): (JSC::Yarr::YarrCodeBlock::execute): (JSC::Yarr::YarrCodeBlock::clear): Source/WebCore: No new tests. This is covered by existing tests. * WebCore.xcodeproj/project.pbxproj: * css/ElementRuleCollector.cpp: (WebCore::ElementRuleCollector::ruleMatches): * cssjit/CSSPtrTag.h: Added. * cssjit/CompiledSelector.h: * cssjit/FunctionCall.h: (WebCore::FunctionCall::FunctionCall): (WebCore::FunctionCall::setFunctionAddress): (WebCore::FunctionCall::prepareAndCall): * cssjit/SelectorCompiler.cpp: (WebCore::SelectorCompiler::compileSelector): (WebCore::SelectorCompiler::SelectorFragment::appendUnoptimizedPseudoClassWithContext): (WebCore::SelectorCompiler::addPseudoClassType): (WebCore::SelectorCompiler::SelectorCodeGenerator::compile): (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributeFunctionCallValueMatching): (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementFunctionCallTest): (WebCore::SelectorCompiler::SelectorCodeGenerator::generateContextFunctionCallTest): * cssjit/SelectorCompiler.h: (WebCore::SelectorCompiler::ruleCollectorSimpleSelectorCheckerFunction): (WebCore::SelectorCompiler::querySelectorSimpleSelectorCheckerFunction): (WebCore::SelectorCompiler::ruleCollectorSelectorCheckerFunctionWithCheckingContext): (WebCore::SelectorCompiler::querySelectorSelectorCheckerFunctionWithCheckingContext): * dom/SelectorQuery.cpp: (WebCore::SelectorDataList::executeCompiledSingleMultiSelectorData const): (WebCore::SelectorDataList::execute const): * dom/SelectorQuery.h: Canonical link: https://commits.webkit.org/200234@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@230748 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-04-18 03:31:09 +00:00
SlowPathCallKey keyWithTarget(FunctionPtr<CFunctionPtrTag> callTarget) const;
[JSC] Use DataIC for AccessCase https://bugs.webkit.org/show_bug.cgi?id=226072 Reviewed by Saam Barati and Filip Pizlo. Source/JavaScriptCore: This patch adds non-repatching IC for Baseline JIT in ARM64. This does not work in non-ARM64 architectures (including X64) due to the use of link-register. 1. We add non-repatching IC, which is enabled only in Baseline due to performance reason. We are using the existing IC in DFG and FTL. Non-repatching includes fast-path, and slow-path's operation function. 2. We still keep InlineAccess in all tiers. Removing that causes 0.3 ~ 1.0% regression in Speedometer2. This means that we still need some repatching when we first introduce stubs. 3. We add a mechanism to share generated code stubs in non-repatching IC. Currently, getter / setter / custom accessors are excluded since their code relies on JSGlobalObject, CodeBlock etc. which are not included in AccessCase's data structure. 4. This patch still relies on that CodeBlock will be destroyed synchronously since we need to ensure that sharing-hash-table does not include already-dead JIT code stubs. We can fix it (e.g. annotating epoch to these stubs, bump them in finalizeUnconditionally), but we avoid doing that to prevent from further enlarging this patch. This patch is already significant in its size. 5. Added callOperation(Address) support in CCallHelpers, which can save the target in nonArgGPR0, and call it so that we can use Address including GPR which is also used for arguments. Performance is neutral in JetStream2 and Speedometer2. But it offers the way to remove some code generation in Baseline. * assembler/MacroAssemblerARM64E.h: (JSC::MacroAssemblerARM64E::call): * bytecode/AccessCase.cpp: (JSC::AccessCase::create): (JSC::AccessCase::createTransition): (JSC::AccessCase::createDelete): (JSC::AccessCase::createCheckPrivateBrand): (JSC::AccessCase::createSetPrivateBrand): (JSC::AccessCase::fromStructureStubInfo): (JSC::AccessCase::clone const): (JSC::AccessCase::generateWithGuard): (JSC::AccessCase::generateImpl): (JSC::AccessCase::canBeShared): * bytecode/AccessCase.h: (JSC::AccessCase::hash const): (JSC::AccessCase::AccessCase): (JSC::SharedJITStubSet::Hash::Key::Key): (JSC::SharedJITStubSet::Hash::Key::isHashTableDeletedValue const): (JSC::SharedJITStubSet::Hash::Key::operator==): (JSC::SharedJITStubSet::Hash::hash): (JSC::SharedJITStubSet::Hash::equal): (JSC::SharedJITStubSet::Searcher::Translator::hash): (JSC::SharedJITStubSet::Searcher::Translator::equal): (JSC::SharedJITStubSet::PointerTranslator::hash): (JSC::SharedJITStubSet::PointerTranslator::equal): (JSC::SharedJITStubSet::add): (JSC::SharedJITStubSet::remove): (JSC::SharedJITStubSet::find): * bytecode/ByValInfo.h: (JSC::ByValInfo::setUp): (JSC::ByValInfo::offsetOfSlowOperation): (JSC::ByValInfo::offsetOfNotIndexJumpTarget): (JSC::ByValInfo::offsetOfBadTypeJumpTarget): * bytecode/CallLinkInfo.cpp: (JSC::CallLinkInfo::initializeDirectCall): (JSC::CallLinkInfo::setDirectCallTarget): * bytecode/CodeBlock.h: (JSC::CodeBlock::useDataIC const): * bytecode/GetterSetterAccessCase.cpp: (JSC::GetterSetterAccessCase::create): (JSC::GetterSetterAccessCase::clone const): (JSC::GetterSetterAccessCase::emitDOMJITGetter): * bytecode/GetterSetterAccessCase.h: * bytecode/InlineAccess.cpp: (JSC::getScratchRegister): (JSC::InlineAccess::rewireStubAsJumpInAccessNotUsingInlineAccess): (JSC::InlineAccess::rewireStubAsJumpInAccess): (JSC::InlineAccess::resetStubAsJumpInAccess): (JSC::InlineAccess::resetStubAsJumpInAccessNotUsingInlineAccess): (JSC::InlineAccess::rewireStubAsJump): Deleted. * bytecode/InlineAccess.h: * bytecode/InstanceOfAccessCase.cpp: (JSC::InstanceOfAccessCase::create): (JSC::InstanceOfAccessCase::clone const): * bytecode/InstanceOfAccessCase.h: * bytecode/IntrinsicGetterAccessCase.cpp: (JSC::IntrinsicGetterAccessCase::create): (JSC::IntrinsicGetterAccessCase::clone const): * bytecode/IntrinsicGetterAccessCase.h: * bytecode/ModuleNamespaceAccessCase.cpp: (JSC::ModuleNamespaceAccessCase::create): (JSC::ModuleNamespaceAccessCase::clone const): * bytecode/ModuleNamespaceAccessCase.h: * bytecode/ObjectPropertyConditionSet.h: (JSC::ObjectPropertyConditionSet::hash const): (JSC::ObjectPropertyConditionSet::operator==): (JSC::ObjectPropertyConditionSet::operator!=): * bytecode/PolymorphicAccess.cpp: (JSC::AccessGenerationState::installWatchpoint): (JSC::AccessGenerationState::succeed): (JSC::AccessGenerationState::preserveLiveRegistersToStackForCallWithoutExceptions): (JSC::PolymorphicAccess::addCases): (JSC::PolymorphicAccess::addCase): (JSC::PolymorphicAccess::visitWeak const): (JSC::PolymorphicAccess::regenerate): * bytecode/PolymorphicAccess.h: (JSC::AccessGenerationState::AccessGenerationState): (JSC::AccessGenerationState::preserveLiveRegistersToStackForCallWithoutExceptions): * bytecode/ProxyableAccessCase.cpp: (JSC::ProxyableAccessCase::create): (JSC::ProxyableAccessCase::clone const): * bytecode/ProxyableAccessCase.h: * bytecode/StructureStubInfo.cpp: (JSC::StructureStubInfo::StructureStubInfo): (JSC::StructureStubInfo::addAccessCase): (JSC::StructureStubInfo::reset): * bytecode/StructureStubInfo.h: (JSC::StructureStubInfo::offsetOfCodePtr): (JSC::StructureStubInfo::offsetOfSlowPathStartLocation): (JSC::StructureStubInfo::offsetOfSlowOperation): (JSC::StructureStubInfo::patchableJump): Deleted. * dfg/DFGJITCompiler.h: (JSC::DFG::JITCompiler::appendCall): * dfg/DFGSlowPathGenerator.h: (JSC::DFG::slowPathICCall): * dfg/DFGSpeculativeJIT.cpp: (JSC::DFG::SpeculativeJIT::compileGetById): (JSC::DFG::SpeculativeJIT::compileGetByIdFlush): (JSC::DFG::SpeculativeJIT::compileDeleteById): (JSC::DFG::SpeculativeJIT::compileDeleteByVal): (JSC::DFG::SpeculativeJIT::compileInById): (JSC::DFG::SpeculativeJIT::compileInByVal): (JSC::DFG::SpeculativeJIT::compileGetPrivateNameByVal): (JSC::DFG::SpeculativeJIT::compileGetPrivateNameById): (JSC::DFG::SpeculativeJIT::compilePutPrivateNameById): (JSC::DFG::SpeculativeJIT::compileCheckPrivateBrand): (JSC::DFG::SpeculativeJIT::compileSetPrivateBrand): (JSC::DFG::SpeculativeJIT::compileInstanceOfForCells): (JSC::DFG::SpeculativeJIT::compileInstanceOf): (JSC::DFG::SpeculativeJIT::compilePutByIdFlush): (JSC::DFG::SpeculativeJIT::compilePutById): (JSC::DFG::SpeculativeJIT::compilePutByIdDirect): (JSC::DFG::SpeculativeJIT::cachedPutById): * dfg/DFGSpeculativeJIT.h: (JSC::DFG::SpeculativeJIT::callOperation): (JSC::DFG::SpeculativeJIT::appendCall): (JSC::DFG::SpeculativeJIT::appendCallSetResult): * dfg/DFGSpeculativeJIT32_64.cpp: (JSC::DFG::SpeculativeJIT::cachedGetById): (JSC::DFG::SpeculativeJIT::cachedGetByIdWithThis): (JSC::DFG::SpeculativeJIT::compile): * dfg/DFGSpeculativeJIT64.cpp: (JSC::DFG::SpeculativeJIT::cachedGetById): (JSC::DFG::SpeculativeJIT::cachedGetByIdWithThis): (JSC::DFG::SpeculativeJIT::compile): * ftl/FTLLowerDFGToB3.cpp: (JSC::FTL::DFG::LowerDFGToB3::getPrivateName): (JSC::FTL::DFG::LowerDFGToB3::compilePrivateBrandAccess): (JSC::FTL::DFG::LowerDFGToB3::cachedPutById): (JSC::FTL::DFG::LowerDFGToB3::compileGetByVal): (JSC::FTL::DFG::LowerDFGToB3::compileDelBy): (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq): * ftl/FTLSlowPathCall.cpp: (JSC::FTL::SlowPathCallContext::SlowPathCallContext): (JSC::FTL::SlowPathCallContext::keyWithTarget const): (JSC::FTL::SlowPathCallContext::makeCall): * ftl/FTLSlowPathCall.h: (JSC::FTL::callOperation): * ftl/FTLSlowPathCallKey.cpp: (JSC::FTL::SlowPathCallKey::dump const): * ftl/FTLSlowPathCallKey.h: (JSC::FTL::SlowPathCallKey::SlowPathCallKey): (JSC::FTL::SlowPathCallKey::indirectOffset const): (JSC::FTL::SlowPathCallKey::withCallTarget): (JSC::FTL::SlowPathCallKey::operator== const): (JSC::FTL::SlowPathCallKey::hash const): * ftl/FTLThunks.cpp: (JSC::FTL::genericGenerationThunkGenerator): (JSC::FTL::slowPathCallThunkGenerator): * jit/AssemblyHelpers.cpp: (JSC::AssemblyHelpers::emitVirtualCall): * jit/CCallHelpers.cpp: (JSC::CCallHelpers::emitJITCodeOver): * jit/CCallHelpers.h: (JSC::CCallHelpers::ArgCollection::ArgCollection): (JSC::CCallHelpers::ArgCollection::pushRegArg): (JSC::CCallHelpers::ArgCollection::pushExtraRegArg): (JSC::CCallHelpers::ArgCollection::pushNonArg): (JSC::CCallHelpers::ArgCollection::addGPRArg): (JSC::CCallHelpers::ArgCollection::addGPRExtraArg): (JSC::CCallHelpers::ArgCollection::addStackArg): (JSC::CCallHelpers::ArgCollection::addPoke): (JSC::CCallHelpers::calculatePokeOffset): (JSC::CCallHelpers::pokeForArgument): (JSC::CCallHelpers::stackAligned): (JSC::CCallHelpers::marshallArgumentRegister): (JSC::CCallHelpers::setupArgumentsImpl): (JSC::CCallHelpers::pokeArgumentsAligned): (JSC::CCallHelpers::std::is_integral<CURRENT_ARGUMENT_TYPE>::value): (JSC::CCallHelpers::std::is_pointer<CURRENT_ARGUMENT_TYPE>::value): (JSC::CCallHelpers::setupArgumentsEntryImpl): (JSC::CCallHelpers::setupArguments): (JSC::CCallHelpers::setupArgumentsForIndirectCall): * jit/GCAwareJITStubRoutine.cpp: (JSC::GCAwareJITStubRoutine::GCAwareJITStubRoutine): (JSC::GCAwareJITStubRoutine::makeGCAware): (JSC::GCAwareJITStubRoutine::observeZeroRefCount): (JSC::PolymorphicAccessJITStubRoutine::PolymorphicAccessJITStubRoutine): (JSC::PolymorphicAccessJITStubRoutine::observeZeroRefCount): (JSC::PolymorphicAccessJITStubRoutine::computeHash): (JSC::MarkingGCAwareJITStubRoutine::MarkingGCAwareJITStubRoutine): (JSC::GCAwareJITStubRoutineWithExceptionHandler::GCAwareJITStubRoutineWithExceptionHandler): (JSC::createICJITStubRoutine): (JSC::createJITStubRoutine): Deleted. * jit/GCAwareJITStubRoutine.h: (JSC::GCAwareJITStubRoutine::create): (JSC::PolymorphicAccessJITStubRoutine::cases const): (JSC::PolymorphicAccessJITStubRoutine::weakStructures const): (JSC::PolymorphicAccessJITStubRoutine::hash const): * jit/GPRInfo.h: * jit/JIT.cpp: (JSC::JIT::link): * jit/JIT.h: * jit/JITCall.cpp: (JSC::JIT::emit_op_iterator_open): (JSC::JIT::emitSlow_op_iterator_open): (JSC::JIT::emit_op_iterator_next): (JSC::JIT::emitSlow_op_iterator_next): * jit/JITCall32_64.cpp: (JSC::JIT::emit_op_iterator_open): (JSC::JIT::emit_op_iterator_next): * jit/JITCode.h: (JSC::JITCode::useDataIC): * jit/JITInlineCacheGenerator.cpp: (JSC::JITInlineCacheGenerator::JITInlineCacheGenerator): (JSC::JITInlineCacheGenerator::finalize): (JSC::JITByIdGenerator::JITByIdGenerator): (JSC::JITByIdGenerator::finalize): (JSC::JITByIdGenerator::generateFastCommon): (JSC::JITGetByIdGenerator::JITGetByIdGenerator): (JSC::JITGetByIdWithThisGenerator::JITGetByIdWithThisGenerator): (JSC::JITPutByIdGenerator::JITPutByIdGenerator): (JSC::JITDelByValGenerator::JITDelByValGenerator): (JSC::JITDelByValGenerator::generateFastPath): (JSC::JITDelByValGenerator::finalize): (JSC::JITDelByIdGenerator::JITDelByIdGenerator): (JSC::JITDelByIdGenerator::generateFastPath): (JSC::JITDelByIdGenerator::finalize): (JSC::JITInByValGenerator::JITInByValGenerator): (JSC::JITInByValGenerator::generateFastPath): (JSC::JITInByValGenerator::finalize): (JSC::JITInByIdGenerator::JITInByIdGenerator): (JSC::JITInstanceOfGenerator::JITInstanceOfGenerator): (JSC::JITInstanceOfGenerator::generateFastPath): (JSC::JITInstanceOfGenerator::finalize): (JSC::JITGetByValGenerator::JITGetByValGenerator): (JSC::JITGetByValGenerator::generateFastPath): (JSC::JITGetByValGenerator::finalize): (JSC::JITPrivateBrandAccessGenerator::JITPrivateBrandAccessGenerator): (JSC::JITPrivateBrandAccessGenerator::generateFastPath): (JSC::JITPrivateBrandAccessGenerator::finalize): * jit/JITInlineCacheGenerator.h: (JSC::JITGetByIdGenerator::JITGetByIdGenerator): Deleted. (JSC::JITGetByIdWithThisGenerator::JITGetByIdWithThisGenerator): Deleted. (JSC::JITPutByIdGenerator::JITPutByIdGenerator): Deleted. (JSC::JITDelByValGenerator::JITDelByValGenerator): Deleted. (JSC::JITDelByValGenerator::slowPathJump const): Deleted. (JSC::JITDelByIdGenerator::JITDelByIdGenerator): Deleted. (JSC::JITDelByIdGenerator::slowPathJump const): Deleted. (JSC::JITInByIdGenerator::JITInByIdGenerator): Deleted. (JSC::JITInstanceOfGenerator::JITInstanceOfGenerator): Deleted. (JSC::JITGetByValGenerator::JITGetByValGenerator): Deleted. (JSC::JITGetByValGenerator::slowPathJump const): Deleted. (JSC::JITPrivateBrandAccessGenerator::JITPrivateBrandAccessGenerator): Deleted. (JSC::JITPrivateBrandAccessGenerator::slowPathJump const): Deleted. * jit/JITInlines.h: (JSC::JIT::emitLoadForArrayMode): (JSC::JIT::appendCallWithExceptionCheck): (JSC::JIT::appendCallWithExceptionCheckSetJSValueResult): (JSC::JIT::appendCallWithExceptionCheckSetJSValueResultWithProfile): * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_instanceof): (JSC::JIT::emitSlow_op_instanceof): (JSC::JIT::privateCompileHasIndexedProperty): (JSC::JIT::emit_op_has_enumerable_indexed_property): (JSC::JIT::emitSlow_op_has_enumerable_indexed_property): * jit/JITOpcodes32_64.cpp: (JSC::JIT::emit_op_instanceof): (JSC::JIT::privateCompileHasIndexedProperty): (JSC::JIT::emit_op_has_enumerable_indexed_property): * jit/JITOperations.cpp: (JSC::JSC_DEFINE_JIT_OPERATION): * jit/JITPropertyAccess.cpp: (JSC::JIT::emit_op_get_by_val): (JSC::JIT::emitSlow_op_get_by_val): (JSC::JIT::slow_op_get_by_val_prepareCallGenerator): (JSC::JIT::emit_op_get_private_name): (JSC::JIT::emitSlow_op_get_private_name): (JSC::JIT::slow_op_get_private_name_prepareCallGenerator): (JSC::JIT::emit_op_set_private_brand): (JSC::JIT::emitSlow_op_set_private_brand): (JSC::JIT::emit_op_check_private_brand): (JSC::JIT::emitSlow_op_check_private_brand): (JSC::JIT::emit_op_put_by_val): (JSC::JIT::emitGenericContiguousPutByVal): (JSC::JIT::emitArrayStoragePutByVal): (JSC::JIT::emitPutByValWithCachedId): (JSC::JIT::emitSlow_op_put_by_val): (JSC::JIT::slow_op_put_by_val_prepareCallGenerator): (JSC::JIT::emit_op_put_private_name): (JSC::JIT::emitSlow_op_put_private_name): (JSC::JIT::slow_op_put_private_name_prepareCallGenerator): (JSC::JIT::emit_op_del_by_id): (JSC::JIT::emitSlow_op_del_by_id): (JSC::JIT::slow_op_del_by_id_prepareCallGenerator): (JSC::JIT::emit_op_del_by_val): (JSC::JIT::emitSlow_op_del_by_val): (JSC::JIT::slow_op_del_by_val_prepareCallGenerator): (JSC::JIT::emit_op_try_get_by_id): (JSC::JIT::emitSlow_op_try_get_by_id): (JSC::JIT::emit_op_get_by_id_direct): (JSC::JIT::emitSlow_op_get_by_id_direct): (JSC::JIT::emit_op_get_by_id): (JSC::JIT::emit_op_get_by_id_with_this): (JSC::JIT::emitSlow_op_get_by_id): (JSC::JIT::slow_op_get_by_id_prepareCallGenerator): (JSC::JIT::emitSlow_op_get_by_id_with_this): (JSC::JIT::slow_op_get_by_id_with_this_prepareCallGenerator): (JSC::JIT::emit_op_put_by_id): (JSC::JIT::emitSlow_op_put_by_id): (JSC::JIT::slow_op_put_by_id_prepareCallGenerator): (JSC::JIT::emit_op_in_by_id): (JSC::JIT::emitSlow_op_in_by_id): (JSC::JIT::emit_op_in_by_val): (JSC::JIT::emitSlow_op_in_by_val): (JSC::JIT::privateCompilePutByVal): (JSC::JIT::privateCompilePutPrivateNameWithCachedId): (JSC::JIT::privateCompilePutByValWithCachedId): (JSC::JIT::emitDoubleLoad): (JSC::JIT::emitContiguousLoad): (JSC::JIT::emitArrayStorageLoad): (JSC::JIT::emitIntTypedArrayPutByVal): (JSC::JIT::emitFloatTypedArrayPutByVal): * jit/JITPropertyAccess32_64.cpp: (JSC::JIT::emit_op_del_by_id): (JSC::JIT::emit_op_del_by_val): (JSC::JIT::emit_op_get_by_val): (JSC::JIT::emit_op_get_private_name): (JSC::JIT::emit_op_set_private_brand): (JSC::JIT::emit_op_check_private_brand): (JSC::JIT::emit_op_put_by_val): (JSC::JIT::emitGenericContiguousPutByVal): (JSC::JIT::emitArrayStoragePutByVal): (JSC::JIT::emit_op_try_get_by_id): (JSC::JIT::emit_op_get_by_id_direct): (JSC::JIT::emit_op_get_by_id): (JSC::JIT::emit_op_get_by_id_with_this): (JSC::JIT::emit_op_put_by_id): (JSC::JIT::emit_op_in_by_id): (JSC::JIT::emit_op_in_by_val): * jit/JITStubRoutine.h: * jit/PolymorphicCallStubRoutine.cpp: (JSC::PolymorphicCallStubRoutine::PolymorphicCallStubRoutine): * jit/Repatch.cpp: (JSC::readPutICCallTarget): (JSC::repatchSlowPathCall): (JSC::tryCacheGetBy): (JSC::repatchGetBy): (JSC::tryCacheArrayGetByVal): (JSC::repatchArrayGetByVal): (JSC::tryCachePutByID): (JSC::repatchPutByID): (JSC::tryCacheDeleteBy): (JSC::repatchDeleteBy): (JSC::tryCacheInBy): (JSC::repatchInBy): (JSC::tryCacheCheckPrivateBrand): (JSC::repatchCheckPrivateBrand): (JSC::tryCacheSetPrivateBrand): (JSC::repatchSetPrivateBrand): (JSC::tryCacheInstanceOf): (JSC::repatchInstanceOf): (JSC::linkSlowFor): (JSC::linkVirtualFor): (JSC::resetGetBy): (JSC::resetPutByID): (JSC::resetDelBy): (JSC::resetInBy): (JSC::resetInstanceOf): (JSC::resetCheckPrivateBrand): (JSC::resetSetPrivateBrand): (JSC::resetPatchableJump): Deleted. * jit/Repatch.h: * runtime/Options.cpp: (JSC::Options::recomputeDependentOptions): * runtime/OptionsList.h: * runtime/StructureIDTable.h: * runtime/VM.cpp: (JSC::VM::VM): (JSC::VM::~VM): * runtime/VM.h: Tools: * Scripts/run-jsc-stress-tests: Canonical link: https://commits.webkit.org/238638@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@278656 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-06-09 11:17:36 +00:00
SlowPathCallKey keyWithTarget(CCallHelpers::Address) const;
FTL should generate code to call slow paths lazily https://bugs.webkit.org/show_bug.cgi?id=149936 Reviewed by Saam Barati. Source/JavaScriptCore: We often have complex slow paths in FTL-generated code. Those slow paths may never run. Even if they do run, they don't need stellar performance. So, it doesn't make sense to have LLVM worry about compiling such slow path code. This patch enables us to use our own MacroAssembler for compiling the slow path inside FTL code. It does this by using a crazy lambda thingy (see FTLLowerDFGToLLVM.cpp's lazySlowPath() and its documentation). The result is quite natural to use. Even for straight slow path calls via something like vmCall(), the lazySlowPath offers the benefit that the call marshalling and the exception checking are not expressed using LLVM IR and do not require LLVM to think about it. It also has the benefit that we never generate the code if it never runs. That's great, since function calls usually involve ~10 instructions total (move arguments to argument registers, make the call, check exception, etc.). This patch adds the lazy slow path abstraction and uses it for some slow paths in the FTL. The code we generate with lazy slow paths is worse than the code that LLVM would have generated. Therefore, a lazy slow path only makes sense when we have strong evidence that the slow path will execute infrequently relative to the fast path. This completely precludes the use of lazy slow paths for out-of-line Nodes that unconditionally call a C++ function. It also precludes their use for the GetByVal out-of-bounds handler, since when we generate a GetByVal with an out-of-bounds handler it means that we only know that the out-of-bounds case executed at least once. So, for all we know, it may actually be the common case. So, this patch just deployed the lazy slow path for GC slow paths and masquerades-as-undefined slow paths. It makes sense for GC slow paths because those have a statistical guarantee of slow path frequency - probably bounded at less than 1/10. It makes sense for masquerades-as- undefined because we can say quite confidently that this is an uncommon scenario on the modern Web. Something that's always been challenging about abstractions involving the MacroAssembler is that linking is a separate phase, and there is no way for someone who is just given access to the MacroAssembler& to emit code that requires linking, since linking happens once we have emitted all code and we are creating the LinkBuffer. Moreover, the FTL requires that the final parts of linking happen on the main thread. This patch ran into this issue, and solved it comprehensively, by introducing MacroAssembler::addLinkTask(). This takes a lambda and runs it at the bitter end of linking - when performFinalization() is called. This ensure that the task added by addLinkTask() runs on the main thread. This patch doesn't replace all of the previously existing idioms for dealing with this issue; we can do that later. This shows small speed-ups on a bunch of things. No big win on any benchmark aggregate. But mainly this is done for https://bugs.webkit.org/show_bug.cgi?id=149852, where we found that outlining the slow path in this way was a significant speed boost. * CMakeLists.txt: * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: * JavaScriptCore.xcodeproj/project.pbxproj: * assembler/AbstractMacroAssembler.h: (JSC::AbstractMacroAssembler::replaceWithAddressComputation): (JSC::AbstractMacroAssembler::addLinkTask): (JSC::AbstractMacroAssembler::AbstractMacroAssembler): * assembler/LinkBuffer.cpp: (JSC::LinkBuffer::linkCode): (JSC::LinkBuffer::allocate): (JSC::LinkBuffer::performFinalization): * assembler/LinkBuffer.h: (JSC::LinkBuffer::wasAlreadyDisassembled): (JSC::LinkBuffer::didAlreadyDisassemble): (JSC::LinkBuffer::vm): (JSC::LinkBuffer::executableOffsetFor): * bytecode/CodeOrigin.h: (JSC::CodeOrigin::CodeOrigin): (JSC::CodeOrigin::isSet): (JSC::CodeOrigin::operator bool): (JSC::CodeOrigin::isHashTableDeletedValue): (JSC::CodeOrigin::operator!): Deleted. * ftl/FTLCompile.cpp: (JSC::FTL::mmAllocateDataSection): * ftl/FTLInlineCacheDescriptor.h: (JSC::FTL::InlineCacheDescriptor::InlineCacheDescriptor): (JSC::FTL::CheckInDescriptor::CheckInDescriptor): (JSC::FTL::LazySlowPathDescriptor::LazySlowPathDescriptor): * ftl/FTLJITCode.h: * ftl/FTLJITFinalizer.cpp: (JSC::FTL::JITFinalizer::finalizeFunction): * ftl/FTLJITFinalizer.h: * ftl/FTLLazySlowPath.cpp: Added. (JSC::FTL::LazySlowPath::LazySlowPath): (JSC::FTL::LazySlowPath::~LazySlowPath): (JSC::FTL::LazySlowPath::generate): * ftl/FTLLazySlowPath.h: Added. (JSC::FTL::LazySlowPath::createGenerator): (JSC::FTL::LazySlowPath::patchpoint): (JSC::FTL::LazySlowPath::usedRegisters): (JSC::FTL::LazySlowPath::callSiteIndex): (JSC::FTL::LazySlowPath::stub): * ftl/FTLLazySlowPathCall.h: Added. (JSC::FTL::createLazyCallGenerator): * ftl/FTLLowerDFGToLLVM.cpp: (JSC::FTL::DFG::LowerDFGToLLVM::compileCreateActivation): (JSC::FTL::DFG::LowerDFGToLLVM::compileNewFunction): (JSC::FTL::DFG::LowerDFGToLLVM::compileCreateDirectArguments): (JSC::FTL::DFG::LowerDFGToLLVM::compileNewArrayWithSize): (JSC::FTL::DFG::LowerDFGToLLVM::compileMakeRope): (JSC::FTL::DFG::LowerDFGToLLVM::compileNotifyWrite): (JSC::FTL::DFG::LowerDFGToLLVM::compileIsObjectOrNull): (JSC::FTL::DFG::LowerDFGToLLVM::compileIsFunction): (JSC::FTL::DFG::LowerDFGToLLVM::compileIn): (JSC::FTL::DFG::LowerDFGToLLVM::compileMaterializeNewObject): (JSC::FTL::DFG::LowerDFGToLLVM::compileMaterializeCreateActivation): (JSC::FTL::DFG::LowerDFGToLLVM::compileCheckWatchdogTimer): (JSC::FTL::DFG::LowerDFGToLLVM::allocatePropertyStorageWithSizeImpl): (JSC::FTL::DFG::LowerDFGToLLVM::allocateObject): (JSC::FTL::DFG::LowerDFGToLLVM::allocateJSArray): (JSC::FTL::DFG::LowerDFGToLLVM::buildTypeOf): (JSC::FTL::DFG::LowerDFGToLLVM::sensibleDoubleToInt32): (JSC::FTL::DFG::LowerDFGToLLVM::lazySlowPath): (JSC::FTL::DFG::LowerDFGToLLVM::speculate): (JSC::FTL::DFG::LowerDFGToLLVM::emitStoreBarrier): * ftl/FTLOperations.cpp: (JSC::FTL::operationMaterializeObjectInOSR): (JSC::FTL::compileFTLLazySlowPath): * ftl/FTLOperations.h: * ftl/FTLSlowPathCall.cpp: (JSC::FTL::SlowPathCallContext::SlowPathCallContext): (JSC::FTL::SlowPathCallContext::~SlowPathCallContext): (JSC::FTL::SlowPathCallContext::keyWithTarget): (JSC::FTL::SlowPathCallContext::makeCall): (JSC::FTL::callSiteIndexForCodeOrigin): (JSC::FTL::storeCodeOrigin): Deleted. (JSC::FTL::callOperation): Deleted. * ftl/FTLSlowPathCall.h: (JSC::FTL::callOperation): * ftl/FTLState.h: * ftl/FTLThunks.cpp: (JSC::FTL::genericGenerationThunkGenerator): (JSC::FTL::osrExitGenerationThunkGenerator): (JSC::FTL::lazySlowPathGenerationThunkGenerator): (JSC::FTL::registerClobberCheck): * ftl/FTLThunks.h: * interpreter/CallFrame.h: (JSC::CallSiteIndex::CallSiteIndex): (JSC::CallSiteIndex::operator bool): (JSC::CallSiteIndex::bits): * jit/CCallHelpers.h: (JSC::CCallHelpers::setupArgument): (JSC::CCallHelpers::setupArgumentsWithExecState): * jit/JITOperations.cpp: Source/WTF: Enables SharedTask to handle any function type, not just void(). It's probably better to use SharedTask instead of std::function in performance-sensitive code. std::function uses the system malloc and has copy semantics. SharedTask uses FastMalloc and has aliasing semantics. So, you can just trust that it will have sensible performance characteristics. * wtf/ParallelHelperPool.cpp: (WTF::ParallelHelperClient::~ParallelHelperClient): (WTF::ParallelHelperClient::setTask): (WTF::ParallelHelperClient::doSomeHelping): (WTF::ParallelHelperClient::runTaskInParallel): (WTF::ParallelHelperClient::finish): (WTF::ParallelHelperClient::claimTask): (WTF::ParallelHelperClient::runTask): (WTF::ParallelHelperPool::doSomeHelping): (WTF::ParallelHelperPool::helperThreadBody): * wtf/ParallelHelperPool.h: (WTF::ParallelHelperClient::setFunction): (WTF::ParallelHelperClient::runFunctionInParallel): (WTF::ParallelHelperClient::pool): * wtf/SharedTask.h: (WTF::createSharedTask): (WTF::SharedTask::SharedTask): Deleted. (WTF::SharedTask::~SharedTask): Deleted. (WTF::SharedTaskFunctor::SharedTaskFunctor): Deleted. Canonical link: https://commits.webkit.org/168154@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@190860 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-10-12 17:56:26 +00:00
RegisterSet m_argumentRegisters;
RegisterSet m_callingConventionRegisters;
CCallHelpers& m_jit;
unsigned m_numArgs;
GPRReg m_returnRegister;
size_t m_offsetToSavingArea;
size_t m_stackBytesNeeded;
RegisterSet m_thunkSaveSet;
ptrdiff_t m_offset;
};
template<typename... ArgumentTypes>
SlowPathCall callOperation(
AssemblyHelpers should not have a VM field https://bugs.webkit.org/show_bug.cgi?id=170207 Reviewed by Yusuke Suzuki. APIs that need VM should take one as a parameter. When doing position independent code for Wasm, we can't tie code generation to a VM. * b3/B3Compile.cpp: (JSC::B3::compile): * b3/air/testair.cpp: * b3/testb3.cpp: (JSC::B3::testEntrySwitchSimple): (JSC::B3::testEntrySwitchNoEntrySwitch): (JSC::B3::testEntrySwitchWithCommonPaths): (JSC::B3::testEntrySwitchWithCommonPathsAndNonTrivialEntrypoint): (JSC::B3::testEntrySwitchLoop): * bytecode/AccessCase.cpp: (JSC::AccessCase::generateWithGuard): (JSC::AccessCase::generateImpl): * bytecode/DOMJITAccessCasePatchpointParams.cpp: (JSC::SlowPathCallGeneratorWithArguments::generateImpl): * bytecode/InlineAccess.cpp: (JSC::InlineAccess::dumpCacheSizesAndCrash): (JSC::InlineAccess::generateSelfPropertyAccess): (JSC::InlineAccess::generateSelfPropertyReplace): (JSC::InlineAccess::generateArrayLength): (JSC::InlineAccess::rewireStubAsJump): * bytecode/InlineAccess.h: * bytecode/PolymorphicAccess.cpp: (JSC::AccessGenerationState::emitExplicitExceptionHandler): (JSC::PolymorphicAccess::regenerate): * bytecode/PolymorphicAccess.h: (JSC::AccessGenerationState::AccessGenerationState): * dfg/DFGJITCompiler.cpp: (JSC::DFG::JITCompiler::JITCompiler): (JSC::DFG::JITCompiler::compileExceptionHandlers): (JSC::DFG::JITCompiler::link): (JSC::DFG::JITCompiler::compile): (JSC::DFG::JITCompiler::compileFunction): (JSC::DFG::JITCompiler::exceptionCheck): * dfg/DFGJITCompiler.h: (JSC::DFG::JITCompiler::exceptionCheckWithCallFrameRollback): (JSC::DFG::JITCompiler::fastExceptionCheck): (JSC::DFG::JITCompiler::vm): * dfg/DFGOSRExitCompiler.cpp: * dfg/DFGOSRExitCompiler.h: * dfg/DFGOSRExitCompiler32_64.cpp: (JSC::DFG::OSRExitCompiler::compileExit): * dfg/DFGOSRExitCompiler64.cpp: (JSC::DFG::OSRExitCompiler::compileExit): * dfg/DFGOSRExitCompilerCommon.cpp: (JSC::DFG::adjustAndJumpToTarget): * dfg/DFGOSRExitCompilerCommon.h: * dfg/DFGSpeculativeJIT.cpp: (JSC::DFG::SpeculativeJIT::emitAllocateRawObject): (JSC::DFG::SpeculativeJIT::checkArray): (JSC::DFG::SpeculativeJIT::compileCurrentBlock): (JSC::DFG::SpeculativeJIT::compileInstanceOfForObject): (JSC::DFG::SpeculativeJIT::compileMakeRope): (JSC::DFG::SpeculativeJIT::compileGetGlobalObject): (JSC::DFG::SpeculativeJIT::compileNewFunctionCommon): (JSC::DFG::SpeculativeJIT::compileCreateActivation): (JSC::DFG::SpeculativeJIT::compileCreateDirectArguments): (JSC::DFG::SpeculativeJIT::compileSpread): (JSC::DFG::SpeculativeJIT::compileArraySlice): (JSC::DFG::SpeculativeJIT::compileNukeStructureAndSetButterfly): (JSC::DFG::SpeculativeJIT::compileNewStringObject): (JSC::DFG::SpeculativeJIT::compileNewTypedArray): (JSC::DFG::SpeculativeJIT::compileStoreBarrier): * dfg/DFGSpeculativeJIT.h: (JSC::DFG::SpeculativeJIT::emitAllocateJSObjectWithKnownSize): (JSC::DFG::SpeculativeJIT::emitAllocateJSObject): (JSC::DFG::SpeculativeJIT::emitAllocateVariableSizedJSObject): (JSC::DFG::SpeculativeJIT::emitAllocateDestructibleObject): * dfg/DFGSpeculativeJIT32_64.cpp: (JSC::DFG::SpeculativeJIT::emitCall): (JSC::DFG::SpeculativeJIT::compileLogicalNot): (JSC::DFG::SpeculativeJIT::emitBranch): (JSC::DFG::SpeculativeJIT::compile): * dfg/DFGSpeculativeJIT64.cpp: (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNullOrUndefined): (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNullOrUndefined): (JSC::DFG::SpeculativeJIT::emitCall): (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot): (JSC::DFG::SpeculativeJIT::compileLogicalNot): (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch): (JSC::DFG::SpeculativeJIT::emitBranch): (JSC::DFG::SpeculativeJIT::compile): (JSC::DFG::SpeculativeJIT::compileAllocateNewArrayWithSize): * dfg/DFGThunks.cpp: (JSC::DFG::osrEntryThunkGenerator): * ftl/FTLCompile.cpp: (JSC::FTL::compile): * ftl/FTLJITFinalizer.h: * ftl/FTLLazySlowPath.cpp: (JSC::FTL::LazySlowPath::generate): * ftl/FTLLazySlowPathCall.h: (JSC::FTL::createLazyCallGenerator): * ftl/FTLLink.cpp: (JSC::FTL::link): * ftl/FTLLowerDFGToB3.cpp: (JSC::FTL::DFG::LowerDFGToB3::lower): (JSC::FTL::DFG::LowerDFGToB3::compileCreateActivation): (JSC::FTL::DFG::LowerDFGToB3::compileNewFunction): (JSC::FTL::DFG::LowerDFGToB3::compileCreateDirectArguments): (JSC::FTL::DFG::LowerDFGToB3::compileNewTypedArray): (JSC::FTL::DFG::LowerDFGToB3::compileMakeRope): (JSC::FTL::DFG::LowerDFGToB3::compileNotifyWrite): (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargsSpread): (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargs): (JSC::FTL::DFG::LowerDFGToB3::compileCallEval): (JSC::FTL::DFG::LowerDFGToB3::compileIsObjectOrNull): (JSC::FTL::DFG::LowerDFGToB3::compileIsFunction): (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeNewObject): (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeCreateActivation): (JSC::FTL::DFG::LowerDFGToB3::compileCheckTraps): (JSC::FTL::DFG::LowerDFGToB3::allocatePropertyStorageWithSizeImpl): (JSC::FTL::DFG::LowerDFGToB3::allocateObject): (JSC::FTL::DFG::LowerDFGToB3::allocateJSArray): (JSC::FTL::DFG::LowerDFGToB3::buildTypeOf): * ftl/FTLOSRExitCompiler.cpp: (JSC::FTL::compileStub): * ftl/FTLSlowPathCall.h: (JSC::FTL::callOperation): * ftl/FTLState.h: (JSC::FTL::State::vm): * ftl/FTLThunks.cpp: (JSC::FTL::genericGenerationThunkGenerator): (JSC::FTL::slowPathCallThunkGenerator): * jit/AssemblyHelpers.cpp: (JSC::AssemblyHelpers::jitReleaseAssertNoException): (JSC::AssemblyHelpers::callExceptionFuzz): (JSC::AssemblyHelpers::emitJumpIfException): (JSC::AssemblyHelpers::emitExceptionCheck): (JSC::AssemblyHelpers::emitNonPatchableExceptionCheck): (JSC::AssemblyHelpers::emitLoadStructure): (JSC::AssemblyHelpers::emitRandomThunk): (JSC::AssemblyHelpers::restoreCalleeSavesFromVMEntryFrameCalleeSavesBuffer): (JSC::AssemblyHelpers::emitConvertValueToBoolean): (JSC::AssemblyHelpers::debugCall): * jit/AssemblyHelpers.h: (JSC::AssemblyHelpers::AssemblyHelpers): (JSC::AssemblyHelpers::codeBlock): (JSC::AssemblyHelpers::copyCalleeSavesToVMEntryFrameCalleeSavesBuffer): (JSC::AssemblyHelpers::copyCalleeSavesFromFrameOrRegisterToVMEntryFrameCalleeSavesBuffer): (JSC::AssemblyHelpers::barrierBranch): (JSC::AssemblyHelpers::barrierStoreLoadFence): (JSC::AssemblyHelpers::mutatorFence): (JSC::AssemblyHelpers::storeButterfly): (JSC::AssemblyHelpers::nukeStructureAndStoreButterfly): (JSC::AssemblyHelpers::jumpIfMutatorFenceNotNeeded): (JSC::AssemblyHelpers::emitAllocateJSObjectWithKnownSize): (JSC::AssemblyHelpers::emitAllocateJSObject): (JSC::AssemblyHelpers::emitAllocateVariableSizedCell): (JSC::AssemblyHelpers::emitAllocateVariableSizedJSObject): (JSC::AssemblyHelpers::emitAllocateDestructibleObject): (JSC::AssemblyHelpers::vm): Deleted. (JSC::AssemblyHelpers::debugCall): Deleted. * jit/CCallHelpers.cpp: (JSC::CCallHelpers::ensureShadowChickenPacket): * jit/CCallHelpers.h: (JSC::CCallHelpers::CCallHelpers): (JSC::CCallHelpers::jumpToExceptionHandler): * jit/JIT.cpp: (JSC::JIT::emitEnterOptimizationCheck): (JSC::JIT::privateCompileExceptionHandlers): * jit/JIT.h: (JSC::JIT::exceptionCheck): (JSC::JIT::exceptionCheckWithCallFrameRollback): * jit/JITMathIC.h: (JSC::JITMathIC::generateOutOfLine): * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_instanceof): (JSC::JIT::emit_op_is_undefined): (JSC::JIT::emit_op_jfalse): (JSC::JIT::emit_op_jeq_null): (JSC::JIT::emit_op_jneq_null): (JSC::JIT::emit_op_jtrue): (JSC::JIT::emit_op_throw): (JSC::JIT::emit_op_catch): (JSC::JIT::emit_op_eq_null): (JSC::JIT::emit_op_neq_null): (JSC::JIT::emitSlow_op_loop_hint): (JSC::JIT::emit_op_log_shadow_chicken_prologue): (JSC::JIT::emit_op_log_shadow_chicken_tail): * jit/JITOpcodes32_64.cpp: (JSC::JIT::privateCompileCTINativeCall): (JSC::JIT::emit_op_new_object): (JSC::JIT::emit_op_jfalse): (JSC::JIT::emit_op_jtrue): (JSC::JIT::emit_op_throw): (JSC::JIT::emit_op_catch): (JSC::JIT::emit_op_create_this): (JSC::JIT::emit_op_log_shadow_chicken_prologue): (JSC::JIT::emit_op_log_shadow_chicken_tail): * jit/JITPropertyAccess.cpp: (JSC::JIT::emitWriteBarrier): * jit/JSInterfaceJIT.h: (JSC::JSInterfaceJIT::JSInterfaceJIT): (JSC::JSInterfaceJIT::vm): * jit/Repatch.cpp: (JSC::tryCacheGetByID): (JSC::tryCachePutByID): (JSC::linkPolymorphicCall): (JSC::resetGetByID): (JSC::resetPutByID): * jit/SetupVarargsFrame.cpp: (JSC::emitSetupVarargsFrameFastCase): * jit/SetupVarargsFrame.h: * jit/SpecializedThunkJIT.h: (JSC::SpecializedThunkJIT::loadArgumentWithSpecificClass): * jit/ThunkGenerators.cpp: (JSC::throwExceptionFromCallSlowPathGenerator): (JSC::linkCallThunkGenerator): (JSC::linkPolymorphicCallThunkGenerator): (JSC::virtualThunkFor): (JSC::nativeForGenerator): (JSC::randomThunkGenerator): (JSC::boundThisNoArgsFunctionCallGenerator): (JSC::throwExceptionFromWasmThunkGenerator): * wasm/WasmB3IRGenerator.cpp: (JSC::Wasm::parseAndCompile): * wasm/WasmBinding.cpp: (JSC::Wasm::wasmToJs): (JSC::Wasm::wasmToWasm): Canonical link: https://commits.webkit.org/187145@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@214531 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-03-29 06:15:23 +00:00
VM& vm, const RegisterSet& usedRegisters, CCallHelpers& jit, CCallHelpers::JumpList* exceptionTarget,
Templatize CodePtr/Refs/FunctionPtrs with PtrTags. https://bugs.webkit.org/show_bug.cgi?id=184702 <rdar://problem/35391681> Reviewed by Filip Pizlo and Saam Barati. Source/JavaScriptCore: 1. Templatized MacroAssemblerCodePtr/Ref, FunctionPtr, and CodeLocation variants to take a PtrTag template argument. 2. Replaced some uses of raw pointers with the equivalent CodePtr / FunctionPtr. * assembler/AbstractMacroAssembler.h: (JSC::AbstractMacroAssembler::differenceBetweenCodePtr): (JSC::AbstractMacroAssembler::linkJump): (JSC::AbstractMacroAssembler::linkPointer): (JSC::AbstractMacroAssembler::getLinkerAddress): (JSC::AbstractMacroAssembler::repatchJump): (JSC::AbstractMacroAssembler::repatchJumpToNop): (JSC::AbstractMacroAssembler::repatchNearCall): (JSC::AbstractMacroAssembler::repatchCompact): (JSC::AbstractMacroAssembler::repatchInt32): (JSC::AbstractMacroAssembler::repatchPointer): (JSC::AbstractMacroAssembler::readPointer): (JSC::AbstractMacroAssembler::replaceWithLoad): (JSC::AbstractMacroAssembler::replaceWithAddressComputation): * assembler/CodeLocation.h: (JSC::CodeLocationCommon:: const): (JSC::CodeLocationCommon::CodeLocationCommon): (JSC::CodeLocationInstruction::CodeLocationInstruction): (JSC::CodeLocationLabel::CodeLocationLabel): (JSC::CodeLocationLabel::retagged): (JSC::CodeLocationLabel:: const): (JSC::CodeLocationJump::CodeLocationJump): (JSC::CodeLocationJump::retagged): (JSC::CodeLocationCall::CodeLocationCall): (JSC::CodeLocationCall::retagged): (JSC::CodeLocationNearCall::CodeLocationNearCall): (JSC::CodeLocationDataLabel32::CodeLocationDataLabel32): (JSC::CodeLocationDataLabelCompact::CodeLocationDataLabelCompact): (JSC::CodeLocationDataLabelPtr::CodeLocationDataLabelPtr): (JSC::CodeLocationConvertibleLoad::CodeLocationConvertibleLoad): (JSC::CodeLocationCommon<tag>::instructionAtOffset): (JSC::CodeLocationCommon<tag>::labelAtOffset): (JSC::CodeLocationCommon<tag>::jumpAtOffset): (JSC::CodeLocationCommon<tag>::callAtOffset): (JSC::CodeLocationCommon<tag>::nearCallAtOffset): (JSC::CodeLocationCommon<tag>::dataLabelPtrAtOffset): (JSC::CodeLocationCommon<tag>::dataLabel32AtOffset): (JSC::CodeLocationCommon<tag>::dataLabelCompactAtOffset): (JSC::CodeLocationCommon<tag>::convertibleLoadAtOffset): (JSC::CodeLocationCommon::instructionAtOffset): Deleted. (JSC::CodeLocationCommon::labelAtOffset): Deleted. (JSC::CodeLocationCommon::jumpAtOffset): Deleted. (JSC::CodeLocationCommon::callAtOffset): Deleted. (JSC::CodeLocationCommon::nearCallAtOffset): Deleted. (JSC::CodeLocationCommon::dataLabelPtrAtOffset): Deleted. (JSC::CodeLocationCommon::dataLabel32AtOffset): Deleted. (JSC::CodeLocationCommon::dataLabelCompactAtOffset): Deleted. (JSC::CodeLocationCommon::convertibleLoadAtOffset): Deleted. * assembler/LinkBuffer.cpp: (JSC::LinkBuffer::finalizeCodeWithoutDisassemblyImpl): (JSC::LinkBuffer::finalizeCodeWithDisassemblyImpl): (JSC::LinkBuffer::finalizeCodeWithoutDisassembly): Deleted. (JSC::LinkBuffer::finalizeCodeWithDisassembly): Deleted. * assembler/LinkBuffer.h: (JSC::LinkBuffer::link): (JSC::LinkBuffer::patch): (JSC::LinkBuffer::entrypoint): (JSC::LinkBuffer::locationOf): (JSC::LinkBuffer::locationOfNearCall): (JSC::LinkBuffer::finalizeCodeWithoutDisassembly): (JSC::LinkBuffer::finalizeCodeWithDisassembly): (JSC::LinkBuffer::trampolineAt): * assembler/MacroAssemblerARM.h: (JSC::MacroAssemblerARM::readCallTarget): (JSC::MacroAssemblerARM::replaceWithJump): (JSC::MacroAssemblerARM::startOfPatchableBranch32WithPatchOnAddress): (JSC::MacroAssemblerARM::startOfPatchableBranchPtrWithPatchOnAddress): (JSC::MacroAssemblerARM::startOfBranchPtrWithPatchOnRegister): (JSC::MacroAssemblerARM::revertJumpReplacementToBranchPtrWithPatch): (JSC::MacroAssemblerARM::revertJumpReplacementToPatchableBranch32WithPatch): (JSC::MacroAssemblerARM::revertJumpReplacementToPatchableBranchPtrWithPatch): (JSC::MacroAssemblerARM::repatchCall): (JSC::MacroAssemblerARM::linkCall): * assembler/MacroAssemblerARM64.h: (JSC::MacroAssemblerARM64::readCallTarget): (JSC::MacroAssemblerARM64::replaceWithVMHalt): (JSC::MacroAssemblerARM64::replaceWithJump): (JSC::MacroAssemblerARM64::startOfBranchPtrWithPatchOnRegister): (JSC::MacroAssemblerARM64::startOfPatchableBranchPtrWithPatchOnAddress): (JSC::MacroAssemblerARM64::startOfPatchableBranch32WithPatchOnAddress): (JSC::MacroAssemblerARM64::revertJumpReplacementToBranchPtrWithPatch): (JSC::MacroAssemblerARM64::revertJumpReplacementToPatchableBranchPtrWithPatch): (JSC::MacroAssemblerARM64::revertJumpReplacementToPatchableBranch32WithPatch): (JSC::MacroAssemblerARM64::repatchCall): (JSC::MacroAssemblerARM64::linkCall): * assembler/MacroAssemblerARMv7.h: (JSC::MacroAssemblerARMv7::replaceWithJump): (JSC::MacroAssemblerARMv7::readCallTarget): (JSC::MacroAssemblerARMv7::startOfBranchPtrWithPatchOnRegister): (JSC::MacroAssemblerARMv7::revertJumpReplacementToBranchPtrWithPatch): (JSC::MacroAssemblerARMv7::startOfPatchableBranchPtrWithPatchOnAddress): (JSC::MacroAssemblerARMv7::startOfPatchableBranch32WithPatchOnAddress): (JSC::MacroAssemblerARMv7::revertJumpReplacementToPatchableBranchPtrWithPatch): (JSC::MacroAssemblerARMv7::revertJumpReplacementToPatchableBranch32WithPatch): (JSC::MacroAssemblerARMv7::repatchCall): (JSC::MacroAssemblerARMv7::linkCall): * assembler/MacroAssemblerCodeRef.cpp: (JSC::MacroAssemblerCodePtrBase::dumpWithName): (JSC::MacroAssemblerCodeRefBase::tryToDisassemble): (JSC::MacroAssemblerCodeRefBase::disassembly): (JSC::MacroAssemblerCodePtr::createLLIntCodePtr): Deleted. (JSC::MacroAssemblerCodePtr::dumpWithName const): Deleted. (JSC::MacroAssemblerCodePtr::dump const): Deleted. (JSC::MacroAssemblerCodeRef::createLLIntCodeRef): Deleted. (JSC::MacroAssemblerCodeRef::tryToDisassemble const): Deleted. (JSC::MacroAssemblerCodeRef::disassembly const): Deleted. (JSC::MacroAssemblerCodeRef::dump const): Deleted. * assembler/MacroAssemblerCodeRef.h: (JSC::FunctionPtr::FunctionPtr): (JSC::FunctionPtr::retagged const): (JSC::FunctionPtr::retaggedExecutableAddress const): (JSC::FunctionPtr::operator== const): (JSC::FunctionPtr::operator!= const): (JSC::ReturnAddressPtr::ReturnAddressPtr): (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr): (JSC::MacroAssemblerCodePtr::createFromExecutableAddress): (JSC::MacroAssemblerCodePtr::retagged const): (JSC::MacroAssemblerCodePtr:: const): (JSC::MacroAssemblerCodePtr::dumpWithName const): (JSC::MacroAssemblerCodePtr::dump const): (JSC::MacroAssemblerCodePtrHash::hash): (JSC::MacroAssemblerCodePtrHash::equal): (JSC::MacroAssemblerCodeRef::MacroAssemblerCodeRef): (JSC::MacroAssemblerCodeRef::createSelfManagedCodeRef): (JSC::MacroAssemblerCodeRef::code const): (JSC::MacroAssemblerCodeRef::retaggedCode const): (JSC::MacroAssemblerCodeRef::retagged const): (JSC::MacroAssemblerCodeRef::tryToDisassemble const): (JSC::MacroAssemblerCodeRef::disassembly const): (JSC::MacroAssemblerCodeRef::dump const): (JSC::FunctionPtr<tag>::FunctionPtr): * assembler/MacroAssemblerMIPS.h: (JSC::MacroAssemblerMIPS::readCallTarget): (JSC::MacroAssemblerMIPS::replaceWithJump): (JSC::MacroAssemblerMIPS::startOfPatchableBranch32WithPatchOnAddress): (JSC::MacroAssemblerMIPS::startOfBranchPtrWithPatchOnRegister): (JSC::MacroAssemblerMIPS::revertJumpReplacementToBranchPtrWithPatch): (JSC::MacroAssemblerMIPS::startOfPatchableBranchPtrWithPatchOnAddress): (JSC::MacroAssemblerMIPS::revertJumpReplacementToPatchableBranch32WithPatch): (JSC::MacroAssemblerMIPS::revertJumpReplacementToPatchableBranchPtrWithPatch): (JSC::MacroAssemblerMIPS::repatchCall): (JSC::MacroAssemblerMIPS::linkCall): * assembler/MacroAssemblerX86.h: (JSC::MacroAssemblerX86::readCallTarget): (JSC::MacroAssemblerX86::startOfBranchPtrWithPatchOnRegister): (JSC::MacroAssemblerX86::startOfPatchableBranchPtrWithPatchOnAddress): (JSC::MacroAssemblerX86::startOfPatchableBranch32WithPatchOnAddress): (JSC::MacroAssemblerX86::revertJumpReplacementToBranchPtrWithPatch): (JSC::MacroAssemblerX86::revertJumpReplacementToPatchableBranchPtrWithPatch): (JSC::MacroAssemblerX86::revertJumpReplacementToPatchableBranch32WithPatch): (JSC::MacroAssemblerX86::repatchCall): (JSC::MacroAssemblerX86::linkCall): * assembler/MacroAssemblerX86Common.h: (JSC::MacroAssemblerX86Common::repatchCompact): (JSC::MacroAssemblerX86Common::replaceWithVMHalt): (JSC::MacroAssemblerX86Common::replaceWithJump): * assembler/MacroAssemblerX86_64.h: (JSC::MacroAssemblerX86_64::readCallTarget): (JSC::MacroAssemblerX86_64::startOfBranchPtrWithPatchOnRegister): (JSC::MacroAssemblerX86_64::startOfBranch32WithPatchOnRegister): (JSC::MacroAssemblerX86_64::startOfPatchableBranchPtrWithPatchOnAddress): (JSC::MacroAssemblerX86_64::startOfPatchableBranch32WithPatchOnAddress): (JSC::MacroAssemblerX86_64::revertJumpReplacementToPatchableBranchPtrWithPatch): (JSC::MacroAssemblerX86_64::revertJumpReplacementToPatchableBranch32WithPatch): (JSC::MacroAssemblerX86_64::revertJumpReplacementToBranchPtrWithPatch): (JSC::MacroAssemblerX86_64::repatchCall): (JSC::MacroAssemblerX86_64::linkCall): * assembler/testmasm.cpp: (JSC::compile): (JSC::invoke): (JSC::testProbeModifiesProgramCounter): * b3/B3Compilation.cpp: (JSC::B3::Compilation::Compilation): * b3/B3Compilation.h: (JSC::B3::Compilation::code const): (JSC::B3::Compilation::codeRef const): * b3/B3Compile.cpp: (JSC::B3::compile): * b3/B3LowerMacros.cpp: * b3/air/AirDisassembler.cpp: (JSC::B3::Air::Disassembler::dump): * b3/air/testair.cpp: * b3/testb3.cpp: (JSC::B3::invoke): (JSC::B3::testInterpreter): (JSC::B3::testEntrySwitchSimple): (JSC::B3::testEntrySwitchNoEntrySwitch): (JSC::B3::testEntrySwitchWithCommonPaths): (JSC::B3::testEntrySwitchWithCommonPathsAndNonTrivialEntrypoint): (JSC::B3::testEntrySwitchLoop): * bytecode/AccessCase.cpp: (JSC::AccessCase::generateImpl): * bytecode/AccessCaseSnippetParams.cpp: (JSC::SlowPathCallGeneratorWithArguments::generateImpl): * bytecode/ByValInfo.h: (JSC::ByValInfo::ByValInfo): * bytecode/CallLinkInfo.cpp: (JSC::CallLinkInfo::callReturnLocation): (JSC::CallLinkInfo::patchableJump): (JSC::CallLinkInfo::hotPathBegin): (JSC::CallLinkInfo::slowPathStart): * bytecode/CallLinkInfo.h: (JSC::CallLinkInfo::setCallLocations): (JSC::CallLinkInfo::hotPathOther): * bytecode/CodeBlock.cpp: (JSC::CodeBlock::finishCreation): * bytecode/GetByIdStatus.cpp: (JSC::GetByIdStatus::computeForStubInfoWithoutExitSiteFeedback): * bytecode/GetByIdVariant.cpp: (JSC::GetByIdVariant::GetByIdVariant): (JSC::GetByIdVariant::dumpInContext const): * bytecode/GetByIdVariant.h: (JSC::GetByIdVariant::customAccessorGetter const): * bytecode/GetterSetterAccessCase.cpp: (JSC::GetterSetterAccessCase::create): (JSC::GetterSetterAccessCase::GetterSetterAccessCase): (JSC::GetterSetterAccessCase::dumpImpl const): * bytecode/GetterSetterAccessCase.h: (JSC::GetterSetterAccessCase::customAccessor const): (): Deleted. * bytecode/HandlerInfo.h: (JSC::HandlerInfo::initialize): * bytecode/InlineAccess.cpp: (JSC::linkCodeInline): (JSC::InlineAccess::rewireStubAsJump): * bytecode/InlineAccess.h: * bytecode/JumpTable.h: (JSC::StringJumpTable::ctiForValue): (JSC::SimpleJumpTable::ctiForValue): * bytecode/LLIntCallLinkInfo.h: (JSC::LLIntCallLinkInfo::unlink): * bytecode/PolymorphicAccess.cpp: (JSC::AccessGenerationState::emitExplicitExceptionHandler): (JSC::PolymorphicAccess::regenerate): * bytecode/PolymorphicAccess.h: (JSC::AccessGenerationResult::AccessGenerationResult): (JSC::AccessGenerationResult::code const): * bytecode/StructureStubInfo.h: (JSC::StructureStubInfo::slowPathCallLocation): (JSC::StructureStubInfo::doneLocation): (JSC::StructureStubInfo::slowPathStartLocation): (JSC::StructureStubInfo::patchableJumpForIn): * dfg/DFGCommonData.h: (JSC::DFG::CommonData::appendCatchEntrypoint): * dfg/DFGDisassembler.cpp: (JSC::DFG::Disassembler::dumpDisassembly): * dfg/DFGDriver.h: * dfg/DFGJITCompiler.cpp: (JSC::DFG::JITCompiler::linkOSRExits): (JSC::DFG::JITCompiler::compileExceptionHandlers): (JSC::DFG::JITCompiler::link): (JSC::DFG::JITCompiler::compileFunction): (JSC::DFG::JITCompiler::noticeCatchEntrypoint): * dfg/DFGJITCompiler.h: (JSC::DFG::CallLinkRecord::CallLinkRecord): (JSC::DFG::JITCompiler::appendCall): (JSC::DFG::JITCompiler::JSCallRecord::JSCallRecord): (JSC::DFG::JITCompiler::JSDirectCallRecord::JSDirectCallRecord): (JSC::DFG::JITCompiler::JSDirectTailCallRecord::JSDirectTailCallRecord): * dfg/DFGJITFinalizer.cpp: (JSC::DFG::JITFinalizer::JITFinalizer): (JSC::DFG::JITFinalizer::finalize): (JSC::DFG::JITFinalizer::finalizeFunction): * dfg/DFGJITFinalizer.h: * dfg/DFGJumpReplacement.h: (JSC::DFG::JumpReplacement::JumpReplacement): * dfg/DFGNode.h: * dfg/DFGOSREntry.cpp: (JSC::DFG::prepareOSREntry): (JSC::DFG::prepareCatchOSREntry): * dfg/DFGOSREntry.h: (JSC::DFG::prepareOSREntry): * dfg/DFGOSRExit.cpp: (JSC::DFG::OSRExit::executeOSRExit): (JSC::DFG::reifyInlinedCallFrames): (JSC::DFG::adjustAndJumpToTarget): (JSC::DFG::OSRExit::codeLocationForRepatch const): (JSC::DFG::OSRExit::emitRestoreArguments): (JSC::DFG::OSRExit::compileOSRExit): * dfg/DFGOSRExit.h: * dfg/DFGOSRExitCompilerCommon.cpp: (JSC::DFG::handleExitCounts): (JSC::DFG::reifyInlinedCallFrames): (JSC::DFG::osrWriteBarrier): (JSC::DFG::adjustAndJumpToTarget): * dfg/DFGOperations.cpp: * dfg/DFGSlowPathGenerator.h: (JSC::DFG::CallResultAndArgumentsSlowPathGenerator::CallResultAndArgumentsSlowPathGenerator): (JSC::DFG::CallResultAndArgumentsSlowPathGenerator::unpackAndGenerate): (JSC::DFG::slowPathCall): * dfg/DFGSpeculativeJIT.cpp: (JSC::DFG::SpeculativeJIT::compileMathIC): (JSC::DFG::SpeculativeJIT::compileCallDOM): (JSC::DFG::SpeculativeJIT::compileCallDOMGetter): (JSC::DFG::SpeculativeJIT::emitSwitchIntJump): (JSC::DFG::SpeculativeJIT::emitSwitchImm): (JSC::DFG::SpeculativeJIT::emitSwitchStringOnString): (JSC::DFG::SpeculativeJIT::compileHasIndexedProperty): (JSC::DFG::SpeculativeJIT::compileGetDirectPname): (JSC::DFG::SpeculativeJIT::cachedPutById): * dfg/DFGSpeculativeJIT.h: (JSC::DFG::SpeculativeJIT::callOperation): (JSC::DFG::SpeculativeJIT::appendCall): (JSC::DFG::SpeculativeJIT::appendCallWithCallFrameRollbackOnException): (JSC::DFG::SpeculativeJIT::appendCallWithCallFrameRollbackOnExceptionSetResult): (JSC::DFG::SpeculativeJIT::appendCallSetResult): * dfg/DFGSpeculativeJIT64.cpp: (JSC::DFG::SpeculativeJIT::cachedGetById): (JSC::DFG::SpeculativeJIT::cachedGetByIdWithThis): (JSC::DFG::SpeculativeJIT::compile): * dfg/DFGThunks.cpp: (JSC::DFG::osrExitThunkGenerator): (JSC::DFG::osrExitGenerationThunkGenerator): (JSC::DFG::osrEntryThunkGenerator): * dfg/DFGThunks.h: * disassembler/ARM64Disassembler.cpp: (JSC::tryToDisassemble): * disassembler/ARMv7Disassembler.cpp: (JSC::tryToDisassemble): * disassembler/Disassembler.cpp: (JSC::disassemble): (JSC::disassembleAsynchronously): * disassembler/Disassembler.h: (JSC::tryToDisassemble): * disassembler/UDis86Disassembler.cpp: (JSC::tryToDisassembleWithUDis86): * disassembler/UDis86Disassembler.h: (JSC::tryToDisassembleWithUDis86): * disassembler/X86Disassembler.cpp: (JSC::tryToDisassemble): * ftl/FTLCompile.cpp: (JSC::FTL::compile): * ftl/FTLExceptionTarget.cpp: (JSC::FTL::ExceptionTarget::label): (JSC::FTL::ExceptionTarget::jumps): * ftl/FTLExceptionTarget.h: * ftl/FTLGeneratedFunction.h: * ftl/FTLJITCode.cpp: (JSC::FTL::JITCode::initializeB3Code): (JSC::FTL::JITCode::initializeAddressForCall): (JSC::FTL::JITCode::initializeArityCheckEntrypoint): (JSC::FTL::JITCode::addressForCall): (JSC::FTL::JITCode::executableAddressAtOffset): * ftl/FTLJITCode.h: (JSC::FTL::JITCode::b3Code const): * ftl/FTLJITFinalizer.cpp: (JSC::FTL::JITFinalizer::finalizeCommon): * ftl/FTLLazySlowPath.cpp: (JSC::FTL::LazySlowPath::initialize): (JSC::FTL::LazySlowPath::generate): * ftl/FTLLazySlowPath.h: (JSC::FTL::LazySlowPath::patchableJump const): (JSC::FTL::LazySlowPath::done const): (JSC::FTL::LazySlowPath::stub const): * ftl/FTLLazySlowPathCall.h: (JSC::FTL::createLazyCallGenerator): * ftl/FTLLink.cpp: (JSC::FTL::link): * ftl/FTLLowerDFGToB3.cpp: (JSC::FTL::DFG::LowerDFGToB3::lower): (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstruct): (JSC::FTL::DFG::LowerDFGToB3::compileDirectCallOrConstruct): (JSC::FTL::DFG::LowerDFGToB3::compileTailCall): (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargsSpread): (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargs): (JSC::FTL::DFG::LowerDFGToB3::compileCallEval): (JSC::FTL::DFG::LowerDFGToB3::compileInvalidationPoint): (JSC::FTL::DFG::LowerDFGToB3::compileIn): (JSC::FTL::DFG::LowerDFGToB3::compileCheckSubClass): (JSC::FTL::DFG::LowerDFGToB3::compileCallDOM): (JSC::FTL::DFG::LowerDFGToB3::compileCallDOMGetter): (JSC::FTL::DFG::LowerDFGToB3::lazySlowPath): * ftl/FTLOSRExit.cpp: (JSC::FTL::OSRExit::codeLocationForRepatch const): * ftl/FTLOSRExit.h: * ftl/FTLOSRExitCompiler.cpp: (JSC::FTL::compileStub): (JSC::FTL::compileFTLOSRExit): * ftl/FTLOSRExitHandle.cpp: (JSC::FTL::OSRExitHandle::emitExitThunk): * ftl/FTLOperations.cpp: (JSC::FTL::compileFTLLazySlowPath): * ftl/FTLPatchpointExceptionHandle.cpp: (JSC::FTL::PatchpointExceptionHandle::scheduleExitCreationForUnwind): * ftl/FTLSlowPathCall.cpp: (JSC::FTL::SlowPathCallContext::keyWithTarget const): (JSC::FTL::SlowPathCallContext::makeCall): * ftl/FTLSlowPathCall.h: (JSC::FTL::callOperation): * ftl/FTLSlowPathCallKey.cpp: (JSC::FTL::SlowPathCallKey::dump const): * ftl/FTLSlowPathCallKey.h: (JSC::FTL::SlowPathCallKey::SlowPathCallKey): (JSC::FTL::SlowPathCallKey::callTarget const): (JSC::FTL::SlowPathCallKey::withCallTarget): (JSC::FTL::SlowPathCallKey::hash const): (JSC::FTL::SlowPathCallKey::callPtrTag const): Deleted. * ftl/FTLState.cpp: (JSC::FTL::State::State): * ftl/FTLThunks.cpp: (JSC::FTL::genericGenerationThunkGenerator): (JSC::FTL::osrExitGenerationThunkGenerator): (JSC::FTL::lazySlowPathGenerationThunkGenerator): (JSC::FTL::slowPathCallThunkGenerator): * ftl/FTLThunks.h: (JSC::FTL::generateIfNecessary): (JSC::FTL::keyForThunk): (JSC::FTL::Thunks::getSlowPathCallThunk): (JSC::FTL::Thunks::keyForSlowPathCallThunk): * interpreter/InterpreterInlines.h: (JSC::Interpreter::getOpcodeID): * jit/AssemblyHelpers.cpp: (JSC::AssemblyHelpers::callExceptionFuzz): (JSC::AssemblyHelpers::emitDumbVirtualCall): (JSC::AssemblyHelpers::debugCall): * jit/CCallHelpers.cpp: (JSC::CCallHelpers::ensureShadowChickenPacket): * jit/ExecutableAllocator.cpp: (JSC::FixedVMPoolExecutableAllocator::initializeSeparatedWXHeaps): (JSC::FixedVMPoolExecutableAllocator::jitWriteThunkGenerator): * jit/ExecutableAllocator.h: (JSC::performJITMemcpy): * jit/GCAwareJITStubRoutine.cpp: (JSC::GCAwareJITStubRoutine::GCAwareJITStubRoutine): (JSC::MarkingGCAwareJITStubRoutine::MarkingGCAwareJITStubRoutine): (JSC::GCAwareJITStubRoutineWithExceptionHandler::GCAwareJITStubRoutineWithExceptionHandler): (JSC::createJITStubRoutine): * jit/GCAwareJITStubRoutine.h: (JSC::createJITStubRoutine): * jit/JIT.cpp: (JSC::ctiPatchCallByReturnAddress): (JSC::JIT::compileWithoutLinking): (JSC::JIT::link): (JSC::JIT::privateCompileExceptionHandlers): * jit/JIT.h: (JSC::CallRecord::CallRecord): * jit/JITArithmetic.cpp: (JSC::JIT::emitMathICFast): (JSC::JIT::emitMathICSlow): * jit/JITCall.cpp: (JSC::JIT::compileOpCallSlowCase): * jit/JITCall32_64.cpp: (JSC::JIT::compileOpCallSlowCase): * jit/JITCode.cpp: (JSC::JITCodeWithCodeRef::JITCodeWithCodeRef): (JSC::JITCodeWithCodeRef::executableAddressAtOffset): (JSC::DirectJITCode::DirectJITCode): (JSC::DirectJITCode::initializeCodeRef): (JSC::DirectJITCode::addressForCall): (JSC::NativeJITCode::NativeJITCode): (JSC::NativeJITCode::initializeCodeRef): (JSC::NativeJITCode::addressForCall): * jit/JITCode.h: * jit/JITCodeMap.h: (JSC::JITCodeMap::Entry::Entry): (JSC::JITCodeMap::Entry::codeLocation): (JSC::JITCodeMap::append): (JSC::JITCodeMap::find const): * jit/JITDisassembler.cpp: (JSC::JITDisassembler::dumpDisassembly): * jit/JITExceptions.cpp: (JSC::genericUnwind): * jit/JITInlineCacheGenerator.cpp: (JSC::JITByIdGenerator::finalize): * jit/JITInlines.h: (JSC::JIT::emitNakedCall): (JSC::JIT::emitNakedTailCall): (JSC::JIT::appendCallWithExceptionCheck): (JSC::JIT::appendCallWithExceptionCheckAndSlowPathReturnType): (JSC::JIT::appendCallWithCallFrameRollbackOnException): (JSC::JIT::appendCallWithExceptionCheckSetJSValueResult): (JSC::JIT::appendCallWithExceptionCheckSetJSValueResultWithProfile): * jit/JITMathIC.h: (JSC::isProfileEmpty): * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_catch): (JSC::JIT::emit_op_switch_imm): (JSC::JIT::emit_op_switch_char): (JSC::JIT::emit_op_switch_string): (JSC::JIT::privateCompileHasIndexedProperty): (JSC::JIT::emitSlow_op_has_indexed_property): * jit/JITOpcodes32_64.cpp: (JSC::JIT::privateCompileHasIndexedProperty): * jit/JITOperations.cpp: (JSC::getByVal): * jit/JITPropertyAccess.cpp: (JSC::JIT::stringGetByValStubGenerator): (JSC::JIT::emitGetByValWithCachedId): (JSC::JIT::emitSlow_op_get_by_val): (JSC::JIT::emitPutByValWithCachedId): (JSC::JIT::emitSlow_op_put_by_val): (JSC::JIT::emitSlow_op_try_get_by_id): (JSC::JIT::emitSlow_op_get_by_id_direct): (JSC::JIT::emitSlow_op_get_by_id): (JSC::JIT::emitSlow_op_get_by_id_with_this): (JSC::JIT::emitSlow_op_put_by_id): (JSC::JIT::privateCompileGetByVal): (JSC::JIT::privateCompileGetByValWithCachedId): (JSC::JIT::privateCompilePutByVal): (JSC::JIT::privateCompilePutByValWithCachedId): * jit/JITPropertyAccess32_64.cpp: (JSC::JIT::stringGetByValStubGenerator): (JSC::JIT::emitSlow_op_get_by_val): (JSC::JIT::emitSlow_op_put_by_val): * jit/JITStubRoutine.h: (JSC::JITStubRoutine::JITStubRoutine): (JSC::JITStubRoutine::createSelfManagedRoutine): (JSC::JITStubRoutine::code const): (JSC::JITStubRoutine::asCodePtr): * jit/JITThunks.cpp: (JSC::JITThunks::ctiNativeCall): (JSC::JITThunks::ctiNativeConstruct): (JSC::JITThunks::ctiNativeTailCall): (JSC::JITThunks::ctiNativeTailCallWithoutSavedTags): (JSC::JITThunks::ctiInternalFunctionCall): (JSC::JITThunks::ctiInternalFunctionConstruct): (JSC::JITThunks::ctiStub): (JSC::JITThunks::existingCTIStub): (JSC::JITThunks::hostFunctionStub): * jit/JITThunks.h: * jit/PCToCodeOriginMap.cpp: (JSC::PCToCodeOriginMap::PCToCodeOriginMap): * jit/PCToCodeOriginMap.h: * jit/PolymorphicCallStubRoutine.cpp: (JSC::PolymorphicCallStubRoutine::PolymorphicCallStubRoutine): * jit/PolymorphicCallStubRoutine.h: * jit/Repatch.cpp: (JSC::readPutICCallTarget): (JSC::ftlThunkAwareRepatchCall): (JSC::appropriateOptimizingGetByIdFunction): (JSC::appropriateGetByIdFunction): (JSC::tryCacheGetByID): (JSC::repatchGetByID): (JSC::tryCachePutByID): (JSC::repatchPutByID): (JSC::tryCacheIn): (JSC::repatchIn): (JSC::linkSlowFor): (JSC::linkFor): (JSC::linkDirectFor): (JSC::revertCall): (JSC::unlinkFor): (JSC::linkVirtualFor): (JSC::linkPolymorphicCall): (JSC::resetGetByID): (JSC::resetPutByID): * jit/Repatch.h: * jit/SlowPathCall.h: (JSC::JITSlowPathCall::call): * jit/SpecializedThunkJIT.h: (JSC::SpecializedThunkJIT::finalize): (JSC::SpecializedThunkJIT::callDoubleToDouble): (JSC::SpecializedThunkJIT::callDoubleToDoublePreservingReturn): * jit/ThunkGenerator.h: * jit/ThunkGenerators.cpp: (JSC::throwExceptionFromCallSlowPathGenerator): (JSC::slowPathFor): (JSC::linkCallThunkGenerator): (JSC::linkPolymorphicCallThunkGenerator): (JSC::virtualThunkFor): (JSC::nativeForGenerator): (JSC::nativeCallGenerator): (JSC::nativeTailCallGenerator): (JSC::nativeTailCallWithoutSavedTagsGenerator): (JSC::nativeConstructGenerator): (JSC::internalFunctionCallGenerator): (JSC::internalFunctionConstructGenerator): (JSC::arityFixupGenerator): (JSC::unreachableGenerator): (JSC::charCodeAtThunkGenerator): (JSC::charAtThunkGenerator): (JSC::fromCharCodeThunkGenerator): (JSC::clz32ThunkGenerator): (JSC::sqrtThunkGenerator): (JSC::floorThunkGenerator): (JSC::ceilThunkGenerator): (JSC::truncThunkGenerator): (JSC::roundThunkGenerator): (JSC::expThunkGenerator): (JSC::logThunkGenerator): (JSC::absThunkGenerator): (JSC::imulThunkGenerator): (JSC::randomThunkGenerator): (JSC::boundThisNoArgsFunctionCallGenerator): * jit/ThunkGenerators.h: * llint/LLIntData.cpp: (JSC::LLInt::initialize): * llint/LLIntData.h: (JSC::LLInt::getExecutableAddress): (JSC::LLInt::getCodePtr): (JSC::LLInt::getCodeRef): (JSC::LLInt::getCodeFunctionPtr): * llint/LLIntEntrypoint.cpp: (JSC::LLInt::setFunctionEntrypoint): (JSC::LLInt::setEvalEntrypoint): (JSC::LLInt::setProgramEntrypoint): (JSC::LLInt::setModuleProgramEntrypoint): * llint/LLIntExceptions.cpp: (JSC::LLInt::callToThrow): * llint/LLIntSlowPaths.cpp: (JSC::LLInt::LLINT_SLOW_PATH_DECL): (JSC::LLInt::setUpCall): * llint/LLIntThunks.cpp: (JSC::vmEntryToWasm): (JSC::LLInt::generateThunkWithJumpTo): (JSC::LLInt::functionForCallEntryThunkGenerator): (JSC::LLInt::functionForConstructEntryThunkGenerator): (JSC::LLInt::functionForCallArityCheckThunkGenerator): (JSC::LLInt::functionForConstructArityCheckThunkGenerator): (JSC::LLInt::evalEntryThunkGenerator): (JSC::LLInt::programEntryThunkGenerator): (JSC::LLInt::moduleProgramEntryThunkGenerator): * llint/LLIntThunks.h: * llint/LowLevelInterpreter.asm: * llint/LowLevelInterpreter32_64.asm: * llint/LowLevelInterpreter64.asm: * profiler/ProfilerCompilation.cpp: (JSC::Profiler::Compilation::addOSRExitSite): * profiler/ProfilerCompilation.h: * profiler/ProfilerOSRExitSite.cpp: (JSC::Profiler::OSRExitSite::toJS const): * profiler/ProfilerOSRExitSite.h: (JSC::Profiler::OSRExitSite::OSRExitSite): (JSC::Profiler::OSRExitSite::codeAddress const): (JSC::Profiler::OSRExitSite:: const): Deleted. * runtime/ExecutableBase.cpp: (JSC::ExecutableBase::clearCode): * runtime/ExecutableBase.h: (JSC::ExecutableBase::entrypointFor): * runtime/NativeExecutable.cpp: (JSC::NativeExecutable::finishCreation): * runtime/NativeFunction.h: (JSC::TaggedNativeFunction::TaggedNativeFunction): (JSC::TaggedNativeFunction::operator NativeFunction): * runtime/PtrTag.h: (JSC::tagCodePtr): (JSC::untagCodePtr): (JSC::retagCodePtr): (JSC::tagCFunctionPtr): (JSC::untagCFunctionPtr): (JSC::nextPtrTagID): Deleted. * runtime/PutPropertySlot.h: (JSC::PutPropertySlot::PutPropertySlot): (JSC::PutPropertySlot::setCustomValue): (JSC::PutPropertySlot::setCustomAccessor): (JSC::PutPropertySlot::customSetter const): * runtime/ScriptExecutable.cpp: (JSC::ScriptExecutable::installCode): * runtime/VM.cpp: (JSC::VM::getHostFunction): (JSC::VM::getCTIInternalFunctionTrampolineFor): * runtime/VM.h: (JSC::VM::getCTIStub): * wasm/WasmB3IRGenerator.cpp: (JSC::Wasm::B3IRGenerator::B3IRGenerator): (JSC::Wasm::B3IRGenerator::emitExceptionCheck): (JSC::Wasm::B3IRGenerator::emitTierUpCheck): (JSC::Wasm::B3IRGenerator::addCall): (JSC::Wasm::B3IRGenerator::addCallIndirect): * wasm/WasmBBQPlan.cpp: (JSC::Wasm::BBQPlan::prepare): (JSC::Wasm::BBQPlan::complete): * wasm/WasmBBQPlan.h: * wasm/WasmBinding.cpp: (JSC::Wasm::wasmToWasm): * wasm/WasmBinding.h: * wasm/WasmCallee.h: (JSC::Wasm::Callee::entrypoint const): * wasm/WasmCallingConvention.h: (JSC::Wasm::CallingConvention::setupFrameInPrologue const): * wasm/WasmCodeBlock.h: (JSC::Wasm::CodeBlock::entrypointLoadLocationFromFunctionIndexSpace): * wasm/WasmFaultSignalHandler.cpp: (JSC::Wasm::trapHandler): * wasm/WasmFormat.h: * wasm/WasmInstance.h: * wasm/WasmOMGPlan.cpp: (JSC::Wasm::OMGPlan::work): * wasm/WasmThunks.cpp: (JSC::Wasm::throwExceptionFromWasmThunkGenerator): (JSC::Wasm::throwStackOverflowFromWasmThunkGenerator): (JSC::Wasm::triggerOMGTierUpThunkGenerator): (JSC::Wasm::Thunks::stub): (JSC::Wasm::Thunks::existingStub): * wasm/WasmThunks.h: * wasm/js/JSToWasm.cpp: (JSC::Wasm::createJSToWasmWrapper): * wasm/js/JSWebAssemblyCodeBlock.h: * wasm/js/WasmToJS.cpp: (JSC::Wasm::handleBadI64Use): (JSC::Wasm::wasmToJS): * wasm/js/WasmToJS.h: * wasm/js/WebAssemblyFunction.h: * yarr/YarrJIT.cpp: (JSC::Yarr::YarrGenerator::loadFromFrameAndJump): (JSC::Yarr::YarrGenerator::BacktrackingState::linkDataLabels): (JSC::Yarr::YarrGenerator::compile): * yarr/YarrJIT.h: (JSC::Yarr::YarrCodeBlock::set8BitCode): (JSC::Yarr::YarrCodeBlock::set16BitCode): (JSC::Yarr::YarrCodeBlock::set8BitCodeMatchOnly): (JSC::Yarr::YarrCodeBlock::set16BitCodeMatchOnly): (JSC::Yarr::YarrCodeBlock::execute): (JSC::Yarr::YarrCodeBlock::clear): Source/WebCore: No new tests. This is covered by existing tests. * WebCore.xcodeproj/project.pbxproj: * css/ElementRuleCollector.cpp: (WebCore::ElementRuleCollector::ruleMatches): * cssjit/CSSPtrTag.h: Added. * cssjit/CompiledSelector.h: * cssjit/FunctionCall.h: (WebCore::FunctionCall::FunctionCall): (WebCore::FunctionCall::setFunctionAddress): (WebCore::FunctionCall::prepareAndCall): * cssjit/SelectorCompiler.cpp: (WebCore::SelectorCompiler::compileSelector): (WebCore::SelectorCompiler::SelectorFragment::appendUnoptimizedPseudoClassWithContext): (WebCore::SelectorCompiler::addPseudoClassType): (WebCore::SelectorCompiler::SelectorCodeGenerator::compile): (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributeFunctionCallValueMatching): (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementFunctionCallTest): (WebCore::SelectorCompiler::SelectorCodeGenerator::generateContextFunctionCallTest): * cssjit/SelectorCompiler.h: (WebCore::SelectorCompiler::ruleCollectorSimpleSelectorCheckerFunction): (WebCore::SelectorCompiler::querySelectorSimpleSelectorCheckerFunction): (WebCore::SelectorCompiler::ruleCollectorSelectorCheckerFunctionWithCheckingContext): (WebCore::SelectorCompiler::querySelectorSelectorCheckerFunctionWithCheckingContext): * dom/SelectorQuery.cpp: (WebCore::SelectorDataList::executeCompiledSingleMultiSelectorData const): (WebCore::SelectorDataList::execute const): * dom/SelectorQuery.h: Canonical link: https://commits.webkit.org/200234@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@230748 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-04-18 03:31:09 +00:00
FunctionPtr<CFunctionPtrTag> function, GPRReg resultGPR, ArgumentTypes... arguments)
FTL should generate code to call slow paths lazily https://bugs.webkit.org/show_bug.cgi?id=149936 Reviewed by Saam Barati. Source/JavaScriptCore: We often have complex slow paths in FTL-generated code. Those slow paths may never run. Even if they do run, they don't need stellar performance. So, it doesn't make sense to have LLVM worry about compiling such slow path code. This patch enables us to use our own MacroAssembler for compiling the slow path inside FTL code. It does this by using a crazy lambda thingy (see FTLLowerDFGToLLVM.cpp's lazySlowPath() and its documentation). The result is quite natural to use. Even for straight slow path calls via something like vmCall(), the lazySlowPath offers the benefit that the call marshalling and the exception checking are not expressed using LLVM IR and do not require LLVM to think about it. It also has the benefit that we never generate the code if it never runs. That's great, since function calls usually involve ~10 instructions total (move arguments to argument registers, make the call, check exception, etc.). This patch adds the lazy slow path abstraction and uses it for some slow paths in the FTL. The code we generate with lazy slow paths is worse than the code that LLVM would have generated. Therefore, a lazy slow path only makes sense when we have strong evidence that the slow path will execute infrequently relative to the fast path. This completely precludes the use of lazy slow paths for out-of-line Nodes that unconditionally call a C++ function. It also precludes their use for the GetByVal out-of-bounds handler, since when we generate a GetByVal with an out-of-bounds handler it means that we only know that the out-of-bounds case executed at least once. So, for all we know, it may actually be the common case. So, this patch just deployed the lazy slow path for GC slow paths and masquerades-as-undefined slow paths. It makes sense for GC slow paths because those have a statistical guarantee of slow path frequency - probably bounded at less than 1/10. It makes sense for masquerades-as- undefined because we can say quite confidently that this is an uncommon scenario on the modern Web. Something that's always been challenging about abstractions involving the MacroAssembler is that linking is a separate phase, and there is no way for someone who is just given access to the MacroAssembler& to emit code that requires linking, since linking happens once we have emitted all code and we are creating the LinkBuffer. Moreover, the FTL requires that the final parts of linking happen on the main thread. This patch ran into this issue, and solved it comprehensively, by introducing MacroAssembler::addLinkTask(). This takes a lambda and runs it at the bitter end of linking - when performFinalization() is called. This ensure that the task added by addLinkTask() runs on the main thread. This patch doesn't replace all of the previously existing idioms for dealing with this issue; we can do that later. This shows small speed-ups on a bunch of things. No big win on any benchmark aggregate. But mainly this is done for https://bugs.webkit.org/show_bug.cgi?id=149852, where we found that outlining the slow path in this way was a significant speed boost. * CMakeLists.txt: * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: * JavaScriptCore.xcodeproj/project.pbxproj: * assembler/AbstractMacroAssembler.h: (JSC::AbstractMacroAssembler::replaceWithAddressComputation): (JSC::AbstractMacroAssembler::addLinkTask): (JSC::AbstractMacroAssembler::AbstractMacroAssembler): * assembler/LinkBuffer.cpp: (JSC::LinkBuffer::linkCode): (JSC::LinkBuffer::allocate): (JSC::LinkBuffer::performFinalization): * assembler/LinkBuffer.h: (JSC::LinkBuffer::wasAlreadyDisassembled): (JSC::LinkBuffer::didAlreadyDisassemble): (JSC::LinkBuffer::vm): (JSC::LinkBuffer::executableOffsetFor): * bytecode/CodeOrigin.h: (JSC::CodeOrigin::CodeOrigin): (JSC::CodeOrigin::isSet): (JSC::CodeOrigin::operator bool): (JSC::CodeOrigin::isHashTableDeletedValue): (JSC::CodeOrigin::operator!): Deleted. * ftl/FTLCompile.cpp: (JSC::FTL::mmAllocateDataSection): * ftl/FTLInlineCacheDescriptor.h: (JSC::FTL::InlineCacheDescriptor::InlineCacheDescriptor): (JSC::FTL::CheckInDescriptor::CheckInDescriptor): (JSC::FTL::LazySlowPathDescriptor::LazySlowPathDescriptor): * ftl/FTLJITCode.h: * ftl/FTLJITFinalizer.cpp: (JSC::FTL::JITFinalizer::finalizeFunction): * ftl/FTLJITFinalizer.h: * ftl/FTLLazySlowPath.cpp: Added. (JSC::FTL::LazySlowPath::LazySlowPath): (JSC::FTL::LazySlowPath::~LazySlowPath): (JSC::FTL::LazySlowPath::generate): * ftl/FTLLazySlowPath.h: Added. (JSC::FTL::LazySlowPath::createGenerator): (JSC::FTL::LazySlowPath::patchpoint): (JSC::FTL::LazySlowPath::usedRegisters): (JSC::FTL::LazySlowPath::callSiteIndex): (JSC::FTL::LazySlowPath::stub): * ftl/FTLLazySlowPathCall.h: Added. (JSC::FTL::createLazyCallGenerator): * ftl/FTLLowerDFGToLLVM.cpp: (JSC::FTL::DFG::LowerDFGToLLVM::compileCreateActivation): (JSC::FTL::DFG::LowerDFGToLLVM::compileNewFunction): (JSC::FTL::DFG::LowerDFGToLLVM::compileCreateDirectArguments): (JSC::FTL::DFG::LowerDFGToLLVM::compileNewArrayWithSize): (JSC::FTL::DFG::LowerDFGToLLVM::compileMakeRope): (JSC::FTL::DFG::LowerDFGToLLVM::compileNotifyWrite): (JSC::FTL::DFG::LowerDFGToLLVM::compileIsObjectOrNull): (JSC::FTL::DFG::LowerDFGToLLVM::compileIsFunction): (JSC::FTL::DFG::LowerDFGToLLVM::compileIn): (JSC::FTL::DFG::LowerDFGToLLVM::compileMaterializeNewObject): (JSC::FTL::DFG::LowerDFGToLLVM::compileMaterializeCreateActivation): (JSC::FTL::DFG::LowerDFGToLLVM::compileCheckWatchdogTimer): (JSC::FTL::DFG::LowerDFGToLLVM::allocatePropertyStorageWithSizeImpl): (JSC::FTL::DFG::LowerDFGToLLVM::allocateObject): (JSC::FTL::DFG::LowerDFGToLLVM::allocateJSArray): (JSC::FTL::DFG::LowerDFGToLLVM::buildTypeOf): (JSC::FTL::DFG::LowerDFGToLLVM::sensibleDoubleToInt32): (JSC::FTL::DFG::LowerDFGToLLVM::lazySlowPath): (JSC::FTL::DFG::LowerDFGToLLVM::speculate): (JSC::FTL::DFG::LowerDFGToLLVM::emitStoreBarrier): * ftl/FTLOperations.cpp: (JSC::FTL::operationMaterializeObjectInOSR): (JSC::FTL::compileFTLLazySlowPath): * ftl/FTLOperations.h: * ftl/FTLSlowPathCall.cpp: (JSC::FTL::SlowPathCallContext::SlowPathCallContext): (JSC::FTL::SlowPathCallContext::~SlowPathCallContext): (JSC::FTL::SlowPathCallContext::keyWithTarget): (JSC::FTL::SlowPathCallContext::makeCall): (JSC::FTL::callSiteIndexForCodeOrigin): (JSC::FTL::storeCodeOrigin): Deleted. (JSC::FTL::callOperation): Deleted. * ftl/FTLSlowPathCall.h: (JSC::FTL::callOperation): * ftl/FTLState.h: * ftl/FTLThunks.cpp: (JSC::FTL::genericGenerationThunkGenerator): (JSC::FTL::osrExitGenerationThunkGenerator): (JSC::FTL::lazySlowPathGenerationThunkGenerator): (JSC::FTL::registerClobberCheck): * ftl/FTLThunks.h: * interpreter/CallFrame.h: (JSC::CallSiteIndex::CallSiteIndex): (JSC::CallSiteIndex::operator bool): (JSC::CallSiteIndex::bits): * jit/CCallHelpers.h: (JSC::CCallHelpers::setupArgument): (JSC::CCallHelpers::setupArgumentsWithExecState): * jit/JITOperations.cpp: Source/WTF: Enables SharedTask to handle any function type, not just void(). It's probably better to use SharedTask instead of std::function in performance-sensitive code. std::function uses the system malloc and has copy semantics. SharedTask uses FastMalloc and has aliasing semantics. So, you can just trust that it will have sensible performance characteristics. * wtf/ParallelHelperPool.cpp: (WTF::ParallelHelperClient::~ParallelHelperClient): (WTF::ParallelHelperClient::setTask): (WTF::ParallelHelperClient::doSomeHelping): (WTF::ParallelHelperClient::runTaskInParallel): (WTF::ParallelHelperClient::finish): (WTF::ParallelHelperClient::claimTask): (WTF::ParallelHelperClient::runTask): (WTF::ParallelHelperPool::doSomeHelping): (WTF::ParallelHelperPool::helperThreadBody): * wtf/ParallelHelperPool.h: (WTF::ParallelHelperClient::setFunction): (WTF::ParallelHelperClient::runFunctionInParallel): (WTF::ParallelHelperClient::pool): * wtf/SharedTask.h: (WTF::createSharedTask): (WTF::SharedTask::SharedTask): Deleted. (WTF::SharedTask::~SharedTask): Deleted. (WTF::SharedTaskFunctor::SharedTaskFunctor): Deleted. Canonical link: https://commits.webkit.org/168154@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@190860 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-10-12 17:56:26 +00:00
{
SlowPathCall call;
{
[JSC] Use DataIC for AccessCase https://bugs.webkit.org/show_bug.cgi?id=226072 Reviewed by Saam Barati and Filip Pizlo. Source/JavaScriptCore: This patch adds non-repatching IC for Baseline JIT in ARM64. This does not work in non-ARM64 architectures (including X64) due to the use of link-register. 1. We add non-repatching IC, which is enabled only in Baseline due to performance reason. We are using the existing IC in DFG and FTL. Non-repatching includes fast-path, and slow-path's operation function. 2. We still keep InlineAccess in all tiers. Removing that causes 0.3 ~ 1.0% regression in Speedometer2. This means that we still need some repatching when we first introduce stubs. 3. We add a mechanism to share generated code stubs in non-repatching IC. Currently, getter / setter / custom accessors are excluded since their code relies on JSGlobalObject, CodeBlock etc. which are not included in AccessCase's data structure. 4. This patch still relies on that CodeBlock will be destroyed synchronously since we need to ensure that sharing-hash-table does not include already-dead JIT code stubs. We can fix it (e.g. annotating epoch to these stubs, bump them in finalizeUnconditionally), but we avoid doing that to prevent from further enlarging this patch. This patch is already significant in its size. 5. Added callOperation(Address) support in CCallHelpers, which can save the target in nonArgGPR0, and call it so that we can use Address including GPR which is also used for arguments. Performance is neutral in JetStream2 and Speedometer2. But it offers the way to remove some code generation in Baseline. * assembler/MacroAssemblerARM64E.h: (JSC::MacroAssemblerARM64E::call): * bytecode/AccessCase.cpp: (JSC::AccessCase::create): (JSC::AccessCase::createTransition): (JSC::AccessCase::createDelete): (JSC::AccessCase::createCheckPrivateBrand): (JSC::AccessCase::createSetPrivateBrand): (JSC::AccessCase::fromStructureStubInfo): (JSC::AccessCase::clone const): (JSC::AccessCase::generateWithGuard): (JSC::AccessCase::generateImpl): (JSC::AccessCase::canBeShared): * bytecode/AccessCase.h: (JSC::AccessCase::hash const): (JSC::AccessCase::AccessCase): (JSC::SharedJITStubSet::Hash::Key::Key): (JSC::SharedJITStubSet::Hash::Key::isHashTableDeletedValue const): (JSC::SharedJITStubSet::Hash::Key::operator==): (JSC::SharedJITStubSet::Hash::hash): (JSC::SharedJITStubSet::Hash::equal): (JSC::SharedJITStubSet::Searcher::Translator::hash): (JSC::SharedJITStubSet::Searcher::Translator::equal): (JSC::SharedJITStubSet::PointerTranslator::hash): (JSC::SharedJITStubSet::PointerTranslator::equal): (JSC::SharedJITStubSet::add): (JSC::SharedJITStubSet::remove): (JSC::SharedJITStubSet::find): * bytecode/ByValInfo.h: (JSC::ByValInfo::setUp): (JSC::ByValInfo::offsetOfSlowOperation): (JSC::ByValInfo::offsetOfNotIndexJumpTarget): (JSC::ByValInfo::offsetOfBadTypeJumpTarget): * bytecode/CallLinkInfo.cpp: (JSC::CallLinkInfo::initializeDirectCall): (JSC::CallLinkInfo::setDirectCallTarget): * bytecode/CodeBlock.h: (JSC::CodeBlock::useDataIC const): * bytecode/GetterSetterAccessCase.cpp: (JSC::GetterSetterAccessCase::create): (JSC::GetterSetterAccessCase::clone const): (JSC::GetterSetterAccessCase::emitDOMJITGetter): * bytecode/GetterSetterAccessCase.h: * bytecode/InlineAccess.cpp: (JSC::getScratchRegister): (JSC::InlineAccess::rewireStubAsJumpInAccessNotUsingInlineAccess): (JSC::InlineAccess::rewireStubAsJumpInAccess): (JSC::InlineAccess::resetStubAsJumpInAccess): (JSC::InlineAccess::resetStubAsJumpInAccessNotUsingInlineAccess): (JSC::InlineAccess::rewireStubAsJump): Deleted. * bytecode/InlineAccess.h: * bytecode/InstanceOfAccessCase.cpp: (JSC::InstanceOfAccessCase::create): (JSC::InstanceOfAccessCase::clone const): * bytecode/InstanceOfAccessCase.h: * bytecode/IntrinsicGetterAccessCase.cpp: (JSC::IntrinsicGetterAccessCase::create): (JSC::IntrinsicGetterAccessCase::clone const): * bytecode/IntrinsicGetterAccessCase.h: * bytecode/ModuleNamespaceAccessCase.cpp: (JSC::ModuleNamespaceAccessCase::create): (JSC::ModuleNamespaceAccessCase::clone const): * bytecode/ModuleNamespaceAccessCase.h: * bytecode/ObjectPropertyConditionSet.h: (JSC::ObjectPropertyConditionSet::hash const): (JSC::ObjectPropertyConditionSet::operator==): (JSC::ObjectPropertyConditionSet::operator!=): * bytecode/PolymorphicAccess.cpp: (JSC::AccessGenerationState::installWatchpoint): (JSC::AccessGenerationState::succeed): (JSC::AccessGenerationState::preserveLiveRegistersToStackForCallWithoutExceptions): (JSC::PolymorphicAccess::addCases): (JSC::PolymorphicAccess::addCase): (JSC::PolymorphicAccess::visitWeak const): (JSC::PolymorphicAccess::regenerate): * bytecode/PolymorphicAccess.h: (JSC::AccessGenerationState::AccessGenerationState): (JSC::AccessGenerationState::preserveLiveRegistersToStackForCallWithoutExceptions): * bytecode/ProxyableAccessCase.cpp: (JSC::ProxyableAccessCase::create): (JSC::ProxyableAccessCase::clone const): * bytecode/ProxyableAccessCase.h: * bytecode/StructureStubInfo.cpp: (JSC::StructureStubInfo::StructureStubInfo): (JSC::StructureStubInfo::addAccessCase): (JSC::StructureStubInfo::reset): * bytecode/StructureStubInfo.h: (JSC::StructureStubInfo::offsetOfCodePtr): (JSC::StructureStubInfo::offsetOfSlowPathStartLocation): (JSC::StructureStubInfo::offsetOfSlowOperation): (JSC::StructureStubInfo::patchableJump): Deleted. * dfg/DFGJITCompiler.h: (JSC::DFG::JITCompiler::appendCall): * dfg/DFGSlowPathGenerator.h: (JSC::DFG::slowPathICCall): * dfg/DFGSpeculativeJIT.cpp: (JSC::DFG::SpeculativeJIT::compileGetById): (JSC::DFG::SpeculativeJIT::compileGetByIdFlush): (JSC::DFG::SpeculativeJIT::compileDeleteById): (JSC::DFG::SpeculativeJIT::compileDeleteByVal): (JSC::DFG::SpeculativeJIT::compileInById): (JSC::DFG::SpeculativeJIT::compileInByVal): (JSC::DFG::SpeculativeJIT::compileGetPrivateNameByVal): (JSC::DFG::SpeculativeJIT::compileGetPrivateNameById): (JSC::DFG::SpeculativeJIT::compilePutPrivateNameById): (JSC::DFG::SpeculativeJIT::compileCheckPrivateBrand): (JSC::DFG::SpeculativeJIT::compileSetPrivateBrand): (JSC::DFG::SpeculativeJIT::compileInstanceOfForCells): (JSC::DFG::SpeculativeJIT::compileInstanceOf): (JSC::DFG::SpeculativeJIT::compilePutByIdFlush): (JSC::DFG::SpeculativeJIT::compilePutById): (JSC::DFG::SpeculativeJIT::compilePutByIdDirect): (JSC::DFG::SpeculativeJIT::cachedPutById): * dfg/DFGSpeculativeJIT.h: (JSC::DFG::SpeculativeJIT::callOperation): (JSC::DFG::SpeculativeJIT::appendCall): (JSC::DFG::SpeculativeJIT::appendCallSetResult): * dfg/DFGSpeculativeJIT32_64.cpp: (JSC::DFG::SpeculativeJIT::cachedGetById): (JSC::DFG::SpeculativeJIT::cachedGetByIdWithThis): (JSC::DFG::SpeculativeJIT::compile): * dfg/DFGSpeculativeJIT64.cpp: (JSC::DFG::SpeculativeJIT::cachedGetById): (JSC::DFG::SpeculativeJIT::cachedGetByIdWithThis): (JSC::DFG::SpeculativeJIT::compile): * ftl/FTLLowerDFGToB3.cpp: (JSC::FTL::DFG::LowerDFGToB3::getPrivateName): (JSC::FTL::DFG::LowerDFGToB3::compilePrivateBrandAccess): (JSC::FTL::DFG::LowerDFGToB3::cachedPutById): (JSC::FTL::DFG::LowerDFGToB3::compileGetByVal): (JSC::FTL::DFG::LowerDFGToB3::compileDelBy): (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq): * ftl/FTLSlowPathCall.cpp: (JSC::FTL::SlowPathCallContext::SlowPathCallContext): (JSC::FTL::SlowPathCallContext::keyWithTarget const): (JSC::FTL::SlowPathCallContext::makeCall): * ftl/FTLSlowPathCall.h: (JSC::FTL::callOperation): * ftl/FTLSlowPathCallKey.cpp: (JSC::FTL::SlowPathCallKey::dump const): * ftl/FTLSlowPathCallKey.h: (JSC::FTL::SlowPathCallKey::SlowPathCallKey): (JSC::FTL::SlowPathCallKey::indirectOffset const): (JSC::FTL::SlowPathCallKey::withCallTarget): (JSC::FTL::SlowPathCallKey::operator== const): (JSC::FTL::SlowPathCallKey::hash const): * ftl/FTLThunks.cpp: (JSC::FTL::genericGenerationThunkGenerator): (JSC::FTL::slowPathCallThunkGenerator): * jit/AssemblyHelpers.cpp: (JSC::AssemblyHelpers::emitVirtualCall): * jit/CCallHelpers.cpp: (JSC::CCallHelpers::emitJITCodeOver): * jit/CCallHelpers.h: (JSC::CCallHelpers::ArgCollection::ArgCollection): (JSC::CCallHelpers::ArgCollection::pushRegArg): (JSC::CCallHelpers::ArgCollection::pushExtraRegArg): (JSC::CCallHelpers::ArgCollection::pushNonArg): (JSC::CCallHelpers::ArgCollection::addGPRArg): (JSC::CCallHelpers::ArgCollection::addGPRExtraArg): (JSC::CCallHelpers::ArgCollection::addStackArg): (JSC::CCallHelpers::ArgCollection::addPoke): (JSC::CCallHelpers::calculatePokeOffset): (JSC::CCallHelpers::pokeForArgument): (JSC::CCallHelpers::stackAligned): (JSC::CCallHelpers::marshallArgumentRegister): (JSC::CCallHelpers::setupArgumentsImpl): (JSC::CCallHelpers::pokeArgumentsAligned): (JSC::CCallHelpers::std::is_integral<CURRENT_ARGUMENT_TYPE>::value): (JSC::CCallHelpers::std::is_pointer<CURRENT_ARGUMENT_TYPE>::value): (JSC::CCallHelpers::setupArgumentsEntryImpl): (JSC::CCallHelpers::setupArguments): (JSC::CCallHelpers::setupArgumentsForIndirectCall): * jit/GCAwareJITStubRoutine.cpp: (JSC::GCAwareJITStubRoutine::GCAwareJITStubRoutine): (JSC::GCAwareJITStubRoutine::makeGCAware): (JSC::GCAwareJITStubRoutine::observeZeroRefCount): (JSC::PolymorphicAccessJITStubRoutine::PolymorphicAccessJITStubRoutine): (JSC::PolymorphicAccessJITStubRoutine::observeZeroRefCount): (JSC::PolymorphicAccessJITStubRoutine::computeHash): (JSC::MarkingGCAwareJITStubRoutine::MarkingGCAwareJITStubRoutine): (JSC::GCAwareJITStubRoutineWithExceptionHandler::GCAwareJITStubRoutineWithExceptionHandler): (JSC::createICJITStubRoutine): (JSC::createJITStubRoutine): Deleted. * jit/GCAwareJITStubRoutine.h: (JSC::GCAwareJITStubRoutine::create): (JSC::PolymorphicAccessJITStubRoutine::cases const): (JSC::PolymorphicAccessJITStubRoutine::weakStructures const): (JSC::PolymorphicAccessJITStubRoutine::hash const): * jit/GPRInfo.h: * jit/JIT.cpp: (JSC::JIT::link): * jit/JIT.h: * jit/JITCall.cpp: (JSC::JIT::emit_op_iterator_open): (JSC::JIT::emitSlow_op_iterator_open): (JSC::JIT::emit_op_iterator_next): (JSC::JIT::emitSlow_op_iterator_next): * jit/JITCall32_64.cpp: (JSC::JIT::emit_op_iterator_open): (JSC::JIT::emit_op_iterator_next): * jit/JITCode.h: (JSC::JITCode::useDataIC): * jit/JITInlineCacheGenerator.cpp: (JSC::JITInlineCacheGenerator::JITInlineCacheGenerator): (JSC::JITInlineCacheGenerator::finalize): (JSC::JITByIdGenerator::JITByIdGenerator): (JSC::JITByIdGenerator::finalize): (JSC::JITByIdGenerator::generateFastCommon): (JSC::JITGetByIdGenerator::JITGetByIdGenerator): (JSC::JITGetByIdWithThisGenerator::JITGetByIdWithThisGenerator): (JSC::JITPutByIdGenerator::JITPutByIdGenerator): (JSC::JITDelByValGenerator::JITDelByValGenerator): (JSC::JITDelByValGenerator::generateFastPath): (JSC::JITDelByValGenerator::finalize): (JSC::JITDelByIdGenerator::JITDelByIdGenerator): (JSC::JITDelByIdGenerator::generateFastPath): (JSC::JITDelByIdGenerator::finalize): (JSC::JITInByValGenerator::JITInByValGenerator): (JSC::JITInByValGenerator::generateFastPath): (JSC::JITInByValGenerator::finalize): (JSC::JITInByIdGenerator::JITInByIdGenerator): (JSC::JITInstanceOfGenerator::JITInstanceOfGenerator): (JSC::JITInstanceOfGenerator::generateFastPath): (JSC::JITInstanceOfGenerator::finalize): (JSC::JITGetByValGenerator::JITGetByValGenerator): (JSC::JITGetByValGenerator::generateFastPath): (JSC::JITGetByValGenerator::finalize): (JSC::JITPrivateBrandAccessGenerator::JITPrivateBrandAccessGenerator): (JSC::JITPrivateBrandAccessGenerator::generateFastPath): (JSC::JITPrivateBrandAccessGenerator::finalize): * jit/JITInlineCacheGenerator.h: (JSC::JITGetByIdGenerator::JITGetByIdGenerator): Deleted. (JSC::JITGetByIdWithThisGenerator::JITGetByIdWithThisGenerator): Deleted. (JSC::JITPutByIdGenerator::JITPutByIdGenerator): Deleted. (JSC::JITDelByValGenerator::JITDelByValGenerator): Deleted. (JSC::JITDelByValGenerator::slowPathJump const): Deleted. (JSC::JITDelByIdGenerator::JITDelByIdGenerator): Deleted. (JSC::JITDelByIdGenerator::slowPathJump const): Deleted. (JSC::JITInByIdGenerator::JITInByIdGenerator): Deleted. (JSC::JITInstanceOfGenerator::JITInstanceOfGenerator): Deleted. (JSC::JITGetByValGenerator::JITGetByValGenerator): Deleted. (JSC::JITGetByValGenerator::slowPathJump const): Deleted. (JSC::JITPrivateBrandAccessGenerator::JITPrivateBrandAccessGenerator): Deleted. (JSC::JITPrivateBrandAccessGenerator::slowPathJump const): Deleted. * jit/JITInlines.h: (JSC::JIT::emitLoadForArrayMode): (JSC::JIT::appendCallWithExceptionCheck): (JSC::JIT::appendCallWithExceptionCheckSetJSValueResult): (JSC::JIT::appendCallWithExceptionCheckSetJSValueResultWithProfile): * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_instanceof): (JSC::JIT::emitSlow_op_instanceof): (JSC::JIT::privateCompileHasIndexedProperty): (JSC::JIT::emit_op_has_enumerable_indexed_property): (JSC::JIT::emitSlow_op_has_enumerable_indexed_property): * jit/JITOpcodes32_64.cpp: (JSC::JIT::emit_op_instanceof): (JSC::JIT::privateCompileHasIndexedProperty): (JSC::JIT::emit_op_has_enumerable_indexed_property): * jit/JITOperations.cpp: (JSC::JSC_DEFINE_JIT_OPERATION): * jit/JITPropertyAccess.cpp: (JSC::JIT::emit_op_get_by_val): (JSC::JIT::emitSlow_op_get_by_val): (JSC::JIT::slow_op_get_by_val_prepareCallGenerator): (JSC::JIT::emit_op_get_private_name): (JSC::JIT::emitSlow_op_get_private_name): (JSC::JIT::slow_op_get_private_name_prepareCallGenerator): (JSC::JIT::emit_op_set_private_brand): (JSC::JIT::emitSlow_op_set_private_brand): (JSC::JIT::emit_op_check_private_brand): (JSC::JIT::emitSlow_op_check_private_brand): (JSC::JIT::emit_op_put_by_val): (JSC::JIT::emitGenericContiguousPutByVal): (JSC::JIT::emitArrayStoragePutByVal): (JSC::JIT::emitPutByValWithCachedId): (JSC::JIT::emitSlow_op_put_by_val): (JSC::JIT::slow_op_put_by_val_prepareCallGenerator): (JSC::JIT::emit_op_put_private_name): (JSC::JIT::emitSlow_op_put_private_name): (JSC::JIT::slow_op_put_private_name_prepareCallGenerator): (JSC::JIT::emit_op_del_by_id): (JSC::JIT::emitSlow_op_del_by_id): (JSC::JIT::slow_op_del_by_id_prepareCallGenerator): (JSC::JIT::emit_op_del_by_val): (JSC::JIT::emitSlow_op_del_by_val): (JSC::JIT::slow_op_del_by_val_prepareCallGenerator): (JSC::JIT::emit_op_try_get_by_id): (JSC::JIT::emitSlow_op_try_get_by_id): (JSC::JIT::emit_op_get_by_id_direct): (JSC::JIT::emitSlow_op_get_by_id_direct): (JSC::JIT::emit_op_get_by_id): (JSC::JIT::emit_op_get_by_id_with_this): (JSC::JIT::emitSlow_op_get_by_id): (JSC::JIT::slow_op_get_by_id_prepareCallGenerator): (JSC::JIT::emitSlow_op_get_by_id_with_this): (JSC::JIT::slow_op_get_by_id_with_this_prepareCallGenerator): (JSC::JIT::emit_op_put_by_id): (JSC::JIT::emitSlow_op_put_by_id): (JSC::JIT::slow_op_put_by_id_prepareCallGenerator): (JSC::JIT::emit_op_in_by_id): (JSC::JIT::emitSlow_op_in_by_id): (JSC::JIT::emit_op_in_by_val): (JSC::JIT::emitSlow_op_in_by_val): (JSC::JIT::privateCompilePutByVal): (JSC::JIT::privateCompilePutPrivateNameWithCachedId): (JSC::JIT::privateCompilePutByValWithCachedId): (JSC::JIT::emitDoubleLoad): (JSC::JIT::emitContiguousLoad): (JSC::JIT::emitArrayStorageLoad): (JSC::JIT::emitIntTypedArrayPutByVal): (JSC::JIT::emitFloatTypedArrayPutByVal): * jit/JITPropertyAccess32_64.cpp: (JSC::JIT::emit_op_del_by_id): (JSC::JIT::emit_op_del_by_val): (JSC::JIT::emit_op_get_by_val): (JSC::JIT::emit_op_get_private_name): (JSC::JIT::emit_op_set_private_brand): (JSC::JIT::emit_op_check_private_brand): (JSC::JIT::emit_op_put_by_val): (JSC::JIT::emitGenericContiguousPutByVal): (JSC::JIT::emitArrayStoragePutByVal): (JSC::JIT::emit_op_try_get_by_id): (JSC::JIT::emit_op_get_by_id_direct): (JSC::JIT::emit_op_get_by_id): (JSC::JIT::emit_op_get_by_id_with_this): (JSC::JIT::emit_op_put_by_id): (JSC::JIT::emit_op_in_by_id): (JSC::JIT::emit_op_in_by_val): * jit/JITStubRoutine.h: * jit/PolymorphicCallStubRoutine.cpp: (JSC::PolymorphicCallStubRoutine::PolymorphicCallStubRoutine): * jit/Repatch.cpp: (JSC::readPutICCallTarget): (JSC::repatchSlowPathCall): (JSC::tryCacheGetBy): (JSC::repatchGetBy): (JSC::tryCacheArrayGetByVal): (JSC::repatchArrayGetByVal): (JSC::tryCachePutByID): (JSC::repatchPutByID): (JSC::tryCacheDeleteBy): (JSC::repatchDeleteBy): (JSC::tryCacheInBy): (JSC::repatchInBy): (JSC::tryCacheCheckPrivateBrand): (JSC::repatchCheckPrivateBrand): (JSC::tryCacheSetPrivateBrand): (JSC::repatchSetPrivateBrand): (JSC::tryCacheInstanceOf): (JSC::repatchInstanceOf): (JSC::linkSlowFor): (JSC::linkVirtualFor): (JSC::resetGetBy): (JSC::resetPutByID): (JSC::resetDelBy): (JSC::resetInBy): (JSC::resetInstanceOf): (JSC::resetCheckPrivateBrand): (JSC::resetSetPrivateBrand): (JSC::resetPatchableJump): Deleted. * jit/Repatch.h: * runtime/Options.cpp: (JSC::Options::recomputeDependentOptions): * runtime/OptionsList.h: * runtime/StructureIDTable.h: * runtime/VM.cpp: (JSC::VM::VM): (JSC::VM::~VM): * runtime/VM.h: Tools: * Scripts/run-jsc-stress-tests: Canonical link: https://commits.webkit.org/238638@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@278656 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-06-09 11:17:36 +00:00
SlowPathCallContext context(usedRegisters, jit, sizeof...(ArgumentTypes) + 1, resultGPR, InvalidGPRReg);
[JSC] Thread JSGlobalObject* instead of ExecState* https://bugs.webkit.org/show_bug.cgi?id=202392 Reviewed by Geoffrey Garen. LayoutTests/imported/w3c: * web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/string-compilation-other-document-expected.txt: Source/JavaScriptCore: This patch replaces JSC's convention entirely: instead of passing ExecState*, we pass lexical JSGlobalObject*. We have many issues historically. 1. We have a hack like global-exec, since many runtime functions take ExecState* while valid ExecState* is populated only after executing some JS function. 2. We pass ExecState* without considering whether this is correct one when inlining a function. If inlined function has different realm, `exec->lexicalGlobalObject()` just returns wrong JSGlobalObject*. This patch attempts to remove these issues entirely by passing JSGlobalObject* instead of ExecState*. 1. We change ExecState* to JSGlobalObject*. 2. JIT operations should take JSGlobalObject* instead of ExecState* to reflect the inlinee's JSGlobalObject* correctly. 3. We get CallFrame* by using `__builtin_frame_address(1)` in JIT operations. When it is not available, we put CallFrame* to `vm.topCallFrame` in the caller side and load it from VM. 4. We remove ExecState*. All the actual call-frame is called `CallFrame*`. CallFrame* is passed only when CallFrame* is actually needed: accessing arguments, OSR etc. 5. LLInt and Baseline slow paths are just getting CallFrame*. It gets CodeBlock from CallFrame* and getting VM& and JSGlobalObject* from it since they do not have inlining. 6. We basically removed `VM::vmEntryGlobalObject`. It returns JSGlobalObject* from VMEntryScope. APIs and Completion.cpp use this but they are wrong. And by using lexical JSGlobalObject*, we fixed WPT issues. 7. This patch does not fix complicated JSGlobalObject* issues. But we put FIXME if it seems wrong and it needs to be revisited. 8. FunctionConstructor, ArrayConstructor etc. are exposed from JSGlobalObject to use it for InternalFunction::createStructure() without using `CallFrame*`. * API/APICallbackFunction.h: (JSC::APICallbackFunction::call): (JSC::APICallbackFunction::construct): * API/APICast.h: (toJS): (toJSGlobalObject): (toJSForGC): (toRef): (toGlobalRef): * API/APIUtils.h: (handleExceptionIfNeeded): (setException): * API/JSAPIGlobalObject.h: * API/JSAPIGlobalObject.mm: (JSC::JSAPIGlobalObject::moduleLoaderResolve): (JSC::JSAPIGlobalObject::moduleLoaderImportModule): (JSC::JSAPIGlobalObject::moduleLoaderFetch): (JSC::JSAPIGlobalObject::moduleLoaderCreateImportMetaProperties): (JSC::JSAPIGlobalObject::moduleLoaderEvaluate): (JSC::JSAPIGlobalObject::loadAndEvaluateJSScriptModule): * API/JSAPIValueWrapper.h: * API/JSBase.cpp: (JSEvaluateScriptInternal): (JSEvaluateScript): (JSCheckScriptSyntax): (JSGarbageCollect): (JSReportExtraMemoryCost): (JSSynchronousGarbageCollectForDebugging): (JSSynchronousEdenCollectForDebugging): * API/JSBaseInternal.h: * API/JSCTestRunnerUtils.cpp: (JSC::failNextNewCodeBlock): (JSC::numberOfDFGCompiles): (JSC::setNeverInline): (JSC::setNeverOptimize): * API/JSCallbackConstructor.h: * API/JSCallbackObject.h: * API/JSCallbackObjectFunctions.h: (JSC::JSCallbackObject<Parent>::JSCallbackObject): (JSC::JSCallbackObject<Parent>::finishCreation): (JSC::JSCallbackObject<Parent>::init): (JSC::JSCallbackObject<Parent>::toStringName): (JSC::JSCallbackObject<Parent>::getOwnPropertySlot): (JSC::JSCallbackObject<Parent>::getOwnPropertySlotByIndex): (JSC::JSCallbackObject<Parent>::defaultValue): (JSC::JSCallbackObject<Parent>::put): (JSC::JSCallbackObject<Parent>::putByIndex): (JSC::JSCallbackObject<Parent>::deleteProperty): (JSC::JSCallbackObject<Parent>::deletePropertyByIndex): (JSC::JSCallbackObject<Parent>::construct): (JSC::JSCallbackObject<Parent>::customHasInstance): (JSC::JSCallbackObject<Parent>::call): (JSC::JSCallbackObject<Parent>::getOwnNonIndexPropertyNames): (JSC::JSCallbackObject<Parent>::getStaticValue): (JSC::JSCallbackObject<Parent>::staticFunctionGetter): (JSC::JSCallbackObject<Parent>::callbackGetter): * API/JSClassRef.cpp: (OpaqueJSClass::contextData): (OpaqueJSClass::staticValues): (OpaqueJSClass::staticFunctions): (OpaqueJSClass::prototype): * API/JSClassRef.h: * API/JSContext.mm: (-[JSContext ensureWrapperMap]): (-[JSContext evaluateJSScript:]): (-[JSContext dependencyIdentifiersForModuleJSScript:]): (-[JSContext setException:]): (-[JSContext initWithGlobalContextRef:]): (-[JSContext wrapperMap]): * API/JSContextRef.cpp: (internalScriptTimeoutCallback): (JSGlobalContextCreateInGroup): (JSGlobalContextRetain): (JSGlobalContextRelease): (JSContextGetGlobalObject): (JSContextGetGroup): (JSContextGetGlobalContext): (JSGlobalContextCopyName): (JSGlobalContextSetName): (JSGlobalContextSetUnhandledRejectionCallback): (JSContextCreateBacktrace): (JSGlobalContextGetRemoteInspectionEnabled): (JSGlobalContextSetRemoteInspectionEnabled): (JSGlobalContextGetIncludesNativeCallStackWhenReportingExceptions): (JSGlobalContextSetIncludesNativeCallStackWhenReportingExceptions): (JSGlobalContextGetDebuggerRunLoop): (JSGlobalContextSetDebuggerRunLoop): (JSGlobalContextGetAugmentableInspectorController): * API/JSManagedValue.mm: (-[JSManagedValue initWithValue:]): (-[JSManagedValue value]): * API/JSObjectRef.cpp: (JSObjectMake): (JSObjectMakeFunctionWithCallback): (JSObjectMakeConstructor): (JSObjectMakeFunction): (JSObjectMakeArray): (JSObjectMakeDate): (JSObjectMakeError): (JSObjectMakeRegExp): (JSObjectMakeDeferredPromise): (JSObjectGetPrototype): (JSObjectSetPrototype): (JSObjectHasProperty): (JSObjectGetProperty): (JSObjectSetProperty): (JSObjectHasPropertyForKey): (JSObjectGetPropertyForKey): (JSObjectSetPropertyForKey): (JSObjectDeletePropertyForKey): (JSObjectGetPropertyAtIndex): (JSObjectSetPropertyAtIndex): (JSObjectDeleteProperty): (JSObjectGetPrivateProperty): (JSObjectSetPrivateProperty): (JSObjectDeletePrivateProperty): (JSObjectIsFunction): (JSObjectCallAsFunction): (JSObjectIsConstructor): (JSObjectCallAsConstructor): (JSObjectCopyPropertyNames): (JSObjectGetGlobalContext): * API/JSScriptRef.cpp: * API/JSTypedArray.cpp: (createTypedArray): (JSValueGetTypedArrayType): (JSObjectMakeTypedArray): (JSObjectMakeTypedArrayWithBytesNoCopy): (JSObjectMakeTypedArrayWithArrayBuffer): (JSObjectMakeTypedArrayWithArrayBufferAndOffset): (JSObjectGetTypedArrayBytesPtr): (JSObjectGetTypedArrayLength): (JSObjectGetTypedArrayByteLength): (JSObjectGetTypedArrayByteOffset): (JSObjectGetTypedArrayBuffer): (JSObjectMakeArrayBufferWithBytesNoCopy): (JSObjectGetArrayBufferBytesPtr): (JSObjectGetArrayBufferByteLength): * API/JSValue.mm: (JSContainerConvertor::add): (reportExceptionToInspector): (valueToObjectWithoutCopy): (ObjcContainerConvertor::add): * API/JSValueRef.cpp: (JSValueGetType): (JSValueIsUndefined): (JSValueIsNull): (JSValueIsBoolean): (JSValueIsNumber): (JSValueIsString): (JSValueIsObject): (JSValueIsSymbol): (JSValueIsArray): (JSValueIsDate): (JSValueIsObjectOfClass): (JSValueIsEqual): (JSValueIsStrictEqual): (JSValueIsInstanceOfConstructor): (JSValueMakeUndefined): (JSValueMakeNull): (JSValueMakeBoolean): (JSValueMakeNumber): (JSValueMakeSymbol): (JSValueMakeString): (JSValueMakeFromJSONString): (JSValueCreateJSONString): (JSValueToBoolean): (JSValueToNumber): (JSValueToStringCopy): (JSValueToObject): (JSValueProtect): (JSValueUnprotect): * API/JSWeakObjectMapRefPrivate.cpp: * API/JSWrapperMap.mm: (constructorHasInstance): (makeWrapper): (putNonEnumerable): (copyMethodsToObject): (-[JSObjCClassInfo wrapperForObject:inContext:]): (-[JSObjCClassInfo structureInContext:]): * API/ObjCCallbackFunction.mm: (JSC::objCCallbackFunctionCallAsFunction): (JSC::objCCallbackFunctionCallAsConstructor): (objCCallbackFunctionForInvocation): * API/glib/JSCCallbackFunction.cpp: (JSC::JSCCallbackFunction::call): (JSC::JSCCallbackFunction::construct): * API/glib/JSCClass.cpp: (isWrappedObject): (jscContextForObject): (jscClassCreateConstructor): (jscClassAddMethod): * API/glib/JSCContext.cpp: (jsc_context_evaluate_in_object): (jsc_context_check_syntax): * API/glib/JSCException.cpp: (jscExceptionCreate): * API/glib/JSCValue.cpp: (jsc_value_object_define_property_data): (jsc_value_object_define_property_accessor): (jscValueFunctionCreate): * API/glib/JSCWeakValue.cpp: (jscWeakValueInitialize): (jsc_weak_value_get_value): * API/glib/JSCWrapperMap.cpp: (JSC::WrapperMap::createJSWrappper): (JSC::WrapperMap::createContextWithJSWrappper): * API/tests/JSONParseTest.cpp: (testJSONParse): * API/tests/JSObjectGetProxyTargetTest.cpp: (testJSObjectGetProxyTarget): * API/tests/JSWrapperMapTests.mm: (+[JSWrapperMapTests testStructureIdentity]): * API/tests/testapi.cpp: (APIContext::APIContext): (APIContext::operator JSC::JSGlobalObject*): (APIContext::operator JSC::ExecState*): Deleted. * CMakeLists.txt: * JavaScriptCore.xcodeproj/project.pbxproj: * bindings/ScriptFunctionCall.cpp: (Deprecated::ScriptCallArgumentHandler::appendArgument): (Deprecated::ScriptFunctionCall::ScriptFunctionCall): (Deprecated::ScriptFunctionCall::call): * bindings/ScriptFunctionCall.h: * bindings/ScriptObject.cpp: (Deprecated::ScriptObject::ScriptObject): * bindings/ScriptObject.h: (Deprecated::ScriptObject::globalObject const): (Deprecated::ScriptObject::scriptState const): Deleted. * bindings/ScriptValue.cpp: (Inspector::jsToInspectorValue): (Inspector::toInspectorValue): * bindings/ScriptValue.h: * bytecode/AccessCase.cpp: (JSC::AccessCase::generateImpl): * bytecode/AccessCaseSnippetParams.cpp: (JSC::SlowPathCallGeneratorWithArguments::generateImpl): * bytecode/CodeBlock.cpp: (JSC::CodeBlock::finishCreation): (JSC::CodeBlock::setConstantIdentifierSetRegisters): (JSC::CodeBlock::setConstantRegisters): (JSC::CodeBlock::linkIncomingCall): (JSC::CodeBlock::linkIncomingPolymorphicCall): (JSC::CodeBlock::noticeIncomingCall): * bytecode/CodeBlock.h: (JSC::CallFrame::r): (JSC::CallFrame::uncheckedR): (JSC::ExecState::r): Deleted. (JSC::ExecState::uncheckedR): Deleted. * bytecode/DirectEvalCodeCache.cpp: (JSC::DirectEvalCodeCache::setSlow): * bytecode/DirectEvalCodeCache.h: (JSC::DirectEvalCodeCache::set): * bytecode/InlineCallFrame.cpp: (JSC::InlineCallFrame::calleeForCallFrame const): * bytecode/InlineCallFrame.h: * bytecode/InternalFunctionAllocationProfile.h: (JSC::InternalFunctionAllocationProfile::createAllocationStructureFromBase): * bytecode/ObjectPropertyConditionSet.cpp: (JSC::generateConditionsForPropertyMiss): (JSC::generateConditionsForPropertySetterMiss): (JSC::generateConditionsForPrototypePropertyHit): (JSC::generateConditionsForPrototypePropertyHitCustom): (JSC::generateConditionsForInstanceOf): * bytecode/ObjectPropertyConditionSet.h: * bytecode/PolymorphicAccess.cpp: (JSC::AccessGenerationState::emitExplicitExceptionHandler): * bytecode/StructureStubInfo.h: (JSC::appropriateGenericGetByIdFunction): * bytecode/UnlinkedFunctionExecutable.cpp: (JSC::UnlinkedFunctionExecutable::fromGlobalCode): * bytecode/UnlinkedFunctionExecutable.h: * bytecode/ValueRecovery.cpp: (JSC::ValueRecovery::recover const): * bytecode/ValueRecovery.h: * debugger/Debugger.cpp: (JSC::Debugger::attach): (JSC::Debugger::hasBreakpoint): (JSC::Debugger::breakProgram): (JSC::lexicalGlobalObjectForCallFrame): (JSC::Debugger::updateCallFrame): (JSC::Debugger::pauseIfNeeded): (JSC::Debugger::exception): (JSC::Debugger::atStatement): (JSC::Debugger::atExpression): (JSC::Debugger::callEvent): (JSC::Debugger::returnEvent): (JSC::Debugger::unwindEvent): (JSC::Debugger::willExecuteProgram): (JSC::Debugger::didExecuteProgram): (JSC::Debugger::didReachBreakpoint): * debugger/Debugger.h: * debugger/DebuggerCallFrame.cpp: (JSC::DebuggerCallFrame::create): (JSC::DebuggerCallFrame::globalObject): (JSC::DebuggerCallFrame::deprecatedVMEntryGlobalObject const): (JSC::DebuggerCallFrame::thisValue const): (JSC::DebuggerCallFrame::evaluateWithScopeExtension): (JSC::DebuggerCallFrame::sourceIDForCallFrame): (JSC::DebuggerCallFrame::globalExec): Deleted. (JSC::DebuggerCallFrame::vmEntryGlobalObject const): Deleted. * debugger/DebuggerCallFrame.h: * debugger/DebuggerEvalEnabler.h: (JSC::DebuggerEvalEnabler::DebuggerEvalEnabler): (JSC::DebuggerEvalEnabler::~DebuggerEvalEnabler): * debugger/DebuggerScope.cpp: (JSC::DebuggerScope::toStringName): (JSC::DebuggerScope::getOwnPropertySlot): (JSC::DebuggerScope::put): (JSC::DebuggerScope::deleteProperty): (JSC::DebuggerScope::getOwnPropertyNames): (JSC::DebuggerScope::defineOwnProperty): (JSC::DebuggerScope::caughtValue const): * debugger/DebuggerScope.h: * dfg/DFGAbstractInterpreterInlines.h: (JSC::DFG::AbstractInterpreter<AbstractStateType>::booleanResult): (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): * dfg/DFGArithMode.h: * dfg/DFGArrayifySlowPathGenerator.h: * dfg/DFGCallArrayAllocatorSlowPathGenerator.h: (JSC::DFG::CallArrayAllocatorSlowPathGenerator::CallArrayAllocatorSlowPathGenerator): (JSC::DFG::CallArrayAllocatorWithVariableSizeSlowPathGenerator::CallArrayAllocatorWithVariableSizeSlowPathGenerator): (JSC::DFG::CallArrayAllocatorWithVariableStructureVariableSizeSlowPathGenerator::CallArrayAllocatorWithVariableStructureVariableSizeSlowPathGenerator): * dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h: * dfg/DFGGraph.h: (JSC::DFG::Graph::globalThisObjectFor): * dfg/DFGJITCode.cpp: (JSC::DFG::JITCode::reconstruct): * dfg/DFGJITCode.h: * dfg/DFGJITCompiler.cpp: (JSC::DFG::JITCompiler::compileExceptionHandlers): (JSC::DFG::JITCompiler::compileFunction): * dfg/DFGOSREntry.cpp: (JSC::DFG::prepareOSREntry): (JSC::DFG::prepareCatchOSREntry): * dfg/DFGOSREntry.h: (JSC::DFG::prepareOSREntry): * dfg/DFGOSRExit.cpp: (JSC::DFG::createClonedArgumentsDuringExit): (JSC::DFG::OSRExit::executeOSRExit): (JSC::DFG::adjustAndJumpToTarget): (JSC::DFG::printOSRExit): (JSC::DFG::OSRExit::emitRestoreArguments): (JSC::DFG::OSRExit::compileOSRExit): (JSC::DFG::OSRExit::debugOperationPrintSpeculationFailure): * dfg/DFGOSRExit.h: * dfg/DFGOSRExitCompilerCommon.cpp: (JSC::DFG::osrWriteBarrier): (JSC::DFG::adjustAndJumpToTarget): * dfg/DFGOperations.cpp: (JSC::DFG::putByVal): (JSC::DFG::putByValInternal): (JSC::DFG::putByValCellInternal): (JSC::DFG::putByValCellStringInternal): (JSC::DFG::newTypedArrayWithSize): (JSC::DFG::putWithThis): (JSC::DFG::binaryOp): (JSC::DFG::bitwiseBinaryOp): (JSC::DFG::getByValObject): * dfg/DFGOperations.h: * dfg/DFGSaneStringGetByValSlowPathGenerator.h: (JSC::DFG::SaneStringGetByValSlowPathGenerator::SaneStringGetByValSlowPathGenerator): * dfg/DFGSpeculativeJIT.cpp: (JSC::DFG::SpeculativeJIT::compileInById): (JSC::DFG::SpeculativeJIT::compileInByVal): (JSC::DFG::SpeculativeJIT::compileDeleteById): (JSC::DFG::SpeculativeJIT::compileDeleteByVal): (JSC::DFG::SpeculativeJIT::compilePushWithScope): (JSC::DFG::SpeculativeJIT::compileStringSlice): (JSC::DFG::SpeculativeJIT::compileToLowerCase): (JSC::DFG::SpeculativeJIT::compileCheckTraps): (JSC::DFG::SpeculativeJIT::compileDoublePutByVal): (JSC::DFG::SpeculativeJIT::compileGetByValOnString): (JSC::DFG::SpeculativeJIT::compileFromCharCode): (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray): (JSC::DFG::SpeculativeJIT::compileGetByValForObjectWithString): (JSC::DFG::SpeculativeJIT::compileGetByValForObjectWithSymbol): (JSC::DFG::SpeculativeJIT::compilePutByValForCellWithString): (JSC::DFG::SpeculativeJIT::compilePutByValForCellWithSymbol): (JSC::DFG::SpeculativeJIT::compileGetByValWithThis): (JSC::DFG::SpeculativeJIT::compileParseInt): (JSC::DFG::SpeculativeJIT::compileInstanceOfForCells): (JSC::DFG::SpeculativeJIT::compileValueBitNot): (JSC::DFG::SpeculativeJIT::emitUntypedBitOp): (JSC::DFG::SpeculativeJIT::compileValueBitwiseOp): (JSC::DFG::SpeculativeJIT::emitUntypedRightShiftBitOp): (JSC::DFG::SpeculativeJIT::compileValueLShiftOp): (JSC::DFG::SpeculativeJIT::compileValueBitRShift): (JSC::DFG::SpeculativeJIT::compileValueAdd): (JSC::DFG::SpeculativeJIT::compileValueSub): (JSC::DFG::SpeculativeJIT::compileMathIC): (JSC::DFG::SpeculativeJIT::compileInstanceOfCustom): (JSC::DFG::SpeculativeJIT::compileToObjectOrCallObjectConstructor): (JSC::DFG::SpeculativeJIT::compileArithAbs): (JSC::DFG::SpeculativeJIT::compileArithClz32): (JSC::DFG::SpeculativeJIT::compileArithDoubleUnaryOp): (JSC::DFG::SpeculativeJIT::compileValueMul): (JSC::DFG::SpeculativeJIT::compileValueDiv): (JSC::DFG::SpeculativeJIT::compileArithFRound): (JSC::DFG::SpeculativeJIT::compileValueMod): (JSC::DFG::SpeculativeJIT::compileArithRounding): (JSC::DFG::SpeculativeJIT::compileArithSqrt): (JSC::DFG::SpeculativeJIT::compileValuePow): (JSC::DFG::SpeculativeJIT::compileStringEquality): (JSC::DFG::SpeculativeJIT::compileStringCompare): (JSC::DFG::SpeculativeJIT::compileSameValue): (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage): (JSC::DFG::SpeculativeJIT::compileGetByValOnDirectArguments): (JSC::DFG::SpeculativeJIT::compileNewFunction): (JSC::DFG::SpeculativeJIT::compileSetFunctionName): (JSC::DFG::SpeculativeJIT::compileLoadVarargs): (JSC::DFG::SpeculativeJIT::compileCreateActivation): (JSC::DFG::SpeculativeJIT::compileCreateDirectArguments): (JSC::DFG::SpeculativeJIT::compileCreateScopedArguments): (JSC::DFG::SpeculativeJIT::compileCreateClonedArguments): (JSC::DFG::SpeculativeJIT::compileCreateRest): (JSC::DFG::SpeculativeJIT::compileSpread): (JSC::DFG::SpeculativeJIT::compileNewArray): (JSC::DFG::SpeculativeJIT::compileNewArrayWithSpread): (JSC::DFG::SpeculativeJIT::compileArraySlice): (JSC::DFG::SpeculativeJIT::compileArrayIndexOf): (JSC::DFG::SpeculativeJIT::compileArrayPush): (JSC::DFG::SpeculativeJIT::compileNotifyWrite): (JSC::DFG::SpeculativeJIT::compileAllocatePropertyStorage): (JSC::DFG::SpeculativeJIT::compileReallocatePropertyStorage): (JSC::DFG::SpeculativeJIT::compileCallDOM): (JSC::DFG::SpeculativeJIT::compileCallDOMGetter): (JSC::DFG::SpeculativeJIT::compileToStringOrCallStringConstructorOrStringValueOf): (JSC::DFG::SpeculativeJIT::compileNumberToStringWithValidRadixConstant): (JSC::DFG::SpeculativeJIT::compileNumberToStringWithRadix): (JSC::DFG::SpeculativeJIT::compileNewStringObject): (JSC::DFG::SpeculativeJIT::compileNewSymbol): (JSC::DFG::SpeculativeJIT::compileNewTypedArrayWithSize): (JSC::DFG::SpeculativeJIT::compileNewRegexp): (JSC::DFG::SpeculativeJIT::emitSwitchImm): (JSC::DFG::SpeculativeJIT::emitSwitchCharStringJump): (JSC::DFG::SpeculativeJIT::emitSwitchChar): (JSC::DFG::SpeculativeJIT::emitSwitchStringOnString): (JSC::DFG::SpeculativeJIT::emitSwitchString): (JSC::DFG::SpeculativeJIT::compileStoreBarrier): (JSC::DFG::SpeculativeJIT::compilePutAccessorById): (JSC::DFG::SpeculativeJIT::compilePutGetterSetterById): (JSC::DFG::SpeculativeJIT::compileResolveScope): (JSC::DFG::SpeculativeJIT::compileResolveScopeForHoistingFuncDeclInEval): (JSC::DFG::SpeculativeJIT::compileGetDynamicVar): (JSC::DFG::SpeculativeJIT::compilePutDynamicVar): (JSC::DFG::SpeculativeJIT::compilePutAccessorByVal): (JSC::DFG::SpeculativeJIT::compileStringReplace): (JSC::DFG::SpeculativeJIT::compileDefineDataProperty): (JSC::DFG::SpeculativeJIT::compileDefineAccessorProperty): (JSC::DFG::SpeculativeJIT::compileThrow): (JSC::DFG::SpeculativeJIT::compileThrowStaticError): (JSC::DFG::SpeculativeJIT::compileHasGenericProperty): (JSC::DFG::SpeculativeJIT::compileToIndexString): (JSC::DFG::SpeculativeJIT::compilePutByIdWithThis): (JSC::DFG::SpeculativeJIT::compileHasStructureProperty): (JSC::DFG::SpeculativeJIT::compileGetPropertyEnumerator): (JSC::DFG::SpeculativeJIT::compileStrCat): (JSC::DFG::SpeculativeJIT::compileNewArrayBuffer): (JSC::DFG::SpeculativeJIT::compileNewArrayWithSize): (JSC::DFG::SpeculativeJIT::compileNewTypedArray): (JSC::DFG::SpeculativeJIT::compileToThis): (JSC::DFG::SpeculativeJIT::compileObjectKeys): (JSC::DFG::SpeculativeJIT::compileObjectCreate): (JSC::DFG::SpeculativeJIT::compileCreateThis): (JSC::DFG::SpeculativeJIT::compileCreatePromise): (JSC::DFG::SpeculativeJIT::compileCreateInternalFieldObject): (JSC::DFG::SpeculativeJIT::compileNewObject): (JSC::DFG::SpeculativeJIT::compileNewPromise): (JSC::DFG::SpeculativeJIT::compileNewInternalFieldObject): (JSC::DFG::SpeculativeJIT::compileToPrimitive): (JSC::DFG::SpeculativeJIT::compileSetAdd): (JSC::DFG::SpeculativeJIT::compileMapSet): (JSC::DFG::SpeculativeJIT::compileWeakSetAdd): (JSC::DFG::SpeculativeJIT::compileWeakMapSet): (JSC::DFG::SpeculativeJIT::compileGetPrototypeOf): (JSC::DFG::SpeculativeJIT::compileAllocateNewArrayWithSize): (JSC::DFG::SpeculativeJIT::compileHasIndexedProperty): (JSC::DFG::SpeculativeJIT::compileGetDirectPname): (JSC::DFG::SpeculativeJIT::compileProfileType): (JSC::DFG::SpeculativeJIT::cachedPutById): (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare): (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch): (JSC::DFG::SpeculativeJIT::compileBigIntEquality): (JSC::DFG::SpeculativeJIT::compileMakeRope): * dfg/DFGSpeculativeJIT.h: (JSC::DFG::SpeculativeJIT::callOperationWithCallFrameRollbackOnException): (JSC::DFG::SpeculativeJIT::prepareForExternalCall): * dfg/DFGSpeculativeJIT32_64.cpp: (JSC::DFG::SpeculativeJIT::cachedGetById): (JSC::DFG::SpeculativeJIT::cachedGetByIdWithThis): (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq): (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq): (JSC::DFG::SpeculativeJIT::emitCall): (JSC::DFG::SpeculativeJIT::compileContiguousPutByVal): (JSC::DFG::SpeculativeJIT::compile): * dfg/DFGSpeculativeJIT64.cpp: (JSC::DFG::SpeculativeJIT::cachedGetById): (JSC::DFG::SpeculativeJIT::cachedGetByIdWithThis): (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq): (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq): (JSC::DFG::SpeculativeJIT::emitCall): (JSC::DFG::SpeculativeJIT::compile): * dynbench.cpp: (main): * ftl/FTLCompile.cpp: (JSC::FTL::compile): * ftl/FTLGeneratedFunction.h: * ftl/FTLLink.cpp: (JSC::FTL::link): * ftl/FTLLowerDFGToB3.cpp: (JSC::FTL::DFG::LowerDFGToB3::lower): (JSC::FTL::DFG::LowerDFGToB3::compileToObjectOrCallObjectConstructor): (JSC::FTL::DFG::LowerDFGToB3::compileToThis): (JSC::FTL::DFG::LowerDFGToB3::compileValueAdd): (JSC::FTL::DFG::LowerDFGToB3::compileValueSub): (JSC::FTL::DFG::LowerDFGToB3::compileValueMul): (JSC::FTL::DFG::LowerDFGToB3::compileUnaryMathIC): (JSC::FTL::DFG::LowerDFGToB3::compileBinaryMathIC): (JSC::FTL::DFG::LowerDFGToB3::compileStrCat): (JSC::FTL::DFG::LowerDFGToB3::compileArithClz32): (JSC::FTL::DFG::LowerDFGToB3::compileValueDiv): (JSC::FTL::DFG::LowerDFGToB3::compileValueMod): (JSC::FTL::DFG::LowerDFGToB3::compileArithAbs): (JSC::FTL::DFG::LowerDFGToB3::compileArithUnary): (JSC::FTL::DFG::LowerDFGToB3::compileValuePow): (JSC::FTL::DFG::LowerDFGToB3::compileArithRound): (JSC::FTL::DFG::LowerDFGToB3::compileArithFloor): (JSC::FTL::DFG::LowerDFGToB3::compileArithCeil): (JSC::FTL::DFG::LowerDFGToB3::compileArithTrunc): (JSC::FTL::DFG::LowerDFGToB3::compileArithSqrt): (JSC::FTL::DFG::LowerDFGToB3::compileArithFRound): (JSC::FTL::DFG::LowerDFGToB3::compileValueBitNot): (JSC::FTL::DFG::LowerDFGToB3::compileValueBitAnd): (JSC::FTL::DFG::LowerDFGToB3::compileValueBitOr): (JSC::FTL::DFG::LowerDFGToB3::compileValueBitXor): (JSC::FTL::DFG::LowerDFGToB3::compileValueBitRShift): (JSC::FTL::DFG::LowerDFGToB3::compileValueBitLShift): (JSC::FTL::DFG::LowerDFGToB3::compileArrayify): (JSC::FTL::DFG::LowerDFGToB3::compileGetById): (JSC::FTL::DFG::LowerDFGToB3::compileGetByIdWithThis): (JSC::FTL::DFG::LowerDFGToB3::compileGetByValWithThis): (JSC::FTL::DFG::LowerDFGToB3::compilePutByIdWithThis): (JSC::FTL::DFG::LowerDFGToB3::compilePutByValWithThis): (JSC::FTL::DFG::LowerDFGToB3::compileAtomicsReadModifyWrite): (JSC::FTL::DFG::LowerDFGToB3::compileAtomicsIsLockFree): (JSC::FTL::DFG::LowerDFGToB3::compileDefineDataProperty): (JSC::FTL::DFG::LowerDFGToB3::compileDefineAccessorProperty): (JSC::FTL::DFG::LowerDFGToB3::compilePutById): (JSC::FTL::DFG::LowerDFGToB3::compileGetIndexedPropertyStorage): (JSC::FTL::DFG::LowerDFGToB3::compileGetPrototypeOf): (JSC::FTL::DFG::LowerDFGToB3::compileGetByVal): (JSC::FTL::DFG::LowerDFGToB3::compilePutByVal): (JSC::FTL::DFG::LowerDFGToB3::compilePutAccessorById): (JSC::FTL::DFG::LowerDFGToB3::compilePutGetterSetterById): (JSC::FTL::DFG::LowerDFGToB3::compilePutAccessorByVal): (JSC::FTL::DFG::LowerDFGToB3::compileDeleteById): (JSC::FTL::DFG::LowerDFGToB3::compileDeleteByVal): (JSC::FTL::DFG::LowerDFGToB3::compileArrayPush): (JSC::FTL::DFG::LowerDFGToB3::compileArrayIndexOf): (JSC::FTL::DFG::LowerDFGToB3::compileArrayPop): (JSC::FTL::DFG::LowerDFGToB3::compilePushWithScope): (JSC::FTL::DFG::LowerDFGToB3::compileCreateActivation): (JSC::FTL::DFG::LowerDFGToB3::compileNewFunction): (JSC::FTL::DFG::LowerDFGToB3::compileCreateDirectArguments): (JSC::FTL::DFG::LowerDFGToB3::compileCreateScopedArguments): (JSC::FTL::DFG::LowerDFGToB3::compileCreateClonedArguments): (JSC::FTL::DFG::LowerDFGToB3::compileCreateRest): (JSC::FTL::DFG::LowerDFGToB3::compileObjectKeys): (JSC::FTL::DFG::LowerDFGToB3::compileObjectCreate): (JSC::FTL::DFG::LowerDFGToB3::compileNewPromise): (JSC::FTL::DFG::LowerDFGToB3::compileNewInternalFieldObject): (JSC::FTL::DFG::LowerDFGToB3::compileNewStringObject): (JSC::FTL::DFG::LowerDFGToB3::compileNewSymbol): (JSC::FTL::DFG::LowerDFGToB3::compileNewArray): (JSC::FTL::DFG::LowerDFGToB3::compileNewArrayWithSpread): (JSC::FTL::DFG::LowerDFGToB3::compileCreateThis): (JSC::FTL::DFG::LowerDFGToB3::compileCreatePromise): (JSC::FTL::DFG::LowerDFGToB3::compileCreateInternalFieldObject): (JSC::FTL::DFG::LowerDFGToB3::compileSpread): (JSC::FTL::DFG::LowerDFGToB3::compileNewArrayBuffer): (JSC::FTL::DFG::LowerDFGToB3::compileNewArrayWithSize): (JSC::FTL::DFG::LowerDFGToB3::compileNewTypedArray): (JSC::FTL::DFG::LowerDFGToB3::compileToNumber): (JSC::FTL::DFG::LowerDFGToB3::compileToStringOrCallStringConstructorOrStringValueOf): (JSC::FTL::DFG::LowerDFGToB3::compileToPrimitive): (JSC::FTL::DFG::LowerDFGToB3::compileMakeRope): (JSC::FTL::DFG::LowerDFGToB3::compileStringCharAt): (JSC::FTL::DFG::LowerDFGToB3::compileStringFromCharCode): (JSC::FTL::DFG::LowerDFGToB3::compileNotifyWrite): (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq): (JSC::FTL::DFG::LowerDFGToB3::compileSameValue): (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstruct): (JSC::FTL::DFG::LowerDFGToB3::compileTailCall): (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargsSpread): (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargs): (JSC::FTL::DFG::LowerDFGToB3::compileCallEval): (JSC::FTL::DFG::LowerDFGToB3::compileLoadVarargs): (JSC::FTL::DFG::LowerDFGToB3::compileSwitch): (JSC::FTL::DFG::LowerDFGToB3::compileThrow): (JSC::FTL::DFG::LowerDFGToB3::compileThrowStaticError): (JSC::FTL::DFG::LowerDFGToB3::mapHashString): (JSC::FTL::DFG::LowerDFGToB3::compileMapHash): (JSC::FTL::DFG::LowerDFGToB3::compileGetMapBucket): (JSC::FTL::DFG::LowerDFGToB3::compileSetAdd): (JSC::FTL::DFG::LowerDFGToB3::compileMapSet): (JSC::FTL::DFG::LowerDFGToB3::compileWeakSetAdd): (JSC::FTL::DFG::LowerDFGToB3::compileWeakMapSet): (JSC::FTL::DFG::LowerDFGToB3::compileInByVal): (JSC::FTL::DFG::LowerDFGToB3::compileInById): (JSC::FTL::DFG::LowerDFGToB3::compileHasOwnProperty): (JSC::FTL::DFG::LowerDFGToB3::compileParseInt): (JSC::FTL::DFG::LowerDFGToB3::compileInstanceOf): (JSC::FTL::DFG::LowerDFGToB3::compileInstanceOfCustom): (JSC::FTL::DFG::LowerDFGToB3::compileHasIndexedProperty): (JSC::FTL::DFG::LowerDFGToB3::compileHasGenericProperty): (JSC::FTL::DFG::LowerDFGToB3::compileHasStructureProperty): (JSC::FTL::DFG::LowerDFGToB3::compileGetDirectPname): (JSC::FTL::DFG::LowerDFGToB3::compileGetPropertyEnumerator): (JSC::FTL::DFG::LowerDFGToB3::compileToIndexString): (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeNewObject): (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeCreateActivation): (JSC::FTL::DFG::LowerDFGToB3::compileCheckTraps): (JSC::FTL::DFG::LowerDFGToB3::compileRegExpExec): (JSC::FTL::DFG::LowerDFGToB3::compileRegExpExecNonGlobalOrSticky): (JSC::FTL::DFG::LowerDFGToB3::compileRegExpMatchFastGlobal): (JSC::FTL::DFG::LowerDFGToB3::compileRegExpTest): (JSC::FTL::DFG::LowerDFGToB3::compileRegExpMatchFast): (JSC::FTL::DFG::LowerDFGToB3::compileNewRegexp): (JSC::FTL::DFG::LowerDFGToB3::compileSetFunctionName): (JSC::FTL::DFG::LowerDFGToB3::compileStringReplace): (JSC::FTL::DFG::LowerDFGToB3::allocatePropertyStorage): (JSC::FTL::DFG::LowerDFGToB3::reallocatePropertyStorage): (JSC::FTL::DFG::LowerDFGToB3::allocatePropertyStorageWithSizeImpl): (JSC::FTL::DFG::LowerDFGToB3::getById): (JSC::FTL::DFG::LowerDFGToB3::getByIdWithThis): (JSC::FTL::DFG::LowerDFGToB3::compare): (JSC::FTL::DFG::LowerDFGToB3::compileStringSlice): (JSC::FTL::DFG::LowerDFGToB3::compileToLowerCase): (JSC::FTL::DFG::LowerDFGToB3::compileNumberToStringWithRadix): (JSC::FTL::DFG::LowerDFGToB3::compileNumberToStringWithValidRadixConstant): (JSC::FTL::DFG::LowerDFGToB3::compileResolveScopeForHoistingFuncDeclInEval): (JSC::FTL::DFG::LowerDFGToB3::compileResolveScope): (JSC::FTL::DFG::LowerDFGToB3::compileGetDynamicVar): (JSC::FTL::DFG::LowerDFGToB3::compilePutDynamicVar): (JSC::FTL::DFG::LowerDFGToB3::compileCallDOM): (JSC::FTL::DFG::LowerDFGToB3::compileCallDOMGetter): (JSC::FTL::DFG::LowerDFGToB3::nonSpeculativeCompare): (JSC::FTL::DFG::LowerDFGToB3::stringsEqual): (JSC::FTL::DFG::LowerDFGToB3::emitBinarySnippet): (JSC::FTL::DFG::LowerDFGToB3::emitBinaryBitOpSnippet): (JSC::FTL::DFG::LowerDFGToB3::emitRightShiftSnippet): (JSC::FTL::DFG::LowerDFGToB3::allocateObject): (JSC::FTL::DFG::LowerDFGToB3::allocateJSArray): (JSC::FTL::DFG::LowerDFGToB3::ensureShadowChickenPacket): (JSC::FTL::DFG::LowerDFGToB3::contiguousPutByValOutOfBounds): (JSC::FTL::DFG::LowerDFGToB3::switchStringSlow): (JSC::FTL::DFG::LowerDFGToB3::emitStoreBarrier): (JSC::FTL::DFG::LowerDFGToB3::callCheck): * ftl/FTLOSREntry.cpp: (JSC::FTL::prepareOSREntry): * ftl/FTLOSREntry.h: * ftl/FTLOSRExitCompiler.cpp: (JSC::FTL::compileStub): (JSC::FTL::compileFTLOSRExit): * ftl/FTLOSRExitCompiler.h: * ftl/FTLOperations.cpp: (JSC::FTL::operationPopulateObjectInOSR): (JSC::FTL::operationMaterializeObjectInOSR): (JSC::FTL::compileFTLLazySlowPath): * ftl/FTLOperations.h: * ftl/FTLSlowPathCall.h: (JSC::FTL::callOperation): * generator/Metadata.rb: * heap/Handle.h: * heap/HeapCell.h: * heap/HeapSnapshotBuilder.cpp: (JSC::HeapSnapshotBuilder::json): * inspector/ConsoleMessage.cpp: (Inspector::ConsoleMessage::ConsoleMessage): (Inspector::ConsoleMessage::autogenerateMetadata): (Inspector::ConsoleMessage::addToFrontend): (Inspector::ConsoleMessage::globalObject const): (Inspector::ConsoleMessage::scriptState const): Deleted. * inspector/ConsoleMessage.h: * inspector/InjectedScript.cpp: (Inspector::InjectedScript::wrapCallFrames const): (Inspector::InjectedScript::wrapObject const): (Inspector::InjectedScript::wrapJSONString const): (Inspector::InjectedScript::wrapTable const): (Inspector::InjectedScript::previewValue const): (Inspector::InjectedScript::arrayFromVector): * inspector/InjectedScriptBase.cpp: (Inspector::InjectedScriptBase::hasAccessToInspectedScriptState const): (Inspector::InjectedScriptBase::callFunctionWithEvalEnabled const): (Inspector::InjectedScriptBase::makeCall): (Inspector::InjectedScriptBase::makeAsyncCall): * inspector/InjectedScriptBase.h: * inspector/InjectedScriptHost.cpp: (Inspector::InjectedScriptHost::wrapper): * inspector/InjectedScriptHost.h: * inspector/InjectedScriptManager.cpp: (Inspector::InjectedScriptManager::injectedScriptIdFor): (Inspector::InjectedScriptManager::createInjectedScript): (Inspector::InjectedScriptManager::injectedScriptFor): * inspector/InjectedScriptManager.h: * inspector/InjectedScriptModule.cpp: (Inspector::InjectedScriptModule::ensureInjected): * inspector/InjectedScriptModule.h: * inspector/InspectorEnvironment.h: * inspector/JSGlobalObjectConsoleClient.cpp: (Inspector::JSGlobalObjectConsoleClient::messageWithTypeAndLevel): (Inspector::JSGlobalObjectConsoleClient::count): (Inspector::JSGlobalObjectConsoleClient::countReset): (Inspector::JSGlobalObjectConsoleClient::profile): (Inspector::JSGlobalObjectConsoleClient::profileEnd): (Inspector::JSGlobalObjectConsoleClient::takeHeapSnapshot): (Inspector::JSGlobalObjectConsoleClient::time): (Inspector::JSGlobalObjectConsoleClient::timeLog): (Inspector::JSGlobalObjectConsoleClient::timeEnd): (Inspector::JSGlobalObjectConsoleClient::timeStamp): (Inspector::JSGlobalObjectConsoleClient::record): (Inspector::JSGlobalObjectConsoleClient::recordEnd): (Inspector::JSGlobalObjectConsoleClient::screenshot): * inspector/JSGlobalObjectConsoleClient.h: * inspector/JSGlobalObjectInspectorController.cpp: (Inspector::JSGlobalObjectInspectorController::reportAPIException): * inspector/JSGlobalObjectInspectorController.h: * inspector/JSGlobalObjectScriptDebugServer.h: * inspector/JSInjectedScriptHost.cpp: (Inspector::JSInjectedScriptHost::evaluate const): (Inspector::JSInjectedScriptHost::savedResultAlias const): (Inspector::JSInjectedScriptHost::evaluateWithScopeExtension): (Inspector::JSInjectedScriptHost::internalConstructorName): (Inspector::JSInjectedScriptHost::isHTMLAllCollection): (Inspector::JSInjectedScriptHost::isPromiseRejectedWithNativeGetterTypeError): (Inspector::JSInjectedScriptHost::subtype): (Inspector::JSInjectedScriptHost::functionDetails): (Inspector::constructInternalProperty): (Inspector::JSInjectedScriptHost::getInternalProperties): (Inspector::JSInjectedScriptHost::proxyTargetValue): (Inspector::JSInjectedScriptHost::weakMapSize): (Inspector::JSInjectedScriptHost::weakMapEntries): (Inspector::JSInjectedScriptHost::weakSetSize): (Inspector::JSInjectedScriptHost::weakSetEntries): (Inspector::cloneArrayIteratorObject): (Inspector::cloneMapIteratorObject): (Inspector::cloneSetIteratorObject): (Inspector::JSInjectedScriptHost::iteratorEntries): (Inspector::checkForbiddenPrototype): (Inspector::JSInjectedScriptHost::queryInstances): (Inspector::JSInjectedScriptHost::queryHolders): * inspector/JSInjectedScriptHost.h: * inspector/JSInjectedScriptHostPrototype.cpp: (Inspector::jsInjectedScriptHostPrototypeAttributeEvaluate): (Inspector::jsInjectedScriptHostPrototypeAttributeSavedResultAlias): (Inspector::jsInjectedScriptHostPrototypeFunctionInternalConstructorName): (Inspector::jsInjectedScriptHostPrototypeFunctionIsHTMLAllCollection): (Inspector::jsInjectedScriptHostPrototypeFunctionIsPromiseRejectedWithNativeGetterTypeError): (Inspector::jsInjectedScriptHostPrototypeFunctionProxyTargetValue): (Inspector::jsInjectedScriptHostPrototypeFunctionWeakMapSize): (Inspector::jsInjectedScriptHostPrototypeFunctionWeakMapEntries): (Inspector::jsInjectedScriptHostPrototypeFunctionWeakSetSize): (Inspector::jsInjectedScriptHostPrototypeFunctionWeakSetEntries): (Inspector::jsInjectedScriptHostPrototypeFunctionIteratorEntries): (Inspector::jsInjectedScriptHostPrototypeFunctionQueryInstances): (Inspector::jsInjectedScriptHostPrototypeFunctionQueryHolders): (Inspector::jsInjectedScriptHostPrototypeFunctionEvaluateWithScopeExtension): (Inspector::jsInjectedScriptHostPrototypeFunctionSubtype): (Inspector::jsInjectedScriptHostPrototypeFunctionFunctionDetails): (Inspector::jsInjectedScriptHostPrototypeFunctionGetInternalProperties): * inspector/JSJavaScriptCallFrame.cpp: (Inspector::JSJavaScriptCallFrame::evaluateWithScopeExtension): (Inspector::valueForScopeLocation): (Inspector::JSJavaScriptCallFrame::scopeDescriptions): (Inspector::JSJavaScriptCallFrame::caller const): (Inspector::JSJavaScriptCallFrame::sourceID const): (Inspector::JSJavaScriptCallFrame::line const): (Inspector::JSJavaScriptCallFrame::column const): (Inspector::JSJavaScriptCallFrame::functionName const): (Inspector::JSJavaScriptCallFrame::scopeChain const): (Inspector::JSJavaScriptCallFrame::thisObject const): (Inspector::JSJavaScriptCallFrame::isTailDeleted const): (Inspector::JSJavaScriptCallFrame::type const): (Inspector::toJS): * inspector/JSJavaScriptCallFrame.h: * inspector/JSJavaScriptCallFramePrototype.cpp: (Inspector::jsJavaScriptCallFramePrototypeFunctionEvaluateWithScopeExtension): (Inspector::jsJavaScriptCallFramePrototypeFunctionScopeDescriptions): (Inspector::jsJavaScriptCallFrameAttributeCaller): (Inspector::jsJavaScriptCallFrameAttributeSourceID): (Inspector::jsJavaScriptCallFrameAttributeLine): (Inspector::jsJavaScriptCallFrameAttributeColumn): (Inspector::jsJavaScriptCallFrameAttributeFunctionName): (Inspector::jsJavaScriptCallFrameAttributeScopeChain): (Inspector::jsJavaScriptCallFrameAttributeThisObject): (Inspector::jsJavaScriptCallFrameAttributeType): (Inspector::jsJavaScriptCallFrameIsTailDeleted): * inspector/JavaScriptCallFrame.h: (Inspector::JavaScriptCallFrame::deprecatedVMEntryGlobalObject const): (Inspector::JavaScriptCallFrame::vmEntryGlobalObject const): Deleted. * inspector/ScriptArguments.cpp: (Inspector::ScriptArguments::create): (Inspector::ScriptArguments::ScriptArguments): (Inspector::ScriptArguments::globalObject const): (Inspector::ScriptArguments::getFirstArgumentAsString const): (Inspector::ScriptArguments::isEqual const): (Inspector::ScriptArguments::globalState const): Deleted. * inspector/ScriptArguments.h: * inspector/ScriptCallStackFactory.cpp: (Inspector::createScriptCallStack): (Inspector::createScriptCallStackForConsole): (Inspector::extractSourceInformationFromException): (Inspector::createScriptCallStackFromException): (Inspector::createScriptArguments): * inspector/ScriptCallStackFactory.h: * inspector/ScriptDebugListener.h: * inspector/ScriptDebugServer.cpp: (Inspector::ScriptDebugServer::evaluateBreakpointAction): (Inspector::ScriptDebugServer::sourceParsed): (Inspector::ScriptDebugServer::handleExceptionInBreakpointCondition const): (Inspector::ScriptDebugServer::handlePause): (Inspector::ScriptDebugServer::exceptionOrCaughtValue): * inspector/ScriptDebugServer.h: * inspector/agents/InspectorAuditAgent.cpp: (Inspector::InspectorAuditAgent::setup): (Inspector::InspectorAuditAgent::populateAuditObject): * inspector/agents/InspectorAuditAgent.h: * inspector/agents/InspectorConsoleAgent.cpp: (Inspector::InspectorConsoleAgent::startTiming): (Inspector::InspectorConsoleAgent::logTiming): (Inspector::InspectorConsoleAgent::stopTiming): (Inspector::InspectorConsoleAgent::count): (Inspector::InspectorConsoleAgent::countReset): * inspector/agents/InspectorConsoleAgent.h: * inspector/agents/InspectorDebuggerAgent.cpp: (Inspector::InspectorDebuggerAgent::didScheduleAsyncCall): (Inspector::InspectorDebuggerAgent::resume): (Inspector::InspectorDebuggerAgent::didPause): (Inspector::InspectorDebuggerAgent::breakpointActionProbe): (Inspector::InspectorDebuggerAgent::didContinue): (Inspector::InspectorDebuggerAgent::clearDebuggerBreakpointState): (Inspector::InspectorDebuggerAgent::assertPaused): * inspector/agents/InspectorDebuggerAgent.h: * inspector/agents/InspectorHeapAgent.cpp: (Inspector::InspectorHeapAgent::snapshot): (Inspector::InspectorHeapAgent::getPreview): (Inspector::InspectorHeapAgent::getRemoteObject): * inspector/agents/JSGlobalObjectAuditAgent.cpp: (Inspector::JSGlobalObjectAuditAgent::injectedScriptForEval): * inspector/agents/JSGlobalObjectDebuggerAgent.cpp: (Inspector::JSGlobalObjectDebuggerAgent::injectedScriptForEval): (Inspector::JSGlobalObjectDebuggerAgent::breakpointActionLog): * inspector/agents/JSGlobalObjectDebuggerAgent.h: * inspector/agents/JSGlobalObjectRuntimeAgent.cpp: (Inspector::JSGlobalObjectRuntimeAgent::injectedScriptForEval): * interpreter/AbstractPC.cpp: (JSC::AbstractPC::AbstractPC): * interpreter/AbstractPC.h: * interpreter/CachedCall.h: (JSC::CachedCall::CachedCall): * interpreter/CallFrame.cpp: (JSC::CallFrame::initDeprecatedCallFrameForDebugger): (JSC::CallFrame::wasmAwareLexicalGlobalObject): (JSC::CallFrame::convertToStackOverflowFrame): (JSC::ExecState::initGlobalExec): Deleted. * interpreter/CallFrame.h: (JSC::CallFrame::isDeprecatedCallFrameForDebugger const): (JSC::CallFrame::isGlobalExec const): Deleted. * interpreter/Interpreter.cpp: (JSC::eval): (JSC::sizeOfVarargs): (JSC::sizeFrameForForwardArguments): (JSC::sizeFrameForVarargs): (JSC::loadVarargs): (JSC::setupVarargsFrame): (JSC::setupVarargsFrameAndSetThis): (JSC::setupForwardArgumentsFrame): (JSC::setupForwardArgumentsFrameAndSetThis): (JSC::notifyDebuggerOfUnwinding): (JSC::Interpreter::notifyDebuggerOfExceptionToBeThrown): (JSC::Interpreter::executeProgram): (JSC::Interpreter::executeCall): (JSC::Interpreter::executeConstruct): (JSC::Interpreter::execute): (JSC::Interpreter::executeModuleProgram): (JSC::Interpreter::debug): * interpreter/Interpreter.h: * interpreter/InterpreterInlines.h: (JSC::Interpreter::execute): * interpreter/Register.h: * interpreter/ShadowChicken.cpp: (JSC::ShadowChicken::log): (JSC::ShadowChicken::update): (JSC::ShadowChicken::functionsOnStack): * interpreter/ShadowChicken.h: * interpreter/ShadowChickenInlines.h: (JSC::ShadowChicken::iterate): * interpreter/StackVisitor.cpp: (JSC::StackVisitor::Frame::createArguments): * interpreter/StackVisitor.h: * jit/AssemblyHelpers.cpp: (JSC::AssemblyHelpers::emitDumbVirtualCall): * jit/AssemblyHelpers.h: * jit/CCallHelpers.cpp: (JSC::CCallHelpers::ensureShadowChickenPacket): * jit/CCallHelpers.h: (JSC::CCallHelpers::prepareCallOperation): (JSC::CCallHelpers::setupArguments): * jit/HostCallReturnValue.cpp: (JSC::getHostCallReturnValueWithExecState): * jit/HostCallReturnValue.h: (JSC::initializeHostCallReturnValue): * jit/JIT.cpp: (JSC::JIT::emitEnterOptimizationCheck): (JSC::JIT::compileWithoutLinking): (JSC::JIT::privateCompileExceptionHandlers): * jit/JIT.h: * jit/JITArithmetic.cpp: (JSC::JIT::emit_compareAndJumpSlow): (JSC::JIT::emitMathICFast): (JSC::JIT::emitMathICSlow): * jit/JITArithmetic32_64.cpp: (JSC::JIT::emit_compareAndJumpSlow): * jit/JITCall.cpp: (JSC::JIT::compileSetupFrame): (JSC::JIT::compileCallEval): (JSC::JIT::compileCallEvalSlowCase): (JSC::JIT::compileOpCallSlowCase): * jit/JITCall32_64.cpp: (JSC::JIT::compileCallEval): (JSC::JIT::compileCallEvalSlowCase): (JSC::JIT::compileOpCallSlowCase): * jit/JITExceptions.cpp: (JSC::genericUnwind): * jit/JITExceptions.h: * jit/JITOpcodes.cpp: (JSC::JIT::emitSlow_op_new_object): (JSC::JIT::emitSlow_op_instanceof): (JSC::JIT::emit_op_set_function_name): (JSC::JIT::emit_op_throw): (JSC::JIT::emitSlow_op_jstricteq): (JSC::JIT::emitSlow_op_jnstricteq): (JSC::JIT::emit_op_catch): (JSC::JIT::emit_op_switch_imm): (JSC::JIT::emit_op_switch_char): (JSC::JIT::emit_op_switch_string): (JSC::JIT::emit_op_debug): (JSC::JIT::emitSlow_op_eq): (JSC::JIT::emitSlow_op_neq): (JSC::JIT::emitSlow_op_jeq): (JSC::JIT::emitSlow_op_jneq): (JSC::JIT::emitSlow_op_instanceof_custom): (JSC::JIT::emitSlow_op_loop_hint): (JSC::JIT::emitSlow_op_check_traps): (JSC::JIT::emit_op_new_regexp): (JSC::JIT::emitNewFuncCommon): (JSC::JIT::emitNewFuncExprCommon): (JSC::JIT::emit_op_new_array): (JSC::JIT::emit_op_new_array_with_size): (JSC::JIT::emitSlow_op_has_indexed_property): (JSC::JIT::emit_op_profile_type): * jit/JITOpcodes32_64.cpp: (JSC::JIT::emitSlow_op_new_object): (JSC::JIT::emit_op_catch): (JSC::JIT::emit_op_switch_imm): (JSC::JIT::emit_op_debug): (JSC::JIT::emit_op_profile_type): * jit/JITOperations.cpp: (JSC::newFunctionCommon): (JSC::getByVal): (JSC::tryGetByValOptimize): (JSC::operationNewFunctionCommon): Deleted. * jit/JITOperations.h: * jit/JITOperationsMSVC64.cpp: (JSC::getHostCallReturnValueWithExecState): * jit/JITPropertyAccess.cpp: (JSC::JIT::emitGetByValWithCachedId): (JSC::JIT::emitSlow_op_get_by_val): (JSC::JIT::emitPutByValWithCachedId): (JSC::JIT::emitSlow_op_put_by_val): (JSC::JIT::emit_op_put_getter_by_id): (JSC::JIT::emit_op_put_setter_by_id): (JSC::JIT::emit_op_put_getter_setter_by_id): (JSC::JIT::emit_op_put_getter_by_val): (JSC::JIT::emit_op_put_setter_by_val): (JSC::JIT::emit_op_del_by_id): (JSC::JIT::emit_op_del_by_val): (JSC::JIT::emitSlow_op_try_get_by_id): (JSC::JIT::emitSlow_op_get_by_id_direct): (JSC::JIT::emitSlow_op_get_by_id): (JSC::JIT::emitSlow_op_get_by_id_with_this): (JSC::JIT::emitSlow_op_put_by_id): (JSC::JIT::emitSlow_op_in_by_id): (JSC::JIT::emitSlow_op_get_from_scope): (JSC::JIT::emitSlow_op_put_to_scope): (JSC::JIT::emitWriteBarrier): * jit/PolymorphicCallStubRoutine.cpp: (JSC::PolymorphicCallStubRoutine::PolymorphicCallStubRoutine): * jit/PolymorphicCallStubRoutine.h: * jit/Repatch.cpp: (JSC::forceICFailure): (JSC::tryCacheGetByID): (JSC::repatchGetByID): (JSC::tryCachePutByID): (JSC::repatchPutByID): (JSC::tryCacheInByID): (JSC::repatchInByID): (JSC::tryCacheInstanceOf): (JSC::repatchInstanceOf): (JSC::linkFor): (JSC::linkDirectFor): (JSC::linkSlowFor): (JSC::linkVirtualFor): (JSC::linkPolymorphicCall): * jit/Repatch.h: * jit/SnippetSlowPathCalls.h: * jit/ThunkGenerators.cpp: (JSC::throwExceptionFromCallSlowPathGenerator): (JSC::slowPathFor): (JSC::nativeForGenerator): (JSC::boundThisNoArgsFunctionCallGenerator): * jit/ThunkGenerators.h: * jsc.cpp: (GlobalObject::finishCreation): (GlobalObject::moduleLoaderImportModule): (GlobalObject::moduleLoaderResolve): (GlobalObject::moduleLoaderFetch): (GlobalObject::moduleLoaderCreateImportMetaProperties): (cStringFromViewWithString): (printInternal): (functionPrintStdOut): (functionPrintStdErr): (functionDebug): (functionSleepSeconds): (functionRun): (functionRunString): (functionLoad): (functionLoadString): (functionReadFile): (functionCheckSyntax): (functionSetSamplingFlags): (functionClearSamplingFlags): (functionSetRandomSeed): (functionNeverInlineFunction): (functionNoDFG): (functionNoOSRExitFuzzing): (functionOptimizeNextInvocation): (functionNumberOfDFGCompiles): (functionCallerIsOMGCompiled): (functionDollarEvalScript): (functionDollarAgentStart): (functionDollarAgentReceiveBroadcast): (functionDollarAgentReport): (functionDollarAgentSleep): (functionDollarAgentBroadcast): (functionFlashHeapAccess): (functionJSCOptions): (functionTransferArrayBuffer): (functionCheckModuleSyntax): (functionGenerateHeapSnapshot): (functionSamplingProfilerStackTraces): (functionAsyncTestStart): (functionWebAssemblyMemoryMode): (functionSetUnhandledRejectionCallback): (dumpException): (checkUncaughtException): (checkException): (runWithOptions): (runInteractive): * llint/LLIntExceptions.cpp: (JSC::LLInt::returnToThrow): (JSC::LLInt::callToThrow): * llint/LLIntExceptions.h: * llint/LLIntSlowPaths.cpp: (JSC::LLInt::getNonConstantOperand): (JSC::LLInt::getOperand): (JSC::LLInt::llint_trace_operand): (JSC::LLInt::llint_trace_value): (JSC::LLInt::LLINT_SLOW_PATH_DECL): (JSC::LLInt::traceFunctionPrologue): (JSC::LLInt::jitCompileAndSetHeuristics): (JSC::LLInt::entryOSR): (JSC::LLInt::setupGetByIdPrototypeCache): (JSC::LLInt::getByVal): (JSC::LLInt::handleHostCall): (JSC::LLInt::setUpCall): (JSC::LLInt::genericCall): (JSC::LLInt::varargsSetup): (JSC::LLInt::commonCallEval): (JSC::LLInt::llint_throw_stack_overflow_error): (JSC::LLInt::llint_write_barrier_slow): * llint/LLIntSlowPaths.h: * llint/LowLevelInterpreter.asm: * llint/LowLevelInterpreter.cpp: (JSC::CLoopRegister::operator CallFrame*): (JSC::CLoopRegister::operator ExecState*): Deleted. * parser/ModuleAnalyzer.cpp: (JSC::ModuleAnalyzer::ModuleAnalyzer): * parser/ModuleAnalyzer.h: * parser/ParserError.h: (JSC::ParserError::toErrorObject): * profiler/ProfilerBytecode.cpp: (JSC::Profiler::Bytecode::toJS const): * profiler/ProfilerBytecode.h: * profiler/ProfilerBytecodeSequence.cpp: (JSC::Profiler::BytecodeSequence::addSequenceProperties const): * profiler/ProfilerBytecodeSequence.h: * profiler/ProfilerBytecodes.cpp: (JSC::Profiler::Bytecodes::toJS const): * profiler/ProfilerBytecodes.h: * profiler/ProfilerCompilation.cpp: (JSC::Profiler::Compilation::toJS const): * profiler/ProfilerCompilation.h: * profiler/ProfilerCompiledBytecode.cpp: (JSC::Profiler::CompiledBytecode::toJS const): * profiler/ProfilerCompiledBytecode.h: * profiler/ProfilerDatabase.cpp: (JSC::Profiler::Database::toJS const): (JSC::Profiler::Database::toJSON const): * profiler/ProfilerDatabase.h: * profiler/ProfilerEvent.cpp: (JSC::Profiler::Event::toJS const): * profiler/ProfilerEvent.h: * profiler/ProfilerOSRExit.cpp: (JSC::Profiler::OSRExit::toJS const): * profiler/ProfilerOSRExit.h: * profiler/ProfilerOSRExitSite.cpp: (JSC::Profiler::OSRExitSite::toJS const): * profiler/ProfilerOSRExitSite.h: * profiler/ProfilerOrigin.cpp: (JSC::Profiler::Origin::toJS const): * profiler/ProfilerOrigin.h: * profiler/ProfilerOriginStack.cpp: (JSC::Profiler::OriginStack::toJS const): * profiler/ProfilerOriginStack.h: * profiler/ProfilerProfiledBytecodes.cpp: (JSC::Profiler::ProfiledBytecodes::toJS const): * profiler/ProfilerProfiledBytecodes.h: * profiler/ProfilerUID.cpp: (JSC::Profiler::UID::toJS const): * profiler/ProfilerUID.h: * runtime/AbstractModuleRecord.cpp: (JSC::AbstractModuleRecord::finishCreation): (JSC::AbstractModuleRecord::hostResolveImportedModule): (JSC::AbstractModuleRecord::resolveImport): (JSC::AbstractModuleRecord::resolveExportImpl): (JSC::AbstractModuleRecord::resolveExport): (JSC::getExportedNames): (JSC::AbstractModuleRecord::getModuleNamespace): (JSC::AbstractModuleRecord::link): (JSC::AbstractModuleRecord::evaluate): * runtime/AbstractModuleRecord.h: * runtime/ArgList.h: (JSC::ArgList::ArgList): * runtime/ArrayBufferView.h: * runtime/ArrayConstructor.cpp: (JSC::constructArrayWithSizeQuirk): (JSC::constructWithArrayConstructor): (JSC::callArrayConstructor): (JSC::isArraySlowInline): (JSC::isArraySlow): (JSC::arrayConstructorPrivateFuncIsArraySlow): * runtime/ArrayConstructor.h: (JSC::isArray): * runtime/ArrayPrototype.cpp: (JSC::ArrayPrototype::finishCreation): (JSC::getProperty): (JSC::putLength): (JSC::setLength): (JSC::speciesWatchpointIsValid): (JSC::arrayProtoFuncSpeciesCreate): (JSC::argumentClampedIndexFromStartOrEnd): (JSC::shift): (JSC::unshift): (JSC::fastJoin): (JSC::arrayProtoFuncToString): (JSC::arrayProtoFuncToLocaleString): (JSC::slowJoin): (JSC::arrayProtoFuncJoin): (JSC::arrayProtoFuncPop): (JSC::arrayProtoFuncPush): (JSC::arrayProtoFuncReverse): (JSC::arrayProtoFuncShift): (JSC::arrayProtoFuncSlice): (JSC::arrayProtoFuncSplice): (JSC::arrayProtoFuncUnShift): (JSC::fastIndexOf): (JSC::arrayProtoFuncIndexOf): (JSC::arrayProtoFuncLastIndexOf): (JSC::moveElements): (JSC::concatAppendOne): (JSC::arrayProtoPrivateFuncConcatMemcpy): (JSC::arrayProtoPrivateFuncAppendMemcpy): * runtime/AsyncFunctionConstructor.cpp: (JSC::callAsyncFunctionConstructor): (JSC::constructAsyncFunctionConstructor): * runtime/AsyncGeneratorFunctionConstructor.cpp: (JSC::callAsyncGeneratorFunctionConstructor): (JSC::constructAsyncGeneratorFunctionConstructor): * runtime/AtomicsObject.cpp: (JSC::atomicsFuncAdd): (JSC::atomicsFuncAnd): (JSC::atomicsFuncCompareExchange): (JSC::atomicsFuncExchange): (JSC::atomicsFuncIsLockFree): (JSC::atomicsFuncLoad): (JSC::atomicsFuncOr): (JSC::atomicsFuncStore): (JSC::atomicsFuncSub): (JSC::atomicsFuncWait): (JSC::atomicsFuncWake): (JSC::atomicsFuncXor): (JSC::operationAtomicsAdd): (JSC::operationAtomicsAnd): (JSC::operationAtomicsCompareExchange): (JSC::operationAtomicsExchange): (JSC::operationAtomicsIsLockFree): (JSC::operationAtomicsLoad): (JSC::operationAtomicsOr): (JSC::operationAtomicsStore): (JSC::operationAtomicsSub): (JSC::operationAtomicsXor): * runtime/AtomicsObject.h: * runtime/BigIntConstructor.cpp: (JSC::toBigInt): (JSC::callBigIntConstructor): * runtime/BigIntObject.cpp: (JSC::BigIntObject::toStringName): (JSC::BigIntObject::defaultValue): * runtime/BigIntObject.h: * runtime/BigIntPrototype.cpp: (JSC::bigIntProtoFuncToStringImpl): (JSC::bigIntProtoFuncValueOf): * runtime/BooleanConstructor.cpp: (JSC::callBooleanConstructor): (JSC::constructWithBooleanConstructor): (JSC::constructBooleanFromImmediateBoolean): * runtime/BooleanConstructor.h: * runtime/BooleanPrototype.cpp: (JSC::booleanProtoFuncToString): (JSC::booleanProtoFuncValueOf): * runtime/CallData.cpp: (JSC::call): (JSC::profiledCall): * runtime/CallData.h: * runtime/ClassInfo.h: * runtime/ClonedArguments.cpp: (JSC::ClonedArguments::createEmpty): (JSC::ClonedArguments::createWithInlineFrame): (JSC::ClonedArguments::createWithMachineFrame): (JSC::ClonedArguments::createByCopyingFrom): (JSC::ClonedArguments::getOwnPropertySlot): (JSC::ClonedArguments::getOwnPropertyNames): (JSC::ClonedArguments::put): (JSC::ClonedArguments::deleteProperty): (JSC::ClonedArguments::defineOwnProperty): (JSC::ClonedArguments::materializeSpecials): (JSC::ClonedArguments::materializeSpecialsIfNecessary): * runtime/ClonedArguments.h: * runtime/CommonSlowPaths.cpp: (JSC::throwArityCheckStackOverflowError): (JSC::SLOW_PATH_DECL): (JSC::createInternalFieldObject): (JSC::updateArithProfileForBinaryArithOp): * runtime/CommonSlowPaths.h: (JSC::CommonSlowPaths::codeBlockFromCallFrameCallee): (JSC::CommonSlowPaths::arityCheckFor): (JSC::CommonSlowPaths::opInByVal): (JSC::CommonSlowPaths::tryCachePutToScopeGlobal): (JSC::CommonSlowPaths::tryCacheGetFromScopeGlobal): (JSC::CommonSlowPaths::putDirectWithReify): (JSC::CommonSlowPaths::putDirectAccessorWithReify): * runtime/Completion.cpp: (JSC::checkSyntax): (JSC::checkModuleSyntax): (JSC::evaluate): (JSC::profiledEvaluate): (JSC::evaluateWithScopeExtension): (JSC::rejectPromise): (JSC::loadAndEvaluateModule): (JSC::loadModule): (JSC::linkAndEvaluateModule): (JSC::importModule): * runtime/Completion.h: (JSC::evaluate): (JSC::profiledEvaluate): * runtime/ConsoleClient.cpp: (JSC::ConsoleClient::printConsoleMessageWithArguments): (JSC::ConsoleClient::internalMessageWithTypeAndLevel): (JSC::ConsoleClient::logWithLevel): (JSC::ConsoleClient::clear): (JSC::ConsoleClient::dir): (JSC::ConsoleClient::dirXML): (JSC::ConsoleClient::table): (JSC::ConsoleClient::trace): (JSC::ConsoleClient::assertion): (JSC::ConsoleClient::group): (JSC::ConsoleClient::groupCollapsed): (JSC::ConsoleClient::groupEnd): * runtime/ConsoleClient.h: * runtime/ConsoleObject.cpp: (JSC::valueOrDefaultLabelString): (JSC::valueToStringWithUndefinedOrNullCheck): (JSC::consoleLogWithLevel): (JSC::consoleProtoFuncDebug): (JSC::consoleProtoFuncError): (JSC::consoleProtoFuncLog): (JSC::consoleProtoFuncInfo): (JSC::consoleProtoFuncWarn): (JSC::consoleProtoFuncClear): (JSC::consoleProtoFuncDir): (JSC::consoleProtoFuncDirXML): (JSC::consoleProtoFuncTable): (JSC::consoleProtoFuncTrace): (JSC::consoleProtoFuncAssert): (JSC::consoleProtoFuncCount): (JSC::consoleProtoFuncCountReset): (JSC::consoleProtoFuncProfile): (JSC::consoleProtoFuncProfileEnd): (JSC::consoleProtoFuncTakeHeapSnapshot): (JSC::consoleProtoFuncTime): (JSC::consoleProtoFuncTimeLog): (JSC::consoleProtoFuncTimeEnd): (JSC::consoleProtoFuncTimeStamp): (JSC::consoleProtoFuncGroup): (JSC::consoleProtoFuncGroupCollapsed): (JSC::consoleProtoFuncGroupEnd): (JSC::consoleProtoFuncRecord): (JSC::consoleProtoFuncRecordEnd): (JSC::consoleProtoFuncScreenshot): * runtime/ConstructData.cpp: (JSC::construct): (JSC::profiledConstruct): * runtime/ConstructData.h: (JSC::construct): (JSC::profiledConstruct): * runtime/CustomGetterSetter.cpp: (JSC::callCustomSetter): * runtime/CustomGetterSetter.h: * runtime/DataView.cpp: (JSC::DataView::wrap): * runtime/DataView.h: * runtime/DateConstructor.cpp: (JSC::millisecondsFromComponents): (JSC::constructDate): (JSC::constructWithDateConstructor): (JSC::dateParse): (JSC::dateUTC): * runtime/DateConstructor.h: * runtime/DateInstance.cpp: (JSC::DateInstance::calculateGregorianDateTime const): (JSC::DateInstance::calculateGregorianDateTimeUTC const): * runtime/DateInstance.h: * runtime/DatePrototype.cpp: (JSC::formatLocaleDate): (JSC::formateDateInstance): (JSC::fillStructuresUsingTimeArgs): (JSC::fillStructuresUsingDateArgs): (JSC::dateProtoFuncToString): (JSC::dateProtoFuncToUTCString): (JSC::dateProtoFuncToISOString): (JSC::dateProtoFuncToDateString): (JSC::dateProtoFuncToTimeString): (JSC::dateProtoFuncToLocaleString): (JSC::dateProtoFuncToLocaleDateString): (JSC::dateProtoFuncToLocaleTimeString): (JSC::dateProtoFuncToPrimitiveSymbol): (JSC::dateProtoFuncGetTime): (JSC::dateProtoFuncGetFullYear): (JSC::dateProtoFuncGetUTCFullYear): (JSC::dateProtoFuncGetMonth): (JSC::dateProtoFuncGetUTCMonth): (JSC::dateProtoFuncGetDate): (JSC::dateProtoFuncGetUTCDate): (JSC::dateProtoFuncGetDay): (JSC::dateProtoFuncGetUTCDay): (JSC::dateProtoFuncGetHours): (JSC::dateProtoFuncGetUTCHours): (JSC::dateProtoFuncGetMinutes): (JSC::dateProtoFuncGetUTCMinutes): (JSC::dateProtoFuncGetSeconds): (JSC::dateProtoFuncGetUTCSeconds): (JSC::dateProtoFuncGetMilliSeconds): (JSC::dateProtoFuncGetUTCMilliseconds): (JSC::dateProtoFuncGetTimezoneOffset): (JSC::dateProtoFuncSetTime): (JSC::setNewValueFromTimeArgs): (JSC::setNewValueFromDateArgs): (JSC::dateProtoFuncSetMilliSeconds): (JSC::dateProtoFuncSetUTCMilliseconds): (JSC::dateProtoFuncSetSeconds): (JSC::dateProtoFuncSetUTCSeconds): (JSC::dateProtoFuncSetMinutes): (JSC::dateProtoFuncSetUTCMinutes): (JSC::dateProtoFuncSetHours): (JSC::dateProtoFuncSetUTCHours): (JSC::dateProtoFuncSetDate): (JSC::dateProtoFuncSetUTCDate): (JSC::dateProtoFuncSetMonth): (JSC::dateProtoFuncSetUTCMonth): (JSC::dateProtoFuncSetFullYear): (JSC::dateProtoFuncSetUTCFullYear): (JSC::dateProtoFuncSetYear): (JSC::dateProtoFuncGetYear): (JSC::dateProtoFuncToJSON): * runtime/DirectArguments.cpp: (JSC::DirectArguments::createByCopying): (JSC::DirectArguments::copyToArguments): * runtime/DirectArguments.h: * runtime/DirectEvalExecutable.cpp: (JSC::DirectEvalExecutable::create): (JSC::DirectEvalExecutable::DirectEvalExecutable): * runtime/DirectEvalExecutable.h: * runtime/Error.cpp: (JSC::createError): (JSC::createEvalError): (JSC::createRangeError): (JSC::createReferenceError): (JSC::createSyntaxError): (JSC::createTypeError): (JSC::createNotEnoughArgumentsError): (JSC::createURIError): (JSC::createGetterTypeError): (JSC::getStackTrace): (JSC::getBytecodeOffset): (JSC::addErrorInfo): (JSC::throwConstructorCannotBeCalledAsFunctionTypeError): (JSC::throwTypeError): (JSC::throwSyntaxError): (JSC::throwGetterTypeError): (JSC::throwDOMAttributeGetterTypeError): (JSC::createOutOfMemoryError): * runtime/Error.h: (JSC::throwRangeError): (JSC::throwVMError): (JSC::throwVMTypeError): (JSC::throwVMRangeError): (JSC::throwVMGetterTypeError): (JSC::throwVMDOMAttributeGetterTypeError): * runtime/ErrorConstructor.cpp: (JSC::constructErrorConstructor): (JSC::callErrorConstructor): (JSC::ErrorConstructor::put): (JSC::ErrorConstructor::deleteProperty): * runtime/ErrorConstructor.h: * runtime/ErrorInstance.cpp: (JSC::ErrorInstance::create): (JSC::appendSourceToError): (JSC::ErrorInstance::finishCreation): (JSC::ErrorInstance::sanitizedToString): (JSC::ErrorInstance::getOwnPropertySlot): (JSC::ErrorInstance::getOwnNonIndexPropertyNames): (JSC::ErrorInstance::getStructurePropertyNames): (JSC::ErrorInstance::defineOwnProperty): (JSC::ErrorInstance::put): (JSC::ErrorInstance::deleteProperty): * runtime/ErrorInstance.h: (JSC::ErrorInstance::create): * runtime/ErrorPrototype.cpp: (JSC::errorProtoFuncToString): * runtime/EvalExecutable.cpp: (JSC::EvalExecutable::EvalExecutable): * runtime/EvalExecutable.h: * runtime/ExceptionFuzz.cpp: (JSC::doExceptionFuzzing): * runtime/ExceptionFuzz.h: (JSC::doExceptionFuzzingIfEnabled): * runtime/ExceptionHelpers.cpp: (JSC::TerminatedExecutionError::defaultValue): (JSC::createStackOverflowError): (JSC::createUndefinedVariableError): (JSC::errorDescriptionForValue): (JSC::createError): (JSC::createInvalidFunctionApplyParameterError): (JSC::createInvalidInParameterError): (JSC::createInvalidInstanceofParameterErrorNotFunction): (JSC::createInvalidInstanceofParameterErrorHasInstanceValueNotFunction): (JSC::createNotAConstructorError): (JSC::createNotAFunctionError): (JSC::createNotAnObjectError): (JSC::createErrorForInvalidGlobalAssignment): (JSC::createTDZError): (JSC::throwOutOfMemoryError): (JSC::throwStackOverflowError): (JSC::throwTerminatedExecutionException): * runtime/ExceptionHelpers.h: * runtime/FunctionConstructor.cpp: (JSC::constructWithFunctionConstructor): (JSC::callFunctionConstructor): (JSC::constructFunction): (JSC::constructFunctionSkippingEvalEnabledCheck): * runtime/FunctionConstructor.h: * runtime/FunctionExecutable.cpp: (JSC::FunctionExecutable::fromGlobalCode): * runtime/FunctionExecutable.h: * runtime/FunctionPrototype.cpp: (JSC::functionProtoFuncToString): * runtime/FunctionRareData.h: * runtime/GeneratorFunctionConstructor.cpp: (JSC::callGeneratorFunctionConstructor): (JSC::constructGeneratorFunctionConstructor): * runtime/GenericArguments.h: * runtime/GenericArgumentsInlines.h: (JSC::GenericArguments<Type>::getOwnPropertySlot): (JSC::GenericArguments<Type>::getOwnPropertySlotByIndex): (JSC::GenericArguments<Type>::getOwnPropertyNames): (JSC::GenericArguments<Type>::put): (JSC::GenericArguments<Type>::putByIndex): (JSC::GenericArguments<Type>::deleteProperty): (JSC::GenericArguments<Type>::deletePropertyByIndex): (JSC::GenericArguments<Type>::defineOwnProperty): (JSC::GenericArguments<Type>::copyToArguments): * runtime/GenericTypedArrayView.h: * runtime/GenericTypedArrayViewInlines.h: (JSC::GenericTypedArrayView<Adaptor>::wrap): * runtime/GetterSetter.cpp: (JSC::callGetter): (JSC::callSetter): * runtime/GetterSetter.h: * runtime/HashMapImpl.h: (JSC::HashMapBuffer::create): (JSC::areKeysEqual): (JSC::jsMapHash): (JSC::HashMapImpl::finishCreation): (JSC::HashMapImpl::findBucket): (JSC::HashMapImpl::get): (JSC::HashMapImpl::has): (JSC::HashMapImpl::add): (JSC::HashMapImpl::addNormalized): (JSC::HashMapImpl::remove): (JSC::HashMapImpl::clear): (JSC::HashMapImpl::setUpHeadAndTail): (JSC::HashMapImpl::addNormalizedNonExistingForCloning): (JSC::HashMapImpl::addNormalizedInternal): (JSC::HashMapImpl::findBucketAlreadyHashedAndNormalized): (JSC::HashMapImpl::rehash): (JSC::HashMapImpl::makeAndSetNewBuffer): * runtime/Identifier.h: * runtime/IndirectEvalExecutable.cpp: (JSC::IndirectEvalExecutable::create): (JSC::IndirectEvalExecutable::IndirectEvalExecutable): * runtime/IndirectEvalExecutable.h: * runtime/InspectorInstrumentationObject.cpp: (JSC::inspectorInstrumentationObjectLog): * runtime/InternalFunction.cpp: (JSC::InternalFunction::InternalFunction): (JSC::InternalFunction::createSubclassStructureSlow): * runtime/InternalFunction.h: (JSC::InternalFunction::createSubclassStructure): * runtime/IntlCollator.cpp: (JSC::IntlCollator::initializeCollator): (JSC::IntlCollator::createCollator): (JSC::IntlCollator::compareStrings): (JSC::IntlCollator::resolvedOptions): * runtime/IntlCollator.h: * runtime/IntlCollatorConstructor.cpp: (JSC::constructIntlCollator): (JSC::callIntlCollator): (JSC::IntlCollatorConstructorFuncSupportedLocalesOf): * runtime/IntlCollatorPrototype.cpp: (JSC::IntlCollatorFuncCompare): (JSC::IntlCollatorPrototypeGetterCompare): (JSC::IntlCollatorPrototypeFuncResolvedOptions): * runtime/IntlDateTimeFormat.cpp: (JSC::IntlDTFInternal::toDateTimeOptionsAnyDate): (JSC::IntlDateTimeFormat::initializeDateTimeFormat): (JSC::IntlDateTimeFormat::resolvedOptions): (JSC::IntlDateTimeFormat::format): (JSC::IntlDateTimeFormat::formatToParts): * runtime/IntlDateTimeFormat.h: * runtime/IntlDateTimeFormatConstructor.cpp: (JSC::constructIntlDateTimeFormat): (JSC::callIntlDateTimeFormat): (JSC::IntlDateTimeFormatConstructorFuncSupportedLocalesOf): * runtime/IntlDateTimeFormatPrototype.cpp: (JSC::IntlDateTimeFormatFuncFormatDateTime): (JSC::IntlDateTimeFormatPrototypeGetterFormat): (JSC::IntlDateTimeFormatPrototypeFuncFormatToParts): (JSC::IntlDateTimeFormatPrototypeFuncResolvedOptions): * runtime/IntlNumberFormat.cpp: (JSC::IntlNumberFormat::initializeNumberFormat): (JSC::IntlNumberFormat::formatNumber): (JSC::IntlNumberFormat::resolvedOptions): (JSC::IntlNumberFormat::formatToParts): * runtime/IntlNumberFormat.h: * runtime/IntlNumberFormatConstructor.cpp: (JSC::constructIntlNumberFormat): (JSC::callIntlNumberFormat): (JSC::IntlNumberFormatConstructorFuncSupportedLocalesOf): * runtime/IntlNumberFormatPrototype.cpp: (JSC::IntlNumberFormatFuncFormatNumber): (JSC::IntlNumberFormatPrototypeGetterFormat): (JSC::IntlNumberFormatPrototypeFuncFormatToParts): (JSC::IntlNumberFormatPrototypeFuncResolvedOptions): * runtime/IntlObject.cpp: (JSC::intlBooleanOption): (JSC::intlStringOption): (JSC::intlNumberOption): (JSC::intlDefaultNumberOption): (JSC::canonicalizeLocaleList): (JSC::defaultLocale): (JSC::lookupMatcher): (JSC::bestFitMatcher): (JSC::resolveLocale): (JSC::lookupSupportedLocales): (JSC::bestFitSupportedLocales): (JSC::supportedLocales): (JSC::intlObjectFuncGetCanonicalLocales): * runtime/IntlObject.h: * runtime/IntlObjectInlines.h: (JSC::constructIntlInstanceWithWorkaroundForLegacyIntlConstructor): * runtime/IntlPluralRules.cpp: (JSC::IntlPluralRules::initializePluralRules): (JSC::IntlPluralRules::resolvedOptions): (JSC::IntlPluralRules::select): * runtime/IntlPluralRules.h: * runtime/IntlPluralRulesConstructor.cpp: (JSC::constructIntlPluralRules): (JSC::callIntlPluralRules): (JSC::IntlPluralRulesConstructorFuncSupportedLocalesOf): * runtime/IntlPluralRulesPrototype.cpp: (JSC::IntlPluralRulesPrototypeFuncSelect): (JSC::IntlPluralRulesPrototypeFuncResolvedOptions): * runtime/IteratorOperations.cpp: (JSC::iteratorNext): (JSC::iteratorValue): (JSC::iteratorComplete): (JSC::iteratorStep): (JSC::iteratorClose): (JSC::createIteratorResultObject): (JSC::hasIteratorMethod): (JSC::iteratorMethod): (JSC::iteratorForIterable): * runtime/IteratorOperations.h: (JSC::forEachInIterable): * runtime/JSArray.cpp: (JSC::JSArray::setLengthWritable): (JSC::JSArray::defineOwnProperty): (JSC::JSArray::getOwnPropertySlot): (JSC::JSArray::put): (JSC::JSArray::deleteProperty): (JSC::JSArray::getOwnNonIndexPropertyNames): (JSC::JSArray::setLengthWithArrayStorage): (JSC::JSArray::appendMemcpy): (JSC::JSArray::setLength): (JSC::JSArray::pop): (JSC::JSArray::push): (JSC::JSArray::fastSlice): (JSC::JSArray::shiftCountWithAnyIndexingType): (JSC::JSArray::unshiftCountWithArrayStorage): (JSC::JSArray::unshiftCountWithAnyIndexingType): (JSC::JSArray::fillArgList): (JSC::JSArray::copyToArguments): (JSC::constructArray): (JSC::constructArrayNegativeIndexed): * runtime/JSArray.h: (JSC::JSArray::shiftCountForShift): (JSC::JSArray::shiftCountForSplice): (JSC::JSArray::shiftCount): (JSC::JSArray::unshiftCountForShift): (JSC::JSArray::unshiftCountForSplice): (JSC::JSArray::unshiftCount): * runtime/JSArrayBufferConstructor.cpp: (JSC::JSGenericArrayBufferConstructor<sharingMode>::constructArrayBuffer): (JSC::callArrayBuffer): * runtime/JSArrayBufferPrototype.cpp: (JSC::arrayBufferProtoFuncSlice): (JSC::arrayBufferProtoGetterFuncByteLength): (JSC::sharedArrayBufferProtoGetterFuncByteLength): * runtime/JSArrayBufferView.cpp: (JSC::JSArrayBufferView::toStringName): (JSC::JSArrayBufferView::put): (JSC::JSArrayBufferView::unsharedJSBuffer): (JSC::JSArrayBufferView::possiblySharedJSBuffer): (JSC::JSArrayBufferView::slowDownAndWasteMemory): * runtime/JSArrayBufferView.h: * runtime/JSArrayInlines.h: (JSC::toLength): (JSC::JSArray::pushInline): * runtime/JSBigInt.cpp: (JSC::JSBigInt::tryCreateWithLength): (JSC::JSBigInt::toPrimitive const): (JSC::JSBigInt::parseInt): (JSC::JSBigInt::stringToBigInt): (JSC::JSBigInt::toString): (JSC::JSBigInt::exponentiate): (JSC::JSBigInt::multiply): (JSC::JSBigInt::divide): (JSC::JSBigInt::remainder): (JSC::JSBigInt::add): (JSC::JSBigInt::sub): (JSC::JSBigInt::bitwiseAnd): (JSC::JSBigInt::bitwiseOr): (JSC::JSBigInt::bitwiseXor): (JSC::JSBigInt::leftShift): (JSC::JSBigInt::signedRightShift): (JSC::JSBigInt::bitwiseNot): (JSC::JSBigInt::absoluteAdd): (JSC::JSBigInt::absoluteDivWithBigIntDivisor): (JSC::JSBigInt::absoluteLeftShiftAlwaysCopy): (JSC::JSBigInt::absoluteAddOne): (JSC::JSBigInt::absoluteSubOne): (JSC::JSBigInt::leftShiftByAbsolute): (JSC::JSBigInt::rightShiftByAbsolute): (JSC::JSBigInt::toStringBasePowerOfTwo): (JSC::JSBigInt::toStringGeneric): (JSC::JSBigInt::allocateFor): (JSC::JSBigInt::toNumber const): (JSC::JSBigInt::getPrimitiveNumber const): (JSC::JSBigInt::toObject const): * runtime/JSBigInt.h: * runtime/JSBoundFunction.cpp: (JSC::boundThisNoArgsFunctionCall): (JSC::boundFunctionCall): (JSC::boundThisNoArgsFunctionConstruct): (JSC::boundFunctionConstruct): (JSC::hasInstanceBoundFunction): (JSC::getBoundFunctionStructure): (JSC::JSBoundFunction::create): (JSC::JSBoundFunction::customHasInstance): (JSC::JSBoundFunction::boundArgsCopy): * runtime/JSBoundFunction.h: * runtime/JSCJSValue.cpp: (JSC::JSValue::toInteger const): (JSC::JSValue::toIntegerPreserveNaN const): (JSC::JSValue::toLength const): (JSC::JSValue::toNumberSlowCase const): (JSC::JSValue::toObjectSlowCase const): (JSC::JSValue::toThisSlowCase const): (JSC::JSValue::synthesizePrototype const): (JSC::JSValue::putToPrimitive): (JSC::JSValue::putToPrimitiveByIndex): (JSC::JSValue::toStringSlowCase const): (JSC::JSValue::toWTFStringSlowCase const): * runtime/JSCJSValue.h: (JSC::JSValue::toFloat const): * runtime/JSCJSValueInlines.h: (JSC::JSValue::toInt32 const): (JSC::JSValue::toUInt32 const): (JSC::JSValue::toIndex const): (JSC::JSValue::getString const): (JSC::Unknown>::getString const): (JSC::JSValue::toPropertyKey const): (JSC::JSValue::toPrimitive const): (JSC::toPreferredPrimitiveType): (JSC::JSValue::getPrimitiveNumber): (JSC::JSValue::toNumber const): (JSC::JSValue::toNumeric const): (JSC::JSValue::toBigIntOrInt32 const): (JSC::JSValue::toObject const): (JSC::JSValue::toThis const): (JSC::JSValue::get const): (JSC::JSValue::getPropertySlot const): (JSC::JSValue::getOwnPropertySlot const): (JSC::JSValue::put): (JSC::JSValue::putInline): (JSC::JSValue::putByIndex): (JSC::JSValue::equal): (JSC::JSValue::equalSlowCaseInline): (JSC::JSValue::strictEqualSlowCaseInline): (JSC::JSValue::strictEqual): (JSC::JSValue::requireObjectCoercible const): (JSC::sameValue): * runtime/JSCell.cpp: (JSC::JSCell::getString const): (JSC::JSCell::put): (JSC::JSCell::putByIndex): (JSC::JSCell::deleteProperty): (JSC::JSCell::deletePropertyByIndex): (JSC::JSCell::toThis): (JSC::JSCell::toPrimitive const): (JSC::JSCell::getPrimitiveNumber const): (JSC::JSCell::toNumber const): (JSC::JSCell::toObjectSlow const): (JSC::JSCell::defaultValue): (JSC::JSCell::getOwnPropertySlot): (JSC::JSCell::getOwnPropertySlotByIndex): (JSC::JSCell::doPutPropertySecurityCheck): (JSC::JSCell::getOwnPropertyNames): (JSC::JSCell::getOwnNonIndexPropertyNames): (JSC::JSCell::toStringName): (JSC::JSCell::getPropertyNames): (JSC::JSCell::customHasInstance): (JSC::JSCell::defineOwnProperty): (JSC::JSCell::getEnumerableLength): (JSC::JSCell::getStructurePropertyNames): (JSC::JSCell::getGenericPropertyNames): (JSC::JSCell::preventExtensions): (JSC::JSCell::isExtensible): (JSC::JSCell::setPrototype): (JSC::JSCell::getPrototype): * runtime/JSCell.h: * runtime/JSCellInlines.h: (JSC::CallFrame::vm const): (JSC::JSCell::toBoolean const): (JSC::JSCell::toObject const): (JSC::JSCell::putInline): (JSC::ExecState::vm const): Deleted. * runtime/JSCustomGetterSetterFunction.cpp: (JSC::JSCustomGetterSetterFunction::customGetterSetterFunctionCall): * runtime/JSDataView.cpp: (JSC::JSDataView::create): (JSC::JSDataView::createUninitialized): (JSC::JSDataView::set): (JSC::JSDataView::setIndex): (JSC::JSDataView::getOwnPropertySlot): (JSC::JSDataView::put): (JSC::JSDataView::defineOwnProperty): (JSC::JSDataView::deleteProperty): (JSC::JSDataView::getOwnNonIndexPropertyNames): * runtime/JSDataView.h: * runtime/JSDataViewPrototype.cpp: (JSC::getData): (JSC::setData): (JSC::dataViewProtoGetterBuffer): (JSC::dataViewProtoGetterByteLength): (JSC::dataViewProtoGetterByteOffset): * runtime/JSDateMath.cpp: (JSC::parseDate): * runtime/JSDateMath.h: * runtime/JSFixedArray.cpp: (JSC::JSFixedArray::copyToArguments): * runtime/JSFixedArray.h: * runtime/JSFunction.cpp: (JSC::callHostFunctionAsConstructor): (JSC::JSFunction::prototypeForConstruction): (JSC::JSFunction::allocateAndInitializeRareData): (JSC::JSFunction::initializeRareData): (JSC::retrieveArguments): (JSC::JSFunction::argumentsGetter): (JSC::retrieveCallerFunction): (JSC::JSFunction::callerGetter): (JSC::JSFunction::getOwnPropertySlot): (JSC::JSFunction::getOwnNonIndexPropertyNames): (JSC::JSFunction::put): (JSC::JSFunction::deleteProperty): (JSC::JSFunction::defineOwnProperty): (JSC::JSFunction::setFunctionName): (JSC::JSFunction::reifyName): (JSC::JSFunction::reifyLazyPropertyIfNeeded): (JSC::JSFunction::reifyLazyPropertyForHostOrBuiltinIfNeeded): (JSC::JSFunction::reifyLazyLengthIfNeeded): (JSC::JSFunction::reifyLazyNameIfNeeded): (JSC::JSFunction::reifyLazyBoundNameIfNeeded): * runtime/JSFunction.h: * runtime/JSFunctionInlines.h: (JSC::JSFunction::ensureRareDataAndAllocationProfile): * runtime/JSGenericTypedArrayView.h: * runtime/JSGenericTypedArrayViewConstructorInlines.h: (JSC::constructGenericTypedArrayViewFromIterator): (JSC::constructGenericTypedArrayViewWithArguments): (JSC::constructGenericTypedArrayView): (JSC::callGenericTypedArrayView): * runtime/JSGenericTypedArrayViewInlines.h: (JSC::JSGenericTypedArrayView<Adaptor>::create): (JSC::JSGenericTypedArrayView<Adaptor>::createWithFastVector): (JSC::JSGenericTypedArrayView<Adaptor>::createUninitialized): (JSC::JSGenericTypedArrayView<Adaptor>::validateRange): (JSC::JSGenericTypedArrayView<Adaptor>::setWithSpecificType): (JSC::JSGenericTypedArrayView<Adaptor>::set): (JSC::JSGenericTypedArrayView<Adaptor>::throwNeuteredTypedArrayTypeError): (JSC::JSGenericTypedArrayView<Adaptor>::getOwnPropertySlot): (JSC::JSGenericTypedArrayView<Adaptor>::put): (JSC::JSGenericTypedArrayView<Adaptor>::defineOwnProperty): (JSC::JSGenericTypedArrayView<Adaptor>::deleteProperty): (JSC::JSGenericTypedArrayView<Adaptor>::getOwnPropertySlotByIndex): (JSC::JSGenericTypedArrayView<Adaptor>::putByIndex): (JSC::JSGenericTypedArrayView<Adaptor>::deletePropertyByIndex): (JSC::JSGenericTypedArrayView<Adaptor>::getOwnPropertyNames): * runtime/JSGenericTypedArrayViewPrototypeFunctions.h: (JSC::speciesConstruct): (JSC::argumentClampedIndexFromStartOrEnd): (JSC::genericTypedArrayViewProtoFuncSet): (JSC::genericTypedArrayViewProtoFuncCopyWithin): (JSC::genericTypedArrayViewProtoFuncIncludes): (JSC::genericTypedArrayViewProtoFuncIndexOf): (JSC::genericTypedArrayViewProtoFuncJoin): (JSC::genericTypedArrayViewProtoFuncLastIndexOf): (JSC::genericTypedArrayViewProtoGetterFuncBuffer): (JSC::genericTypedArrayViewProtoGetterFuncLength): (JSC::genericTypedArrayViewProtoGetterFuncByteLength): (JSC::genericTypedArrayViewProtoGetterFuncByteOffset): (JSC::genericTypedArrayViewProtoFuncReverse): (JSC::genericTypedArrayViewPrivateFuncSort): (JSC::genericTypedArrayViewProtoFuncSlice): (JSC::genericTypedArrayViewPrivateFuncSubarrayCreate): * runtime/JSGlobalLexicalEnvironment.cpp: (JSC::JSGlobalLexicalEnvironment::getOwnPropertySlot): (JSC::JSGlobalLexicalEnvironment::put): * runtime/JSGlobalLexicalEnvironment.h: * runtime/JSGlobalObject.cpp: (JSC::createConsoleProperty): (JSC::makeBoundFunction): (JSC::hasOwnLengthProperty): (JSC::getGetterById): (JSC::JSGlobalObject::init): (JSC::JSGlobalObject::put): (JSC::JSGlobalObject::defineOwnProperty): (JSC::JSGlobalObject::addFunction): (JSC::JSGlobalObject::visitChildren): (JSC::JSGlobalObject::deprecatedCallFrameForDebugger): (JSC::JSGlobalObject::exposeDollarVM): (JSC::JSGlobalObject::getOwnPropertySlot): (JSC::JSGlobalObject::tryInstallArraySpeciesWatchpoint): (JSC::JSGlobalObject::defaultCollator): (JSC::JSGlobalObject::globalExec): Deleted. * runtime/JSGlobalObject.h: (JSC::JSGlobalObject::addVar): (JSC::JSGlobalObject::regExpConstructor const): (JSC::JSGlobalObject::functionConstructor const): (JSC::JSGlobalObject::arrayStructureForProfileDuringAllocation const): (JSC::JSGlobalObject::supportsRichSourceInfo): (JSC::JSGlobalObject::globalObjectAtDebuggerEntry const): (JSC::JSGlobalObject::setGlobalObjectAtDebuggerEntry): (JSC::constructEmptyArray): (JSC::constructArray): (JSC::constructArrayNegativeIndexed): (JSC::JSGlobalObject::callFrameAtDebuggerEntry const): Deleted. (JSC::JSGlobalObject::setCallFrameAtDebuggerEntry): Deleted. (JSC::ExecState::globalThisValue const): Deleted. * runtime/JSGlobalObjectFunctions.cpp: (JSC::encode): (JSC::decode): (JSC::globalFuncEval): (JSC::globalFuncParseInt): (JSC::globalFuncParseFloat): (JSC::globalFuncDecodeURI): (JSC::globalFuncDecodeURIComponent): (JSC::globalFuncEncodeURI): (JSC::globalFuncEncodeURIComponent): (JSC::globalFuncEscape): (JSC::globalFuncUnescape): (JSC::globalFuncThrowTypeError): (JSC::globalFuncThrowTypeErrorArgumentsCalleeAndCaller): (JSC::globalFuncMakeTypeError): (JSC::globalFuncProtoGetter): (JSC::globalFuncProtoSetter): (JSC::globalFuncHostPromiseRejectionTracker): (JSC::globalFuncBuiltinLog): (JSC::globalFuncImportModule): (JSC::globalFuncPropertyIsEnumerable): (JSC::globalFuncOwnKeys): (JSC::globalFuncDateTimeFormat): * runtime/JSGlobalObjectFunctions.h: * runtime/JSGlobalObjectInlines.h: (JSC::JSGlobalObject::arrayStructureForIndexingTypeDuringAllocation const): (JSC::getVM): * runtime/JSImmutableButterfly.cpp: (JSC::JSImmutableButterfly::copyToArguments): * runtime/JSImmutableButterfly.h: * runtime/JSInternalPromise.cpp: (JSC::JSInternalPromise::then): * runtime/JSInternalPromise.h: * runtime/JSInternalPromiseDeferred.cpp: (JSC::JSInternalPromiseDeferred::tryCreate): (JSC::JSInternalPromiseDeferred::resolve): (JSC::JSInternalPromiseDeferred::reject): * runtime/JSInternalPromiseDeferred.h: * runtime/JSLexicalEnvironment.cpp: (JSC::JSLexicalEnvironment::getOwnNonIndexPropertyNames): (JSC::JSLexicalEnvironment::getOwnPropertySlot): (JSC::JSLexicalEnvironment::put): (JSC::JSLexicalEnvironment::deleteProperty): * runtime/JSLexicalEnvironment.h: * runtime/JSLock.cpp: (JSC::JSLockHolder::JSLockHolder): (JSC::JSLock::lock): (JSC::JSLock::unlock): (JSC::JSLock::DropAllLocks::DropAllLocks): * runtime/JSLock.h: * runtime/JSMap.cpp: (JSC::JSMap::toStringName): (JSC::JSMap::clone): * runtime/JSMap.h: * runtime/JSMapIterator.cpp: (JSC::JSMapIterator::createPair): * runtime/JSMapIterator.h: * runtime/JSMicrotask.cpp: (JSC::JSMicrotask::run): * runtime/JSModuleEnvironment.cpp: (JSC::JSModuleEnvironment::getOwnPropertySlot): (JSC::JSModuleEnvironment::getOwnNonIndexPropertyNames): (JSC::JSModuleEnvironment::put): (JSC::JSModuleEnvironment::deleteProperty): * runtime/JSModuleEnvironment.h: * runtime/JSModuleLoader.cpp: (JSC::JSModuleLoader::finishCreation): (JSC::printableModuleKey): (JSC::JSModuleLoader::dependencyKeysIfEvaluated): (JSC::JSModuleLoader::provideFetch): (JSC::JSModuleLoader::loadAndEvaluateModule): (JSC::JSModuleLoader::loadModule): (JSC::JSModuleLoader::linkAndEvaluateModule): (JSC::JSModuleLoader::requestImportModule): (JSC::JSModuleLoader::importModule): (JSC::JSModuleLoader::resolveSync): (JSC::JSModuleLoader::resolve): (JSC::JSModuleLoader::fetch): (JSC::JSModuleLoader::createImportMetaProperties): (JSC::JSModuleLoader::evaluate): (JSC::JSModuleLoader::evaluateNonVirtual): (JSC::JSModuleLoader::getModuleNamespaceObject): (JSC::moduleLoaderParseModule): (JSC::moduleLoaderRequestedModules): (JSC::moduleLoaderModuleDeclarationInstantiation): (JSC::moduleLoaderResolve): (JSC::moduleLoaderResolveSync): (JSC::moduleLoaderFetch): (JSC::moduleLoaderGetModuleNamespaceObject): (JSC::moduleLoaderEvaluate): * runtime/JSModuleLoader.h: * runtime/JSModuleNamespaceObject.cpp: (JSC::JSModuleNamespaceObject::finishCreation): (JSC::JSModuleNamespaceObject::getOwnPropertySlotCommon): (JSC::JSModuleNamespaceObject::getOwnPropertySlot): (JSC::JSModuleNamespaceObject::getOwnPropertySlotByIndex): (JSC::JSModuleNamespaceObject::put): (JSC::JSModuleNamespaceObject::putByIndex): (JSC::JSModuleNamespaceObject::deleteProperty): (JSC::JSModuleNamespaceObject::getOwnPropertyNames): (JSC::JSModuleNamespaceObject::defineOwnProperty): * runtime/JSModuleNamespaceObject.h: * runtime/JSModuleRecord.cpp: (JSC::JSModuleRecord::create): (JSC::JSModuleRecord::finishCreation): (JSC::JSModuleRecord::link): (JSC::JSModuleRecord::instantiateDeclarations): (JSC::JSModuleRecord::evaluate): * runtime/JSModuleRecord.h: * runtime/JSONObject.cpp: (JSC::unwrapBoxedPrimitive): (JSC::gap): (JSC::PropertyNameForFunctionCall::value const): (JSC::Stringifier::Stringifier): (JSC::Stringifier::stringify): (JSC::Stringifier::toJSON): (JSC::Stringifier::toJSONImpl): (JSC::Stringifier::appendStringifiedValue): (JSC::Stringifier::Holder::Holder): (JSC::Stringifier::Holder::appendNextProperty): (JSC::Walker::Walker): (JSC::Walker::callReviver): (JSC::Walker::walk): (JSC::JSONProtoFuncParse): (JSC::JSONProtoFuncStringify): (JSC::JSONParse): (JSC::JSONStringify): * runtime/JSONObject.h: * runtime/JSObject.cpp: (JSC::getClassPropertyNames): (JSC::JSObject::toStringName): (JSC::JSObject::calculatedClassName): (JSC::JSObject::getOwnPropertySlotByIndex): (JSC::ordinarySetSlow): (JSC::JSObject::put): (JSC::JSObject::putInlineSlow): (JSC::JSObject::putByIndex): (JSC::JSObject::setPrototypeWithCycleCheck): (JSC::JSObject::setPrototype): (JSC::JSObject::getPrototype): (JSC::JSObject::putGetter): (JSC::JSObject::putSetter): (JSC::JSObject::putDirectAccessor): (JSC::JSObject::hasProperty const): (JSC::JSObject::hasPropertyGeneric const): (JSC::JSObject::deleteProperty): (JSC::JSObject::deletePropertyByIndex): (JSC::callToPrimitiveFunction): (JSC::JSObject::ordinaryToPrimitive const): (JSC::JSObject::defaultValue): (JSC::JSObject::toPrimitive const): (JSC::JSObject::getPrimitiveNumber const): (JSC::JSObject::hasInstance): (JSC::JSObject::defaultHasInstance): (JSC::objectPrivateFuncInstanceOf): (JSC::JSObject::getPropertyNames): (JSC::JSObject::getOwnPropertyNames): (JSC::JSObject::getOwnNonIndexPropertyNames): (JSC::JSObject::toNumber const): (JSC::JSObject::toString const): (JSC::JSObject::toThis): (JSC::JSObject::preventExtensions): (JSC::JSObject::isExtensible): (JSC::JSObject::reifyAllStaticProperties): (JSC::putIndexedDescriptor): (JSC::JSObject::defineOwnIndexedProperty): (JSC::JSObject::attemptToInterceptPutByIndexOnHoleForPrototype): (JSC::JSObject::attemptToInterceptPutByIndexOnHole): (JSC::JSObject::putByIndexBeyondVectorLengthWithoutAttributes): (JSC::JSObject::putByIndexBeyondVectorLengthWithArrayStorage): (JSC::JSObject::putByIndexBeyondVectorLength): (JSC::JSObject::putDirectIndexBeyondVectorLengthWithArrayStorage): (JSC::JSObject::putDirectIndexSlowOrBeyondVectorLength): (JSC::getCustomGetterSetterFunctionForGetterSetter): (JSC::JSObject::getOwnPropertyDescriptor): (JSC::putDescriptor): (JSC::JSObject::putDirectMayBeIndex): (JSC::validateAndApplyPropertyDescriptor): (JSC::JSObject::defineOwnNonIndexProperty): (JSC::JSObject::defineOwnProperty): (JSC::JSObject::getEnumerableLength): (JSC::JSObject::getStructurePropertyNames): (JSC::JSObject::getGenericPropertyNames): (JSC::JSObject::getMethod): * runtime/JSObject.h: (JSC::JSObject::putByIndexInline): (JSC::JSObject::putDirectIndex): (JSC::JSObject::getDirectIndex): (JSC::JSObject::getIndex const): (JSC::JSObject::createRawObject): (JSC::JSFinalObject::create): (JSC::JSObject::getPrototype): (JSC::JSObject::getOwnPropertySlot): (JSC::JSObject::doPutPropertySecurityCheck): (JSC::JSObject::getPropertySlot): (JSC::JSObject::get const): * runtime/JSObjectInlines.h: (JSC::createListFromArrayLike): (JSC::JSObject::getPropertySlot const): (JSC::JSObject::getPropertySlot): (JSC::JSObject::getNonIndexPropertySlot): (JSC::JSObject::getOwnPropertySlotInline): (JSC::JSObject::putInlineForJSObject): (JSC::JSObject::hasOwnProperty const): (JSC::JSObject::putOwnDataPropertyMayBeIndex): * runtime/JSPromise.cpp: (JSC::JSPromise::resolve): * runtime/JSPromise.h: * runtime/JSPromiseDeferred.cpp: (JSC::JSPromiseDeferred::createDeferredData): (JSC::JSPromiseDeferred::tryCreate): (JSC::callFunction): (JSC::JSPromiseDeferred::resolve): (JSC::JSPromiseDeferred::reject): * runtime/JSPromiseDeferred.h: * runtime/JSPropertyNameEnumerator.h: (JSC::propertyNameEnumerator): * runtime/JSProxy.cpp: (JSC::JSProxy::toStringName): (JSC::JSProxy::getOwnPropertySlot): (JSC::JSProxy::getOwnPropertySlotByIndex): (JSC::JSProxy::put): (JSC::JSProxy::putByIndex): (JSC::JSProxy::defineOwnProperty): (JSC::JSProxy::deleteProperty): (JSC::JSProxy::isExtensible): (JSC::JSProxy::preventExtensions): (JSC::JSProxy::deletePropertyByIndex): (JSC::JSProxy::getPropertyNames): (JSC::JSProxy::getEnumerableLength): (JSC::JSProxy::getStructurePropertyNames): (JSC::JSProxy::getGenericPropertyNames): (JSC::JSProxy::getOwnPropertyNames): (JSC::JSProxy::setPrototype): (JSC::JSProxy::getPrototype): * runtime/JSProxy.h: * runtime/JSScope.cpp: (JSC::abstractAccess): (JSC::isUnscopable): (JSC::JSScope::resolve): (JSC::JSScope::resolveScopeForHoistingFuncDeclInEval): (JSC::JSScope::abstractResolve): (JSC::JSScope::toThis): * runtime/JSScope.h: (JSC::CallFrame::lexicalGlobalObject const): (JSC::ExecState::lexicalGlobalObject const): Deleted. * runtime/JSSet.cpp: (JSC::JSSet::toStringName): (JSC::JSSet::clone): * runtime/JSSet.h: * runtime/JSSetIterator.cpp: (JSC::JSSetIterator::createPair): * runtime/JSSetIterator.h: * runtime/JSString.cpp: (JSC::JSString::equalSlowCase const): (JSC::JSRopeString::resolveRopeToAtomString const): (JSC::JSRopeString::resolveRopeToExistingAtomString const): (JSC::JSRopeString::resolveRopeWithFunction const): (JSC::JSRopeString::resolveRope const): (JSC::JSRopeString::outOfMemory const): (JSC::JSString::toPrimitive const): (JSC::JSString::getPrimitiveNumber const): (JSC::JSString::toNumber const): (JSC::JSString::toObject const): (JSC::JSString::toThis): (JSC::JSString::getStringPropertyDescriptor): * runtime/JSString.h: (JSC::JSString::toIdentifier const): (JSC::JSString::toAtomString const): (JSC::JSString::toExistingAtomString const): (JSC::JSString::value const): (JSC::JSString::tryGetValue const): (JSC::JSString::getIndex): (JSC::jsSubstring): (JSC::jsStringWithCache): (JSC::JSString::getStringPropertySlot): (JSC::JSRopeString::unsafeView const): (JSC::JSRopeString::viewWithUnderlyingString const): (JSC::JSString::unsafeView const): (JSC::JSString::viewWithUnderlyingString const): (JSC::JSValue::toBoolean const): (JSC::JSValue::toString const): (JSC::JSValue::toStringOrNull const): (JSC::JSValue::toWTFString const): * runtime/JSStringInlines.h: (JSC::JSString::equal const): (JSC::jsMakeNontrivialString): (JSC::repeatCharacter): * runtime/JSStringIterator.cpp: (JSC::JSStringIterator::iteratedValue const): (JSC::JSStringIterator::clone): * runtime/JSStringIterator.h: * runtime/JSStringJoiner.cpp: (JSC::JSStringJoiner::joinedLength const): (JSC::JSStringJoiner::join): * runtime/JSStringJoiner.h: (JSC::JSStringJoiner::JSStringJoiner): (JSC::JSStringJoiner::appendWithoutSideEffects): (JSC::JSStringJoiner::append): * runtime/JSSymbolTableObject.cpp: (JSC::JSSymbolTableObject::deleteProperty): (JSC::JSSymbolTableObject::getOwnNonIndexPropertyNames): * runtime/JSSymbolTableObject.h: (JSC::symbolTablePut): (JSC::symbolTablePutTouchWatchpointSet): (JSC::symbolTablePutInvalidateWatchpointSet): * runtime/JSTemplateObjectDescriptor.cpp: (JSC::JSTemplateObjectDescriptor::createTemplateObject): * runtime/JSTemplateObjectDescriptor.h: * runtime/JSTypedArrayViewConstructor.cpp: (JSC::constructTypedArrayView): * runtime/JSTypedArrayViewPrototype.cpp: (JSC::typedArrayViewPrivateFuncLength): (JSC::typedArrayViewProtoFuncSet): (JSC::typedArrayViewProtoFuncCopyWithin): (JSC::typedArrayViewProtoFuncIncludes): (JSC::typedArrayViewProtoFuncLastIndexOf): (JSC::typedArrayViewProtoFuncIndexOf): (JSC::typedArrayViewProtoFuncJoin): (JSC::typedArrayViewProtoGetterFuncBuffer): (JSC::typedArrayViewProtoGetterFuncLength): (JSC::typedArrayViewProtoGetterFuncByteLength): (JSC::typedArrayViewProtoGetterFuncByteOffset): (JSC::typedArrayViewProtoFuncReverse): (JSC::typedArrayViewPrivateFuncSubarrayCreate): (JSC::typedArrayViewProtoFuncSlice): * runtime/JSTypedArrays.cpp: (JSC::createUint8TypedArray): * runtime/JSTypedArrays.h: * runtime/JSWeakMap.cpp: (JSC::JSWeakMap::toStringName): * runtime/JSWeakMap.h: * runtime/JSWeakObjectRef.cpp: (JSC::JSWeakObjectRef::toStringName): * runtime/JSWeakObjectRef.h: * runtime/JSWeakSet.cpp: (JSC::JSWeakSet::toStringName): * runtime/JSWeakSet.h: * runtime/LiteralParser.cpp: (JSC::LiteralParser<CharType>::tryJSONPParse): (JSC::LiteralParser<CharType>::makeIdentifier): (JSC::LiteralParser<CharType>::parse): * runtime/LiteralParser.h: (JSC::LiteralParser::LiteralParser): * runtime/Lookup.h: (JSC::putEntry): (JSC::lookupPut): (JSC::nonCachingStaticFunctionGetter): * runtime/MapConstructor.cpp: (JSC::callMap): (JSC::constructMap): * runtime/MapPrototype.cpp: (JSC::getMap): (JSC::mapProtoFuncClear): (JSC::mapProtoFuncDelete): (JSC::mapProtoFuncGet): (JSC::mapProtoFuncHas): (JSC::mapProtoFuncSet): (JSC::mapProtoFuncSize): * runtime/MathObject.cpp: (JSC::mathProtoFuncAbs): (JSC::mathProtoFuncACos): (JSC::mathProtoFuncASin): (JSC::mathProtoFuncATan): (JSC::mathProtoFuncATan2): (JSC::mathProtoFuncCeil): (JSC::mathProtoFuncClz32): (JSC::mathProtoFuncCos): (JSC::mathProtoFuncExp): (JSC::mathProtoFuncFloor): (JSC::mathProtoFuncHypot): (JSC::mathProtoFuncLog): (JSC::mathProtoFuncMax): (JSC::mathProtoFuncMin): (JSC::mathProtoFuncPow): (JSC::mathProtoFuncRound): (JSC::mathProtoFuncSign): (JSC::mathProtoFuncSin): (JSC::mathProtoFuncSqrt): (JSC::mathProtoFuncTan): (JSC::mathProtoFuncIMul): (JSC::mathProtoFuncACosh): (JSC::mathProtoFuncASinh): (JSC::mathProtoFuncATanh): (JSC::mathProtoFuncCbrt): (JSC::mathProtoFuncCosh): (JSC::mathProtoFuncExpm1): (JSC::mathProtoFuncFround): (JSC::mathProtoFuncLog1p): (JSC::mathProtoFuncLog10): (JSC::mathProtoFuncLog2): (JSC::mathProtoFuncSinh): (JSC::mathProtoFuncTanh): (JSC::mathProtoFuncTrunc): * runtime/Microtask.h: * runtime/ModuleProgramExecutable.cpp: (JSC::ModuleProgramExecutable::ModuleProgramExecutable): (JSC::ModuleProgramExecutable::create): * runtime/ModuleProgramExecutable.h: * runtime/NativeErrorConstructor.cpp: (JSC::NativeErrorConstructor<errorType>::constructNativeErrorConstructor): (JSC::NativeErrorConstructor<errorType>::callNativeErrorConstructor): * runtime/NullSetterFunction.cpp: (JSC::callerIsStrict): (JSC::NullSetterFunctionInternal::callReturnUndefined): * runtime/NumberConstructor.cpp: (JSC::constructNumberConstructor): (JSC::callNumberConstructor): * runtime/NumberObject.cpp: (JSC::constructNumber): * runtime/NumberObject.h: * runtime/NumberPrototype.cpp: (JSC::throwVMToThisNumberError): (JSC::numberProtoFuncToExponential): (JSC::numberProtoFuncToFixed): (JSC::numberProtoFuncToPrecision): (JSC::numberProtoFuncToString): (JSC::numberProtoFuncToLocaleString): (JSC::numberProtoFuncValueOf): (JSC::extractToStringRadixArgument): * runtime/NumberPrototype.h: * runtime/ObjectConstructor.cpp: (JSC::constructObjectWithNewTarget): (JSC::constructWithObjectConstructor): (JSC::callObjectConstructor): (JSC::objectConstructorGetPrototypeOf): (JSC::objectConstructorSetPrototypeOf): (JSC::objectConstructorGetOwnPropertyDescriptor): (JSC::objectConstructorGetOwnPropertyDescriptors): (JSC::objectConstructorGetOwnPropertyNames): (JSC::objectConstructorGetOwnPropertySymbols): (JSC::objectConstructorKeys): (JSC::objectConstructorAssign): (JSC::objectConstructorValues): (JSC::toPropertyDescriptor): (JSC::objectConstructorDefineProperty): (JSC::defineProperties): (JSC::objectConstructorDefineProperties): (JSC::objectConstructorCreate): (JSC::setIntegrityLevel): (JSC::testIntegrityLevel): (JSC::objectConstructorSeal): (JSC::objectConstructorFreeze): (JSC::objectConstructorPreventExtensions): (JSC::objectConstructorIsSealed): (JSC::objectConstructorIsFrozen): (JSC::objectConstructorIsExtensible): (JSC::objectConstructorIs): (JSC::ownPropertyKeys): * runtime/ObjectConstructor.h: (JSC::constructEmptyObject): (JSC::constructObject): (JSC::constructObjectFromPropertyDescriptor): * runtime/ObjectPrototype.cpp: (JSC::objectProtoFuncValueOf): (JSC::objectProtoFuncHasOwnProperty): (JSC::objectProtoFuncIsPrototypeOf): (JSC::objectProtoFuncDefineGetter): (JSC::objectProtoFuncDefineSetter): (JSC::objectProtoFuncLookupGetter): (JSC::objectProtoFuncLookupSetter): (JSC::objectProtoFuncPropertyIsEnumerable): (JSC::objectProtoFuncToLocaleString): (JSC::objectProtoFuncToString): * runtime/Operations.cpp: (JSC::JSValue::equalSlowCase): (JSC::JSValue::strictEqualSlowCase): (JSC::jsAddSlowCase): (JSC::jsTypeStringForValue): (JSC::jsIsObjectTypeOrNull): (JSC::normalizePrototypeChain): * runtime/Operations.h: (JSC::jsString): (JSC::jsStringFromRegisterArray): (JSC::bigIntCompare): (JSC::toPrimitiveNumeric): (JSC::jsLess): (JSC::jsLessEq): (JSC::jsAddNonNumber): (JSC::jsAdd): (JSC::jsSub): (JSC::jsMul): (JSC::jsStringFromArguments): Deleted. * runtime/ParseInt.h: (JSC::toStringView): * runtime/ProgramExecutable.cpp: (JSC::ProgramExecutable::ProgramExecutable): (JSC::hasRestrictedGlobalProperty): (JSC::ProgramExecutable::initializeGlobalProperties): * runtime/ProgramExecutable.h: * runtime/PropertyDescriptor.cpp: (JSC::PropertyDescriptor::slowGetterSetter): (JSC::PropertyDescriptor::equalTo const): * runtime/PropertyDescriptor.h: * runtime/PropertySlot.cpp: (JSC::PropertySlot::functionGetter const): (JSC::PropertySlot::customGetter const): (JSC::PropertySlot::customAccessorGetter const): * runtime/PropertySlot.h: (JSC::PropertySlot::getValue const): * runtime/ProxyConstructor.cpp: (JSC::makeRevocableProxy): (JSC::proxyRevocableConstructorThrowError): (JSC::constructProxyObject): (JSC::callProxy): * runtime/ProxyConstructor.h: * runtime/ProxyObject.cpp: (JSC::ProxyObject::toStringName): (JSC::ProxyObject::finishCreation): (JSC::performProxyGet): (JSC::ProxyObject::performGet): (JSC::ProxyObject::performInternalMethodGetOwnProperty): (JSC::ProxyObject::performHasProperty): (JSC::ProxyObject::getOwnPropertySlotCommon): (JSC::ProxyObject::getOwnPropertySlot): (JSC::ProxyObject::getOwnPropertySlotByIndex): (JSC::ProxyObject::performPut): (JSC::ProxyObject::put): (JSC::ProxyObject::putByIndexCommon): (JSC::ProxyObject::putByIndex): (JSC::performProxyCall): (JSC::performProxyConstruct): (JSC::ProxyObject::performDelete): (JSC::ProxyObject::deleteProperty): (JSC::ProxyObject::deletePropertyByIndex): (JSC::ProxyObject::performPreventExtensions): (JSC::ProxyObject::preventExtensions): (JSC::ProxyObject::performIsExtensible): (JSC::ProxyObject::isExtensible): (JSC::ProxyObject::performDefineOwnProperty): (JSC::ProxyObject::defineOwnProperty): (JSC::ProxyObject::performGetOwnPropertyNames): (JSC::ProxyObject::getOwnPropertyNames): (JSC::ProxyObject::getPropertyNames): (JSC::ProxyObject::getOwnNonIndexPropertyNames): (JSC::ProxyObject::getStructurePropertyNames): (JSC::ProxyObject::getGenericPropertyNames): (JSC::ProxyObject::performSetPrototype): (JSC::ProxyObject::setPrototype): (JSC::ProxyObject::performGetPrototype): (JSC::ProxyObject::getPrototype): * runtime/ProxyObject.h: * runtime/PutPropertySlot.h: * runtime/ReflectObject.cpp: (JSC::reflectObjectConstruct): (JSC::reflectObjectDefineProperty): (JSC::reflectObjectGet): (JSC::reflectObjectGetOwnPropertyDescriptor): (JSC::reflectObjectGetPrototypeOf): (JSC::reflectObjectIsExtensible): (JSC::reflectObjectOwnKeys): (JSC::reflectObjectPreventExtensions): (JSC::reflectObjectSet): (JSC::reflectObjectSetPrototypeOf): * runtime/RegExp.h: * runtime/RegExpCachedResult.cpp: (JSC::RegExpCachedResult::lastResult): (JSC::RegExpCachedResult::leftContext): (JSC::RegExpCachedResult::rightContext): (JSC::RegExpCachedResult::setInput): * runtime/RegExpCachedResult.h: * runtime/RegExpConstructor.cpp: (JSC::regExpConstructorDollar): (JSC::regExpConstructorInput): (JSC::regExpConstructorMultiline): (JSC::regExpConstructorLastMatch): (JSC::regExpConstructorLastParen): (JSC::regExpConstructorLeftContext): (JSC::regExpConstructorRightContext): (JSC::setRegExpConstructorInput): (JSC::setRegExpConstructorMultiline): (JSC::getRegExpStructure): (JSC::toFlags): (JSC::regExpCreate): (JSC::constructRegExp): (JSC::esSpecRegExpCreate): (JSC::constructWithRegExpConstructor): (JSC::callRegExpConstructor): * runtime/RegExpConstructor.h: (JSC::isRegExp): * runtime/RegExpGlobalData.cpp: (JSC::RegExpGlobalData::getBackref): (JSC::RegExpGlobalData::getLastParen): (JSC::RegExpGlobalData::getLeftContext): (JSC::RegExpGlobalData::getRightContext): * runtime/RegExpGlobalData.h: * runtime/RegExpGlobalDataInlines.h: (JSC::RegExpGlobalData::setInput): * runtime/RegExpInlines.h: (JSC::RegExp::matchInline): * runtime/RegExpMatchesArray.h: (JSC::createRegExpMatchesArray): * runtime/RegExpObject.cpp: (JSC::RegExpObject::getOwnPropertySlot): (JSC::RegExpObject::deleteProperty): (JSC::RegExpObject::getOwnNonIndexPropertyNames): (JSC::RegExpObject::getPropertyNames): (JSC::RegExpObject::getGenericPropertyNames): (JSC::RegExpObject::defineOwnProperty): (JSC::regExpObjectSetLastIndexStrict): (JSC::regExpObjectSetLastIndexNonStrict): (JSC::RegExpObject::put): (JSC::RegExpObject::exec): (JSC::RegExpObject::match): (JSC::RegExpObject::matchGlobal): * runtime/RegExpObject.h: * runtime/RegExpObjectInlines.h: (JSC::getRegExpObjectLastIndexAsUnsigned): (JSC::RegExpObject::execInline): (JSC::RegExpObject::matchInline): (JSC::collectMatches): * runtime/RegExpPrototype.cpp: (JSC::regExpProtoFuncTestFast): (JSC::regExpProtoFuncExec): (JSC::regExpProtoFuncMatchFast): (JSC::regExpProtoFuncCompile): (JSC::flagsString): (JSC::regExpProtoFuncToString): (JSC::regExpProtoGetterGlobal): (JSC::regExpProtoGetterIgnoreCase): (JSC::regExpProtoGetterMultiline): (JSC::regExpProtoGetterDotAll): (JSC::regExpProtoGetterSticky): (JSC::regExpProtoGetterUnicode): (JSC::regExpProtoGetterFlags): (JSC::regExpProtoGetterSourceInternal): (JSC::regExpProtoGetterSource): (JSC::regExpProtoFuncSearchFast): (JSC::regExpProtoFuncSplitFast): * runtime/SamplingProfiler.cpp: (JSC::FrameWalker::FrameWalker): (JSC::FrameWalker::isValidFramePointer): (JSC::CFrameWalker::CFrameWalker): (JSC::SamplingProfiler::takeSample): (JSC::SamplingProfiler::StackFrame::nameFromCallee): * runtime/ScopedArguments.cpp: (JSC::ScopedArguments::createByCopying): (JSC::ScopedArguments::copyToArguments): * runtime/ScopedArguments.h: * runtime/ScriptExecutable.cpp: (JSC::ScriptExecutable::newCodeBlockFor): (JSC::ScriptExecutable::prepareForExecutionImpl): (JSC::ScriptExecutable::createTemplateObject): * runtime/ScriptExecutable.h: * runtime/SetConstructor.cpp: (JSC::callSet): (JSC::constructSet): * runtime/SetPrototype.cpp: (JSC::getSet): (JSC::setProtoFuncAdd): (JSC::setProtoFuncClear): (JSC::setProtoFuncDelete): (JSC::setProtoFuncHas): (JSC::setProtoFuncSize): * runtime/SimpleTypedArrayController.cpp: (JSC::SimpleTypedArrayController::toJS): * runtime/SimpleTypedArrayController.h: * runtime/SparseArrayValueMap.cpp: (JSC::SparseArrayValueMap::putEntry): (JSC::SparseArrayValueMap::putDirect): (JSC::SparseArrayEntry::put): * runtime/SparseArrayValueMap.h: * runtime/StrictEvalActivation.cpp: (JSC::StrictEvalActivation::deleteProperty): * runtime/StrictEvalActivation.h: * runtime/StringConstructor.cpp: (JSC::stringFromCharCode): (JSC::stringFromCodePoint): (JSC::constructWithStringConstructor): (JSC::stringConstructor): (JSC::callStringConstructor): * runtime/StringConstructor.h: * runtime/StringObject.cpp: (JSC::StringObject::getOwnPropertySlot): (JSC::StringObject::getOwnPropertySlotByIndex): (JSC::StringObject::put): (JSC::StringObject::putByIndex): (JSC::isStringOwnProperty): (JSC::StringObject::defineOwnProperty): (JSC::StringObject::deleteProperty): (JSC::StringObject::deletePropertyByIndex): (JSC::StringObject::getOwnPropertyNames): (JSC::StringObject::getOwnNonIndexPropertyNames): * runtime/StringObject.h: (JSC::jsStringWithReuse): (JSC::jsSubstring): * runtime/StringPrototype.cpp: (JSC::substituteBackreferencesSlow): (JSC::jsSpliceSubstrings): (JSC::jsSpliceSubstringsWithSeparators): (JSC::removeUsingRegExpSearch): (JSC::replaceUsingRegExpSearch): (JSC::operationStringProtoFuncReplaceRegExpEmptyStr): (JSC::operationStringProtoFuncReplaceRegExpString): (JSC::replaceUsingStringSearch): (JSC::stringProtoFuncRepeatCharacter): (JSC::replace): (JSC::stringProtoFuncReplaceUsingRegExp): (JSC::stringProtoFuncReplaceUsingStringSearch): (JSC::operationStringProtoFuncReplaceGeneric): (JSC::stringProtoFuncToString): (JSC::stringProtoFuncCharAt): (JSC::stringProtoFuncCharCodeAt): (JSC::stringProtoFuncCodePointAt): (JSC::stringProtoFuncIndexOf): (JSC::stringProtoFuncLastIndexOf): (JSC::stringProtoFuncSlice): (JSC::splitStringByOneCharacterImpl): (JSC::stringProtoFuncSplitFast): (JSC::stringProtoFuncSubstrImpl): (JSC::stringProtoFuncSubstring): (JSC::stringProtoFuncToLowerCase): (JSC::stringProtoFuncToUpperCase): (JSC::stringProtoFuncLocaleCompare): (JSC::toLocaleCase): (JSC::stringProtoFuncToLocaleUpperCase): (JSC::trimString): (JSC::stringProtoFuncTrim): (JSC::stringProtoFuncTrimStart): (JSC::stringProtoFuncTrimEnd): (JSC::stringProtoFuncStartsWith): (JSC::stringProtoFuncEndsWith): (JSC::stringIncludesImpl): (JSC::stringProtoFuncIncludes): (JSC::builtinStringIncludesInternal): (JSC::stringProtoFuncIterator): (JSC::normalize): (JSC::stringProtoFuncNormalize): * runtime/StringPrototype.h: * runtime/StringPrototypeInlines.h: (JSC::stringSlice): * runtime/StringRecursionChecker.cpp: (JSC::StringRecursionChecker::throwStackOverflowError): (JSC::StringRecursionChecker::emptyString): * runtime/StringRecursionChecker.h: (JSC::StringRecursionChecker::performCheck): (JSC::StringRecursionChecker::StringRecursionChecker): (JSC::StringRecursionChecker::~StringRecursionChecker): * runtime/Structure.h: * runtime/StructureInlines.h: (JSC::Structure::prototypeChain const): (JSC::Structure::setObjectToStringValue): * runtime/StructureRareData.cpp: (JSC::StructureRareData::setObjectToStringValue): * runtime/StructureRareData.h: * runtime/Symbol.cpp: (JSC::Symbol::toPrimitive const): (JSC::Symbol::getPrimitiveNumber const): (JSC::Symbol::toObject const): (JSC::Symbol::toNumber const): * runtime/Symbol.h: * runtime/SymbolConstructor.cpp: (JSC::callSymbol): (JSC::symbolConstructorFor): (JSC::symbolConstructorKeyFor): * runtime/SymbolObject.cpp: (JSC::SymbolObject::toStringName): (JSC::SymbolObject::defaultValue): * runtime/SymbolObject.h: * runtime/SymbolPrototype.cpp: (JSC::symbolProtoGetterDescription): (JSC::symbolProtoFuncToString): (JSC::symbolProtoFuncValueOf): * runtime/TestRunnerUtils.cpp: (JSC::failNextNewCodeBlock): (JSC::numberOfDFGCompiles): (JSC::setNeverInline): (JSC::setNeverOptimize): (JSC::setCannotUseOSRExitFuzzing): (JSC::optimizeNextInvocation): * runtime/TestRunnerUtils.h: * runtime/ThrowScope.cpp: (JSC::ThrowScope::throwException): * runtime/ThrowScope.h: (JSC::ThrowScope::throwException): (JSC::throwException): * runtime/ToNativeFromValue.h: (JSC::toNativeFromValue): * runtime/TypeError.h: (JSC::typeError): * runtime/TypedArrayController.h: * runtime/VM.cpp: (JSC::VM::throwException): (JSC::VM::callPromiseRejectionCallback): (JSC::QueuedTask::run): (JSC::VM::deprecatedVMEntryGlobalObject const): (JSC::VM::vmEntryGlobalObject const): Deleted. * runtime/VM.h: (JSC::VM::addressOfCallFrameForCatch): (JSC::VM::handleTraps): * runtime/VMEntryScope.cpp: (JSC::VMEntryScope::VMEntryScope): * runtime/VMEntryScope.h: * runtime/VMTraps.cpp: (JSC::VMTraps::invalidateCodeBlocksOnStack): (JSC::VMTraps::handleTraps): * runtime/VMTraps.h: (JSC::VMTraps::invalidateCodeBlocksOnStack): * runtime/Watchdog.cpp: (JSC::Watchdog::shouldTerminate): * runtime/Watchdog.h: * runtime/WeakMapConstructor.cpp: (JSC::callWeakMap): (JSC::constructWeakMap): * runtime/WeakMapPrototype.cpp: (JSC::getWeakMap): (JSC::protoFuncWeakMapDelete): (JSC::protoFuncWeakMapGet): (JSC::protoFuncWeakMapHas): (JSC::protoFuncWeakMapSet): * runtime/WeakObjectRefConstructor.cpp: (JSC::callWeakRef): (JSC::constructWeakRef): * runtime/WeakObjectRefPrototype.cpp: (JSC::getWeakRef): (JSC::protoFuncWeakRefDeref): * runtime/WeakSetConstructor.cpp: (JSC::callWeakSet): (JSC::constructWeakSet): * runtime/WeakSetPrototype.cpp: (JSC::getWeakSet): (JSC::protoFuncWeakSetDelete): (JSC::protoFuncWeakSetHas): (JSC::protoFuncWeakSetAdd): * tools/JSDollarVM.cpp: (JSC::JSDollarVMCallFrame::create): (JSC::JSDollarVMCallFrame::finishCreation): (JSC::ImpureGetter::getOwnPropertySlot): (JSC::CustomGetter::getOwnPropertySlot): (JSC::CustomGetter::customGetter): (JSC::CustomGetter::customGetterAcessor): (JSC::RuntimeArray::create): (JSC::RuntimeArray::getOwnPropertySlot): (JSC::RuntimeArray::getOwnPropertySlotByIndex): (JSC::RuntimeArray::put): (JSC::RuntimeArray::deleteProperty): (JSC::RuntimeArray::finishCreation): (JSC::RuntimeArray::RuntimeArray): (JSC::RuntimeArray::lengthGetter): (JSC::testStaticAccessorGetter): (JSC::testStaticAccessorPutter): (JSC::StaticCustomAccessor::getOwnPropertySlot): (JSC::DOMJITGetter::DOMJITAttribute::slowCall): (JSC::DOMJITGetter::DOMJITAttribute::callDOMGetter): (JSC::DOMJITGetter::customGetter): (JSC::DOMJITGetterComplex::DOMJITAttribute::slowCall): (JSC::DOMJITGetterComplex::DOMJITAttribute::callDOMGetter): (JSC::DOMJITGetterComplex::customGetter): (JSC::DOMJITFunctionObject::functionWithTypeCheck): (JSC::DOMJITFunctionObject::functionWithoutTypeCheck): (JSC::DOMJITCheckSubClassObject::functionWithTypeCheck): (JSC::DOMJITCheckSubClassObject::functionWithoutTypeCheck): (JSC::DOMJITGetterBaseJSObject::DOMJITAttribute::slowCall): (JSC::DOMJITGetterBaseJSObject::DOMJITAttribute::callDOMGetter): (JSC::DOMJITGetterBaseJSObject::customGetter): (JSC::customGetAccessor): (JSC::customGetValue): (JSC::customSetAccessor): (JSC::customSetValue): (JSC::functionWasmStreamingParserAddBytes): (JSC::functionBreakpoint): (JSC::functionGC): (JSC::functionEdenGC): (JSC::functionCallFrame): (JSC::functionCodeBlockForFrame): (JSC::codeBlockFromArg): (JSC::doPrint): (JSC::functionDumpCallFrame): (JSC::functionDumpStack): (JSC::functionCreateRuntimeArray): (JSC::functionSetImpureGetterDelegate): (JSC::functionCreateBuiltin): (JSC::functionGetPrivateProperty): (JSC::functionCreateElement): (JSC::functionGetHiddenValue): (JSC::functionSetHiddenValue): (JSC::functionShadowChickenFunctionsOnStack): (JSC::functionFindTypeForExpression): (JSC::functionReturnTypeFor): (JSC::functionHasBasicBlockExecuted): (JSC::functionBasicBlockExecutionCount): (JSC::changeDebuggerModeWhenIdle): (JSC::functionEnableDebuggerModeWhenIdle): (JSC::functionDisableDebuggerModeWhenIdle): (JSC::functionGetGetterSetter): (JSC::functionLoadGetterFromGetterSetter): * tools/VMInspector.cpp: (JSC::VMInspector::currentThreadOwnsJSLock): (JSC::ensureCurrentThreadOwnsJSLock): (JSC::VMInspector::gc): (JSC::VMInspector::edenGC): (JSC::VMInspector::isValidCodeBlock): (JSC::VMInspector::codeBlockForFrame): (JSC::VMInspector::dumpCallFrame): (JSC::VMInspector::dumpStack): * tools/VMInspector.h: * wasm/WasmCallingConvention.h: * wasm/WasmEmbedder.h: * wasm/WasmOperations.cpp: (JSC::Wasm::operationThrowBadI64): * wasm/WasmOperations.h: * wasm/js/JSToWasm.cpp: (JSC::Wasm::allocateResultsArray): * wasm/js/JSWebAssembly.cpp: (JSC::reject): (JSC::webAssemblyModuleValidateAsyncInternal): (JSC::webAssemblyCompileFunc): (JSC::resolve): (JSC::JSWebAssembly::webAssemblyModuleValidateAsync): (JSC::instantiate): (JSC::compileAndInstantiate): (JSC::JSWebAssembly::instantiate): (JSC::webAssemblyModuleInstantinateAsyncInternal): (JSC::JSWebAssembly::webAssemblyModuleInstantinateAsync): (JSC::webAssemblyInstantiateFunc): (JSC::webAssemblyValidateFunc): (JSC::webAssemblyCompileStreamingInternal): (JSC::webAssemblyInstantiateStreamingInternal): * wasm/js/JSWebAssembly.h: * wasm/js/JSWebAssemblyCompileError.cpp: (JSC::JSWebAssemblyCompileError::create): (JSC::createJSWebAssemblyCompileError): * wasm/js/JSWebAssemblyCompileError.h: * wasm/js/JSWebAssemblyHelpers.h: (JSC::toNonWrappingUint32): (JSC::getWasmBufferFromValue): (JSC::createSourceBufferFromValue): * wasm/js/JSWebAssemblyInstance.cpp: (JSC::JSWebAssemblyInstance::JSWebAssemblyInstance): (JSC::JSWebAssemblyInstance::finalizeCreation): (JSC::JSWebAssemblyInstance::create): * wasm/js/JSWebAssemblyInstance.h: * wasm/js/JSWebAssemblyLinkError.cpp: (JSC::JSWebAssemblyLinkError::create): (JSC::createJSWebAssemblyLinkError): * wasm/js/JSWebAssemblyLinkError.h: * wasm/js/JSWebAssemblyMemory.cpp: (JSC::JSWebAssemblyMemory::create): (JSC::JSWebAssemblyMemory::grow): * wasm/js/JSWebAssemblyMemory.h: * wasm/js/JSWebAssemblyModule.cpp: (JSC::JSWebAssemblyModule::createStub): * wasm/js/JSWebAssemblyModule.h: * wasm/js/JSWebAssemblyRuntimeError.cpp: (JSC::JSWebAssemblyRuntimeError::create): (JSC::createJSWebAssemblyRuntimeError): * wasm/js/JSWebAssemblyRuntimeError.h: * wasm/js/JSWebAssemblyTable.cpp: (JSC::JSWebAssemblyTable::create): * wasm/js/JSWebAssemblyTable.h: * wasm/js/WasmToJS.cpp: (JSC::Wasm::handleBadI64Use): (JSC::Wasm::wasmToJS): (JSC::Wasm::wasmToJSException): * wasm/js/WasmToJS.h: * wasm/js/WebAssemblyCompileErrorConstructor.cpp: (JSC::constructJSWebAssemblyCompileError): (JSC::callJSWebAssemblyCompileError): * wasm/js/WebAssemblyFunction.cpp: (JSC::callWebAssemblyFunction): * wasm/js/WebAssemblyInstanceConstructor.cpp: (JSC::constructJSWebAssemblyInstance): (JSC::callJSWebAssemblyInstance): * wasm/js/WebAssemblyInstanceConstructor.h: * wasm/js/WebAssemblyInstancePrototype.cpp: (JSC::getInstance): (JSC::webAssemblyInstanceProtoFuncExports): * wasm/js/WebAssemblyLinkErrorConstructor.cpp: (JSC::constructJSWebAssemblyLinkError): (JSC::callJSWebAssemblyLinkError): * wasm/js/WebAssemblyMemoryConstructor.cpp: (JSC::constructJSWebAssemblyMemory): (JSC::callJSWebAssemblyMemory): * wasm/js/WebAssemblyMemoryPrototype.cpp: (JSC::getMemory): (JSC::webAssemblyMemoryProtoFuncGrow): (JSC::webAssemblyMemoryProtoFuncBuffer): * wasm/js/WebAssemblyModuleConstructor.cpp: (JSC::webAssemblyModuleCustomSections): (JSC::webAssemblyModuleImports): (JSC::webAssemblyModuleExports): (JSC::constructJSWebAssemblyModule): (JSC::callJSWebAssemblyModule): (JSC::WebAssemblyModuleConstructor::createModule): * wasm/js/WebAssemblyModuleConstructor.h: * wasm/js/WebAssemblyModuleRecord.cpp: (JSC::WebAssemblyModuleRecord::create): (JSC::WebAssemblyModuleRecord::finishCreation): (JSC::WebAssemblyModuleRecord::link): (JSC::dataSegmentFail): (JSC::WebAssemblyModuleRecord::evaluate): * wasm/js/WebAssemblyModuleRecord.h: * wasm/js/WebAssemblyRuntimeErrorConstructor.cpp: (JSC::constructJSWebAssemblyRuntimeError): (JSC::callJSWebAssemblyRuntimeError): * wasm/js/WebAssemblyTableConstructor.cpp: (JSC::constructJSWebAssemblyTable): (JSC::callJSWebAssemblyTable): * wasm/js/WebAssemblyTablePrototype.cpp: (JSC::getTable): (JSC::webAssemblyTableProtoFuncLength): (JSC::webAssemblyTableProtoFuncGrow): (JSC::webAssemblyTableProtoFuncGet): (JSC::webAssemblyTableProtoFuncSet): * wasm/js/WebAssemblyWrapperFunction.cpp: (JSC::callWebAssemblyWrapperFunction): * yarr/YarrErrorCode.cpp: (JSC::Yarr::errorToThrow): * yarr/YarrErrorCode.h: Source/WebCore: This patch is changing ExecState* to JSGlobalObject*. We are using ExecState* (a.k.a. CallFrame*) as a useful way to access arguments, thisValue, and lexical JSGlobalObject*. But using `CallFrame*` to access lexical `JSGlobalObject*` is wrong: when a function is inlined, `CallFrame*` is pointing a CallFrame* of outer function. So if outer function's lexical JSGlobalObject is different from inlined one, we are getting wrong value. We had this bug so long and we are adhocly fixing some of them, but we have bunch of this type of bugs. In this patch, we explicitly pass lexical JSGlobalObject* so that we pass correct lexical JSGlobalObject* instead of just passing ExecState*. This fixes various issues. And furthermore, it cleans up code by decoupling JSGlobalObject* from CallFrame*. Now CallFrame* is really a CallFrame* and it is used only when we actually want to access CallFrame information. And this also removes many `ExecState::vm()` function calls. And we can just use `JSGlobalObject::vm()` calls instead. We had a ugly hack that we had restriction that all JSCallee needs to be non-large-allocation. This limitation is introduced to keep `ExecState::vm()` fast. But this limitation now becomes major obstacle to introduce IsoSubspace optimization, and this problem prevents us from putting all JSCells into IsoSubspace. This patch paves the way to putting all JSCells into IsoSubspace by removing the above restriction. * Modules/applepay/ApplePaySession.cpp: (WebCore::ApplePaySession::completeMerchantValidation): * Modules/applepay/ApplePaySession.h: * Modules/applepay/ApplePaySession.idl: * Modules/applepay/PaymentMerchantSession.h: * Modules/applepay/cocoa/PaymentMerchantSessionCocoa.mm: (WebCore::PaymentMerchantSession::fromJS): * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp: (WebCore::ApplePayPaymentHandler::computeTotalAndLineItems const): (WebCore::toJSDictionary): (WebCore::ApplePayPaymentHandler::didAuthorizePayment): (WebCore::ApplePayPaymentHandler::didSelectPaymentMethod): * Modules/async-clipboard/ClipboardItemBindingsDataSource.cpp: (WebCore::ClipboardItemBindingsDataSource::getType): * Modules/encryptedmedia/MediaKeyStatusMap.cpp: (WebCore::MediaKeyStatusMap::get): * Modules/encryptedmedia/MediaKeyStatusMap.h: * Modules/encryptedmedia/MediaKeyStatusMap.idl: * Modules/encryptedmedia/legacy/LegacyCDMSessionClearKey.cpp: (WebCore::CDMSessionClearKey::update): * Modules/fetch/FetchBody.idl: * Modules/fetch/FetchBodyOwner.cpp: (WebCore::FetchBodyOwner::readableStream): (WebCore::FetchBodyOwner::createReadableStream): * Modules/fetch/FetchBodyOwner.h: * Modules/fetch/FetchResponse.h: * Modules/indexeddb/IDBCursor.cpp: (WebCore::IDBCursor::update): (WebCore::IDBCursor::continuePrimaryKey): (WebCore::IDBCursor::continueFunction): (WebCore::IDBCursor::deleteFunction): * Modules/indexeddb/IDBCursor.h: * Modules/indexeddb/IDBCursor.idl: * Modules/indexeddb/IDBFactory.cpp: (WebCore::IDBFactory::cmp): * Modules/indexeddb/IDBFactory.h: * Modules/indexeddb/IDBFactory.idl: * Modules/indexeddb/IDBIndex.cpp: (WebCore::IDBIndex::doOpenCursor): (WebCore::IDBIndex::openCursor): (WebCore::IDBIndex::doOpenKeyCursor): (WebCore::IDBIndex::openKeyCursor): (WebCore::IDBIndex::count): (WebCore::IDBIndex::doCount): (WebCore::IDBIndex::get): (WebCore::IDBIndex::doGet): (WebCore::IDBIndex::getKey): (WebCore::IDBIndex::doGetKey): (WebCore::IDBIndex::doGetAll): (WebCore::IDBIndex::getAll): (WebCore::IDBIndex::doGetAllKeys): (WebCore::IDBIndex::getAllKeys): * Modules/indexeddb/IDBIndex.h: * Modules/indexeddb/IDBIndex.idl: * Modules/indexeddb/IDBKeyRange.cpp: (WebCore::IDBKeyRange::only): (WebCore::IDBKeyRange::lowerBound): (WebCore::IDBKeyRange::upperBound): (WebCore::IDBKeyRange::bound): (WebCore::IDBKeyRange::includes): * Modules/indexeddb/IDBKeyRange.h: * Modules/indexeddb/IDBKeyRange.idl: * Modules/indexeddb/IDBObjectStore.cpp: (WebCore::IDBObjectStore::doOpenCursor): (WebCore::IDBObjectStore::openCursor): (WebCore::IDBObjectStore::doOpenKeyCursor): (WebCore::IDBObjectStore::openKeyCursor): (WebCore::IDBObjectStore::get): (WebCore::IDBObjectStore::getKey): (WebCore::IDBObjectStore::add): (WebCore::IDBObjectStore::put): (WebCore::IDBObjectStore::putForCursorUpdate): (WebCore::IDBObjectStore::putOrAdd): (WebCore::IDBObjectStore::deleteFunction): (WebCore::IDBObjectStore::doDelete): (WebCore::IDBObjectStore::clear): (WebCore::IDBObjectStore::createIndex): (WebCore::IDBObjectStore::count): (WebCore::IDBObjectStore::doCount): (WebCore::IDBObjectStore::doGetAll): (WebCore::IDBObjectStore::getAll): (WebCore::IDBObjectStore::doGetAllKeys): (WebCore::IDBObjectStore::getAllKeys): * Modules/indexeddb/IDBObjectStore.h: * Modules/indexeddb/IDBObjectStore.idl: * Modules/indexeddb/IDBTransaction.cpp: (WebCore::IDBTransaction::requestOpenCursor): (WebCore::IDBTransaction::doRequestOpenCursor): (WebCore::IDBTransaction::requestGetAllObjectStoreRecords): (WebCore::IDBTransaction::requestGetAllIndexRecords): (WebCore::IDBTransaction::requestGetRecord): (WebCore::IDBTransaction::requestGetValue): (WebCore::IDBTransaction::requestGetKey): (WebCore::IDBTransaction::requestIndexRecord): (WebCore::IDBTransaction::requestCount): (WebCore::IDBTransaction::requestDeleteRecord): (WebCore::IDBTransaction::requestClearObjectStore): (WebCore::IDBTransaction::requestPutOrAdd): * Modules/indexeddb/IDBTransaction.h: * Modules/indexeddb/server/IDBSerializationContext.cpp: (WebCore::IDBServer::IDBSerializationContext::execState): * Modules/indexeddb/server/IDBSerializationContext.h: * Modules/mediastream/RTCPeerConnection.cpp: (WebCore::certificateTypeFromAlgorithmIdentifier): (WebCore::RTCPeerConnection::generateCertificate): * Modules/mediastream/RTCPeerConnection.h: * Modules/mediastream/RTCPeerConnection.idl: * Modules/paymentrequest/PaymentMethodChangeEvent.h: * Modules/paymentrequest/PaymentRequest.cpp: (WebCore::checkAndCanonicalizeDetails): * Modules/paymentrequest/PaymentResponse.h: * Modules/plugins/QuickTimePluginReplacement.mm: (WebCore::QuickTimePluginReplacement::ensureReplacementScriptInjected): (WebCore::QuickTimePluginReplacement::installReplacement): (WebCore::JSQuickTimePluginReplacement::timedMetaData const): (WebCore::JSQuickTimePluginReplacement::accessLog const): (WebCore::JSQuickTimePluginReplacement::errorLog const): * Modules/webgpu/WebGPUDevice.cpp: (WebCore::WebGPUDevice::createBufferMapped const): * Modules/webgpu/WebGPUDevice.h: * Modules/webgpu/WebGPUDevice.idl: * animation/Animatable.idl: * animation/KeyframeEffect.cpp: (WebCore::processKeyframeLikeObject): (WebCore::processIterableKeyframes): (WebCore::processPropertyIndexedKeyframes): (WebCore::KeyframeEffect::create): (WebCore::KeyframeEffect::getKeyframes): (WebCore::KeyframeEffect::setKeyframes): (WebCore::KeyframeEffect::processKeyframes): (WebCore::KeyframeEffect::animationDidSeek): * animation/KeyframeEffect.h: * animation/KeyframeEffect.idl: * bindings/js/DOMPromiseProxy.h: (WebCore::DOMPromiseProxy<IDLType>::promise): (WebCore::DOMPromiseProxy<IDLVoid>::promise): (WebCore::DOMPromiseProxyWithResolveCallback<IDLType>::promise): * bindings/js/DOMWrapperWorld.h: (WebCore::currentWorld): (WebCore::isWorldCompatible): * bindings/js/IDBBindingUtilities.cpp: (WebCore::get): (WebCore::set): (WebCore::toJS): (WebCore::createIDBKeyFromValue): (WebCore::getNthValueOnKeyPath): (WebCore::internalCreateIDBKeyFromScriptValueAndKeyPath): (WebCore::ensureNthValueOnKeyPath): (WebCore::canInjectNthValueOnKeyPath): (WebCore::injectIDBKeyIntoScriptValue): (WebCore::maybeCreateIDBKeyFromScriptValueAndKeyPath): (WebCore::canInjectIDBKeyIntoScriptValue): (WebCore::deserializeIDBValueToJSValue): (WebCore::scriptValueToIDBKey): (WebCore::createKeyPathArray): (WebCore::generateIndexKeyForValue): (WebCore::deserializeIDBValueWithKeyInjection): * bindings/js/IDBBindingUtilities.h: * bindings/js/JSAnimationEffectCustom.cpp: (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/js/JSAnimationTimelineCustom.cpp: (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/js/JSAuthenticatorResponseCustom.cpp: (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/js/JSBasicCredentialCustom.cpp: (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/js/JSBlobCustom.cpp: (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/js/JSCSSRuleCustom.cpp: (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/js/JSCallbackData.cpp: (WebCore::JSCallbackData::invokeCallback): * bindings/js/JSCustomElementInterface.cpp: (WebCore::JSCustomElementInterface::tryToConstructCustomElement): (WebCore::constructCustomElementSynchronously): (WebCore::JSCustomElementInterface::upgradeElement): (WebCore::JSCustomElementInterface::invokeCallback): (WebCore::JSCustomElementInterface::invokeAdoptedCallback): (WebCore::JSCustomElementInterface::invokeAttributeChangedCallback): * bindings/js/JSCustomElementInterface.h: (WebCore::JSCustomElementInterface::invokeCallback): * bindings/js/JSCustomElementRegistryCustom.cpp: (WebCore::getCustomElementCallback): (WebCore::validateCustomElementNameAndThrowIfNeeded): (WebCore::JSCustomElementRegistry::define): (WebCore::whenDefinedPromise): (WebCore::JSCustomElementRegistry::whenDefined): * bindings/js/JSCustomEventCustom.cpp: (WebCore::JSCustomEvent::detail const): * bindings/js/JSCustomXPathNSResolver.cpp: (WebCore::JSCustomXPathNSResolver::create): (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI): * bindings/js/JSCustomXPathNSResolver.h: * bindings/js/JSDOMAbstractOperations.h: (WebCore::isVisibleNamedProperty): (WebCore::accessVisibleNamedProperty): * bindings/js/JSDOMAttribute.h: (WebCore::IDLAttribute::set): (WebCore::IDLAttribute::setStatic): (WebCore::IDLAttribute::get): (WebCore::IDLAttribute::getStatic): (WebCore::AttributeSetter::call): * bindings/js/JSDOMBindingSecurity.cpp: (WebCore::canAccessDocument): (WebCore::BindingSecurity::shouldAllowAccessToFrame): (WebCore::BindingSecurity::shouldAllowAccessToDOMWindow): (WebCore::BindingSecurity::shouldAllowAccessToNode): * bindings/js/JSDOMBindingSecurity.h: (WebCore::BindingSecurity::checkSecurityForNode): * bindings/js/JSDOMBuiltinConstructor.h: (WebCore::JSDOMBuiltinConstructor<JSClass>::callConstructor): (WebCore::JSDOMBuiltinConstructor<JSClass>::construct): * bindings/js/JSDOMBuiltinConstructorBase.cpp: (WebCore::JSDOMBuiltinConstructorBase::callFunctionWithCurrentArguments): * bindings/js/JSDOMBuiltinConstructorBase.h: * bindings/js/JSDOMConstructorBase.cpp: (WebCore::callThrowTypeError): (WebCore::JSDOMConstructorBase::toStringName): * bindings/js/JSDOMConstructorBase.h: * bindings/js/JSDOMConstructorNotConstructable.h: (WebCore::JSDOMConstructorNotConstructable::callThrowTypeError): * bindings/js/JSDOMConvertAny.h: (WebCore::Converter<IDLAny>::convert): (WebCore::VariadicConverter<IDLAny>::convert): * bindings/js/JSDOMConvertBase.h: (WebCore::DefaultExceptionThrower::operator()): (WebCore::convert): (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/js/JSDOMConvertBoolean.h: (WebCore::Converter<IDLBoolean>::convert): * bindings/js/JSDOMConvertBufferSource.h: (WebCore::toJS): (WebCore::Detail::BufferSourceConverter::convert): (WebCore::Converter<IDLArrayBuffer>::convert): (WebCore::JSConverter<IDLArrayBuffer>::convert): (WebCore::Converter<IDLDataView>::convert): (WebCore::JSConverter<IDLDataView>::convert): (WebCore::Converter<IDLInt8Array>::convert): (WebCore::JSConverter<IDLInt8Array>::convert): (WebCore::Converter<IDLInt16Array>::convert): (WebCore::JSConverter<IDLInt16Array>::convert): (WebCore::Converter<IDLInt32Array>::convert): (WebCore::JSConverter<IDLInt32Array>::convert): (WebCore::Converter<IDLUint8Array>::convert): (WebCore::JSConverter<IDLUint8Array>::convert): (WebCore::Converter<IDLUint16Array>::convert): (WebCore::JSConverter<IDLUint16Array>::convert): (WebCore::Converter<IDLUint32Array>::convert): (WebCore::JSConverter<IDLUint32Array>::convert): (WebCore::Converter<IDLUint8ClampedArray>::convert): (WebCore::JSConverter<IDLUint8ClampedArray>::convert): (WebCore::Converter<IDLFloat32Array>::convert): (WebCore::JSConverter<IDLFloat32Array>::convert): (WebCore::Converter<IDLFloat64Array>::convert): (WebCore::JSConverter<IDLFloat64Array>::convert): (WebCore::Converter<IDLArrayBufferView>::convert): (WebCore::JSConverter<IDLArrayBufferView>::convert): * bindings/js/JSDOMConvertCallbacks.h: (WebCore::Converter<IDLCallbackFunction<T>>::convert): (WebCore::Converter<IDLCallbackInterface<T>>::convert): * bindings/js/JSDOMConvertDate.cpp: (WebCore::jsDate): (WebCore::valueToDate): * bindings/js/JSDOMConvertDate.h: (WebCore::Converter<IDLDate>::convert): (WebCore::JSConverter<IDLDate>::convert): * bindings/js/JSDOMConvertDictionary.h: (WebCore::Converter<IDLDictionary<T>>::convert): (WebCore::JSConverter<IDLDictionary<T>>::convert): * bindings/js/JSDOMConvertEnumeration.h: (WebCore::Converter<IDLEnumeration<T>>::convert): (WebCore::JSConverter<IDLEnumeration<T>>::convert): * bindings/js/JSDOMConvertEventListener.h: (WebCore::Converter<IDLEventListener<T>>::convert): * bindings/js/JSDOMConvertIndexedDB.h: (WebCore::JSConverter<IDLIDBKey>::convert): (WebCore::JSConverter<IDLIDBKeyData>::convert): (WebCore::JSConverter<IDLIDBValue>::convert): * bindings/js/JSDOMConvertInterface.h: (WebCore::JSToWrappedOverloader::toWrapped): (WebCore::Converter<IDLInterface<T>>::convert): (WebCore::JSConverter<IDLInterface<T>>::convert): (WebCore::JSConverter<IDLInterface<T>>::convertNewlyCreated): (WebCore::VariadicConverter<IDLInterface<T>>::convert): * bindings/js/JSDOMConvertJSON.h: (WebCore::Converter<IDLJSON>::convert): (WebCore::JSConverter<IDLJSON>::convert): * bindings/js/JSDOMConvertNull.h: (WebCore::Converter<IDLNull>::convert): * bindings/js/JSDOMConvertNullable.h: (WebCore::Converter<IDLNullable<T>>::convert): (WebCore::JSConverter<IDLNullable<T>>::convert): (WebCore::JSConverter<IDLNullable<T>>::convertNewlyCreated): * bindings/js/JSDOMConvertNumbers.cpp: (WebCore::enforceRange): (WebCore::toSmallerInt): (WebCore::toSmallerUInt): (WebCore::convertToIntegerEnforceRange<int8_t>): (WebCore::convertToIntegerEnforceRange<uint8_t>): (WebCore::convertToIntegerClamp<int8_t>): (WebCore::convertToIntegerClamp<uint8_t>): (WebCore::convertToInteger<int8_t>): (WebCore::convertToInteger<uint8_t>): (WebCore::convertToIntegerEnforceRange<int16_t>): (WebCore::convertToIntegerEnforceRange<uint16_t>): (WebCore::convertToIntegerClamp<int16_t>): (WebCore::convertToIntegerClamp<uint16_t>): (WebCore::convertToInteger<int16_t>): (WebCore::convertToInteger<uint16_t>): (WebCore::convertToIntegerEnforceRange<int32_t>): (WebCore::convertToIntegerEnforceRange<uint32_t>): (WebCore::convertToIntegerClamp<int32_t>): (WebCore::convertToIntegerClamp<uint32_t>): (WebCore::convertToInteger<int32_t>): (WebCore::convertToInteger<uint32_t>): (WebCore::convertToIntegerEnforceRange<int64_t>): (WebCore::convertToIntegerEnforceRange<uint64_t>): (WebCore::convertToIntegerClamp<int64_t>): (WebCore::convertToIntegerClamp<uint64_t>): (WebCore::convertToInteger<int64_t>): (WebCore::convertToInteger<uint64_t>): * bindings/js/JSDOMConvertNumbers.h: (WebCore::Converter<IDLByte>::convert): (WebCore::Converter<IDLOctet>::convert): (WebCore::Converter<IDLShort>::convert): (WebCore::Converter<IDLUnsignedShort>::convert): (WebCore::Converter<IDLLong>::convert): (WebCore::Converter<IDLUnsignedLong>::convert): (WebCore::Converter<IDLLongLong>::convert): (WebCore::Converter<IDLUnsignedLongLong>::convert): (WebCore::Converter<IDLClampAdaptor<T>>::convert): (WebCore::Converter<IDLEnforceRangeAdaptor<T>>::convert): (WebCore::Converter<IDLFloat>::convert): (WebCore::Converter<IDLUnrestrictedFloat>::convert): (WebCore::Converter<IDLDouble>::convert): (WebCore::Converter<IDLUnrestrictedDouble>::convert): * bindings/js/JSDOMConvertObject.h: (WebCore::Converter<IDLObject>::convert): * bindings/js/JSDOMConvertPromise.h: (WebCore::Converter<IDLPromise<T>>::convert): (WebCore::JSConverter<IDLPromise<T>>::convert): * bindings/js/JSDOMConvertRecord.h: (WebCore::Detail::IdentifierConverter<IDLDOMString>::convert): (WebCore::Detail::IdentifierConverter<IDLByteString>::convert): (WebCore::Detail::IdentifierConverter<IDLUSVString>::convert): * bindings/js/JSDOMConvertScheduledAction.h: (WebCore::Converter<IDLScheduledAction>::convert): * bindings/js/JSDOMConvertSequences.h: (WebCore::Detail::GenericSequenceConverter::convert): (WebCore::Detail::NumericSequenceConverter::convertArray): (WebCore::Detail::NumericSequenceConverter::convert): (WebCore::Detail::SequenceConverter::convertArray): (WebCore::Detail::SequenceConverter::convert): (WebCore::Detail::SequenceConverter<IDLLong>::convert): (WebCore::Detail::SequenceConverter<IDLFloat>::convert): (WebCore::Detail::SequenceConverter<IDLUnrestrictedFloat>::convert): (WebCore::Detail::SequenceConverter<IDLDouble>::convert): (WebCore::Detail::SequenceConverter<IDLUnrestrictedDouble>::convert): (WebCore::Converter<IDLSequence<T>>::convert): (WebCore::JSConverter<IDLSequence<T>>::convert): (WebCore::Converter<IDLFrozenArray<T>>::convert): (WebCore::JSConverter<IDLFrozenArray<T>>::convert): * bindings/js/JSDOMConvertSerializedScriptValue.h: (WebCore::Converter<IDLSerializedScriptValue<T>>::convert): (WebCore::JSConverter<IDLSerializedScriptValue<T>>::convert): * bindings/js/JSDOMConvertStrings.cpp: (WebCore::stringToByteString): (WebCore::identifierToByteString): (WebCore::valueToByteString): (WebCore::identifierToUSVString): (WebCore::valueToUSVString): * bindings/js/JSDOMConvertStrings.h: (WebCore::Converter<IDLDOMString>::convert): (WebCore::JSConverter<IDLDOMString>::convert): (WebCore::Converter<IDLByteString>::convert): (WebCore::JSConverter<IDLByteString>::convert): (WebCore::Converter<IDLUSVString>::convert): (WebCore::JSConverter<IDLUSVString>::convert): (WebCore::Converter<IDLTreatNullAsEmptyAdaptor<T>>::convert): (WebCore::JSConverter<IDLTreatNullAsEmptyAdaptor<T>>::convert): (WebCore::Converter<IDLAtomStringAdaptor<T>>::convert): (WebCore::JSConverter<IDLAtomStringAdaptor<T>>::convert): (WebCore::Converter<IDLRequiresExistingAtomStringAdaptor<T>>::convert): (WebCore::JSConverter<IDLRequiresExistingAtomStringAdaptor<T>>::convert): * bindings/js/JSDOMConvertUnion.h: * bindings/js/JSDOMConvertVariadic.h: (WebCore::VariadicConverter::convert): (WebCore::convertVariadicArguments): * bindings/js/JSDOMConvertWebGL.cpp: (WebCore::convertToJSValue): * bindings/js/JSDOMConvertWebGL.h: (WebCore::convertToJSValue): (WebCore::JSConverter<IDLWebGLAny>::convert): (WebCore::JSConverter<IDLWebGLExtension>::convert): * bindings/js/JSDOMConvertXPathNSResolver.h: (WebCore::Converter<IDLXPathNSResolver<T>>::convert): (WebCore::JSConverter<IDLXPathNSResolver<T>>::convert): (WebCore::JSConverter<IDLXPathNSResolver<T>>::convertNewlyCreated): * bindings/js/JSDOMExceptionHandling.cpp: (WebCore::reportException): (WebCore::retrieveErrorMessage): (WebCore::reportCurrentException): (WebCore::createDOMException): (WebCore::propagateExceptionSlowPath): (WebCore::throwTypeError): (WebCore::throwNotSupportedError): (WebCore::throwInvalidStateError): (WebCore::throwSecurityError): (WebCore::throwArgumentMustBeEnumError): (WebCore::throwArgumentMustBeFunctionError): (WebCore::throwArgumentTypeError): (WebCore::throwAttributeTypeError): (WebCore::throwRequiredMemberTypeError): (WebCore::throwConstructorScriptExecutionContextUnavailableError): (WebCore::throwSequenceTypeError): (WebCore::throwNonFiniteTypeError): (WebCore::throwGetterTypeError): (WebCore::rejectPromiseWithGetterTypeError): (WebCore::throwSetterTypeError): (WebCore::throwThisTypeError): (WebCore::rejectPromiseWithThisTypeError): (WebCore::throwDOMSyntaxError): (WebCore::throwDataCloneError): * bindings/js/JSDOMExceptionHandling.h: (WebCore::propagateException): * bindings/js/JSDOMGlobalObject.cpp: (WebCore::makeThisTypeErrorForBuiltins): (WebCore::makeGetterTypeErrorForBuiltins): (WebCore::JSDOMGlobalObject::promiseRejectionTracker): (WebCore::callerGlobalObject): * bindings/js/JSDOMGlobalObject.h: * bindings/js/JSDOMGlobalObjectTask.cpp: * bindings/js/JSDOMIterator.cpp: (WebCore::addValueIterableMethods): * bindings/js/JSDOMIterator.h: (WebCore::jsPair): (WebCore::IteratorTraits>::asJS): (WebCore::appendForEachArguments): (WebCore::iteratorForEach): (WebCore::IteratorTraits>::next): * bindings/js/JSDOMMapLike.cpp: (WebCore::getBackingMap): (WebCore::createBackingMap): (WebCore::forwardAttributeGetterToBackingMap): (WebCore::forwardFunctionCallToBackingMap): (WebCore::forwardForEachCallToBackingMap): * bindings/js/JSDOMMapLike.h: (WebCore::DOMMapLike::set): (WebCore::synchronizeBackingMap): (WebCore::forwardSizeToMapLike): (WebCore::forwardEntriesToMapLike): (WebCore::forwardKeysToMapLike): (WebCore::forwardValuesToMapLike): (WebCore::forwardClearToMapLike): (WebCore::forwardForEachToMapLike): (WebCore::forwardGetToMapLike): (WebCore::forwardHasToMapLike): (WebCore::forwardAddToMapLike): (WebCore::forwardDeleteToMapLike): * bindings/js/JSDOMOperation.h: (WebCore::IDLOperation::call): (WebCore::IDLOperation::callStatic): * bindings/js/JSDOMOperationReturningPromise.h: (WebCore::IDLOperationReturningPromise::call): (WebCore::IDLOperationReturningPromise::callReturningOwnPromise): (WebCore::IDLOperationReturningPromise::callStatic): (WebCore::IDLOperationReturningPromise::callStaticReturningOwnPromise): * bindings/js/JSDOMPromise.cpp: (WebCore::callFunction): (WebCore::DOMPromise::whenPromiseIsSettled): (WebCore::DOMPromise::result const): (WebCore::DOMPromise::status const): * bindings/js/JSDOMPromiseDeferred.cpp: (WebCore::DeferredPromise::callFunction): (WebCore::DeferredPromise::reject): (WebCore::rejectPromiseWithExceptionIfAny): (WebCore::createDeferredPromise): (WebCore::createRejectedPromiseWithTypeError): (WebCore::parseAsJSON): (WebCore::fulfillPromiseWithJSON): (WebCore::fulfillPromiseWithArrayBuffer): * bindings/js/JSDOMPromiseDeferred.h: (WebCore::DeferredPromise::create): (WebCore::DeferredPromise::resolve): (WebCore::DeferredPromise::resolveWithNewlyCreated): (WebCore::DeferredPromise::resolveCallbackValueWithNewlyCreated): (WebCore::DeferredPromise::reject): (WebCore::DeferredPromise::resolveWithCallback): (WebCore::DeferredPromise::rejectWithCallback): (WebCore::callPromiseFunction): (WebCore::bindingPromiseFunctionAdapter): * bindings/js/JSDOMWindowBase.cpp: (WebCore::JSDOMWindowBase::updateDocument): (WebCore::shouldInterruptScriptToPreventInfiniteRecursionWhenClosingPage): (WebCore::toJS): (WebCore::incumbentDOMWindow): (WebCore::activeDOMWindow): (WebCore::firstDOMWindow): (WebCore::responsibleDocument): (WebCore::JSDOMWindowBase::moduleLoaderResolve): (WebCore::JSDOMWindowBase::moduleLoaderFetch): (WebCore::JSDOMWindowBase::moduleLoaderEvaluate): (WebCore::JSDOMWindowBase::moduleLoaderImportModule): (WebCore::JSDOMWindowBase::moduleLoaderCreateImportMetaProperties): (WebCore::tryAllocate): (WebCore::isResponseCorrect): (WebCore::handleResponseOnStreamingAction): (WebCore::JSDOMWindowBase::compileStreaming): (WebCore::JSDOMWindowBase::instantiateStreaming): * bindings/js/JSDOMWindowBase.h: (WebCore::toJS): * bindings/js/JSDOMWindowCustom.cpp: (WebCore::jsDOMWindowWebKit): (WebCore::jsDOMWindowGetOwnPropertySlotRestrictedAccess): (WebCore::JSDOMWindow::getOwnPropertySlot): (WebCore::JSDOMWindow::getOwnPropertySlotByIndex): (WebCore::JSDOMWindow::doPutPropertySecurityCheck): (WebCore::JSDOMWindow::put): (WebCore::JSDOMWindow::putByIndex): (WebCore::JSDOMWindow::deleteProperty): (WebCore::JSDOMWindow::deletePropertyByIndex): (WebCore::addCrossOriginOwnPropertyNames): (WebCore::addScopedChildrenIndexes): (WebCore::JSDOMWindow::getOwnPropertyNames): (WebCore::JSDOMWindow::defineOwnProperty): (WebCore::JSDOMWindow::getPrototype): (WebCore::JSDOMWindow::preventExtensions): (WebCore::JSDOMWindow::toStringName): (WebCore::JSDOMWindow::event const): (WebCore::DialogHandler::DialogHandler): (WebCore::DialogHandler::dialogCreated): (WebCore::DialogHandler::returnValue const): (WebCore::JSDOMWindow::showModalDialog): (WebCore::JSDOMWindow::queueMicrotask): (WebCore::JSDOMWindow::setOpener): (WebCore::JSDOMWindow::self const): (WebCore::JSDOMWindow::window const): (WebCore::JSDOMWindow::frames const): (WebCore::jsDOMWindowInstanceFunctionOpenDatabaseBody): (WebCore::IDLOperation<JSDOMWindow>::cast): (WebCore::jsDOMWindowInstanceFunctionOpenDatabase): (WebCore::JSDOMWindow::openDatabase const): (WebCore::JSDOMWindow::setOpenDatabase): * bindings/js/JSDOMWindowCustom.h: * bindings/js/JSDOMWindowProperties.cpp: (WebCore::jsDOMWindowPropertiesGetOwnPropertySlotNamedItemGetter): (WebCore::JSDOMWindowProperties::getOwnPropertySlot): (WebCore::JSDOMWindowProperties::getOwnPropertySlotByIndex): * bindings/js/JSDOMWindowProperties.h: * bindings/js/JSDOMWrapper.cpp: (WebCore::cloneAcrossWorlds): * bindings/js/JSDOMWrapper.h: * bindings/js/JSDOMWrapperCache.h: (WebCore::deprecatedGlobalObjectForPrototype): (WebCore::deprecatedGetDOMStructure): (WebCore::wrap): * bindings/js/JSDeprecatedCSSOMValueCustom.cpp: (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/js/JSDocumentCustom.cpp: (WebCore::createNewDocumentWrapper): (WebCore::cachedDocumentWrapper): (WebCore::reportMemoryForDocumentIfFrameless): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/js/JSDocumentCustom.h: * bindings/js/JSDocumentFragmentCustom.cpp: (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/js/JSElementCustom.cpp: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/js/JSErrorHandler.cpp: (WebCore::JSErrorHandler::handleEvent): * bindings/js/JSErrorHandler.h: (WebCore::createJSErrorHandler): * bindings/js/JSEventCustom.cpp: (WebCore::toJS): * bindings/js/JSEventListener.cpp: (WebCore::JSEventListener::handleEvent): (WebCore::createEventListenerForEventHandlerAttribute): (WebCore::setEventHandlerAttribute): (WebCore::setWindowEventHandlerAttribute): (WebCore::setDocumentEventHandlerAttribute): * bindings/js/JSEventListener.h: * bindings/js/JSEventTargetCustom.h: (WebCore::IDLOperation<JSEventTarget>::call): * bindings/js/JSExecState.cpp: (WebCore::JSExecState::didLeaveScriptContext): (WebCore::functionCallHandlerFromAnyThread): (WebCore::evaluateHandlerFromAnyThread): * bindings/js/JSExecState.h: (WebCore::JSExecState::currentState): (WebCore::JSExecState::call): (WebCore::JSExecState::evaluate): (WebCore::JSExecState::profiledCall): (WebCore::JSExecState::profiledEvaluate): (WebCore::JSExecState::runTask): (WebCore::JSExecState::loadModule): (WebCore::JSExecState::linkAndEvaluateModule): (WebCore::JSExecState::JSExecState): (WebCore::JSExecState::~JSExecState): (WebCore::JSExecState::setCurrentState): * bindings/js/JSExtendableMessageEventCustom.cpp: (WebCore::constructJSExtendableMessageEvent): (WebCore::JSExtendableMessageEvent::data const): * bindings/js/JSFileSystemEntryCustom.cpp: (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/js/JSHTMLCollectionCustom.cpp: (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/js/JSHTMLDocumentCustom.cpp: (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/js/JSHTMLElementCustom.cpp: (WebCore::constructJSHTMLElement): (WebCore::JSHTMLElement::pushEventHandlerScope const): * bindings/js/JSHistoryCustom.cpp: (WebCore::JSHistory::state const): * bindings/js/JSIDBCursorCustom.cpp: (WebCore::JSIDBCursor::key const): (WebCore::JSIDBCursor::primaryKey const): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/js/JSIDBCursorWithValueCustom.cpp: (WebCore::JSIDBCursorWithValue::value const): * bindings/js/JSIDBRequestCustom.cpp: (WebCore::JSIDBRequest::result const): * bindings/js/JSImageDataCustom.cpp: (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/js/JSLazyEventListener.cpp: (WebCore::JSLazyEventListener::initializeJSFunction const): * bindings/js/JSLocationCustom.cpp: (WebCore::getOwnPropertySlotCommon): (WebCore::JSLocation::getOwnPropertySlot): (WebCore::JSLocation::getOwnPropertySlotByIndex): (WebCore::putCommon): (WebCore::JSLocation::doPutPropertySecurityCheck): (WebCore::JSLocation::put): (WebCore::JSLocation::putByIndex): (WebCore::JSLocation::deleteProperty): (WebCore::JSLocation::deletePropertyByIndex): (WebCore::JSLocation::getOwnPropertyNames): (WebCore::JSLocation::defineOwnProperty): (WebCore::JSLocation::getPrototype): (WebCore::JSLocation::preventExtensions): (WebCore::JSLocation::toStringName): (WebCore::JSLocationPrototype::put): (WebCore::JSLocationPrototype::defineOwnProperty): * bindings/js/JSMediaStreamTrackCustom.cpp: (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/js/JSMessageEventCustom.cpp: (WebCore::JSMessageEvent::ports const): (WebCore::JSMessageEvent::data const): * bindings/js/JSMicrotaskCallback.h: (WebCore::JSMicrotaskCallback::call): * bindings/js/JSNodeCustom.cpp: (WebCore::JSNode::pushEventHandlerScope const): (WebCore::createWrapperInline): (WebCore::createWrapper): (WebCore::toJSNewlyCreated): (WebCore::willCreatePossiblyOrphanedTreeByRemovalSlowCase): * bindings/js/JSNodeCustom.h: (WebCore::toJS): (WebCore::JSNode::nodeType const): * bindings/js/JSNodeListCustom.cpp: (WebCore::toJSNewlyCreated): * bindings/js/JSNodeListCustom.h: (WebCore::toJS): * bindings/js/JSPaymentMethodChangeEventCustom.cpp: (WebCore::JSPaymentMethodChangeEvent::methodDetails const): * bindings/js/JSPaymentResponseCustom.cpp: (WebCore::JSPaymentResponse::details const): * bindings/js/JSPerformanceEntryCustom.cpp: (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/js/JSPluginElementFunctions.cpp: (WebCore::pluginScriptObject): (WebCore::pluginElementPropertyGetter): (WebCore::pluginElementCustomGetOwnPropertySlot): (WebCore::pluginElementCustomPut): (WebCore::callPlugin): * bindings/js/JSPluginElementFunctions.h: * bindings/js/JSPopStateEventCustom.cpp: (WebCore::JSPopStateEvent::state const): * bindings/js/JSReadableStreamSourceCustom.cpp: (WebCore::JSReadableStreamSource::start): (WebCore::JSReadableStreamSource::pull): (WebCore::JSReadableStreamSource::controller const): * bindings/js/JSRemoteDOMWindowCustom.cpp: (WebCore::JSRemoteDOMWindow::getOwnPropertySlot): (WebCore::JSRemoteDOMWindow::getOwnPropertySlotByIndex): (WebCore::JSRemoteDOMWindow::put): (WebCore::JSRemoteDOMWindow::putByIndex): (WebCore::JSRemoteDOMWindow::deleteProperty): (WebCore::JSRemoteDOMWindow::deletePropertyByIndex): (WebCore::JSRemoteDOMWindow::getOwnPropertyNames): (WebCore::JSRemoteDOMWindow::defineOwnProperty): (WebCore::JSRemoteDOMWindow::getPrototype): (WebCore::JSRemoteDOMWindow::preventExtensions): (WebCore::JSRemoteDOMWindow::toStringName): * bindings/js/JSSVGPathSegCustom.cpp: (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/js/JSServiceWorkerClientCustom.cpp: (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/js/JSStyleSheetCustom.cpp: (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/js/JSTextCustom.cpp: (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/js/JSTextTrackCueCustom.cpp: (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/js/JSTrackCustom.cpp: (WebCore::toJS): * bindings/js/JSTrackCustom.h: * bindings/js/JSTypedOMCSSStyleValueCustom.cpp: (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/js/JSValueInWrappedObject.h: (WebCore::cachedPropertyValue): * bindings/js/JSWebAnimationCustom.cpp: (WebCore::toJSNewlyCreated): (WebCore::toJS): (WebCore::constructJSWebAnimation): * bindings/js/JSWindowProxy.cpp: (WebCore::toJS): * bindings/js/JSWindowProxy.h: (WebCore::toJS): * bindings/js/JSWorkerGlobalScopeBase.cpp: (WebCore::toJS): * bindings/js/JSWorkerGlobalScopeBase.h: (WebCore::toJS): * bindings/js/JSWorkerGlobalScopeCustom.cpp: (WebCore::JSWorkerGlobalScope::queueMicrotask): * bindings/js/JSWorkletGlobalScopeBase.cpp: (WebCore::toJS): * bindings/js/JSWorkletGlobalScopeBase.h: (WebCore::toJS): * bindings/js/JSXMLDocumentCustom.cpp: (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/js/JSXMLHttpRequestCustom.cpp: (WebCore::JSXMLHttpRequest::response const): * bindings/js/JSXPathNSResolverCustom.cpp: (WebCore::JSXPathNSResolver::toWrapped): * bindings/js/ReadableStream.cpp: (WebCore::ReadableStream::create): (WebCore::ReadableStreamInternal::callFunction): (WebCore::ReadableStream::pipeTo): (WebCore::ReadableStream::tee): (WebCore::ReadableStream::lock): (WebCore::checkReadableStream): (WebCore::ReadableStream::isDisturbed): * bindings/js/ReadableStream.h: (WebCore::JSReadableStreamWrapperConverter::toWrapped): (WebCore::toJS): * bindings/js/ReadableStreamDefaultController.cpp: (WebCore::readableStreamCallFunction): (WebCore::ReadableStreamDefaultController::invoke): * bindings/js/ReadableStreamDefaultController.h: (WebCore::ReadableStreamDefaultController::close): (WebCore::ReadableStreamDefaultController::error): (WebCore::ReadableStreamDefaultController::enqueue): (WebCore::ReadableStreamDefaultController::globalExec const): Deleted. * bindings/js/ScheduledAction.cpp: (WebCore::ScheduledAction::executeFunctionInContext): * bindings/js/ScriptController.cpp: (WebCore::ScriptController::evaluateInWorld): (WebCore::ScriptController::loadModuleScriptInWorld): (WebCore::ScriptController::linkAndEvaluateModuleScriptInWorld): (WebCore::ScriptController::evaluateModule): (WebCore::jsValueToModuleKey): (WebCore::ScriptController::setupModuleScriptHandlers): (WebCore::ScriptController::canAccessFromCurrentOrigin): (WebCore::ScriptController::collectIsolatedContexts): (WebCore::ScriptController::jsObjectForPluginElement): (WebCore::ScriptController::executeIfJavaScriptURL): * bindings/js/ScriptController.h: * bindings/js/ScriptControllerMac.mm: (WebCore::ScriptController::javaScriptContext): * bindings/js/ScriptModuleLoader.cpp: (WebCore::ScriptModuleLoader::resolve): (WebCore::rejectToPropagateNetworkError): (WebCore::ScriptModuleLoader::fetch): (WebCore::ScriptModuleLoader::moduleURL): (WebCore::ScriptModuleLoader::evaluate): (WebCore::rejectPromise): (WebCore::ScriptModuleLoader::importModule): (WebCore::ScriptModuleLoader::createImportMetaProperties): (WebCore::ScriptModuleLoader::notifyFinished): * bindings/js/ScriptModuleLoader.h: * bindings/js/ScriptState.cpp: (WebCore::domWindowFromExecState): (WebCore::frameFromExecState): (WebCore::scriptExecutionContextFromExecState): (WebCore::mainWorldExecState): (WebCore::execStateFromNode): (WebCore::execStateFromPage): (WebCore::execStateFromWorkerGlobalScope): (WebCore::execStateFromWorkletGlobalScope): * bindings/js/ScriptState.h: * bindings/js/SerializedScriptValue.cpp: (WebCore::CloneBase::CloneBase): (WebCore::CloneBase::shouldTerminate): (WebCore::wrapCryptoKey): (WebCore::unwrapCryptoKey): (WebCore::CloneSerializer::serialize): (WebCore::CloneSerializer::CloneSerializer): (WebCore::CloneSerializer::fillTransferMap): (WebCore::CloneSerializer::getProperty): (WebCore::CloneSerializer::toJSArrayBuffer): (WebCore::CloneSerializer::dumpArrayBufferView): (WebCore::CloneSerializer::dumpDOMPoint): (WebCore::CloneSerializer::dumpDOMRect): (WebCore::CloneSerializer::dumpDOMMatrix): (WebCore::CloneSerializer::dumpIfTerminal): (WebCore::CloneSerializer::write): (WebCore::CloneDeserializer::deserialize): (WebCore::CloneDeserializer::CachedString::jsString): (WebCore::CloneDeserializer::CloneDeserializer): (WebCore::CloneDeserializer::putProperty): (WebCore::CloneDeserializer::readArrayBufferView): (WebCore::CloneDeserializer::getJSValue): (WebCore::CloneDeserializer::readDOMPoint): (WebCore::CloneDeserializer::readDOMMatrix): (WebCore::CloneDeserializer::readDOMRect): (WebCore::CloneDeserializer::readDOMQuad): (WebCore::CloneDeserializer::readRTCCertificate): (WebCore::CloneDeserializer::readTerminal): (WebCore::maybeThrowExceptionIfSerializationFailed): (WebCore::SerializedScriptValue::create): (WebCore::SerializedScriptValue::deserialize): * bindings/js/SerializedScriptValue.h: * bindings/js/StructuredClone.cpp: (WebCore::cloneArrayBufferImpl): (WebCore::structuredCloneArrayBufferView): * bindings/js/StructuredClone.h: * bindings/js/WebCoreTypedArrayController.cpp: (WebCore::WebCoreTypedArrayController::toJS): * bindings/js/WebCoreTypedArrayController.h: * bindings/js/WorkerScriptController.cpp: (WebCore::WorkerScriptController::evaluate): (WebCore::WorkerScriptController::setException): (WebCore::WorkerScriptController::scheduleExecutionTermination): (WebCore::WorkerScriptController::attachDebugger): (WebCore::WorkerScriptController::detachDebugger): * bindings/scripts/CodeGeneratorJS.pm: (GenerateGetOwnPropertySlot): (GenerateGetOwnPropertySlotByIndex): (GenerateGetOwnPropertyNames): (GenerateInvokeIndexedPropertySetter): (GenerateInvokeNamedPropertySetter): (GeneratePut): (GeneratePutByIndex): (GenerateDefineOwnProperty): (GenerateDeletePropertyCommon): (GenerateDeleteProperty): (GenerateDeletePropertyByIndex): (GetArgumentExceptionFunction): (GetArgumentExceptionThrower): (GetAttributeExceptionFunction): (GetAttributeExceptionThrower): (AddAdditionalArgumentsForImplementationCall): (GenerateEnumerationImplementationContent): (GenerateEnumerationHeaderContent): (GenerateDefaultValue): (GenerateDictionaryHeaderContent): (GenerateDictionaryImplementationContent): (GenerateHeader): (GenerateOverloadDispatcher): (addUnscopableProperties): (GenerateImplementation): (GenerateAttributeGetterBodyDefinition): (GenerateAttributeGetterTrampolineDefinition): (GenerateAttributeSetterBodyDefinition): (GenerateAttributeSetterTrampolineDefinition): (GenerateOperationTrampolineDefinition): (GenerateOperationBodyDefinition): (GenerateOperationDefinition): (GenerateSerializerDefinition): (GenerateLegacyCallerDefinitions): (GenerateLegacyCallerDefinition): (GenerateCallWithUsingReferences): (GenerateCallWithUsingPointers): (GenerateConstructorCallWithUsingPointers): (GenerateCallWith): (GenerateArgumentsCountCheck): (GenerateParametersCheck): (GenerateCallbackImplementationContent): (GenerateImplementationFunctionCall): (GenerateImplementationCustomFunctionCall): (GenerateIterableDefinition): (JSValueToNative): (ToNativeForFunctionWithoutTypeCheck): (NativeToJSValueDOMConvertNeedsState): (NativeToJSValueDOMConvertNeedsGlobalObject): (NativeToJSValueUsingReferences): (NativeToJSValueUsingPointers): (NativeToJSValue): (GeneratePrototypeDeclaration): (GenerateConstructorDefinitions): (GenerateConstructorDefinition): (GenerateConstructorHelperMethods): * bindings/scripts/test/JS/JSInterfaceName.cpp: (WebCore::jsInterfaceNameConstructor): (WebCore::setJSInterfaceNameConstructor): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSInterfaceName.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSMapLike.cpp: (WebCore::JSMapLike::finishCreation): (WebCore::IDLAttribute<JSMapLike>::cast): (WebCore::IDLOperation<JSMapLike>::cast): (WebCore::jsMapLikeConstructor): (WebCore::setJSMapLikeConstructor): (WebCore::jsMapLikeSizeGetter): (WebCore::jsMapLikeSize): (WebCore::jsMapLikePrototypeFunctionGetBody): (WebCore::jsMapLikePrototypeFunctionGet): (WebCore::jsMapLikePrototypeFunctionHasBody): (WebCore::jsMapLikePrototypeFunctionHas): (WebCore::jsMapLikePrototypeFunctionEntriesBody): (WebCore::jsMapLikePrototypeFunctionEntries): (WebCore::jsMapLikePrototypeFunctionKeysBody): (WebCore::jsMapLikePrototypeFunctionKeys): (WebCore::jsMapLikePrototypeFunctionValuesBody): (WebCore::jsMapLikePrototypeFunctionValues): (WebCore::jsMapLikePrototypeFunctionForEachBody): (WebCore::jsMapLikePrototypeFunctionForEach): (WebCore::jsMapLikePrototypeFunctionAddBody): (WebCore::jsMapLikePrototypeFunctionAdd): (WebCore::jsMapLikePrototypeFunctionClearBody): (WebCore::jsMapLikePrototypeFunctionClear): (WebCore::jsMapLikePrototypeFunctionDeleteBody): (WebCore::jsMapLikePrototypeFunctionDelete): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSMapLike.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSReadOnlyMapLike.cpp: (WebCore::JSReadOnlyMapLike::finishCreation): (WebCore::IDLAttribute<JSReadOnlyMapLike>::cast): (WebCore::IDLOperation<JSReadOnlyMapLike>::cast): (WebCore::jsReadOnlyMapLikeConstructor): (WebCore::setJSReadOnlyMapLikeConstructor): (WebCore::jsReadOnlyMapLikeSizeGetter): (WebCore::jsReadOnlyMapLikeSize): (WebCore::jsReadOnlyMapLikePrototypeFunctionGetBody): (WebCore::jsReadOnlyMapLikePrototypeFunctionGet): (WebCore::jsReadOnlyMapLikePrototypeFunctionHasBody): (WebCore::jsReadOnlyMapLikePrototypeFunctionHas): (WebCore::jsReadOnlyMapLikePrototypeFunctionEntriesBody): (WebCore::jsReadOnlyMapLikePrototypeFunctionEntries): (WebCore::jsReadOnlyMapLikePrototypeFunctionKeysBody): (WebCore::jsReadOnlyMapLikePrototypeFunctionKeys): (WebCore::jsReadOnlyMapLikePrototypeFunctionValuesBody): (WebCore::jsReadOnlyMapLikePrototypeFunctionValues): (WebCore::jsReadOnlyMapLikePrototypeFunctionForEachBody): (WebCore::jsReadOnlyMapLikePrototypeFunctionForEach): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSReadOnlyMapLike.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp: (WebCore::IDLAttribute<JSTestActiveDOMObject>::cast): (WebCore::IDLOperation<JSTestActiveDOMObject>::cast): (WebCore::jsTestActiveDOMObjectConstructor): (WebCore::setJSTestActiveDOMObjectConstructor): (WebCore::jsTestActiveDOMObjectExcitingAttrGetter): (WebCore::jsTestActiveDOMObjectExcitingAttr): (WebCore::jsTestActiveDOMObjectPrototypeFunctionExcitingFunctionBody): (WebCore::jsTestActiveDOMObjectPrototypeFunctionExcitingFunction): (WebCore::jsTestActiveDOMObjectPrototypeFunctionPostMessageBody): (WebCore::jsTestActiveDOMObjectPrototypeFunctionPostMessage): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestActiveDOMObject.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestCEReactions.cpp: (WebCore::IDLAttribute<JSTestCEReactions>::cast): (WebCore::IDLOperation<JSTestCEReactions>::cast): (WebCore::jsTestCEReactionsConstructor): (WebCore::setJSTestCEReactionsConstructor): (WebCore::jsTestCEReactionsAttributeWithCEReactionsGetter): (WebCore::jsTestCEReactionsAttributeWithCEReactions): (WebCore::setJSTestCEReactionsAttributeWithCEReactionsSetter): (WebCore::setJSTestCEReactionsAttributeWithCEReactions): (WebCore::jsTestCEReactionsReflectAttributeWithCEReactionsGetter): (WebCore::jsTestCEReactionsReflectAttributeWithCEReactions): (WebCore::setJSTestCEReactionsReflectAttributeWithCEReactionsSetter): (WebCore::setJSTestCEReactionsReflectAttributeWithCEReactions): (WebCore::jsTestCEReactionsStringifierAttributeGetter): (WebCore::jsTestCEReactionsStringifierAttribute): (WebCore::setJSTestCEReactionsStringifierAttributeSetter): (WebCore::setJSTestCEReactionsStringifierAttribute): (WebCore::jsTestCEReactionsAttributeWithCEReactionsNotNeededGetter): (WebCore::jsTestCEReactionsAttributeWithCEReactionsNotNeeded): (WebCore::setJSTestCEReactionsAttributeWithCEReactionsNotNeededSetter): (WebCore::setJSTestCEReactionsAttributeWithCEReactionsNotNeeded): (WebCore::jsTestCEReactionsReflectAttributeWithCEReactionsNotNeededGetter): (WebCore::jsTestCEReactionsReflectAttributeWithCEReactionsNotNeeded): (WebCore::setJSTestCEReactionsReflectAttributeWithCEReactionsNotNeededSetter): (WebCore::setJSTestCEReactionsReflectAttributeWithCEReactionsNotNeeded): (WebCore::jsTestCEReactionsStringifierAttributeNotNeededGetter): (WebCore::jsTestCEReactionsStringifierAttributeNotNeeded): (WebCore::setJSTestCEReactionsStringifierAttributeNotNeededSetter): (WebCore::setJSTestCEReactionsStringifierAttributeNotNeeded): (WebCore::jsTestCEReactionsPrototypeFunctionMethodWithCEReactionsBody): (WebCore::jsTestCEReactionsPrototypeFunctionMethodWithCEReactions): (WebCore::jsTestCEReactionsPrototypeFunctionMethodWithCEReactionsNotNeededBody): (WebCore::jsTestCEReactionsPrototypeFunctionMethodWithCEReactionsNotNeeded): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestCEReactions.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp: (WebCore::IDLAttribute<JSTestCEReactionsStringifier>::cast): (WebCore::IDLOperation<JSTestCEReactionsStringifier>::cast): (WebCore::jsTestCEReactionsStringifierConstructor): (WebCore::setJSTestCEReactionsStringifierConstructor): (WebCore::jsTestCEReactionsStringifierValueGetter): (WebCore::jsTestCEReactionsStringifierValue): (WebCore::setJSTestCEReactionsStringifierValueSetter): (WebCore::setJSTestCEReactionsStringifierValue): (WebCore::jsTestCEReactionsStringifierValueWithoutReactionsGetter): (WebCore::jsTestCEReactionsStringifierValueWithoutReactions): (WebCore::setJSTestCEReactionsStringifierValueWithoutReactionsSetter): (WebCore::setJSTestCEReactionsStringifierValueWithoutReactions): (WebCore::jsTestCEReactionsStringifierPrototypeFunctionToStringBody): (WebCore::jsTestCEReactionsStringifierPrototypeFunctionToString): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestCEReactionsStringifier.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestCallTracer.cpp: (WebCore::IDLAttribute<JSTestCallTracer>::cast): (WebCore::IDLOperation<JSTestCallTracer>::cast): (WebCore::jsTestCallTracerConstructor): (WebCore::setJSTestCallTracerConstructor): (WebCore::jsTestCallTracerTestAttributeInterfaceGetter): (WebCore::jsTestCallTracerTestAttributeInterface): (WebCore::setJSTestCallTracerTestAttributeInterfaceSetter): (WebCore::setJSTestCallTracerTestAttributeInterface): (WebCore::jsTestCallTracerTestAttributeSpecifiedGetter): (WebCore::jsTestCallTracerTestAttributeSpecified): (WebCore::setJSTestCallTracerTestAttributeSpecifiedSetter): (WebCore::setJSTestCallTracerTestAttributeSpecified): (WebCore::jsTestCallTracerTestAttributeWithVariantGetter): (WebCore::jsTestCallTracerTestAttributeWithVariant): (WebCore::setJSTestCallTracerTestAttributeWithVariantSetter): (WebCore::setJSTestCallTracerTestAttributeWithVariant): (WebCore::jsTestCallTracerTestReadonlyAttributeGetter): (WebCore::jsTestCallTracerTestReadonlyAttribute): (WebCore::jsTestCallTracerPrototypeFunctionTestOperationInterfaceBody): (WebCore::jsTestCallTracerPrototypeFunctionTestOperationInterface): (WebCore::jsTestCallTracerPrototypeFunctionTestOperationSpecifiedBody): (WebCore::jsTestCallTracerPrototypeFunctionTestOperationSpecified): (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithArgumentsBody): (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithArguments): (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithNullableArgumentBody): (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithNullableArgument): (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithVariantArgumentBody): (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithVariantArgument): (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithNullableVariantArgumentBody): (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithNullableVariantArgument): (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithOptionalVariantArgumentBody): (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithOptionalVariantArgument): (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithDefaultVariantArgumentBody): (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithDefaultVariantArgument): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestCallTracer.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestCallbackFunction.cpp: (WebCore::JSTestCallbackFunction::handleEvent): * bindings/scripts/test/JS/JSTestCallbackFunctionRethrow.cpp: (WebCore::JSTestCallbackFunctionRethrow::handleEvent): * bindings/scripts/test/JS/JSTestCallbackFunctionWithThisObject.cpp: (WebCore::JSTestCallbackFunctionWithThisObject::handleEvent): * bindings/scripts/test/JS/JSTestCallbackFunctionWithTypedefs.cpp: (WebCore::JSTestCallbackFunctionWithTypedefs::handleEvent): * bindings/scripts/test/JS/JSTestCallbackInterface.cpp: (WebCore::convertEnumerationToJS): (WebCore::parseEnumeration<TestCallbackInterface::Enum>): (WebCore::convertDictionary<TestCallbackInterface::Dictionary>): (WebCore::JSTestCallbackInterface::callbackWithNoParam): (WebCore::JSTestCallbackInterface::callbackWithArrayParam): (WebCore::JSTestCallbackInterface::callbackWithSerializedScriptValueParam): (WebCore::JSTestCallbackInterface::callbackWithStringList): (WebCore::JSTestCallbackInterface::callbackWithBoolean): (WebCore::JSTestCallbackInterface::callbackRequiresThisToPass): (WebCore::JSTestCallbackInterface::callbackWithAReturnValue): (WebCore::JSTestCallbackInterface::callbackThatRethrowsExceptions): (WebCore::JSTestCallbackInterface::callbackThatSkipsInvokeCheck): (WebCore::JSTestCallbackInterface::callbackWithThisObject): * bindings/scripts/test/JS/JSTestCallbackInterface.h: * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp: (WebCore::jsTestClassWithJSBuiltinConstructorConstructor): (WebCore::setJSTestClassWithJSBuiltinConstructorConstructor): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestDOMJIT.cpp: (WebCore::IDLAttribute<JSTestDOMJIT>::cast): (WebCore::IDLOperation<JSTestDOMJIT>::cast): (WebCore::jsTestDOMJITConstructor): (WebCore::setJSTestDOMJITConstructor): (WebCore::jsTestDOMJITAnyAttrGetter): (WebCore::jsTestDOMJITAnyAttr): (WebCore::jsTestDOMJITBooleanAttrGetter): (WebCore::jsTestDOMJITBooleanAttr): (WebCore::jsTestDOMJITByteAttrGetter): (WebCore::jsTestDOMJITByteAttr): (WebCore::jsTestDOMJITOctetAttrGetter): (WebCore::jsTestDOMJITOctetAttr): (WebCore::jsTestDOMJITShortAttrGetter): (WebCore::jsTestDOMJITShortAttr): (WebCore::jsTestDOMJITUnsignedShortAttrGetter): (WebCore::jsTestDOMJITUnsignedShortAttr): (WebCore::jsTestDOMJITLongAttrGetter): (WebCore::jsTestDOMJITLongAttr): (WebCore::jsTestDOMJITUnsignedLongAttrGetter): (WebCore::jsTestDOMJITUnsignedLongAttr): (WebCore::jsTestDOMJITLongLongAttrGetter): (WebCore::jsTestDOMJITLongLongAttr): (WebCore::jsTestDOMJITUnsignedLongLongAttrGetter): (WebCore::jsTestDOMJITUnsignedLongLongAttr): (WebCore::jsTestDOMJITFloatAttrGetter): (WebCore::jsTestDOMJITFloatAttr): (WebCore::jsTestDOMJITUnrestrictedFloatAttrGetter): (WebCore::jsTestDOMJITUnrestrictedFloatAttr): (WebCore::jsTestDOMJITDoubleAttrGetter): (WebCore::jsTestDOMJITDoubleAttr): (WebCore::jsTestDOMJITUnrestrictedDoubleAttrGetter): (WebCore::jsTestDOMJITUnrestrictedDoubleAttr): (WebCore::jsTestDOMJITDomStringAttrGetter): (WebCore::jsTestDOMJITDomStringAttr): (WebCore::jsTestDOMJITByteStringAttrGetter): (WebCore::jsTestDOMJITByteStringAttr): (WebCore::jsTestDOMJITUsvStringAttrGetter): (WebCore::jsTestDOMJITUsvStringAttr): (WebCore::jsTestDOMJITNodeAttrGetter): (WebCore::jsTestDOMJITNodeAttr): (WebCore::jsTestDOMJITBooleanNullableAttrGetter): (WebCore::jsTestDOMJITBooleanNullableAttr): (WebCore::jsTestDOMJITByteNullableAttrGetter): (WebCore::jsTestDOMJITByteNullableAttr): (WebCore::jsTestDOMJITOctetNullableAttrGetter): (WebCore::jsTestDOMJITOctetNullableAttr): (WebCore::jsTestDOMJITShortNullableAttrGetter): (WebCore::jsTestDOMJITShortNullableAttr): (WebCore::jsTestDOMJITUnsignedShortNullableAttrGetter): (WebCore::jsTestDOMJITUnsignedShortNullableAttr): (WebCore::jsTestDOMJITLongNullableAttrGetter): (WebCore::jsTestDOMJITLongNullableAttr): (WebCore::jsTestDOMJITUnsignedLongNullableAttrGetter): (WebCore::jsTestDOMJITUnsignedLongNullableAttr): (WebCore::jsTestDOMJITLongLongNullableAttrGetter): (WebCore::jsTestDOMJITLongLongNullableAttr): (WebCore::jsTestDOMJITUnsignedLongLongNullableAttrGetter): (WebCore::jsTestDOMJITUnsignedLongLongNullableAttr): (WebCore::jsTestDOMJITFloatNullableAttrGetter): (WebCore::jsTestDOMJITFloatNullableAttr): (WebCore::jsTestDOMJITUnrestrictedFloatNullableAttrGetter): (WebCore::jsTestDOMJITUnrestrictedFloatNullableAttr): (WebCore::jsTestDOMJITDoubleNullableAttrGetter): (WebCore::jsTestDOMJITDoubleNullableAttr): (WebCore::jsTestDOMJITUnrestrictedDoubleNullableAttrGetter): (WebCore::jsTestDOMJITUnrestrictedDoubleNullableAttr): (WebCore::jsTestDOMJITDomStringNullableAttrGetter): (WebCore::jsTestDOMJITDomStringNullableAttr): (WebCore::jsTestDOMJITByteStringNullableAttrGetter): (WebCore::jsTestDOMJITByteStringNullableAttr): (WebCore::jsTestDOMJITUsvStringNullableAttrGetter): (WebCore::jsTestDOMJITUsvStringNullableAttr): (WebCore::jsTestDOMJITNodeNullableAttrGetter): (WebCore::jsTestDOMJITNodeNullableAttr): (WebCore::jsTestDOMJITPrototypeFunctionGetAttributeBody): (WebCore::jsTestDOMJITPrototypeFunctionGetAttribute): (WebCore::jsTestDOMJITPrototypeFunctionGetAttributeWithoutTypeCheck): (WebCore::jsTestDOMJITPrototypeFunctionItemBody): (WebCore::jsTestDOMJITPrototypeFunctionItem): (WebCore::jsTestDOMJITPrototypeFunctionItemWithoutTypeCheck): (WebCore::jsTestDOMJITPrototypeFunctionHasAttributeBody): (WebCore::jsTestDOMJITPrototypeFunctionHasAttribute): (WebCore::jsTestDOMJITPrototypeFunctionHasAttributeWithoutTypeCheck): (WebCore::jsTestDOMJITPrototypeFunctionGetElementByIdBody): (WebCore::jsTestDOMJITPrototypeFunctionGetElementById): (WebCore::jsTestDOMJITPrototypeFunctionGetElementByIdWithoutTypeCheck): (WebCore::jsTestDOMJITPrototypeFunctionGetElementsByNameBody): (WebCore::jsTestDOMJITPrototypeFunctionGetElementsByName): (WebCore::jsTestDOMJITPrototypeFunctionGetElementsByNameWithoutTypeCheck): * bindings/scripts/test/JS/JSTestDerivedDictionary.cpp: (WebCore::convertDictionary<TestDerivedDictionary>): (WebCore::convertDictionaryToJS): * bindings/scripts/test/JS/JSTestDerivedDictionary.h: * bindings/scripts/test/JS/JSTestEnabledBySetting.cpp: (WebCore::JSTestEnabledBySettingPrototype::finishCreation): (WebCore::IDLAttribute<JSTestEnabledBySetting>::cast): (WebCore::IDLOperation<JSTestEnabledBySetting>::cast): (WebCore::jsTestEnabledBySettingConstructor): (WebCore::setJSTestEnabledBySettingConstructor): (WebCore::jsTestEnabledBySettingTestSubObjEnabledBySettingConstructorGetter): (WebCore::jsTestEnabledBySettingTestSubObjEnabledBySettingConstructor): (WebCore::setJSTestEnabledBySettingTestSubObjEnabledBySettingConstructorSetter): (WebCore::setJSTestEnabledBySettingTestSubObjEnabledBySettingConstructor): (WebCore::jsTestEnabledBySettingEnabledBySettingAttributeGetter): (WebCore::jsTestEnabledBySettingEnabledBySettingAttribute): (WebCore::setJSTestEnabledBySettingEnabledBySettingAttributeSetter): (WebCore::setJSTestEnabledBySettingEnabledBySettingAttribute): (WebCore::jsTestEnabledBySettingPrototypeFunctionEnabledBySettingOperationBody): (WebCore::jsTestEnabledBySettingPrototypeFunctionEnabledBySettingOperation): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestEnabledBySetting.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestEnabledForContext.cpp: (WebCore::IDLAttribute<JSTestEnabledForContext>::cast): (WebCore::jsTestEnabledForContextConstructor): (WebCore::setJSTestEnabledForContextConstructor): (WebCore::jsTestEnabledForContextTestSubObjEnabledForContextConstructorGetter): (WebCore::jsTestEnabledForContextTestSubObjEnabledForContextConstructor): (WebCore::setJSTestEnabledForContextTestSubObjEnabledForContextConstructorSetter): (WebCore::setJSTestEnabledForContextTestSubObjEnabledForContextConstructor): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestEnabledForContext.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestEventConstructor.cpp: (WebCore::convertDictionary<TestEventConstructor::Init>): (WebCore::JSTestEventConstructorConstructor::construct): (WebCore::IDLAttribute<JSTestEventConstructor>::cast): (WebCore::jsTestEventConstructorConstructor): (WebCore::setJSTestEventConstructorConstructor): (WebCore::jsTestEventConstructorAttr1Getter): (WebCore::jsTestEventConstructorAttr1): (WebCore::jsTestEventConstructorAttr2Getter): (WebCore::jsTestEventConstructorAttr2): (WebCore::jsTestEventConstructorAttr3Getter): (WebCore::jsTestEventConstructorAttr3): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestEventConstructor.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestEventTarget.cpp: (WebCore::JSTestEventTarget::getOwnPropertySlot): (WebCore::JSTestEventTarget::getOwnPropertySlotByIndex): (WebCore::JSTestEventTarget::getOwnPropertyNames): (WebCore::IDLOperation<JSTestEventTarget>::cast): (WebCore::jsTestEventTargetConstructor): (WebCore::setJSTestEventTargetConstructor): (WebCore::jsTestEventTargetPrototypeFunctionItemBody): (WebCore::jsTestEventTargetPrototypeFunctionItem): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestEventTarget.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestException.cpp: (WebCore::IDLAttribute<JSTestException>::cast): (WebCore::jsTestExceptionConstructor): (WebCore::setJSTestExceptionConstructor): (WebCore::jsTestExceptionNameGetter): (WebCore::jsTestExceptionName): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestException.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp: (WebCore::JSTestGenerateIsReachablePrototype::finishCreation): (WebCore::IDLAttribute<JSTestGenerateIsReachable>::cast): (WebCore::jsTestGenerateIsReachableConstructor): (WebCore::setJSTestGenerateIsReachableConstructor): (WebCore::jsTestGenerateIsReachableASecretAttributeGetter): (WebCore::jsTestGenerateIsReachableASecretAttribute): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestGenerateIsReachable.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestGlobalObject.cpp: (WebCore::IDLAttribute<JSTestGlobalObject>::cast): (WebCore::IDLOperation<JSTestGlobalObject>::cast): (WebCore::jsTestGlobalObjectConstructor): (WebCore::setJSTestGlobalObjectConstructor): (WebCore::jsTestGlobalObjectRegularAttributeGetter): (WebCore::jsTestGlobalObjectRegularAttribute): (WebCore::setJSTestGlobalObjectRegularAttributeSetter): (WebCore::setJSTestGlobalObjectRegularAttribute): (WebCore::jsTestGlobalObjectPublicAndPrivateAttributeGetter): (WebCore::jsTestGlobalObjectPublicAndPrivateAttribute): (WebCore::setJSTestGlobalObjectPublicAndPrivateAttributeSetter): (WebCore::setJSTestGlobalObjectPublicAndPrivateAttribute): (WebCore::jsTestGlobalObjectPublicAndPrivateConditionalAttributeGetter): (WebCore::jsTestGlobalObjectPublicAndPrivateConditionalAttribute): (WebCore::setJSTestGlobalObjectPublicAndPrivateConditionalAttributeSetter): (WebCore::setJSTestGlobalObjectPublicAndPrivateConditionalAttribute): (WebCore::jsTestGlobalObjectEnabledAtRuntimeAttributeGetter): (WebCore::jsTestGlobalObjectEnabledAtRuntimeAttribute): (WebCore::setJSTestGlobalObjectEnabledAtRuntimeAttributeSetter): (WebCore::setJSTestGlobalObjectEnabledAtRuntimeAttribute): (WebCore::jsTestGlobalObjectTestCEReactionsConstructorGetter): (WebCore::jsTestGlobalObjectTestCEReactionsConstructor): (WebCore::setJSTestGlobalObjectTestCEReactionsConstructorSetter): (WebCore::setJSTestGlobalObjectTestCEReactionsConstructor): (WebCore::jsTestGlobalObjectTestCEReactionsStringifierConstructorGetter): (WebCore::jsTestGlobalObjectTestCEReactionsStringifierConstructor): (WebCore::setJSTestGlobalObjectTestCEReactionsStringifierConstructorSetter): (WebCore::setJSTestGlobalObjectTestCEReactionsStringifierConstructor): (WebCore::jsTestGlobalObjectTestCallTracerConstructorGetter): (WebCore::jsTestGlobalObjectTestCallTracerConstructor): (WebCore::setJSTestGlobalObjectTestCallTracerConstructorSetter): (WebCore::setJSTestGlobalObjectTestCallTracerConstructor): (WebCore::jsTestGlobalObjectTestCallbackInterfaceConstructorGetter): (WebCore::jsTestGlobalObjectTestCallbackInterfaceConstructor): (WebCore::setJSTestGlobalObjectTestCallbackInterfaceConstructorSetter): (WebCore::setJSTestGlobalObjectTestCallbackInterfaceConstructor): (WebCore::jsTestGlobalObjectTestClassWithJSBuiltinConstructorConstructorGetter): (WebCore::jsTestGlobalObjectTestClassWithJSBuiltinConstructorConstructor): (WebCore::setJSTestGlobalObjectTestClassWithJSBuiltinConstructorConstructorSetter): (WebCore::setJSTestGlobalObjectTestClassWithJSBuiltinConstructorConstructor): (WebCore::jsTestGlobalObjectTestDOMJITConstructorGetter): (WebCore::jsTestGlobalObjectTestDOMJITConstructor): (WebCore::setJSTestGlobalObjectTestDOMJITConstructorSetter): (WebCore::setJSTestGlobalObjectTestDOMJITConstructor): (WebCore::jsTestGlobalObjectTestDomainSecurityConstructorGetter): (WebCore::jsTestGlobalObjectTestDomainSecurityConstructor): (WebCore::setJSTestGlobalObjectTestDomainSecurityConstructorSetter): (WebCore::setJSTestGlobalObjectTestDomainSecurityConstructor): (WebCore::jsTestGlobalObjectTestEnabledBySettingConstructorGetter): (WebCore::jsTestGlobalObjectTestEnabledBySettingConstructor): (WebCore::setJSTestGlobalObjectTestEnabledBySettingConstructorSetter): (WebCore::setJSTestGlobalObjectTestEnabledBySettingConstructor): (WebCore::jsTestGlobalObjectTestEnabledForContextConstructorGetter): (WebCore::jsTestGlobalObjectTestEnabledForContextConstructor): (WebCore::setJSTestGlobalObjectTestEnabledForContextConstructorSetter): (WebCore::setJSTestGlobalObjectTestEnabledForContextConstructor): (WebCore::jsTestGlobalObjectTestEventConstructorConstructorGetter): (WebCore::jsTestGlobalObjectTestEventConstructorConstructor): (WebCore::setJSTestGlobalObjectTestEventConstructorConstructorSetter): (WebCore::setJSTestGlobalObjectTestEventConstructorConstructor): (WebCore::jsTestGlobalObjectTestEventTargetConstructorGetter): (WebCore::jsTestGlobalObjectTestEventTargetConstructor): (WebCore::setJSTestGlobalObjectTestEventTargetConstructorSetter): (WebCore::setJSTestGlobalObjectTestEventTargetConstructor): (WebCore::jsTestGlobalObjectTestExceptionConstructorGetter): (WebCore::jsTestGlobalObjectTestExceptionConstructor): (WebCore::setJSTestGlobalObjectTestExceptionConstructorSetter): (WebCore::setJSTestGlobalObjectTestExceptionConstructor): (WebCore::jsTestGlobalObjectTestGenerateIsReachableConstructorGetter): (WebCore::jsTestGlobalObjectTestGenerateIsReachableConstructor): (WebCore::setJSTestGlobalObjectTestGenerateIsReachableConstructorSetter): (WebCore::setJSTestGlobalObjectTestGenerateIsReachableConstructor): (WebCore::jsTestGlobalObjectTestGlobalObjectConstructorGetter): (WebCore::jsTestGlobalObjectTestGlobalObjectConstructor): (WebCore::setJSTestGlobalObjectTestGlobalObjectConstructorSetter): (WebCore::setJSTestGlobalObjectTestGlobalObjectConstructor): (WebCore::jsTestGlobalObjectTestIndexedSetterNoIdentifierConstructorGetter): (WebCore::jsTestGlobalObjectTestIndexedSetterNoIdentifierConstructor): (WebCore::setJSTestGlobalObjectTestIndexedSetterNoIdentifierConstructorSetter): (WebCore::setJSTestGlobalObjectTestIndexedSetterNoIdentifierConstructor): (WebCore::jsTestGlobalObjectTestIndexedSetterThrowingExceptionConstructorGetter): (WebCore::jsTestGlobalObjectTestIndexedSetterThrowingExceptionConstructor): (WebCore::setJSTestGlobalObjectTestIndexedSetterThrowingExceptionConstructorSetter): (WebCore::setJSTestGlobalObjectTestIndexedSetterThrowingExceptionConstructor): (WebCore::jsTestGlobalObjectTestIndexedSetterWithIdentifierConstructorGetter): (WebCore::jsTestGlobalObjectTestIndexedSetterWithIdentifierConstructor): (WebCore::setJSTestGlobalObjectTestIndexedSetterWithIdentifierConstructorSetter): (WebCore::setJSTestGlobalObjectTestIndexedSetterWithIdentifierConstructor): (WebCore::jsTestGlobalObjectTestInterfaceConstructorGetter): (WebCore::jsTestGlobalObjectTestInterfaceConstructor): (WebCore::setJSTestGlobalObjectTestInterfaceConstructorSetter): (WebCore::setJSTestGlobalObjectTestInterfaceConstructor): (WebCore::jsTestGlobalObjectTestInterfaceLeadingUnderscoreConstructorGetter): (WebCore::jsTestGlobalObjectTestInterfaceLeadingUnderscoreConstructor): (WebCore::setJSTestGlobalObjectTestInterfaceLeadingUnderscoreConstructorSetter): (WebCore::setJSTestGlobalObjectTestInterfaceLeadingUnderscoreConstructor): (WebCore::jsTestGlobalObjectTestIterableConstructorGetter): (WebCore::jsTestGlobalObjectTestIterableConstructor): (WebCore::setJSTestGlobalObjectTestIterableConstructorSetter): (WebCore::setJSTestGlobalObjectTestIterableConstructor): (WebCore::jsTestGlobalObjectTestJSBuiltinConstructorConstructorGetter): (WebCore::jsTestGlobalObjectTestJSBuiltinConstructorConstructor): (WebCore::setJSTestGlobalObjectTestJSBuiltinConstructorConstructorSetter): (WebCore::setJSTestGlobalObjectTestJSBuiltinConstructorConstructor): (WebCore::jsTestGlobalObjectTestMapLikeConstructorGetter): (WebCore::jsTestGlobalObjectTestMapLikeConstructor): (WebCore::setJSTestGlobalObjectTestMapLikeConstructorSetter): (WebCore::setJSTestGlobalObjectTestMapLikeConstructor): (WebCore::jsTestGlobalObjectTestMediaQueryListListenerConstructorGetter): (WebCore::jsTestGlobalObjectTestMediaQueryListListenerConstructor): (WebCore::setJSTestGlobalObjectTestMediaQueryListListenerConstructorSetter): (WebCore::setJSTestGlobalObjectTestMediaQueryListListenerConstructor): (WebCore::jsTestGlobalObjectTestNamedAndIndexedSetterNoIdentifierConstructorGetter): (WebCore::jsTestGlobalObjectTestNamedAndIndexedSetterNoIdentifierConstructor): (WebCore::setJSTestGlobalObjectTestNamedAndIndexedSetterNoIdentifierConstructorSetter): (WebCore::setJSTestGlobalObjectTestNamedAndIndexedSetterNoIdentifierConstructor): (WebCore::jsTestGlobalObjectTestNamedAndIndexedSetterThrowingExceptionConstructorGetter): (WebCore::jsTestGlobalObjectTestNamedAndIndexedSetterThrowingExceptionConstructor): (WebCore::setJSTestGlobalObjectTestNamedAndIndexedSetterThrowingExceptionConstructorSetter): (WebCore::setJSTestGlobalObjectTestNamedAndIndexedSetterThrowingExceptionConstructor): (WebCore::jsTestGlobalObjectTestNamedAndIndexedSetterWithIdentifierConstructorGetter): (WebCore::jsTestGlobalObjectTestNamedAndIndexedSetterWithIdentifierConstructor): (WebCore::setJSTestGlobalObjectTestNamedAndIndexedSetterWithIdentifierConstructorSetter): (WebCore::setJSTestGlobalObjectTestNamedAndIndexedSetterWithIdentifierConstructor): (WebCore::jsTestGlobalObjectTestNamedConstructorConstructorGetter): (WebCore::jsTestGlobalObjectTestNamedConstructorConstructor): (WebCore::setJSTestGlobalObjectTestNamedConstructorConstructorSetter): (WebCore::setJSTestGlobalObjectTestNamedConstructorConstructor): (WebCore::jsTestGlobalObjectAudioConstructorGetter): (WebCore::jsTestGlobalObjectAudioConstructor): (WebCore::setJSTestGlobalObjectAudioConstructorSetter): (WebCore::setJSTestGlobalObjectAudioConstructor): (WebCore::jsTestGlobalObjectTestNamedDeleterNoIdentifierConstructorGetter): (WebCore::jsTestGlobalObjectTestNamedDeleterNoIdentifierConstructor): (WebCore::setJSTestGlobalObjectTestNamedDeleterNoIdentifierConstructorSetter): (WebCore::setJSTestGlobalObjectTestNamedDeleterNoIdentifierConstructor): (WebCore::jsTestGlobalObjectTestNamedDeleterThrowingExceptionConstructorGetter): (WebCore::jsTestGlobalObjectTestNamedDeleterThrowingExceptionConstructor): (WebCore::setJSTestGlobalObjectTestNamedDeleterThrowingExceptionConstructorSetter): (WebCore::setJSTestGlobalObjectTestNamedDeleterThrowingExceptionConstructor): (WebCore::jsTestGlobalObjectTestNamedDeleterWithIdentifierConstructorGetter): (WebCore::jsTestGlobalObjectTestNamedDeleterWithIdentifierConstructor): (WebCore::setJSTestGlobalObjectTestNamedDeleterWithIdentifierConstructorSetter): (WebCore::setJSTestGlobalObjectTestNamedDeleterWithIdentifierConstructor): (WebCore::jsTestGlobalObjectTestNamedDeleterWithIndexedGetterConstructorGetter): (WebCore::jsTestGlobalObjectTestNamedDeleterWithIndexedGetterConstructor): (WebCore::setJSTestGlobalObjectTestNamedDeleterWithIndexedGetterConstructorSetter): (WebCore::setJSTestGlobalObjectTestNamedDeleterWithIndexedGetterConstructor): (WebCore::jsTestGlobalObjectTestNamedGetterCallWithConstructorGetter): (WebCore::jsTestGlobalObjectTestNamedGetterCallWithConstructor): (WebCore::setJSTestGlobalObjectTestNamedGetterCallWithConstructorSetter): (WebCore::setJSTestGlobalObjectTestNamedGetterCallWithConstructor): (WebCore::jsTestGlobalObjectTestNamedGetterNoIdentifierConstructorGetter): (WebCore::jsTestGlobalObjectTestNamedGetterNoIdentifierConstructor): (WebCore::setJSTestGlobalObjectTestNamedGetterNoIdentifierConstructorSetter): (WebCore::setJSTestGlobalObjectTestNamedGetterNoIdentifierConstructor): (WebCore::jsTestGlobalObjectTestNamedGetterWithIdentifierConstructorGetter): (WebCore::jsTestGlobalObjectTestNamedGetterWithIdentifierConstructor): (WebCore::setJSTestGlobalObjectTestNamedGetterWithIdentifierConstructorSetter): (WebCore::setJSTestGlobalObjectTestNamedGetterWithIdentifierConstructor): (WebCore::jsTestGlobalObjectTestNamedSetterNoIdentifierConstructorGetter): (WebCore::jsTestGlobalObjectTestNamedSetterNoIdentifierConstructor): (WebCore::setJSTestGlobalObjectTestNamedSetterNoIdentifierConstructorSetter): (WebCore::setJSTestGlobalObjectTestNamedSetterNoIdentifierConstructor): (WebCore::jsTestGlobalObjectTestNamedSetterThrowingExceptionConstructorGetter): (WebCore::jsTestGlobalObjectTestNamedSetterThrowingExceptionConstructor): (WebCore::setJSTestGlobalObjectTestNamedSetterThrowingExceptionConstructorSetter): (WebCore::setJSTestGlobalObjectTestNamedSetterThrowingExceptionConstructor): (WebCore::jsTestGlobalObjectTestNamedSetterWithIdentifierConstructorGetter): (WebCore::jsTestGlobalObjectTestNamedSetterWithIdentifierConstructor): (WebCore::setJSTestGlobalObjectTestNamedSetterWithIdentifierConstructorSetter): (WebCore::setJSTestGlobalObjectTestNamedSetterWithIdentifierConstructor): (WebCore::jsTestGlobalObjectTestNamedSetterWithIndexedGetterConstructorGetter): (WebCore::jsTestGlobalObjectTestNamedSetterWithIndexedGetterConstructor): (WebCore::setJSTestGlobalObjectTestNamedSetterWithIndexedGetterConstructorSetter): (WebCore::setJSTestGlobalObjectTestNamedSetterWithIndexedGetterConstructor): (WebCore::jsTestGlobalObjectTestNamedSetterWithIndexedGetterAndSetterConstructorGetter): (WebCore::jsTestGlobalObjectTestNamedSetterWithIndexedGetterAndSetterConstructor): (WebCore::setJSTestGlobalObjectTestNamedSetterWithIndexedGetterAndSetterConstructorSetter): (WebCore::setJSTestGlobalObjectTestNamedSetterWithIndexedGetterAndSetterConstructor): (WebCore::jsTestGlobalObjectTestNamedSetterWithOverrideBuiltinsConstructorGetter): (WebCore::jsTestGlobalObjectTestNamedSetterWithOverrideBuiltinsConstructor): (WebCore::setJSTestGlobalObjectTestNamedSetterWithOverrideBuiltinsConstructorSetter): (WebCore::setJSTestGlobalObjectTestNamedSetterWithOverrideBuiltinsConstructor): (WebCore::jsTestGlobalObjectTestNamedSetterWithUnforgablePropertiesConstructorGetter): (WebCore::jsTestGlobalObjectTestNamedSetterWithUnforgablePropertiesConstructor): (WebCore::setJSTestGlobalObjectTestNamedSetterWithUnforgablePropertiesConstructorSetter): (WebCore::setJSTestGlobalObjectTestNamedSetterWithUnforgablePropertiesConstructor): (WebCore::jsTestGlobalObjectTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsConstructorGetter): (WebCore::jsTestGlobalObjectTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsConstructor): (WebCore::setJSTestGlobalObjectTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsConstructorSetter): (WebCore::setJSTestGlobalObjectTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsConstructor): (WebCore::jsTestGlobalObjectTestOverloadedConstructorsConstructorGetter): (WebCore::jsTestGlobalObjectTestOverloadedConstructorsConstructor): (WebCore::setJSTestGlobalObjectTestOverloadedConstructorsConstructorSetter): (WebCore::setJSTestGlobalObjectTestOverloadedConstructorsConstructor): (WebCore::jsTestGlobalObjectTestOverloadedConstructorsWithSequenceConstructorGetter): (WebCore::jsTestGlobalObjectTestOverloadedConstructorsWithSequenceConstructor): (WebCore::setJSTestGlobalObjectTestOverloadedConstructorsWithSequenceConstructorSetter): (WebCore::setJSTestGlobalObjectTestOverloadedConstructorsWithSequenceConstructor): (WebCore::jsTestGlobalObjectTestOverrideBuiltinsConstructorGetter): (WebCore::jsTestGlobalObjectTestOverrideBuiltinsConstructor): (WebCore::setJSTestGlobalObjectTestOverrideBuiltinsConstructorSetter): (WebCore::setJSTestGlobalObjectTestOverrideBuiltinsConstructor): (WebCore::jsTestGlobalObjectTestPluginInterfaceConstructorGetter): (WebCore::jsTestGlobalObjectTestPluginInterfaceConstructor): (WebCore::setJSTestGlobalObjectTestPluginInterfaceConstructorSetter): (WebCore::setJSTestGlobalObjectTestPluginInterfaceConstructor): (WebCore::jsTestGlobalObjectTestReadOnlyMapLikeConstructorGetter): (WebCore::jsTestGlobalObjectTestReadOnlyMapLikeConstructor): (WebCore::setJSTestGlobalObjectTestReadOnlyMapLikeConstructorSetter): (WebCore::setJSTestGlobalObjectTestReadOnlyMapLikeConstructor): (WebCore::jsTestGlobalObjectTestReportExtraMemoryCostConstructorGetter): (WebCore::jsTestGlobalObjectTestReportExtraMemoryCostConstructor): (WebCore::setJSTestGlobalObjectTestReportExtraMemoryCostConstructorSetter): (WebCore::setJSTestGlobalObjectTestReportExtraMemoryCostConstructor): (WebCore::jsTestGlobalObjectTestSerializationConstructorGetter): (WebCore::jsTestGlobalObjectTestSerializationConstructor): (WebCore::setJSTestGlobalObjectTestSerializationConstructorSetter): (WebCore::setJSTestGlobalObjectTestSerializationConstructor): (WebCore::jsTestGlobalObjectTestSerializationIndirectInheritanceConstructorGetter): (WebCore::jsTestGlobalObjectTestSerializationIndirectInheritanceConstructor): (WebCore::setJSTestGlobalObjectTestSerializationIndirectInheritanceConstructorSetter): (WebCore::setJSTestGlobalObjectTestSerializationIndirectInheritanceConstructor): (WebCore::jsTestGlobalObjectTestSerializationInheritConstructorGetter): (WebCore::jsTestGlobalObjectTestSerializationInheritConstructor): (WebCore::setJSTestGlobalObjectTestSerializationInheritConstructorSetter): (WebCore::setJSTestGlobalObjectTestSerializationInheritConstructor): (WebCore::jsTestGlobalObjectTestSerializationInheritFinalConstructorGetter): (WebCore::jsTestGlobalObjectTestSerializationInheritFinalConstructor): (WebCore::setJSTestGlobalObjectTestSerializationInheritFinalConstructorSetter): (WebCore::setJSTestGlobalObjectTestSerializationInheritFinalConstructor): (WebCore::jsTestGlobalObjectTestSerializedScriptValueInterfaceConstructorGetter): (WebCore::jsTestGlobalObjectTestSerializedScriptValueInterfaceConstructor): (WebCore::setJSTestGlobalObjectTestSerializedScriptValueInterfaceConstructorSetter): (WebCore::setJSTestGlobalObjectTestSerializedScriptValueInterfaceConstructor): (WebCore::jsTestGlobalObjectTestStringifierConstructorGetter): (WebCore::jsTestGlobalObjectTestStringifierConstructor): (WebCore::setJSTestGlobalObjectTestStringifierConstructorSetter): (WebCore::setJSTestGlobalObjectTestStringifierConstructor): (WebCore::jsTestGlobalObjectTestStringifierAnonymousOperationConstructorGetter): (WebCore::jsTestGlobalObjectTestStringifierAnonymousOperationConstructor): (WebCore::setJSTestGlobalObjectTestStringifierAnonymousOperationConstructorSetter): (WebCore::setJSTestGlobalObjectTestStringifierAnonymousOperationConstructor): (WebCore::jsTestGlobalObjectTestStringifierNamedOperationConstructorGetter): (WebCore::jsTestGlobalObjectTestStringifierNamedOperationConstructor): (WebCore::setJSTestGlobalObjectTestStringifierNamedOperationConstructorSetter): (WebCore::setJSTestGlobalObjectTestStringifierNamedOperationConstructor): (WebCore::jsTestGlobalObjectTestStringifierOperationImplementedAsConstructorGetter): (WebCore::jsTestGlobalObjectTestStringifierOperationImplementedAsConstructor): (WebCore::setJSTestGlobalObjectTestStringifierOperationImplementedAsConstructorSetter): (WebCore::setJSTestGlobalObjectTestStringifierOperationImplementedAsConstructor): (WebCore::jsTestGlobalObjectTestStringifierOperationNamedToStringConstructorGetter): (WebCore::jsTestGlobalObjectTestStringifierOperationNamedToStringConstructor): (WebCore::setJSTestGlobalObjectTestStringifierOperationNamedToStringConstructorSetter): (WebCore::setJSTestGlobalObjectTestStringifierOperationNamedToStringConstructor): (WebCore::jsTestGlobalObjectTestStringifierReadOnlyAttributeConstructorGetter): (WebCore::jsTestGlobalObjectTestStringifierReadOnlyAttributeConstructor): (WebCore::setJSTestGlobalObjectTestStringifierReadOnlyAttributeConstructorSetter): (WebCore::setJSTestGlobalObjectTestStringifierReadOnlyAttributeConstructor): (WebCore::jsTestGlobalObjectTestStringifierReadWriteAttributeConstructorGetter): (WebCore::jsTestGlobalObjectTestStringifierReadWriteAttributeConstructor): (WebCore::setJSTestGlobalObjectTestStringifierReadWriteAttributeConstructorSetter): (WebCore::setJSTestGlobalObjectTestStringifierReadWriteAttributeConstructor): (WebCore::jsTestGlobalObjectTestTypedefsConstructorGetter): (WebCore::jsTestGlobalObjectTestTypedefsConstructor): (WebCore::setJSTestGlobalObjectTestTypedefsConstructorSetter): (WebCore::setJSTestGlobalObjectTestTypedefsConstructor): (WebCore::jsTestGlobalObjectInstanceFunctionRegularOperationBody): (WebCore::jsTestGlobalObjectInstanceFunctionRegularOperation): (WebCore::jsTestGlobalObjectInstanceFunctionEnabledAtRuntimeOperation1Body): (WebCore::jsTestGlobalObjectInstanceFunctionEnabledAtRuntimeOperation2Body): (WebCore::jsTestGlobalObjectInstanceFunctionEnabledAtRuntimeOperationOverloadDispatcher): (WebCore::jsTestGlobalObjectInstanceFunctionEnabledAtRuntimeOperation): (WebCore::jsTestGlobalObjectConstructorFunctionEnabledAtRuntimeOperationStaticBody): (WebCore::jsTestGlobalObjectConstructorFunctionEnabledAtRuntimeOperationStatic): (WebCore::jsTestGlobalObjectInstanceFunctionEnabledInSpecificWorldBody): (WebCore::jsTestGlobalObjectInstanceFunctionEnabledInSpecificWorld): (WebCore::jsTestGlobalObjectInstanceFunctionEnabledInSpecificWorldWhenRuntimeFeatureEnabledBody): (WebCore::jsTestGlobalObjectInstanceFunctionEnabledInSpecificWorldWhenRuntimeFeatureEnabled): (WebCore::jsTestGlobalObjectInstanceFunctionEnabledInSpecificWorldWhenRuntimeFeaturesEnabledBody): (WebCore::jsTestGlobalObjectInstanceFunctionEnabledInSpecificWorldWhenRuntimeFeaturesEnabled): (WebCore::jsTestGlobalObjectInstanceFunctionTestPrivateFunctionBody): (WebCore::jsTestGlobalObjectInstanceFunctionTestPrivateFunction): (WebCore::jsTestGlobalObjectInstanceFunctionCalculateSecretResultBody): (WebCore::jsTestGlobalObjectInstanceFunctionCalculateSecretResult): (WebCore::jsTestGlobalObjectInstanceFunctionGetSecretBooleanBody): (WebCore::jsTestGlobalObjectInstanceFunctionGetSecretBoolean): (WebCore::jsTestGlobalObjectInstanceFunctionTestFeatureGetSecretBooleanBody): (WebCore::jsTestGlobalObjectInstanceFunctionTestFeatureGetSecretBoolean): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestGlobalObject.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp: (WebCore::JSTestIndexedSetterNoIdentifier::getOwnPropertySlot): (WebCore::JSTestIndexedSetterNoIdentifier::getOwnPropertySlotByIndex): (WebCore::JSTestIndexedSetterNoIdentifier::getOwnPropertyNames): (WebCore::JSTestIndexedSetterNoIdentifier::put): (WebCore::JSTestIndexedSetterNoIdentifier::putByIndex): (WebCore::JSTestIndexedSetterNoIdentifier::defineOwnProperty): (WebCore::jsTestIndexedSetterNoIdentifierConstructor): (WebCore::setJSTestIndexedSetterNoIdentifierConstructor): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp: (WebCore::JSTestIndexedSetterThrowingException::getOwnPropertySlot): (WebCore::JSTestIndexedSetterThrowingException::getOwnPropertySlotByIndex): (WebCore::JSTestIndexedSetterThrowingException::getOwnPropertyNames): (WebCore::JSTestIndexedSetterThrowingException::put): (WebCore::JSTestIndexedSetterThrowingException::putByIndex): (WebCore::JSTestIndexedSetterThrowingException::defineOwnProperty): (WebCore::jsTestIndexedSetterThrowingExceptionConstructor): (WebCore::setJSTestIndexedSetterThrowingExceptionConstructor): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp: (WebCore::JSTestIndexedSetterWithIdentifier::getOwnPropertySlot): (WebCore::JSTestIndexedSetterWithIdentifier::getOwnPropertySlotByIndex): (WebCore::JSTestIndexedSetterWithIdentifier::getOwnPropertyNames): (WebCore::JSTestIndexedSetterWithIdentifier::put): (WebCore::JSTestIndexedSetterWithIdentifier::putByIndex): (WebCore::JSTestIndexedSetterWithIdentifier::defineOwnProperty): (WebCore::IDLOperation<JSTestIndexedSetterWithIdentifier>::cast): (WebCore::jsTestIndexedSetterWithIdentifierConstructor): (WebCore::setJSTestIndexedSetterWithIdentifierConstructor): (WebCore::jsTestIndexedSetterWithIdentifierPrototypeFunctionIndexedSetterBody): (WebCore::jsTestIndexedSetterWithIdentifierPrototypeFunctionIndexedSetter): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestInheritedDictionary.cpp: (WebCore::convertDictionary<TestInheritedDictionary>): (WebCore::convertDictionaryToJS): * bindings/scripts/test/JS/JSTestInheritedDictionary.h: * bindings/scripts/test/JS/JSTestInterface.cpp: (WebCore::JSTestInterfaceConstructor::construct): (WebCore::IDLAttribute<JSTestInterface>::cast): (WebCore::IDLOperation<JSTestInterface>::cast): (WebCore::jsTestInterfaceConstructor): (WebCore::setJSTestInterfaceConstructor): (WebCore::jsTestInterfaceConstructorImplementsStaticReadOnlyAttrGetter): (WebCore::jsTestInterfaceConstructorImplementsStaticReadOnlyAttr): (WebCore::jsTestInterfaceConstructorImplementsStaticAttrGetter): (WebCore::jsTestInterfaceConstructorImplementsStaticAttr): (WebCore::setJSTestInterfaceConstructorImplementsStaticAttrSetter): (WebCore::setJSTestInterfaceConstructorImplementsStaticAttr): (WebCore::jsTestInterfaceImplementsStr1Getter): (WebCore::jsTestInterfaceImplementsStr1): (WebCore::jsTestInterfaceImplementsStr2Getter): (WebCore::jsTestInterfaceImplementsStr2): (WebCore::setJSTestInterfaceImplementsStr2Setter): (WebCore::setJSTestInterfaceImplementsStr2): (WebCore::jsTestInterfaceImplementsStr3Getter): (WebCore::jsTestInterfaceImplementsStr3): (WebCore::setJSTestInterfaceImplementsStr3Setter): (WebCore::setJSTestInterfaceImplementsStr3): (WebCore::jsTestInterfaceImplementsNodeGetter): (WebCore::jsTestInterfaceImplementsNode): (WebCore::setJSTestInterfaceImplementsNodeSetter): (WebCore::setJSTestInterfaceImplementsNode): (WebCore::jsTestInterfaceConstructorSupplementalStaticReadOnlyAttrGetter): (WebCore::jsTestInterfaceConstructorSupplementalStaticReadOnlyAttr): (WebCore::jsTestInterfaceConstructorSupplementalStaticAttrGetter): (WebCore::jsTestInterfaceConstructorSupplementalStaticAttr): (WebCore::setJSTestInterfaceConstructorSupplementalStaticAttrSetter): (WebCore::setJSTestInterfaceConstructorSupplementalStaticAttr): (WebCore::jsTestInterfaceSupplementalStr1Getter): (WebCore::jsTestInterfaceSupplementalStr1): (WebCore::jsTestInterfaceSupplementalStr2Getter): (WebCore::jsTestInterfaceSupplementalStr2): (WebCore::setJSTestInterfaceSupplementalStr2Setter): (WebCore::setJSTestInterfaceSupplementalStr2): (WebCore::jsTestInterfaceSupplementalStr3Getter): (WebCore::jsTestInterfaceSupplementalStr3): (WebCore::setJSTestInterfaceSupplementalStr3Setter): (WebCore::setJSTestInterfaceSupplementalStr3): (WebCore::jsTestInterfaceSupplementalNodeGetter): (WebCore::jsTestInterfaceSupplementalNode): (WebCore::setJSTestInterfaceSupplementalNodeSetter): (WebCore::setJSTestInterfaceSupplementalNode): (WebCore::jsTestInterfaceReflectAttributeGetter): (WebCore::jsTestInterfaceReflectAttribute): (WebCore::setJSTestInterfaceReflectAttributeSetter): (WebCore::setJSTestInterfaceReflectAttribute): (WebCore::jsTestInterfacePrototypeFunctionImplementsMethod1Body): (WebCore::jsTestInterfacePrototypeFunctionImplementsMethod1): (WebCore::jsTestInterfacePrototypeFunctionImplementsMethod2Body): (WebCore::jsTestInterfacePrototypeFunctionImplementsMethod2): (WebCore::jsTestInterfacePrototypeFunctionImplementsMethod3Body): (WebCore::jsTestInterfacePrototypeFunctionImplementsMethod3): (WebCore::jsTestInterfaceConstructorFunctionImplementsMethod4Body): (WebCore::jsTestInterfaceConstructorFunctionImplementsMethod4): (WebCore::jsTestInterfacePrototypeFunctionTakeNodesBody): (WebCore::jsTestInterfacePrototypeFunctionTakeNodes): (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod1Body): (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod1): (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod2Body): (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod2): (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod3Body): (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod3): (WebCore::jsTestInterfaceConstructorFunctionSupplementalMethod4Body): (WebCore::jsTestInterfaceConstructorFunctionSupplementalMethod4): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestInterface.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp: (WebCore::IDLAttribute<JSTestInterfaceLeadingUnderscore>::cast): (WebCore::jsTestInterfaceLeadingUnderscoreConstructor): (WebCore::setJSTestInterfaceLeadingUnderscoreConstructor): (WebCore::jsTestInterfaceLeadingUnderscoreReadonlyGetter): (WebCore::jsTestInterfaceLeadingUnderscoreReadonly): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestIterable.cpp: (WebCore::IDLOperation<JSTestIterable>::cast): (WebCore::jsTestIterableConstructor): (WebCore::setJSTestIterableConstructor): (WebCore::jsTestIterablePrototypeFunctionEntriesCaller): (WebCore::jsTestIterablePrototypeFunctionEntries): (WebCore::jsTestIterablePrototypeFunctionKeysCaller): (WebCore::jsTestIterablePrototypeFunctionKeys): (WebCore::jsTestIterablePrototypeFunctionValuesCaller): (WebCore::jsTestIterablePrototypeFunctionValues): (WebCore::jsTestIterablePrototypeFunctionForEachCaller): (WebCore::jsTestIterablePrototypeFunctionForEach): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestIterable.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp: (WebCore::IDLAttribute<JSTestJSBuiltinConstructor>::cast): (WebCore::IDLOperation<JSTestJSBuiltinConstructor>::cast): (WebCore::jsTestJSBuiltinConstructorConstructor): (WebCore::setJSTestJSBuiltinConstructorConstructor): (WebCore::jsTestJSBuiltinConstructorTestAttributeCustomGetter): (WebCore::jsTestJSBuiltinConstructorTestAttributeCustom): (WebCore::jsTestJSBuiltinConstructorTestAttributeRWCustomGetter): (WebCore::jsTestJSBuiltinConstructorTestAttributeRWCustom): (WebCore::setJSTestJSBuiltinConstructorTestAttributeRWCustomSetter): (WebCore::setJSTestJSBuiltinConstructorTestAttributeRWCustom): (WebCore::jsTestJSBuiltinConstructorPrototypeFunctionTestCustomFunctionBody): (WebCore::jsTestJSBuiltinConstructorPrototypeFunctionTestCustomFunction): * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h: * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp: (WebCore::IDLOperation<JSTestMediaQueryListListener>::cast): (WebCore::jsTestMediaQueryListListenerConstructor): (WebCore::setJSTestMediaQueryListListenerConstructor): (WebCore::jsTestMediaQueryListListenerPrototypeFunctionMethodBody): (WebCore::jsTestMediaQueryListListenerPrototypeFunctionMethod): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestMediaQueryListListener.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp: (WebCore::JSTestNamedAndIndexedSetterNoIdentifier::getOwnPropertySlot): (WebCore::JSTestNamedAndIndexedSetterNoIdentifier::getOwnPropertySlotByIndex): (WebCore::JSTestNamedAndIndexedSetterNoIdentifier::getOwnPropertyNames): (WebCore::JSTestNamedAndIndexedSetterNoIdentifier::put): (WebCore::JSTestNamedAndIndexedSetterNoIdentifier::putByIndex): (WebCore::JSTestNamedAndIndexedSetterNoIdentifier::defineOwnProperty): (WebCore::jsTestNamedAndIndexedSetterNoIdentifierConstructor): (WebCore::setJSTestNamedAndIndexedSetterNoIdentifierConstructor): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp: (WebCore::JSTestNamedAndIndexedSetterThrowingException::getOwnPropertySlot): (WebCore::JSTestNamedAndIndexedSetterThrowingException::getOwnPropertySlotByIndex): (WebCore::JSTestNamedAndIndexedSetterThrowingException::getOwnPropertyNames): (WebCore::JSTestNamedAndIndexedSetterThrowingException::put): (WebCore::JSTestNamedAndIndexedSetterThrowingException::putByIndex): (WebCore::JSTestNamedAndIndexedSetterThrowingException::defineOwnProperty): (WebCore::jsTestNamedAndIndexedSetterThrowingExceptionConstructor): (WebCore::setJSTestNamedAndIndexedSetterThrowingExceptionConstructor): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp: (WebCore::JSTestNamedAndIndexedSetterWithIdentifier::getOwnPropertySlot): (WebCore::JSTestNamedAndIndexedSetterWithIdentifier::getOwnPropertySlotByIndex): (WebCore::JSTestNamedAndIndexedSetterWithIdentifier::getOwnPropertyNames): (WebCore::JSTestNamedAndIndexedSetterWithIdentifier::put): (WebCore::JSTestNamedAndIndexedSetterWithIdentifier::putByIndex): (WebCore::JSTestNamedAndIndexedSetterWithIdentifier::defineOwnProperty): (WebCore::IDLOperation<JSTestNamedAndIndexedSetterWithIdentifier>::cast): (WebCore::jsTestNamedAndIndexedSetterWithIdentifierConstructor): (WebCore::setJSTestNamedAndIndexedSetterWithIdentifierConstructor): (WebCore::jsTestNamedAndIndexedSetterWithIdentifierPrototypeFunctionNamedSetterBody): (WebCore::jsTestNamedAndIndexedSetterWithIdentifierPrototypeFunctionNamedSetter): (WebCore::jsTestNamedAndIndexedSetterWithIdentifierPrototypeFunctionIndexedSetterBody): (WebCore::jsTestNamedAndIndexedSetterWithIdentifierPrototypeFunctionIndexedSetter): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestNamedConstructor.cpp: (WebCore::JSTestNamedConstructorNamedConstructor::construct): (WebCore::jsTestNamedConstructorConstructor): (WebCore::setJSTestNamedConstructorConstructor): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestNamedConstructor.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp: (WebCore::JSTestNamedDeleterNoIdentifier::getOwnPropertySlot): (WebCore::JSTestNamedDeleterNoIdentifier::getOwnPropertySlotByIndex): (WebCore::JSTestNamedDeleterNoIdentifier::getOwnPropertyNames): (WebCore::JSTestNamedDeleterNoIdentifier::deleteProperty): (WebCore::JSTestNamedDeleterNoIdentifier::deletePropertyByIndex): (WebCore::jsTestNamedDeleterNoIdentifierConstructor): (WebCore::setJSTestNamedDeleterNoIdentifierConstructor): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp: (WebCore::JSTestNamedDeleterThrowingException::getOwnPropertySlot): (WebCore::JSTestNamedDeleterThrowingException::getOwnPropertySlotByIndex): (WebCore::JSTestNamedDeleterThrowingException::getOwnPropertyNames): (WebCore::JSTestNamedDeleterThrowingException::deleteProperty): (WebCore::JSTestNamedDeleterThrowingException::deletePropertyByIndex): (WebCore::jsTestNamedDeleterThrowingExceptionConstructor): (WebCore::setJSTestNamedDeleterThrowingExceptionConstructor): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp: (WebCore::JSTestNamedDeleterWithIdentifier::getOwnPropertySlot): (WebCore::JSTestNamedDeleterWithIdentifier::getOwnPropertySlotByIndex): (WebCore::JSTestNamedDeleterWithIdentifier::getOwnPropertyNames): (WebCore::JSTestNamedDeleterWithIdentifier::deleteProperty): (WebCore::JSTestNamedDeleterWithIdentifier::deletePropertyByIndex): (WebCore::IDLOperation<JSTestNamedDeleterWithIdentifier>::cast): (WebCore::jsTestNamedDeleterWithIdentifierConstructor): (WebCore::setJSTestNamedDeleterWithIdentifierConstructor): (WebCore::jsTestNamedDeleterWithIdentifierPrototypeFunctionNamedDeleterBody): (WebCore::jsTestNamedDeleterWithIdentifierPrototypeFunctionNamedDeleter): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp: (WebCore::JSTestNamedDeleterWithIndexedGetter::getOwnPropertySlot): (WebCore::JSTestNamedDeleterWithIndexedGetter::getOwnPropertySlotByIndex): (WebCore::JSTestNamedDeleterWithIndexedGetter::getOwnPropertyNames): (WebCore::JSTestNamedDeleterWithIndexedGetter::deleteProperty): (WebCore::JSTestNamedDeleterWithIndexedGetter::deletePropertyByIndex): (WebCore::jsTestNamedDeleterWithIndexedGetterConstructor): (WebCore::setJSTestNamedDeleterWithIndexedGetterConstructor): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestNamedGetterCallWith.cpp: (WebCore::JSTestNamedGetterCallWith::getOwnPropertySlot): (WebCore::JSTestNamedGetterCallWith::getOwnPropertySlotByIndex): (WebCore::JSTestNamedGetterCallWith::getOwnPropertyNames): (WebCore::jsTestNamedGetterCallWithConstructor): (WebCore::setJSTestNamedGetterCallWithConstructor): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestNamedGetterCallWith.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.cpp: (WebCore::JSTestNamedGetterNoIdentifier::getOwnPropertySlot): (WebCore::JSTestNamedGetterNoIdentifier::getOwnPropertySlotByIndex): (WebCore::JSTestNamedGetterNoIdentifier::getOwnPropertyNames): (WebCore::jsTestNamedGetterNoIdentifierConstructor): (WebCore::setJSTestNamedGetterNoIdentifierConstructor): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp: (WebCore::JSTestNamedGetterWithIdentifier::getOwnPropertySlot): (WebCore::JSTestNamedGetterWithIdentifier::getOwnPropertySlotByIndex): (WebCore::JSTestNamedGetterWithIdentifier::getOwnPropertyNames): (WebCore::IDLOperation<JSTestNamedGetterWithIdentifier>::cast): (WebCore::jsTestNamedGetterWithIdentifierConstructor): (WebCore::setJSTestNamedGetterWithIdentifierConstructor): (WebCore::jsTestNamedGetterWithIdentifierPrototypeFunctionGetterNameBody): (WebCore::jsTestNamedGetterWithIdentifierPrototypeFunctionGetterName): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp: (WebCore::JSTestNamedSetterNoIdentifier::getOwnPropertySlot): (WebCore::JSTestNamedSetterNoIdentifier::getOwnPropertySlotByIndex): (WebCore::JSTestNamedSetterNoIdentifier::getOwnPropertyNames): (WebCore::JSTestNamedSetterNoIdentifier::put): (WebCore::JSTestNamedSetterNoIdentifier::putByIndex): (WebCore::JSTestNamedSetterNoIdentifier::defineOwnProperty): (WebCore::jsTestNamedSetterNoIdentifierConstructor): (WebCore::setJSTestNamedSetterNoIdentifierConstructor): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp: (WebCore::JSTestNamedSetterThrowingException::getOwnPropertySlot): (WebCore::JSTestNamedSetterThrowingException::getOwnPropertySlotByIndex): (WebCore::JSTestNamedSetterThrowingException::getOwnPropertyNames): (WebCore::JSTestNamedSetterThrowingException::put): (WebCore::JSTestNamedSetterThrowingException::putByIndex): (WebCore::JSTestNamedSetterThrowingException::defineOwnProperty): (WebCore::jsTestNamedSetterThrowingExceptionConstructor): (WebCore::setJSTestNamedSetterThrowingExceptionConstructor): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp: (WebCore::JSTestNamedSetterWithIdentifier::getOwnPropertySlot): (WebCore::JSTestNamedSetterWithIdentifier::getOwnPropertySlotByIndex): (WebCore::JSTestNamedSetterWithIdentifier::getOwnPropertyNames): (WebCore::JSTestNamedSetterWithIdentifier::put): (WebCore::JSTestNamedSetterWithIdentifier::putByIndex): (WebCore::JSTestNamedSetterWithIdentifier::defineOwnProperty): (WebCore::IDLOperation<JSTestNamedSetterWithIdentifier>::cast): (WebCore::jsTestNamedSetterWithIdentifierConstructor): (WebCore::setJSTestNamedSetterWithIdentifierConstructor): (WebCore::jsTestNamedSetterWithIdentifierPrototypeFunctionNamedSetterBody): (WebCore::jsTestNamedSetterWithIdentifierPrototypeFunctionNamedSetter): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp: (WebCore::JSTestNamedSetterWithIndexedGetter::getOwnPropertySlot): (WebCore::JSTestNamedSetterWithIndexedGetter::getOwnPropertySlotByIndex): (WebCore::JSTestNamedSetterWithIndexedGetter::getOwnPropertyNames): (WebCore::JSTestNamedSetterWithIndexedGetter::put): (WebCore::JSTestNamedSetterWithIndexedGetter::putByIndex): (WebCore::JSTestNamedSetterWithIndexedGetter::defineOwnProperty): (WebCore::IDLOperation<JSTestNamedSetterWithIndexedGetter>::cast): (WebCore::jsTestNamedSetterWithIndexedGetterConstructor): (WebCore::setJSTestNamedSetterWithIndexedGetterConstructor): (WebCore::jsTestNamedSetterWithIndexedGetterPrototypeFunctionNamedSetterBody): (WebCore::jsTestNamedSetterWithIndexedGetterPrototypeFunctionNamedSetter): (WebCore::jsTestNamedSetterWithIndexedGetterPrototypeFunctionIndexedSetterBody): (WebCore::jsTestNamedSetterWithIndexedGetterPrototypeFunctionIndexedSetter): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp: (WebCore::JSTestNamedSetterWithIndexedGetterAndSetter::getOwnPropertySlot): (WebCore::JSTestNamedSetterWithIndexedGetterAndSetter::getOwnPropertySlotByIndex): (WebCore::JSTestNamedSetterWithIndexedGetterAndSetter::getOwnPropertyNames): (WebCore::JSTestNamedSetterWithIndexedGetterAndSetter::put): (WebCore::JSTestNamedSetterWithIndexedGetterAndSetter::putByIndex): (WebCore::JSTestNamedSetterWithIndexedGetterAndSetter::defineOwnProperty): (WebCore::IDLOperation<JSTestNamedSetterWithIndexedGetterAndSetter>::cast): (WebCore::jsTestNamedSetterWithIndexedGetterAndSetterConstructor): (WebCore::setJSTestNamedSetterWithIndexedGetterAndSetterConstructor): (WebCore::jsTestNamedSetterWithIndexedGetterAndSetterPrototypeFunctionNamedSetterBody): (WebCore::jsTestNamedSetterWithIndexedGetterAndSetterPrototypeFunctionNamedSetter): (WebCore::jsTestNamedSetterWithIndexedGetterAndSetterPrototypeFunctionIndexedSetter1Body): (WebCore::jsTestNamedSetterWithIndexedGetterAndSetterPrototypeFunctionIndexedSetter2Body): (WebCore::jsTestNamedSetterWithIndexedGetterAndSetterPrototypeFunctionIndexedSetterOverloadDispatcher): (WebCore::jsTestNamedSetterWithIndexedGetterAndSetterPrototypeFunctionIndexedSetter): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestNamedSetterWithOverrideBuiltins.cpp: (WebCore::JSTestNamedSetterWithOverrideBuiltins::getOwnPropertySlot): (WebCore::JSTestNamedSetterWithOverrideBuiltins::getOwnPropertySlotByIndex): (WebCore::JSTestNamedSetterWithOverrideBuiltins::getOwnPropertyNames): (WebCore::JSTestNamedSetterWithOverrideBuiltins::put): (WebCore::JSTestNamedSetterWithOverrideBuiltins::putByIndex): (WebCore::JSTestNamedSetterWithOverrideBuiltins::defineOwnProperty): (WebCore::jsTestNamedSetterWithOverrideBuiltinsConstructor): (WebCore::setJSTestNamedSetterWithOverrideBuiltinsConstructor): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestNamedSetterWithOverrideBuiltins.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.cpp: (WebCore::JSTestNamedSetterWithUnforgableProperties::getOwnPropertySlot): (WebCore::JSTestNamedSetterWithUnforgableProperties::getOwnPropertySlotByIndex): (WebCore::JSTestNamedSetterWithUnforgableProperties::getOwnPropertyNames): (WebCore::JSTestNamedSetterWithUnforgableProperties::put): (WebCore::JSTestNamedSetterWithUnforgableProperties::putByIndex): (WebCore::JSTestNamedSetterWithUnforgableProperties::defineOwnProperty): (WebCore::IDLAttribute<JSTestNamedSetterWithUnforgableProperties>::cast): (WebCore::IDLOperation<JSTestNamedSetterWithUnforgableProperties>::cast): (WebCore::jsTestNamedSetterWithUnforgablePropertiesConstructor): (WebCore::setJSTestNamedSetterWithUnforgablePropertiesConstructor): (WebCore::jsTestNamedSetterWithUnforgablePropertiesUnforgeableAttributeGetter): (WebCore::jsTestNamedSetterWithUnforgablePropertiesUnforgeableAttribute): (WebCore::jsTestNamedSetterWithUnforgablePropertiesInstanceFunctionUnforgeableOperationBody): (WebCore::jsTestNamedSetterWithUnforgablePropertiesInstanceFunctionUnforgeableOperation): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.cpp: (WebCore::JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins::getOwnPropertySlot): (WebCore::JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins::getOwnPropertySlotByIndex): (WebCore::JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins::getOwnPropertyNames): (WebCore::JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins::put): (WebCore::JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins::putByIndex): (WebCore::JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins::defineOwnProperty): (WebCore::IDLAttribute<JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins>::cast): (WebCore::IDLOperation<JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins>::cast): (WebCore::jsTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsConstructor): (WebCore::setJSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsConstructor): (WebCore::jsTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsUnforgeableAttributeGetter): (WebCore::jsTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsUnforgeableAttribute): (WebCore::jsTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsInstanceFunctionUnforgeableOperationBody): (WebCore::jsTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsInstanceFunctionUnforgeableOperation): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestNode.cpp: (WebCore::JSTestNodeConstructor::construct): (WebCore::JSTestNodePrototype::finishCreation): (WebCore::IDLAttribute<JSTestNode>::cast): (WebCore::IDLOperation<JSTestNode>::cast): (WebCore::jsTestNodeConstructor): (WebCore::setJSTestNodeConstructor): (WebCore::jsTestNodeNameGetter): (WebCore::jsTestNodeName): (WebCore::setJSTestNodeNameSetter): (WebCore::setJSTestNodeName): (WebCore::jsTestNodePrototypeFunctionTestWorkerPromiseBody): (WebCore::jsTestNodePrototypeFunctionTestWorkerPromise): (WebCore::jsTestNodePrototypeFunctionCalculateSecretResultBody): (WebCore::jsTestNodePrototypeFunctionCalculateSecretResult): (WebCore::jsTestNodePrototypeFunctionGetSecretBooleanBody): (WebCore::jsTestNodePrototypeFunctionGetSecretBoolean): (WebCore::jsTestNodePrototypeFunctionTestFeatureGetSecretBooleanBody): (WebCore::jsTestNodePrototypeFunctionTestFeatureGetSecretBoolean): (WebCore::jsTestNodePrototypeFunctionEntriesCaller): (WebCore::jsTestNodePrototypeFunctionEntries): (WebCore::jsTestNodePrototypeFunctionKeysCaller): (WebCore::jsTestNodePrototypeFunctionKeys): (WebCore::jsTestNodePrototypeFunctionValuesCaller): (WebCore::jsTestNodePrototypeFunctionValues): (WebCore::jsTestNodePrototypeFunctionForEachCaller): (WebCore::jsTestNodePrototypeFunctionForEach): (WebCore::JSTestNode::serialize): (WebCore::jsTestNodePrototypeFunctionToJSONBody): (WebCore::jsTestNodePrototypeFunctionToJSON): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestNode.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestObj.cpp: (WebCore::convertEnumerationToJS): (WebCore::parseEnumeration<TestObj::EnumType>): (WebCore::parseEnumeration<TestObj::Optional>): (WebCore::parseEnumeration<AlternateEnumName>): (WebCore::parseEnumeration<TestObj::EnumA>): (WebCore::parseEnumeration<TestObj::EnumB>): (WebCore::parseEnumeration<TestObj::EnumC>): (WebCore::parseEnumeration<TestObj::Kind>): (WebCore::parseEnumeration<TestObj::Size>): (WebCore::parseEnumeration<TestObj::Confidence>): (WebCore::convertDictionary<TestObj::Dictionary>): (WebCore::convertDictionaryToJS): (WebCore::convertDictionary<TestObj::DictionaryThatShouldNotTolerateNull>): (WebCore::convertDictionary<TestObj::DictionaryThatShouldTolerateNull>): (WebCore::convertDictionary<AlternateDictionaryName>): (WebCore::convertDictionary<TestObj::ParentDictionary>): (WebCore::convertDictionary<TestObj::ChildDictionary>): (WebCore::convertDictionary<TestObj::ConditionalDictionaryA>): (WebCore::convertDictionary<TestObj::ConditionalDictionaryB>): (WebCore::convertDictionary<TestObj::ConditionalDictionaryC>): (WebCore::JSTestObjConstructor::construct): (WebCore::JSTestObjConstructor::initializeProperties): (WebCore::JSTestObjPrototype::finishCreation): (WebCore::JSTestObj::getOwnPropertySlot): (WebCore::JSTestObj::getOwnPropertySlotByIndex): (WebCore::JSTestObj::getOwnPropertyNames): (WebCore::callJSTestObj1): (WebCore::callJSTestObj2): (WebCore::callJSTestObj3): (WebCore::callJSTestObj): (WebCore::IDLAttribute<JSTestObj>::cast): (WebCore::IDLOperation<JSTestObj>::cast): (WebCore::jsTestObjConstructor): (WebCore::setJSTestObjConstructor): (WebCore::jsTestObjReadOnlyLongAttrGetter): (WebCore::jsTestObjReadOnlyLongAttr): (WebCore::jsTestObjReadOnlyStringAttrGetter): (WebCore::jsTestObjReadOnlyStringAttr): (WebCore::jsTestObjReadOnlyTestObjAttrGetter): (WebCore::jsTestObjReadOnlyTestObjAttr): (WebCore::jsTestObjConstructorStaticReadOnlyLongAttrGetter): (WebCore::jsTestObjConstructorStaticReadOnlyLongAttr): (WebCore::jsTestObjConstructorStaticStringAttrGetter): (WebCore::jsTestObjConstructorStaticStringAttr): (WebCore::setJSTestObjConstructorStaticStringAttrSetter): (WebCore::setJSTestObjConstructorStaticStringAttr): (WebCore::jsTestObjConstructorTestSubObjGetter): (WebCore::jsTestObjConstructorTestSubObj): (WebCore::jsTestObjConstructorTestStaticReadonlyObjGetter): (WebCore::jsTestObjConstructorTestStaticReadonlyObj): (WebCore::jsTestObjEnumAttrGetter): (WebCore::jsTestObjEnumAttr): (WebCore::setJSTestObjEnumAttrSetter): (WebCore::setJSTestObjEnumAttr): (WebCore::jsTestObjByteAttrGetter): (WebCore::jsTestObjByteAttr): (WebCore::setJSTestObjByteAttrSetter): (WebCore::setJSTestObjByteAttr): (WebCore::jsTestObjOctetAttrGetter): (WebCore::jsTestObjOctetAttr): (WebCore::setJSTestObjOctetAttrSetter): (WebCore::setJSTestObjOctetAttr): (WebCore::jsTestObjShortAttrGetter): (WebCore::jsTestObjShortAttr): (WebCore::setJSTestObjShortAttrSetter): (WebCore::setJSTestObjShortAttr): (WebCore::jsTestObjClampedShortAttrGetter): (WebCore::jsTestObjClampedShortAttr): (WebCore::setJSTestObjClampedShortAttrSetter): (WebCore::setJSTestObjClampedShortAttr): (WebCore::jsTestObjEnforceRangeShortAttrGetter): (WebCore::jsTestObjEnforceRangeShortAttr): (WebCore::setJSTestObjEnforceRangeShortAttrSetter): (WebCore::setJSTestObjEnforceRangeShortAttr): (WebCore::jsTestObjUnsignedShortAttrGetter): (WebCore::jsTestObjUnsignedShortAttr): (WebCore::setJSTestObjUnsignedShortAttrSetter): (WebCore::setJSTestObjUnsignedShortAttr): (WebCore::jsTestObjLongAttrGetter): (WebCore::jsTestObjLongAttr): (WebCore::setJSTestObjLongAttrSetter): (WebCore::setJSTestObjLongAttr): (WebCore::jsTestObjLongLongAttrGetter): (WebCore::jsTestObjLongLongAttr): (WebCore::setJSTestObjLongLongAttrSetter): (WebCore::setJSTestObjLongLongAttr): (WebCore::jsTestObjUnsignedLongLongAttrGetter): (WebCore::jsTestObjUnsignedLongLongAttr): (WebCore::setJSTestObjUnsignedLongLongAttrSetter): (WebCore::setJSTestObjUnsignedLongLongAttr): (WebCore::jsTestObjStringAttrGetter): (WebCore::jsTestObjStringAttr): (WebCore::setJSTestObjStringAttrSetter): (WebCore::setJSTestObjStringAttr): (WebCore::jsTestObjUsvstringAttrGetter): (WebCore::jsTestObjUsvstringAttr): (WebCore::setJSTestObjUsvstringAttrSetter): (WebCore::setJSTestObjUsvstringAttr): (WebCore::jsTestObjTestObjAttrGetter): (WebCore::jsTestObjTestObjAttr): (WebCore::setJSTestObjTestObjAttrSetter): (WebCore::setJSTestObjTestObjAttr): (WebCore::jsTestObjTestNullableObjAttrGetter): (WebCore::jsTestObjTestNullableObjAttr): (WebCore::setJSTestObjTestNullableObjAttrSetter): (WebCore::setJSTestObjTestNullableObjAttr): (WebCore::jsTestObjLenientTestObjAttrGetter): (WebCore::jsTestObjLenientTestObjAttr): (WebCore::setJSTestObjLenientTestObjAttrSetter): (WebCore::setJSTestObjLenientTestObjAttr): (WebCore::jsTestObjUnforgeableAttrGetter): (WebCore::jsTestObjUnforgeableAttr): (WebCore::jsTestObjStringAttrTreatingNullAsEmptyStringGetter): (WebCore::jsTestObjStringAttrTreatingNullAsEmptyString): (WebCore::setJSTestObjStringAttrTreatingNullAsEmptyStringSetter): (WebCore::setJSTestObjStringAttrTreatingNullAsEmptyString): (WebCore::jsTestObjUsvstringAttrTreatingNullAsEmptyStringGetter): (WebCore::jsTestObjUsvstringAttrTreatingNullAsEmptyString): (WebCore::setJSTestObjUsvstringAttrTreatingNullAsEmptyStringSetter): (WebCore::setJSTestObjUsvstringAttrTreatingNullAsEmptyString): (WebCore::jsTestObjByteStringAttrTreatingNullAsEmptyStringGetter): (WebCore::jsTestObjByteStringAttrTreatingNullAsEmptyString): (WebCore::setJSTestObjByteStringAttrTreatingNullAsEmptyStringSetter): (WebCore::setJSTestObjByteStringAttrTreatingNullAsEmptyString): (WebCore::jsTestObjStringLongRecordAttrGetter): (WebCore::jsTestObjStringLongRecordAttr): (WebCore::setJSTestObjStringLongRecordAttrSetter): (WebCore::setJSTestObjStringLongRecordAttr): (WebCore::jsTestObjUsvstringLongRecordAttrGetter): (WebCore::jsTestObjUsvstringLongRecordAttr): (WebCore::setJSTestObjUsvstringLongRecordAttrSetter): (WebCore::setJSTestObjUsvstringLongRecordAttr): (WebCore::jsTestObjStringObjRecordAttrGetter): (WebCore::jsTestObjStringObjRecordAttr): (WebCore::setJSTestObjStringObjRecordAttrSetter): (WebCore::setJSTestObjStringObjRecordAttr): (WebCore::jsTestObjStringNullableObjRecordAttrGetter): (WebCore::jsTestObjStringNullableObjRecordAttr): (WebCore::setJSTestObjStringNullableObjRecordAttrSetter): (WebCore::setJSTestObjStringNullableObjRecordAttr): (WebCore::jsTestObjStringVoidCallbackRecordAttrGetter): (WebCore::jsTestObjStringVoidCallbackRecordAttr): (WebCore::setJSTestObjStringVoidCallbackRecordAttrSetter): (WebCore::setJSTestObjStringVoidCallbackRecordAttr): (WebCore::jsTestObjDictionaryAttrGetter): (WebCore::jsTestObjDictionaryAttr): (WebCore::setJSTestObjDictionaryAttrSetter): (WebCore::setJSTestObjDictionaryAttr): (WebCore::jsTestObjNullableDictionaryAttrGetter): (WebCore::jsTestObjNullableDictionaryAttr): (WebCore::setJSTestObjNullableDictionaryAttrSetter): (WebCore::setJSTestObjNullableDictionaryAttr): (WebCore::jsTestObjAnnotatedTypeInUnionAttrGetter): (WebCore::jsTestObjAnnotatedTypeInUnionAttr): (WebCore::setJSTestObjAnnotatedTypeInUnionAttrSetter): (WebCore::setJSTestObjAnnotatedTypeInUnionAttr): (WebCore::jsTestObjAnnotatedTypeInSequenceAttrGetter): (WebCore::jsTestObjAnnotatedTypeInSequenceAttr): (WebCore::setJSTestObjAnnotatedTypeInSequenceAttrSetter): (WebCore::setJSTestObjAnnotatedTypeInSequenceAttr): (WebCore::jsTestObjImplementationEnumAttrGetter): (WebCore::jsTestObjImplementationEnumAttr): (WebCore::setJSTestObjImplementationEnumAttrSetter): (WebCore::setJSTestObjImplementationEnumAttr): (WebCore::jsTestObjMediaDevicesGetter): (WebCore::jsTestObjMediaDevices): (WebCore::jsTestObjServiceWorkersGetter): (WebCore::jsTestObjServiceWorkers): (WebCore::jsTestObjXMLObjAttrGetter): (WebCore::jsTestObjXMLObjAttr): (WebCore::setJSTestObjXMLObjAttrSetter): (WebCore::setJSTestObjXMLObjAttr): (WebCore::jsTestObjCreateGetter): (WebCore::jsTestObjCreate): (WebCore::setJSTestObjCreateSetter): (WebCore::setJSTestObjCreate): (WebCore::jsTestObjReflectedStringAttrGetter): (WebCore::jsTestObjReflectedStringAttr): (WebCore::setJSTestObjReflectedStringAttrSetter): (WebCore::setJSTestObjReflectedStringAttr): (WebCore::jsTestObjReflectedUSVStringAttrGetter): (WebCore::jsTestObjReflectedUSVStringAttr): (WebCore::setJSTestObjReflectedUSVStringAttrSetter): (WebCore::setJSTestObjReflectedUSVStringAttr): (WebCore::jsTestObjReflectedIntegralAttrGetter): (WebCore::jsTestObjReflectedIntegralAttr): (WebCore::setJSTestObjReflectedIntegralAttrSetter): (WebCore::setJSTestObjReflectedIntegralAttr): (WebCore::jsTestObjReflectedUnsignedIntegralAttrGetter): (WebCore::jsTestObjReflectedUnsignedIntegralAttr): (WebCore::setJSTestObjReflectedUnsignedIntegralAttrSetter): (WebCore::setJSTestObjReflectedUnsignedIntegralAttr): (WebCore::jsTestObjReflectedBooleanAttrGetter): (WebCore::jsTestObjReflectedBooleanAttr): (WebCore::setJSTestObjReflectedBooleanAttrSetter): (WebCore::setJSTestObjReflectedBooleanAttr): (WebCore::jsTestObjReflectedURLAttrGetter): (WebCore::jsTestObjReflectedURLAttr): (WebCore::setJSTestObjReflectedURLAttrSetter): (WebCore::setJSTestObjReflectedURLAttr): (WebCore::jsTestObjReflectedUSVURLAttrGetter): (WebCore::jsTestObjReflectedUSVURLAttr): (WebCore::setJSTestObjReflectedUSVURLAttrSetter): (WebCore::setJSTestObjReflectedUSVURLAttr): (WebCore::jsTestObjReflectedCustomIntegralAttrGetter): (WebCore::jsTestObjReflectedCustomIntegralAttr): (WebCore::setJSTestObjReflectedCustomIntegralAttrSetter): (WebCore::setJSTestObjReflectedCustomIntegralAttr): (WebCore::jsTestObjReflectedCustomBooleanAttrGetter): (WebCore::jsTestObjReflectedCustomBooleanAttr): (WebCore::setJSTestObjReflectedCustomBooleanAttrSetter): (WebCore::setJSTestObjReflectedCustomBooleanAttr): (WebCore::jsTestObjReflectedCustomURLAttrGetter): (WebCore::jsTestObjReflectedCustomURLAttr): (WebCore::setJSTestObjReflectedCustomURLAttrSetter): (WebCore::setJSTestObjReflectedCustomURLAttr): (WebCore::jsTestObjEnabledAtRuntimeAttributeGetter): (WebCore::jsTestObjEnabledAtRuntimeAttribute): (WebCore::setJSTestObjEnabledAtRuntimeAttributeSetter): (WebCore::setJSTestObjEnabledAtRuntimeAttribute): (WebCore::jsTestObjConstructorEnabledAtRuntimeAttributeStaticGetter): (WebCore::jsTestObjConstructorEnabledAtRuntimeAttributeStatic): (WebCore::setJSTestObjConstructorEnabledAtRuntimeAttributeStaticSetter): (WebCore::setJSTestObjConstructorEnabledAtRuntimeAttributeStatic): (WebCore::jsTestObjTypedArrayAttrGetter): (WebCore::jsTestObjTypedArrayAttr): (WebCore::setJSTestObjTypedArrayAttrSetter): (WebCore::setJSTestObjTypedArrayAttr): (WebCore::jsTestObjCustomAttrGetter): (WebCore::jsTestObjCustomAttr): (WebCore::setJSTestObjCustomAttrSetter): (WebCore::setJSTestObjCustomAttr): (WebCore::jsTestObjOnfooGetter): (WebCore::jsTestObjOnfoo): (WebCore::setJSTestObjOnfooSetter): (WebCore::setJSTestObjOnfoo): (WebCore::jsTestObjOnwebkitfooGetter): (WebCore::jsTestObjOnwebkitfoo): (WebCore::setJSTestObjOnwebkitfooSetter): (WebCore::setJSTestObjOnwebkitfoo): (WebCore::jsTestObjWithExecStateAttributeGetter): (WebCore::jsTestObjWithExecStateAttribute): (WebCore::setJSTestObjWithExecStateAttributeSetter): (WebCore::setJSTestObjWithExecStateAttribute): (WebCore::jsTestObjWithCallWithAndSetterCallWithAttributeGetter): (WebCore::jsTestObjWithCallWithAndSetterCallWithAttribute): (WebCore::setJSTestObjWithCallWithAndSetterCallWithAttributeSetter): (WebCore::setJSTestObjWithCallWithAndSetterCallWithAttribute): (WebCore::jsTestObjWithScriptExecutionContextAttributeGetter): (WebCore::jsTestObjWithScriptExecutionContextAttribute): (WebCore::setJSTestObjWithScriptExecutionContextAttributeSetter): (WebCore::setJSTestObjWithScriptExecutionContextAttribute): (WebCore::jsTestObjWithScriptExecutionContextAndExecStateAttributeGetter): (WebCore::jsTestObjWithScriptExecutionContextAndExecStateAttribute): (WebCore::setJSTestObjWithScriptExecutionContextAndExecStateAttributeSetter): (WebCore::setJSTestObjWithScriptExecutionContextAndExecStateAttribute): (WebCore::jsTestObjWithScriptExecutionContextAndExecStateWithSpacesAttributeGetter): (WebCore::jsTestObjWithScriptExecutionContextAndExecStateWithSpacesAttribute): (WebCore::setJSTestObjWithScriptExecutionContextAndExecStateWithSpacesAttributeSetter): (WebCore::setJSTestObjWithScriptExecutionContextAndExecStateWithSpacesAttribute): (WebCore::jsTestObjConditionalAttr1Getter): (WebCore::jsTestObjConditionalAttr1): (WebCore::setJSTestObjConditionalAttr1Setter): (WebCore::setJSTestObjConditionalAttr1): (WebCore::jsTestObjConditionalAttr2Getter): (WebCore::jsTestObjConditionalAttr2): (WebCore::setJSTestObjConditionalAttr2Setter): (WebCore::setJSTestObjConditionalAttr2): (WebCore::jsTestObjConditionalAttr3Getter): (WebCore::jsTestObjConditionalAttr3): (WebCore::setJSTestObjConditionalAttr3Setter): (WebCore::setJSTestObjConditionalAttr3): (WebCore::jsTestObjConditionalAttr4ConstructorGetter): (WebCore::jsTestObjConditionalAttr4Constructor): (WebCore::setJSTestObjConditionalAttr4ConstructorSetter): (WebCore::setJSTestObjConditionalAttr4Constructor): (WebCore::jsTestObjConditionalAttr5ConstructorGetter): (WebCore::jsTestObjConditionalAttr5Constructor): (WebCore::setJSTestObjConditionalAttr5ConstructorSetter): (WebCore::setJSTestObjConditionalAttr5Constructor): (WebCore::jsTestObjConditionalAttr6ConstructorGetter): (WebCore::jsTestObjConditionalAttr6Constructor): (WebCore::setJSTestObjConditionalAttr6ConstructorSetter): (WebCore::setJSTestObjConditionalAttr6Constructor): (WebCore::jsTestObjCachedAttribute1Getter): (WebCore::jsTestObjCachedAttribute1): (WebCore::jsTestObjCachedAttribute2Getter): (WebCore::jsTestObjCachedAttribute2): (WebCore::jsTestObjCachedAttribute3Getter): (WebCore::jsTestObjCachedAttribute3): (WebCore::jsTestObjAnyAttributeGetter): (WebCore::jsTestObjAnyAttribute): (WebCore::setJSTestObjAnyAttributeSetter): (WebCore::setJSTestObjAnyAttribute): (WebCore::jsTestObjObjectAttributeGetter): (WebCore::jsTestObjObjectAttribute): (WebCore::setJSTestObjObjectAttributeSetter): (WebCore::setJSTestObjObjectAttribute): (WebCore::jsTestObjContentDocumentGetter): (WebCore::jsTestObjContentDocument): (WebCore::jsTestObjMutablePointGetter): (WebCore::jsTestObjMutablePoint): (WebCore::setJSTestObjMutablePointSetter): (WebCore::setJSTestObjMutablePoint): (WebCore::jsTestObjStrawberryGetter): (WebCore::jsTestObjStrawberry): (WebCore::setJSTestObjStrawberrySetter): (WebCore::setJSTestObjStrawberry): (WebCore::jsTestObjDescriptionGetter): (WebCore::jsTestObjDescription): (WebCore::jsTestObjIdGetter): (WebCore::jsTestObjId): (WebCore::setJSTestObjIdSetter): (WebCore::setJSTestObjId): (WebCore::jsTestObjHashGetter): (WebCore::jsTestObjHash): (WebCore::jsTestObjReplaceableAttributeGetter): (WebCore::jsTestObjReplaceableAttribute): (WebCore::setJSTestObjReplaceableAttributeSetter): (WebCore::setJSTestObjReplaceableAttribute): (WebCore::jsTestObjNullableDoubleAttributeGetter): (WebCore::jsTestObjNullableDoubleAttribute): (WebCore::jsTestObjNullableLongAttributeGetter): (WebCore::jsTestObjNullableLongAttribute): (WebCore::jsTestObjNullableBooleanAttributeGetter): (WebCore::jsTestObjNullableBooleanAttribute): (WebCore::jsTestObjNullableStringAttributeGetter): (WebCore::jsTestObjNullableStringAttribute): (WebCore::jsTestObjNullableLongSettableAttributeGetter): (WebCore::jsTestObjNullableLongSettableAttribute): (WebCore::setJSTestObjNullableLongSettableAttributeSetter): (WebCore::setJSTestObjNullableLongSettableAttribute): (WebCore::jsTestObjNullableStringSettableAttributeGetter): (WebCore::jsTestObjNullableStringSettableAttribute): (WebCore::setJSTestObjNullableStringSettableAttributeSetter): (WebCore::setJSTestObjNullableStringSettableAttribute): (WebCore::jsTestObjNullableUSVStringSettableAttributeGetter): (WebCore::jsTestObjNullableUSVStringSettableAttribute): (WebCore::setJSTestObjNullableUSVStringSettableAttributeSetter): (WebCore::setJSTestObjNullableUSVStringSettableAttribute): (WebCore::jsTestObjNullableByteStringSettableAttributeGetter): (WebCore::jsTestObjNullableByteStringSettableAttribute): (WebCore::setJSTestObjNullableByteStringSettableAttributeSetter): (WebCore::setJSTestObjNullableByteStringSettableAttribute): (WebCore::jsTestObjAttributeGetter): (WebCore::jsTestObjAttribute): (WebCore::jsTestObjAttributeWithReservedEnumTypeGetter): (WebCore::jsTestObjAttributeWithReservedEnumType): (WebCore::setJSTestObjAttributeWithReservedEnumTypeSetter): (WebCore::setJSTestObjAttributeWithReservedEnumType): (WebCore::jsTestObjTestReadOnlyVoidPromiseAttributeGetter): (WebCore::jsTestObjTestReadOnlyVoidPromiseAttribute): (WebCore::jsTestObjTestReadOnlyPromiseAttributeGetter): (WebCore::jsTestObjTestReadOnlyPromiseAttribute): (WebCore::jsTestObjPutForwardsAttributeGetter): (WebCore::jsTestObjPutForwardsAttribute): (WebCore::setJSTestObjPutForwardsAttributeSetter): (WebCore::setJSTestObjPutForwardsAttribute): (WebCore::jsTestObjPutForwardsNullableAttributeGetter): (WebCore::jsTestObjPutForwardsNullableAttribute): (WebCore::setJSTestObjPutForwardsNullableAttributeSetter): (WebCore::setJSTestObjPutForwardsNullableAttribute): (WebCore::jsTestObjStringifierAttributeGetter): (WebCore::jsTestObjStringifierAttribute): (WebCore::setJSTestObjStringifierAttributeSetter): (WebCore::setJSTestObjStringifierAttribute): (WebCore::jsTestObjConditionallyReadWriteAttributeGetter): (WebCore::jsTestObjConditionallyReadWriteAttribute): (WebCore::setJSTestObjConditionallyReadWriteAttributeSetter): (WebCore::setJSTestObjConditionallyReadWriteAttribute): (WebCore::jsTestObjConditionalAndConditionallyReadWriteAttributeGetter): (WebCore::jsTestObjConditionalAndConditionallyReadWriteAttribute): (WebCore::setJSTestObjConditionalAndConditionallyReadWriteAttributeSetter): (WebCore::setJSTestObjConditionalAndConditionallyReadWriteAttribute): (WebCore::jsTestObjConditionallyExposedToWindowAttributeGetter): (WebCore::jsTestObjConditionallyExposedToWindowAttribute): (WebCore::setJSTestObjConditionallyExposedToWindowAttributeSetter): (WebCore::setJSTestObjConditionallyExposedToWindowAttribute): (WebCore::jsTestObjConditionallyExposedToWorkerAttributeGetter): (WebCore::jsTestObjConditionallyExposedToWorkerAttribute): (WebCore::setJSTestObjConditionallyExposedToWorkerAttributeSetter): (WebCore::setJSTestObjConditionallyExposedToWorkerAttribute): (WebCore::jsTestObjConditionallyExposedToWindowAndWorkerAttributeGetter): (WebCore::jsTestObjConditionallyExposedToWindowAndWorkerAttribute): (WebCore::setJSTestObjConditionallyExposedToWindowAndWorkerAttributeSetter): (WebCore::setJSTestObjConditionallyExposedToWindowAndWorkerAttribute): (WebCore::jsTestObjPrototypeFunctionEnabledAtRuntimeOperation1Body): (WebCore::jsTestObjPrototypeFunctionEnabledAtRuntimeOperation2Body): (WebCore::jsTestObjPrototypeFunctionEnabledAtRuntimeOperationOverloadDispatcher): (WebCore::jsTestObjPrototypeFunctionEnabledAtRuntimeOperation): (WebCore::jsTestObjConstructorFunctionEnabledAtRuntimeOperationStaticBody): (WebCore::jsTestObjConstructorFunctionEnabledAtRuntimeOperationStatic): (WebCore::jsTestObjPrototypeFunctionEnabledInSpecificWorldWhenRuntimeFeatureEnabledBody): (WebCore::jsTestObjPrototypeFunctionEnabledInSpecificWorldWhenRuntimeFeatureEnabled): (WebCore::jsTestObjPrototypeFunctionWorldSpecificMethodBody): (WebCore::jsTestObjPrototypeFunctionWorldSpecificMethod): (WebCore::jsTestObjPrototypeFunctionCalculateSecretResultBody): (WebCore::jsTestObjPrototypeFunctionCalculateSecretResult): (WebCore::jsTestObjPrototypeFunctionGetSecretBooleanBody): (WebCore::jsTestObjPrototypeFunctionGetSecretBoolean): (WebCore::jsTestObjPrototypeFunctionTestFeatureGetSecretBooleanBody): (WebCore::jsTestObjPrototypeFunctionTestFeatureGetSecretBoolean): (WebCore::jsTestObjPrototypeFunctionVoidMethodBody): (WebCore::jsTestObjPrototypeFunctionVoidMethod): (WebCore::jsTestObjPrototypeFunctionVoidMethodWithArgsBody): (WebCore::jsTestObjPrototypeFunctionVoidMethodWithArgs): (WebCore::jsTestObjPrototypeFunctionByteMethodBody): (WebCore::jsTestObjPrototypeFunctionByteMethod): (WebCore::jsTestObjPrototypeFunctionByteMethodWithArgsBody): (WebCore::jsTestObjPrototypeFunctionByteMethodWithArgs): (WebCore::jsTestObjPrototypeFunctionOctetMethodBody): (WebCore::jsTestObjPrototypeFunctionOctetMethod): (WebCore::jsTestObjPrototypeFunctionOctetMethodWithArgsBody): (WebCore::jsTestObjPrototypeFunctionOctetMethodWithArgs): (WebCore::jsTestObjPrototypeFunctionLongMethodBody): (WebCore::jsTestObjPrototypeFunctionLongMethod): (WebCore::jsTestObjPrototypeFunctionLongMethodWithArgsBody): (WebCore::jsTestObjPrototypeFunctionLongMethodWithArgs): (WebCore::jsTestObjPrototypeFunctionObjMethodBody): (WebCore::jsTestObjPrototypeFunctionObjMethod): (WebCore::jsTestObjPrototypeFunctionObjMethodWithArgsBody): (WebCore::jsTestObjPrototypeFunctionObjMethodWithArgs): (WebCore::jsTestObjInstanceFunctionUnforgeableMethodBody): (WebCore::jsTestObjInstanceFunctionUnforgeableMethod): (WebCore::jsTestObjPrototypeFunctionMethodWithArgTreatingNullAsEmptyStringBody): (WebCore::jsTestObjPrototypeFunctionMethodWithArgTreatingNullAsEmptyString): (WebCore::jsTestObjPrototypeFunctionMethodWithXPathNSResolverParameterBody): (WebCore::jsTestObjPrototypeFunctionMethodWithXPathNSResolverParameter): (WebCore::jsTestObjPrototypeFunctionNullableStringMethodBody): (WebCore::jsTestObjPrototypeFunctionNullableStringMethod): (WebCore::jsTestObjConstructorFunctionNullableStringStaticMethodBody): (WebCore::jsTestObjConstructorFunctionNullableStringStaticMethod): (WebCore::jsTestObjPrototypeFunctionNullableStringSpecialMethodBody): (WebCore::jsTestObjPrototypeFunctionNullableStringSpecialMethod): (WebCore::jsTestObjPrototypeFunctionMethodWithEnumArgBody): (WebCore::jsTestObjPrototypeFunctionMethodWithEnumArg): (WebCore::jsTestObjPrototypeFunctionMethodWithStandaloneEnumArgBody): (WebCore::jsTestObjPrototypeFunctionMethodWithStandaloneEnumArg): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalEnumArgBody): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalEnumArg): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalEnumArgAndDefaultValueBody): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalEnumArgAndDefaultValue): (WebCore::jsTestObjPrototypeFunctionMethodThatRequiresAllArgsAndThrowsBody): (WebCore::jsTestObjPrototypeFunctionMethodThatRequiresAllArgsAndThrows): (WebCore::jsTestObjPrototypeFunctionMethodWithUSVStringArgBody): (WebCore::jsTestObjPrototypeFunctionMethodWithUSVStringArg): (WebCore::jsTestObjPrototypeFunctionMethodWithNullableUSVStringArgBody): (WebCore::jsTestObjPrototypeFunctionMethodWithNullableUSVStringArg): (WebCore::jsTestObjPrototypeFunctionMethodWithUSVStringArgTreatingNullAsEmptyStringBody): (WebCore::jsTestObjPrototypeFunctionMethodWithUSVStringArgTreatingNullAsEmptyString): (WebCore::jsTestObjPrototypeFunctionMethodWithByteStringArgBody): (WebCore::jsTestObjPrototypeFunctionMethodWithByteStringArg): (WebCore::jsTestObjPrototypeFunctionMethodWithNullableByteStringArgBody): (WebCore::jsTestObjPrototypeFunctionMethodWithNullableByteStringArg): (WebCore::jsTestObjPrototypeFunctionMethodWithByteStringArgTreatingNullAsEmptyStringBody): (WebCore::jsTestObjPrototypeFunctionMethodWithByteStringArgTreatingNullAsEmptyString): (WebCore::jsTestObjPrototypeFunctionSerializedValueBody): (WebCore::jsTestObjPrototypeFunctionSerializedValue): (WebCore::jsTestObjPrototypeFunctionMethodWithRecordBody): (WebCore::jsTestObjPrototypeFunctionMethodWithRecord): (WebCore::jsTestObjPrototypeFunctionMethodWithExceptionBody): (WebCore::jsTestObjPrototypeFunctionMethodWithException): (WebCore::jsTestObjPrototypeFunctionMethodWithExceptionReturningLongBody): (WebCore::jsTestObjPrototypeFunctionMethodWithExceptionReturningLong): (WebCore::jsTestObjPrototypeFunctionMethodWithExceptionReturningObjectBody): (WebCore::jsTestObjPrototypeFunctionMethodWithExceptionReturningObject): (WebCore::jsTestObjPrototypeFunctionCustomMethodBody): (WebCore::jsTestObjPrototypeFunctionCustomMethod): (WebCore::jsTestObjPrototypeFunctionCustomMethodWithArgsBody): (WebCore::jsTestObjPrototypeFunctionCustomMethodWithArgs): (WebCore::jsTestObjPrototypeFunctionPrivateMethodBody): (WebCore::jsTestObjPrototypeFunctionPrivateMethod): (WebCore::jsTestObjPrototypeFunctionPublicAndPrivateMethodBody): (WebCore::jsTestObjPrototypeFunctionPublicAndPrivateMethod): (WebCore::jsTestObjPrototypeFunctionAddEventListenerBody): (WebCore::jsTestObjPrototypeFunctionAddEventListener): (WebCore::jsTestObjPrototypeFunctionRemoveEventListenerBody): (WebCore::jsTestObjPrototypeFunctionRemoveEventListener): (WebCore::jsTestObjPrototypeFunctionWithExecStateVoidBody): (WebCore::jsTestObjPrototypeFunctionWithExecStateVoid): (WebCore::jsTestObjPrototypeFunctionWithExecStateObjBody): (WebCore::jsTestObjPrototypeFunctionWithExecStateObj): (WebCore::jsTestObjPrototypeFunctionWithExecStateVoidExceptionBody): (WebCore::jsTestObjPrototypeFunctionWithExecStateVoidException): (WebCore::jsTestObjPrototypeFunctionWithExecStateObjExceptionBody): (WebCore::jsTestObjPrototypeFunctionWithExecStateObjException): (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextBody): (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContext): (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndExecStateBody): (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndExecState): (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndExecStateObjExceptionBody): (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndExecStateObjException): (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndExecStateWithSpacesBody): (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndExecStateWithSpaces): (WebCore::jsTestObjPrototypeFunctionWithDocumentArgumentBody): (WebCore::jsTestObjPrototypeFunctionWithDocumentArgument): (WebCore::jsTestObjPrototypeFunctionWithCallerDocumentArgumentBody): (WebCore::jsTestObjPrototypeFunctionWithCallerDocumentArgument): (WebCore::jsTestObjPrototypeFunctionWithCallerWindowArgumentBody): (WebCore::jsTestObjPrototypeFunctionWithCallerWindowArgument): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalArgBody): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalArg): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalArgAndDefaultValueBody): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalArgAndDefaultValue): (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArgBody): (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArg): (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgsBody): (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgs): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringBody): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalString): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalUSVStringBody): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalUSVString): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalAtomStringBody): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalAtomString): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringAndDefaultValueBody): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringAndDefaultValue): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalAtomStringAndDefaultValueBody): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalAtomStringAndDefaultValue): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringIsNullBody): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringIsNull): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringIsUndefinedBody): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringIsUndefined): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalAtomStringIsNullBody): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalAtomStringIsNull): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringIsEmptyStringBody): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringIsEmptyString): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalUSVStringIsEmptyStringBody): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalUSVStringIsEmptyString): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalAtomStringIsEmptyStringBody): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalAtomStringIsEmptyString): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalDoubleIsNaNBody): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalDoubleIsNaN): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalFloatIsNaNBody): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalFloatIsNaN): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalLongLongBody): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalLongLong): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalLongLongIsZeroBody): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalLongLongIsZero): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalUnsignedLongLongBody): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalUnsignedLongLong): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalUnsignedLongLongIsZeroBody): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalUnsignedLongLongIsZero): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalSequenceBody): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalSequence): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalSequenceIsEmptyBody): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalSequenceIsEmpty): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalBooleanBody): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalBoolean): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalBooleanIsFalseBody): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalBooleanIsFalse): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalAnyBody): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalAny): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalObjectBody): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalObject): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalNullableWrapperBody): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalNullableWrapper): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalNullableWrapperIsNullBody): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalNullableWrapperIsNull): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalXPathNSResolverBody): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalXPathNSResolver): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalRecordBody): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalRecord): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalPromiseBody): (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalPromise): (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackArgBody): (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackArg): (WebCore::jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackArgBody): (WebCore::jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackArg): (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackAndOptionalArgBody): (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackAndOptionalArg): (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackFunctionArgBody): (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackFunctionArg): (WebCore::jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackFunctionArgBody): (WebCore::jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackFunctionArg): (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackFunctionAndOptionalArgBody): (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackFunctionAndOptionalArg): (WebCore::jsTestObjConstructorFunctionStaticMethodWithCallbackAndOptionalArgBody): (WebCore::jsTestObjConstructorFunctionStaticMethodWithCallbackAndOptionalArg): (WebCore::jsTestObjConstructorFunctionStaticMethodWithCallbackArgBody): (WebCore::jsTestObjConstructorFunctionStaticMethodWithCallbackArg): (WebCore::jsTestObjPrototypeFunctionConditionalMethod1Body): (WebCore::jsTestObjPrototypeFunctionConditionalMethod1): (WebCore::jsTestObjPrototypeFunctionConditionalMethod2Body): (WebCore::jsTestObjPrototypeFunctionConditionalMethod2): (WebCore::jsTestObjPrototypeFunctionConditionalMethod3Body): (WebCore::jsTestObjPrototypeFunctionConditionalMethod3): (WebCore::jsTestObjPrototypeFunctionOverloadedMethod1Body): (WebCore::jsTestObjPrototypeFunctionOverloadedMethod2Body): (WebCore::jsTestObjPrototypeFunctionOverloadedMethod3Body): (WebCore::jsTestObjPrototypeFunctionOverloadedMethod4Body): (WebCore::jsTestObjPrototypeFunctionOverloadedMethod5Body): (WebCore::jsTestObjPrototypeFunctionOverloadedMethod6Body): (WebCore::jsTestObjPrototypeFunctionOverloadedMethod7Body): (WebCore::jsTestObjPrototypeFunctionOverloadedMethod8Body): (WebCore::jsTestObjPrototypeFunctionOverloadedMethod9Body): (WebCore::jsTestObjPrototypeFunctionOverloadedMethod10Body): (WebCore::jsTestObjPrototypeFunctionOverloadedMethod11Body): (WebCore::jsTestObjPrototypeFunctionOverloadedMethod12Body): (WebCore::jsTestObjPrototypeFunctionOverloadedMethod13Body): (WebCore::jsTestObjPrototypeFunctionOverloadedMethodOverloadDispatcher): (WebCore::jsTestObjPrototypeFunctionOverloadedMethod): (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithOptionalParameter1Body): (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithOptionalParameter2Body): (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithOptionalParameterOverloadDispatcher): (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithOptionalParameter): (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithDistinguishingUnion1Body): (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithDistinguishingUnion2Body): (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithDistinguishingUnionOverloadDispatcher): (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithDistinguishingUnion): (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWith2DistinguishingUnions1Body): (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWith2DistinguishingUnions2Body): (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWith2DistinguishingUnionsOverloadDispatcher): (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWith2DistinguishingUnions): (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithNonDistinguishingUnion1Body): (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithNonDistinguishingUnion2Body): (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithNonDistinguishingUnionOverloadDispatcher): (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithNonDistinguishingUnion): (WebCore::jsTestObjPrototypeFunctionOverloadWithNullableUnion1Body): (WebCore::jsTestObjPrototypeFunctionOverloadWithNullableUnion2Body): (WebCore::jsTestObjPrototypeFunctionOverloadWithNullableUnionOverloadDispatcher): (WebCore::jsTestObjPrototypeFunctionOverloadWithNullableUnion): (WebCore::jsTestObjPrototypeFunctionOverloadWithOptionalUnion1Body): (WebCore::jsTestObjPrototypeFunctionOverloadWithOptionalUnion2Body): (WebCore::jsTestObjPrototypeFunctionOverloadWithOptionalUnionOverloadDispatcher): (WebCore::jsTestObjPrototypeFunctionOverloadWithOptionalUnion): (WebCore::jsTestObjPrototypeFunctionOverloadWithNullableNonDistinguishingParameter1Body): (WebCore::jsTestObjPrototypeFunctionOverloadWithNullableNonDistinguishingParameter2Body): (WebCore::jsTestObjPrototypeFunctionOverloadWithNullableNonDistinguishingParameterOverloadDispatcher): (WebCore::jsTestObjPrototypeFunctionOverloadWithNullableNonDistinguishingParameter): (WebCore::jsTestObjConstructorFunctionClassMethodBody): (WebCore::jsTestObjConstructorFunctionClassMethod): (WebCore::jsTestObjConstructorFunctionClassMethodWithOptionalBody): (WebCore::jsTestObjConstructorFunctionClassMethodWithOptional): (WebCore::jsTestObjConstructorFunctionClassMethod2Body): (WebCore::jsTestObjConstructorFunctionClassMethod2): (WebCore::jsTestObjConstructorFunctionOverloadedMethod11Body): (WebCore::jsTestObjConstructorFunctionOverloadedMethod12Body): (WebCore::jsTestObjConstructorFunctionOverloadedMethod1OverloadDispatcher): (WebCore::jsTestObjConstructorFunctionOverloadedMethod1): (WebCore::jsTestObjPrototypeFunctionClassMethodWithClampBody): (WebCore::jsTestObjPrototypeFunctionClassMethodWithClamp): (WebCore::jsTestObjPrototypeFunctionClassMethodWithClampOnOptionalBody): (WebCore::jsTestObjPrototypeFunctionClassMethodWithClampOnOptional): (WebCore::jsTestObjPrototypeFunctionClassMethodWithEnforceRangeBody): (WebCore::jsTestObjPrototypeFunctionClassMethodWithEnforceRange): (WebCore::jsTestObjPrototypeFunctionClassMethodWithEnforceRangeOnOptionalBody): (WebCore::jsTestObjPrototypeFunctionClassMethodWithEnforceRangeOnOptional): (WebCore::jsTestObjPrototypeFunctionMethodWithUnsignedLongSequenceBody): (WebCore::jsTestObjPrototypeFunctionMethodWithUnsignedLongSequence): (WebCore::jsTestObjPrototypeFunctionStringArrayFunctionBody): (WebCore::jsTestObjPrototypeFunctionStringArrayFunction): (WebCore::jsTestObjPrototypeFunctionDomStringListFunctionBody): (WebCore::jsTestObjPrototypeFunctionDomStringListFunction): (WebCore::jsTestObjPrototypeFunctionOperationWithOptionalUnionParameterBody): (WebCore::jsTestObjPrototypeFunctionOperationWithOptionalUnionParameter): (WebCore::jsTestObjPrototypeFunctionMethodWithAndWithoutNullableSequenceBody): (WebCore::jsTestObjPrototypeFunctionMethodWithAndWithoutNullableSequence): (WebCore::jsTestObjPrototypeFunctionGetElementByIdBody): (WebCore::jsTestObjPrototypeFunctionGetElementById): (WebCore::jsTestObjPrototypeFunctionGetSVGDocumentBody): (WebCore::jsTestObjPrototypeFunctionGetSVGDocument): (WebCore::jsTestObjPrototypeFunctionConvert1Body): (WebCore::jsTestObjPrototypeFunctionConvert1): (WebCore::jsTestObjPrototypeFunctionConvert2Body): (WebCore::jsTestObjPrototypeFunctionConvert2): (WebCore::jsTestObjPrototypeFunctionConvert3Body): (WebCore::jsTestObjPrototypeFunctionConvert3): (WebCore::jsTestObjPrototypeFunctionConvert4Body): (WebCore::jsTestObjPrototypeFunctionConvert4): (WebCore::jsTestObjPrototypeFunctionMutablePointFunctionBody): (WebCore::jsTestObjPrototypeFunctionMutablePointFunction): (WebCore::jsTestObjPrototypeFunctionOrangeBody): (WebCore::jsTestObjPrototypeFunctionOrange): (WebCore::jsTestObjPrototypeFunctionVariadicStringMethodBody): (WebCore::jsTestObjPrototypeFunctionVariadicStringMethod): (WebCore::jsTestObjPrototypeFunctionVariadicDoubleMethodBody): (WebCore::jsTestObjPrototypeFunctionVariadicDoubleMethod): (WebCore::jsTestObjPrototypeFunctionVariadicNodeMethodBody): (WebCore::jsTestObjPrototypeFunctionVariadicNodeMethod): (WebCore::jsTestObjPrototypeFunctionVariadicUnionMethodBody): (WebCore::jsTestObjPrototypeFunctionVariadicUnionMethod): (WebCore::jsTestObjPrototypeFunctionAnyBody): (WebCore::jsTestObjPrototypeFunctionAny): (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionBody): (WebCore::jsTestObjPrototypeFunctionTestPromiseFunction): (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionWithFloatArgumentBody): (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionWithFloatArgument): (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionWithExceptionBody): (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionWithException): (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionWithOptionalIntArgumentBody): (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionWithOptionalIntArgument): (WebCore::jsTestObjPrototypeFunctionTestPromiseOverloadedFunction1Body): (WebCore::jsTestObjPrototypeFunctionTestPromiseOverloadedFunction2Body): (WebCore::jsTestObjPrototypeFunctionTestPromiseOverloadedFunctionOverloadDispatcher): (WebCore::jsTestObjPrototypeFunctionTestPromiseOverloadedFunction): (WebCore::jsTestObjConstructorFunctionTestStaticPromiseFunctionBody): (WebCore::jsTestObjConstructorFunctionTestStaticPromiseFunction): (WebCore::jsTestObjConstructorFunctionTestStaticPromiseFunctionWithExceptionBody): (WebCore::jsTestObjConstructorFunctionTestStaticPromiseFunctionWithException): (WebCore::jsTestObjPrototypeFunctionTestCustomPromiseFunctionBody): (WebCore::jsTestObjPrototypeFunctionTestCustomPromiseFunction): (WebCore::jsTestObjConstructorFunctionTestStaticCustomPromiseFunctionBody): (WebCore::jsTestObjConstructorFunctionTestStaticCustomPromiseFunction): (WebCore::jsTestObjPrototypeFunctionTestCustomReturnsOwnPromiseFunctionBody): (WebCore::jsTestObjPrototypeFunctionTestCustomReturnsOwnPromiseFunction): (WebCore::jsTestObjPrototypeFunctionTestReturnsOwnPromiseAndPromiseProxyFunctionBody): (WebCore::jsTestObjPrototypeFunctionTestReturnsOwnPromiseAndPromiseProxyFunction): (WebCore::jsTestObjPrototypeFunctionConditionalOverload1Body): (WebCore::jsTestObjPrototypeFunctionConditionalOverload2Body): (WebCore::jsTestObjPrototypeFunctionConditionalOverloadOverloadDispatcher): (WebCore::jsTestObjPrototypeFunctionConditionalOverload): (WebCore::jsTestObjPrototypeFunctionSingleConditionalOverload1Body): (WebCore::jsTestObjPrototypeFunctionSingleConditionalOverload2Body): (WebCore::jsTestObjPrototypeFunctionSingleConditionalOverloadOverloadDispatcher): (WebCore::jsTestObjPrototypeFunctionSingleConditionalOverload): (WebCore::jsTestObjPrototypeFunctionAttachShadowRootBody): (WebCore::jsTestObjPrototypeFunctionAttachShadowRoot): (WebCore::jsTestObjPrototypeFunctionOperationWithExternalDictionaryParameterBody): (WebCore::jsTestObjPrototypeFunctionOperationWithExternalDictionaryParameter): (WebCore::jsTestObjPrototypeFunctionBufferSourceParameterBody): (WebCore::jsTestObjPrototypeFunctionBufferSourceParameter): (WebCore::jsTestObjPrototypeFunctionLegacyCallerNamedBody): (WebCore::jsTestObjPrototypeFunctionLegacyCallerNamed): (WebCore::jsTestObjPrototypeFunctionTestReturnValueOptimizationBody): (WebCore::jsTestObjPrototypeFunctionTestReturnValueOptimization): (WebCore::jsTestObjPrototypeFunctionTestReturnValueOptimizationWithExceptionBody): (WebCore::jsTestObjPrototypeFunctionTestReturnValueOptimizationWithException): (WebCore::jsTestObjPrototypeFunctionConditionallyExposedToWindowFunctionBody): (WebCore::jsTestObjPrototypeFunctionConditionallyExposedToWindowFunction): (WebCore::jsTestObjPrototypeFunctionConditionallyExposedToWorkerFunctionBody): (WebCore::jsTestObjPrototypeFunctionConditionallyExposedToWorkerFunction): (WebCore::jsTestObjPrototypeFunctionConditionallyExposedToWindowAndWorkerFunctionBody): (WebCore::jsTestObjPrototypeFunctionConditionallyExposedToWindowAndWorkerFunction): (WebCore::jsTestObjPrototypeFunctionToStringBody): (WebCore::jsTestObjPrototypeFunctionToString): (WebCore::JSTestObj::serialize): (WebCore::jsTestObjPrototypeFunctionToJSONBody): (WebCore::jsTestObjPrototypeFunctionToJSON): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestObj.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp: (WebCore::constructJSTestOverloadedConstructors1): (WebCore::constructJSTestOverloadedConstructors2): (WebCore::constructJSTestOverloadedConstructors3): (WebCore::constructJSTestOverloadedConstructors4): (WebCore::constructJSTestOverloadedConstructors5): (WebCore::JSTestOverloadedConstructorsConstructor::construct): (WebCore::jsTestOverloadedConstructorsConstructor): (WebCore::setJSTestOverloadedConstructorsConstructor): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestOverloadedConstructors.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp: (WebCore::constructJSTestOverloadedConstructorsWithSequence1): (WebCore::constructJSTestOverloadedConstructorsWithSequence2): (WebCore::JSTestOverloadedConstructorsWithSequenceConstructor::construct): (WebCore::jsTestOverloadedConstructorsWithSequenceConstructor): (WebCore::setJSTestOverloadedConstructorsWithSequenceConstructor): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp: (WebCore::JSTestOverrideBuiltins::getOwnPropertySlot): (WebCore::JSTestOverrideBuiltins::getOwnPropertySlotByIndex): (WebCore::JSTestOverrideBuiltins::getOwnPropertyNames): (WebCore::IDLOperation<JSTestOverrideBuiltins>::cast): (WebCore::jsTestOverrideBuiltinsConstructor): (WebCore::setJSTestOverrideBuiltinsConstructor): (WebCore::jsTestOverrideBuiltinsPrototypeFunctionNamedItemBody): (WebCore::jsTestOverrideBuiltinsPrototypeFunctionNamedItem): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestOverrideBuiltins.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestPluginInterface.cpp: (WebCore::JSTestPluginInterface::getOwnPropertySlot): (WebCore::JSTestPluginInterface::getOwnPropertySlotByIndex): (WebCore::JSTestPluginInterface::put): (WebCore::JSTestPluginInterface::putByIndex): (WebCore::jsTestPluginInterfaceConstructor): (WebCore::setJSTestPluginInterfaceConstructor): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestPluginInterface.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp: (WebCore::convertDictionary<TestPromiseRejectionEvent::Init>): (WebCore::JSTestPromiseRejectionEventConstructor::construct): (WebCore::IDLAttribute<JSTestPromiseRejectionEvent>::cast): (WebCore::jsTestPromiseRejectionEventConstructor): (WebCore::setJSTestPromiseRejectionEventConstructor): (WebCore::jsTestPromiseRejectionEventPromiseGetter): (WebCore::jsTestPromiseRejectionEventPromise): (WebCore::jsTestPromiseRejectionEventReasonGetter): (WebCore::jsTestPromiseRejectionEventReason): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestSerialization.cpp: (WebCore::IDLAttribute<JSTestSerialization>::cast): (WebCore::IDLOperation<JSTestSerialization>::cast): (WebCore::jsTestSerializationConstructor): (WebCore::setJSTestSerializationConstructor): (WebCore::jsTestSerializationFirstStringAttributeGetter): (WebCore::jsTestSerializationFirstStringAttribute): (WebCore::setJSTestSerializationFirstStringAttributeSetter): (WebCore::setJSTestSerializationFirstStringAttribute): (WebCore::jsTestSerializationSecondLongAttributeGetter): (WebCore::jsTestSerializationSecondLongAttribute): (WebCore::setJSTestSerializationSecondLongAttributeSetter): (WebCore::setJSTestSerializationSecondLongAttribute): (WebCore::jsTestSerializationThirdUnserializableAttributeGetter): (WebCore::jsTestSerializationThirdUnserializableAttribute): (WebCore::setJSTestSerializationThirdUnserializableAttributeSetter): (WebCore::setJSTestSerializationThirdUnserializableAttribute): (WebCore::jsTestSerializationFourthUnrestrictedDoubleAttributeGetter): (WebCore::jsTestSerializationFourthUnrestrictedDoubleAttribute): (WebCore::setJSTestSerializationFourthUnrestrictedDoubleAttributeSetter): (WebCore::setJSTestSerializationFourthUnrestrictedDoubleAttribute): (WebCore::jsTestSerializationFifthLongAttributeGetter): (WebCore::jsTestSerializationFifthLongAttribute): (WebCore::setJSTestSerializationFifthLongAttributeSetter): (WebCore::setJSTestSerializationFifthLongAttribute): (WebCore::jsTestSerializationSixthTypedefAttributeGetter): (WebCore::jsTestSerializationSixthTypedefAttribute): (WebCore::setJSTestSerializationSixthTypedefAttributeSetter): (WebCore::setJSTestSerializationSixthTypedefAttribute): (WebCore::jsTestSerializationSeventhDirectlySerializableAttributeGetter): (WebCore::jsTestSerializationSeventhDirectlySerializableAttribute): (WebCore::setJSTestSerializationSeventhDirectlySerializableAttributeSetter): (WebCore::setJSTestSerializationSeventhDirectlySerializableAttribute): (WebCore::jsTestSerializationEighthIndirectlyAttributeGetter): (WebCore::jsTestSerializationEighthIndirectlyAttribute): (WebCore::setJSTestSerializationEighthIndirectlyAttributeSetter): (WebCore::setJSTestSerializationEighthIndirectlyAttribute): (WebCore::jsTestSerializationNinthOptionalDirectlySerializableAttributeGetter): (WebCore::jsTestSerializationNinthOptionalDirectlySerializableAttribute): (WebCore::setJSTestSerializationNinthOptionalDirectlySerializableAttributeSetter): (WebCore::setJSTestSerializationNinthOptionalDirectlySerializableAttribute): (WebCore::jsTestSerializationTenthFrozenArrayAttributeGetter): (WebCore::jsTestSerializationTenthFrozenArrayAttribute): (WebCore::setJSTestSerializationTenthFrozenArrayAttributeSetter): (WebCore::setJSTestSerializationTenthFrozenArrayAttribute): (WebCore::jsTestSerializationEleventhSequenceAttributeGetter): (WebCore::jsTestSerializationEleventhSequenceAttribute): (WebCore::setJSTestSerializationEleventhSequenceAttributeSetter): (WebCore::setJSTestSerializationEleventhSequenceAttribute): (WebCore::jsTestSerializationTwelfthInterfaceSequenceAttributeGetter): (WebCore::jsTestSerializationTwelfthInterfaceSequenceAttribute): (WebCore::setJSTestSerializationTwelfthInterfaceSequenceAttributeSetter): (WebCore::setJSTestSerializationTwelfthInterfaceSequenceAttribute): (WebCore::JSTestSerialization::serialize): (WebCore::jsTestSerializationPrototypeFunctionToJSONBody): (WebCore::jsTestSerializationPrototypeFunctionToJSON): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestSerialization.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestSerializationIndirectInheritance.cpp: (WebCore::jsTestSerializationIndirectInheritanceConstructor): (WebCore::setJSTestSerializationIndirectInheritanceConstructor): * bindings/scripts/test/JS/JSTestSerializationInherit.cpp: (WebCore::IDLAttribute<JSTestSerializationInherit>::cast): (WebCore::IDLOperation<JSTestSerializationInherit>::cast): (WebCore::jsTestSerializationInheritConstructor): (WebCore::setJSTestSerializationInheritConstructor): (WebCore::jsTestSerializationInheritInheritLongAttributeGetter): (WebCore::jsTestSerializationInheritInheritLongAttribute): (WebCore::setJSTestSerializationInheritInheritLongAttributeSetter): (WebCore::setJSTestSerializationInheritInheritLongAttribute): (WebCore::JSTestSerializationInherit::serialize): (WebCore::jsTestSerializationInheritPrototypeFunctionToJSONBody): (WebCore::jsTestSerializationInheritPrototypeFunctionToJSON): * bindings/scripts/test/JS/JSTestSerializationInherit.h: * bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp: (WebCore::IDLAttribute<JSTestSerializationInheritFinal>::cast): (WebCore::IDLOperation<JSTestSerializationInheritFinal>::cast): (WebCore::jsTestSerializationInheritFinalConstructor): (WebCore::setJSTestSerializationInheritFinalConstructor): (WebCore::jsTestSerializationInheritFinalFinalLongAttributeFooGetter): (WebCore::jsTestSerializationInheritFinalFinalLongAttributeFoo): (WebCore::setJSTestSerializationInheritFinalFinalLongAttributeFooSetter): (WebCore::setJSTestSerializationInheritFinalFinalLongAttributeFoo): (WebCore::jsTestSerializationInheritFinalFinalLongAttributeBarGetter): (WebCore::jsTestSerializationInheritFinalFinalLongAttributeBar): (WebCore::setJSTestSerializationInheritFinalFinalLongAttributeBarSetter): (WebCore::setJSTestSerializationInheritFinalFinalLongAttributeBar): (WebCore::JSTestSerializationInheritFinal::serialize): (WebCore::jsTestSerializationInheritFinalPrototypeFunctionToJSONBody): (WebCore::jsTestSerializationInheritFinalPrototypeFunctionToJSON): * bindings/scripts/test/JS/JSTestSerializationInheritFinal.h: * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp: (WebCore::IDLAttribute<JSTestSerializedScriptValueInterface>::cast): (WebCore::IDLOperation<JSTestSerializedScriptValueInterface>::cast): (WebCore::jsTestSerializedScriptValueInterfaceConstructor): (WebCore::setJSTestSerializedScriptValueInterfaceConstructor): (WebCore::jsTestSerializedScriptValueInterfaceValueGetter): (WebCore::jsTestSerializedScriptValueInterfaceValue): (WebCore::setJSTestSerializedScriptValueInterfaceValueSetter): (WebCore::setJSTestSerializedScriptValueInterfaceValue): (WebCore::jsTestSerializedScriptValueInterfaceReadonlyValueGetter): (WebCore::jsTestSerializedScriptValueInterfaceReadonlyValue): (WebCore::jsTestSerializedScriptValueInterfaceCachedValueGetter): (WebCore::jsTestSerializedScriptValueInterfaceCachedValue): (WebCore::setJSTestSerializedScriptValueInterfaceCachedValueSetter): (WebCore::setJSTestSerializedScriptValueInterfaceCachedValue): (WebCore::jsTestSerializedScriptValueInterfacePortsGetter): (WebCore::jsTestSerializedScriptValueInterfacePorts): (WebCore::jsTestSerializedScriptValueInterfaceCachedReadonlyValueGetter): (WebCore::jsTestSerializedScriptValueInterfaceCachedReadonlyValue): (WebCore::jsTestSerializedScriptValueInterfacePrototypeFunctionFunctionBody): (WebCore::jsTestSerializedScriptValueInterfacePrototypeFunctionFunction): (WebCore::jsTestSerializedScriptValueInterfacePrototypeFunctionFunctionReturningBody): (WebCore::jsTestSerializedScriptValueInterfacePrototypeFunctionFunctionReturning): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestStandaloneDictionary.cpp: (WebCore::convertDictionary<DictionaryImplName>): (WebCore::convertDictionaryToJS): (WebCore::convertEnumerationToJS): (WebCore::parseEnumeration<TestStandaloneDictionary::EnumInStandaloneDictionaryFile>): * bindings/scripts/test/JS/JSTestStandaloneDictionary.h: * bindings/scripts/test/JS/JSTestStandaloneEnumeration.cpp: (WebCore::convertEnumerationToJS): (WebCore::parseEnumeration<TestStandaloneEnumeration>): * bindings/scripts/test/JS/JSTestStandaloneEnumeration.h: * bindings/scripts/test/JS/JSTestStringifier.cpp: (WebCore::IDLOperation<JSTestStringifier>::cast): (WebCore::jsTestStringifierConstructor): (WebCore::setJSTestStringifierConstructor): (WebCore::jsTestStringifierPrototypeFunctionToStringBody): (WebCore::jsTestStringifierPrototypeFunctionToString): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestStringifier.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.cpp: (WebCore::IDLOperation<JSTestStringifierAnonymousOperation>::cast): (WebCore::jsTestStringifierAnonymousOperationConstructor): (WebCore::setJSTestStringifierAnonymousOperationConstructor): (WebCore::jsTestStringifierAnonymousOperationPrototypeFunctionToStringBody): (WebCore::jsTestStringifierAnonymousOperationPrototypeFunctionToString): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestStringifierNamedOperation.cpp: (WebCore::IDLOperation<JSTestStringifierNamedOperation>::cast): (WebCore::jsTestStringifierNamedOperationConstructor): (WebCore::setJSTestStringifierNamedOperationConstructor): (WebCore::jsTestStringifierNamedOperationPrototypeFunctionIdentifierBody): (WebCore::jsTestStringifierNamedOperationPrototypeFunctionIdentifier): (WebCore::jsTestStringifierNamedOperationPrototypeFunctionToStringBody): (WebCore::jsTestStringifierNamedOperationPrototypeFunctionToString): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestStringifierNamedOperation.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.cpp: (WebCore::IDLOperation<JSTestStringifierOperationImplementedAs>::cast): (WebCore::jsTestStringifierOperationImplementedAsConstructor): (WebCore::setJSTestStringifierOperationImplementedAsConstructor): (WebCore::jsTestStringifierOperationImplementedAsPrototypeFunctionIdentifierBody): (WebCore::jsTestStringifierOperationImplementedAsPrototypeFunctionIdentifier): (WebCore::jsTestStringifierOperationImplementedAsPrototypeFunctionToStringBody): (WebCore::jsTestStringifierOperationImplementedAsPrototypeFunctionToString): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.cpp: (WebCore::IDLOperation<JSTestStringifierOperationNamedToString>::cast): (WebCore::jsTestStringifierOperationNamedToStringConstructor): (WebCore::setJSTestStringifierOperationNamedToStringConstructor): (WebCore::jsTestStringifierOperationNamedToStringPrototypeFunctionToStringBody): (WebCore::jsTestStringifierOperationNamedToStringPrototypeFunctionToString): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.cpp: (WebCore::IDLAttribute<JSTestStringifierReadOnlyAttribute>::cast): (WebCore::IDLOperation<JSTestStringifierReadOnlyAttribute>::cast): (WebCore::jsTestStringifierReadOnlyAttributeConstructor): (WebCore::setJSTestStringifierReadOnlyAttributeConstructor): (WebCore::jsTestStringifierReadOnlyAttributeIdentifierGetter): (WebCore::jsTestStringifierReadOnlyAttributeIdentifier): (WebCore::jsTestStringifierReadOnlyAttributePrototypeFunctionToStringBody): (WebCore::jsTestStringifierReadOnlyAttributePrototypeFunctionToString): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp: (WebCore::IDLAttribute<JSTestStringifierReadWriteAttribute>::cast): (WebCore::IDLOperation<JSTestStringifierReadWriteAttribute>::cast): (WebCore::jsTestStringifierReadWriteAttributeConstructor): (WebCore::setJSTestStringifierReadWriteAttributeConstructor): (WebCore::jsTestStringifierReadWriteAttributeIdentifierGetter): (WebCore::jsTestStringifierReadWriteAttributeIdentifier): (WebCore::setJSTestStringifierReadWriteAttributeIdentifierSetter): (WebCore::setJSTestStringifierReadWriteAttributeIdentifier): (WebCore::jsTestStringifierReadWriteAttributePrototypeFunctionToStringBody): (WebCore::jsTestStringifierReadWriteAttributePrototypeFunctionToString): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestTypedefs.cpp: (WebCore::JSTestTypedefsConstructor::construct): (WebCore::IDLAttribute<JSTestTypedefs>::cast): (WebCore::IDLOperation<JSTestTypedefs>::cast): (WebCore::jsTestTypedefsConstructor): (WebCore::setJSTestTypedefsConstructor): (WebCore::jsTestTypedefsUnsignedLongLongAttrGetter): (WebCore::jsTestTypedefsUnsignedLongLongAttr): (WebCore::setJSTestTypedefsUnsignedLongLongAttrSetter): (WebCore::setJSTestTypedefsUnsignedLongLongAttr): (WebCore::jsTestTypedefsSerializedScriptValueGetter): (WebCore::jsTestTypedefsSerializedScriptValue): (WebCore::setJSTestTypedefsSerializedScriptValueSetter): (WebCore::setJSTestTypedefsSerializedScriptValue): (WebCore::jsTestTypedefsConstructorTestSubObjGetter): (WebCore::jsTestTypedefsConstructorTestSubObj): (WebCore::jsTestTypedefsAttributeWithClampGetter): (WebCore::jsTestTypedefsAttributeWithClamp): (WebCore::setJSTestTypedefsAttributeWithClampSetter): (WebCore::setJSTestTypedefsAttributeWithClamp): (WebCore::jsTestTypedefsAttributeWithClampInTypedefGetter): (WebCore::jsTestTypedefsAttributeWithClampInTypedef): (WebCore::setJSTestTypedefsAttributeWithClampInTypedefSetter): (WebCore::setJSTestTypedefsAttributeWithClampInTypedef): (WebCore::jsTestTypedefsBufferSourceAttrGetter): (WebCore::jsTestTypedefsBufferSourceAttr): (WebCore::setJSTestTypedefsBufferSourceAttrSetter): (WebCore::setJSTestTypedefsBufferSourceAttr): (WebCore::jsTestTypedefsDomTimeStampAttrGetter): (WebCore::jsTestTypedefsDomTimeStampAttr): (WebCore::setJSTestTypedefsDomTimeStampAttrSetter): (WebCore::setJSTestTypedefsDomTimeStampAttr): (WebCore::jsTestTypedefsPrototypeFunctionFuncBody): (WebCore::jsTestTypedefsPrototypeFunctionFunc): (WebCore::jsTestTypedefsPrototypeFunctionSetShadowBody): (WebCore::jsTestTypedefsPrototypeFunctionSetShadow): (WebCore::jsTestTypedefsPrototypeFunctionMethodWithSequenceArgBody): (WebCore::jsTestTypedefsPrototypeFunctionMethodWithSequenceArg): (WebCore::jsTestTypedefsPrototypeFunctionNullableSequenceArgBody): (WebCore::jsTestTypedefsPrototypeFunctionNullableSequenceArg): (WebCore::jsTestTypedefsPrototypeFunctionSequenceOfNullablesArgBody): (WebCore::jsTestTypedefsPrototypeFunctionSequenceOfNullablesArg): (WebCore::jsTestTypedefsPrototypeFunctionNullableSequenceOfNullablesArgBody): (WebCore::jsTestTypedefsPrototypeFunctionNullableSequenceOfNullablesArg): (WebCore::jsTestTypedefsPrototypeFunctionNullableSequenceOfUnionsArgBody): (WebCore::jsTestTypedefsPrototypeFunctionNullableSequenceOfUnionsArg): (WebCore::jsTestTypedefsPrototypeFunctionUnionArgBody): (WebCore::jsTestTypedefsPrototypeFunctionUnionArg): (WebCore::jsTestTypedefsPrototypeFunctionFuncWithClampBody): (WebCore::jsTestTypedefsPrototypeFunctionFuncWithClamp): (WebCore::jsTestTypedefsPrototypeFunctionFuncWithClampInTypedefBody): (WebCore::jsTestTypedefsPrototypeFunctionFuncWithClampInTypedef): (WebCore::jsTestTypedefsPrototypeFunctionPointFunctionBody): (WebCore::jsTestTypedefsPrototypeFunctionPointFunction): (WebCore::jsTestTypedefsPrototypeFunctionStringSequenceFunctionBody): (WebCore::jsTestTypedefsPrototypeFunctionStringSequenceFunction): (WebCore::jsTestTypedefsPrototypeFunctionStringSequenceFunction2Body): (WebCore::jsTestTypedefsPrototypeFunctionStringSequenceFunction2): (WebCore::jsTestTypedefsPrototypeFunctionCallWithSequenceThatRequiresIncludeBody): (WebCore::jsTestTypedefsPrototypeFunctionCallWithSequenceThatRequiresInclude): (WebCore::jsTestTypedefsPrototypeFunctionMethodWithExceptionBody): (WebCore::jsTestTypedefsPrototypeFunctionMethodWithException): (WebCore::toJSNewlyCreated): (WebCore::toJS): * bindings/scripts/test/JS/JSTestTypedefs.h: (WebCore::toJS): (WebCore::toJSNewlyCreated): * bindings/scripts/test/JS/JSTestVoidCallbackFunction.cpp: (WebCore::JSTestVoidCallbackFunction::handleEvent): * bindings/scripts/test/TestObj.idl: * bindings/scripts/test/TestPromiseRejectionEvent.idl: * bridge/NP_jsobject.cpp: (JSC::getListFromVariantArgs): * bridge/c/c_instance.cpp: (JSC::Bindings::CInstance::moveGlobalExceptionToExecState): (JSC::Bindings::CInstance::newRuntimeObject): (JSC::Bindings::CRuntimeMethod::create): (JSC::Bindings::CInstance::getMethod): (JSC::Bindings::CInstance::invokeMethod): (JSC::Bindings::CInstance::invokeDefaultMethod): (JSC::Bindings::CInstance::invokeConstruct): (JSC::Bindings::CInstance::defaultValue const): (JSC::Bindings::CInstance::stringValue const): (JSC::Bindings::CInstance::numberValue const): (JSC::Bindings::CInstance::valueOf const): (JSC::Bindings::CInstance::toJSPrimitive const): (JSC::Bindings::CInstance::getPropertyNames): * bridge/c/c_instance.h: * bridge/c/c_runtime.cpp: (JSC::Bindings::CField::valueFromInstance const): (JSC::Bindings::CField::setValueToInstance const): * bridge/c/c_runtime.h: * bridge/c/c_utility.cpp: (JSC::Bindings::convertValueToNPVariant): (JSC::Bindings::convertNPVariantToValue): (JSC::Bindings::identifierFromNPIdentifier): * bridge/c/c_utility.h: * bridge/jsc/BridgeJSC.cpp: (JSC::Bindings::Instance::createRuntimeObject): (JSC::Bindings::Instance::newRuntimeObject): * bridge/jsc/BridgeJSC.h: (JSC::Bindings::Class::fallbackObject): (JSC::Bindings::Instance::setValueOfUndefinedField): (JSC::Bindings::Instance::invokeDefaultMethod): (JSC::Bindings::Instance::invokeConstruct): (JSC::Bindings::Instance::getPropertyNames): (JSC::Bindings::Instance::getOwnPropertySlot): (JSC::Bindings::Instance::put): * bridge/objc/WebScriptObject.mm: (WebCore::addExceptionToConsole): (-[WebScriptObject _isSafeScript]): (-[WebScriptObject _globalContextRef]): (getListFromNSArray): (-[WebScriptObject callWebScriptMethod:withArguments:]): (-[WebScriptObject evaluateWebScript:]): (-[WebScriptObject setValue:forKey:]): (-[WebScriptObject valueForKey:]): (-[WebScriptObject removeWebScriptKey:]): (-[WebScriptObject hasWebScriptKey:]): (-[WebScriptObject stringRepresentation]): (-[WebScriptObject webScriptValueAtIndex:]): (-[WebScriptObject setWebScriptValueAtIndex:value:]): (-[WebScriptObject JSObject]): (+[WebScriptObject _convertValueToObjcValue:originRootObject:rootObject:]): * bridge/objc/objc_class.h: * bridge/objc/objc_class.mm: (JSC::Bindings::ObjcClass::fallbackObject): * bridge/objc/objc_instance.h: * bridge/objc/objc_instance.mm: (ObjcInstance::newRuntimeObject): (ObjcInstance::moveGlobalExceptionToExecState): (ObjCRuntimeMethod::create): (ObjcInstance::invokeMethod): (ObjcInstance::invokeObjcMethod): (ObjcInstance::invokeDefaultMethod): (ObjcInstance::setValueOfUndefinedField): (ObjcInstance::getValueOfUndefinedField const): (ObjcInstance::defaultValue const): (ObjcInstance::stringValue const): (ObjcInstance::numberValue const): (ObjcInstance::valueOf const): * bridge/objc/objc_runtime.h: (JSC::Bindings::ObjcFallbackObjectImp::create): * bridge/objc/objc_runtime.mm: (JSC::Bindings::ObjcField::valueFromInstance const): (JSC::Bindings::convertValueToObjcObject): (JSC::Bindings::ObjcField::setValueToInstance const): (JSC::Bindings::ObjcArray::setValueAt const): (JSC::Bindings::ObjcArray::valueAt const): (JSC::Bindings::ObjcFallbackObjectImp::getOwnPropertySlot): (JSC::Bindings::ObjcFallbackObjectImp::put): (JSC::Bindings::callObjCFallbackObject): (JSC::Bindings::ObjcFallbackObjectImp::deleteProperty): (JSC::Bindings::ObjcFallbackObjectImp::defaultValue): (JSC::Bindings::ObjcFallbackObjectImp::toBoolean const): * bridge/objc/objc_utility.h: * bridge/objc/objc_utility.mm: (JSC::Bindings::convertValueToObjcValue): (JSC::Bindings::convertNSStringToString): (JSC::Bindings::convertObjcValueToValue): (JSC::Bindings::throwError): * bridge/runtime_array.cpp: (JSC::RuntimeArray::RuntimeArray): (JSC::RuntimeArray::lengthGetter): (JSC::RuntimeArray::getOwnPropertyNames): (JSC::RuntimeArray::getOwnPropertySlot): (JSC::RuntimeArray::getOwnPropertySlotByIndex): (JSC::RuntimeArray::put): (JSC::RuntimeArray::putByIndex): (JSC::RuntimeArray::deleteProperty): (JSC::RuntimeArray::deletePropertyByIndex): * bridge/runtime_array.h: (JSC::RuntimeArray::create): * bridge/runtime_method.cpp: (JSC::RuntimeMethod::lengthGetter): (JSC::RuntimeMethod::getOwnPropertySlot): (JSC::callRuntimeMethod): * bridge/runtime_method.h: * bridge/runtime_object.cpp: (JSC::Bindings::RuntimeObject::fallbackObjectGetter): (JSC::Bindings::RuntimeObject::fieldGetter): (JSC::Bindings::RuntimeObject::methodGetter): (JSC::Bindings::RuntimeObject::getOwnPropertySlot): (JSC::Bindings::RuntimeObject::put): (JSC::Bindings::RuntimeObject::deleteProperty): (JSC::Bindings::RuntimeObject::defaultValue): (JSC::Bindings::callRuntimeObject): (JSC::Bindings::callRuntimeConstructor): (JSC::Bindings::RuntimeObject::getOwnPropertyNames): (JSC::Bindings::RuntimeObject::throwInvalidAccessError): * bridge/runtime_object.h: * bridge/testbindings.cpp: (main): * bridge/testbindings.mm: (main): * contentextensions/ContentExtensionParser.cpp: (WebCore::ContentExtensions::getStringList): (WebCore::ContentExtensions::getDomainList): (WebCore::ContentExtensions::getTypeFlags): (WebCore::ContentExtensions::loadTrigger): (WebCore::ContentExtensions::loadAction): (WebCore::ContentExtensions::loadRule): (WebCore::ContentExtensions::loadEncodedRules): (WebCore::ContentExtensions::parseRuleList): * crypto/SubtleCrypto.cpp: (WebCore::toHashIdentifier): (WebCore::normalizeCryptoAlgorithmParameters): (WebCore::SubtleCrypto::encrypt): (WebCore::SubtleCrypto::decrypt): (WebCore::SubtleCrypto::sign): (WebCore::SubtleCrypto::verify): (WebCore::SubtleCrypto::digest): (WebCore::SubtleCrypto::generateKey): (WebCore::SubtleCrypto::deriveKey): (WebCore::SubtleCrypto::deriveBits): (WebCore::SubtleCrypto::importKey): (WebCore::SubtleCrypto::wrapKey): (WebCore::SubtleCrypto::unwrapKey): * crypto/SubtleCrypto.h: * crypto/SubtleCrypto.idl: * css/CSSFontFace.h: * dom/CustomElementReactionQueue.cpp: (WebCore::CustomElementReactionQueue::ElementQueue::processQueue): (WebCore::CustomElementReactionStack::processQueue): * dom/CustomElementReactionQueue.h: (WebCore::CustomElementReactionStack::CustomElementReactionStack): * dom/Document.cpp: (WebCore::Document::shouldBypassMainWorldContentSecurityPolicy const): (WebCore::Document::addMessage): * dom/Document.h: * dom/Element.cpp: (WebCore::Element::shadowRootForBindings const): (WebCore::Element::animate): * dom/Element.h: * dom/Element.idl: * dom/ErrorEvent.cpp: (WebCore::ErrorEvent::error): (WebCore::ErrorEvent::trySerializeError): * dom/ErrorEvent.h: * dom/ErrorEvent.idl: * dom/MessagePort.cpp: (WebCore::MessagePort::postMessage): * dom/MessagePort.h: * dom/MessagePort.idl: * dom/MouseEvent.cpp: (WebCore::MouseEvent::initMouseEventQuirk): * dom/MouseEvent.h: * dom/MouseEvent.idl: * dom/PopStateEvent.cpp: (WebCore::PopStateEvent::trySerializeState): * dom/PopStateEvent.h: * dom/RejectedPromiseTracker.cpp: (WebCore::createScriptCallStackFromReason): (WebCore::RejectedPromiseTracker::promiseRejected): (WebCore::RejectedPromiseTracker::promiseHandled): (WebCore::RejectedPromiseTracker::reportUnhandledRejections): * dom/RejectedPromiseTracker.h: * dom/ScriptExecutionContext.cpp: (WebCore::ScriptExecutionContext::reportUnhandledPromiseRejection): (WebCore::ScriptExecutionContext::addConsoleMessage): (WebCore::ScriptExecutionContext::execState): * dom/ScriptExecutionContext.h: * dom/make_event_factory.pl: (generateImplementation): * domjit/DOMJITHelpers.h: (WebCore::DOMJIT::toWrapperSlow): * domjit/DOMJITIDLConvert.h: (WebCore::DOMJIT::DirectConverter<IDLDOMString>::directConvert): (WebCore::DOMJIT::DirectConverter<IDLAtomStringAdaptor<IDLDOMString>>::directConvert): (WebCore::DOMJIT::DirectConverter<IDLRequiresExistingAtomStringAdaptor<IDLDOMString>>::directConvert): * html/HTMLCanvasElement.cpp: (WebCore::HTMLCanvasElement::getContext): * html/HTMLCanvasElement.h: * html/HTMLCanvasElement.idl: * html/HTMLFrameElement.idl: * html/HTMLFrameElementBase.cpp: (WebCore::HTMLFrameElementBase::setLocation): * html/HTMLFrameElementBase.h: * html/HTMLMediaElement.cpp: (WebCore::controllerJSValue): (WebCore::HTMLMediaElement::setupAndCallJS): (WebCore::HTMLMediaElement::updateCaptionContainer): (WebCore::HTMLMediaElement::ensureMediaControlsInjectedScript): (WebCore::HTMLMediaElement::setControllerJSProperty): (WebCore::HTMLMediaElement::didAddUserAgentShadowRoot): (WebCore::HTMLMediaElement::updateMediaControlsAfterPresentationModeChange): (WebCore::HTMLMediaElement::getCurrentMediaControlsStatus): * html/HTMLMediaElement.h: * html/HTMLPlugInImageElement.cpp: (WebCore::HTMLPlugInImageElement::didAddUserAgentShadowRoot): * html/OffscreenCanvas.cpp: (WebCore::OffscreenCanvas::getContext): * html/OffscreenCanvas.h: * html/OffscreenCanvas.idl: * html/canvas/WebGLAny.h: * html/track/DataCue.cpp: (WebCore::DataCue::value const): (WebCore::DataCue::setValue): * html/track/DataCue.h: * html/track/DataCue.idl: * inspector/CommandLineAPIHost.cpp: (WebCore::CommandLineAPIHost::inspect): (WebCore::CommandLineAPIHost::getEventListeners): (WebCore::CommandLineAPIHost::InspectableObject::get): (WebCore::CommandLineAPIHost::inspectedObject): (WebCore::CommandLineAPIHost::wrapper): * inspector/CommandLineAPIHost.h: * inspector/CommandLineAPIHost.idl: * inspector/CommandLineAPIModule.cpp: (WebCore::CommandLineAPIModule::host const): * inspector/CommandLineAPIModule.h: * inspector/InspectorCanvas.cpp: (WebCore::InspectorCanvas::resolveContext const): * inspector/InspectorCanvas.h: * inspector/InspectorController.cpp: (WebCore::InspectorController::canAccessInspectedScriptState const): * inspector/InspectorController.h: * inspector/InspectorFrontendHost.cpp: (WebCore::InspectorFrontendHost::addSelfToGlobalObjectInWorld): (WebCore::InspectorFrontendHost::showContextMenu): * inspector/InspectorInstrumentation.cpp: (WebCore::InspectorInstrumentation::didPostMessageImpl): (WebCore::InspectorInstrumentation::consoleCountImpl): (WebCore::InspectorInstrumentation::consoleCountResetImpl): (WebCore::InspectorInstrumentation::startConsoleTimingImpl): (WebCore::InspectorInstrumentation::logConsoleTimingImpl): (WebCore::InspectorInstrumentation::stopConsoleTimingImpl): (WebCore::InspectorInstrumentation::startProfilingImpl): (WebCore::InspectorInstrumentation::stopProfilingImpl): (WebCore::InspectorInstrumentation::consoleStartRecordingCanvasImpl): * inspector/InspectorInstrumentation.h: (WebCore::InspectorInstrumentation::didPostMessage): (WebCore::InspectorInstrumentation::consoleCount): (WebCore::InspectorInstrumentation::consoleCountReset): (WebCore::InspectorInstrumentation::startConsoleTiming): (WebCore::InspectorInstrumentation::logConsoleTiming): (WebCore::InspectorInstrumentation::stopConsoleTiming): (WebCore::InspectorInstrumentation::startProfiling): (WebCore::InspectorInstrumentation::stopProfiling): (WebCore::InspectorInstrumentation::consoleStartRecordingCanvas): * inspector/PageScriptDebugServer.cpp: (WebCore::PageScriptDebugServer::isContentScript const): (WebCore::PageScriptDebugServer::reportException const): * inspector/PageScriptDebugServer.h: * inspector/WebInjectedScriptHost.cpp: (WebCore::WebInjectedScriptHost::subtype): (WebCore::constructInternalProperty): (WebCore::objectForPaymentOptions): (WebCore::objectForPaymentCurrencyAmount): (WebCore::objectForPaymentItem): (WebCore::objectForPaymentShippingOption): (WebCore::objectForPaymentDetailsModifier): (WebCore::objectForPaymentDetails): (WebCore::WebInjectedScriptHost::getInternalProperties): * inspector/WebInjectedScriptHost.h: * inspector/WebInjectedScriptManager.cpp: (WebCore::WebInjectedScriptManager::discardInjectedScriptsFor): * inspector/WorkerInspectorController.h: * inspector/WorkerScriptDebugServer.cpp: (WebCore::WorkerScriptDebugServer::reportException const): * inspector/WorkerScriptDebugServer.h: * inspector/agents/InspectorCanvasAgent.cpp: (WebCore::InspectorCanvasAgent::consoleStartRecordingCanvas): * inspector/agents/InspectorCanvasAgent.h: * inspector/agents/InspectorDOMAgent.cpp: (WebCore::InspectorDOMAgent::focusNode): (WebCore::InspectorDOMAgent::buildObjectForEventListener): (WebCore::InspectorDOMAgent::nodeAsScriptValue): * inspector/agents/InspectorDOMAgent.h: * inspector/agents/InspectorIndexedDBAgent.cpp: * inspector/agents/InspectorNetworkAgent.cpp: (WebCore::webSocketAsScriptValue): * inspector/agents/InspectorTimelineAgent.cpp: (WebCore::InspectorTimelineAgent::startFromConsole): (WebCore::InspectorTimelineAgent::stopFromConsole): (WebCore::InspectorTimelineAgent::breakpointActionProbe): * inspector/agents/InspectorTimelineAgent.h: * inspector/agents/WebConsoleAgent.cpp: (WebCore::WebConsoleAgent::frameWindowDiscarded): * inspector/agents/WebDebuggerAgent.cpp: (WebCore::WebDebuggerAgent::didAddEventListener): (WebCore::WebDebuggerAgent::didPostMessage): * inspector/agents/WebDebuggerAgent.h: * inspector/agents/page/PageAuditAgent.cpp: (WebCore::PageAuditAgent::injectedScriptForEval): (WebCore::PageAuditAgent::populateAuditObject): * inspector/agents/page/PageAuditAgent.h: * inspector/agents/page/PageDebuggerAgent.cpp: (WebCore::PageDebuggerAgent::breakpointActionLog): (WebCore::PageDebuggerAgent::injectedScriptForEval): (WebCore::PageDebuggerAgent::didRequestAnimationFrame): * inspector/agents/page/PageDebuggerAgent.h: * inspector/agents/page/PageRuntimeAgent.cpp: (WebCore::PageRuntimeAgent::injectedScriptForEval): (WebCore::PageRuntimeAgent::reportExecutionContextCreation): (WebCore::PageRuntimeAgent::notifyContextCreated): * inspector/agents/page/PageRuntimeAgent.h: * inspector/agents/worker/WorkerAuditAgent.cpp: (WebCore::WorkerAuditAgent::injectedScriptForEval): * inspector/agents/worker/WorkerDebuggerAgent.cpp: (WebCore::WorkerDebuggerAgent::breakpointActionLog): (WebCore::WorkerDebuggerAgent::injectedScriptForEval): * inspector/agents/worker/WorkerDebuggerAgent.h: * inspector/agents/worker/WorkerRuntimeAgent.cpp: (WebCore::WorkerRuntimeAgent::injectedScriptForEval): * page/DOMWindow.cpp: (WebCore::DOMWindow::postMessage): (WebCore::DOMWindow::setTimeout): (WebCore::DOMWindow::setInterval): * page/DOMWindow.h: * page/DOMWindow.idl: * page/PageConsoleClient.cpp: (WebCore::PageConsoleClient::addMessage): (WebCore::PageConsoleClient::messageWithTypeAndLevel): (WebCore::PageConsoleClient::count): (WebCore::PageConsoleClient::countReset): (WebCore::PageConsoleClient::profile): (WebCore::PageConsoleClient::profileEnd): (WebCore::PageConsoleClient::takeHeapSnapshot): (WebCore::PageConsoleClient::time): (WebCore::PageConsoleClient::timeLog): (WebCore::PageConsoleClient::timeEnd): (WebCore::PageConsoleClient::timeStamp): (WebCore::PageConsoleClient::record): (WebCore::PageConsoleClient::recordEnd): (WebCore::PageConsoleClient::screenshot): * page/PageConsoleClient.h: * page/RemoteDOMWindow.cpp: (WebCore::RemoteDOMWindow::postMessage): * page/RemoteDOMWindow.h: * page/RemoteDOMWindow.idl: * page/WindowOrWorkerGlobalScope.idl: * page/csp/ContentSecurityPolicy.cpp: (WebCore::ContentSecurityPolicy::allowEval const): (WebCore::ContentSecurityPolicy::reportViolation const): (WebCore::ContentSecurityPolicy::logToConsole const): * page/csp/ContentSecurityPolicy.h: * platform/SerializedPlatformRepresentation.h: * platform/ThreadGlobalData.h: (WebCore::ThreadGlobalData::ThreadGlobalData::currentState const): (WebCore::ThreadGlobalData::ThreadGlobalData::setCurrentState): * platform/graphics/CustomPaintImage.cpp: (WebCore::CustomPaintImage::doCustomPaint): * platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm: * platform/mac/SerializedPlatformRepresentationMac.h: * platform/mac/SerializedPlatformRepresentationMac.mm: (WebCore::SerializedPlatformRepresentationMac::deserialize const): (WebCore::jsValueWithDataInContext): * platform/mock/mediasource/MockBox.cpp: * plugins/PluginViewBase.h: * testing/Internals.cpp: (WebCore::Internals::parserMetaData): (WebCore::Internals::isFromCurrentWorld const): (WebCore::Internals::isReadableStreamDisturbed): (WebCore::Internals::cloneArrayBuffer): * testing/Internals.h: * testing/Internals.idl: * testing/js/WebCoreTestSupport.cpp: (WebCoreTestSupport::injectInternalsObject): (WebCoreTestSupport::resetInternalsObject): * workers/DedicatedWorkerGlobalScope.cpp: (WebCore::DedicatedWorkerGlobalScope::postMessage): * workers/DedicatedWorkerGlobalScope.h: * workers/DedicatedWorkerGlobalScope.idl: * workers/Worker.cpp: (WebCore::Worker::postMessage): * workers/Worker.h: * workers/Worker.idl: * workers/WorkerConsoleClient.cpp: (WebCore::WorkerConsoleClient::messageWithTypeAndLevel): (WebCore::WorkerConsoleClient::count): (WebCore::WorkerConsoleClient::countReset): (WebCore::WorkerConsoleClient::time): (WebCore::WorkerConsoleClient::timeLog): (WebCore::WorkerConsoleClient::timeEnd): (WebCore::WorkerConsoleClient::profile): (WebCore::WorkerConsoleClient::profileEnd): (WebCore::WorkerConsoleClient::takeHeapSnapshot): (WebCore::WorkerConsoleClient::timeStamp): (WebCore::WorkerConsoleClient::record): (WebCore::WorkerConsoleClient::recordEnd): (WebCore::WorkerConsoleClient::screenshot): * workers/WorkerConsoleClient.h: * workers/WorkerGlobalScope.cpp: (WebCore::WorkerGlobalScope::setTimeout): (WebCore::WorkerGlobalScope::setInterval): (WebCore::WorkerGlobalScope::addMessage): * workers/WorkerGlobalScope.h: * workers/service/ExtendableEvent.cpp: * workers/service/ExtendableMessageEvent.cpp: (WebCore::ExtendableMessageEvent::ExtendableMessageEvent): * workers/service/ExtendableMessageEvent.h: * workers/service/FetchEvent.cpp: (WebCore::FetchEvent::promiseIsSettled): * worklets/PaintWorkletGlobalScope.cpp: (WebCore::PaintWorkletGlobalScope::registerPaint): * worklets/PaintWorkletGlobalScope.h: * worklets/PaintWorkletGlobalScope.idl: * worklets/WorkletConsoleClient.cpp: (WebCore::WorkletConsoleClient::messageWithTypeAndLevel): (WebCore::WorkletConsoleClient::count): (WebCore::WorkletConsoleClient::countReset): (WebCore::WorkletConsoleClient::time): (WebCore::WorkletConsoleClient::timeLog): (WebCore::WorkletConsoleClient::timeEnd): (WebCore::WorkletConsoleClient::profile): (WebCore::WorkletConsoleClient::profileEnd): (WebCore::WorkletConsoleClient::takeHeapSnapshot): (WebCore::WorkletConsoleClient::timeStamp): (WebCore::WorkletConsoleClient::record): (WebCore::WorkletConsoleClient::recordEnd): (WebCore::WorkletConsoleClient::screenshot): * worklets/WorkletConsoleClient.h: * worklets/WorkletGlobalScope.cpp: (WebCore::WorkletGlobalScope::addMessage): * worklets/WorkletGlobalScope.h: * worklets/WorkletScriptController.cpp: (WebCore::WorkletScriptController::evaluate): (WebCore::WorkletScriptController::setException): Source/WebKit: * WebProcess/InjectedBundle/API/glib/WebKitFrame.cpp: (webkit_frame_get_js_value_for_dom_object_in_script_world): * WebProcess/InjectedBundle/InjectedBundle.cpp: (WebKit::InjectedBundle::reportException): (WebKit::InjectedBundle::createWebDataFromUint8Array): * WebProcess/Plugins/Netscape/JSNPMethod.cpp: (WebKit::callMethod): * WebProcess/Plugins/Netscape/JSNPMethod.h: * WebProcess/Plugins/Netscape/JSNPObject.cpp: (WebKit::JSNPObject::callMethod): (WebKit::JSNPObject::callObject): (WebKit::JSNPObject::callConstructor): (WebKit::callNPJSObject): (WebKit::constructWithConstructor): (WebKit::JSNPObject::getOwnPropertySlot): (WebKit::JSNPObject::put): (WebKit::JSNPObject::deleteProperty): (WebKit::JSNPObject::deletePropertyByIndex): (WebKit::JSNPObject::getOwnPropertyNames): (WebKit::JSNPObject::propertyGetter): (WebKit::JSNPObject::methodGetter): (WebKit::JSNPObject::throwInvalidAccessError): * WebProcess/Plugins/Netscape/JSNPObject.h: * WebProcess/Plugins/Netscape/NPJSObject.cpp: (WebKit::identifierFromIdentifierRep): (WebKit::NPJSObject::hasMethod): (WebKit::NPJSObject::invoke): (WebKit::NPJSObject::invokeDefault): (WebKit::NPJSObject::hasProperty): (WebKit::NPJSObject::getProperty): (WebKit::NPJSObject::setProperty): (WebKit::NPJSObject::removeProperty): (WebKit::NPJSObject::enumerate): (WebKit::NPJSObject::construct): * WebProcess/Plugins/Netscape/NPJSObject.h: * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp: (WebKit::NPRuntimeObjectMap::convertNPVariantToJSValue): (WebKit::NPRuntimeObjectMap::convertJSValueToNPVariant): (WebKit::NPRuntimeObjectMap::evaluate): (WebKit::NPRuntimeObjectMap::moveGlobalExceptionToExecState): (WebKit::NPRuntimeObjectMap::globalExec const): Deleted. * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.h: * WebProcess/Plugins/PluginView.cpp: (WebKit::PluginView::performJavaScriptURLRequest): * WebProcess/WebPage/WebFrame.cpp: (WebKit::WebFrame::jsContext): (WebKit::WebFrame::jsContextForWorld): (WebKit::WebFrame::frameForContext): (WebKit::WebFrame::jsWrapperForWorld): * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::freezeLayerTree): (WebKit::WebPage::unfreezeLayerTree): (WebKit::WebPage::runJavaScript): * WebProcess/WebProcess.cpp: (WebKit::WebProcess::networkProcessConnectionClosed): Source/WebKitLegacy/mac: * DOM/DOMInternal.mm: (-[WebScriptObject _initializeScriptDOMNodeImp]): * DOM/WebDOMOperations.mm: * Plugins/Hosted/NetscapePluginInstanceProxy.h: * Plugins/Hosted/NetscapePluginInstanceProxy.mm: (WebKit::NetscapePluginInstanceProxy::evaluate): (WebKit::NetscapePluginInstanceProxy::invoke): (WebKit::NetscapePluginInstanceProxy::invokeDefault): (WebKit::NetscapePluginInstanceProxy::construct): (WebKit::NetscapePluginInstanceProxy::getProperty): (WebKit::NetscapePluginInstanceProxy::setProperty): (WebKit::NetscapePluginInstanceProxy::removeProperty): (WebKit::NetscapePluginInstanceProxy::hasProperty): (WebKit::NetscapePluginInstanceProxy::hasMethod): (WebKit::NetscapePluginInstanceProxy::enumerate): (WebKit::NetscapePluginInstanceProxy::addValueToArray): (WebKit::NetscapePluginInstanceProxy::marshalValue): (WebKit::NetscapePluginInstanceProxy::marshalValues): (WebKit::NetscapePluginInstanceProxy::demarshalValueFromArray): (WebKit::NetscapePluginInstanceProxy::demarshalValue): (WebKit::NetscapePluginInstanceProxy::demarshalValues): (WebKit::NetscapePluginInstanceProxy::moveGlobalExceptionToExecState): * Plugins/Hosted/ProxyInstance.h: * Plugins/Hosted/ProxyInstance.mm: (WebKit::ProxyField::valueFromInstance const): (WebKit::ProxyField::setValueToInstance const): (WebKit::ProxyInstance::newRuntimeObject): (WebKit::ProxyInstance::invoke): (WebKit::ProxyRuntimeMethod::create): (WebKit::ProxyInstance::getMethod): (WebKit::ProxyInstance::invokeMethod): (WebKit::ProxyInstance::invokeDefaultMethod): (WebKit::ProxyInstance::invokeConstruct): (WebKit::ProxyInstance::defaultValue const): (WebKit::ProxyInstance::stringValue const): (WebKit::ProxyInstance::numberValue const): (WebKit::ProxyInstance::valueOf const): (WebKit::ProxyInstance::getPropertyNames): (WebKit::ProxyInstance::fieldValue const): (WebKit::ProxyInstance::setFieldValue const): * WebView/WebFrame.mm: (-[WebFrame _stringByEvaluatingJavaScriptFromString:forceUserGesture:]): (-[WebFrame _stringByEvaluatingJavaScriptFromString:withGlobalObject:inScriptWorld:]): (-[WebFrame _globalContextForScriptWorld:]): (-[WebFrame jsWrapperForNode:inScriptWorld:]): (-[WebFrame globalContext]): * WebView/WebScriptDebugger.h: * WebView/WebScriptDebugger.mm: (WebScriptDebugger::sourceParsed): * WebView/WebView.mm: (+[WebView _reportException:inContext:]): (aeDescFromJSValue): (-[WebView aeDescByEvaluatingJavaScriptFromString:]): Source/WebKitLegacy/win: * Plugins/PluginPackage.cpp: (WebCore::getListFromVariantArgs): (WebCore::NPN_Evaluate): (WebCore::NPN_Invoke): * Plugins/PluginView.cpp: (WebCore::PluginView::performRequest): * WebCoreSupport/WebFrameLoaderClient.cpp: (WebFrameLoaderClient::dispatchDidClearWindowObjectInWorld): * WebFrame.cpp: (WebFrame::globalContext): (WebFrame::globalContextForScriptWorld): (WebFrame::stringByEvaluatingJavaScriptInScriptWorld): * WebView.cpp: (WebView::stringByEvaluatingJavaScriptFromString): (WebView::reportException): (WebView::elementFromJS): Tools: * DumpRenderTree/TestRunner.cpp: Canonical link: https://commits.webkit.org/216662@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@251425 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-10-22 09:24:48 +00:00
jit.setupArguments<void(ArgumentTypes...)>(arguments...);
Improve FunctionPtr and use it in the JIT CallRecord. https://bugs.webkit.org/show_bug.cgi?id=183756 <rdar://problem/38641335> Reviewed by JF Bastien. 1. FunctionPtr hold a C/C++ function pointer by default. Change its default PtrTag to reflect that. 2. Delete the FunctionPtr::value() method. It is effectively a duplicate of executableAddress(). 3. Fix the FunctionPtr constructor that takes arbitrary pointers to be able to take "any" pointer. "any" in this case means that the pointer may not be typed as a C/C++ function to the C++ compiler (due to upstream casting or usage of void* as a storage type), but it is still expected to be pointing to a C/C++ function. 4. Added a FunctionPtr constructor that takes another FunctionPtr. This is a convenience constructor that lets us retag the underlying pointer. The other FunctionPtr is still expected to point to a C/C++ function. 5. Added PtrTag assertion placeholder functions to be implemented later. 6. Change the JIT CallRecord to embed a FunctionPtr callee instead of a void* to pointer. This improves type safety, and assists in getting pointer tagging right later. 7. Added versions of JIT callOperations methods that will take a PtrTag. This is preparation for more more pointer tagging work later. * assembler/MacroAssemblerARM.h: (JSC::MacroAssemblerARM::linkCall): * assembler/MacroAssemblerARMv7.h: (JSC::MacroAssemblerARMv7::linkCall): * assembler/MacroAssemblerCodeRef.h: (JSC::FunctionPtr::FunctionPtr): (JSC::FunctionPtr::operator bool const): (JSC::FunctionPtr::operator! const): (JSC::ReturnAddressPtr::ReturnAddressPtr): (JSC::MacroAssemblerCodePtr::retagged const): (JSC::MacroAssemblerCodeRef::retaggedCode const): (JSC::FunctionPtr::value const): Deleted. * assembler/MacroAssemblerMIPS.h: (JSC::MacroAssemblerMIPS::linkCall): * assembler/MacroAssemblerX86.h: (JSC::MacroAssemblerX86::linkCall): * assembler/MacroAssemblerX86_64.h: (JSC::MacroAssemblerX86_64::callWithSlowPathReturnType): (JSC::MacroAssemblerX86_64::linkCall): * bytecode/AccessCase.cpp: (JSC::AccessCase::generateImpl): * ftl/FTLSlowPathCall.cpp: (JSC::FTL::SlowPathCallContext::makeCall): * ftl/FTLSlowPathCall.h: (JSC::FTL::callOperation): * ftl/FTLThunks.cpp: (JSC::FTL::osrExitGenerationThunkGenerator): (JSC::FTL::lazySlowPathGenerationThunkGenerator): (JSC::FTL::slowPathCallThunkGenerator): * jit/JIT.cpp: (JSC::JIT::link): (JSC::JIT::privateCompileExceptionHandlers): * jit/JIT.h: (JSC::CallRecord::CallRecord): (JSC::JIT::appendCall): (JSC::JIT::appendCallWithSlowPathReturnType): (JSC::JIT::callOperation): (JSC::JIT::callOperationWithProfile): (JSC::JIT::callOperationWithResult): (JSC::JIT::callOperationNoExceptionCheck): (JSC::JIT::callOperationWithCallFrameRollbackOnException): * jit/JITArithmetic.cpp: (JSC::JIT::emitMathICFast): (JSC::JIT::emitMathICSlow): * jit/JITInlines.h: (JSC::JIT::emitNakedCall): (JSC::JIT::emitNakedTailCall): (JSC::JIT::appendCallWithExceptionCheck): (JSC::JIT::appendCallWithExceptionCheckAndSlowPathReturnType): (JSC::JIT::appendCallWithCallFrameRollbackOnException): (JSC::JIT::appendCallWithExceptionCheckSetJSValueResult): (JSC::JIT::appendCallWithExceptionCheckSetJSValueResultWithProfile): * jit/JITPropertyAccess.cpp: (JSC::JIT::emitSlow_op_get_by_val): (JSC::JIT::emitSlow_op_put_by_val): (JSC::JIT::privateCompileGetByValWithCachedId): (JSC::JIT::privateCompilePutByVal): (JSC::JIT::privateCompilePutByValWithCachedId): * jit/JITPropertyAccess32_64.cpp: (JSC::JIT::emitSlow_op_put_by_val): * jit/Repatch.cpp: (JSC::linkPolymorphicCall): * jit/SlowPathCall.h: (JSC::JITSlowPathCall::JITSlowPathCall): (JSC::JITSlowPathCall::call): * jit/ThunkGenerators.cpp: (JSC::nativeForGenerator): * runtime/PtrTag.h: (JSC::nextPtrTagID): (JSC::assertIsCFunctionPtr): (JSC::assertIsNullOrCFunctionPtr): (JSC::assertIsNotTagged): (JSC::assertIsTagged): (JSC::assertIsNullOrTagged): (JSC::assertIsTaggedWith): (JSC::assertIsNullOrTaggedWith): (JSC::uniquePtrTagID): Deleted. Canonical link: https://commits.webkit.org/199413@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@229767 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-03-20 18:10:16 +00:00
call = context.makeCall(vm, function);
FTL should generate code to call slow paths lazily https://bugs.webkit.org/show_bug.cgi?id=149936 Reviewed by Saam Barati. Source/JavaScriptCore: We often have complex slow paths in FTL-generated code. Those slow paths may never run. Even if they do run, they don't need stellar performance. So, it doesn't make sense to have LLVM worry about compiling such slow path code. This patch enables us to use our own MacroAssembler for compiling the slow path inside FTL code. It does this by using a crazy lambda thingy (see FTLLowerDFGToLLVM.cpp's lazySlowPath() and its documentation). The result is quite natural to use. Even for straight slow path calls via something like vmCall(), the lazySlowPath offers the benefit that the call marshalling and the exception checking are not expressed using LLVM IR and do not require LLVM to think about it. It also has the benefit that we never generate the code if it never runs. That's great, since function calls usually involve ~10 instructions total (move arguments to argument registers, make the call, check exception, etc.). This patch adds the lazy slow path abstraction and uses it for some slow paths in the FTL. The code we generate with lazy slow paths is worse than the code that LLVM would have generated. Therefore, a lazy slow path only makes sense when we have strong evidence that the slow path will execute infrequently relative to the fast path. This completely precludes the use of lazy slow paths for out-of-line Nodes that unconditionally call a C++ function. It also precludes their use for the GetByVal out-of-bounds handler, since when we generate a GetByVal with an out-of-bounds handler it means that we only know that the out-of-bounds case executed at least once. So, for all we know, it may actually be the common case. So, this patch just deployed the lazy slow path for GC slow paths and masquerades-as-undefined slow paths. It makes sense for GC slow paths because those have a statistical guarantee of slow path frequency - probably bounded at less than 1/10. It makes sense for masquerades-as- undefined because we can say quite confidently that this is an uncommon scenario on the modern Web. Something that's always been challenging about abstractions involving the MacroAssembler is that linking is a separate phase, and there is no way for someone who is just given access to the MacroAssembler& to emit code that requires linking, since linking happens once we have emitted all code and we are creating the LinkBuffer. Moreover, the FTL requires that the final parts of linking happen on the main thread. This patch ran into this issue, and solved it comprehensively, by introducing MacroAssembler::addLinkTask(). This takes a lambda and runs it at the bitter end of linking - when performFinalization() is called. This ensure that the task added by addLinkTask() runs on the main thread. This patch doesn't replace all of the previously existing idioms for dealing with this issue; we can do that later. This shows small speed-ups on a bunch of things. No big win on any benchmark aggregate. But mainly this is done for https://bugs.webkit.org/show_bug.cgi?id=149852, where we found that outlining the slow path in this way was a significant speed boost. * CMakeLists.txt: * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: * JavaScriptCore.xcodeproj/project.pbxproj: * assembler/AbstractMacroAssembler.h: (JSC::AbstractMacroAssembler::replaceWithAddressComputation): (JSC::AbstractMacroAssembler::addLinkTask): (JSC::AbstractMacroAssembler::AbstractMacroAssembler): * assembler/LinkBuffer.cpp: (JSC::LinkBuffer::linkCode): (JSC::LinkBuffer::allocate): (JSC::LinkBuffer::performFinalization): * assembler/LinkBuffer.h: (JSC::LinkBuffer::wasAlreadyDisassembled): (JSC::LinkBuffer::didAlreadyDisassemble): (JSC::LinkBuffer::vm): (JSC::LinkBuffer::executableOffsetFor): * bytecode/CodeOrigin.h: (JSC::CodeOrigin::CodeOrigin): (JSC::CodeOrigin::isSet): (JSC::CodeOrigin::operator bool): (JSC::CodeOrigin::isHashTableDeletedValue): (JSC::CodeOrigin::operator!): Deleted. * ftl/FTLCompile.cpp: (JSC::FTL::mmAllocateDataSection): * ftl/FTLInlineCacheDescriptor.h: (JSC::FTL::InlineCacheDescriptor::InlineCacheDescriptor): (JSC::FTL::CheckInDescriptor::CheckInDescriptor): (JSC::FTL::LazySlowPathDescriptor::LazySlowPathDescriptor): * ftl/FTLJITCode.h: * ftl/FTLJITFinalizer.cpp: (JSC::FTL::JITFinalizer::finalizeFunction): * ftl/FTLJITFinalizer.h: * ftl/FTLLazySlowPath.cpp: Added. (JSC::FTL::LazySlowPath::LazySlowPath): (JSC::FTL::LazySlowPath::~LazySlowPath): (JSC::FTL::LazySlowPath::generate): * ftl/FTLLazySlowPath.h: Added. (JSC::FTL::LazySlowPath::createGenerator): (JSC::FTL::LazySlowPath::patchpoint): (JSC::FTL::LazySlowPath::usedRegisters): (JSC::FTL::LazySlowPath::callSiteIndex): (JSC::FTL::LazySlowPath::stub): * ftl/FTLLazySlowPathCall.h: Added. (JSC::FTL::createLazyCallGenerator): * ftl/FTLLowerDFGToLLVM.cpp: (JSC::FTL::DFG::LowerDFGToLLVM::compileCreateActivation): (JSC::FTL::DFG::LowerDFGToLLVM::compileNewFunction): (JSC::FTL::DFG::LowerDFGToLLVM::compileCreateDirectArguments): (JSC::FTL::DFG::LowerDFGToLLVM::compileNewArrayWithSize): (JSC::FTL::DFG::LowerDFGToLLVM::compileMakeRope): (JSC::FTL::DFG::LowerDFGToLLVM::compileNotifyWrite): (JSC::FTL::DFG::LowerDFGToLLVM::compileIsObjectOrNull): (JSC::FTL::DFG::LowerDFGToLLVM::compileIsFunction): (JSC::FTL::DFG::LowerDFGToLLVM::compileIn): (JSC::FTL::DFG::LowerDFGToLLVM::compileMaterializeNewObject): (JSC::FTL::DFG::LowerDFGToLLVM::compileMaterializeCreateActivation): (JSC::FTL::DFG::LowerDFGToLLVM::compileCheckWatchdogTimer): (JSC::FTL::DFG::LowerDFGToLLVM::allocatePropertyStorageWithSizeImpl): (JSC::FTL::DFG::LowerDFGToLLVM::allocateObject): (JSC::FTL::DFG::LowerDFGToLLVM::allocateJSArray): (JSC::FTL::DFG::LowerDFGToLLVM::buildTypeOf): (JSC::FTL::DFG::LowerDFGToLLVM::sensibleDoubleToInt32): (JSC::FTL::DFG::LowerDFGToLLVM::lazySlowPath): (JSC::FTL::DFG::LowerDFGToLLVM::speculate): (JSC::FTL::DFG::LowerDFGToLLVM::emitStoreBarrier): * ftl/FTLOperations.cpp: (JSC::FTL::operationMaterializeObjectInOSR): (JSC::FTL::compileFTLLazySlowPath): * ftl/FTLOperations.h: * ftl/FTLSlowPathCall.cpp: (JSC::FTL::SlowPathCallContext::SlowPathCallContext): (JSC::FTL::SlowPathCallContext::~SlowPathCallContext): (JSC::FTL::SlowPathCallContext::keyWithTarget): (JSC::FTL::SlowPathCallContext::makeCall): (JSC::FTL::callSiteIndexForCodeOrigin): (JSC::FTL::storeCodeOrigin): Deleted. (JSC::FTL::callOperation): Deleted. * ftl/FTLSlowPathCall.h: (JSC::FTL::callOperation): * ftl/FTLState.h: * ftl/FTLThunks.cpp: (JSC::FTL::genericGenerationThunkGenerator): (JSC::FTL::osrExitGenerationThunkGenerator): (JSC::FTL::lazySlowPathGenerationThunkGenerator): (JSC::FTL::registerClobberCheck): * ftl/FTLThunks.h: * interpreter/CallFrame.h: (JSC::CallSiteIndex::CallSiteIndex): (JSC::CallSiteIndex::operator bool): (JSC::CallSiteIndex::bits): * jit/CCallHelpers.h: (JSC::CCallHelpers::setupArgument): (JSC::CCallHelpers::setupArgumentsWithExecState): * jit/JITOperations.cpp: Source/WTF: Enables SharedTask to handle any function type, not just void(). It's probably better to use SharedTask instead of std::function in performance-sensitive code. std::function uses the system malloc and has copy semantics. SharedTask uses FastMalloc and has aliasing semantics. So, you can just trust that it will have sensible performance characteristics. * wtf/ParallelHelperPool.cpp: (WTF::ParallelHelperClient::~ParallelHelperClient): (WTF::ParallelHelperClient::setTask): (WTF::ParallelHelperClient::doSomeHelping): (WTF::ParallelHelperClient::runTaskInParallel): (WTF::ParallelHelperClient::finish): (WTF::ParallelHelperClient::claimTask): (WTF::ParallelHelperClient::runTask): (WTF::ParallelHelperPool::doSomeHelping): (WTF::ParallelHelperPool::helperThreadBody): * wtf/ParallelHelperPool.h: (WTF::ParallelHelperClient::setFunction): (WTF::ParallelHelperClient::runFunctionInParallel): (WTF::ParallelHelperClient::pool): * wtf/SharedTask.h: (WTF::createSharedTask): (WTF::SharedTask::SharedTask): Deleted. (WTF::SharedTask::~SharedTask): Deleted. (WTF::SharedTaskFunctor::SharedTaskFunctor): Deleted. Canonical link: https://commits.webkit.org/168154@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@190860 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-10-12 17:56:26 +00:00
}
if (exceptionTarget)
AssemblyHelpers should not have a VM field https://bugs.webkit.org/show_bug.cgi?id=170207 Reviewed by Yusuke Suzuki. APIs that need VM should take one as a parameter. When doing position independent code for Wasm, we can't tie code generation to a VM. * b3/B3Compile.cpp: (JSC::B3::compile): * b3/air/testair.cpp: * b3/testb3.cpp: (JSC::B3::testEntrySwitchSimple): (JSC::B3::testEntrySwitchNoEntrySwitch): (JSC::B3::testEntrySwitchWithCommonPaths): (JSC::B3::testEntrySwitchWithCommonPathsAndNonTrivialEntrypoint): (JSC::B3::testEntrySwitchLoop): * bytecode/AccessCase.cpp: (JSC::AccessCase::generateWithGuard): (JSC::AccessCase::generateImpl): * bytecode/DOMJITAccessCasePatchpointParams.cpp: (JSC::SlowPathCallGeneratorWithArguments::generateImpl): * bytecode/InlineAccess.cpp: (JSC::InlineAccess::dumpCacheSizesAndCrash): (JSC::InlineAccess::generateSelfPropertyAccess): (JSC::InlineAccess::generateSelfPropertyReplace): (JSC::InlineAccess::generateArrayLength): (JSC::InlineAccess::rewireStubAsJump): * bytecode/InlineAccess.h: * bytecode/PolymorphicAccess.cpp: (JSC::AccessGenerationState::emitExplicitExceptionHandler): (JSC::PolymorphicAccess::regenerate): * bytecode/PolymorphicAccess.h: (JSC::AccessGenerationState::AccessGenerationState): * dfg/DFGJITCompiler.cpp: (JSC::DFG::JITCompiler::JITCompiler): (JSC::DFG::JITCompiler::compileExceptionHandlers): (JSC::DFG::JITCompiler::link): (JSC::DFG::JITCompiler::compile): (JSC::DFG::JITCompiler::compileFunction): (JSC::DFG::JITCompiler::exceptionCheck): * dfg/DFGJITCompiler.h: (JSC::DFG::JITCompiler::exceptionCheckWithCallFrameRollback): (JSC::DFG::JITCompiler::fastExceptionCheck): (JSC::DFG::JITCompiler::vm): * dfg/DFGOSRExitCompiler.cpp: * dfg/DFGOSRExitCompiler.h: * dfg/DFGOSRExitCompiler32_64.cpp: (JSC::DFG::OSRExitCompiler::compileExit): * dfg/DFGOSRExitCompiler64.cpp: (JSC::DFG::OSRExitCompiler::compileExit): * dfg/DFGOSRExitCompilerCommon.cpp: (JSC::DFG::adjustAndJumpToTarget): * dfg/DFGOSRExitCompilerCommon.h: * dfg/DFGSpeculativeJIT.cpp: (JSC::DFG::SpeculativeJIT::emitAllocateRawObject): (JSC::DFG::SpeculativeJIT::checkArray): (JSC::DFG::SpeculativeJIT::compileCurrentBlock): (JSC::DFG::SpeculativeJIT::compileInstanceOfForObject): (JSC::DFG::SpeculativeJIT::compileMakeRope): (JSC::DFG::SpeculativeJIT::compileGetGlobalObject): (JSC::DFG::SpeculativeJIT::compileNewFunctionCommon): (JSC::DFG::SpeculativeJIT::compileCreateActivation): (JSC::DFG::SpeculativeJIT::compileCreateDirectArguments): (JSC::DFG::SpeculativeJIT::compileSpread): (JSC::DFG::SpeculativeJIT::compileArraySlice): (JSC::DFG::SpeculativeJIT::compileNukeStructureAndSetButterfly): (JSC::DFG::SpeculativeJIT::compileNewStringObject): (JSC::DFG::SpeculativeJIT::compileNewTypedArray): (JSC::DFG::SpeculativeJIT::compileStoreBarrier): * dfg/DFGSpeculativeJIT.h: (JSC::DFG::SpeculativeJIT::emitAllocateJSObjectWithKnownSize): (JSC::DFG::SpeculativeJIT::emitAllocateJSObject): (JSC::DFG::SpeculativeJIT::emitAllocateVariableSizedJSObject): (JSC::DFG::SpeculativeJIT::emitAllocateDestructibleObject): * dfg/DFGSpeculativeJIT32_64.cpp: (JSC::DFG::SpeculativeJIT::emitCall): (JSC::DFG::SpeculativeJIT::compileLogicalNot): (JSC::DFG::SpeculativeJIT::emitBranch): (JSC::DFG::SpeculativeJIT::compile): * dfg/DFGSpeculativeJIT64.cpp: (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNullOrUndefined): (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNullOrUndefined): (JSC::DFG::SpeculativeJIT::emitCall): (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot): (JSC::DFG::SpeculativeJIT::compileLogicalNot): (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch): (JSC::DFG::SpeculativeJIT::emitBranch): (JSC::DFG::SpeculativeJIT::compile): (JSC::DFG::SpeculativeJIT::compileAllocateNewArrayWithSize): * dfg/DFGThunks.cpp: (JSC::DFG::osrEntryThunkGenerator): * ftl/FTLCompile.cpp: (JSC::FTL::compile): * ftl/FTLJITFinalizer.h: * ftl/FTLLazySlowPath.cpp: (JSC::FTL::LazySlowPath::generate): * ftl/FTLLazySlowPathCall.h: (JSC::FTL::createLazyCallGenerator): * ftl/FTLLink.cpp: (JSC::FTL::link): * ftl/FTLLowerDFGToB3.cpp: (JSC::FTL::DFG::LowerDFGToB3::lower): (JSC::FTL::DFG::LowerDFGToB3::compileCreateActivation): (JSC::FTL::DFG::LowerDFGToB3::compileNewFunction): (JSC::FTL::DFG::LowerDFGToB3::compileCreateDirectArguments): (JSC::FTL::DFG::LowerDFGToB3::compileNewTypedArray): (JSC::FTL::DFG::LowerDFGToB3::compileMakeRope): (JSC::FTL::DFG::LowerDFGToB3::compileNotifyWrite): (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargsSpread): (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargs): (JSC::FTL::DFG::LowerDFGToB3::compileCallEval): (JSC::FTL::DFG::LowerDFGToB3::compileIsObjectOrNull): (JSC::FTL::DFG::LowerDFGToB3::compileIsFunction): (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeNewObject): (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeCreateActivation): (JSC::FTL::DFG::LowerDFGToB3::compileCheckTraps): (JSC::FTL::DFG::LowerDFGToB3::allocatePropertyStorageWithSizeImpl): (JSC::FTL::DFG::LowerDFGToB3::allocateObject): (JSC::FTL::DFG::LowerDFGToB3::allocateJSArray): (JSC::FTL::DFG::LowerDFGToB3::buildTypeOf): * ftl/FTLOSRExitCompiler.cpp: (JSC::FTL::compileStub): * ftl/FTLSlowPathCall.h: (JSC::FTL::callOperation): * ftl/FTLState.h: (JSC::FTL::State::vm): * ftl/FTLThunks.cpp: (JSC::FTL::genericGenerationThunkGenerator): (JSC::FTL::slowPathCallThunkGenerator): * jit/AssemblyHelpers.cpp: (JSC::AssemblyHelpers::jitReleaseAssertNoException): (JSC::AssemblyHelpers::callExceptionFuzz): (JSC::AssemblyHelpers::emitJumpIfException): (JSC::AssemblyHelpers::emitExceptionCheck): (JSC::AssemblyHelpers::emitNonPatchableExceptionCheck): (JSC::AssemblyHelpers::emitLoadStructure): (JSC::AssemblyHelpers::emitRandomThunk): (JSC::AssemblyHelpers::restoreCalleeSavesFromVMEntryFrameCalleeSavesBuffer): (JSC::AssemblyHelpers::emitConvertValueToBoolean): (JSC::AssemblyHelpers::debugCall): * jit/AssemblyHelpers.h: (JSC::AssemblyHelpers::AssemblyHelpers): (JSC::AssemblyHelpers::codeBlock): (JSC::AssemblyHelpers::copyCalleeSavesToVMEntryFrameCalleeSavesBuffer): (JSC::AssemblyHelpers::copyCalleeSavesFromFrameOrRegisterToVMEntryFrameCalleeSavesBuffer): (JSC::AssemblyHelpers::barrierBranch): (JSC::AssemblyHelpers::barrierStoreLoadFence): (JSC::AssemblyHelpers::mutatorFence): (JSC::AssemblyHelpers::storeButterfly): (JSC::AssemblyHelpers::nukeStructureAndStoreButterfly): (JSC::AssemblyHelpers::jumpIfMutatorFenceNotNeeded): (JSC::AssemblyHelpers::emitAllocateJSObjectWithKnownSize): (JSC::AssemblyHelpers::emitAllocateJSObject): (JSC::AssemblyHelpers::emitAllocateVariableSizedCell): (JSC::AssemblyHelpers::emitAllocateVariableSizedJSObject): (JSC::AssemblyHelpers::emitAllocateDestructibleObject): (JSC::AssemblyHelpers::vm): Deleted. (JSC::AssemblyHelpers::debugCall): Deleted. * jit/CCallHelpers.cpp: (JSC::CCallHelpers::ensureShadowChickenPacket): * jit/CCallHelpers.h: (JSC::CCallHelpers::CCallHelpers): (JSC::CCallHelpers::jumpToExceptionHandler): * jit/JIT.cpp: (JSC::JIT::emitEnterOptimizationCheck): (JSC::JIT::privateCompileExceptionHandlers): * jit/JIT.h: (JSC::JIT::exceptionCheck): (JSC::JIT::exceptionCheckWithCallFrameRollback): * jit/JITMathIC.h: (JSC::JITMathIC::generateOutOfLine): * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_instanceof): (JSC::JIT::emit_op_is_undefined): (JSC::JIT::emit_op_jfalse): (JSC::JIT::emit_op_jeq_null): (JSC::JIT::emit_op_jneq_null): (JSC::JIT::emit_op_jtrue): (JSC::JIT::emit_op_throw): (JSC::JIT::emit_op_catch): (JSC::JIT::emit_op_eq_null): (JSC::JIT::emit_op_neq_null): (JSC::JIT::emitSlow_op_loop_hint): (JSC::JIT::emit_op_log_shadow_chicken_prologue): (JSC::JIT::emit_op_log_shadow_chicken_tail): * jit/JITOpcodes32_64.cpp: (JSC::JIT::privateCompileCTINativeCall): (JSC::JIT::emit_op_new_object): (JSC::JIT::emit_op_jfalse): (JSC::JIT::emit_op_jtrue): (JSC::JIT::emit_op_throw): (JSC::JIT::emit_op_catch): (JSC::JIT::emit_op_create_this): (JSC::JIT::emit_op_log_shadow_chicken_prologue): (JSC::JIT::emit_op_log_shadow_chicken_tail): * jit/JITPropertyAccess.cpp: (JSC::JIT::emitWriteBarrier): * jit/JSInterfaceJIT.h: (JSC::JSInterfaceJIT::JSInterfaceJIT): (JSC::JSInterfaceJIT::vm): * jit/Repatch.cpp: (JSC::tryCacheGetByID): (JSC::tryCachePutByID): (JSC::linkPolymorphicCall): (JSC::resetGetByID): (JSC::resetPutByID): * jit/SetupVarargsFrame.cpp: (JSC::emitSetupVarargsFrameFastCase): * jit/SetupVarargsFrame.h: * jit/SpecializedThunkJIT.h: (JSC::SpecializedThunkJIT::loadArgumentWithSpecificClass): * jit/ThunkGenerators.cpp: (JSC::throwExceptionFromCallSlowPathGenerator): (JSC::linkCallThunkGenerator): (JSC::linkPolymorphicCallThunkGenerator): (JSC::virtualThunkFor): (JSC::nativeForGenerator): (JSC::randomThunkGenerator): (JSC::boundThisNoArgsFunctionCallGenerator): (JSC::throwExceptionFromWasmThunkGenerator): * wasm/WasmB3IRGenerator.cpp: (JSC::Wasm::parseAndCompile): * wasm/WasmBinding.cpp: (JSC::Wasm::wasmToJs): (JSC::Wasm::wasmToWasm): Canonical link: https://commits.webkit.org/187145@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@214531 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-03-29 06:15:23 +00:00
exceptionTarget->append(jit.emitExceptionCheck(vm));
FTL should generate code to call slow paths lazily https://bugs.webkit.org/show_bug.cgi?id=149936 Reviewed by Saam Barati. Source/JavaScriptCore: We often have complex slow paths in FTL-generated code. Those slow paths may never run. Even if they do run, they don't need stellar performance. So, it doesn't make sense to have LLVM worry about compiling such slow path code. This patch enables us to use our own MacroAssembler for compiling the slow path inside FTL code. It does this by using a crazy lambda thingy (see FTLLowerDFGToLLVM.cpp's lazySlowPath() and its documentation). The result is quite natural to use. Even for straight slow path calls via something like vmCall(), the lazySlowPath offers the benefit that the call marshalling and the exception checking are not expressed using LLVM IR and do not require LLVM to think about it. It also has the benefit that we never generate the code if it never runs. That's great, since function calls usually involve ~10 instructions total (move arguments to argument registers, make the call, check exception, etc.). This patch adds the lazy slow path abstraction and uses it for some slow paths in the FTL. The code we generate with lazy slow paths is worse than the code that LLVM would have generated. Therefore, a lazy slow path only makes sense when we have strong evidence that the slow path will execute infrequently relative to the fast path. This completely precludes the use of lazy slow paths for out-of-line Nodes that unconditionally call a C++ function. It also precludes their use for the GetByVal out-of-bounds handler, since when we generate a GetByVal with an out-of-bounds handler it means that we only know that the out-of-bounds case executed at least once. So, for all we know, it may actually be the common case. So, this patch just deployed the lazy slow path for GC slow paths and masquerades-as-undefined slow paths. It makes sense for GC slow paths because those have a statistical guarantee of slow path frequency - probably bounded at less than 1/10. It makes sense for masquerades-as- undefined because we can say quite confidently that this is an uncommon scenario on the modern Web. Something that's always been challenging about abstractions involving the MacroAssembler is that linking is a separate phase, and there is no way for someone who is just given access to the MacroAssembler& to emit code that requires linking, since linking happens once we have emitted all code and we are creating the LinkBuffer. Moreover, the FTL requires that the final parts of linking happen on the main thread. This patch ran into this issue, and solved it comprehensively, by introducing MacroAssembler::addLinkTask(). This takes a lambda and runs it at the bitter end of linking - when performFinalization() is called. This ensure that the task added by addLinkTask() runs on the main thread. This patch doesn't replace all of the previously existing idioms for dealing with this issue; we can do that later. This shows small speed-ups on a bunch of things. No big win on any benchmark aggregate. But mainly this is done for https://bugs.webkit.org/show_bug.cgi?id=149852, where we found that outlining the slow path in this way was a significant speed boost. * CMakeLists.txt: * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: * JavaScriptCore.xcodeproj/project.pbxproj: * assembler/AbstractMacroAssembler.h: (JSC::AbstractMacroAssembler::replaceWithAddressComputation): (JSC::AbstractMacroAssembler::addLinkTask): (JSC::AbstractMacroAssembler::AbstractMacroAssembler): * assembler/LinkBuffer.cpp: (JSC::LinkBuffer::linkCode): (JSC::LinkBuffer::allocate): (JSC::LinkBuffer::performFinalization): * assembler/LinkBuffer.h: (JSC::LinkBuffer::wasAlreadyDisassembled): (JSC::LinkBuffer::didAlreadyDisassemble): (JSC::LinkBuffer::vm): (JSC::LinkBuffer::executableOffsetFor): * bytecode/CodeOrigin.h: (JSC::CodeOrigin::CodeOrigin): (JSC::CodeOrigin::isSet): (JSC::CodeOrigin::operator bool): (JSC::CodeOrigin::isHashTableDeletedValue): (JSC::CodeOrigin::operator!): Deleted. * ftl/FTLCompile.cpp: (JSC::FTL::mmAllocateDataSection): * ftl/FTLInlineCacheDescriptor.h: (JSC::FTL::InlineCacheDescriptor::InlineCacheDescriptor): (JSC::FTL::CheckInDescriptor::CheckInDescriptor): (JSC::FTL::LazySlowPathDescriptor::LazySlowPathDescriptor): * ftl/FTLJITCode.h: * ftl/FTLJITFinalizer.cpp: (JSC::FTL::JITFinalizer::finalizeFunction): * ftl/FTLJITFinalizer.h: * ftl/FTLLazySlowPath.cpp: Added. (JSC::FTL::LazySlowPath::LazySlowPath): (JSC::FTL::LazySlowPath::~LazySlowPath): (JSC::FTL::LazySlowPath::generate): * ftl/FTLLazySlowPath.h: Added. (JSC::FTL::LazySlowPath::createGenerator): (JSC::FTL::LazySlowPath::patchpoint): (JSC::FTL::LazySlowPath::usedRegisters): (JSC::FTL::LazySlowPath::callSiteIndex): (JSC::FTL::LazySlowPath::stub): * ftl/FTLLazySlowPathCall.h: Added. (JSC::FTL::createLazyCallGenerator): * ftl/FTLLowerDFGToLLVM.cpp: (JSC::FTL::DFG::LowerDFGToLLVM::compileCreateActivation): (JSC::FTL::DFG::LowerDFGToLLVM::compileNewFunction): (JSC::FTL::DFG::LowerDFGToLLVM::compileCreateDirectArguments): (JSC::FTL::DFG::LowerDFGToLLVM::compileNewArrayWithSize): (JSC::FTL::DFG::LowerDFGToLLVM::compileMakeRope): (JSC::FTL::DFG::LowerDFGToLLVM::compileNotifyWrite): (JSC::FTL::DFG::LowerDFGToLLVM::compileIsObjectOrNull): (JSC::FTL::DFG::LowerDFGToLLVM::compileIsFunction): (JSC::FTL::DFG::LowerDFGToLLVM::compileIn): (JSC::FTL::DFG::LowerDFGToLLVM::compileMaterializeNewObject): (JSC::FTL::DFG::LowerDFGToLLVM::compileMaterializeCreateActivation): (JSC::FTL::DFG::LowerDFGToLLVM::compileCheckWatchdogTimer): (JSC::FTL::DFG::LowerDFGToLLVM::allocatePropertyStorageWithSizeImpl): (JSC::FTL::DFG::LowerDFGToLLVM::allocateObject): (JSC::FTL::DFG::LowerDFGToLLVM::allocateJSArray): (JSC::FTL::DFG::LowerDFGToLLVM::buildTypeOf): (JSC::FTL::DFG::LowerDFGToLLVM::sensibleDoubleToInt32): (JSC::FTL::DFG::LowerDFGToLLVM::lazySlowPath): (JSC::FTL::DFG::LowerDFGToLLVM::speculate): (JSC::FTL::DFG::LowerDFGToLLVM::emitStoreBarrier): * ftl/FTLOperations.cpp: (JSC::FTL::operationMaterializeObjectInOSR): (JSC::FTL::compileFTLLazySlowPath): * ftl/FTLOperations.h: * ftl/FTLSlowPathCall.cpp: (JSC::FTL::SlowPathCallContext::SlowPathCallContext): (JSC::FTL::SlowPathCallContext::~SlowPathCallContext): (JSC::FTL::SlowPathCallContext::keyWithTarget): (JSC::FTL::SlowPathCallContext::makeCall): (JSC::FTL::callSiteIndexForCodeOrigin): (JSC::FTL::storeCodeOrigin): Deleted. (JSC::FTL::callOperation): Deleted. * ftl/FTLSlowPathCall.h: (JSC::FTL::callOperation): * ftl/FTLState.h: * ftl/FTLThunks.cpp: (JSC::FTL::genericGenerationThunkGenerator): (JSC::FTL::osrExitGenerationThunkGenerator): (JSC::FTL::lazySlowPathGenerationThunkGenerator): (JSC::FTL::registerClobberCheck): * ftl/FTLThunks.h: * interpreter/CallFrame.h: (JSC::CallSiteIndex::CallSiteIndex): (JSC::CallSiteIndex::operator bool): (JSC::CallSiteIndex::bits): * jit/CCallHelpers.h: (JSC::CCallHelpers::setupArgument): (JSC::CCallHelpers::setupArgumentsWithExecState): * jit/JITOperations.cpp: Source/WTF: Enables SharedTask to handle any function type, not just void(). It's probably better to use SharedTask instead of std::function in performance-sensitive code. std::function uses the system malloc and has copy semantics. SharedTask uses FastMalloc and has aliasing semantics. So, you can just trust that it will have sensible performance characteristics. * wtf/ParallelHelperPool.cpp: (WTF::ParallelHelperClient::~ParallelHelperClient): (WTF::ParallelHelperClient::setTask): (WTF::ParallelHelperClient::doSomeHelping): (WTF::ParallelHelperClient::runTaskInParallel): (WTF::ParallelHelperClient::finish): (WTF::ParallelHelperClient::claimTask): (WTF::ParallelHelperClient::runTask): (WTF::ParallelHelperPool::doSomeHelping): (WTF::ParallelHelperPool::helperThreadBody): * wtf/ParallelHelperPool.h: (WTF::ParallelHelperClient::setFunction): (WTF::ParallelHelperClient::runFunctionInParallel): (WTF::ParallelHelperClient::pool): * wtf/SharedTask.h: (WTF::createSharedTask): (WTF::SharedTask::SharedTask): Deleted. (WTF::SharedTask::~SharedTask): Deleted. (WTF::SharedTaskFunctor::SharedTaskFunctor): Deleted. Canonical link: https://commits.webkit.org/168154@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@190860 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-10-12 17:56:26 +00:00
return call;
}
template<typename... ArgumentTypes>
SlowPathCall callOperation(
AssemblyHelpers should not have a VM field https://bugs.webkit.org/show_bug.cgi?id=170207 Reviewed by Yusuke Suzuki. APIs that need VM should take one as a parameter. When doing position independent code for Wasm, we can't tie code generation to a VM. * b3/B3Compile.cpp: (JSC::B3::compile): * b3/air/testair.cpp: * b3/testb3.cpp: (JSC::B3::testEntrySwitchSimple): (JSC::B3::testEntrySwitchNoEntrySwitch): (JSC::B3::testEntrySwitchWithCommonPaths): (JSC::B3::testEntrySwitchWithCommonPathsAndNonTrivialEntrypoint): (JSC::B3::testEntrySwitchLoop): * bytecode/AccessCase.cpp: (JSC::AccessCase::generateWithGuard): (JSC::AccessCase::generateImpl): * bytecode/DOMJITAccessCasePatchpointParams.cpp: (JSC::SlowPathCallGeneratorWithArguments::generateImpl): * bytecode/InlineAccess.cpp: (JSC::InlineAccess::dumpCacheSizesAndCrash): (JSC::InlineAccess::generateSelfPropertyAccess): (JSC::InlineAccess::generateSelfPropertyReplace): (JSC::InlineAccess::generateArrayLength): (JSC::InlineAccess::rewireStubAsJump): * bytecode/InlineAccess.h: * bytecode/PolymorphicAccess.cpp: (JSC::AccessGenerationState::emitExplicitExceptionHandler): (JSC::PolymorphicAccess::regenerate): * bytecode/PolymorphicAccess.h: (JSC::AccessGenerationState::AccessGenerationState): * dfg/DFGJITCompiler.cpp: (JSC::DFG::JITCompiler::JITCompiler): (JSC::DFG::JITCompiler::compileExceptionHandlers): (JSC::DFG::JITCompiler::link): (JSC::DFG::JITCompiler::compile): (JSC::DFG::JITCompiler::compileFunction): (JSC::DFG::JITCompiler::exceptionCheck): * dfg/DFGJITCompiler.h: (JSC::DFG::JITCompiler::exceptionCheckWithCallFrameRollback): (JSC::DFG::JITCompiler::fastExceptionCheck): (JSC::DFG::JITCompiler::vm): * dfg/DFGOSRExitCompiler.cpp: * dfg/DFGOSRExitCompiler.h: * dfg/DFGOSRExitCompiler32_64.cpp: (JSC::DFG::OSRExitCompiler::compileExit): * dfg/DFGOSRExitCompiler64.cpp: (JSC::DFG::OSRExitCompiler::compileExit): * dfg/DFGOSRExitCompilerCommon.cpp: (JSC::DFG::adjustAndJumpToTarget): * dfg/DFGOSRExitCompilerCommon.h: * dfg/DFGSpeculativeJIT.cpp: (JSC::DFG::SpeculativeJIT::emitAllocateRawObject): (JSC::DFG::SpeculativeJIT::checkArray): (JSC::DFG::SpeculativeJIT::compileCurrentBlock): (JSC::DFG::SpeculativeJIT::compileInstanceOfForObject): (JSC::DFG::SpeculativeJIT::compileMakeRope): (JSC::DFG::SpeculativeJIT::compileGetGlobalObject): (JSC::DFG::SpeculativeJIT::compileNewFunctionCommon): (JSC::DFG::SpeculativeJIT::compileCreateActivation): (JSC::DFG::SpeculativeJIT::compileCreateDirectArguments): (JSC::DFG::SpeculativeJIT::compileSpread): (JSC::DFG::SpeculativeJIT::compileArraySlice): (JSC::DFG::SpeculativeJIT::compileNukeStructureAndSetButterfly): (JSC::DFG::SpeculativeJIT::compileNewStringObject): (JSC::DFG::SpeculativeJIT::compileNewTypedArray): (JSC::DFG::SpeculativeJIT::compileStoreBarrier): * dfg/DFGSpeculativeJIT.h: (JSC::DFG::SpeculativeJIT::emitAllocateJSObjectWithKnownSize): (JSC::DFG::SpeculativeJIT::emitAllocateJSObject): (JSC::DFG::SpeculativeJIT::emitAllocateVariableSizedJSObject): (JSC::DFG::SpeculativeJIT::emitAllocateDestructibleObject): * dfg/DFGSpeculativeJIT32_64.cpp: (JSC::DFG::SpeculativeJIT::emitCall): (JSC::DFG::SpeculativeJIT::compileLogicalNot): (JSC::DFG::SpeculativeJIT::emitBranch): (JSC::DFG::SpeculativeJIT::compile): * dfg/DFGSpeculativeJIT64.cpp: (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNullOrUndefined): (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNullOrUndefined): (JSC::DFG::SpeculativeJIT::emitCall): (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot): (JSC::DFG::SpeculativeJIT::compileLogicalNot): (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch): (JSC::DFG::SpeculativeJIT::emitBranch): (JSC::DFG::SpeculativeJIT::compile): (JSC::DFG::SpeculativeJIT::compileAllocateNewArrayWithSize): * dfg/DFGThunks.cpp: (JSC::DFG::osrEntryThunkGenerator): * ftl/FTLCompile.cpp: (JSC::FTL::compile): * ftl/FTLJITFinalizer.h: * ftl/FTLLazySlowPath.cpp: (JSC::FTL::LazySlowPath::generate): * ftl/FTLLazySlowPathCall.h: (JSC::FTL::createLazyCallGenerator): * ftl/FTLLink.cpp: (JSC::FTL::link): * ftl/FTLLowerDFGToB3.cpp: (JSC::FTL::DFG::LowerDFGToB3::lower): (JSC::FTL::DFG::LowerDFGToB3::compileCreateActivation): (JSC::FTL::DFG::LowerDFGToB3::compileNewFunction): (JSC::FTL::DFG::LowerDFGToB3::compileCreateDirectArguments): (JSC::FTL::DFG::LowerDFGToB3::compileNewTypedArray): (JSC::FTL::DFG::LowerDFGToB3::compileMakeRope): (JSC::FTL::DFG::LowerDFGToB3::compileNotifyWrite): (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargsSpread): (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargs): (JSC::FTL::DFG::LowerDFGToB3::compileCallEval): (JSC::FTL::DFG::LowerDFGToB3::compileIsObjectOrNull): (JSC::FTL::DFG::LowerDFGToB3::compileIsFunction): (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeNewObject): (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeCreateActivation): (JSC::FTL::DFG::LowerDFGToB3::compileCheckTraps): (JSC::FTL::DFG::LowerDFGToB3::allocatePropertyStorageWithSizeImpl): (JSC::FTL::DFG::LowerDFGToB3::allocateObject): (JSC::FTL::DFG::LowerDFGToB3::allocateJSArray): (JSC::FTL::DFG::LowerDFGToB3::buildTypeOf): * ftl/FTLOSRExitCompiler.cpp: (JSC::FTL::compileStub): * ftl/FTLSlowPathCall.h: (JSC::FTL::callOperation): * ftl/FTLState.h: (JSC::FTL::State::vm): * ftl/FTLThunks.cpp: (JSC::FTL::genericGenerationThunkGenerator): (JSC::FTL::slowPathCallThunkGenerator): * jit/AssemblyHelpers.cpp: (JSC::AssemblyHelpers::jitReleaseAssertNoException): (JSC::AssemblyHelpers::callExceptionFuzz): (JSC::AssemblyHelpers::emitJumpIfException): (JSC::AssemblyHelpers::emitExceptionCheck): (JSC::AssemblyHelpers::emitNonPatchableExceptionCheck): (JSC::AssemblyHelpers::emitLoadStructure): (JSC::AssemblyHelpers::emitRandomThunk): (JSC::AssemblyHelpers::restoreCalleeSavesFromVMEntryFrameCalleeSavesBuffer): (JSC::AssemblyHelpers::emitConvertValueToBoolean): (JSC::AssemblyHelpers::debugCall): * jit/AssemblyHelpers.h: (JSC::AssemblyHelpers::AssemblyHelpers): (JSC::AssemblyHelpers::codeBlock): (JSC::AssemblyHelpers::copyCalleeSavesToVMEntryFrameCalleeSavesBuffer): (JSC::AssemblyHelpers::copyCalleeSavesFromFrameOrRegisterToVMEntryFrameCalleeSavesBuffer): (JSC::AssemblyHelpers::barrierBranch): (JSC::AssemblyHelpers::barrierStoreLoadFence): (JSC::AssemblyHelpers::mutatorFence): (JSC::AssemblyHelpers::storeButterfly): (JSC::AssemblyHelpers::nukeStructureAndStoreButterfly): (JSC::AssemblyHelpers::jumpIfMutatorFenceNotNeeded): (JSC::AssemblyHelpers::emitAllocateJSObjectWithKnownSize): (JSC::AssemblyHelpers::emitAllocateJSObject): (JSC::AssemblyHelpers::emitAllocateVariableSizedCell): (JSC::AssemblyHelpers::emitAllocateVariableSizedJSObject): (JSC::AssemblyHelpers::emitAllocateDestructibleObject): (JSC::AssemblyHelpers::vm): Deleted. (JSC::AssemblyHelpers::debugCall): Deleted. * jit/CCallHelpers.cpp: (JSC::CCallHelpers::ensureShadowChickenPacket): * jit/CCallHelpers.h: (JSC::CCallHelpers::CCallHelpers): (JSC::CCallHelpers::jumpToExceptionHandler): * jit/JIT.cpp: (JSC::JIT::emitEnterOptimizationCheck): (JSC::JIT::privateCompileExceptionHandlers): * jit/JIT.h: (JSC::JIT::exceptionCheck): (JSC::JIT::exceptionCheckWithCallFrameRollback): * jit/JITMathIC.h: (JSC::JITMathIC::generateOutOfLine): * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_instanceof): (JSC::JIT::emit_op_is_undefined): (JSC::JIT::emit_op_jfalse): (JSC::JIT::emit_op_jeq_null): (JSC::JIT::emit_op_jneq_null): (JSC::JIT::emit_op_jtrue): (JSC::JIT::emit_op_throw): (JSC::JIT::emit_op_catch): (JSC::JIT::emit_op_eq_null): (JSC::JIT::emit_op_neq_null): (JSC::JIT::emitSlow_op_loop_hint): (JSC::JIT::emit_op_log_shadow_chicken_prologue): (JSC::JIT::emit_op_log_shadow_chicken_tail): * jit/JITOpcodes32_64.cpp: (JSC::JIT::privateCompileCTINativeCall): (JSC::JIT::emit_op_new_object): (JSC::JIT::emit_op_jfalse): (JSC::JIT::emit_op_jtrue): (JSC::JIT::emit_op_throw): (JSC::JIT::emit_op_catch): (JSC::JIT::emit_op_create_this): (JSC::JIT::emit_op_log_shadow_chicken_prologue): (JSC::JIT::emit_op_log_shadow_chicken_tail): * jit/JITPropertyAccess.cpp: (JSC::JIT::emitWriteBarrier): * jit/JSInterfaceJIT.h: (JSC::JSInterfaceJIT::JSInterfaceJIT): (JSC::JSInterfaceJIT::vm): * jit/Repatch.cpp: (JSC::tryCacheGetByID): (JSC::tryCachePutByID): (JSC::linkPolymorphicCall): (JSC::resetGetByID): (JSC::resetPutByID): * jit/SetupVarargsFrame.cpp: (JSC::emitSetupVarargsFrameFastCase): * jit/SetupVarargsFrame.h: * jit/SpecializedThunkJIT.h: (JSC::SpecializedThunkJIT::loadArgumentWithSpecificClass): * jit/ThunkGenerators.cpp: (JSC::throwExceptionFromCallSlowPathGenerator): (JSC::linkCallThunkGenerator): (JSC::linkPolymorphicCallThunkGenerator): (JSC::virtualThunkFor): (JSC::nativeForGenerator): (JSC::randomThunkGenerator): (JSC::boundThisNoArgsFunctionCallGenerator): (JSC::throwExceptionFromWasmThunkGenerator): * wasm/WasmB3IRGenerator.cpp: (JSC::Wasm::parseAndCompile): * wasm/WasmBinding.cpp: (JSC::Wasm::wasmToJs): (JSC::Wasm::wasmToWasm): Canonical link: https://commits.webkit.org/187145@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@214531 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-03-29 06:15:23 +00:00
VM& vm, const RegisterSet& usedRegisters, CCallHelpers& jit, CallSiteIndex callSiteIndex,
Templatize CodePtr/Refs/FunctionPtrs with PtrTags. https://bugs.webkit.org/show_bug.cgi?id=184702 <rdar://problem/35391681> Reviewed by Filip Pizlo and Saam Barati. Source/JavaScriptCore: 1. Templatized MacroAssemblerCodePtr/Ref, FunctionPtr, and CodeLocation variants to take a PtrTag template argument. 2. Replaced some uses of raw pointers with the equivalent CodePtr / FunctionPtr. * assembler/AbstractMacroAssembler.h: (JSC::AbstractMacroAssembler::differenceBetweenCodePtr): (JSC::AbstractMacroAssembler::linkJump): (JSC::AbstractMacroAssembler::linkPointer): (JSC::AbstractMacroAssembler::getLinkerAddress): (JSC::AbstractMacroAssembler::repatchJump): (JSC::AbstractMacroAssembler::repatchJumpToNop): (JSC::AbstractMacroAssembler::repatchNearCall): (JSC::AbstractMacroAssembler::repatchCompact): (JSC::AbstractMacroAssembler::repatchInt32): (JSC::AbstractMacroAssembler::repatchPointer): (JSC::AbstractMacroAssembler::readPointer): (JSC::AbstractMacroAssembler::replaceWithLoad): (JSC::AbstractMacroAssembler::replaceWithAddressComputation): * assembler/CodeLocation.h: (JSC::CodeLocationCommon:: const): (JSC::CodeLocationCommon::CodeLocationCommon): (JSC::CodeLocationInstruction::CodeLocationInstruction): (JSC::CodeLocationLabel::CodeLocationLabel): (JSC::CodeLocationLabel::retagged): (JSC::CodeLocationLabel:: const): (JSC::CodeLocationJump::CodeLocationJump): (JSC::CodeLocationJump::retagged): (JSC::CodeLocationCall::CodeLocationCall): (JSC::CodeLocationCall::retagged): (JSC::CodeLocationNearCall::CodeLocationNearCall): (JSC::CodeLocationDataLabel32::CodeLocationDataLabel32): (JSC::CodeLocationDataLabelCompact::CodeLocationDataLabelCompact): (JSC::CodeLocationDataLabelPtr::CodeLocationDataLabelPtr): (JSC::CodeLocationConvertibleLoad::CodeLocationConvertibleLoad): (JSC::CodeLocationCommon<tag>::instructionAtOffset): (JSC::CodeLocationCommon<tag>::labelAtOffset): (JSC::CodeLocationCommon<tag>::jumpAtOffset): (JSC::CodeLocationCommon<tag>::callAtOffset): (JSC::CodeLocationCommon<tag>::nearCallAtOffset): (JSC::CodeLocationCommon<tag>::dataLabelPtrAtOffset): (JSC::CodeLocationCommon<tag>::dataLabel32AtOffset): (JSC::CodeLocationCommon<tag>::dataLabelCompactAtOffset): (JSC::CodeLocationCommon<tag>::convertibleLoadAtOffset): (JSC::CodeLocationCommon::instructionAtOffset): Deleted. (JSC::CodeLocationCommon::labelAtOffset): Deleted. (JSC::CodeLocationCommon::jumpAtOffset): Deleted. (JSC::CodeLocationCommon::callAtOffset): Deleted. (JSC::CodeLocationCommon::nearCallAtOffset): Deleted. (JSC::CodeLocationCommon::dataLabelPtrAtOffset): Deleted. (JSC::CodeLocationCommon::dataLabel32AtOffset): Deleted. (JSC::CodeLocationCommon::dataLabelCompactAtOffset): Deleted. (JSC::CodeLocationCommon::convertibleLoadAtOffset): Deleted. * assembler/LinkBuffer.cpp: (JSC::LinkBuffer::finalizeCodeWithoutDisassemblyImpl): (JSC::LinkBuffer::finalizeCodeWithDisassemblyImpl): (JSC::LinkBuffer::finalizeCodeWithoutDisassembly): Deleted. (JSC::LinkBuffer::finalizeCodeWithDisassembly): Deleted. * assembler/LinkBuffer.h: (JSC::LinkBuffer::link): (JSC::LinkBuffer::patch): (JSC::LinkBuffer::entrypoint): (JSC::LinkBuffer::locationOf): (JSC::LinkBuffer::locationOfNearCall): (JSC::LinkBuffer::finalizeCodeWithoutDisassembly): (JSC::LinkBuffer::finalizeCodeWithDisassembly): (JSC::LinkBuffer::trampolineAt): * assembler/MacroAssemblerARM.h: (JSC::MacroAssemblerARM::readCallTarget): (JSC::MacroAssemblerARM::replaceWithJump): (JSC::MacroAssemblerARM::startOfPatchableBranch32WithPatchOnAddress): (JSC::MacroAssemblerARM::startOfPatchableBranchPtrWithPatchOnAddress): (JSC::MacroAssemblerARM::startOfBranchPtrWithPatchOnRegister): (JSC::MacroAssemblerARM::revertJumpReplacementToBranchPtrWithPatch): (JSC::MacroAssemblerARM::revertJumpReplacementToPatchableBranch32WithPatch): (JSC::MacroAssemblerARM::revertJumpReplacementToPatchableBranchPtrWithPatch): (JSC::MacroAssemblerARM::repatchCall): (JSC::MacroAssemblerARM::linkCall): * assembler/MacroAssemblerARM64.h: (JSC::MacroAssemblerARM64::readCallTarget): (JSC::MacroAssemblerARM64::replaceWithVMHalt): (JSC::MacroAssemblerARM64::replaceWithJump): (JSC::MacroAssemblerARM64::startOfBranchPtrWithPatchOnRegister): (JSC::MacroAssemblerARM64::startOfPatchableBranchPtrWithPatchOnAddress): (JSC::MacroAssemblerARM64::startOfPatchableBranch32WithPatchOnAddress): (JSC::MacroAssemblerARM64::revertJumpReplacementToBranchPtrWithPatch): (JSC::MacroAssemblerARM64::revertJumpReplacementToPatchableBranchPtrWithPatch): (JSC::MacroAssemblerARM64::revertJumpReplacementToPatchableBranch32WithPatch): (JSC::MacroAssemblerARM64::repatchCall): (JSC::MacroAssemblerARM64::linkCall): * assembler/MacroAssemblerARMv7.h: (JSC::MacroAssemblerARMv7::replaceWithJump): (JSC::MacroAssemblerARMv7::readCallTarget): (JSC::MacroAssemblerARMv7::startOfBranchPtrWithPatchOnRegister): (JSC::MacroAssemblerARMv7::revertJumpReplacementToBranchPtrWithPatch): (JSC::MacroAssemblerARMv7::startOfPatchableBranchPtrWithPatchOnAddress): (JSC::MacroAssemblerARMv7::startOfPatchableBranch32WithPatchOnAddress): (JSC::MacroAssemblerARMv7::revertJumpReplacementToPatchableBranchPtrWithPatch): (JSC::MacroAssemblerARMv7::revertJumpReplacementToPatchableBranch32WithPatch): (JSC::MacroAssemblerARMv7::repatchCall): (JSC::MacroAssemblerARMv7::linkCall): * assembler/MacroAssemblerCodeRef.cpp: (JSC::MacroAssemblerCodePtrBase::dumpWithName): (JSC::MacroAssemblerCodeRefBase::tryToDisassemble): (JSC::MacroAssemblerCodeRefBase::disassembly): (JSC::MacroAssemblerCodePtr::createLLIntCodePtr): Deleted. (JSC::MacroAssemblerCodePtr::dumpWithName const): Deleted. (JSC::MacroAssemblerCodePtr::dump const): Deleted. (JSC::MacroAssemblerCodeRef::createLLIntCodeRef): Deleted. (JSC::MacroAssemblerCodeRef::tryToDisassemble const): Deleted. (JSC::MacroAssemblerCodeRef::disassembly const): Deleted. (JSC::MacroAssemblerCodeRef::dump const): Deleted. * assembler/MacroAssemblerCodeRef.h: (JSC::FunctionPtr::FunctionPtr): (JSC::FunctionPtr::retagged const): (JSC::FunctionPtr::retaggedExecutableAddress const): (JSC::FunctionPtr::operator== const): (JSC::FunctionPtr::operator!= const): (JSC::ReturnAddressPtr::ReturnAddressPtr): (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr): (JSC::MacroAssemblerCodePtr::createFromExecutableAddress): (JSC::MacroAssemblerCodePtr::retagged const): (JSC::MacroAssemblerCodePtr:: const): (JSC::MacroAssemblerCodePtr::dumpWithName const): (JSC::MacroAssemblerCodePtr::dump const): (JSC::MacroAssemblerCodePtrHash::hash): (JSC::MacroAssemblerCodePtrHash::equal): (JSC::MacroAssemblerCodeRef::MacroAssemblerCodeRef): (JSC::MacroAssemblerCodeRef::createSelfManagedCodeRef): (JSC::MacroAssemblerCodeRef::code const): (JSC::MacroAssemblerCodeRef::retaggedCode const): (JSC::MacroAssemblerCodeRef::retagged const): (JSC::MacroAssemblerCodeRef::tryToDisassemble const): (JSC::MacroAssemblerCodeRef::disassembly const): (JSC::MacroAssemblerCodeRef::dump const): (JSC::FunctionPtr<tag>::FunctionPtr): * assembler/MacroAssemblerMIPS.h: (JSC::MacroAssemblerMIPS::readCallTarget): (JSC::MacroAssemblerMIPS::replaceWithJump): (JSC::MacroAssemblerMIPS::startOfPatchableBranch32WithPatchOnAddress): (JSC::MacroAssemblerMIPS::startOfBranchPtrWithPatchOnRegister): (JSC::MacroAssemblerMIPS::revertJumpReplacementToBranchPtrWithPatch): (JSC::MacroAssemblerMIPS::startOfPatchableBranchPtrWithPatchOnAddress): (JSC::MacroAssemblerMIPS::revertJumpReplacementToPatchableBranch32WithPatch): (JSC::MacroAssemblerMIPS::revertJumpReplacementToPatchableBranchPtrWithPatch): (JSC::MacroAssemblerMIPS::repatchCall): (JSC::MacroAssemblerMIPS::linkCall): * assembler/MacroAssemblerX86.h: (JSC::MacroAssemblerX86::readCallTarget): (JSC::MacroAssemblerX86::startOfBranchPtrWithPatchOnRegister): (JSC::MacroAssemblerX86::startOfPatchableBranchPtrWithPatchOnAddress): (JSC::MacroAssemblerX86::startOfPatchableBranch32WithPatchOnAddress): (JSC::MacroAssemblerX86::revertJumpReplacementToBranchPtrWithPatch): (JSC::MacroAssemblerX86::revertJumpReplacementToPatchableBranchPtrWithPatch): (JSC::MacroAssemblerX86::revertJumpReplacementToPatchableBranch32WithPatch): (JSC::MacroAssemblerX86::repatchCall): (JSC::MacroAssemblerX86::linkCall): * assembler/MacroAssemblerX86Common.h: (JSC::MacroAssemblerX86Common::repatchCompact): (JSC::MacroAssemblerX86Common::replaceWithVMHalt): (JSC::MacroAssemblerX86Common::replaceWithJump): * assembler/MacroAssemblerX86_64.h: (JSC::MacroAssemblerX86_64::readCallTarget): (JSC::MacroAssemblerX86_64::startOfBranchPtrWithPatchOnRegister): (JSC::MacroAssemblerX86_64::startOfBranch32WithPatchOnRegister): (JSC::MacroAssemblerX86_64::startOfPatchableBranchPtrWithPatchOnAddress): (JSC::MacroAssemblerX86_64::startOfPatchableBranch32WithPatchOnAddress): (JSC::MacroAssemblerX86_64::revertJumpReplacementToPatchableBranchPtrWithPatch): (JSC::MacroAssemblerX86_64::revertJumpReplacementToPatchableBranch32WithPatch): (JSC::MacroAssemblerX86_64::revertJumpReplacementToBranchPtrWithPatch): (JSC::MacroAssemblerX86_64::repatchCall): (JSC::MacroAssemblerX86_64::linkCall): * assembler/testmasm.cpp: (JSC::compile): (JSC::invoke): (JSC::testProbeModifiesProgramCounter): * b3/B3Compilation.cpp: (JSC::B3::Compilation::Compilation): * b3/B3Compilation.h: (JSC::B3::Compilation::code const): (JSC::B3::Compilation::codeRef const): * b3/B3Compile.cpp: (JSC::B3::compile): * b3/B3LowerMacros.cpp: * b3/air/AirDisassembler.cpp: (JSC::B3::Air::Disassembler::dump): * b3/air/testair.cpp: * b3/testb3.cpp: (JSC::B3::invoke): (JSC::B3::testInterpreter): (JSC::B3::testEntrySwitchSimple): (JSC::B3::testEntrySwitchNoEntrySwitch): (JSC::B3::testEntrySwitchWithCommonPaths): (JSC::B3::testEntrySwitchWithCommonPathsAndNonTrivialEntrypoint): (JSC::B3::testEntrySwitchLoop): * bytecode/AccessCase.cpp: (JSC::AccessCase::generateImpl): * bytecode/AccessCaseSnippetParams.cpp: (JSC::SlowPathCallGeneratorWithArguments::generateImpl): * bytecode/ByValInfo.h: (JSC::ByValInfo::ByValInfo): * bytecode/CallLinkInfo.cpp: (JSC::CallLinkInfo::callReturnLocation): (JSC::CallLinkInfo::patchableJump): (JSC::CallLinkInfo::hotPathBegin): (JSC::CallLinkInfo::slowPathStart): * bytecode/CallLinkInfo.h: (JSC::CallLinkInfo::setCallLocations): (JSC::CallLinkInfo::hotPathOther): * bytecode/CodeBlock.cpp: (JSC::CodeBlock::finishCreation): * bytecode/GetByIdStatus.cpp: (JSC::GetByIdStatus::computeForStubInfoWithoutExitSiteFeedback): * bytecode/GetByIdVariant.cpp: (JSC::GetByIdVariant::GetByIdVariant): (JSC::GetByIdVariant::dumpInContext const): * bytecode/GetByIdVariant.h: (JSC::GetByIdVariant::customAccessorGetter const): * bytecode/GetterSetterAccessCase.cpp: (JSC::GetterSetterAccessCase::create): (JSC::GetterSetterAccessCase::GetterSetterAccessCase): (JSC::GetterSetterAccessCase::dumpImpl const): * bytecode/GetterSetterAccessCase.h: (JSC::GetterSetterAccessCase::customAccessor const): (): Deleted. * bytecode/HandlerInfo.h: (JSC::HandlerInfo::initialize): * bytecode/InlineAccess.cpp: (JSC::linkCodeInline): (JSC::InlineAccess::rewireStubAsJump): * bytecode/InlineAccess.h: * bytecode/JumpTable.h: (JSC::StringJumpTable::ctiForValue): (JSC::SimpleJumpTable::ctiForValue): * bytecode/LLIntCallLinkInfo.h: (JSC::LLIntCallLinkInfo::unlink): * bytecode/PolymorphicAccess.cpp: (JSC::AccessGenerationState::emitExplicitExceptionHandler): (JSC::PolymorphicAccess::regenerate): * bytecode/PolymorphicAccess.h: (JSC::AccessGenerationResult::AccessGenerationResult): (JSC::AccessGenerationResult::code const): * bytecode/StructureStubInfo.h: (JSC::StructureStubInfo::slowPathCallLocation): (JSC::StructureStubInfo::doneLocation): (JSC::StructureStubInfo::slowPathStartLocation): (JSC::StructureStubInfo::patchableJumpForIn): * dfg/DFGCommonData.h: (JSC::DFG::CommonData::appendCatchEntrypoint): * dfg/DFGDisassembler.cpp: (JSC::DFG::Disassembler::dumpDisassembly): * dfg/DFGDriver.h: * dfg/DFGJITCompiler.cpp: (JSC::DFG::JITCompiler::linkOSRExits): (JSC::DFG::JITCompiler::compileExceptionHandlers): (JSC::DFG::JITCompiler::link): (JSC::DFG::JITCompiler::compileFunction): (JSC::DFG::JITCompiler::noticeCatchEntrypoint): * dfg/DFGJITCompiler.h: (JSC::DFG::CallLinkRecord::CallLinkRecord): (JSC::DFG::JITCompiler::appendCall): (JSC::DFG::JITCompiler::JSCallRecord::JSCallRecord): (JSC::DFG::JITCompiler::JSDirectCallRecord::JSDirectCallRecord): (JSC::DFG::JITCompiler::JSDirectTailCallRecord::JSDirectTailCallRecord): * dfg/DFGJITFinalizer.cpp: (JSC::DFG::JITFinalizer::JITFinalizer): (JSC::DFG::JITFinalizer::finalize): (JSC::DFG::JITFinalizer::finalizeFunction): * dfg/DFGJITFinalizer.h: * dfg/DFGJumpReplacement.h: (JSC::DFG::JumpReplacement::JumpReplacement): * dfg/DFGNode.h: * dfg/DFGOSREntry.cpp: (JSC::DFG::prepareOSREntry): (JSC::DFG::prepareCatchOSREntry): * dfg/DFGOSREntry.h: (JSC::DFG::prepareOSREntry): * dfg/DFGOSRExit.cpp: (JSC::DFG::OSRExit::executeOSRExit): (JSC::DFG::reifyInlinedCallFrames): (JSC::DFG::adjustAndJumpToTarget): (JSC::DFG::OSRExit::codeLocationForRepatch const): (JSC::DFG::OSRExit::emitRestoreArguments): (JSC::DFG::OSRExit::compileOSRExit): * dfg/DFGOSRExit.h: * dfg/DFGOSRExitCompilerCommon.cpp: (JSC::DFG::handleExitCounts): (JSC::DFG::reifyInlinedCallFrames): (JSC::DFG::osrWriteBarrier): (JSC::DFG::adjustAndJumpToTarget): * dfg/DFGOperations.cpp: * dfg/DFGSlowPathGenerator.h: (JSC::DFG::CallResultAndArgumentsSlowPathGenerator::CallResultAndArgumentsSlowPathGenerator): (JSC::DFG::CallResultAndArgumentsSlowPathGenerator::unpackAndGenerate): (JSC::DFG::slowPathCall): * dfg/DFGSpeculativeJIT.cpp: (JSC::DFG::SpeculativeJIT::compileMathIC): (JSC::DFG::SpeculativeJIT::compileCallDOM): (JSC::DFG::SpeculativeJIT::compileCallDOMGetter): (JSC::DFG::SpeculativeJIT::emitSwitchIntJump): (JSC::DFG::SpeculativeJIT::emitSwitchImm): (JSC::DFG::SpeculativeJIT::emitSwitchStringOnString): (JSC::DFG::SpeculativeJIT::compileHasIndexedProperty): (JSC::DFG::SpeculativeJIT::compileGetDirectPname): (JSC::DFG::SpeculativeJIT::cachedPutById): * dfg/DFGSpeculativeJIT.h: (JSC::DFG::SpeculativeJIT::callOperation): (JSC::DFG::SpeculativeJIT::appendCall): (JSC::DFG::SpeculativeJIT::appendCallWithCallFrameRollbackOnException): (JSC::DFG::SpeculativeJIT::appendCallWithCallFrameRollbackOnExceptionSetResult): (JSC::DFG::SpeculativeJIT::appendCallSetResult): * dfg/DFGSpeculativeJIT64.cpp: (JSC::DFG::SpeculativeJIT::cachedGetById): (JSC::DFG::SpeculativeJIT::cachedGetByIdWithThis): (JSC::DFG::SpeculativeJIT::compile): * dfg/DFGThunks.cpp: (JSC::DFG::osrExitThunkGenerator): (JSC::DFG::osrExitGenerationThunkGenerator): (JSC::DFG::osrEntryThunkGenerator): * dfg/DFGThunks.h: * disassembler/ARM64Disassembler.cpp: (JSC::tryToDisassemble): * disassembler/ARMv7Disassembler.cpp: (JSC::tryToDisassemble): * disassembler/Disassembler.cpp: (JSC::disassemble): (JSC::disassembleAsynchronously): * disassembler/Disassembler.h: (JSC::tryToDisassemble): * disassembler/UDis86Disassembler.cpp: (JSC::tryToDisassembleWithUDis86): * disassembler/UDis86Disassembler.h: (JSC::tryToDisassembleWithUDis86): * disassembler/X86Disassembler.cpp: (JSC::tryToDisassemble): * ftl/FTLCompile.cpp: (JSC::FTL::compile): * ftl/FTLExceptionTarget.cpp: (JSC::FTL::ExceptionTarget::label): (JSC::FTL::ExceptionTarget::jumps): * ftl/FTLExceptionTarget.h: * ftl/FTLGeneratedFunction.h: * ftl/FTLJITCode.cpp: (JSC::FTL::JITCode::initializeB3Code): (JSC::FTL::JITCode::initializeAddressForCall): (JSC::FTL::JITCode::initializeArityCheckEntrypoint): (JSC::FTL::JITCode::addressForCall): (JSC::FTL::JITCode::executableAddressAtOffset): * ftl/FTLJITCode.h: (JSC::FTL::JITCode::b3Code const): * ftl/FTLJITFinalizer.cpp: (JSC::FTL::JITFinalizer::finalizeCommon): * ftl/FTLLazySlowPath.cpp: (JSC::FTL::LazySlowPath::initialize): (JSC::FTL::LazySlowPath::generate): * ftl/FTLLazySlowPath.h: (JSC::FTL::LazySlowPath::patchableJump const): (JSC::FTL::LazySlowPath::done const): (JSC::FTL::LazySlowPath::stub const): * ftl/FTLLazySlowPathCall.h: (JSC::FTL::createLazyCallGenerator): * ftl/FTLLink.cpp: (JSC::FTL::link): * ftl/FTLLowerDFGToB3.cpp: (JSC::FTL::DFG::LowerDFGToB3::lower): (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstruct): (JSC::FTL::DFG::LowerDFGToB3::compileDirectCallOrConstruct): (JSC::FTL::DFG::LowerDFGToB3::compileTailCall): (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargsSpread): (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargs): (JSC::FTL::DFG::LowerDFGToB3::compileCallEval): (JSC::FTL::DFG::LowerDFGToB3::compileInvalidationPoint): (JSC::FTL::DFG::LowerDFGToB3::compileIn): (JSC::FTL::DFG::LowerDFGToB3::compileCheckSubClass): (JSC::FTL::DFG::LowerDFGToB3::compileCallDOM): (JSC::FTL::DFG::LowerDFGToB3::compileCallDOMGetter): (JSC::FTL::DFG::LowerDFGToB3::lazySlowPath): * ftl/FTLOSRExit.cpp: (JSC::FTL::OSRExit::codeLocationForRepatch const): * ftl/FTLOSRExit.h: * ftl/FTLOSRExitCompiler.cpp: (JSC::FTL::compileStub): (JSC::FTL::compileFTLOSRExit): * ftl/FTLOSRExitHandle.cpp: (JSC::FTL::OSRExitHandle::emitExitThunk): * ftl/FTLOperations.cpp: (JSC::FTL::compileFTLLazySlowPath): * ftl/FTLPatchpointExceptionHandle.cpp: (JSC::FTL::PatchpointExceptionHandle::scheduleExitCreationForUnwind): * ftl/FTLSlowPathCall.cpp: (JSC::FTL::SlowPathCallContext::keyWithTarget const): (JSC::FTL::SlowPathCallContext::makeCall): * ftl/FTLSlowPathCall.h: (JSC::FTL::callOperation): * ftl/FTLSlowPathCallKey.cpp: (JSC::FTL::SlowPathCallKey::dump const): * ftl/FTLSlowPathCallKey.h: (JSC::FTL::SlowPathCallKey::SlowPathCallKey): (JSC::FTL::SlowPathCallKey::callTarget const): (JSC::FTL::SlowPathCallKey::withCallTarget): (JSC::FTL::SlowPathCallKey::hash const): (JSC::FTL::SlowPathCallKey::callPtrTag const): Deleted. * ftl/FTLState.cpp: (JSC::FTL::State::State): * ftl/FTLThunks.cpp: (JSC::FTL::genericGenerationThunkGenerator): (JSC::FTL::osrExitGenerationThunkGenerator): (JSC::FTL::lazySlowPathGenerationThunkGenerator): (JSC::FTL::slowPathCallThunkGenerator): * ftl/FTLThunks.h: (JSC::FTL::generateIfNecessary): (JSC::FTL::keyForThunk): (JSC::FTL::Thunks::getSlowPathCallThunk): (JSC::FTL::Thunks::keyForSlowPathCallThunk): * interpreter/InterpreterInlines.h: (JSC::Interpreter::getOpcodeID): * jit/AssemblyHelpers.cpp: (JSC::AssemblyHelpers::callExceptionFuzz): (JSC::AssemblyHelpers::emitDumbVirtualCall): (JSC::AssemblyHelpers::debugCall): * jit/CCallHelpers.cpp: (JSC::CCallHelpers::ensureShadowChickenPacket): * jit/ExecutableAllocator.cpp: (JSC::FixedVMPoolExecutableAllocator::initializeSeparatedWXHeaps): (JSC::FixedVMPoolExecutableAllocator::jitWriteThunkGenerator): * jit/ExecutableAllocator.h: (JSC::performJITMemcpy): * jit/GCAwareJITStubRoutine.cpp: (JSC::GCAwareJITStubRoutine::GCAwareJITStubRoutine): (JSC::MarkingGCAwareJITStubRoutine::MarkingGCAwareJITStubRoutine): (JSC::GCAwareJITStubRoutineWithExceptionHandler::GCAwareJITStubRoutineWithExceptionHandler): (JSC::createJITStubRoutine): * jit/GCAwareJITStubRoutine.h: (JSC::createJITStubRoutine): * jit/JIT.cpp: (JSC::ctiPatchCallByReturnAddress): (JSC::JIT::compileWithoutLinking): (JSC::JIT::link): (JSC::JIT::privateCompileExceptionHandlers): * jit/JIT.h: (JSC::CallRecord::CallRecord): * jit/JITArithmetic.cpp: (JSC::JIT::emitMathICFast): (JSC::JIT::emitMathICSlow): * jit/JITCall.cpp: (JSC::JIT::compileOpCallSlowCase): * jit/JITCall32_64.cpp: (JSC::JIT::compileOpCallSlowCase): * jit/JITCode.cpp: (JSC::JITCodeWithCodeRef::JITCodeWithCodeRef): (JSC::JITCodeWithCodeRef::executableAddressAtOffset): (JSC::DirectJITCode::DirectJITCode): (JSC::DirectJITCode::initializeCodeRef): (JSC::DirectJITCode::addressForCall): (JSC::NativeJITCode::NativeJITCode): (JSC::NativeJITCode::initializeCodeRef): (JSC::NativeJITCode::addressForCall): * jit/JITCode.h: * jit/JITCodeMap.h: (JSC::JITCodeMap::Entry::Entry): (JSC::JITCodeMap::Entry::codeLocation): (JSC::JITCodeMap::append): (JSC::JITCodeMap::find const): * jit/JITDisassembler.cpp: (JSC::JITDisassembler::dumpDisassembly): * jit/JITExceptions.cpp: (JSC::genericUnwind): * jit/JITInlineCacheGenerator.cpp: (JSC::JITByIdGenerator::finalize): * jit/JITInlines.h: (JSC::JIT::emitNakedCall): (JSC::JIT::emitNakedTailCall): (JSC::JIT::appendCallWithExceptionCheck): (JSC::JIT::appendCallWithExceptionCheckAndSlowPathReturnType): (JSC::JIT::appendCallWithCallFrameRollbackOnException): (JSC::JIT::appendCallWithExceptionCheckSetJSValueResult): (JSC::JIT::appendCallWithExceptionCheckSetJSValueResultWithProfile): * jit/JITMathIC.h: (JSC::isProfileEmpty): * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_catch): (JSC::JIT::emit_op_switch_imm): (JSC::JIT::emit_op_switch_char): (JSC::JIT::emit_op_switch_string): (JSC::JIT::privateCompileHasIndexedProperty): (JSC::JIT::emitSlow_op_has_indexed_property): * jit/JITOpcodes32_64.cpp: (JSC::JIT::privateCompileHasIndexedProperty): * jit/JITOperations.cpp: (JSC::getByVal): * jit/JITPropertyAccess.cpp: (JSC::JIT::stringGetByValStubGenerator): (JSC::JIT::emitGetByValWithCachedId): (JSC::JIT::emitSlow_op_get_by_val): (JSC::JIT::emitPutByValWithCachedId): (JSC::JIT::emitSlow_op_put_by_val): (JSC::JIT::emitSlow_op_try_get_by_id): (JSC::JIT::emitSlow_op_get_by_id_direct): (JSC::JIT::emitSlow_op_get_by_id): (JSC::JIT::emitSlow_op_get_by_id_with_this): (JSC::JIT::emitSlow_op_put_by_id): (JSC::JIT::privateCompileGetByVal): (JSC::JIT::privateCompileGetByValWithCachedId): (JSC::JIT::privateCompilePutByVal): (JSC::JIT::privateCompilePutByValWithCachedId): * jit/JITPropertyAccess32_64.cpp: (JSC::JIT::stringGetByValStubGenerator): (JSC::JIT::emitSlow_op_get_by_val): (JSC::JIT::emitSlow_op_put_by_val): * jit/JITStubRoutine.h: (JSC::JITStubRoutine::JITStubRoutine): (JSC::JITStubRoutine::createSelfManagedRoutine): (JSC::JITStubRoutine::code const): (JSC::JITStubRoutine::asCodePtr): * jit/JITThunks.cpp: (JSC::JITThunks::ctiNativeCall): (JSC::JITThunks::ctiNativeConstruct): (JSC::JITThunks::ctiNativeTailCall): (JSC::JITThunks::ctiNativeTailCallWithoutSavedTags): (JSC::JITThunks::ctiInternalFunctionCall): (JSC::JITThunks::ctiInternalFunctionConstruct): (JSC::JITThunks::ctiStub): (JSC::JITThunks::existingCTIStub): (JSC::JITThunks::hostFunctionStub): * jit/JITThunks.h: * jit/PCToCodeOriginMap.cpp: (JSC::PCToCodeOriginMap::PCToCodeOriginMap): * jit/PCToCodeOriginMap.h: * jit/PolymorphicCallStubRoutine.cpp: (JSC::PolymorphicCallStubRoutine::PolymorphicCallStubRoutine): * jit/PolymorphicCallStubRoutine.h: * jit/Repatch.cpp: (JSC::readPutICCallTarget): (JSC::ftlThunkAwareRepatchCall): (JSC::appropriateOptimizingGetByIdFunction): (JSC::appropriateGetByIdFunction): (JSC::tryCacheGetByID): (JSC::repatchGetByID): (JSC::tryCachePutByID): (JSC::repatchPutByID): (JSC::tryCacheIn): (JSC::repatchIn): (JSC::linkSlowFor): (JSC::linkFor): (JSC::linkDirectFor): (JSC::revertCall): (JSC::unlinkFor): (JSC::linkVirtualFor): (JSC::linkPolymorphicCall): (JSC::resetGetByID): (JSC::resetPutByID): * jit/Repatch.h: * jit/SlowPathCall.h: (JSC::JITSlowPathCall::call): * jit/SpecializedThunkJIT.h: (JSC::SpecializedThunkJIT::finalize): (JSC::SpecializedThunkJIT::callDoubleToDouble): (JSC::SpecializedThunkJIT::callDoubleToDoublePreservingReturn): * jit/ThunkGenerator.h: * jit/ThunkGenerators.cpp: (JSC::throwExceptionFromCallSlowPathGenerator): (JSC::slowPathFor): (JSC::linkCallThunkGenerator): (JSC::linkPolymorphicCallThunkGenerator): (JSC::virtualThunkFor): (JSC::nativeForGenerator): (JSC::nativeCallGenerator): (JSC::nativeTailCallGenerator): (JSC::nativeTailCallWithoutSavedTagsGenerator): (JSC::nativeConstructGenerator): (JSC::internalFunctionCallGenerator): (JSC::internalFunctionConstructGenerator): (JSC::arityFixupGenerator): (JSC::unreachableGenerator): (JSC::charCodeAtThunkGenerator): (JSC::charAtThunkGenerator): (JSC::fromCharCodeThunkGenerator): (JSC::clz32ThunkGenerator): (JSC::sqrtThunkGenerator): (JSC::floorThunkGenerator): (JSC::ceilThunkGenerator): (JSC::truncThunkGenerator): (JSC::roundThunkGenerator): (JSC::expThunkGenerator): (JSC::logThunkGenerator): (JSC::absThunkGenerator): (JSC::imulThunkGenerator): (JSC::randomThunkGenerator): (JSC::boundThisNoArgsFunctionCallGenerator): * jit/ThunkGenerators.h: * llint/LLIntData.cpp: (JSC::LLInt::initialize): * llint/LLIntData.h: (JSC::LLInt::getExecutableAddress): (JSC::LLInt::getCodePtr): (JSC::LLInt::getCodeRef): (JSC::LLInt::getCodeFunctionPtr): * llint/LLIntEntrypoint.cpp: (JSC::LLInt::setFunctionEntrypoint): (JSC::LLInt::setEvalEntrypoint): (JSC::LLInt::setProgramEntrypoint): (JSC::LLInt::setModuleProgramEntrypoint): * llint/LLIntExceptions.cpp: (JSC::LLInt::callToThrow): * llint/LLIntSlowPaths.cpp: (JSC::LLInt::LLINT_SLOW_PATH_DECL): (JSC::LLInt::setUpCall): * llint/LLIntThunks.cpp: (JSC::vmEntryToWasm): (JSC::LLInt::generateThunkWithJumpTo): (JSC::LLInt::functionForCallEntryThunkGenerator): (JSC::LLInt::functionForConstructEntryThunkGenerator): (JSC::LLInt::functionForCallArityCheckThunkGenerator): (JSC::LLInt::functionForConstructArityCheckThunkGenerator): (JSC::LLInt::evalEntryThunkGenerator): (JSC::LLInt::programEntryThunkGenerator): (JSC::LLInt::moduleProgramEntryThunkGenerator): * llint/LLIntThunks.h: * llint/LowLevelInterpreter.asm: * llint/LowLevelInterpreter32_64.asm: * llint/LowLevelInterpreter64.asm: * profiler/ProfilerCompilation.cpp: (JSC::Profiler::Compilation::addOSRExitSite): * profiler/ProfilerCompilation.h: * profiler/ProfilerOSRExitSite.cpp: (JSC::Profiler::OSRExitSite::toJS const): * profiler/ProfilerOSRExitSite.h: (JSC::Profiler::OSRExitSite::OSRExitSite): (JSC::Profiler::OSRExitSite::codeAddress const): (JSC::Profiler::OSRExitSite:: const): Deleted. * runtime/ExecutableBase.cpp: (JSC::ExecutableBase::clearCode): * runtime/ExecutableBase.h: (JSC::ExecutableBase::entrypointFor): * runtime/NativeExecutable.cpp: (JSC::NativeExecutable::finishCreation): * runtime/NativeFunction.h: (JSC::TaggedNativeFunction::TaggedNativeFunction): (JSC::TaggedNativeFunction::operator NativeFunction): * runtime/PtrTag.h: (JSC::tagCodePtr): (JSC::untagCodePtr): (JSC::retagCodePtr): (JSC::tagCFunctionPtr): (JSC::untagCFunctionPtr): (JSC::nextPtrTagID): Deleted. * runtime/PutPropertySlot.h: (JSC::PutPropertySlot::PutPropertySlot): (JSC::PutPropertySlot::setCustomValue): (JSC::PutPropertySlot::setCustomAccessor): (JSC::PutPropertySlot::customSetter const): * runtime/ScriptExecutable.cpp: (JSC::ScriptExecutable::installCode): * runtime/VM.cpp: (JSC::VM::getHostFunction): (JSC::VM::getCTIInternalFunctionTrampolineFor): * runtime/VM.h: (JSC::VM::getCTIStub): * wasm/WasmB3IRGenerator.cpp: (JSC::Wasm::B3IRGenerator::B3IRGenerator): (JSC::Wasm::B3IRGenerator::emitExceptionCheck): (JSC::Wasm::B3IRGenerator::emitTierUpCheck): (JSC::Wasm::B3IRGenerator::addCall): (JSC::Wasm::B3IRGenerator::addCallIndirect): * wasm/WasmBBQPlan.cpp: (JSC::Wasm::BBQPlan::prepare): (JSC::Wasm::BBQPlan::complete): * wasm/WasmBBQPlan.h: * wasm/WasmBinding.cpp: (JSC::Wasm::wasmToWasm): * wasm/WasmBinding.h: * wasm/WasmCallee.h: (JSC::Wasm::Callee::entrypoint const): * wasm/WasmCallingConvention.h: (JSC::Wasm::CallingConvention::setupFrameInPrologue const): * wasm/WasmCodeBlock.h: (JSC::Wasm::CodeBlock::entrypointLoadLocationFromFunctionIndexSpace): * wasm/WasmFaultSignalHandler.cpp: (JSC::Wasm::trapHandler): * wasm/WasmFormat.h: * wasm/WasmInstance.h: * wasm/WasmOMGPlan.cpp: (JSC::Wasm::OMGPlan::work): * wasm/WasmThunks.cpp: (JSC::Wasm::throwExceptionFromWasmThunkGenerator): (JSC::Wasm::throwStackOverflowFromWasmThunkGenerator): (JSC::Wasm::triggerOMGTierUpThunkGenerator): (JSC::Wasm::Thunks::stub): (JSC::Wasm::Thunks::existingStub): * wasm/WasmThunks.h: * wasm/js/JSToWasm.cpp: (JSC::Wasm::createJSToWasmWrapper): * wasm/js/JSWebAssemblyCodeBlock.h: * wasm/js/WasmToJS.cpp: (JSC::Wasm::handleBadI64Use): (JSC::Wasm::wasmToJS): * wasm/js/WasmToJS.h: * wasm/js/WebAssemblyFunction.h: * yarr/YarrJIT.cpp: (JSC::Yarr::YarrGenerator::loadFromFrameAndJump): (JSC::Yarr::YarrGenerator::BacktrackingState::linkDataLabels): (JSC::Yarr::YarrGenerator::compile): * yarr/YarrJIT.h: (JSC::Yarr::YarrCodeBlock::set8BitCode): (JSC::Yarr::YarrCodeBlock::set16BitCode): (JSC::Yarr::YarrCodeBlock::set8BitCodeMatchOnly): (JSC::Yarr::YarrCodeBlock::set16BitCodeMatchOnly): (JSC::Yarr::YarrCodeBlock::execute): (JSC::Yarr::YarrCodeBlock::clear): Source/WebCore: No new tests. This is covered by existing tests. * WebCore.xcodeproj/project.pbxproj: * css/ElementRuleCollector.cpp: (WebCore::ElementRuleCollector::ruleMatches): * cssjit/CSSPtrTag.h: Added. * cssjit/CompiledSelector.h: * cssjit/FunctionCall.h: (WebCore::FunctionCall::FunctionCall): (WebCore::FunctionCall::setFunctionAddress): (WebCore::FunctionCall::prepareAndCall): * cssjit/SelectorCompiler.cpp: (WebCore::SelectorCompiler::compileSelector): (WebCore::SelectorCompiler::SelectorFragment::appendUnoptimizedPseudoClassWithContext): (WebCore::SelectorCompiler::addPseudoClassType): (WebCore::SelectorCompiler::SelectorCodeGenerator::compile): (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributeFunctionCallValueMatching): (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementFunctionCallTest): (WebCore::SelectorCompiler::SelectorCodeGenerator::generateContextFunctionCallTest): * cssjit/SelectorCompiler.h: (WebCore::SelectorCompiler::ruleCollectorSimpleSelectorCheckerFunction): (WebCore::SelectorCompiler::querySelectorSimpleSelectorCheckerFunction): (WebCore::SelectorCompiler::ruleCollectorSelectorCheckerFunctionWithCheckingContext): (WebCore::SelectorCompiler::querySelectorSelectorCheckerFunctionWithCheckingContext): * dom/SelectorQuery.cpp: (WebCore::SelectorDataList::executeCompiledSingleMultiSelectorData const): (WebCore::SelectorDataList::execute const): * dom/SelectorQuery.h: Canonical link: https://commits.webkit.org/200234@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@230748 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-04-18 03:31:09 +00:00
CCallHelpers::JumpList* exceptionTarget, FunctionPtr<CFunctionPtrTag> function, GPRReg resultGPR,
FTL should generate code to call slow paths lazily https://bugs.webkit.org/show_bug.cgi?id=149936 Reviewed by Saam Barati. Source/JavaScriptCore: We often have complex slow paths in FTL-generated code. Those slow paths may never run. Even if they do run, they don't need stellar performance. So, it doesn't make sense to have LLVM worry about compiling such slow path code. This patch enables us to use our own MacroAssembler for compiling the slow path inside FTL code. It does this by using a crazy lambda thingy (see FTLLowerDFGToLLVM.cpp's lazySlowPath() and its documentation). The result is quite natural to use. Even for straight slow path calls via something like vmCall(), the lazySlowPath offers the benefit that the call marshalling and the exception checking are not expressed using LLVM IR and do not require LLVM to think about it. It also has the benefit that we never generate the code if it never runs. That's great, since function calls usually involve ~10 instructions total (move arguments to argument registers, make the call, check exception, etc.). This patch adds the lazy slow path abstraction and uses it for some slow paths in the FTL. The code we generate with lazy slow paths is worse than the code that LLVM would have generated. Therefore, a lazy slow path only makes sense when we have strong evidence that the slow path will execute infrequently relative to the fast path. This completely precludes the use of lazy slow paths for out-of-line Nodes that unconditionally call a C++ function. It also precludes their use for the GetByVal out-of-bounds handler, since when we generate a GetByVal with an out-of-bounds handler it means that we only know that the out-of-bounds case executed at least once. So, for all we know, it may actually be the common case. So, this patch just deployed the lazy slow path for GC slow paths and masquerades-as-undefined slow paths. It makes sense for GC slow paths because those have a statistical guarantee of slow path frequency - probably bounded at less than 1/10. It makes sense for masquerades-as- undefined because we can say quite confidently that this is an uncommon scenario on the modern Web. Something that's always been challenging about abstractions involving the MacroAssembler is that linking is a separate phase, and there is no way for someone who is just given access to the MacroAssembler& to emit code that requires linking, since linking happens once we have emitted all code and we are creating the LinkBuffer. Moreover, the FTL requires that the final parts of linking happen on the main thread. This patch ran into this issue, and solved it comprehensively, by introducing MacroAssembler::addLinkTask(). This takes a lambda and runs it at the bitter end of linking - when performFinalization() is called. This ensure that the task added by addLinkTask() runs on the main thread. This patch doesn't replace all of the previously existing idioms for dealing with this issue; we can do that later. This shows small speed-ups on a bunch of things. No big win on any benchmark aggregate. But mainly this is done for https://bugs.webkit.org/show_bug.cgi?id=149852, where we found that outlining the slow path in this way was a significant speed boost. * CMakeLists.txt: * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: * JavaScriptCore.xcodeproj/project.pbxproj: * assembler/AbstractMacroAssembler.h: (JSC::AbstractMacroAssembler::replaceWithAddressComputation): (JSC::AbstractMacroAssembler::addLinkTask): (JSC::AbstractMacroAssembler::AbstractMacroAssembler): * assembler/LinkBuffer.cpp: (JSC::LinkBuffer::linkCode): (JSC::LinkBuffer::allocate): (JSC::LinkBuffer::performFinalization): * assembler/LinkBuffer.h: (JSC::LinkBuffer::wasAlreadyDisassembled): (JSC::LinkBuffer::didAlreadyDisassemble): (JSC::LinkBuffer::vm): (JSC::LinkBuffer::executableOffsetFor): * bytecode/CodeOrigin.h: (JSC::CodeOrigin::CodeOrigin): (JSC::CodeOrigin::isSet): (JSC::CodeOrigin::operator bool): (JSC::CodeOrigin::isHashTableDeletedValue): (JSC::CodeOrigin::operator!): Deleted. * ftl/FTLCompile.cpp: (JSC::FTL::mmAllocateDataSection): * ftl/FTLInlineCacheDescriptor.h: (JSC::FTL::InlineCacheDescriptor::InlineCacheDescriptor): (JSC::FTL::CheckInDescriptor::CheckInDescriptor): (JSC::FTL::LazySlowPathDescriptor::LazySlowPathDescriptor): * ftl/FTLJITCode.h: * ftl/FTLJITFinalizer.cpp: (JSC::FTL::JITFinalizer::finalizeFunction): * ftl/FTLJITFinalizer.h: * ftl/FTLLazySlowPath.cpp: Added. (JSC::FTL::LazySlowPath::LazySlowPath): (JSC::FTL::LazySlowPath::~LazySlowPath): (JSC::FTL::LazySlowPath::generate): * ftl/FTLLazySlowPath.h: Added. (JSC::FTL::LazySlowPath::createGenerator): (JSC::FTL::LazySlowPath::patchpoint): (JSC::FTL::LazySlowPath::usedRegisters): (JSC::FTL::LazySlowPath::callSiteIndex): (JSC::FTL::LazySlowPath::stub): * ftl/FTLLazySlowPathCall.h: Added. (JSC::FTL::createLazyCallGenerator): * ftl/FTLLowerDFGToLLVM.cpp: (JSC::FTL::DFG::LowerDFGToLLVM::compileCreateActivation): (JSC::FTL::DFG::LowerDFGToLLVM::compileNewFunction): (JSC::FTL::DFG::LowerDFGToLLVM::compileCreateDirectArguments): (JSC::FTL::DFG::LowerDFGToLLVM::compileNewArrayWithSize): (JSC::FTL::DFG::LowerDFGToLLVM::compileMakeRope): (JSC::FTL::DFG::LowerDFGToLLVM::compileNotifyWrite): (JSC::FTL::DFG::LowerDFGToLLVM::compileIsObjectOrNull): (JSC::FTL::DFG::LowerDFGToLLVM::compileIsFunction): (JSC::FTL::DFG::LowerDFGToLLVM::compileIn): (JSC::FTL::DFG::LowerDFGToLLVM::compileMaterializeNewObject): (JSC::FTL::DFG::LowerDFGToLLVM::compileMaterializeCreateActivation): (JSC::FTL::DFG::LowerDFGToLLVM::compileCheckWatchdogTimer): (JSC::FTL::DFG::LowerDFGToLLVM::allocatePropertyStorageWithSizeImpl): (JSC::FTL::DFG::LowerDFGToLLVM::allocateObject): (JSC::FTL::DFG::LowerDFGToLLVM::allocateJSArray): (JSC::FTL::DFG::LowerDFGToLLVM::buildTypeOf): (JSC::FTL::DFG::LowerDFGToLLVM::sensibleDoubleToInt32): (JSC::FTL::DFG::LowerDFGToLLVM::lazySlowPath): (JSC::FTL::DFG::LowerDFGToLLVM::speculate): (JSC::FTL::DFG::LowerDFGToLLVM::emitStoreBarrier): * ftl/FTLOperations.cpp: (JSC::FTL::operationMaterializeObjectInOSR): (JSC::FTL::compileFTLLazySlowPath): * ftl/FTLOperations.h: * ftl/FTLSlowPathCall.cpp: (JSC::FTL::SlowPathCallContext::SlowPathCallContext): (JSC::FTL::SlowPathCallContext::~SlowPathCallContext): (JSC::FTL::SlowPathCallContext::keyWithTarget): (JSC::FTL::SlowPathCallContext::makeCall): (JSC::FTL::callSiteIndexForCodeOrigin): (JSC::FTL::storeCodeOrigin): Deleted. (JSC::FTL::callOperation): Deleted. * ftl/FTLSlowPathCall.h: (JSC::FTL::callOperation): * ftl/FTLState.h: * ftl/FTLThunks.cpp: (JSC::FTL::genericGenerationThunkGenerator): (JSC::FTL::osrExitGenerationThunkGenerator): (JSC::FTL::lazySlowPathGenerationThunkGenerator): (JSC::FTL::registerClobberCheck): * ftl/FTLThunks.h: * interpreter/CallFrame.h: (JSC::CallSiteIndex::CallSiteIndex): (JSC::CallSiteIndex::operator bool): (JSC::CallSiteIndex::bits): * jit/CCallHelpers.h: (JSC::CCallHelpers::setupArgument): (JSC::CCallHelpers::setupArgumentsWithExecState): * jit/JITOperations.cpp: Source/WTF: Enables SharedTask to handle any function type, not just void(). It's probably better to use SharedTask instead of std::function in performance-sensitive code. std::function uses the system malloc and has copy semantics. SharedTask uses FastMalloc and has aliasing semantics. So, you can just trust that it will have sensible performance characteristics. * wtf/ParallelHelperPool.cpp: (WTF::ParallelHelperClient::~ParallelHelperClient): (WTF::ParallelHelperClient::setTask): (WTF::ParallelHelperClient::doSomeHelping): (WTF::ParallelHelperClient::runTaskInParallel): (WTF::ParallelHelperClient::finish): (WTF::ParallelHelperClient::claimTask): (WTF::ParallelHelperClient::runTask): (WTF::ParallelHelperPool::doSomeHelping): (WTF::ParallelHelperPool::helperThreadBody): * wtf/ParallelHelperPool.h: (WTF::ParallelHelperClient::setFunction): (WTF::ParallelHelperClient::runFunctionInParallel): (WTF::ParallelHelperClient::pool): * wtf/SharedTask.h: (WTF::createSharedTask): (WTF::SharedTask::SharedTask): Deleted. (WTF::SharedTask::~SharedTask): Deleted. (WTF::SharedTaskFunctor::SharedTaskFunctor): Deleted. Canonical link: https://commits.webkit.org/168154@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@190860 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-10-12 17:56:26 +00:00
ArgumentTypes... arguments)
{
if (callSiteIndex) {
jit.store32(
CCallHelpers::TrustedImm32(callSiteIndex.bits()),
Reland bytecode checkpoints since bugs have been fixed https://bugs.webkit.org/show_bug.cgi?id=206361 Unreviewed, reland. The watch bugs have been fixed by https://trac.webkit.org/changeset/254674 JSTests: * stress/apply-osr-exit-should-get-length-once-exceptions-occasionally.js: Added. (expectedArgCount): (callee): (test): (let.array.get length): * stress/apply-osr-exit-should-get-length-once.js: Added. (expectedArgCount): (callee): (test): (let.array.get length): * stress/load-varargs-then-inlined-call-and-exit-strict.js: (checkEqual): * stress/recursive-tail-call-with-different-argument-count.js: * stress/rest-varargs-osr-exit-to-checkpoint.js: Added. (foo): (bar): Source/JavaScriptCore: * CMakeLists.txt: * DerivedSources-input.xcfilelist: * JavaScriptCore.xcodeproj/project.pbxproj: * assembler/MacroAssemblerCodeRef.h: * assembler/ProbeFrame.h: (JSC::Probe::Frame::operand): (JSC::Probe::Frame::setOperand): * b3/testb3.h: (populateWithInterestingValues): (floatingPointOperands): * bytecode/AccessCase.cpp: (JSC::AccessCase::generateImpl): * bytecode/AccessCaseSnippetParams.cpp: (JSC::SlowPathCallGeneratorWithArguments::generateImpl): * bytecode/BytecodeDumper.cpp: (JSC::BytecodeDumperBase::dumpValue): (JSC::BytecodeDumper<Block>::registerName const): (JSC::BytecodeDumper<Block>::constantName const): (JSC::Wasm::BytecodeDumper::constantName const): * bytecode/BytecodeDumper.h: * bytecode/BytecodeIndex.cpp: (JSC::BytecodeIndex::dump const): * bytecode/BytecodeIndex.h: (JSC::BytecodeIndex::BytecodeIndex): (JSC::BytecodeIndex::offset const): (JSC::BytecodeIndex::checkpoint const): (JSC::BytecodeIndex::asBits const): (JSC::BytecodeIndex::hash const): (JSC::BytecodeIndex::operator bool const): (JSC::BytecodeIndex::pack): (JSC::BytecodeIndex::fromBits): * bytecode/BytecodeList.rb: * bytecode/BytecodeLivenessAnalysis.cpp: (JSC::enumValuesEqualAsIntegral): (JSC::tmpLivenessForCheckpoint): * bytecode/BytecodeLivenessAnalysis.h: * bytecode/BytecodeLivenessAnalysisInlines.h: (JSC::virtualRegisterIsAlwaysLive): (JSC::virtualRegisterThatIsNotAlwaysLiveIsLive): (JSC::virtualRegisterIsLive): (JSC::operandIsAlwaysLive): Deleted. (JSC::operandThatIsNotAlwaysLiveIsLive): Deleted. (JSC::operandIsLive): Deleted. * bytecode/CodeBlock.cpp: (JSC::CodeBlock::finishCreation): (JSC::CodeBlock::bytecodeIndexForExit const): (JSC::CodeBlock::ensureCatchLivenessIsComputedForBytecodeIndexSlow): (JSC::CodeBlock::updateAllValueProfilePredictionsAndCountLiveness): * bytecode/CodeBlock.h: (JSC::CodeBlock::numTmps const): (JSC::CodeBlock::isKnownNotImmediate): (JSC::CodeBlock::isTemporaryRegister): (JSC::CodeBlock::constantRegister): (JSC::CodeBlock::getConstant const): (JSC::CodeBlock::constantSourceCodeRepresentation const): (JSC::CodeBlock::replaceConstant): (JSC::CodeBlock::isTemporaryRegisterIndex): Deleted. (JSC::CodeBlock::isConstantRegisterIndex): Deleted. * bytecode/CodeOrigin.h: * bytecode/FullBytecodeLiveness.h: (JSC::FullBytecodeLiveness::virtualRegisterIsLive const): (JSC::FullBytecodeLiveness::operandIsLive const): Deleted. * bytecode/InlineCallFrame.h: (JSC::InlineCallFrame::InlineCallFrame): (JSC::InlineCallFrame::setTmpOffset): (JSC::CodeOrigin::walkUpInlineStack const): (JSC::CodeOrigin::inlineStackContainsActiveCheckpoint const): (JSC::remapOperand): (JSC::unmapOperand): (JSC::CodeOrigin::walkUpInlineStack): Deleted. * bytecode/LazyOperandValueProfile.h: (JSC::LazyOperandValueProfileKey::LazyOperandValueProfileKey): (JSC::LazyOperandValueProfileKey::hash const): (JSC::LazyOperandValueProfileKey::operand const): * bytecode/MethodOfGettingAValueProfile.cpp: (JSC::MethodOfGettingAValueProfile::fromLazyOperand): (JSC::MethodOfGettingAValueProfile::emitReportValue const): (JSC::MethodOfGettingAValueProfile::reportValue): * bytecode/MethodOfGettingAValueProfile.h: * bytecode/Operands.h: (JSC::Operand::Operand): (JSC::Operand::tmp): (JSC::Operand::kind const): (JSC::Operand::value const): (JSC::Operand::virtualRegister const): (JSC::Operand::asBits const): (JSC::Operand::isTmp const): (JSC::Operand::isArgument const): (JSC::Operand::isLocal const): (JSC::Operand::isHeader const): (JSC::Operand::isConstant const): (JSC::Operand::toArgument const): (JSC::Operand::toLocal const): (JSC::Operand::operator== const): (JSC::Operand::isValid const): (JSC::Operand::fromBits): (JSC::Operands::Operands): (JSC::Operands::numberOfLocals const): (JSC::Operands::numberOfTmps const): (JSC::Operands::tmpIndex const): (JSC::Operands::argumentIndex const): (JSC::Operands::localIndex const): (JSC::Operands::tmp): (JSC::Operands::tmp const): (JSC::Operands::argument): (JSC::Operands::argument const): (JSC::Operands::local): (JSC::Operands::local const): (JSC::Operands::sizeFor const): (JSC::Operands::atFor): (JSC::Operands::atFor const): (JSC::Operands::ensureLocals): (JSC::Operands::ensureTmps): (JSC::Operands::getForOperandIndex): (JSC::Operands::getForOperandIndex const): (JSC::Operands::operandIndex const): (JSC::Operands::operand): (JSC::Operands::operand const): (JSC::Operands::hasOperand const): (JSC::Operands::setOperand): (JSC::Operands::at const): (JSC::Operands::at): (JSC::Operands::operator[] const): (JSC::Operands::operator[]): (JSC::Operands::operandForIndex const): (JSC::Operands::operator== const): (JSC::Operands::isArgument const): Deleted. (JSC::Operands::isLocal const): Deleted. (JSC::Operands::virtualRegisterForIndex const): Deleted. (JSC::Operands::setOperandFirstTime): Deleted. * bytecode/OperandsInlines.h: (JSC::Operand::dump const): (JSC::Operands<T>::dumpInContext const): (JSC::Operands<T>::dump const): * bytecode/UnlinkedCodeBlock.cpp: (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock): * bytecode/UnlinkedCodeBlock.h: (JSC::UnlinkedCodeBlock::hasCheckpoints const): (JSC::UnlinkedCodeBlock::setHasCheckpoints): (JSC::UnlinkedCodeBlock::constantRegister const): (JSC::UnlinkedCodeBlock::getConstant const): (JSC::UnlinkedCodeBlock::isConstantRegisterIndex const): Deleted. * bytecode/ValueProfile.h: (JSC::ValueProfileAndVirtualRegisterBuffer::ValueProfileAndVirtualRegisterBuffer): (JSC::ValueProfileAndVirtualRegisterBuffer::~ValueProfileAndVirtualRegisterBuffer): (JSC::ValueProfileAndOperandBuffer::ValueProfileAndOperandBuffer): Deleted. (JSC::ValueProfileAndOperandBuffer::~ValueProfileAndOperandBuffer): Deleted. (JSC::ValueProfileAndOperandBuffer::forEach): Deleted. * bytecode/ValueRecovery.cpp: (JSC::ValueRecovery::recover const): * bytecode/ValueRecovery.h: * bytecode/VirtualRegister.h: (JSC::virtualRegisterIsLocal): (JSC::virtualRegisterIsArgument): (JSC::VirtualRegister::VirtualRegister): (JSC::VirtualRegister::isValid const): (JSC::VirtualRegister::isLocal const): (JSC::VirtualRegister::isArgument const): (JSC::VirtualRegister::isConstant const): (JSC::VirtualRegister::toConstantIndex const): (JSC::operandIsLocal): Deleted. (JSC::operandIsArgument): Deleted. * bytecompiler/BytecodeGenerator.cpp: (JSC::BytecodeGenerator::initializeNextParameter): (JSC::BytecodeGenerator::initializeParameters): (JSC::BytecodeGenerator::emitEqualityOpImpl): (JSC::BytecodeGenerator::emitCallVarargs): * bytecompiler/BytecodeGenerator.h: (JSC::BytecodeGenerator::setUsesCheckpoints): * bytecompiler/RegisterID.h: (JSC::RegisterID::setIndex): * dfg/DFGAbstractHeap.cpp: (JSC::DFG::AbstractHeap::Payload::dumpAsOperand const): (JSC::DFG::AbstractHeap::dump const): * dfg/DFGAbstractHeap.h: (JSC::DFG::AbstractHeap::Payload::Payload): (JSC::DFG::AbstractHeap::AbstractHeap): (JSC::DFG::AbstractHeap::operand const): * dfg/DFGAbstractInterpreterInlines.h: (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): * dfg/DFGArgumentPosition.h: (JSC::DFG::ArgumentPosition::dump): * dfg/DFGArgumentsEliminationPhase.cpp: * dfg/DFGArgumentsUtilities.cpp: (JSC::DFG::argumentsInvolveStackSlot): (JSC::DFG::emitCodeToGetArgumentsArrayLength): * dfg/DFGArgumentsUtilities.h: * dfg/DFGAtTailAbstractState.h: (JSC::DFG::AtTailAbstractState::operand): * dfg/DFGAvailabilityMap.cpp: (JSC::DFG::AvailabilityMap::pruneByLiveness): * dfg/DFGAvailabilityMap.h: (JSC::DFG::AvailabilityMap::closeStartingWithLocal): * dfg/DFGBasicBlock.cpp: (JSC::DFG::BasicBlock::BasicBlock): (JSC::DFG::BasicBlock::ensureTmps): * dfg/DFGBasicBlock.h: * dfg/DFGBlockInsertionSet.cpp: (JSC::DFG::BlockInsertionSet::insert): * dfg/DFGByteCodeParser.cpp: (JSC::DFG::ByteCodeParser::ByteCodeParser): (JSC::DFG::ByteCodeParser::ensureTmps): (JSC::DFG::ByteCodeParser::progressToNextCheckpoint): (JSC::DFG::ByteCodeParser::newVariableAccessData): (JSC::DFG::ByteCodeParser::getDirect): (JSC::DFG::ByteCodeParser::get): (JSC::DFG::ByteCodeParser::setDirect): (JSC::DFG::ByteCodeParser::injectLazyOperandSpeculation): (JSC::DFG::ByteCodeParser::getLocalOrTmp): (JSC::DFG::ByteCodeParser::setLocalOrTmp): (JSC::DFG::ByteCodeParser::setArgument): (JSC::DFG::ByteCodeParser::findArgumentPositionForLocal): (JSC::DFG::ByteCodeParser::findArgumentPosition): (JSC::DFG::ByteCodeParser::flushImpl): (JSC::DFG::ByteCodeParser::flushForTerminalImpl): (JSC::DFG::ByteCodeParser::flush): (JSC::DFG::ByteCodeParser::flushDirect): (JSC::DFG::ByteCodeParser::addFlushOrPhantomLocal): (JSC::DFG::ByteCodeParser::phantomLocalDirect): (JSC::DFG::ByteCodeParser::flushForTerminal): (JSC::DFG::ByteCodeParser::addToGraph): (JSC::DFG::ByteCodeParser::InlineStackEntry::remapOperand const): (JSC::DFG::ByteCodeParser::DelayedSetLocal::DelayedSetLocal): (JSC::DFG::ByteCodeParser::DelayedSetLocal::execute): (JSC::DFG::ByteCodeParser::allocateTargetableBlock): (JSC::DFG::ByteCodeParser::allocateUntargetableBlock): (JSC::DFG::ByteCodeParser::handleRecursiveTailCall): (JSC::DFG::ByteCodeParser::inlineCall): (JSC::DFG::ByteCodeParser::handleVarargsInlining): (JSC::DFG::ByteCodeParser::handleInlining): (JSC::DFG::ByteCodeParser::parseBlock): (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry): (JSC::DFG::ByteCodeParser::parse): (JSC::DFG::ByteCodeParser::getLocal): Deleted. (JSC::DFG::ByteCodeParser::setLocal): Deleted. * dfg/DFGCFAPhase.cpp: (JSC::DFG::CFAPhase::injectOSR): * dfg/DFGCPSRethreadingPhase.cpp: (JSC::DFG::CPSRethreadingPhase::run): (JSC::DFG::CPSRethreadingPhase::canonicalizeGetLocal): (JSC::DFG::CPSRethreadingPhase::canonicalizeFlushOrPhantomLocalFor): (JSC::DFG::CPSRethreadingPhase::canonicalizeFlushOrPhantomLocal): (JSC::DFG::CPSRethreadingPhase::canonicalizeSet): (JSC::DFG::CPSRethreadingPhase::canonicalizeLocalsInBlock): (JSC::DFG::CPSRethreadingPhase::propagatePhis): (JSC::DFG::CPSRethreadingPhase::phiStackFor): * dfg/DFGCSEPhase.cpp: * dfg/DFGCapabilities.cpp: (JSC::DFG::capabilityLevel): * dfg/DFGClobberize.h: (JSC::DFG::clobberize): * dfg/DFGCombinedLiveness.cpp: (JSC::DFG::addBytecodeLiveness): * dfg/DFGCommonData.cpp: (JSC::DFG::CommonData::addCodeOrigin): (JSC::DFG::CommonData::addUniqueCallSiteIndex): (JSC::DFG::CommonData::lastCallSite const): * dfg/DFGConstantFoldingPhase.cpp: (JSC::DFG::ConstantFoldingPhase::foldConstants): * dfg/DFGDoesGC.cpp: (JSC::DFG::doesGC): * dfg/DFGDriver.cpp: (JSC::DFG::compileImpl): * dfg/DFGFixupPhase.cpp: (JSC::DFG::FixupPhase::fixupNode): * dfg/DFGForAllKills.h: (JSC::DFG::forAllKilledOperands): (JSC::DFG::forAllKilledNodesAtNodeIndex): (JSC::DFG::forAllKillsInBlock): * dfg/DFGGraph.cpp: (JSC::DFG::Graph::dump): (JSC::DFG::Graph::dumpBlockHeader): (JSC::DFG::Graph::substituteGetLocal): (JSC::DFG::Graph::isLiveInBytecode): (JSC::DFG::Graph::localsAndTmpsLiveInBytecode): (JSC::DFG::Graph::methodOfGettingAValueProfileFor): (JSC::DFG::Graph::localsLiveInBytecode): Deleted. * dfg/DFGGraph.h: (JSC::DFG::Graph::forAllLocalsAndTmpsLiveInBytecode): (JSC::DFG::Graph::forAllLiveInBytecode): (JSC::DFG::Graph::forAllLocalsLiveInBytecode): Deleted. * dfg/DFGInPlaceAbstractState.cpp: (JSC::DFG::InPlaceAbstractState::InPlaceAbstractState): * dfg/DFGInPlaceAbstractState.h: (JSC::DFG::InPlaceAbstractState::operand): * dfg/DFGJITCompiler.cpp: (JSC::DFG::JITCompiler::linkOSRExits): (JSC::DFG::JITCompiler::noticeOSREntry): * dfg/DFGJITCompiler.h: (JSC::DFG::JITCompiler::emitStoreCallSiteIndex): * dfg/DFGLiveCatchVariablePreservationPhase.cpp: (JSC::DFG::LiveCatchVariablePreservationPhase::isValidFlushLocation): (JSC::DFG::LiveCatchVariablePreservationPhase::handleBlockForTryCatch): (JSC::DFG::LiveCatchVariablePreservationPhase::newVariableAccessData): * dfg/DFGMovHintRemovalPhase.cpp: * dfg/DFGNode.h: (JSC::DFG::StackAccessData::StackAccessData): (JSC::DFG::Node::hasArgumentsChild): (JSC::DFG::Node::argumentsChild): (JSC::DFG::Node::operand): (JSC::DFG::Node::hasUnlinkedOperand): (JSC::DFG::Node::unlinkedOperand): (JSC::DFG::Node::hasLoadVarargsData): (JSC::DFG::Node::local): Deleted. (JSC::DFG::Node::hasUnlinkedLocal): Deleted. (JSC::DFG::Node::unlinkedLocal): Deleted. * dfg/DFGNodeType.h: * dfg/DFGOSRAvailabilityAnalysisPhase.cpp: (JSC::DFG::OSRAvailabilityAnalysisPhase::run): (JSC::DFG::LocalOSRAvailabilityCalculator::executeNode): * dfg/DFGOSREntry.cpp: (JSC::DFG::prepareOSREntry): (JSC::DFG::prepareCatchOSREntry): * dfg/DFGOSREntrypointCreationPhase.cpp: (JSC::DFG::OSREntrypointCreationPhase::run): * dfg/DFGOSRExit.cpp: (JSC::DFG::OSRExit::emitRestoreArguments): (JSC::DFG::OSRExit::compileExit): (JSC::DFG::jsValueFor): Deleted. (JSC::DFG::restoreCalleeSavesFor): Deleted. (JSC::DFG::saveCalleeSavesFor): Deleted. (JSC::DFG::restoreCalleeSavesFromVMEntryFrameCalleeSavesBuffer): Deleted. (JSC::DFG::copyCalleeSavesToVMEntryFrameCalleeSavesBuffer): Deleted. (JSC::DFG::saveOrCopyCalleeSavesFor): Deleted. (JSC::DFG::createDirectArgumentsDuringExit): Deleted. (JSC::DFG::createClonedArgumentsDuringExit): Deleted. (JSC::DFG::emitRestoreArguments): Deleted. (JSC::DFG::OSRExit::executeOSRExit): Deleted. (JSC::DFG::reifyInlinedCallFrames): Deleted. (JSC::DFG::adjustAndJumpToTarget): Deleted. (JSC::DFG::printOSRExit): Deleted. * dfg/DFGOSRExit.h: * dfg/DFGOSRExitBase.h: (JSC::DFG::OSRExitBase::isExitingToCheckpointHandler const): * dfg/DFGOSRExitCompilerCommon.cpp: (JSC::DFG::callerReturnPC): (JSC::DFG::reifyInlinedCallFrames): (JSC::DFG::adjustAndJumpToTarget): * dfg/DFGObjectAllocationSinkingPhase.cpp: * dfg/DFGOpInfo.h: (JSC::DFG::OpInfo::OpInfo): * dfg/DFGOperations.cpp: * dfg/DFGPhantomInsertionPhase.cpp: * dfg/DFGPreciseLocalClobberize.h: (JSC::DFG::PreciseLocalClobberizeAdaptor::read): (JSC::DFG::PreciseLocalClobberizeAdaptor::write): (JSC::DFG::PreciseLocalClobberizeAdaptor::def): (JSC::DFG::PreciseLocalClobberizeAdaptor::callIfAppropriate): * dfg/DFGPredictionInjectionPhase.cpp: (JSC::DFG::PredictionInjectionPhase::run): * dfg/DFGPredictionPropagationPhase.cpp: * dfg/DFGPutStackSinkingPhase.cpp: * dfg/DFGSSAConversionPhase.cpp: (JSC::DFG::SSAConversionPhase::run): * dfg/DFGSafeToExecute.h: (JSC::DFG::safeToExecute): * dfg/DFGSpeculativeJIT.cpp: (JSC::DFG::SpeculativeJIT::compileMovHint): (JSC::DFG::SpeculativeJIT::compileCurrentBlock): (JSC::DFG::SpeculativeJIT::checkArgumentTypes): (JSC::DFG::SpeculativeJIT::compileVarargsLength): (JSC::DFG::SpeculativeJIT::compileLoadVarargs): (JSC::DFG::SpeculativeJIT::compileForwardVarargs): (JSC::DFG::SpeculativeJIT::compileCreateDirectArguments): (JSC::DFG::SpeculativeJIT::compileGetArgumentCountIncludingThis): * dfg/DFGSpeculativeJIT.h: (JSC::DFG::SpeculativeJIT::recordSetLocal): * dfg/DFGSpeculativeJIT32_64.cpp: (JSC::DFG::SpeculativeJIT::compile): * dfg/DFGSpeculativeJIT64.cpp: (JSC::DFG::SpeculativeJIT::compile): * dfg/DFGStackLayoutPhase.cpp: (JSC::DFG::StackLayoutPhase::run): (JSC::DFG::StackLayoutPhase::assign): * dfg/DFGStrengthReductionPhase.cpp: (JSC::DFG::StrengthReductionPhase::handleNode): * dfg/DFGThunks.cpp: (JSC::DFG::osrExitThunkGenerator): Deleted. * dfg/DFGThunks.h: * dfg/DFGTypeCheckHoistingPhase.cpp: (JSC::DFG::TypeCheckHoistingPhase::run): (JSC::DFG::TypeCheckHoistingPhase::disableHoistingAcrossOSREntries): * dfg/DFGValidate.cpp: * dfg/DFGVarargsForwardingPhase.cpp: * dfg/DFGVariableAccessData.cpp: (JSC::DFG::VariableAccessData::VariableAccessData): (JSC::DFG::VariableAccessData::shouldUseDoubleFormatAccordingToVote): (JSC::DFG::VariableAccessData::tallyVotesForShouldUseDoubleFormat): (JSC::DFG::VariableAccessData::couldRepresentInt52Impl): * dfg/DFGVariableAccessData.h: (JSC::DFG::VariableAccessData::operand): (JSC::DFG::VariableAccessData::local): Deleted. * dfg/DFGVariableEvent.cpp: (JSC::DFG::VariableEvent::dump const): * dfg/DFGVariableEvent.h: (JSC::DFG::VariableEvent::spill): (JSC::DFG::VariableEvent::setLocal): (JSC::DFG::VariableEvent::movHint): (JSC::DFG::VariableEvent::spillRegister const): (JSC::DFG::VariableEvent::operand const): (JSC::DFG::VariableEvent::bytecodeRegister const): Deleted. * dfg/DFGVariableEventStream.cpp: (JSC::DFG::VariableEventStream::logEvent): (JSC::DFG::VariableEventStream::reconstruct const): * dfg/DFGVariableEventStream.h: (JSC::DFG::VariableEventStream::appendAndLog): * ftl/FTLCapabilities.cpp: (JSC::FTL::canCompile): * ftl/FTLForOSREntryJITCode.cpp: (JSC::FTL::ForOSREntryJITCode::ForOSREntryJITCode): * ftl/FTLLowerDFGToB3.cpp: (JSC::FTL::DFG::LowerDFGToB3::lower): (JSC::FTL::DFG::LowerDFGToB3::compileNode): (JSC::FTL::DFG::LowerDFGToB3::compileExtractOSREntryLocal): (JSC::FTL::DFG::LowerDFGToB3::compileGetStack): (JSC::FTL::DFG::LowerDFGToB3::compileGetCallee): (JSC::FTL::DFG::LowerDFGToB3::compileSetCallee): (JSC::FTL::DFG::LowerDFGToB3::compileSetArgumentCountIncludingThis): (JSC::FTL::DFG::LowerDFGToB3::compileVarargsLength): (JSC::FTL::DFG::LowerDFGToB3::compileLoadVarargs): (JSC::FTL::DFG::LowerDFGToB3::compileForwardVarargs): (JSC::FTL::DFG::LowerDFGToB3::getSpreadLengthFromInlineCallFrame): (JSC::FTL::DFG::LowerDFGToB3::compileForwardVarargsWithSpread): (JSC::FTL::DFG::LowerDFGToB3::compileLogShadowChickenPrologue): (JSC::FTL::DFG::LowerDFGToB3::getArgumentsLength): (JSC::FTL::DFG::LowerDFGToB3::getCurrentCallee): (JSC::FTL::DFG::LowerDFGToB3::callPreflight): (JSC::FTL::DFG::LowerDFGToB3::appendOSRExitDescriptor): (JSC::FTL::DFG::LowerDFGToB3::buildExitArguments): (JSC::FTL::DFG::LowerDFGToB3::addressFor): (JSC::FTL::DFG::LowerDFGToB3::payloadFor): (JSC::FTL::DFG::LowerDFGToB3::tagFor): * ftl/FTLOSREntry.cpp: (JSC::FTL::prepareOSREntry): * ftl/FTLOSRExit.cpp: (JSC::FTL::OSRExitDescriptor::OSRExitDescriptor): * ftl/FTLOSRExit.h: * ftl/FTLOSRExitCompiler.cpp: (JSC::FTL::compileStub): * ftl/FTLOperations.cpp: (JSC::FTL::operationMaterializeObjectInOSR): * ftl/FTLOutput.cpp: (JSC::FTL::Output::select): * ftl/FTLOutput.h: * ftl/FTLSelectPredictability.h: Copied from Source/JavaScriptCore/ftl/FTLForOSREntryJITCode.cpp. * ftl/FTLSlowPathCall.h: (JSC::FTL::callOperation): * generator/Checkpoints.rb: Added. * generator/Opcode.rb: * generator/Section.rb: * heap/Heap.cpp: (JSC::Heap::gatherScratchBufferRoots): * interpreter/CallFrame.cpp: (JSC::CallFrame::callSiteAsRawBits const): (JSC::CallFrame::unsafeCallSiteAsRawBits const): (JSC::CallFrame::callSiteIndex const): (JSC::CallFrame::unsafeCallSiteIndex const): (JSC::CallFrame::setCurrentVPC): (JSC::CallFrame::bytecodeIndex): (JSC::CallFrame::codeOrigin): * interpreter/CallFrame.h: (JSC::CallSiteIndex::CallSiteIndex): (JSC::CallSiteIndex::operator bool const): (JSC::CallSiteIndex::operator== const): (JSC::CallSiteIndex::bits const): (JSC::CallSiteIndex::fromBits): (JSC::CallSiteIndex::bytecodeIndex const): (JSC::DisposableCallSiteIndex::DisposableCallSiteIndex): (JSC::CallFrame::callee const): (JSC::CallFrame::unsafeCallee const): (JSC::CallFrame::addressOfCodeBlock const): (JSC::CallFrame::argumentCountIncludingThis const): (JSC::CallFrame::offsetFor): (JSC::CallFrame::setArgumentCountIncludingThis): (JSC::CallFrame::setReturnPC): * interpreter/CallFrameInlines.h: (JSC::CallFrame::r): (JSC::CallFrame::uncheckedR): (JSC::CallFrame::guaranteedJSValueCallee const): (JSC::CallFrame::jsCallee const): (JSC::CallFrame::codeBlock const): (JSC::CallFrame::unsafeCodeBlock const): (JSC::CallFrame::setCallee): (JSC::CallFrame::setCodeBlock): * interpreter/CheckpointOSRExitSideState.h: Copied from Source/JavaScriptCore/dfg/DFGThunks.h. * interpreter/Interpreter.cpp: (JSC::eval): (JSC::sizeOfVarargs): (JSC::loadVarargs): (JSC::setupVarargsFrame): (JSC::UnwindFunctor::operator() const): (JSC::Interpreter::executeCall): (JSC::Interpreter::executeConstruct): * interpreter/Interpreter.h: * interpreter/StackVisitor.cpp: (JSC::StackVisitor::readInlinedFrame): * jit/AssemblyHelpers.h: (JSC::AssemblyHelpers::emitGetFromCallFrameHeaderPtr): (JSC::AssemblyHelpers::emitGetFromCallFrameHeader32): (JSC::AssemblyHelpers::emitGetFromCallFrameHeader64): (JSC::AssemblyHelpers::emitPutToCallFrameHeader): (JSC::AssemblyHelpers::emitPutToCallFrameHeaderBeforePrologue): (JSC::AssemblyHelpers::emitPutPayloadToCallFrameHeaderBeforePrologue): (JSC::AssemblyHelpers::emitPutTagToCallFrameHeaderBeforePrologue): (JSC::AssemblyHelpers::addressFor): (JSC::AssemblyHelpers::tagFor): (JSC::AssemblyHelpers::payloadFor): (JSC::AssemblyHelpers::calleeFrameSlot): (JSC::AssemblyHelpers::calleeArgumentSlot): (JSC::AssemblyHelpers::calleeFrameTagSlot): (JSC::AssemblyHelpers::calleeFramePayloadSlot): (JSC::AssemblyHelpers::calleeFrameCallerFrame): (JSC::AssemblyHelpers::argumentCount): * jit/CallFrameShuffler.cpp: (JSC::CallFrameShuffler::CallFrameShuffler): * jit/CallFrameShuffler.h: (JSC::CallFrameShuffler::setCalleeJSValueRegs): (JSC::CallFrameShuffler::assumeCalleeIsCell): * jit/JIT.h: * jit/JITArithmetic.cpp: (JSC::JIT::emit_op_unsigned): (JSC::JIT::emit_compareAndJump): (JSC::JIT::emit_compareAndJumpImpl): (JSC::JIT::emit_compareUnsignedAndJump): (JSC::JIT::emit_compareUnsignedAndJumpImpl): (JSC::JIT::emit_compareUnsigned): (JSC::JIT::emit_compareUnsignedImpl): (JSC::JIT::emit_compareAndJumpSlow): (JSC::JIT::emit_compareAndJumpSlowImpl): (JSC::JIT::emit_op_inc): (JSC::JIT::emit_op_dec): (JSC::JIT::emit_op_mod): (JSC::JIT::emitBitBinaryOpFastPath): (JSC::JIT::emit_op_bitnot): (JSC::JIT::emitRightShiftFastPath): (JSC::JIT::emitMathICFast): (JSC::JIT::emitMathICSlow): (JSC::JIT::emit_op_div): * jit/JITCall.cpp: (JSC::JIT::emitPutCallResult): (JSC::JIT::compileSetupFrame): (JSC::JIT::compileOpCall): * jit/JITExceptions.cpp: (JSC::genericUnwind): * jit/JITInlines.h: (JSC::JIT::isOperandConstantDouble): (JSC::JIT::getConstantOperand): (JSC::JIT::emitPutIntToCallFrameHeader): (JSC::JIT::appendCallWithExceptionCheckSetJSValueResult): (JSC::JIT::appendCallWithExceptionCheckSetJSValueResultWithProfile): (JSC::JIT::linkSlowCaseIfNotJSCell): (JSC::JIT::isOperandConstantChar): (JSC::JIT::getOperandConstantInt): (JSC::JIT::getOperandConstantDouble): (JSC::JIT::emitInitRegister): (JSC::JIT::emitLoadTag): (JSC::JIT::emitLoadPayload): (JSC::JIT::emitGet): (JSC::JIT::emitPutVirtualRegister): (JSC::JIT::emitLoad): (JSC::JIT::emitLoad2): (JSC::JIT::emitLoadDouble): (JSC::JIT::emitLoadInt32ToDouble): (JSC::JIT::emitStore): (JSC::JIT::emitStoreInt32): (JSC::JIT::emitStoreCell): (JSC::JIT::emitStoreBool): (JSC::JIT::emitStoreDouble): (JSC::JIT::emitJumpSlowCaseIfNotJSCell): (JSC::JIT::isOperandConstantInt): (JSC::JIT::emitGetVirtualRegister): (JSC::JIT::emitGetVirtualRegisters): * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_mov): (JSC::JIT::emit_op_end): (JSC::JIT::emit_op_new_object): (JSC::JIT::emitSlow_op_new_object): (JSC::JIT::emit_op_overrides_has_instance): (JSC::JIT::emit_op_instanceof): (JSC::JIT::emitSlow_op_instanceof): (JSC::JIT::emit_op_is_empty): (JSC::JIT::emit_op_is_undefined): (JSC::JIT::emit_op_is_undefined_or_null): (JSC::JIT::emit_op_is_boolean): (JSC::JIT::emit_op_is_number): (JSC::JIT::emit_op_is_cell_with_type): (JSC::JIT::emit_op_is_object): (JSC::JIT::emit_op_ret): (JSC::JIT::emit_op_to_primitive): (JSC::JIT::emit_op_set_function_name): (JSC::JIT::emit_op_not): (JSC::JIT::emit_op_jfalse): (JSC::JIT::emit_op_jeq_null): (JSC::JIT::emit_op_jneq_null): (JSC::JIT::emit_op_jundefined_or_null): (JSC::JIT::emit_op_jnundefined_or_null): (JSC::JIT::emit_op_jneq_ptr): (JSC::JIT::emit_op_eq): (JSC::JIT::emit_op_jeq): (JSC::JIT::emit_op_jtrue): (JSC::JIT::emit_op_neq): (JSC::JIT::emit_op_jneq): (JSC::JIT::emit_op_throw): (JSC::JIT::compileOpStrictEq): (JSC::JIT::compileOpStrictEqJump): (JSC::JIT::emit_op_to_number): (JSC::JIT::emit_op_to_numeric): (JSC::JIT::emit_op_to_string): (JSC::JIT::emit_op_to_object): (JSC::JIT::emit_op_catch): (JSC::JIT::emit_op_get_parent_scope): (JSC::JIT::emit_op_switch_imm): (JSC::JIT::emit_op_switch_char): (JSC::JIT::emit_op_switch_string): (JSC::JIT::emit_op_eq_null): (JSC::JIT::emit_op_neq_null): (JSC::JIT::emit_op_enter): (JSC::JIT::emit_op_get_scope): (JSC::JIT::emit_op_to_this): (JSC::JIT::emit_op_create_this): (JSC::JIT::emit_op_check_tdz): (JSC::JIT::emitSlow_op_eq): (JSC::JIT::emitSlow_op_neq): (JSC::JIT::emitSlow_op_instanceof_custom): (JSC::JIT::emit_op_new_regexp): (JSC::JIT::emitNewFuncCommon): (JSC::JIT::emitNewFuncExprCommon): (JSC::JIT::emit_op_new_array): (JSC::JIT::emit_op_new_array_with_size): (JSC::JIT::emit_op_has_structure_property): (JSC::JIT::emit_op_has_indexed_property): (JSC::JIT::emitSlow_op_has_indexed_property): (JSC::JIT::emit_op_get_direct_pname): (JSC::JIT::emit_op_enumerator_structure_pname): (JSC::JIT::emit_op_enumerator_generic_pname): (JSC::JIT::emit_op_profile_type): (JSC::JIT::emit_op_log_shadow_chicken_prologue): (JSC::JIT::emit_op_log_shadow_chicken_tail): (JSC::JIT::emit_op_argument_count): (JSC::JIT::emit_op_get_rest_length): (JSC::JIT::emit_op_get_argument): * jit/JITOpcodes32_64.cpp: (JSC::JIT::emit_op_catch): * jit/JITOperations.cpp: * jit/JITPropertyAccess.cpp: (JSC::JIT::emit_op_get_by_val): (JSC::JIT::emitSlow_op_get_by_val): (JSC::JIT::emit_op_put_by_val): (JSC::JIT::emitGenericContiguousPutByVal): (JSC::JIT::emitArrayStoragePutByVal): (JSC::JIT::emitPutByValWithCachedId): (JSC::JIT::emitSlow_op_put_by_val): (JSC::JIT::emit_op_put_getter_by_id): (JSC::JIT::emit_op_put_setter_by_id): (JSC::JIT::emit_op_put_getter_setter_by_id): (JSC::JIT::emit_op_put_getter_by_val): (JSC::JIT::emit_op_put_setter_by_val): (JSC::JIT::emit_op_del_by_id): (JSC::JIT::emit_op_del_by_val): (JSC::JIT::emit_op_try_get_by_id): (JSC::JIT::emitSlow_op_try_get_by_id): (JSC::JIT::emit_op_get_by_id_direct): (JSC::JIT::emitSlow_op_get_by_id_direct): (JSC::JIT::emit_op_get_by_id): (JSC::JIT::emit_op_get_by_id_with_this): (JSC::JIT::emitSlow_op_get_by_id): (JSC::JIT::emitSlow_op_get_by_id_with_this): (JSC::JIT::emit_op_put_by_id): (JSC::JIT::emit_op_in_by_id): (JSC::JIT::emitSlow_op_in_by_id): (JSC::JIT::emitResolveClosure): (JSC::JIT::emit_op_resolve_scope): (JSC::JIT::emitLoadWithStructureCheck): (JSC::JIT::emitGetClosureVar): (JSC::JIT::emit_op_get_from_scope): (JSC::JIT::emitSlow_op_get_from_scope): (JSC::JIT::emitPutGlobalVariable): (JSC::JIT::emitPutGlobalVariableIndirect): (JSC::JIT::emitPutClosureVar): (JSC::JIT::emit_op_put_to_scope): (JSC::JIT::emit_op_get_from_arguments): (JSC::JIT::emit_op_put_to_arguments): (JSC::JIT::emitWriteBarrier): (JSC::JIT::emit_op_get_internal_field): (JSC::JIT::emit_op_put_internal_field): (JSC::JIT::emitIntTypedArrayPutByVal): (JSC::JIT::emitFloatTypedArrayPutByVal): * jit/JSInterfaceJIT.h: (JSC::JSInterfaceJIT::emitLoadJSCell): (JSC::JSInterfaceJIT::emitJumpIfNotJSCell): (JSC::JSInterfaceJIT::emitLoadInt32): (JSC::JSInterfaceJIT::emitLoadDouble): (JSC::JSInterfaceJIT::emitGetFromCallFrameHeaderPtr): (JSC::JSInterfaceJIT::emitPutToCallFrameHeader): (JSC::JSInterfaceJIT::emitPutCellToCallFrameHeader): * jit/SetupVarargsFrame.cpp: (JSC::emitSetupVarargsFrameFastCase): * jit/SpecializedThunkJIT.h: (JSC::SpecializedThunkJIT::loadDoubleArgument): (JSC::SpecializedThunkJIT::loadCellArgument): (JSC::SpecializedThunkJIT::loadInt32Argument): * jit/ThunkGenerators.cpp: (JSC::absThunkGenerator): * llint/LLIntSlowPaths.cpp: (JSC::LLInt::getNonConstantOperand): (JSC::LLInt::getOperand): (JSC::LLInt::genericCall): (JSC::LLInt::varargsSetup): (JSC::LLInt::commonCallEval): (JSC::LLInt::LLINT_SLOW_PATH_DECL): (JSC::LLInt::handleVarargsCheckpoint): (JSC::LLInt::dispatchToNextInstruction): (JSC::LLInt::slow_path_checkpoint_osr_exit_from_inlined_call): (JSC::LLInt::slow_path_checkpoint_osr_exit): (JSC::LLInt::llint_throw_stack_overflow_error): * llint/LLIntSlowPaths.h: * llint/LowLevelInterpreter.asm: * llint/LowLevelInterpreter32_64.asm: * llint/LowLevelInterpreter64.asm: * runtime/ArgList.h: (JSC::MarkedArgumentBuffer::fill): * runtime/CachedTypes.cpp: (JSC::CachedCodeBlock::hasCheckpoints const): (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock): (JSC::CachedCodeBlock<CodeBlockType>::encode): * runtime/CommonSlowPaths.cpp: (JSC::SLOW_PATH_DECL): * runtime/ConstructData.cpp: (JSC::construct): * runtime/ConstructData.h: * runtime/DirectArguments.cpp: (JSC::DirectArguments::copyToArguments): * runtime/DirectArguments.h: * runtime/GenericArguments.h: * runtime/GenericArgumentsInlines.h: (JSC::GenericArguments<Type>::copyToArguments): * runtime/JSArray.cpp: (JSC::JSArray::copyToArguments): * runtime/JSArray.h: * runtime/JSImmutableButterfly.cpp: (JSC::JSImmutableButterfly::copyToArguments): * runtime/JSImmutableButterfly.h: * runtime/JSLock.cpp: (JSC::JSLock::willReleaseLock): * runtime/ModuleProgramExecutable.cpp: (JSC::ModuleProgramExecutable::create): * runtime/Options.cpp: (JSC::recomputeDependentOptions): * runtime/ScopedArguments.cpp: (JSC::ScopedArguments::copyToArguments): * runtime/ScopedArguments.h: * runtime/VM.cpp: (JSC::VM::scanSideState const): (JSC::VM::addCheckpointOSRSideState): (JSC::VM::findCheckpointOSRSideState): * runtime/VM.h: (JSC::VM::hasCheckpointOSRSideState const): * tools/VMInspector.cpp: (JSC::VMInspector::dumpRegisters): * wasm/WasmFunctionCodeBlock.h: (JSC::Wasm::FunctionCodeBlock::getConstant const): (JSC::Wasm::FunctionCodeBlock::getConstantType const): * wasm/WasmLLIntGenerator.cpp: (JSC::Wasm::LLIntGenerator::setUsesCheckpoints const): * wasm/WasmOperations.cpp: (JSC::Wasm::operationWasmToJSException): * wasm/WasmSlowPaths.cpp: Source/WTF: * WTF.xcodeproj/project.pbxproj: * wtf/Bitmap.h: (WTF::WordType>::invert): (WTF::WordType>::operator): (WTF::WordType>::operator const const): * wtf/CMakeLists.txt: * wtf/EnumClassOperatorOverloads.h: Added. * wtf/FastBitVector.h: (WTF::FastBitReference::operator bool const): (WTF::FastBitReference::operator|=): (WTF::FastBitReference::operator&=): (WTF::FastBitVector::fill): (WTF::FastBitVector::grow): * wtf/UnalignedAccess.h: (WTF::unalignedLoad): (WTF::unalignedStore): Tools: * Scripts/run-jsc-stress-tests: Canonical link: https://commits.webkit.org/219481@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@254735 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-01-17 04:09:32 +00:00
CCallHelpers::tagFor(VirtualRegister(CallFrameSlot::argumentCountIncludingThis)));
FTL should generate code to call slow paths lazily https://bugs.webkit.org/show_bug.cgi?id=149936 Reviewed by Saam Barati. Source/JavaScriptCore: We often have complex slow paths in FTL-generated code. Those slow paths may never run. Even if they do run, they don't need stellar performance. So, it doesn't make sense to have LLVM worry about compiling such slow path code. This patch enables us to use our own MacroAssembler for compiling the slow path inside FTL code. It does this by using a crazy lambda thingy (see FTLLowerDFGToLLVM.cpp's lazySlowPath() and its documentation). The result is quite natural to use. Even for straight slow path calls via something like vmCall(), the lazySlowPath offers the benefit that the call marshalling and the exception checking are not expressed using LLVM IR and do not require LLVM to think about it. It also has the benefit that we never generate the code if it never runs. That's great, since function calls usually involve ~10 instructions total (move arguments to argument registers, make the call, check exception, etc.). This patch adds the lazy slow path abstraction and uses it for some slow paths in the FTL. The code we generate with lazy slow paths is worse than the code that LLVM would have generated. Therefore, a lazy slow path only makes sense when we have strong evidence that the slow path will execute infrequently relative to the fast path. This completely precludes the use of lazy slow paths for out-of-line Nodes that unconditionally call a C++ function. It also precludes their use for the GetByVal out-of-bounds handler, since when we generate a GetByVal with an out-of-bounds handler it means that we only know that the out-of-bounds case executed at least once. So, for all we know, it may actually be the common case. So, this patch just deployed the lazy slow path for GC slow paths and masquerades-as-undefined slow paths. It makes sense for GC slow paths because those have a statistical guarantee of slow path frequency - probably bounded at less than 1/10. It makes sense for masquerades-as- undefined because we can say quite confidently that this is an uncommon scenario on the modern Web. Something that's always been challenging about abstractions involving the MacroAssembler is that linking is a separate phase, and there is no way for someone who is just given access to the MacroAssembler& to emit code that requires linking, since linking happens once we have emitted all code and we are creating the LinkBuffer. Moreover, the FTL requires that the final parts of linking happen on the main thread. This patch ran into this issue, and solved it comprehensively, by introducing MacroAssembler::addLinkTask(). This takes a lambda and runs it at the bitter end of linking - when performFinalization() is called. This ensure that the task added by addLinkTask() runs on the main thread. This patch doesn't replace all of the previously existing idioms for dealing with this issue; we can do that later. This shows small speed-ups on a bunch of things. No big win on any benchmark aggregate. But mainly this is done for https://bugs.webkit.org/show_bug.cgi?id=149852, where we found that outlining the slow path in this way was a significant speed boost. * CMakeLists.txt: * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: * JavaScriptCore.xcodeproj/project.pbxproj: * assembler/AbstractMacroAssembler.h: (JSC::AbstractMacroAssembler::replaceWithAddressComputation): (JSC::AbstractMacroAssembler::addLinkTask): (JSC::AbstractMacroAssembler::AbstractMacroAssembler): * assembler/LinkBuffer.cpp: (JSC::LinkBuffer::linkCode): (JSC::LinkBuffer::allocate): (JSC::LinkBuffer::performFinalization): * assembler/LinkBuffer.h: (JSC::LinkBuffer::wasAlreadyDisassembled): (JSC::LinkBuffer::didAlreadyDisassemble): (JSC::LinkBuffer::vm): (JSC::LinkBuffer::executableOffsetFor): * bytecode/CodeOrigin.h: (JSC::CodeOrigin::CodeOrigin): (JSC::CodeOrigin::isSet): (JSC::CodeOrigin::operator bool): (JSC::CodeOrigin::isHashTableDeletedValue): (JSC::CodeOrigin::operator!): Deleted. * ftl/FTLCompile.cpp: (JSC::FTL::mmAllocateDataSection): * ftl/FTLInlineCacheDescriptor.h: (JSC::FTL::InlineCacheDescriptor::InlineCacheDescriptor): (JSC::FTL::CheckInDescriptor::CheckInDescriptor): (JSC::FTL::LazySlowPathDescriptor::LazySlowPathDescriptor): * ftl/FTLJITCode.h: * ftl/FTLJITFinalizer.cpp: (JSC::FTL::JITFinalizer::finalizeFunction): * ftl/FTLJITFinalizer.h: * ftl/FTLLazySlowPath.cpp: Added. (JSC::FTL::LazySlowPath::LazySlowPath): (JSC::FTL::LazySlowPath::~LazySlowPath): (JSC::FTL::LazySlowPath::generate): * ftl/FTLLazySlowPath.h: Added. (JSC::FTL::LazySlowPath::createGenerator): (JSC::FTL::LazySlowPath::patchpoint): (JSC::FTL::LazySlowPath::usedRegisters): (JSC::FTL::LazySlowPath::callSiteIndex): (JSC::FTL::LazySlowPath::stub): * ftl/FTLLazySlowPathCall.h: Added. (JSC::FTL::createLazyCallGenerator): * ftl/FTLLowerDFGToLLVM.cpp: (JSC::FTL::DFG::LowerDFGToLLVM::compileCreateActivation): (JSC::FTL::DFG::LowerDFGToLLVM::compileNewFunction): (JSC::FTL::DFG::LowerDFGToLLVM::compileCreateDirectArguments): (JSC::FTL::DFG::LowerDFGToLLVM::compileNewArrayWithSize): (JSC::FTL::DFG::LowerDFGToLLVM::compileMakeRope): (JSC::FTL::DFG::LowerDFGToLLVM::compileNotifyWrite): (JSC::FTL::DFG::LowerDFGToLLVM::compileIsObjectOrNull): (JSC::FTL::DFG::LowerDFGToLLVM::compileIsFunction): (JSC::FTL::DFG::LowerDFGToLLVM::compileIn): (JSC::FTL::DFG::LowerDFGToLLVM::compileMaterializeNewObject): (JSC::FTL::DFG::LowerDFGToLLVM::compileMaterializeCreateActivation): (JSC::FTL::DFG::LowerDFGToLLVM::compileCheckWatchdogTimer): (JSC::FTL::DFG::LowerDFGToLLVM::allocatePropertyStorageWithSizeImpl): (JSC::FTL::DFG::LowerDFGToLLVM::allocateObject): (JSC::FTL::DFG::LowerDFGToLLVM::allocateJSArray): (JSC::FTL::DFG::LowerDFGToLLVM::buildTypeOf): (JSC::FTL::DFG::LowerDFGToLLVM::sensibleDoubleToInt32): (JSC::FTL::DFG::LowerDFGToLLVM::lazySlowPath): (JSC::FTL::DFG::LowerDFGToLLVM::speculate): (JSC::FTL::DFG::LowerDFGToLLVM::emitStoreBarrier): * ftl/FTLOperations.cpp: (JSC::FTL::operationMaterializeObjectInOSR): (JSC::FTL::compileFTLLazySlowPath): * ftl/FTLOperations.h: * ftl/FTLSlowPathCall.cpp: (JSC::FTL::SlowPathCallContext::SlowPathCallContext): (JSC::FTL::SlowPathCallContext::~SlowPathCallContext): (JSC::FTL::SlowPathCallContext::keyWithTarget): (JSC::FTL::SlowPathCallContext::makeCall): (JSC::FTL::callSiteIndexForCodeOrigin): (JSC::FTL::storeCodeOrigin): Deleted. (JSC::FTL::callOperation): Deleted. * ftl/FTLSlowPathCall.h: (JSC::FTL::callOperation): * ftl/FTLState.h: * ftl/FTLThunks.cpp: (JSC::FTL::genericGenerationThunkGenerator): (JSC::FTL::osrExitGenerationThunkGenerator): (JSC::FTL::lazySlowPathGenerationThunkGenerator): (JSC::FTL::registerClobberCheck): * ftl/FTLThunks.h: * interpreter/CallFrame.h: (JSC::CallSiteIndex::CallSiteIndex): (JSC::CallSiteIndex::operator bool): (JSC::CallSiteIndex::bits): * jit/CCallHelpers.h: (JSC::CCallHelpers::setupArgument): (JSC::CCallHelpers::setupArgumentsWithExecState): * jit/JITOperations.cpp: Source/WTF: Enables SharedTask to handle any function type, not just void(). It's probably better to use SharedTask instead of std::function in performance-sensitive code. std::function uses the system malloc and has copy semantics. SharedTask uses FastMalloc and has aliasing semantics. So, you can just trust that it will have sensible performance characteristics. * wtf/ParallelHelperPool.cpp: (WTF::ParallelHelperClient::~ParallelHelperClient): (WTF::ParallelHelperClient::setTask): (WTF::ParallelHelperClient::doSomeHelping): (WTF::ParallelHelperClient::runTaskInParallel): (WTF::ParallelHelperClient::finish): (WTF::ParallelHelperClient::claimTask): (WTF::ParallelHelperClient::runTask): (WTF::ParallelHelperPool::doSomeHelping): (WTF::ParallelHelperPool::helperThreadBody): * wtf/ParallelHelperPool.h: (WTF::ParallelHelperClient::setFunction): (WTF::ParallelHelperClient::runFunctionInParallel): (WTF::ParallelHelperClient::pool): * wtf/SharedTask.h: (WTF::createSharedTask): (WTF::SharedTask::SharedTask): Deleted. (WTF::SharedTask::~SharedTask): Deleted. (WTF::SharedTaskFunctor::SharedTaskFunctor): Deleted. Canonical link: https://commits.webkit.org/168154@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@190860 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-10-12 17:56:26 +00:00
}
AssemblyHelpers should not have a VM field https://bugs.webkit.org/show_bug.cgi?id=170207 Reviewed by Yusuke Suzuki. APIs that need VM should take one as a parameter. When doing position independent code for Wasm, we can't tie code generation to a VM. * b3/B3Compile.cpp: (JSC::B3::compile): * b3/air/testair.cpp: * b3/testb3.cpp: (JSC::B3::testEntrySwitchSimple): (JSC::B3::testEntrySwitchNoEntrySwitch): (JSC::B3::testEntrySwitchWithCommonPaths): (JSC::B3::testEntrySwitchWithCommonPathsAndNonTrivialEntrypoint): (JSC::B3::testEntrySwitchLoop): * bytecode/AccessCase.cpp: (JSC::AccessCase::generateWithGuard): (JSC::AccessCase::generateImpl): * bytecode/DOMJITAccessCasePatchpointParams.cpp: (JSC::SlowPathCallGeneratorWithArguments::generateImpl): * bytecode/InlineAccess.cpp: (JSC::InlineAccess::dumpCacheSizesAndCrash): (JSC::InlineAccess::generateSelfPropertyAccess): (JSC::InlineAccess::generateSelfPropertyReplace): (JSC::InlineAccess::generateArrayLength): (JSC::InlineAccess::rewireStubAsJump): * bytecode/InlineAccess.h: * bytecode/PolymorphicAccess.cpp: (JSC::AccessGenerationState::emitExplicitExceptionHandler): (JSC::PolymorphicAccess::regenerate): * bytecode/PolymorphicAccess.h: (JSC::AccessGenerationState::AccessGenerationState): * dfg/DFGJITCompiler.cpp: (JSC::DFG::JITCompiler::JITCompiler): (JSC::DFG::JITCompiler::compileExceptionHandlers): (JSC::DFG::JITCompiler::link): (JSC::DFG::JITCompiler::compile): (JSC::DFG::JITCompiler::compileFunction): (JSC::DFG::JITCompiler::exceptionCheck): * dfg/DFGJITCompiler.h: (JSC::DFG::JITCompiler::exceptionCheckWithCallFrameRollback): (JSC::DFG::JITCompiler::fastExceptionCheck): (JSC::DFG::JITCompiler::vm): * dfg/DFGOSRExitCompiler.cpp: * dfg/DFGOSRExitCompiler.h: * dfg/DFGOSRExitCompiler32_64.cpp: (JSC::DFG::OSRExitCompiler::compileExit): * dfg/DFGOSRExitCompiler64.cpp: (JSC::DFG::OSRExitCompiler::compileExit): * dfg/DFGOSRExitCompilerCommon.cpp: (JSC::DFG::adjustAndJumpToTarget): * dfg/DFGOSRExitCompilerCommon.h: * dfg/DFGSpeculativeJIT.cpp: (JSC::DFG::SpeculativeJIT::emitAllocateRawObject): (JSC::DFG::SpeculativeJIT::checkArray): (JSC::DFG::SpeculativeJIT::compileCurrentBlock): (JSC::DFG::SpeculativeJIT::compileInstanceOfForObject): (JSC::DFG::SpeculativeJIT::compileMakeRope): (JSC::DFG::SpeculativeJIT::compileGetGlobalObject): (JSC::DFG::SpeculativeJIT::compileNewFunctionCommon): (JSC::DFG::SpeculativeJIT::compileCreateActivation): (JSC::DFG::SpeculativeJIT::compileCreateDirectArguments): (JSC::DFG::SpeculativeJIT::compileSpread): (JSC::DFG::SpeculativeJIT::compileArraySlice): (JSC::DFG::SpeculativeJIT::compileNukeStructureAndSetButterfly): (JSC::DFG::SpeculativeJIT::compileNewStringObject): (JSC::DFG::SpeculativeJIT::compileNewTypedArray): (JSC::DFG::SpeculativeJIT::compileStoreBarrier): * dfg/DFGSpeculativeJIT.h: (JSC::DFG::SpeculativeJIT::emitAllocateJSObjectWithKnownSize): (JSC::DFG::SpeculativeJIT::emitAllocateJSObject): (JSC::DFG::SpeculativeJIT::emitAllocateVariableSizedJSObject): (JSC::DFG::SpeculativeJIT::emitAllocateDestructibleObject): * dfg/DFGSpeculativeJIT32_64.cpp: (JSC::DFG::SpeculativeJIT::emitCall): (JSC::DFG::SpeculativeJIT::compileLogicalNot): (JSC::DFG::SpeculativeJIT::emitBranch): (JSC::DFG::SpeculativeJIT::compile): * dfg/DFGSpeculativeJIT64.cpp: (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNullOrUndefined): (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNullOrUndefined): (JSC::DFG::SpeculativeJIT::emitCall): (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot): (JSC::DFG::SpeculativeJIT::compileLogicalNot): (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch): (JSC::DFG::SpeculativeJIT::emitBranch): (JSC::DFG::SpeculativeJIT::compile): (JSC::DFG::SpeculativeJIT::compileAllocateNewArrayWithSize): * dfg/DFGThunks.cpp: (JSC::DFG::osrEntryThunkGenerator): * ftl/FTLCompile.cpp: (JSC::FTL::compile): * ftl/FTLJITFinalizer.h: * ftl/FTLLazySlowPath.cpp: (JSC::FTL::LazySlowPath::generate): * ftl/FTLLazySlowPathCall.h: (JSC::FTL::createLazyCallGenerator): * ftl/FTLLink.cpp: (JSC::FTL::link): * ftl/FTLLowerDFGToB3.cpp: (JSC::FTL::DFG::LowerDFGToB3::lower): (JSC::FTL::DFG::LowerDFGToB3::compileCreateActivation): (JSC::FTL::DFG::LowerDFGToB3::compileNewFunction): (JSC::FTL::DFG::LowerDFGToB3::compileCreateDirectArguments): (JSC::FTL::DFG::LowerDFGToB3::compileNewTypedArray): (JSC::FTL::DFG::LowerDFGToB3::compileMakeRope): (JSC::FTL::DFG::LowerDFGToB3::compileNotifyWrite): (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargsSpread): (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargs): (JSC::FTL::DFG::LowerDFGToB3::compileCallEval): (JSC::FTL::DFG::LowerDFGToB3::compileIsObjectOrNull): (JSC::FTL::DFG::LowerDFGToB3::compileIsFunction): (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeNewObject): (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeCreateActivation): (JSC::FTL::DFG::LowerDFGToB3::compileCheckTraps): (JSC::FTL::DFG::LowerDFGToB3::allocatePropertyStorageWithSizeImpl): (JSC::FTL::DFG::LowerDFGToB3::allocateObject): (JSC::FTL::DFG::LowerDFGToB3::allocateJSArray): (JSC::FTL::DFG::LowerDFGToB3::buildTypeOf): * ftl/FTLOSRExitCompiler.cpp: (JSC::FTL::compileStub): * ftl/FTLSlowPathCall.h: (JSC::FTL::callOperation): * ftl/FTLState.h: (JSC::FTL::State::vm): * ftl/FTLThunks.cpp: (JSC::FTL::genericGenerationThunkGenerator): (JSC::FTL::slowPathCallThunkGenerator): * jit/AssemblyHelpers.cpp: (JSC::AssemblyHelpers::jitReleaseAssertNoException): (JSC::AssemblyHelpers::callExceptionFuzz): (JSC::AssemblyHelpers::emitJumpIfException): (JSC::AssemblyHelpers::emitExceptionCheck): (JSC::AssemblyHelpers::emitNonPatchableExceptionCheck): (JSC::AssemblyHelpers::emitLoadStructure): (JSC::AssemblyHelpers::emitRandomThunk): (JSC::AssemblyHelpers::restoreCalleeSavesFromVMEntryFrameCalleeSavesBuffer): (JSC::AssemblyHelpers::emitConvertValueToBoolean): (JSC::AssemblyHelpers::debugCall): * jit/AssemblyHelpers.h: (JSC::AssemblyHelpers::AssemblyHelpers): (JSC::AssemblyHelpers::codeBlock): (JSC::AssemblyHelpers::copyCalleeSavesToVMEntryFrameCalleeSavesBuffer): (JSC::AssemblyHelpers::copyCalleeSavesFromFrameOrRegisterToVMEntryFrameCalleeSavesBuffer): (JSC::AssemblyHelpers::barrierBranch): (JSC::AssemblyHelpers::barrierStoreLoadFence): (JSC::AssemblyHelpers::mutatorFence): (JSC::AssemblyHelpers::storeButterfly): (JSC::AssemblyHelpers::nukeStructureAndStoreButterfly): (JSC::AssemblyHelpers::jumpIfMutatorFenceNotNeeded): (JSC::AssemblyHelpers::emitAllocateJSObjectWithKnownSize): (JSC::AssemblyHelpers::emitAllocateJSObject): (JSC::AssemblyHelpers::emitAllocateVariableSizedCell): (JSC::AssemblyHelpers::emitAllocateVariableSizedJSObject): (JSC::AssemblyHelpers::emitAllocateDestructibleObject): (JSC::AssemblyHelpers::vm): Deleted. (JSC::AssemblyHelpers::debugCall): Deleted. * jit/CCallHelpers.cpp: (JSC::CCallHelpers::ensureShadowChickenPacket): * jit/CCallHelpers.h: (JSC::CCallHelpers::CCallHelpers): (JSC::CCallHelpers::jumpToExceptionHandler): * jit/JIT.cpp: (JSC::JIT::emitEnterOptimizationCheck): (JSC::JIT::privateCompileExceptionHandlers): * jit/JIT.h: (JSC::JIT::exceptionCheck): (JSC::JIT::exceptionCheckWithCallFrameRollback): * jit/JITMathIC.h: (JSC::JITMathIC::generateOutOfLine): * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_instanceof): (JSC::JIT::emit_op_is_undefined): (JSC::JIT::emit_op_jfalse): (JSC::JIT::emit_op_jeq_null): (JSC::JIT::emit_op_jneq_null): (JSC::JIT::emit_op_jtrue): (JSC::JIT::emit_op_throw): (JSC::JIT::emit_op_catch): (JSC::JIT::emit_op_eq_null): (JSC::JIT::emit_op_neq_null): (JSC::JIT::emitSlow_op_loop_hint): (JSC::JIT::emit_op_log_shadow_chicken_prologue): (JSC::JIT::emit_op_log_shadow_chicken_tail): * jit/JITOpcodes32_64.cpp: (JSC::JIT::privateCompileCTINativeCall): (JSC::JIT::emit_op_new_object): (JSC::JIT::emit_op_jfalse): (JSC::JIT::emit_op_jtrue): (JSC::JIT::emit_op_throw): (JSC::JIT::emit_op_catch): (JSC::JIT::emit_op_create_this): (JSC::JIT::emit_op_log_shadow_chicken_prologue): (JSC::JIT::emit_op_log_shadow_chicken_tail): * jit/JITPropertyAccess.cpp: (JSC::JIT::emitWriteBarrier): * jit/JSInterfaceJIT.h: (JSC::JSInterfaceJIT::JSInterfaceJIT): (JSC::JSInterfaceJIT::vm): * jit/Repatch.cpp: (JSC::tryCacheGetByID): (JSC::tryCachePutByID): (JSC::linkPolymorphicCall): (JSC::resetGetByID): (JSC::resetPutByID): * jit/SetupVarargsFrame.cpp: (JSC::emitSetupVarargsFrameFastCase): * jit/SetupVarargsFrame.h: * jit/SpecializedThunkJIT.h: (JSC::SpecializedThunkJIT::loadArgumentWithSpecificClass): * jit/ThunkGenerators.cpp: (JSC::throwExceptionFromCallSlowPathGenerator): (JSC::linkCallThunkGenerator): (JSC::linkPolymorphicCallThunkGenerator): (JSC::virtualThunkFor): (JSC::nativeForGenerator): (JSC::randomThunkGenerator): (JSC::boundThisNoArgsFunctionCallGenerator): (JSC::throwExceptionFromWasmThunkGenerator): * wasm/WasmB3IRGenerator.cpp: (JSC::Wasm::parseAndCompile): * wasm/WasmBinding.cpp: (JSC::Wasm::wasmToJs): (JSC::Wasm::wasmToWasm): Canonical link: https://commits.webkit.org/187145@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@214531 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-03-29 06:15:23 +00:00
return callOperation(vm, usedRegisters, jit, exceptionTarget, function, resultGPR, arguments...);
FTL should generate code to call slow paths lazily https://bugs.webkit.org/show_bug.cgi?id=149936 Reviewed by Saam Barati. Source/JavaScriptCore: We often have complex slow paths in FTL-generated code. Those slow paths may never run. Even if they do run, they don't need stellar performance. So, it doesn't make sense to have LLVM worry about compiling such slow path code. This patch enables us to use our own MacroAssembler for compiling the slow path inside FTL code. It does this by using a crazy lambda thingy (see FTLLowerDFGToLLVM.cpp's lazySlowPath() and its documentation). The result is quite natural to use. Even for straight slow path calls via something like vmCall(), the lazySlowPath offers the benefit that the call marshalling and the exception checking are not expressed using LLVM IR and do not require LLVM to think about it. It also has the benefit that we never generate the code if it never runs. That's great, since function calls usually involve ~10 instructions total (move arguments to argument registers, make the call, check exception, etc.). This patch adds the lazy slow path abstraction and uses it for some slow paths in the FTL. The code we generate with lazy slow paths is worse than the code that LLVM would have generated. Therefore, a lazy slow path only makes sense when we have strong evidence that the slow path will execute infrequently relative to the fast path. This completely precludes the use of lazy slow paths for out-of-line Nodes that unconditionally call a C++ function. It also precludes their use for the GetByVal out-of-bounds handler, since when we generate a GetByVal with an out-of-bounds handler it means that we only know that the out-of-bounds case executed at least once. So, for all we know, it may actually be the common case. So, this patch just deployed the lazy slow path for GC slow paths and masquerades-as-undefined slow paths. It makes sense for GC slow paths because those have a statistical guarantee of slow path frequency - probably bounded at less than 1/10. It makes sense for masquerades-as- undefined because we can say quite confidently that this is an uncommon scenario on the modern Web. Something that's always been challenging about abstractions involving the MacroAssembler is that linking is a separate phase, and there is no way for someone who is just given access to the MacroAssembler& to emit code that requires linking, since linking happens once we have emitted all code and we are creating the LinkBuffer. Moreover, the FTL requires that the final parts of linking happen on the main thread. This patch ran into this issue, and solved it comprehensively, by introducing MacroAssembler::addLinkTask(). This takes a lambda and runs it at the bitter end of linking - when performFinalization() is called. This ensure that the task added by addLinkTask() runs on the main thread. This patch doesn't replace all of the previously existing idioms for dealing with this issue; we can do that later. This shows small speed-ups on a bunch of things. No big win on any benchmark aggregate. But mainly this is done for https://bugs.webkit.org/show_bug.cgi?id=149852, where we found that outlining the slow path in this way was a significant speed boost. * CMakeLists.txt: * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: * JavaScriptCore.xcodeproj/project.pbxproj: * assembler/AbstractMacroAssembler.h: (JSC::AbstractMacroAssembler::replaceWithAddressComputation): (JSC::AbstractMacroAssembler::addLinkTask): (JSC::AbstractMacroAssembler::AbstractMacroAssembler): * assembler/LinkBuffer.cpp: (JSC::LinkBuffer::linkCode): (JSC::LinkBuffer::allocate): (JSC::LinkBuffer::performFinalization): * assembler/LinkBuffer.h: (JSC::LinkBuffer::wasAlreadyDisassembled): (JSC::LinkBuffer::didAlreadyDisassemble): (JSC::LinkBuffer::vm): (JSC::LinkBuffer::executableOffsetFor): * bytecode/CodeOrigin.h: (JSC::CodeOrigin::CodeOrigin): (JSC::CodeOrigin::isSet): (JSC::CodeOrigin::operator bool): (JSC::CodeOrigin::isHashTableDeletedValue): (JSC::CodeOrigin::operator!): Deleted. * ftl/FTLCompile.cpp: (JSC::FTL::mmAllocateDataSection): * ftl/FTLInlineCacheDescriptor.h: (JSC::FTL::InlineCacheDescriptor::InlineCacheDescriptor): (JSC::FTL::CheckInDescriptor::CheckInDescriptor): (JSC::FTL::LazySlowPathDescriptor::LazySlowPathDescriptor): * ftl/FTLJITCode.h: * ftl/FTLJITFinalizer.cpp: (JSC::FTL::JITFinalizer::finalizeFunction): * ftl/FTLJITFinalizer.h: * ftl/FTLLazySlowPath.cpp: Added. (JSC::FTL::LazySlowPath::LazySlowPath): (JSC::FTL::LazySlowPath::~LazySlowPath): (JSC::FTL::LazySlowPath::generate): * ftl/FTLLazySlowPath.h: Added. (JSC::FTL::LazySlowPath::createGenerator): (JSC::FTL::LazySlowPath::patchpoint): (JSC::FTL::LazySlowPath::usedRegisters): (JSC::FTL::LazySlowPath::callSiteIndex): (JSC::FTL::LazySlowPath::stub): * ftl/FTLLazySlowPathCall.h: Added. (JSC::FTL::createLazyCallGenerator): * ftl/FTLLowerDFGToLLVM.cpp: (JSC::FTL::DFG::LowerDFGToLLVM::compileCreateActivation): (JSC::FTL::DFG::LowerDFGToLLVM::compileNewFunction): (JSC::FTL::DFG::LowerDFGToLLVM::compileCreateDirectArguments): (JSC::FTL::DFG::LowerDFGToLLVM::compileNewArrayWithSize): (JSC::FTL::DFG::LowerDFGToLLVM::compileMakeRope): (JSC::FTL::DFG::LowerDFGToLLVM::compileNotifyWrite): (JSC::FTL::DFG::LowerDFGToLLVM::compileIsObjectOrNull): (JSC::FTL::DFG::LowerDFGToLLVM::compileIsFunction): (JSC::FTL::DFG::LowerDFGToLLVM::compileIn): (JSC::FTL::DFG::LowerDFGToLLVM::compileMaterializeNewObject): (JSC::FTL::DFG::LowerDFGToLLVM::compileMaterializeCreateActivation): (JSC::FTL::DFG::LowerDFGToLLVM::compileCheckWatchdogTimer): (JSC::FTL::DFG::LowerDFGToLLVM::allocatePropertyStorageWithSizeImpl): (JSC::FTL::DFG::LowerDFGToLLVM::allocateObject): (JSC::FTL::DFG::LowerDFGToLLVM::allocateJSArray): (JSC::FTL::DFG::LowerDFGToLLVM::buildTypeOf): (JSC::FTL::DFG::LowerDFGToLLVM::sensibleDoubleToInt32): (JSC::FTL::DFG::LowerDFGToLLVM::lazySlowPath): (JSC::FTL::DFG::LowerDFGToLLVM::speculate): (JSC::FTL::DFG::LowerDFGToLLVM::emitStoreBarrier): * ftl/FTLOperations.cpp: (JSC::FTL::operationMaterializeObjectInOSR): (JSC::FTL::compileFTLLazySlowPath): * ftl/FTLOperations.h: * ftl/FTLSlowPathCall.cpp: (JSC::FTL::SlowPathCallContext::SlowPathCallContext): (JSC::FTL::SlowPathCallContext::~SlowPathCallContext): (JSC::FTL::SlowPathCallContext::keyWithTarget): (JSC::FTL::SlowPathCallContext::makeCall): (JSC::FTL::callSiteIndexForCodeOrigin): (JSC::FTL::storeCodeOrigin): Deleted. (JSC::FTL::callOperation): Deleted. * ftl/FTLSlowPathCall.h: (JSC::FTL::callOperation): * ftl/FTLState.h: * ftl/FTLThunks.cpp: (JSC::FTL::genericGenerationThunkGenerator): (JSC::FTL::osrExitGenerationThunkGenerator): (JSC::FTL::lazySlowPathGenerationThunkGenerator): (JSC::FTL::registerClobberCheck): * ftl/FTLThunks.h: * interpreter/CallFrame.h: (JSC::CallSiteIndex::CallSiteIndex): (JSC::CallSiteIndex::operator bool): (JSC::CallSiteIndex::bits): * jit/CCallHelpers.h: (JSC::CCallHelpers::setupArgument): (JSC::CCallHelpers::setupArgumentsWithExecState): * jit/JITOperations.cpp: Source/WTF: Enables SharedTask to handle any function type, not just void(). It's probably better to use SharedTask instead of std::function in performance-sensitive code. std::function uses the system malloc and has copy semantics. SharedTask uses FastMalloc and has aliasing semantics. So, you can just trust that it will have sensible performance characteristics. * wtf/ParallelHelperPool.cpp: (WTF::ParallelHelperClient::~ParallelHelperClient): (WTF::ParallelHelperClient::setTask): (WTF::ParallelHelperClient::doSomeHelping): (WTF::ParallelHelperClient::runTaskInParallel): (WTF::ParallelHelperClient::finish): (WTF::ParallelHelperClient::claimTask): (WTF::ParallelHelperClient::runTask): (WTF::ParallelHelperPool::doSomeHelping): (WTF::ParallelHelperPool::helperThreadBody): * wtf/ParallelHelperPool.h: (WTF::ParallelHelperClient::setFunction): (WTF::ParallelHelperClient::runFunctionInParallel): (WTF::ParallelHelperClient::pool): * wtf/SharedTask.h: (WTF::createSharedTask): (WTF::SharedTask::SharedTask): Deleted. (WTF::SharedTask::~SharedTask): Deleted. (WTF::SharedTaskFunctor::SharedTaskFunctor): Deleted. Canonical link: https://commits.webkit.org/168154@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@190860 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-10-12 17:56:26 +00:00
}
CallSiteIndex callSiteIndexForCodeOrigin(State&, CodeOrigin);
template<typename... ArgumentTypes>
SlowPathCall callOperation(
State& state, const RegisterSet& usedRegisters, CCallHelpers& jit, CodeOrigin codeOrigin,
Templatize CodePtr/Refs/FunctionPtrs with PtrTags. https://bugs.webkit.org/show_bug.cgi?id=184702 <rdar://problem/35391681> Reviewed by Filip Pizlo and Saam Barati. Source/JavaScriptCore: 1. Templatized MacroAssemblerCodePtr/Ref, FunctionPtr, and CodeLocation variants to take a PtrTag template argument. 2. Replaced some uses of raw pointers with the equivalent CodePtr / FunctionPtr. * assembler/AbstractMacroAssembler.h: (JSC::AbstractMacroAssembler::differenceBetweenCodePtr): (JSC::AbstractMacroAssembler::linkJump): (JSC::AbstractMacroAssembler::linkPointer): (JSC::AbstractMacroAssembler::getLinkerAddress): (JSC::AbstractMacroAssembler::repatchJump): (JSC::AbstractMacroAssembler::repatchJumpToNop): (JSC::AbstractMacroAssembler::repatchNearCall): (JSC::AbstractMacroAssembler::repatchCompact): (JSC::AbstractMacroAssembler::repatchInt32): (JSC::AbstractMacroAssembler::repatchPointer): (JSC::AbstractMacroAssembler::readPointer): (JSC::AbstractMacroAssembler::replaceWithLoad): (JSC::AbstractMacroAssembler::replaceWithAddressComputation): * assembler/CodeLocation.h: (JSC::CodeLocationCommon:: const): (JSC::CodeLocationCommon::CodeLocationCommon): (JSC::CodeLocationInstruction::CodeLocationInstruction): (JSC::CodeLocationLabel::CodeLocationLabel): (JSC::CodeLocationLabel::retagged): (JSC::CodeLocationLabel:: const): (JSC::CodeLocationJump::CodeLocationJump): (JSC::CodeLocationJump::retagged): (JSC::CodeLocationCall::CodeLocationCall): (JSC::CodeLocationCall::retagged): (JSC::CodeLocationNearCall::CodeLocationNearCall): (JSC::CodeLocationDataLabel32::CodeLocationDataLabel32): (JSC::CodeLocationDataLabelCompact::CodeLocationDataLabelCompact): (JSC::CodeLocationDataLabelPtr::CodeLocationDataLabelPtr): (JSC::CodeLocationConvertibleLoad::CodeLocationConvertibleLoad): (JSC::CodeLocationCommon<tag>::instructionAtOffset): (JSC::CodeLocationCommon<tag>::labelAtOffset): (JSC::CodeLocationCommon<tag>::jumpAtOffset): (JSC::CodeLocationCommon<tag>::callAtOffset): (JSC::CodeLocationCommon<tag>::nearCallAtOffset): (JSC::CodeLocationCommon<tag>::dataLabelPtrAtOffset): (JSC::CodeLocationCommon<tag>::dataLabel32AtOffset): (JSC::CodeLocationCommon<tag>::dataLabelCompactAtOffset): (JSC::CodeLocationCommon<tag>::convertibleLoadAtOffset): (JSC::CodeLocationCommon::instructionAtOffset): Deleted. (JSC::CodeLocationCommon::labelAtOffset): Deleted. (JSC::CodeLocationCommon::jumpAtOffset): Deleted. (JSC::CodeLocationCommon::callAtOffset): Deleted. (JSC::CodeLocationCommon::nearCallAtOffset): Deleted. (JSC::CodeLocationCommon::dataLabelPtrAtOffset): Deleted. (JSC::CodeLocationCommon::dataLabel32AtOffset): Deleted. (JSC::CodeLocationCommon::dataLabelCompactAtOffset): Deleted. (JSC::CodeLocationCommon::convertibleLoadAtOffset): Deleted. * assembler/LinkBuffer.cpp: (JSC::LinkBuffer::finalizeCodeWithoutDisassemblyImpl): (JSC::LinkBuffer::finalizeCodeWithDisassemblyImpl): (JSC::LinkBuffer::finalizeCodeWithoutDisassembly): Deleted. (JSC::LinkBuffer::finalizeCodeWithDisassembly): Deleted. * assembler/LinkBuffer.h: (JSC::LinkBuffer::link): (JSC::LinkBuffer::patch): (JSC::LinkBuffer::entrypoint): (JSC::LinkBuffer::locationOf): (JSC::LinkBuffer::locationOfNearCall): (JSC::LinkBuffer::finalizeCodeWithoutDisassembly): (JSC::LinkBuffer::finalizeCodeWithDisassembly): (JSC::LinkBuffer::trampolineAt): * assembler/MacroAssemblerARM.h: (JSC::MacroAssemblerARM::readCallTarget): (JSC::MacroAssemblerARM::replaceWithJump): (JSC::MacroAssemblerARM::startOfPatchableBranch32WithPatchOnAddress): (JSC::MacroAssemblerARM::startOfPatchableBranchPtrWithPatchOnAddress): (JSC::MacroAssemblerARM::startOfBranchPtrWithPatchOnRegister): (JSC::MacroAssemblerARM::revertJumpReplacementToBranchPtrWithPatch): (JSC::MacroAssemblerARM::revertJumpReplacementToPatchableBranch32WithPatch): (JSC::MacroAssemblerARM::revertJumpReplacementToPatchableBranchPtrWithPatch): (JSC::MacroAssemblerARM::repatchCall): (JSC::MacroAssemblerARM::linkCall): * assembler/MacroAssemblerARM64.h: (JSC::MacroAssemblerARM64::readCallTarget): (JSC::MacroAssemblerARM64::replaceWithVMHalt): (JSC::MacroAssemblerARM64::replaceWithJump): (JSC::MacroAssemblerARM64::startOfBranchPtrWithPatchOnRegister): (JSC::MacroAssemblerARM64::startOfPatchableBranchPtrWithPatchOnAddress): (JSC::MacroAssemblerARM64::startOfPatchableBranch32WithPatchOnAddress): (JSC::MacroAssemblerARM64::revertJumpReplacementToBranchPtrWithPatch): (JSC::MacroAssemblerARM64::revertJumpReplacementToPatchableBranchPtrWithPatch): (JSC::MacroAssemblerARM64::revertJumpReplacementToPatchableBranch32WithPatch): (JSC::MacroAssemblerARM64::repatchCall): (JSC::MacroAssemblerARM64::linkCall): * assembler/MacroAssemblerARMv7.h: (JSC::MacroAssemblerARMv7::replaceWithJump): (JSC::MacroAssemblerARMv7::readCallTarget): (JSC::MacroAssemblerARMv7::startOfBranchPtrWithPatchOnRegister): (JSC::MacroAssemblerARMv7::revertJumpReplacementToBranchPtrWithPatch): (JSC::MacroAssemblerARMv7::startOfPatchableBranchPtrWithPatchOnAddress): (JSC::MacroAssemblerARMv7::startOfPatchableBranch32WithPatchOnAddress): (JSC::MacroAssemblerARMv7::revertJumpReplacementToPatchableBranchPtrWithPatch): (JSC::MacroAssemblerARMv7::revertJumpReplacementToPatchableBranch32WithPatch): (JSC::MacroAssemblerARMv7::repatchCall): (JSC::MacroAssemblerARMv7::linkCall): * assembler/MacroAssemblerCodeRef.cpp: (JSC::MacroAssemblerCodePtrBase::dumpWithName): (JSC::MacroAssemblerCodeRefBase::tryToDisassemble): (JSC::MacroAssemblerCodeRefBase::disassembly): (JSC::MacroAssemblerCodePtr::createLLIntCodePtr): Deleted. (JSC::MacroAssemblerCodePtr::dumpWithName const): Deleted. (JSC::MacroAssemblerCodePtr::dump const): Deleted. (JSC::MacroAssemblerCodeRef::createLLIntCodeRef): Deleted. (JSC::MacroAssemblerCodeRef::tryToDisassemble const): Deleted. (JSC::MacroAssemblerCodeRef::disassembly const): Deleted. (JSC::MacroAssemblerCodeRef::dump const): Deleted. * assembler/MacroAssemblerCodeRef.h: (JSC::FunctionPtr::FunctionPtr): (JSC::FunctionPtr::retagged const): (JSC::FunctionPtr::retaggedExecutableAddress const): (JSC::FunctionPtr::operator== const): (JSC::FunctionPtr::operator!= const): (JSC::ReturnAddressPtr::ReturnAddressPtr): (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr): (JSC::MacroAssemblerCodePtr::createFromExecutableAddress): (JSC::MacroAssemblerCodePtr::retagged const): (JSC::MacroAssemblerCodePtr:: const): (JSC::MacroAssemblerCodePtr::dumpWithName const): (JSC::MacroAssemblerCodePtr::dump const): (JSC::MacroAssemblerCodePtrHash::hash): (JSC::MacroAssemblerCodePtrHash::equal): (JSC::MacroAssemblerCodeRef::MacroAssemblerCodeRef): (JSC::MacroAssemblerCodeRef::createSelfManagedCodeRef): (JSC::MacroAssemblerCodeRef::code const): (JSC::MacroAssemblerCodeRef::retaggedCode const): (JSC::MacroAssemblerCodeRef::retagged const): (JSC::MacroAssemblerCodeRef::tryToDisassemble const): (JSC::MacroAssemblerCodeRef::disassembly const): (JSC::MacroAssemblerCodeRef::dump const): (JSC::FunctionPtr<tag>::FunctionPtr): * assembler/MacroAssemblerMIPS.h: (JSC::MacroAssemblerMIPS::readCallTarget): (JSC::MacroAssemblerMIPS::replaceWithJump): (JSC::MacroAssemblerMIPS::startOfPatchableBranch32WithPatchOnAddress): (JSC::MacroAssemblerMIPS::startOfBranchPtrWithPatchOnRegister): (JSC::MacroAssemblerMIPS::revertJumpReplacementToBranchPtrWithPatch): (JSC::MacroAssemblerMIPS::startOfPatchableBranchPtrWithPatchOnAddress): (JSC::MacroAssemblerMIPS::revertJumpReplacementToPatchableBranch32WithPatch): (JSC::MacroAssemblerMIPS::revertJumpReplacementToPatchableBranchPtrWithPatch): (JSC::MacroAssemblerMIPS::repatchCall): (JSC::MacroAssemblerMIPS::linkCall): * assembler/MacroAssemblerX86.h: (JSC::MacroAssemblerX86::readCallTarget): (JSC::MacroAssemblerX86::startOfBranchPtrWithPatchOnRegister): (JSC::MacroAssemblerX86::startOfPatchableBranchPtrWithPatchOnAddress): (JSC::MacroAssemblerX86::startOfPatchableBranch32WithPatchOnAddress): (JSC::MacroAssemblerX86::revertJumpReplacementToBranchPtrWithPatch): (JSC::MacroAssemblerX86::revertJumpReplacementToPatchableBranchPtrWithPatch): (JSC::MacroAssemblerX86::revertJumpReplacementToPatchableBranch32WithPatch): (JSC::MacroAssemblerX86::repatchCall): (JSC::MacroAssemblerX86::linkCall): * assembler/MacroAssemblerX86Common.h: (JSC::MacroAssemblerX86Common::repatchCompact): (JSC::MacroAssemblerX86Common::replaceWithVMHalt): (JSC::MacroAssemblerX86Common::replaceWithJump): * assembler/MacroAssemblerX86_64.h: (JSC::MacroAssemblerX86_64::readCallTarget): (JSC::MacroAssemblerX86_64::startOfBranchPtrWithPatchOnRegister): (JSC::MacroAssemblerX86_64::startOfBranch32WithPatchOnRegister): (JSC::MacroAssemblerX86_64::startOfPatchableBranchPtrWithPatchOnAddress): (JSC::MacroAssemblerX86_64::startOfPatchableBranch32WithPatchOnAddress): (JSC::MacroAssemblerX86_64::revertJumpReplacementToPatchableBranchPtrWithPatch): (JSC::MacroAssemblerX86_64::revertJumpReplacementToPatchableBranch32WithPatch): (JSC::MacroAssemblerX86_64::revertJumpReplacementToBranchPtrWithPatch): (JSC::MacroAssemblerX86_64::repatchCall): (JSC::MacroAssemblerX86_64::linkCall): * assembler/testmasm.cpp: (JSC::compile): (JSC::invoke): (JSC::testProbeModifiesProgramCounter): * b3/B3Compilation.cpp: (JSC::B3::Compilation::Compilation): * b3/B3Compilation.h: (JSC::B3::Compilation::code const): (JSC::B3::Compilation::codeRef const): * b3/B3Compile.cpp: (JSC::B3::compile): * b3/B3LowerMacros.cpp: * b3/air/AirDisassembler.cpp: (JSC::B3::Air::Disassembler::dump): * b3/air/testair.cpp: * b3/testb3.cpp: (JSC::B3::invoke): (JSC::B3::testInterpreter): (JSC::B3::testEntrySwitchSimple): (JSC::B3::testEntrySwitchNoEntrySwitch): (JSC::B3::testEntrySwitchWithCommonPaths): (JSC::B3::testEntrySwitchWithCommonPathsAndNonTrivialEntrypoint): (JSC::B3::testEntrySwitchLoop): * bytecode/AccessCase.cpp: (JSC::AccessCase::generateImpl): * bytecode/AccessCaseSnippetParams.cpp: (JSC::SlowPathCallGeneratorWithArguments::generateImpl): * bytecode/ByValInfo.h: (JSC::ByValInfo::ByValInfo): * bytecode/CallLinkInfo.cpp: (JSC::CallLinkInfo::callReturnLocation): (JSC::CallLinkInfo::patchableJump): (JSC::CallLinkInfo::hotPathBegin): (JSC::CallLinkInfo::slowPathStart): * bytecode/CallLinkInfo.h: (JSC::CallLinkInfo::setCallLocations): (JSC::CallLinkInfo::hotPathOther): * bytecode/CodeBlock.cpp: (JSC::CodeBlock::finishCreation): * bytecode/GetByIdStatus.cpp: (JSC::GetByIdStatus::computeForStubInfoWithoutExitSiteFeedback): * bytecode/GetByIdVariant.cpp: (JSC::GetByIdVariant::GetByIdVariant): (JSC::GetByIdVariant::dumpInContext const): * bytecode/GetByIdVariant.h: (JSC::GetByIdVariant::customAccessorGetter const): * bytecode/GetterSetterAccessCase.cpp: (JSC::GetterSetterAccessCase::create): (JSC::GetterSetterAccessCase::GetterSetterAccessCase): (JSC::GetterSetterAccessCase::dumpImpl const): * bytecode/GetterSetterAccessCase.h: (JSC::GetterSetterAccessCase::customAccessor const): (): Deleted. * bytecode/HandlerInfo.h: (JSC::HandlerInfo::initialize): * bytecode/InlineAccess.cpp: (JSC::linkCodeInline): (JSC::InlineAccess::rewireStubAsJump): * bytecode/InlineAccess.h: * bytecode/JumpTable.h: (JSC::StringJumpTable::ctiForValue): (JSC::SimpleJumpTable::ctiForValue): * bytecode/LLIntCallLinkInfo.h: (JSC::LLIntCallLinkInfo::unlink): * bytecode/PolymorphicAccess.cpp: (JSC::AccessGenerationState::emitExplicitExceptionHandler): (JSC::PolymorphicAccess::regenerate): * bytecode/PolymorphicAccess.h: (JSC::AccessGenerationResult::AccessGenerationResult): (JSC::AccessGenerationResult::code const): * bytecode/StructureStubInfo.h: (JSC::StructureStubInfo::slowPathCallLocation): (JSC::StructureStubInfo::doneLocation): (JSC::StructureStubInfo::slowPathStartLocation): (JSC::StructureStubInfo::patchableJumpForIn): * dfg/DFGCommonData.h: (JSC::DFG::CommonData::appendCatchEntrypoint): * dfg/DFGDisassembler.cpp: (JSC::DFG::Disassembler::dumpDisassembly): * dfg/DFGDriver.h: * dfg/DFGJITCompiler.cpp: (JSC::DFG::JITCompiler::linkOSRExits): (JSC::DFG::JITCompiler::compileExceptionHandlers): (JSC::DFG::JITCompiler::link): (JSC::DFG::JITCompiler::compileFunction): (JSC::DFG::JITCompiler::noticeCatchEntrypoint): * dfg/DFGJITCompiler.h: (JSC::DFG::CallLinkRecord::CallLinkRecord): (JSC::DFG::JITCompiler::appendCall): (JSC::DFG::JITCompiler::JSCallRecord::JSCallRecord): (JSC::DFG::JITCompiler::JSDirectCallRecord::JSDirectCallRecord): (JSC::DFG::JITCompiler::JSDirectTailCallRecord::JSDirectTailCallRecord): * dfg/DFGJITFinalizer.cpp: (JSC::DFG::JITFinalizer::JITFinalizer): (JSC::DFG::JITFinalizer::finalize): (JSC::DFG::JITFinalizer::finalizeFunction): * dfg/DFGJITFinalizer.h: * dfg/DFGJumpReplacement.h: (JSC::DFG::JumpReplacement::JumpReplacement): * dfg/DFGNode.h: * dfg/DFGOSREntry.cpp: (JSC::DFG::prepareOSREntry): (JSC::DFG::prepareCatchOSREntry): * dfg/DFGOSREntry.h: (JSC::DFG::prepareOSREntry): * dfg/DFGOSRExit.cpp: (JSC::DFG::OSRExit::executeOSRExit): (JSC::DFG::reifyInlinedCallFrames): (JSC::DFG::adjustAndJumpToTarget): (JSC::DFG::OSRExit::codeLocationForRepatch const): (JSC::DFG::OSRExit::emitRestoreArguments): (JSC::DFG::OSRExit::compileOSRExit): * dfg/DFGOSRExit.h: * dfg/DFGOSRExitCompilerCommon.cpp: (JSC::DFG::handleExitCounts): (JSC::DFG::reifyInlinedCallFrames): (JSC::DFG::osrWriteBarrier): (JSC::DFG::adjustAndJumpToTarget): * dfg/DFGOperations.cpp: * dfg/DFGSlowPathGenerator.h: (JSC::DFG::CallResultAndArgumentsSlowPathGenerator::CallResultAndArgumentsSlowPathGenerator): (JSC::DFG::CallResultAndArgumentsSlowPathGenerator::unpackAndGenerate): (JSC::DFG::slowPathCall): * dfg/DFGSpeculativeJIT.cpp: (JSC::DFG::SpeculativeJIT::compileMathIC): (JSC::DFG::SpeculativeJIT::compileCallDOM): (JSC::DFG::SpeculativeJIT::compileCallDOMGetter): (JSC::DFG::SpeculativeJIT::emitSwitchIntJump): (JSC::DFG::SpeculativeJIT::emitSwitchImm): (JSC::DFG::SpeculativeJIT::emitSwitchStringOnString): (JSC::DFG::SpeculativeJIT::compileHasIndexedProperty): (JSC::DFG::SpeculativeJIT::compileGetDirectPname): (JSC::DFG::SpeculativeJIT::cachedPutById): * dfg/DFGSpeculativeJIT.h: (JSC::DFG::SpeculativeJIT::callOperation): (JSC::DFG::SpeculativeJIT::appendCall): (JSC::DFG::SpeculativeJIT::appendCallWithCallFrameRollbackOnException): (JSC::DFG::SpeculativeJIT::appendCallWithCallFrameRollbackOnExceptionSetResult): (JSC::DFG::SpeculativeJIT::appendCallSetResult): * dfg/DFGSpeculativeJIT64.cpp: (JSC::DFG::SpeculativeJIT::cachedGetById): (JSC::DFG::SpeculativeJIT::cachedGetByIdWithThis): (JSC::DFG::SpeculativeJIT::compile): * dfg/DFGThunks.cpp: (JSC::DFG::osrExitThunkGenerator): (JSC::DFG::osrExitGenerationThunkGenerator): (JSC::DFG::osrEntryThunkGenerator): * dfg/DFGThunks.h: * disassembler/ARM64Disassembler.cpp: (JSC::tryToDisassemble): * disassembler/ARMv7Disassembler.cpp: (JSC::tryToDisassemble): * disassembler/Disassembler.cpp: (JSC::disassemble): (JSC::disassembleAsynchronously): * disassembler/Disassembler.h: (JSC::tryToDisassemble): * disassembler/UDis86Disassembler.cpp: (JSC::tryToDisassembleWithUDis86): * disassembler/UDis86Disassembler.h: (JSC::tryToDisassembleWithUDis86): * disassembler/X86Disassembler.cpp: (JSC::tryToDisassemble): * ftl/FTLCompile.cpp: (JSC::FTL::compile): * ftl/FTLExceptionTarget.cpp: (JSC::FTL::ExceptionTarget::label): (JSC::FTL::ExceptionTarget::jumps): * ftl/FTLExceptionTarget.h: * ftl/FTLGeneratedFunction.h: * ftl/FTLJITCode.cpp: (JSC::FTL::JITCode::initializeB3Code): (JSC::FTL::JITCode::initializeAddressForCall): (JSC::FTL::JITCode::initializeArityCheckEntrypoint): (JSC::FTL::JITCode::addressForCall): (JSC::FTL::JITCode::executableAddressAtOffset): * ftl/FTLJITCode.h: (JSC::FTL::JITCode::b3Code const): * ftl/FTLJITFinalizer.cpp: (JSC::FTL::JITFinalizer::finalizeCommon): * ftl/FTLLazySlowPath.cpp: (JSC::FTL::LazySlowPath::initialize): (JSC::FTL::LazySlowPath::generate): * ftl/FTLLazySlowPath.h: (JSC::FTL::LazySlowPath::patchableJump const): (JSC::FTL::LazySlowPath::done const): (JSC::FTL::LazySlowPath::stub const): * ftl/FTLLazySlowPathCall.h: (JSC::FTL::createLazyCallGenerator): * ftl/FTLLink.cpp: (JSC::FTL::link): * ftl/FTLLowerDFGToB3.cpp: (JSC::FTL::DFG::LowerDFGToB3::lower): (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstruct): (JSC::FTL::DFG::LowerDFGToB3::compileDirectCallOrConstruct): (JSC::FTL::DFG::LowerDFGToB3::compileTailCall): (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargsSpread): (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargs): (JSC::FTL::DFG::LowerDFGToB3::compileCallEval): (JSC::FTL::DFG::LowerDFGToB3::compileInvalidationPoint): (JSC::FTL::DFG::LowerDFGToB3::compileIn): (JSC::FTL::DFG::LowerDFGToB3::compileCheckSubClass): (JSC::FTL::DFG::LowerDFGToB3::compileCallDOM): (JSC::FTL::DFG::LowerDFGToB3::compileCallDOMGetter): (JSC::FTL::DFG::LowerDFGToB3::lazySlowPath): * ftl/FTLOSRExit.cpp: (JSC::FTL::OSRExit::codeLocationForRepatch const): * ftl/FTLOSRExit.h: * ftl/FTLOSRExitCompiler.cpp: (JSC::FTL::compileStub): (JSC::FTL::compileFTLOSRExit): * ftl/FTLOSRExitHandle.cpp: (JSC::FTL::OSRExitHandle::emitExitThunk): * ftl/FTLOperations.cpp: (JSC::FTL::compileFTLLazySlowPath): * ftl/FTLPatchpointExceptionHandle.cpp: (JSC::FTL::PatchpointExceptionHandle::scheduleExitCreationForUnwind): * ftl/FTLSlowPathCall.cpp: (JSC::FTL::SlowPathCallContext::keyWithTarget const): (JSC::FTL::SlowPathCallContext::makeCall): * ftl/FTLSlowPathCall.h: (JSC::FTL::callOperation): * ftl/FTLSlowPathCallKey.cpp: (JSC::FTL::SlowPathCallKey::dump const): * ftl/FTLSlowPathCallKey.h: (JSC::FTL::SlowPathCallKey::SlowPathCallKey): (JSC::FTL::SlowPathCallKey::callTarget const): (JSC::FTL::SlowPathCallKey::withCallTarget): (JSC::FTL::SlowPathCallKey::hash const): (JSC::FTL::SlowPathCallKey::callPtrTag const): Deleted. * ftl/FTLState.cpp: (JSC::FTL::State::State): * ftl/FTLThunks.cpp: (JSC::FTL::genericGenerationThunkGenerator): (JSC::FTL::osrExitGenerationThunkGenerator): (JSC::FTL::lazySlowPathGenerationThunkGenerator): (JSC::FTL::slowPathCallThunkGenerator): * ftl/FTLThunks.h: (JSC::FTL::generateIfNecessary): (JSC::FTL::keyForThunk): (JSC::FTL::Thunks::getSlowPathCallThunk): (JSC::FTL::Thunks::keyForSlowPathCallThunk): * interpreter/InterpreterInlines.h: (JSC::Interpreter::getOpcodeID): * jit/AssemblyHelpers.cpp: (JSC::AssemblyHelpers::callExceptionFuzz): (JSC::AssemblyHelpers::emitDumbVirtualCall): (JSC::AssemblyHelpers::debugCall): * jit/CCallHelpers.cpp: (JSC::CCallHelpers::ensureShadowChickenPacket): * jit/ExecutableAllocator.cpp: (JSC::FixedVMPoolExecutableAllocator::initializeSeparatedWXHeaps): (JSC::FixedVMPoolExecutableAllocator::jitWriteThunkGenerator): * jit/ExecutableAllocator.h: (JSC::performJITMemcpy): * jit/GCAwareJITStubRoutine.cpp: (JSC::GCAwareJITStubRoutine::GCAwareJITStubRoutine): (JSC::MarkingGCAwareJITStubRoutine::MarkingGCAwareJITStubRoutine): (JSC::GCAwareJITStubRoutineWithExceptionHandler::GCAwareJITStubRoutineWithExceptionHandler): (JSC::createJITStubRoutine): * jit/GCAwareJITStubRoutine.h: (JSC::createJITStubRoutine): * jit/JIT.cpp: (JSC::ctiPatchCallByReturnAddress): (JSC::JIT::compileWithoutLinking): (JSC::JIT::link): (JSC::JIT::privateCompileExceptionHandlers): * jit/JIT.h: (JSC::CallRecord::CallRecord): * jit/JITArithmetic.cpp: (JSC::JIT::emitMathICFast): (JSC::JIT::emitMathICSlow): * jit/JITCall.cpp: (JSC::JIT::compileOpCallSlowCase): * jit/JITCall32_64.cpp: (JSC::JIT::compileOpCallSlowCase): * jit/JITCode.cpp: (JSC::JITCodeWithCodeRef::JITCodeWithCodeRef): (JSC::JITCodeWithCodeRef::executableAddressAtOffset): (JSC::DirectJITCode::DirectJITCode): (JSC::DirectJITCode::initializeCodeRef): (JSC::DirectJITCode::addressForCall): (JSC::NativeJITCode::NativeJITCode): (JSC::NativeJITCode::initializeCodeRef): (JSC::NativeJITCode::addressForCall): * jit/JITCode.h: * jit/JITCodeMap.h: (JSC::JITCodeMap::Entry::Entry): (JSC::JITCodeMap::Entry::codeLocation): (JSC::JITCodeMap::append): (JSC::JITCodeMap::find const): * jit/JITDisassembler.cpp: (JSC::JITDisassembler::dumpDisassembly): * jit/JITExceptions.cpp: (JSC::genericUnwind): * jit/JITInlineCacheGenerator.cpp: (JSC::JITByIdGenerator::finalize): * jit/JITInlines.h: (JSC::JIT::emitNakedCall): (JSC::JIT::emitNakedTailCall): (JSC::JIT::appendCallWithExceptionCheck): (JSC::JIT::appendCallWithExceptionCheckAndSlowPathReturnType): (JSC::JIT::appendCallWithCallFrameRollbackOnException): (JSC::JIT::appendCallWithExceptionCheckSetJSValueResult): (JSC::JIT::appendCallWithExceptionCheckSetJSValueResultWithProfile): * jit/JITMathIC.h: (JSC::isProfileEmpty): * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_catch): (JSC::JIT::emit_op_switch_imm): (JSC::JIT::emit_op_switch_char): (JSC::JIT::emit_op_switch_string): (JSC::JIT::privateCompileHasIndexedProperty): (JSC::JIT::emitSlow_op_has_indexed_property): * jit/JITOpcodes32_64.cpp: (JSC::JIT::privateCompileHasIndexedProperty): * jit/JITOperations.cpp: (JSC::getByVal): * jit/JITPropertyAccess.cpp: (JSC::JIT::stringGetByValStubGenerator): (JSC::JIT::emitGetByValWithCachedId): (JSC::JIT::emitSlow_op_get_by_val): (JSC::JIT::emitPutByValWithCachedId): (JSC::JIT::emitSlow_op_put_by_val): (JSC::JIT::emitSlow_op_try_get_by_id): (JSC::JIT::emitSlow_op_get_by_id_direct): (JSC::JIT::emitSlow_op_get_by_id): (JSC::JIT::emitSlow_op_get_by_id_with_this): (JSC::JIT::emitSlow_op_put_by_id): (JSC::JIT::privateCompileGetByVal): (JSC::JIT::privateCompileGetByValWithCachedId): (JSC::JIT::privateCompilePutByVal): (JSC::JIT::privateCompilePutByValWithCachedId): * jit/JITPropertyAccess32_64.cpp: (JSC::JIT::stringGetByValStubGenerator): (JSC::JIT::emitSlow_op_get_by_val): (JSC::JIT::emitSlow_op_put_by_val): * jit/JITStubRoutine.h: (JSC::JITStubRoutine::JITStubRoutine): (JSC::JITStubRoutine::createSelfManagedRoutine): (JSC::JITStubRoutine::code const): (JSC::JITStubRoutine::asCodePtr): * jit/JITThunks.cpp: (JSC::JITThunks::ctiNativeCall): (JSC::JITThunks::ctiNativeConstruct): (JSC::JITThunks::ctiNativeTailCall): (JSC::JITThunks::ctiNativeTailCallWithoutSavedTags): (JSC::JITThunks::ctiInternalFunctionCall): (JSC::JITThunks::ctiInternalFunctionConstruct): (JSC::JITThunks::ctiStub): (JSC::JITThunks::existingCTIStub): (JSC::JITThunks::hostFunctionStub): * jit/JITThunks.h: * jit/PCToCodeOriginMap.cpp: (JSC::PCToCodeOriginMap::PCToCodeOriginMap): * jit/PCToCodeOriginMap.h: * jit/PolymorphicCallStubRoutine.cpp: (JSC::PolymorphicCallStubRoutine::PolymorphicCallStubRoutine): * jit/PolymorphicCallStubRoutine.h: * jit/Repatch.cpp: (JSC::readPutICCallTarget): (JSC::ftlThunkAwareRepatchCall): (JSC::appropriateOptimizingGetByIdFunction): (JSC::appropriateGetByIdFunction): (JSC::tryCacheGetByID): (JSC::repatchGetByID): (JSC::tryCachePutByID): (JSC::repatchPutByID): (JSC::tryCacheIn): (JSC::repatchIn): (JSC::linkSlowFor): (JSC::linkFor): (JSC::linkDirectFor): (JSC::revertCall): (JSC::unlinkFor): (JSC::linkVirtualFor): (JSC::linkPolymorphicCall): (JSC::resetGetByID): (JSC::resetPutByID): * jit/Repatch.h: * jit/SlowPathCall.h: (JSC::JITSlowPathCall::call): * jit/SpecializedThunkJIT.h: (JSC::SpecializedThunkJIT::finalize): (JSC::SpecializedThunkJIT::callDoubleToDouble): (JSC::SpecializedThunkJIT::callDoubleToDoublePreservingReturn): * jit/ThunkGenerator.h: * jit/ThunkGenerators.cpp: (JSC::throwExceptionFromCallSlowPathGenerator): (JSC::slowPathFor): (JSC::linkCallThunkGenerator): (JSC::linkPolymorphicCallThunkGenerator): (JSC::virtualThunkFor): (JSC::nativeForGenerator): (JSC::nativeCallGenerator): (JSC::nativeTailCallGenerator): (JSC::nativeTailCallWithoutSavedTagsGenerator): (JSC::nativeConstructGenerator): (JSC::internalFunctionCallGenerator): (JSC::internalFunctionConstructGenerator): (JSC::arityFixupGenerator): (JSC::unreachableGenerator): (JSC::charCodeAtThunkGenerator): (JSC::charAtThunkGenerator): (JSC::fromCharCodeThunkGenerator): (JSC::clz32ThunkGenerator): (JSC::sqrtThunkGenerator): (JSC::floorThunkGenerator): (JSC::ceilThunkGenerator): (JSC::truncThunkGenerator): (JSC::roundThunkGenerator): (JSC::expThunkGenerator): (JSC::logThunkGenerator): (JSC::absThunkGenerator): (JSC::imulThunkGenerator): (JSC::randomThunkGenerator): (JSC::boundThisNoArgsFunctionCallGenerator): * jit/ThunkGenerators.h: * llint/LLIntData.cpp: (JSC::LLInt::initialize): * llint/LLIntData.h: (JSC::LLInt::getExecutableAddress): (JSC::LLInt::getCodePtr): (JSC::LLInt::getCodeRef): (JSC::LLInt::getCodeFunctionPtr): * llint/LLIntEntrypoint.cpp: (JSC::LLInt::setFunctionEntrypoint): (JSC::LLInt::setEvalEntrypoint): (JSC::LLInt::setProgramEntrypoint): (JSC::LLInt::setModuleProgramEntrypoint): * llint/LLIntExceptions.cpp: (JSC::LLInt::callToThrow): * llint/LLIntSlowPaths.cpp: (JSC::LLInt::LLINT_SLOW_PATH_DECL): (JSC::LLInt::setUpCall): * llint/LLIntThunks.cpp: (JSC::vmEntryToWasm): (JSC::LLInt::generateThunkWithJumpTo): (JSC::LLInt::functionForCallEntryThunkGenerator): (JSC::LLInt::functionForConstructEntryThunkGenerator): (JSC::LLInt::functionForCallArityCheckThunkGenerator): (JSC::LLInt::functionForConstructArityCheckThunkGenerator): (JSC::LLInt::evalEntryThunkGenerator): (JSC::LLInt::programEntryThunkGenerator): (JSC::LLInt::moduleProgramEntryThunkGenerator): * llint/LLIntThunks.h: * llint/LowLevelInterpreter.asm: * llint/LowLevelInterpreter32_64.asm: * llint/LowLevelInterpreter64.asm: * profiler/ProfilerCompilation.cpp: (JSC::Profiler::Compilation::addOSRExitSite): * profiler/ProfilerCompilation.h: * profiler/ProfilerOSRExitSite.cpp: (JSC::Profiler::OSRExitSite::toJS const): * profiler/ProfilerOSRExitSite.h: (JSC::Profiler::OSRExitSite::OSRExitSite): (JSC::Profiler::OSRExitSite::codeAddress const): (JSC::Profiler::OSRExitSite:: const): Deleted. * runtime/ExecutableBase.cpp: (JSC::ExecutableBase::clearCode): * runtime/ExecutableBase.h: (JSC::ExecutableBase::entrypointFor): * runtime/NativeExecutable.cpp: (JSC::NativeExecutable::finishCreation): * runtime/NativeFunction.h: (JSC::TaggedNativeFunction::TaggedNativeFunction): (JSC::TaggedNativeFunction::operator NativeFunction): * runtime/PtrTag.h: (JSC::tagCodePtr): (JSC::untagCodePtr): (JSC::retagCodePtr): (JSC::tagCFunctionPtr): (JSC::untagCFunctionPtr): (JSC::nextPtrTagID): Deleted. * runtime/PutPropertySlot.h: (JSC::PutPropertySlot::PutPropertySlot): (JSC::PutPropertySlot::setCustomValue): (JSC::PutPropertySlot::setCustomAccessor): (JSC::PutPropertySlot::customSetter const): * runtime/ScriptExecutable.cpp: (JSC::ScriptExecutable::installCode): * runtime/VM.cpp: (JSC::VM::getHostFunction): (JSC::VM::getCTIInternalFunctionTrampolineFor): * runtime/VM.h: (JSC::VM::getCTIStub): * wasm/WasmB3IRGenerator.cpp: (JSC::Wasm::B3IRGenerator::B3IRGenerator): (JSC::Wasm::B3IRGenerator::emitExceptionCheck): (JSC::Wasm::B3IRGenerator::emitTierUpCheck): (JSC::Wasm::B3IRGenerator::addCall): (JSC::Wasm::B3IRGenerator::addCallIndirect): * wasm/WasmBBQPlan.cpp: (JSC::Wasm::BBQPlan::prepare): (JSC::Wasm::BBQPlan::complete): * wasm/WasmBBQPlan.h: * wasm/WasmBinding.cpp: (JSC::Wasm::wasmToWasm): * wasm/WasmBinding.h: * wasm/WasmCallee.h: (JSC::Wasm::Callee::entrypoint const): * wasm/WasmCallingConvention.h: (JSC::Wasm::CallingConvention::setupFrameInPrologue const): * wasm/WasmCodeBlock.h: (JSC::Wasm::CodeBlock::entrypointLoadLocationFromFunctionIndexSpace): * wasm/WasmFaultSignalHandler.cpp: (JSC::Wasm::trapHandler): * wasm/WasmFormat.h: * wasm/WasmInstance.h: * wasm/WasmOMGPlan.cpp: (JSC::Wasm::OMGPlan::work): * wasm/WasmThunks.cpp: (JSC::Wasm::throwExceptionFromWasmThunkGenerator): (JSC::Wasm::throwStackOverflowFromWasmThunkGenerator): (JSC::Wasm::triggerOMGTierUpThunkGenerator): (JSC::Wasm::Thunks::stub): (JSC::Wasm::Thunks::existingStub): * wasm/WasmThunks.h: * wasm/js/JSToWasm.cpp: (JSC::Wasm::createJSToWasmWrapper): * wasm/js/JSWebAssemblyCodeBlock.h: * wasm/js/WasmToJS.cpp: (JSC::Wasm::handleBadI64Use): (JSC::Wasm::wasmToJS): * wasm/js/WasmToJS.h: * wasm/js/WebAssemblyFunction.h: * yarr/YarrJIT.cpp: (JSC::Yarr::YarrGenerator::loadFromFrameAndJump): (JSC::Yarr::YarrGenerator::BacktrackingState::linkDataLabels): (JSC::Yarr::YarrGenerator::compile): * yarr/YarrJIT.h: (JSC::Yarr::YarrCodeBlock::set8BitCode): (JSC::Yarr::YarrCodeBlock::set16BitCode): (JSC::Yarr::YarrCodeBlock::set8BitCodeMatchOnly): (JSC::Yarr::YarrCodeBlock::set16BitCodeMatchOnly): (JSC::Yarr::YarrCodeBlock::execute): (JSC::Yarr::YarrCodeBlock::clear): Source/WebCore: No new tests. This is covered by existing tests. * WebCore.xcodeproj/project.pbxproj: * css/ElementRuleCollector.cpp: (WebCore::ElementRuleCollector::ruleMatches): * cssjit/CSSPtrTag.h: Added. * cssjit/CompiledSelector.h: * cssjit/FunctionCall.h: (WebCore::FunctionCall::FunctionCall): (WebCore::FunctionCall::setFunctionAddress): (WebCore::FunctionCall::prepareAndCall): * cssjit/SelectorCompiler.cpp: (WebCore::SelectorCompiler::compileSelector): (WebCore::SelectorCompiler::SelectorFragment::appendUnoptimizedPseudoClassWithContext): (WebCore::SelectorCompiler::addPseudoClassType): (WebCore::SelectorCompiler::SelectorCodeGenerator::compile): (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributeFunctionCallValueMatching): (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementFunctionCallTest): (WebCore::SelectorCompiler::SelectorCodeGenerator::generateContextFunctionCallTest): * cssjit/SelectorCompiler.h: (WebCore::SelectorCompiler::ruleCollectorSimpleSelectorCheckerFunction): (WebCore::SelectorCompiler::querySelectorSimpleSelectorCheckerFunction): (WebCore::SelectorCompiler::ruleCollectorSelectorCheckerFunctionWithCheckingContext): (WebCore::SelectorCompiler::querySelectorSelectorCheckerFunctionWithCheckingContext): * dom/SelectorQuery.cpp: (WebCore::SelectorDataList::executeCompiledSingleMultiSelectorData const): (WebCore::SelectorDataList::execute const): * dom/SelectorQuery.h: Canonical link: https://commits.webkit.org/200234@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@230748 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-04-18 03:31:09 +00:00
CCallHelpers::JumpList* exceptionTarget, FunctionPtr<CFunctionPtrTag> function, GPRReg result, ArgumentTypes... arguments)
FTL should generate code to call slow paths lazily https://bugs.webkit.org/show_bug.cgi?id=149936 Reviewed by Saam Barati. Source/JavaScriptCore: We often have complex slow paths in FTL-generated code. Those slow paths may never run. Even if they do run, they don't need stellar performance. So, it doesn't make sense to have LLVM worry about compiling such slow path code. This patch enables us to use our own MacroAssembler for compiling the slow path inside FTL code. It does this by using a crazy lambda thingy (see FTLLowerDFGToLLVM.cpp's lazySlowPath() and its documentation). The result is quite natural to use. Even for straight slow path calls via something like vmCall(), the lazySlowPath offers the benefit that the call marshalling and the exception checking are not expressed using LLVM IR and do not require LLVM to think about it. It also has the benefit that we never generate the code if it never runs. That's great, since function calls usually involve ~10 instructions total (move arguments to argument registers, make the call, check exception, etc.). This patch adds the lazy slow path abstraction and uses it for some slow paths in the FTL. The code we generate with lazy slow paths is worse than the code that LLVM would have generated. Therefore, a lazy slow path only makes sense when we have strong evidence that the slow path will execute infrequently relative to the fast path. This completely precludes the use of lazy slow paths for out-of-line Nodes that unconditionally call a C++ function. It also precludes their use for the GetByVal out-of-bounds handler, since when we generate a GetByVal with an out-of-bounds handler it means that we only know that the out-of-bounds case executed at least once. So, for all we know, it may actually be the common case. So, this patch just deployed the lazy slow path for GC slow paths and masquerades-as-undefined slow paths. It makes sense for GC slow paths because those have a statistical guarantee of slow path frequency - probably bounded at less than 1/10. It makes sense for masquerades-as- undefined because we can say quite confidently that this is an uncommon scenario on the modern Web. Something that's always been challenging about abstractions involving the MacroAssembler is that linking is a separate phase, and there is no way for someone who is just given access to the MacroAssembler& to emit code that requires linking, since linking happens once we have emitted all code and we are creating the LinkBuffer. Moreover, the FTL requires that the final parts of linking happen on the main thread. This patch ran into this issue, and solved it comprehensively, by introducing MacroAssembler::addLinkTask(). This takes a lambda and runs it at the bitter end of linking - when performFinalization() is called. This ensure that the task added by addLinkTask() runs on the main thread. This patch doesn't replace all of the previously existing idioms for dealing with this issue; we can do that later. This shows small speed-ups on a bunch of things. No big win on any benchmark aggregate. But mainly this is done for https://bugs.webkit.org/show_bug.cgi?id=149852, where we found that outlining the slow path in this way was a significant speed boost. * CMakeLists.txt: * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: * JavaScriptCore.xcodeproj/project.pbxproj: * assembler/AbstractMacroAssembler.h: (JSC::AbstractMacroAssembler::replaceWithAddressComputation): (JSC::AbstractMacroAssembler::addLinkTask): (JSC::AbstractMacroAssembler::AbstractMacroAssembler): * assembler/LinkBuffer.cpp: (JSC::LinkBuffer::linkCode): (JSC::LinkBuffer::allocate): (JSC::LinkBuffer::performFinalization): * assembler/LinkBuffer.h: (JSC::LinkBuffer::wasAlreadyDisassembled): (JSC::LinkBuffer::didAlreadyDisassemble): (JSC::LinkBuffer::vm): (JSC::LinkBuffer::executableOffsetFor): * bytecode/CodeOrigin.h: (JSC::CodeOrigin::CodeOrigin): (JSC::CodeOrigin::isSet): (JSC::CodeOrigin::operator bool): (JSC::CodeOrigin::isHashTableDeletedValue): (JSC::CodeOrigin::operator!): Deleted. * ftl/FTLCompile.cpp: (JSC::FTL::mmAllocateDataSection): * ftl/FTLInlineCacheDescriptor.h: (JSC::FTL::InlineCacheDescriptor::InlineCacheDescriptor): (JSC::FTL::CheckInDescriptor::CheckInDescriptor): (JSC::FTL::LazySlowPathDescriptor::LazySlowPathDescriptor): * ftl/FTLJITCode.h: * ftl/FTLJITFinalizer.cpp: (JSC::FTL::JITFinalizer::finalizeFunction): * ftl/FTLJITFinalizer.h: * ftl/FTLLazySlowPath.cpp: Added. (JSC::FTL::LazySlowPath::LazySlowPath): (JSC::FTL::LazySlowPath::~LazySlowPath): (JSC::FTL::LazySlowPath::generate): * ftl/FTLLazySlowPath.h: Added. (JSC::FTL::LazySlowPath::createGenerator): (JSC::FTL::LazySlowPath::patchpoint): (JSC::FTL::LazySlowPath::usedRegisters): (JSC::FTL::LazySlowPath::callSiteIndex): (JSC::FTL::LazySlowPath::stub): * ftl/FTLLazySlowPathCall.h: Added. (JSC::FTL::createLazyCallGenerator): * ftl/FTLLowerDFGToLLVM.cpp: (JSC::FTL::DFG::LowerDFGToLLVM::compileCreateActivation): (JSC::FTL::DFG::LowerDFGToLLVM::compileNewFunction): (JSC::FTL::DFG::LowerDFGToLLVM::compileCreateDirectArguments): (JSC::FTL::DFG::LowerDFGToLLVM::compileNewArrayWithSize): (JSC::FTL::DFG::LowerDFGToLLVM::compileMakeRope): (JSC::FTL::DFG::LowerDFGToLLVM::compileNotifyWrite): (JSC::FTL::DFG::LowerDFGToLLVM::compileIsObjectOrNull): (JSC::FTL::DFG::LowerDFGToLLVM::compileIsFunction): (JSC::FTL::DFG::LowerDFGToLLVM::compileIn): (JSC::FTL::DFG::LowerDFGToLLVM::compileMaterializeNewObject): (JSC::FTL::DFG::LowerDFGToLLVM::compileMaterializeCreateActivation): (JSC::FTL::DFG::LowerDFGToLLVM::compileCheckWatchdogTimer): (JSC::FTL::DFG::LowerDFGToLLVM::allocatePropertyStorageWithSizeImpl): (JSC::FTL::DFG::LowerDFGToLLVM::allocateObject): (JSC::FTL::DFG::LowerDFGToLLVM::allocateJSArray): (JSC::FTL::DFG::LowerDFGToLLVM::buildTypeOf): (JSC::FTL::DFG::LowerDFGToLLVM::sensibleDoubleToInt32): (JSC::FTL::DFG::LowerDFGToLLVM::lazySlowPath): (JSC::FTL::DFG::LowerDFGToLLVM::speculate): (JSC::FTL::DFG::LowerDFGToLLVM::emitStoreBarrier): * ftl/FTLOperations.cpp: (JSC::FTL::operationMaterializeObjectInOSR): (JSC::FTL::compileFTLLazySlowPath): * ftl/FTLOperations.h: * ftl/FTLSlowPathCall.cpp: (JSC::FTL::SlowPathCallContext::SlowPathCallContext): (JSC::FTL::SlowPathCallContext::~SlowPathCallContext): (JSC::FTL::SlowPathCallContext::keyWithTarget): (JSC::FTL::SlowPathCallContext::makeCall): (JSC::FTL::callSiteIndexForCodeOrigin): (JSC::FTL::storeCodeOrigin): Deleted. (JSC::FTL::callOperation): Deleted. * ftl/FTLSlowPathCall.h: (JSC::FTL::callOperation): * ftl/FTLState.h: * ftl/FTLThunks.cpp: (JSC::FTL::genericGenerationThunkGenerator): (JSC::FTL::osrExitGenerationThunkGenerator): (JSC::FTL::lazySlowPathGenerationThunkGenerator): (JSC::FTL::registerClobberCheck): * ftl/FTLThunks.h: * interpreter/CallFrame.h: (JSC::CallSiteIndex::CallSiteIndex): (JSC::CallSiteIndex::operator bool): (JSC::CallSiteIndex::bits): * jit/CCallHelpers.h: (JSC::CCallHelpers::setupArgument): (JSC::CCallHelpers::setupArgumentsWithExecState): * jit/JITOperations.cpp: Source/WTF: Enables SharedTask to handle any function type, not just void(). It's probably better to use SharedTask instead of std::function in performance-sensitive code. std::function uses the system malloc and has copy semantics. SharedTask uses FastMalloc and has aliasing semantics. So, you can just trust that it will have sensible performance characteristics. * wtf/ParallelHelperPool.cpp: (WTF::ParallelHelperClient::~ParallelHelperClient): (WTF::ParallelHelperClient::setTask): (WTF::ParallelHelperClient::doSomeHelping): (WTF::ParallelHelperClient::runTaskInParallel): (WTF::ParallelHelperClient::finish): (WTF::ParallelHelperClient::claimTask): (WTF::ParallelHelperClient::runTask): (WTF::ParallelHelperPool::doSomeHelping): (WTF::ParallelHelperPool::helperThreadBody): * wtf/ParallelHelperPool.h: (WTF::ParallelHelperClient::setFunction): (WTF::ParallelHelperClient::runFunctionInParallel): (WTF::ParallelHelperClient::pool): * wtf/SharedTask.h: (WTF::createSharedTask): (WTF::SharedTask::SharedTask): Deleted. (WTF::SharedTask::~SharedTask): Deleted. (WTF::SharedTaskFunctor::SharedTaskFunctor): Deleted. Canonical link: https://commits.webkit.org/168154@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@190860 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-10-12 17:56:26 +00:00
{
return callOperation(
AssemblyHelpers should not have a VM field https://bugs.webkit.org/show_bug.cgi?id=170207 Reviewed by Yusuke Suzuki. APIs that need VM should take one as a parameter. When doing position independent code for Wasm, we can't tie code generation to a VM. * b3/B3Compile.cpp: (JSC::B3::compile): * b3/air/testair.cpp: * b3/testb3.cpp: (JSC::B3::testEntrySwitchSimple): (JSC::B3::testEntrySwitchNoEntrySwitch): (JSC::B3::testEntrySwitchWithCommonPaths): (JSC::B3::testEntrySwitchWithCommonPathsAndNonTrivialEntrypoint): (JSC::B3::testEntrySwitchLoop): * bytecode/AccessCase.cpp: (JSC::AccessCase::generateWithGuard): (JSC::AccessCase::generateImpl): * bytecode/DOMJITAccessCasePatchpointParams.cpp: (JSC::SlowPathCallGeneratorWithArguments::generateImpl): * bytecode/InlineAccess.cpp: (JSC::InlineAccess::dumpCacheSizesAndCrash): (JSC::InlineAccess::generateSelfPropertyAccess): (JSC::InlineAccess::generateSelfPropertyReplace): (JSC::InlineAccess::generateArrayLength): (JSC::InlineAccess::rewireStubAsJump): * bytecode/InlineAccess.h: * bytecode/PolymorphicAccess.cpp: (JSC::AccessGenerationState::emitExplicitExceptionHandler): (JSC::PolymorphicAccess::regenerate): * bytecode/PolymorphicAccess.h: (JSC::AccessGenerationState::AccessGenerationState): * dfg/DFGJITCompiler.cpp: (JSC::DFG::JITCompiler::JITCompiler): (JSC::DFG::JITCompiler::compileExceptionHandlers): (JSC::DFG::JITCompiler::link): (JSC::DFG::JITCompiler::compile): (JSC::DFG::JITCompiler::compileFunction): (JSC::DFG::JITCompiler::exceptionCheck): * dfg/DFGJITCompiler.h: (JSC::DFG::JITCompiler::exceptionCheckWithCallFrameRollback): (JSC::DFG::JITCompiler::fastExceptionCheck): (JSC::DFG::JITCompiler::vm): * dfg/DFGOSRExitCompiler.cpp: * dfg/DFGOSRExitCompiler.h: * dfg/DFGOSRExitCompiler32_64.cpp: (JSC::DFG::OSRExitCompiler::compileExit): * dfg/DFGOSRExitCompiler64.cpp: (JSC::DFG::OSRExitCompiler::compileExit): * dfg/DFGOSRExitCompilerCommon.cpp: (JSC::DFG::adjustAndJumpToTarget): * dfg/DFGOSRExitCompilerCommon.h: * dfg/DFGSpeculativeJIT.cpp: (JSC::DFG::SpeculativeJIT::emitAllocateRawObject): (JSC::DFG::SpeculativeJIT::checkArray): (JSC::DFG::SpeculativeJIT::compileCurrentBlock): (JSC::DFG::SpeculativeJIT::compileInstanceOfForObject): (JSC::DFG::SpeculativeJIT::compileMakeRope): (JSC::DFG::SpeculativeJIT::compileGetGlobalObject): (JSC::DFG::SpeculativeJIT::compileNewFunctionCommon): (JSC::DFG::SpeculativeJIT::compileCreateActivation): (JSC::DFG::SpeculativeJIT::compileCreateDirectArguments): (JSC::DFG::SpeculativeJIT::compileSpread): (JSC::DFG::SpeculativeJIT::compileArraySlice): (JSC::DFG::SpeculativeJIT::compileNukeStructureAndSetButterfly): (JSC::DFG::SpeculativeJIT::compileNewStringObject): (JSC::DFG::SpeculativeJIT::compileNewTypedArray): (JSC::DFG::SpeculativeJIT::compileStoreBarrier): * dfg/DFGSpeculativeJIT.h: (JSC::DFG::SpeculativeJIT::emitAllocateJSObjectWithKnownSize): (JSC::DFG::SpeculativeJIT::emitAllocateJSObject): (JSC::DFG::SpeculativeJIT::emitAllocateVariableSizedJSObject): (JSC::DFG::SpeculativeJIT::emitAllocateDestructibleObject): * dfg/DFGSpeculativeJIT32_64.cpp: (JSC::DFG::SpeculativeJIT::emitCall): (JSC::DFG::SpeculativeJIT::compileLogicalNot): (JSC::DFG::SpeculativeJIT::emitBranch): (JSC::DFG::SpeculativeJIT::compile): * dfg/DFGSpeculativeJIT64.cpp: (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNullOrUndefined): (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNullOrUndefined): (JSC::DFG::SpeculativeJIT::emitCall): (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot): (JSC::DFG::SpeculativeJIT::compileLogicalNot): (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch): (JSC::DFG::SpeculativeJIT::emitBranch): (JSC::DFG::SpeculativeJIT::compile): (JSC::DFG::SpeculativeJIT::compileAllocateNewArrayWithSize): * dfg/DFGThunks.cpp: (JSC::DFG::osrEntryThunkGenerator): * ftl/FTLCompile.cpp: (JSC::FTL::compile): * ftl/FTLJITFinalizer.h: * ftl/FTLLazySlowPath.cpp: (JSC::FTL::LazySlowPath::generate): * ftl/FTLLazySlowPathCall.h: (JSC::FTL::createLazyCallGenerator): * ftl/FTLLink.cpp: (JSC::FTL::link): * ftl/FTLLowerDFGToB3.cpp: (JSC::FTL::DFG::LowerDFGToB3::lower): (JSC::FTL::DFG::LowerDFGToB3::compileCreateActivation): (JSC::FTL::DFG::LowerDFGToB3::compileNewFunction): (JSC::FTL::DFG::LowerDFGToB3::compileCreateDirectArguments): (JSC::FTL::DFG::LowerDFGToB3::compileNewTypedArray): (JSC::FTL::DFG::LowerDFGToB3::compileMakeRope): (JSC::FTL::DFG::LowerDFGToB3::compileNotifyWrite): (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargsSpread): (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargs): (JSC::FTL::DFG::LowerDFGToB3::compileCallEval): (JSC::FTL::DFG::LowerDFGToB3::compileIsObjectOrNull): (JSC::FTL::DFG::LowerDFGToB3::compileIsFunction): (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeNewObject): (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeCreateActivation): (JSC::FTL::DFG::LowerDFGToB3::compileCheckTraps): (JSC::FTL::DFG::LowerDFGToB3::allocatePropertyStorageWithSizeImpl): (JSC::FTL::DFG::LowerDFGToB3::allocateObject): (JSC::FTL::DFG::LowerDFGToB3::allocateJSArray): (JSC::FTL::DFG::LowerDFGToB3::buildTypeOf): * ftl/FTLOSRExitCompiler.cpp: (JSC::FTL::compileStub): * ftl/FTLSlowPathCall.h: (JSC::FTL::callOperation): * ftl/FTLState.h: (JSC::FTL::State::vm): * ftl/FTLThunks.cpp: (JSC::FTL::genericGenerationThunkGenerator): (JSC::FTL::slowPathCallThunkGenerator): * jit/AssemblyHelpers.cpp: (JSC::AssemblyHelpers::jitReleaseAssertNoException): (JSC::AssemblyHelpers::callExceptionFuzz): (JSC::AssemblyHelpers::emitJumpIfException): (JSC::AssemblyHelpers::emitExceptionCheck): (JSC::AssemblyHelpers::emitNonPatchableExceptionCheck): (JSC::AssemblyHelpers::emitLoadStructure): (JSC::AssemblyHelpers::emitRandomThunk): (JSC::AssemblyHelpers::restoreCalleeSavesFromVMEntryFrameCalleeSavesBuffer): (JSC::AssemblyHelpers::emitConvertValueToBoolean): (JSC::AssemblyHelpers::debugCall): * jit/AssemblyHelpers.h: (JSC::AssemblyHelpers::AssemblyHelpers): (JSC::AssemblyHelpers::codeBlock): (JSC::AssemblyHelpers::copyCalleeSavesToVMEntryFrameCalleeSavesBuffer): (JSC::AssemblyHelpers::copyCalleeSavesFromFrameOrRegisterToVMEntryFrameCalleeSavesBuffer): (JSC::AssemblyHelpers::barrierBranch): (JSC::AssemblyHelpers::barrierStoreLoadFence): (JSC::AssemblyHelpers::mutatorFence): (JSC::AssemblyHelpers::storeButterfly): (JSC::AssemblyHelpers::nukeStructureAndStoreButterfly): (JSC::AssemblyHelpers::jumpIfMutatorFenceNotNeeded): (JSC::AssemblyHelpers::emitAllocateJSObjectWithKnownSize): (JSC::AssemblyHelpers::emitAllocateJSObject): (JSC::AssemblyHelpers::emitAllocateVariableSizedCell): (JSC::AssemblyHelpers::emitAllocateVariableSizedJSObject): (JSC::AssemblyHelpers::emitAllocateDestructibleObject): (JSC::AssemblyHelpers::vm): Deleted. (JSC::AssemblyHelpers::debugCall): Deleted. * jit/CCallHelpers.cpp: (JSC::CCallHelpers::ensureShadowChickenPacket): * jit/CCallHelpers.h: (JSC::CCallHelpers::CCallHelpers): (JSC::CCallHelpers::jumpToExceptionHandler): * jit/JIT.cpp: (JSC::JIT::emitEnterOptimizationCheck): (JSC::JIT::privateCompileExceptionHandlers): * jit/JIT.h: (JSC::JIT::exceptionCheck): (JSC::JIT::exceptionCheckWithCallFrameRollback): * jit/JITMathIC.h: (JSC::JITMathIC::generateOutOfLine): * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_instanceof): (JSC::JIT::emit_op_is_undefined): (JSC::JIT::emit_op_jfalse): (JSC::JIT::emit_op_jeq_null): (JSC::JIT::emit_op_jneq_null): (JSC::JIT::emit_op_jtrue): (JSC::JIT::emit_op_throw): (JSC::JIT::emit_op_catch): (JSC::JIT::emit_op_eq_null): (JSC::JIT::emit_op_neq_null): (JSC::JIT::emitSlow_op_loop_hint): (JSC::JIT::emit_op_log_shadow_chicken_prologue): (JSC::JIT::emit_op_log_shadow_chicken_tail): * jit/JITOpcodes32_64.cpp: (JSC::JIT::privateCompileCTINativeCall): (JSC::JIT::emit_op_new_object): (JSC::JIT::emit_op_jfalse): (JSC::JIT::emit_op_jtrue): (JSC::JIT::emit_op_throw): (JSC::JIT::emit_op_catch): (JSC::JIT::emit_op_create_this): (JSC::JIT::emit_op_log_shadow_chicken_prologue): (JSC::JIT::emit_op_log_shadow_chicken_tail): * jit/JITPropertyAccess.cpp: (JSC::JIT::emitWriteBarrier): * jit/JSInterfaceJIT.h: (JSC::JSInterfaceJIT::JSInterfaceJIT): (JSC::JSInterfaceJIT::vm): * jit/Repatch.cpp: (JSC::tryCacheGetByID): (JSC::tryCachePutByID): (JSC::linkPolymorphicCall): (JSC::resetGetByID): (JSC::resetPutByID): * jit/SetupVarargsFrame.cpp: (JSC::emitSetupVarargsFrameFastCase): * jit/SetupVarargsFrame.h: * jit/SpecializedThunkJIT.h: (JSC::SpecializedThunkJIT::loadArgumentWithSpecificClass): * jit/ThunkGenerators.cpp: (JSC::throwExceptionFromCallSlowPathGenerator): (JSC::linkCallThunkGenerator): (JSC::linkPolymorphicCallThunkGenerator): (JSC::virtualThunkFor): (JSC::nativeForGenerator): (JSC::randomThunkGenerator): (JSC::boundThisNoArgsFunctionCallGenerator): (JSC::throwExceptionFromWasmThunkGenerator): * wasm/WasmB3IRGenerator.cpp: (JSC::Wasm::parseAndCompile): * wasm/WasmBinding.cpp: (JSC::Wasm::wasmToJs): (JSC::Wasm::wasmToWasm): Canonical link: https://commits.webkit.org/187145@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@214531 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-03-29 06:15:23 +00:00
state.vm(), usedRegisters, jit, callSiteIndexForCodeOrigin(state, codeOrigin), exceptionTarget, function,
FTL should generate code to call slow paths lazily https://bugs.webkit.org/show_bug.cgi?id=149936 Reviewed by Saam Barati. Source/JavaScriptCore: We often have complex slow paths in FTL-generated code. Those slow paths may never run. Even if they do run, they don't need stellar performance. So, it doesn't make sense to have LLVM worry about compiling such slow path code. This patch enables us to use our own MacroAssembler for compiling the slow path inside FTL code. It does this by using a crazy lambda thingy (see FTLLowerDFGToLLVM.cpp's lazySlowPath() and its documentation). The result is quite natural to use. Even for straight slow path calls via something like vmCall(), the lazySlowPath offers the benefit that the call marshalling and the exception checking are not expressed using LLVM IR and do not require LLVM to think about it. It also has the benefit that we never generate the code if it never runs. That's great, since function calls usually involve ~10 instructions total (move arguments to argument registers, make the call, check exception, etc.). This patch adds the lazy slow path abstraction and uses it for some slow paths in the FTL. The code we generate with lazy slow paths is worse than the code that LLVM would have generated. Therefore, a lazy slow path only makes sense when we have strong evidence that the slow path will execute infrequently relative to the fast path. This completely precludes the use of lazy slow paths for out-of-line Nodes that unconditionally call a C++ function. It also precludes their use for the GetByVal out-of-bounds handler, since when we generate a GetByVal with an out-of-bounds handler it means that we only know that the out-of-bounds case executed at least once. So, for all we know, it may actually be the common case. So, this patch just deployed the lazy slow path for GC slow paths and masquerades-as-undefined slow paths. It makes sense for GC slow paths because those have a statistical guarantee of slow path frequency - probably bounded at less than 1/10. It makes sense for masquerades-as- undefined because we can say quite confidently that this is an uncommon scenario on the modern Web. Something that's always been challenging about abstractions involving the MacroAssembler is that linking is a separate phase, and there is no way for someone who is just given access to the MacroAssembler& to emit code that requires linking, since linking happens once we have emitted all code and we are creating the LinkBuffer. Moreover, the FTL requires that the final parts of linking happen on the main thread. This patch ran into this issue, and solved it comprehensively, by introducing MacroAssembler::addLinkTask(). This takes a lambda and runs it at the bitter end of linking - when performFinalization() is called. This ensure that the task added by addLinkTask() runs on the main thread. This patch doesn't replace all of the previously existing idioms for dealing with this issue; we can do that later. This shows small speed-ups on a bunch of things. No big win on any benchmark aggregate. But mainly this is done for https://bugs.webkit.org/show_bug.cgi?id=149852, where we found that outlining the slow path in this way was a significant speed boost. * CMakeLists.txt: * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: * JavaScriptCore.xcodeproj/project.pbxproj: * assembler/AbstractMacroAssembler.h: (JSC::AbstractMacroAssembler::replaceWithAddressComputation): (JSC::AbstractMacroAssembler::addLinkTask): (JSC::AbstractMacroAssembler::AbstractMacroAssembler): * assembler/LinkBuffer.cpp: (JSC::LinkBuffer::linkCode): (JSC::LinkBuffer::allocate): (JSC::LinkBuffer::performFinalization): * assembler/LinkBuffer.h: (JSC::LinkBuffer::wasAlreadyDisassembled): (JSC::LinkBuffer::didAlreadyDisassemble): (JSC::LinkBuffer::vm): (JSC::LinkBuffer::executableOffsetFor): * bytecode/CodeOrigin.h: (JSC::CodeOrigin::CodeOrigin): (JSC::CodeOrigin::isSet): (JSC::CodeOrigin::operator bool): (JSC::CodeOrigin::isHashTableDeletedValue): (JSC::CodeOrigin::operator!): Deleted. * ftl/FTLCompile.cpp: (JSC::FTL::mmAllocateDataSection): * ftl/FTLInlineCacheDescriptor.h: (JSC::FTL::InlineCacheDescriptor::InlineCacheDescriptor): (JSC::FTL::CheckInDescriptor::CheckInDescriptor): (JSC::FTL::LazySlowPathDescriptor::LazySlowPathDescriptor): * ftl/FTLJITCode.h: * ftl/FTLJITFinalizer.cpp: (JSC::FTL::JITFinalizer::finalizeFunction): * ftl/FTLJITFinalizer.h: * ftl/FTLLazySlowPath.cpp: Added. (JSC::FTL::LazySlowPath::LazySlowPath): (JSC::FTL::LazySlowPath::~LazySlowPath): (JSC::FTL::LazySlowPath::generate): * ftl/FTLLazySlowPath.h: Added. (JSC::FTL::LazySlowPath::createGenerator): (JSC::FTL::LazySlowPath::patchpoint): (JSC::FTL::LazySlowPath::usedRegisters): (JSC::FTL::LazySlowPath::callSiteIndex): (JSC::FTL::LazySlowPath::stub): * ftl/FTLLazySlowPathCall.h: Added. (JSC::FTL::createLazyCallGenerator): * ftl/FTLLowerDFGToLLVM.cpp: (JSC::FTL::DFG::LowerDFGToLLVM::compileCreateActivation): (JSC::FTL::DFG::LowerDFGToLLVM::compileNewFunction): (JSC::FTL::DFG::LowerDFGToLLVM::compileCreateDirectArguments): (JSC::FTL::DFG::LowerDFGToLLVM::compileNewArrayWithSize): (JSC::FTL::DFG::LowerDFGToLLVM::compileMakeRope): (JSC::FTL::DFG::LowerDFGToLLVM::compileNotifyWrite): (JSC::FTL::DFG::LowerDFGToLLVM::compileIsObjectOrNull): (JSC::FTL::DFG::LowerDFGToLLVM::compileIsFunction): (JSC::FTL::DFG::LowerDFGToLLVM::compileIn): (JSC::FTL::DFG::LowerDFGToLLVM::compileMaterializeNewObject): (JSC::FTL::DFG::LowerDFGToLLVM::compileMaterializeCreateActivation): (JSC::FTL::DFG::LowerDFGToLLVM::compileCheckWatchdogTimer): (JSC::FTL::DFG::LowerDFGToLLVM::allocatePropertyStorageWithSizeImpl): (JSC::FTL::DFG::LowerDFGToLLVM::allocateObject): (JSC::FTL::DFG::LowerDFGToLLVM::allocateJSArray): (JSC::FTL::DFG::LowerDFGToLLVM::buildTypeOf): (JSC::FTL::DFG::LowerDFGToLLVM::sensibleDoubleToInt32): (JSC::FTL::DFG::LowerDFGToLLVM::lazySlowPath): (JSC::FTL::DFG::LowerDFGToLLVM::speculate): (JSC::FTL::DFG::LowerDFGToLLVM::emitStoreBarrier): * ftl/FTLOperations.cpp: (JSC::FTL::operationMaterializeObjectInOSR): (JSC::FTL::compileFTLLazySlowPath): * ftl/FTLOperations.h: * ftl/FTLSlowPathCall.cpp: (JSC::FTL::SlowPathCallContext::SlowPathCallContext): (JSC::FTL::SlowPathCallContext::~SlowPathCallContext): (JSC::FTL::SlowPathCallContext::keyWithTarget): (JSC::FTL::SlowPathCallContext::makeCall): (JSC::FTL::callSiteIndexForCodeOrigin): (JSC::FTL::storeCodeOrigin): Deleted. (JSC::FTL::callOperation): Deleted. * ftl/FTLSlowPathCall.h: (JSC::FTL::callOperation): * ftl/FTLState.h: * ftl/FTLThunks.cpp: (JSC::FTL::genericGenerationThunkGenerator): (JSC::FTL::osrExitGenerationThunkGenerator): (JSC::FTL::lazySlowPathGenerationThunkGenerator): (JSC::FTL::registerClobberCheck): * ftl/FTLThunks.h: * interpreter/CallFrame.h: (JSC::CallSiteIndex::CallSiteIndex): (JSC::CallSiteIndex::operator bool): (JSC::CallSiteIndex::bits): * jit/CCallHelpers.h: (JSC::CCallHelpers::setupArgument): (JSC::CCallHelpers::setupArgumentsWithExecState): * jit/JITOperations.cpp: Source/WTF: Enables SharedTask to handle any function type, not just void(). It's probably better to use SharedTask instead of std::function in performance-sensitive code. std::function uses the system malloc and has copy semantics. SharedTask uses FastMalloc and has aliasing semantics. So, you can just trust that it will have sensible performance characteristics. * wtf/ParallelHelperPool.cpp: (WTF::ParallelHelperClient::~ParallelHelperClient): (WTF::ParallelHelperClient::setTask): (WTF::ParallelHelperClient::doSomeHelping): (WTF::ParallelHelperClient::runTaskInParallel): (WTF::ParallelHelperClient::finish): (WTF::ParallelHelperClient::claimTask): (WTF::ParallelHelperClient::runTask): (WTF::ParallelHelperPool::doSomeHelping): (WTF::ParallelHelperPool::helperThreadBody): * wtf/ParallelHelperPool.h: (WTF::ParallelHelperClient::setFunction): (WTF::ParallelHelperClient::runFunctionInParallel): (WTF::ParallelHelperClient::pool): * wtf/SharedTask.h: (WTF::createSharedTask): (WTF::SharedTask::SharedTask): Deleted. (WTF::SharedTask::~SharedTask): Deleted. (WTF::SharedTaskFunctor::SharedTaskFunctor): Deleted. Canonical link: https://commits.webkit.org/168154@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@190860 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-10-12 17:56:26 +00:00
result, arguments...);
}
FTL should be able to do some simple inline caches using LLVM patchpoints https://bugs.webkit.org/show_bug.cgi?id=123164 Source/JavaScriptCore: Reviewed by Mark Hahnenberg. This implements GetById inline caches in the FTL using llvm.webkit.patchpoint. The idea is that we ask LLVM for a nop slide the size of a GetById inline cache and then fill in the code after LLVM compilation is complete. For now, we just use the system calling convention for the arguments and return. We also still make some assumptions about registers that aren't correct. But, most of the scaffolding is there and this will successfully patch an inline cache. * JavaScriptCore.xcodeproj/project.pbxproj: * assembler/AbstractMacroAssembler.h: * assembler/LinkBuffer.cpp: (JSC::LinkBuffer::finalizeCodeWithoutDisassembly): (JSC::LinkBuffer::linkCode): (JSC::LinkBuffer::allocate): * assembler/LinkBuffer.h: (JSC::LinkBuffer::LinkBuffer): (JSC::LinkBuffer::link): * ftl/FTLAbbreviations.h: (JSC::FTL::constNull): (JSC::FTL::buildCall): * ftl/FTLCapabilities.cpp: (JSC::FTL::canCompile): * ftl/FTLCompile.cpp: (JSC::FTL::fixFunctionBasedOnStackMaps): * ftl/FTLInlineCacheDescriptor.h: Added. (JSC::FTL::InlineCacheDescriptor::InlineCacheDescriptor): (JSC::FTL::GetByIdDescriptor::GetByIdDescriptor): (JSC::FTL::GetByIdDescriptor::stackmapID): (JSC::FTL::GetByIdDescriptor::codeOrigin): (JSC::FTL::GetByIdDescriptor::uid): * ftl/FTLInlineCacheSize.cpp: Added. (JSC::FTL::sizeOfGetById): (JSC::FTL::sizeOfPutById): * ftl/FTLInlineCacheSize.h: Added. * ftl/FTLIntrinsicRepository.h: * ftl/FTLJITFinalizer.cpp: (JSC::FTL::JITFinalizer::finalizeFunction): * ftl/FTLJITFinalizer.h: * ftl/FTLLocation.cpp: (JSC::FTL::Location::directGPR): * ftl/FTLLocation.h: * ftl/FTLLowerDFGToLLVM.cpp: (JSC::FTL::LowerDFGToLLVM::compileGetById): * ftl/FTLOutput.h: (JSC::FTL::Output::call): * ftl/FTLSlowPathCall.cpp: Added. (JSC::FTL::callOperation): * ftl/FTLSlowPathCall.h: Added. (JSC::FTL::SlowPathCall::SlowPathCall): (JSC::FTL::SlowPathCall::call): (JSC::FTL::SlowPathCall::key): * ftl/FTLSlowPathCallKey.cpp: Added. (JSC::FTL::SlowPathCallKey::dump): * ftl/FTLSlowPathCallKey.h: Added. (JSC::FTL::SlowPathCallKey::SlowPathCallKey): (JSC::FTL::SlowPathCallKey::usedRegisters): (JSC::FTL::SlowPathCallKey::callTarget): (JSC::FTL::SlowPathCallKey::offset): (JSC::FTL::SlowPathCallKey::isEmptyValue): (JSC::FTL::SlowPathCallKey::isDeletedValue): (JSC::FTL::SlowPathCallKey::operator==): (JSC::FTL::SlowPathCallKey::hash): (JSC::FTL::SlowPathCallKeyHash::hash): (JSC::FTL::SlowPathCallKeyHash::equal): * ftl/FTLStackMaps.cpp: (JSC::FTL::StackMaps::Location::directGPR): * ftl/FTLStackMaps.h: * ftl/FTLState.h: * ftl/FTLThunks.cpp: (JSC::FTL::slowPathCallThunkGenerator): * ftl/FTLThunks.h: (JSC::FTL::Thunks::getSlowPathCallThunk): * jit/CCallHelpers.h: (JSC::CCallHelpers::setupArguments): * jit/GPRInfo.h: * jit/JITInlineCacheGenerator.cpp: (JSC::garbageStubInfo): (JSC::JITInlineCacheGenerator::JITInlineCacheGenerator): (JSC::JITByIdGenerator::finalize): * jit/JITInlineCacheGenerator.h: (JSC::JITByIdGenerator::slowPathBegin): * jit/RegisterSet.cpp: (JSC::RegisterSet::stackRegisters): (JSC::RegisterSet::specialRegisters): (JSC::RegisterSet::calleeSaveRegisters): (JSC::RegisterSet::allGPRs): (JSC::RegisterSet::allFPRs): (JSC::RegisterSet::allRegisters): (JSC::RegisterSet::dump): * jit/RegisterSet.h: (JSC::RegisterSet::exclude): (JSC::RegisterSet::numberOfSetRegisters): (JSC::RegisterSet::RegisterSet): (JSC::RegisterSet::isEmptyValue): (JSC::RegisterSet::isDeletedValue): (JSC::RegisterSet::operator==): (JSC::RegisterSet::hash): (JSC::RegisterSetHash::hash): (JSC::RegisterSetHash::equal): * runtime/Options.h: Source/WTF: Reviewed by Mark Hahnenberg. This needed some better bitvector support, like merging (|=), excluding (&=~), hashing, and bit counting. * wtf/BitVector.cpp: (WTF::BitVector::setSlow): (WTF::BitVector::excludeSlow): (WTF::BitVector::bitCountSlow): (WTF::BitVector::equalsSlowCase): (WTF::BitVector::hashSlowCase): (WTF::BitVector::dump): * wtf/BitVector.h: (WTF::BitVector::merge): (WTF::BitVector::exclude): (WTF::BitVector::bitCount): (WTF::BitVector::BitVector): (WTF::BitVector::isEmptyValue): (WTF::BitVector::isDeletedValue): (WTF::BitVector::isEmptyOrDeletedValue): (WTF::BitVector::operator==): (WTF::BitVector::hash): (WTF::BitVectorHash::hash): (WTF::BitVectorHash::equal): * wtf/HashTraits.h: (WTF::CustomHashTraits::constructDeletedValue): (WTF::CustomHashTraits::isDeletedValue): (WTF::CustomHashTraits::emptyValue): (WTF::CustomHashTraits::isEmptyValue): * wtf/StdLibExtras.h: (WTF::bitCount): Canonical link: https://commits.webkit.org/141315@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@157872 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-23 18:22:09 +00:00
[JSC] Use DataIC for AccessCase https://bugs.webkit.org/show_bug.cgi?id=226072 Reviewed by Saam Barati and Filip Pizlo. Source/JavaScriptCore: This patch adds non-repatching IC for Baseline JIT in ARM64. This does not work in non-ARM64 architectures (including X64) due to the use of link-register. 1. We add non-repatching IC, which is enabled only in Baseline due to performance reason. We are using the existing IC in DFG and FTL. Non-repatching includes fast-path, and slow-path's operation function. 2. We still keep InlineAccess in all tiers. Removing that causes 0.3 ~ 1.0% regression in Speedometer2. This means that we still need some repatching when we first introduce stubs. 3. We add a mechanism to share generated code stubs in non-repatching IC. Currently, getter / setter / custom accessors are excluded since their code relies on JSGlobalObject, CodeBlock etc. which are not included in AccessCase's data structure. 4. This patch still relies on that CodeBlock will be destroyed synchronously since we need to ensure that sharing-hash-table does not include already-dead JIT code stubs. We can fix it (e.g. annotating epoch to these stubs, bump them in finalizeUnconditionally), but we avoid doing that to prevent from further enlarging this patch. This patch is already significant in its size. 5. Added callOperation(Address) support in CCallHelpers, which can save the target in nonArgGPR0, and call it so that we can use Address including GPR which is also used for arguments. Performance is neutral in JetStream2 and Speedometer2. But it offers the way to remove some code generation in Baseline. * assembler/MacroAssemblerARM64E.h: (JSC::MacroAssemblerARM64E::call): * bytecode/AccessCase.cpp: (JSC::AccessCase::create): (JSC::AccessCase::createTransition): (JSC::AccessCase::createDelete): (JSC::AccessCase::createCheckPrivateBrand): (JSC::AccessCase::createSetPrivateBrand): (JSC::AccessCase::fromStructureStubInfo): (JSC::AccessCase::clone const): (JSC::AccessCase::generateWithGuard): (JSC::AccessCase::generateImpl): (JSC::AccessCase::canBeShared): * bytecode/AccessCase.h: (JSC::AccessCase::hash const): (JSC::AccessCase::AccessCase): (JSC::SharedJITStubSet::Hash::Key::Key): (JSC::SharedJITStubSet::Hash::Key::isHashTableDeletedValue const): (JSC::SharedJITStubSet::Hash::Key::operator==): (JSC::SharedJITStubSet::Hash::hash): (JSC::SharedJITStubSet::Hash::equal): (JSC::SharedJITStubSet::Searcher::Translator::hash): (JSC::SharedJITStubSet::Searcher::Translator::equal): (JSC::SharedJITStubSet::PointerTranslator::hash): (JSC::SharedJITStubSet::PointerTranslator::equal): (JSC::SharedJITStubSet::add): (JSC::SharedJITStubSet::remove): (JSC::SharedJITStubSet::find): * bytecode/ByValInfo.h: (JSC::ByValInfo::setUp): (JSC::ByValInfo::offsetOfSlowOperation): (JSC::ByValInfo::offsetOfNotIndexJumpTarget): (JSC::ByValInfo::offsetOfBadTypeJumpTarget): * bytecode/CallLinkInfo.cpp: (JSC::CallLinkInfo::initializeDirectCall): (JSC::CallLinkInfo::setDirectCallTarget): * bytecode/CodeBlock.h: (JSC::CodeBlock::useDataIC const): * bytecode/GetterSetterAccessCase.cpp: (JSC::GetterSetterAccessCase::create): (JSC::GetterSetterAccessCase::clone const): (JSC::GetterSetterAccessCase::emitDOMJITGetter): * bytecode/GetterSetterAccessCase.h: * bytecode/InlineAccess.cpp: (JSC::getScratchRegister): (JSC::InlineAccess::rewireStubAsJumpInAccessNotUsingInlineAccess): (JSC::InlineAccess::rewireStubAsJumpInAccess): (JSC::InlineAccess::resetStubAsJumpInAccess): (JSC::InlineAccess::resetStubAsJumpInAccessNotUsingInlineAccess): (JSC::InlineAccess::rewireStubAsJump): Deleted. * bytecode/InlineAccess.h: * bytecode/InstanceOfAccessCase.cpp: (JSC::InstanceOfAccessCase::create): (JSC::InstanceOfAccessCase::clone const): * bytecode/InstanceOfAccessCase.h: * bytecode/IntrinsicGetterAccessCase.cpp: (JSC::IntrinsicGetterAccessCase::create): (JSC::IntrinsicGetterAccessCase::clone const): * bytecode/IntrinsicGetterAccessCase.h: * bytecode/ModuleNamespaceAccessCase.cpp: (JSC::ModuleNamespaceAccessCase::create): (JSC::ModuleNamespaceAccessCase::clone const): * bytecode/ModuleNamespaceAccessCase.h: * bytecode/ObjectPropertyConditionSet.h: (JSC::ObjectPropertyConditionSet::hash const): (JSC::ObjectPropertyConditionSet::operator==): (JSC::ObjectPropertyConditionSet::operator!=): * bytecode/PolymorphicAccess.cpp: (JSC::AccessGenerationState::installWatchpoint): (JSC::AccessGenerationState::succeed): (JSC::AccessGenerationState::preserveLiveRegistersToStackForCallWithoutExceptions): (JSC::PolymorphicAccess::addCases): (JSC::PolymorphicAccess::addCase): (JSC::PolymorphicAccess::visitWeak const): (JSC::PolymorphicAccess::regenerate): * bytecode/PolymorphicAccess.h: (JSC::AccessGenerationState::AccessGenerationState): (JSC::AccessGenerationState::preserveLiveRegistersToStackForCallWithoutExceptions): * bytecode/ProxyableAccessCase.cpp: (JSC::ProxyableAccessCase::create): (JSC::ProxyableAccessCase::clone const): * bytecode/ProxyableAccessCase.h: * bytecode/StructureStubInfo.cpp: (JSC::StructureStubInfo::StructureStubInfo): (JSC::StructureStubInfo::addAccessCase): (JSC::StructureStubInfo::reset): * bytecode/StructureStubInfo.h: (JSC::StructureStubInfo::offsetOfCodePtr): (JSC::StructureStubInfo::offsetOfSlowPathStartLocation): (JSC::StructureStubInfo::offsetOfSlowOperation): (JSC::StructureStubInfo::patchableJump): Deleted. * dfg/DFGJITCompiler.h: (JSC::DFG::JITCompiler::appendCall): * dfg/DFGSlowPathGenerator.h: (JSC::DFG::slowPathICCall): * dfg/DFGSpeculativeJIT.cpp: (JSC::DFG::SpeculativeJIT::compileGetById): (JSC::DFG::SpeculativeJIT::compileGetByIdFlush): (JSC::DFG::SpeculativeJIT::compileDeleteById): (JSC::DFG::SpeculativeJIT::compileDeleteByVal): (JSC::DFG::SpeculativeJIT::compileInById): (JSC::DFG::SpeculativeJIT::compileInByVal): (JSC::DFG::SpeculativeJIT::compileGetPrivateNameByVal): (JSC::DFG::SpeculativeJIT::compileGetPrivateNameById): (JSC::DFG::SpeculativeJIT::compilePutPrivateNameById): (JSC::DFG::SpeculativeJIT::compileCheckPrivateBrand): (JSC::DFG::SpeculativeJIT::compileSetPrivateBrand): (JSC::DFG::SpeculativeJIT::compileInstanceOfForCells): (JSC::DFG::SpeculativeJIT::compileInstanceOf): (JSC::DFG::SpeculativeJIT::compilePutByIdFlush): (JSC::DFG::SpeculativeJIT::compilePutById): (JSC::DFG::SpeculativeJIT::compilePutByIdDirect): (JSC::DFG::SpeculativeJIT::cachedPutById): * dfg/DFGSpeculativeJIT.h: (JSC::DFG::SpeculativeJIT::callOperation): (JSC::DFG::SpeculativeJIT::appendCall): (JSC::DFG::SpeculativeJIT::appendCallSetResult): * dfg/DFGSpeculativeJIT32_64.cpp: (JSC::DFG::SpeculativeJIT::cachedGetById): (JSC::DFG::SpeculativeJIT::cachedGetByIdWithThis): (JSC::DFG::SpeculativeJIT::compile): * dfg/DFGSpeculativeJIT64.cpp: (JSC::DFG::SpeculativeJIT::cachedGetById): (JSC::DFG::SpeculativeJIT::cachedGetByIdWithThis): (JSC::DFG::SpeculativeJIT::compile): * ftl/FTLLowerDFGToB3.cpp: (JSC::FTL::DFG::LowerDFGToB3::getPrivateName): (JSC::FTL::DFG::LowerDFGToB3::compilePrivateBrandAccess): (JSC::FTL::DFG::LowerDFGToB3::cachedPutById): (JSC::FTL::DFG::LowerDFGToB3::compileGetByVal): (JSC::FTL::DFG::LowerDFGToB3::compileDelBy): (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq): * ftl/FTLSlowPathCall.cpp: (JSC::FTL::SlowPathCallContext::SlowPathCallContext): (JSC::FTL::SlowPathCallContext::keyWithTarget const): (JSC::FTL::SlowPathCallContext::makeCall): * ftl/FTLSlowPathCall.h: (JSC::FTL::callOperation): * ftl/FTLSlowPathCallKey.cpp: (JSC::FTL::SlowPathCallKey::dump const): * ftl/FTLSlowPathCallKey.h: (JSC::FTL::SlowPathCallKey::SlowPathCallKey): (JSC::FTL::SlowPathCallKey::indirectOffset const): (JSC::FTL::SlowPathCallKey::withCallTarget): (JSC::FTL::SlowPathCallKey::operator== const): (JSC::FTL::SlowPathCallKey::hash const): * ftl/FTLThunks.cpp: (JSC::FTL::genericGenerationThunkGenerator): (JSC::FTL::slowPathCallThunkGenerator): * jit/AssemblyHelpers.cpp: (JSC::AssemblyHelpers::emitVirtualCall): * jit/CCallHelpers.cpp: (JSC::CCallHelpers::emitJITCodeOver): * jit/CCallHelpers.h: (JSC::CCallHelpers::ArgCollection::ArgCollection): (JSC::CCallHelpers::ArgCollection::pushRegArg): (JSC::CCallHelpers::ArgCollection::pushExtraRegArg): (JSC::CCallHelpers::ArgCollection::pushNonArg): (JSC::CCallHelpers::ArgCollection::addGPRArg): (JSC::CCallHelpers::ArgCollection::addGPRExtraArg): (JSC::CCallHelpers::ArgCollection::addStackArg): (JSC::CCallHelpers::ArgCollection::addPoke): (JSC::CCallHelpers::calculatePokeOffset): (JSC::CCallHelpers::pokeForArgument): (JSC::CCallHelpers::stackAligned): (JSC::CCallHelpers::marshallArgumentRegister): (JSC::CCallHelpers::setupArgumentsImpl): (JSC::CCallHelpers::pokeArgumentsAligned): (JSC::CCallHelpers::std::is_integral<CURRENT_ARGUMENT_TYPE>::value): (JSC::CCallHelpers::std::is_pointer<CURRENT_ARGUMENT_TYPE>::value): (JSC::CCallHelpers::setupArgumentsEntryImpl): (JSC::CCallHelpers::setupArguments): (JSC::CCallHelpers::setupArgumentsForIndirectCall): * jit/GCAwareJITStubRoutine.cpp: (JSC::GCAwareJITStubRoutine::GCAwareJITStubRoutine): (JSC::GCAwareJITStubRoutine::makeGCAware): (JSC::GCAwareJITStubRoutine::observeZeroRefCount): (JSC::PolymorphicAccessJITStubRoutine::PolymorphicAccessJITStubRoutine): (JSC::PolymorphicAccessJITStubRoutine::observeZeroRefCount): (JSC::PolymorphicAccessJITStubRoutine::computeHash): (JSC::MarkingGCAwareJITStubRoutine::MarkingGCAwareJITStubRoutine): (JSC::GCAwareJITStubRoutineWithExceptionHandler::GCAwareJITStubRoutineWithExceptionHandler): (JSC::createICJITStubRoutine): (JSC::createJITStubRoutine): Deleted. * jit/GCAwareJITStubRoutine.h: (JSC::GCAwareJITStubRoutine::create): (JSC::PolymorphicAccessJITStubRoutine::cases const): (JSC::PolymorphicAccessJITStubRoutine::weakStructures const): (JSC::PolymorphicAccessJITStubRoutine::hash const): * jit/GPRInfo.h: * jit/JIT.cpp: (JSC::JIT::link): * jit/JIT.h: * jit/JITCall.cpp: (JSC::JIT::emit_op_iterator_open): (JSC::JIT::emitSlow_op_iterator_open): (JSC::JIT::emit_op_iterator_next): (JSC::JIT::emitSlow_op_iterator_next): * jit/JITCall32_64.cpp: (JSC::JIT::emit_op_iterator_open): (JSC::JIT::emit_op_iterator_next): * jit/JITCode.h: (JSC::JITCode::useDataIC): * jit/JITInlineCacheGenerator.cpp: (JSC::JITInlineCacheGenerator::JITInlineCacheGenerator): (JSC::JITInlineCacheGenerator::finalize): (JSC::JITByIdGenerator::JITByIdGenerator): (JSC::JITByIdGenerator::finalize): (JSC::JITByIdGenerator::generateFastCommon): (JSC::JITGetByIdGenerator::JITGetByIdGenerator): (JSC::JITGetByIdWithThisGenerator::JITGetByIdWithThisGenerator): (JSC::JITPutByIdGenerator::JITPutByIdGenerator): (JSC::JITDelByValGenerator::JITDelByValGenerator): (JSC::JITDelByValGenerator::generateFastPath): (JSC::JITDelByValGenerator::finalize): (JSC::JITDelByIdGenerator::JITDelByIdGenerator): (JSC::JITDelByIdGenerator::generateFastPath): (JSC::JITDelByIdGenerator::finalize): (JSC::JITInByValGenerator::JITInByValGenerator): (JSC::JITInByValGenerator::generateFastPath): (JSC::JITInByValGenerator::finalize): (JSC::JITInByIdGenerator::JITInByIdGenerator): (JSC::JITInstanceOfGenerator::JITInstanceOfGenerator): (JSC::JITInstanceOfGenerator::generateFastPath): (JSC::JITInstanceOfGenerator::finalize): (JSC::JITGetByValGenerator::JITGetByValGenerator): (JSC::JITGetByValGenerator::generateFastPath): (JSC::JITGetByValGenerator::finalize): (JSC::JITPrivateBrandAccessGenerator::JITPrivateBrandAccessGenerator): (JSC::JITPrivateBrandAccessGenerator::generateFastPath): (JSC::JITPrivateBrandAccessGenerator::finalize): * jit/JITInlineCacheGenerator.h: (JSC::JITGetByIdGenerator::JITGetByIdGenerator): Deleted. (JSC::JITGetByIdWithThisGenerator::JITGetByIdWithThisGenerator): Deleted. (JSC::JITPutByIdGenerator::JITPutByIdGenerator): Deleted. (JSC::JITDelByValGenerator::JITDelByValGenerator): Deleted. (JSC::JITDelByValGenerator::slowPathJump const): Deleted. (JSC::JITDelByIdGenerator::JITDelByIdGenerator): Deleted. (JSC::JITDelByIdGenerator::slowPathJump const): Deleted. (JSC::JITInByIdGenerator::JITInByIdGenerator): Deleted. (JSC::JITInstanceOfGenerator::JITInstanceOfGenerator): Deleted. (JSC::JITGetByValGenerator::JITGetByValGenerator): Deleted. (JSC::JITGetByValGenerator::slowPathJump const): Deleted. (JSC::JITPrivateBrandAccessGenerator::JITPrivateBrandAccessGenerator): Deleted. (JSC::JITPrivateBrandAccessGenerator::slowPathJump const): Deleted. * jit/JITInlines.h: (JSC::JIT::emitLoadForArrayMode): (JSC::JIT::appendCallWithExceptionCheck): (JSC::JIT::appendCallWithExceptionCheckSetJSValueResult): (JSC::JIT::appendCallWithExceptionCheckSetJSValueResultWithProfile): * jit/JITOpcodes.cpp: (JSC::JIT::emit_op_instanceof): (JSC::JIT::emitSlow_op_instanceof): (JSC::JIT::privateCompileHasIndexedProperty): (JSC::JIT::emit_op_has_enumerable_indexed_property): (JSC::JIT::emitSlow_op_has_enumerable_indexed_property): * jit/JITOpcodes32_64.cpp: (JSC::JIT::emit_op_instanceof): (JSC::JIT::privateCompileHasIndexedProperty): (JSC::JIT::emit_op_has_enumerable_indexed_property): * jit/JITOperations.cpp: (JSC::JSC_DEFINE_JIT_OPERATION): * jit/JITPropertyAccess.cpp: (JSC::JIT::emit_op_get_by_val): (JSC::JIT::emitSlow_op_get_by_val): (JSC::JIT::slow_op_get_by_val_prepareCallGenerator): (JSC::JIT::emit_op_get_private_name): (JSC::JIT::emitSlow_op_get_private_name): (JSC::JIT::slow_op_get_private_name_prepareCallGenerator): (JSC::JIT::emit_op_set_private_brand): (JSC::JIT::emitSlow_op_set_private_brand): (JSC::JIT::emit_op_check_private_brand): (JSC::JIT::emitSlow_op_check_private_brand): (JSC::JIT::emit_op_put_by_val): (JSC::JIT::emitGenericContiguousPutByVal): (JSC::JIT::emitArrayStoragePutByVal): (JSC::JIT::emitPutByValWithCachedId): (JSC::JIT::emitSlow_op_put_by_val): (JSC::JIT::slow_op_put_by_val_prepareCallGenerator): (JSC::JIT::emit_op_put_private_name): (JSC::JIT::emitSlow_op_put_private_name): (JSC::JIT::slow_op_put_private_name_prepareCallGenerator): (JSC::JIT::emit_op_del_by_id): (JSC::JIT::emitSlow_op_del_by_id): (JSC::JIT::slow_op_del_by_id_prepareCallGenerator): (JSC::JIT::emit_op_del_by_val): (JSC::JIT::emitSlow_op_del_by_val): (JSC::JIT::slow_op_del_by_val_prepareCallGenerator): (JSC::JIT::emit_op_try_get_by_id): (JSC::JIT::emitSlow_op_try_get_by_id): (JSC::JIT::emit_op_get_by_id_direct): (JSC::JIT::emitSlow_op_get_by_id_direct): (JSC::JIT::emit_op_get_by_id): (JSC::JIT::emit_op_get_by_id_with_this): (JSC::JIT::emitSlow_op_get_by_id): (JSC::JIT::slow_op_get_by_id_prepareCallGenerator): (JSC::JIT::emitSlow_op_get_by_id_with_this): (JSC::JIT::slow_op_get_by_id_with_this_prepareCallGenerator): (JSC::JIT::emit_op_put_by_id): (JSC::JIT::emitSlow_op_put_by_id): (JSC::JIT::slow_op_put_by_id_prepareCallGenerator): (JSC::JIT::emit_op_in_by_id): (JSC::JIT::emitSlow_op_in_by_id): (JSC::JIT::emit_op_in_by_val): (JSC::JIT::emitSlow_op_in_by_val): (JSC::JIT::privateCompilePutByVal): (JSC::JIT::privateCompilePutPrivateNameWithCachedId): (JSC::JIT::privateCompilePutByValWithCachedId): (JSC::JIT::emitDoubleLoad): (JSC::JIT::emitContiguousLoad): (JSC::JIT::emitArrayStorageLoad): (JSC::JIT::emitIntTypedArrayPutByVal): (JSC::JIT::emitFloatTypedArrayPutByVal): * jit/JITPropertyAccess32_64.cpp: (JSC::JIT::emit_op_del_by_id): (JSC::JIT::emit_op_del_by_val): (JSC::JIT::emit_op_get_by_val): (JSC::JIT::emit_op_get_private_name): (JSC::JIT::emit_op_set_private_brand): (JSC::JIT::emit_op_check_private_brand): (JSC::JIT::emit_op_put_by_val): (JSC::JIT::emitGenericContiguousPutByVal): (JSC::JIT::emitArrayStoragePutByVal): (JSC::JIT::emit_op_try_get_by_id): (JSC::JIT::emit_op_get_by_id_direct): (JSC::JIT::emit_op_get_by_id): (JSC::JIT::emit_op_get_by_id_with_this): (JSC::JIT::emit_op_put_by_id): (JSC::JIT::emit_op_in_by_id): (JSC::JIT::emit_op_in_by_val): * jit/JITStubRoutine.h: * jit/PolymorphicCallStubRoutine.cpp: (JSC::PolymorphicCallStubRoutine::PolymorphicCallStubRoutine): * jit/Repatch.cpp: (JSC::readPutICCallTarget): (JSC::repatchSlowPathCall): (JSC::tryCacheGetBy): (JSC::repatchGetBy): (JSC::tryCacheArrayGetByVal): (JSC::repatchArrayGetByVal): (JSC::tryCachePutByID): (JSC::repatchPutByID): (JSC::tryCacheDeleteBy): (JSC::repatchDeleteBy): (JSC::tryCacheInBy): (JSC::repatchInBy): (JSC::tryCacheCheckPrivateBrand): (JSC::repatchCheckPrivateBrand): (JSC::tryCacheSetPrivateBrand): (JSC::repatchSetPrivateBrand): (JSC::tryCacheInstanceOf): (JSC::repatchInstanceOf): (JSC::linkSlowFor): (JSC::linkVirtualFor): (JSC::resetGetBy): (JSC::resetPutByID): (JSC::resetDelBy): (JSC::resetInBy): (JSC::resetInstanceOf): (JSC::resetCheckPrivateBrand): (JSC::resetSetPrivateBrand): (JSC::resetPatchableJump): Deleted. * jit/Repatch.h: * runtime/Options.cpp: (JSC::Options::recomputeDependentOptions): * runtime/OptionsList.h: * runtime/StructureIDTable.h: * runtime/VM.cpp: (JSC::VM::VM): (JSC::VM::~VM): * runtime/VM.h: Tools: * Scripts/run-jsc-stress-tests: Canonical link: https://commits.webkit.org/238638@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@278656 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-06-09 11:17:36 +00:00
template<typename... ArgumentTypes>
SlowPathCall callOperation(
VM& vm, const RegisterSet& usedRegisters, CCallHelpers& jit, CCallHelpers::JumpList* exceptionTarget,
CCallHelpers::Address function, GPRReg resultGPR, ArgumentTypes... arguments)
{
SlowPathCall call;
{
SlowPathCallContext context(usedRegisters, jit, sizeof...(ArgumentTypes) + 1, resultGPR, GPRInfo::nonArgGPR0);
jit.setupArgumentsForIndirectCall<void(ArgumentTypes...)>(function, arguments...);
call = context.makeCall(vm, CCallHelpers::Address(GPRInfo::nonArgGPR0, function.offset));
}
if (exceptionTarget)
exceptionTarget->append(jit.emitExceptionCheck(vm));
return call;
}
template<typename... ArgumentTypes>
SlowPathCall callOperation(
VM& vm, const RegisterSet& usedRegisters, CCallHelpers& jit, CallSiteIndex callSiteIndex,
CCallHelpers::JumpList* exceptionTarget, CCallHelpers::Address function, GPRReg resultGPR,
ArgumentTypes... arguments)
{
if (callSiteIndex) {
jit.store32(
CCallHelpers::TrustedImm32(callSiteIndex.bits()),
CCallHelpers::tagFor(VirtualRegister(CallFrameSlot::argumentCountIncludingThis)));
}
return callOperation(vm, usedRegisters, jit, exceptionTarget, function, resultGPR, arguments...);
}
CallSiteIndex callSiteIndexForCodeOrigin(State&, CodeOrigin);
template<typename... ArgumentTypes>
SlowPathCall callOperation(
State& state, const RegisterSet& usedRegisters, CCallHelpers& jit, CodeOrigin codeOrigin,
CCallHelpers::JumpList* exceptionTarget, CCallHelpers::Address function, GPRReg result, ArgumentTypes... arguments)
{
return callOperation(
state.vm(), usedRegisters, jit, callSiteIndexForCodeOrigin(state, codeOrigin), exceptionTarget, function,
result, arguments...);
}
FTL should be able to do some simple inline caches using LLVM patchpoints https://bugs.webkit.org/show_bug.cgi?id=123164 Source/JavaScriptCore: Reviewed by Mark Hahnenberg. This implements GetById inline caches in the FTL using llvm.webkit.patchpoint. The idea is that we ask LLVM for a nop slide the size of a GetById inline cache and then fill in the code after LLVM compilation is complete. For now, we just use the system calling convention for the arguments and return. We also still make some assumptions about registers that aren't correct. But, most of the scaffolding is there and this will successfully patch an inline cache. * JavaScriptCore.xcodeproj/project.pbxproj: * assembler/AbstractMacroAssembler.h: * assembler/LinkBuffer.cpp: (JSC::LinkBuffer::finalizeCodeWithoutDisassembly): (JSC::LinkBuffer::linkCode): (JSC::LinkBuffer::allocate): * assembler/LinkBuffer.h: (JSC::LinkBuffer::LinkBuffer): (JSC::LinkBuffer::link): * ftl/FTLAbbreviations.h: (JSC::FTL::constNull): (JSC::FTL::buildCall): * ftl/FTLCapabilities.cpp: (JSC::FTL::canCompile): * ftl/FTLCompile.cpp: (JSC::FTL::fixFunctionBasedOnStackMaps): * ftl/FTLInlineCacheDescriptor.h: Added. (JSC::FTL::InlineCacheDescriptor::InlineCacheDescriptor): (JSC::FTL::GetByIdDescriptor::GetByIdDescriptor): (JSC::FTL::GetByIdDescriptor::stackmapID): (JSC::FTL::GetByIdDescriptor::codeOrigin): (JSC::FTL::GetByIdDescriptor::uid): * ftl/FTLInlineCacheSize.cpp: Added. (JSC::FTL::sizeOfGetById): (JSC::FTL::sizeOfPutById): * ftl/FTLInlineCacheSize.h: Added. * ftl/FTLIntrinsicRepository.h: * ftl/FTLJITFinalizer.cpp: (JSC::FTL::JITFinalizer::finalizeFunction): * ftl/FTLJITFinalizer.h: * ftl/FTLLocation.cpp: (JSC::FTL::Location::directGPR): * ftl/FTLLocation.h: * ftl/FTLLowerDFGToLLVM.cpp: (JSC::FTL::LowerDFGToLLVM::compileGetById): * ftl/FTLOutput.h: (JSC::FTL::Output::call): * ftl/FTLSlowPathCall.cpp: Added. (JSC::FTL::callOperation): * ftl/FTLSlowPathCall.h: Added. (JSC::FTL::SlowPathCall::SlowPathCall): (JSC::FTL::SlowPathCall::call): (JSC::FTL::SlowPathCall::key): * ftl/FTLSlowPathCallKey.cpp: Added. (JSC::FTL::SlowPathCallKey::dump): * ftl/FTLSlowPathCallKey.h: Added. (JSC::FTL::SlowPathCallKey::SlowPathCallKey): (JSC::FTL::SlowPathCallKey::usedRegisters): (JSC::FTL::SlowPathCallKey::callTarget): (JSC::FTL::SlowPathCallKey::offset): (JSC::FTL::SlowPathCallKey::isEmptyValue): (JSC::FTL::SlowPathCallKey::isDeletedValue): (JSC::FTL::SlowPathCallKey::operator==): (JSC::FTL::SlowPathCallKey::hash): (JSC::FTL::SlowPathCallKeyHash::hash): (JSC::FTL::SlowPathCallKeyHash::equal): * ftl/FTLStackMaps.cpp: (JSC::FTL::StackMaps::Location::directGPR): * ftl/FTLStackMaps.h: * ftl/FTLState.h: * ftl/FTLThunks.cpp: (JSC::FTL::slowPathCallThunkGenerator): * ftl/FTLThunks.h: (JSC::FTL::Thunks::getSlowPathCallThunk): * jit/CCallHelpers.h: (JSC::CCallHelpers::setupArguments): * jit/GPRInfo.h: * jit/JITInlineCacheGenerator.cpp: (JSC::garbageStubInfo): (JSC::JITInlineCacheGenerator::JITInlineCacheGenerator): (JSC::JITByIdGenerator::finalize): * jit/JITInlineCacheGenerator.h: (JSC::JITByIdGenerator::slowPathBegin): * jit/RegisterSet.cpp: (JSC::RegisterSet::stackRegisters): (JSC::RegisterSet::specialRegisters): (JSC::RegisterSet::calleeSaveRegisters): (JSC::RegisterSet::allGPRs): (JSC::RegisterSet::allFPRs): (JSC::RegisterSet::allRegisters): (JSC::RegisterSet::dump): * jit/RegisterSet.h: (JSC::RegisterSet::exclude): (JSC::RegisterSet::numberOfSetRegisters): (JSC::RegisterSet::RegisterSet): (JSC::RegisterSet::isEmptyValue): (JSC::RegisterSet::isDeletedValue): (JSC::RegisterSet::operator==): (JSC::RegisterSet::hash): (JSC::RegisterSetHash::hash): (JSC::RegisterSetHash::equal): * runtime/Options.h: Source/WTF: Reviewed by Mark Hahnenberg. This needed some better bitvector support, like merging (|=), excluding (&=~), hashing, and bit counting. * wtf/BitVector.cpp: (WTF::BitVector::setSlow): (WTF::BitVector::excludeSlow): (WTF::BitVector::bitCountSlow): (WTF::BitVector::equalsSlowCase): (WTF::BitVector::hashSlowCase): (WTF::BitVector::dump): * wtf/BitVector.h: (WTF::BitVector::merge): (WTF::BitVector::exclude): (WTF::BitVector::bitCount): (WTF::BitVector::BitVector): (WTF::BitVector::isEmptyValue): (WTF::BitVector::isDeletedValue): (WTF::BitVector::isEmptyOrDeletedValue): (WTF::BitVector::operator==): (WTF::BitVector::hash): (WTF::BitVectorHash::hash): (WTF::BitVectorHash::equal): * wtf/HashTraits.h: (WTF::CustomHashTraits::constructDeletedValue): (WTF::CustomHashTraits::isDeletedValue): (WTF::CustomHashTraits::emptyValue): (WTF::CustomHashTraits::isEmptyValue): * wtf/StdLibExtras.h: (WTF::bitCount): Canonical link: https://commits.webkit.org/141315@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@157872 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-10-23 18:22:09 +00:00
} } // namespace JSC::FTL
#endif // ENABLE(FTL_JIT)