Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (285077 => 285078)
--- trunk/Source/_javascript_Core/ChangeLog 2021-10-30 06:28:57 UTC (rev 285077)
+++ trunk/Source/_javascript_Core/ChangeLog 2021-10-30 06:48:10 UTC (rev 285078)
@@ -1,5 +1,125 @@
2021-10-29 Yusuke Suzuki <ysuz...@apple.com>
+ [JSC] Having StructureStubInfo and CallLinkInfo via FixedVector for Baseline JIT
+ https://bugs.webkit.org/show_bug.cgi?id=232521
+
+ Reviewed by Saam Barati.
+
+ We know # of StructureStubInfo and # of CallLinkInfo after compiling Baseline JIT code.
+ So when installing a code into CodeBlock, we do not need to use Bag<>. Instead we can just
+ use FixedVector to allocate these instances.
+
+ We keep FixedVector<StructureStubInfo> and FixedVector<CallLinkInfo> in JITData for Baseline JIT.
+ And moving Bag<StructureStubInfo> and Bag<CallLinkInfo> to DFG::CommonData when they are instantiated
+ for DFG / FTL codes.
+
+ * bytecode/CallLinkInfo.cpp:
+ (JSC::CallLinkInfo::CallLinkInfo): Deleted.
+ * bytecode/CallLinkInfo.h:
+ (JSC::CallLinkInfo::CallLinkInfo):
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::setupWithUnlinkedBaselineCode):
+ (JSC::CodeBlock::~CodeBlock):
+ (JSC::CodeBlock::propagateTransitions):
+ (JSC::CodeBlock::finalizeJITInlineCaches):
+ (JSC::CodeBlock::getICStatusMap):
+ (JSC::CodeBlock::findStubInfo):
+ (JSC::CodeBlock::getCallLinkInfoForBytecodeIndex):
+ (JSC::CodeBlock::resetJITData):
+ (JSC::CodeBlock::stronglyVisitStrongReferences):
+ (JSC::CodeBlock::jettison):
+ (JSC::CodeBlock::findPC):
+ (JSC::CodeBlock::addOptimizingStubInfo): Deleted.
+ (JSC::CodeBlock::addCallLinkInfo): Deleted.
+ * bytecode/CodeBlock.h:
+ * bytecode/StructureStubInfo.cpp:
+ (JSC::StructureStubInfo::StructureStubInfo): Deleted.
+ * bytecode/StructureStubInfo.h:
+ (JSC::StructureStubInfo::StructureStubInfo):
+ * dfg/DFGCommonData.h:
+ (JSC::DFG::CommonData::addCallLinkInfo):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::compileDeleteById):
+ (JSC::DFG::SpeculativeJIT::compileDeleteByVal):
+ (JSC::DFG::SpeculativeJIT::compileInById):
+ (JSC::DFG::SpeculativeJIT::compileInByVal):
+ (JSC::DFG::SpeculativeJIT::compileHasPrivate):
+ (JSC::DFG::SpeculativeJIT::compileGetPrivateNameByVal):
+ (JSC::DFG::SpeculativeJIT::compilePutPrivateName):
+ (JSC::DFG::SpeculativeJIT::compileCheckPrivateBrand):
+ (JSC::DFG::SpeculativeJIT::compileSetPrivateBrand):
+ (JSC::DFG::SpeculativeJIT::compileInstanceOfForCells):
+ (JSC::DFG::SpeculativeJIT::cachedPutById):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::cachedGetById):
+ (JSC::DFG::SpeculativeJIT::cachedGetByIdWithThis):
+ (JSC::DFG::SpeculativeJIT::emitCall):
+ (JSC::DFG::SpeculativeJIT::compileGetByVal):
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::cachedGetById):
+ (JSC::DFG::SpeculativeJIT::cachedGetByIdWithThis):
+ (JSC::DFG::SpeculativeJIT::emitCall):
+ (JSC::DFG::SpeculativeJIT::compileGetByVal):
+ (JSC::DFG::SpeculativeJIT::compile):
+ * ftl/FTLLowerDFGToB3.cpp:
+ (JSC::FTL::DFG::LowerDFGToB3::getPrivateName):
+ (JSC::FTL::DFG::LowerDFGToB3::compilePrivateBrandAccess):
+ (JSC::FTL::DFG::LowerDFGToB3::compilePutPrivateName):
+ (JSC::FTL::DFG::LowerDFGToB3::cachedPutById):
+ (JSC::FTL::DFG::LowerDFGToB3::compileGetByValImpl):
+ (JSC::FTL::DFG::LowerDFGToB3::compilePutByVal):
+ (JSC::FTL::DFG::LowerDFGToB3::compileDelBy):
+ (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):
+ * jit/BaselineJITCode.h:
+ * jit/JIT.cpp:
+ (JSC::JIT::addUnlinkedCallLinkInfo):
+ (JSC::JIT::link):
+ * jit/JIT.h:
+ * jit/JITCall.cpp:
+ (JSC::JIT::compileOpCall):
+ (JSC::JIT::emit_op_iterator_open):
+ (JSC::JIT::emit_op_iterator_next):
+ * jit/JITInlineCacheGenerator.cpp:
+ (JSC::JITInlineCacheGenerator::JITInlineCacheGenerator):
+ (JSC::JITByIdGenerator::JITByIdGenerator):
+ (JSC::JITGetByIdGenerator::JITGetByIdGenerator):
+ (JSC::JITGetByIdWithThisGenerator::JITGetByIdWithThisGenerator):
+ (JSC::JITPutByIdGenerator::JITPutByIdGenerator):
+ (JSC::JITDelByValGenerator::JITDelByValGenerator):
+ (JSC::JITDelByIdGenerator::JITDelByIdGenerator):
+ (JSC::JITInByValGenerator::JITInByValGenerator):
+ (JSC::JITInByIdGenerator::JITInByIdGenerator):
+ (JSC::JITInstanceOfGenerator::JITInstanceOfGenerator):
+ (JSC::JITGetByValGenerator::JITGetByValGenerator):
+ (JSC::JITPutByValGenerator::JITPutByValGenerator):
+ (JSC::JITPrivateBrandAccessGenerator::JITPrivateBrandAccessGenerator):
+ * jit/JITInlineCacheGenerator.h:
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_instanceof):
+ * jit/JITOpcodes32_64.cpp:
+ (JSC::JIT::emit_op_instanceof):
+ * jit/JITPropertyAccess.cpp:
+ (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::emit_op_put_private_name):
+ (JSC::JIT::emit_op_del_by_id):
+ (JSC::JIT::emit_op_del_by_val):
+ (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):
+ (JSC::JIT::emitHasPrivate):
+ (JSC::JIT::emit_op_enumerator_get_by_val):
+
+2021-10-29 Yusuke Suzuki <ysuz...@apple.com>
+
[JSC] Clean up Baseline StructureStubInfo management
https://bugs.webkit.org/show_bug.cgi?id=232513
Modified: trunk/Source/_javascript_Core/bytecode/CallLinkInfo.cpp (285077 => 285078)
--- trunk/Source/_javascript_Core/bytecode/CallLinkInfo.cpp 2021-10-30 06:28:57 UTC (rev 285077)
+++ trunk/Source/_javascript_Core/bytecode/CallLinkInfo.cpp 2021-10-30 06:48:10 UTC (rev 285078)
@@ -72,19 +72,6 @@
return Call;
}
-CallLinkInfo::CallLinkInfo(CodeOrigin codeOrigin)
- : m_codeOrigin(codeOrigin)
- , m_hasSeenShouldRepatch(false)
- , m_hasSeenClosure(false)
- , m_clearedByGC(false)
- , m_clearedByVirtual(false)
- , m_allowStubs(true)
- , m_clearedByJettison(false)
- , m_callType(None)
- , m_useDataIC(static_cast<unsigned>(UseDataIC::Yes))
-{
-}
-
CallLinkInfo::~CallLinkInfo()
{
clearStub();
Modified: trunk/Source/_javascript_Core/bytecode/CallLinkInfo.h (285077 => 285078)
--- trunk/Source/_javascript_Core/bytecode/CallLinkInfo.h 2021-10-30 06:28:57 UTC (rev 285077)
+++ trunk/Source/_javascript_Core/bytecode/CallLinkInfo.h 2021-10-30 06:48:10 UTC (rev 285078)
@@ -75,8 +75,24 @@
}
}
- CallLinkInfo(CodeOrigin);
-
+ CallLinkInfo(CodeOrigin codeOrigin)
+ : m_codeOrigin(codeOrigin)
+ , m_hasSeenShouldRepatch(false)
+ , m_hasSeenClosure(false)
+ , m_clearedByGC(false)
+ , m_clearedByVirtual(false)
+ , m_allowStubs(true)
+ , m_clearedByJettison(false)
+ , m_callType(None)
+ , m_useDataIC(static_cast<unsigned>(UseDataIC::Yes))
+ {
+ }
+
+ CallLinkInfo()
+ : CallLinkInfo(CodeOrigin { })
+ {
+ }
+
~CallLinkInfo();
static CodeSpecializationKind specializationKindFor(CallType callType)
Modified: trunk/Source/_javascript_Core/bytecode/CodeBlock.cpp (285077 => 285078)
--- trunk/Source/_javascript_Core/bytecode/CodeBlock.cpp 2021-10-30 06:28:57 UTC (rev 285077)
+++ trunk/Source/_javascript_Core/bytecode/CodeBlock.cpp 2021-10-30 06:48:10 UTC (rev 285078)
@@ -782,6 +782,8 @@
RELEASE_ASSERT(jitData.m_jitConstantPool.isEmpty());
jitData.m_jitConstantPool = FixedVector<void*>(jitCode->m_constantPool.size());
+ jitData.m_stubInfos = FixedVector<StructureStubInfo>(jitCode->m_unlinkedStubInfos.size());
+ jitData.m_callLinkInfos = FixedVector<CallLinkInfo>(jitCode->m_unlinkedCalls.size());
for (size_t i = 0; i < jitCode->m_constantPool.size(); ++i) {
auto entry = jitCode->m_constantPool.at(i);
switch (entry.type()) {
@@ -789,17 +791,19 @@
jitData.m_jitConstantPool[i] = m_globalObject.get();
break;
case JITConstantPool::Type::CallLinkInfo: {
- UnlinkedCallLinkInfo& unlinkedCallLinkInfo = *static_cast<UnlinkedCallLinkInfo*>(entry.pointer());
- CallLinkInfo* callLinkInfo = jitData.m_callLinkInfos.add(CodeOrigin(unlinkedCallLinkInfo.bytecodeIndex));
- callLinkInfo->initializeDataIC(vm(), unlinkedCallLinkInfo, GPRInfo::regT0, GPRInfo::regT2);
- jitData.m_jitConstantPool[i] = callLinkInfo;
+ unsigned index = bitwise_cast<uintptr_t>(entry.pointer());
+ UnlinkedCallLinkInfo& unlinkedCallLinkInfo = jitCode->m_unlinkedCalls[index];
+ CallLinkInfo& callLinkInfo = jitData.m_callLinkInfos[index];
+ callLinkInfo.initializeDataIC(vm(), unlinkedCallLinkInfo, GPRInfo::regT0, GPRInfo::regT2);
+ jitData.m_jitConstantPool[i] = &callLinkInfo;
break;
}
case JITConstantPool::Type::StructureStubInfo: {
- UnlinkedStructureStubInfo& unlinkedStubInfo = jitCode->m_unlinkedStubInfos[bitwise_cast<uintptr_t>(entry.pointer())];
- StructureStubInfo* stubInfo = jitData.m_stubInfos.add(unlinkedStubInfo.accessType, CodeOrigin(unlinkedStubInfo.bytecodeIndex));
- stubInfo->initializeFromUnlinkedStructureStubInfo(this, unlinkedStubInfo);
- jitData.m_jitConstantPool[i] = stubInfo;
+ unsigned index = bitwise_cast<uintptr_t>(entry.pointer());
+ UnlinkedStructureStubInfo& unlinkedStubInfo = jitCode->m_unlinkedStubInfos[index];
+ StructureStubInfo& stubInfo = jitData.m_stubInfos[index];
+ stubInfo.initializeFromUnlinkedStructureStubInfo(this, unlinkedStubInfo);
+ jitData.m_jitConstantPool[i] = &stubInfo;
break;
}
case JITConstantPool::Type::FunctionDecl: {
@@ -899,11 +903,19 @@
#if ENABLE(JIT)
if (auto* jitData = m_jitData.get()) {
- for (StructureStubInfo* stubInfo : jitData->m_stubInfos) {
+ for (auto& stubInfo : jitData->m_stubInfos) {
+ stubInfo.aboutToDie();
+ stubInfo.deref();
+ }
+ }
+#if ENABLE(DFG_JIT)
+ if (JITCode::isOptimizingJIT(jitType())) {
+ for (auto* stubInfo : jitCode()->dfgCommon()->m_stubInfos) {
stubInfo->aboutToDie();
stubInfo->deref();
}
}
+#endif
#endif // ENABLE(JIT)
}
@@ -1235,10 +1247,16 @@
#if ENABLE(JIT)
if (JITCode::isJIT(jitType())) {
if (auto* jitData = m_jitData.get()) {
- for (StructureStubInfo* stubInfo : jitData->m_stubInfos)
- stubInfo->propagateTransitions(visitor);
+ for (auto& stubInfo : jitData->m_stubInfos)
+ stubInfo.propagateTransitions(visitor);
}
}
+#if ENABLE(DFG_JIT)
+ if (JITCode::isOptimizingJIT(jitType())) {
+ for (auto* stubInfo : jitCode()->dfgCommon()->m_stubInfos)
+ stubInfo->propagateTransitions(visitor);
+ }
+#endif
#endif // ENABLE(JIT)
#if ENABLE(DFG_JIT)
@@ -1575,16 +1593,26 @@
void CodeBlock::finalizeJITInlineCaches()
{
if (auto* jitData = m_jitData.get()) {
- for (CallLinkInfo* callLinkInfo : jitData->m_callLinkInfos)
+ for (auto& callLinkInfo : jitData->m_callLinkInfos)
+ callLinkInfo.visitWeak(vm());
+ for (auto& stubInfo : jitData->m_stubInfos) {
+ ConcurrentJSLockerBase locker(NoLockingNecessary);
+ stubInfo.visitWeakReferences(locker, this);
+ }
+ }
+
+#if ENABLE(DFG_JIT)
+ if (JITCode::isOptimizingJIT(jitType())) {
+ DFG::CommonData* dfgCommon = m_jitCode->dfgCommon();
+ for (auto* callLinkInfo : dfgCommon->m_callLinkInfos)
callLinkInfo->visitWeak(vm());
-
- for (StructureStubInfo* stubInfo : jitData->m_stubInfos) {
+ for (auto* stubInfo : dfgCommon->m_stubInfos) {
ConcurrentJSLockerBase locker(NoLockingNecessary);
stubInfo->visitWeakReferences(locker, this);
}
}
+#endif
-
#if ASSERT_ENABLED
if (jitType() == JITType::BaselineJIT) {
// Verify we don't need to finalize these since they're virtual calls.
@@ -1674,14 +1702,18 @@
#if ENABLE(JIT)
if (JITCode::isJIT(jitType())) {
if (auto* jitData = m_jitData.get()) {
- for (StructureStubInfo* stubInfo : jitData->m_stubInfos)
- result.add(stubInfo->codeOrigin, ICStatus()).iterator->value.stubInfo = stubInfo;
- for (CallLinkInfo* callLinkInfo : jitData->m_callLinkInfos)
- result.add(callLinkInfo->codeOrigin(), ICStatus()).iterator->value.callLinkInfo = callLinkInfo;
+ for (auto& stubInfo : jitData->m_stubInfos)
+ result.add(stubInfo.codeOrigin, ICStatus()).iterator->value.stubInfo = &stubInfo;
+ for (auto& callLinkInfo : jitData->m_callLinkInfos)
+ result.add(callLinkInfo.codeOrigin(), ICStatus()).iterator->value.callLinkInfo = &callLinkInfo;
}
#if ENABLE(DFG_JIT)
if (JITCode::isOptimizingJIT(jitType())) {
DFG::CommonData* dfgCommon = m_jitCode->dfgCommon();
+ for (auto* stubInfo : dfgCommon->m_stubInfos)
+ result.add(stubInfo->codeOrigin, ICStatus()).iterator->value.stubInfo = stubInfo;
+ for (auto* callLinkInfo : dfgCommon->m_callLinkInfos)
+ result.add(callLinkInfo->codeOrigin(), ICStatus()).iterator->value.callLinkInfo = callLinkInfo;
for (auto& pair : dfgCommon->recordedStatuses.calls)
result.add(pair.first, ICStatus()).iterator->value.callStatus = pair.second.get();
for (auto& pair : dfgCommon->recordedStatuses.gets)
@@ -1707,39 +1739,45 @@
}
#if ENABLE(JIT)
-StructureStubInfo* CodeBlock::addOptimizingStubInfo(AccessType accessType, CodeOrigin codeOrigin)
-{
- ConcurrentJSLocker locker(m_lock);
- return ensureJITData(locker).m_stubInfos.add(accessType, codeOrigin);
-}
-
StructureStubInfo* CodeBlock::findStubInfo(CodeOrigin codeOrigin)
{
ConcurrentJSLocker locker(m_lock);
if (auto* jitData = m_jitData.get()) {
- for (StructureStubInfo* stubInfo : jitData->m_stubInfos) {
+ for (auto& stubInfo : jitData->m_stubInfos) {
+ if (stubInfo.codeOrigin == codeOrigin)
+ return &stubInfo;
+ }
+ }
+
+#if ENABLE(DFG_JIT)
+ if (JITCode::isOptimizingJIT(jitType())) {
+ for (auto* stubInfo : jitCode()->dfgCommon()->m_stubInfos) {
if (stubInfo->codeOrigin == codeOrigin)
return stubInfo;
}
}
+#endif
return nullptr;
}
-CallLinkInfo* CodeBlock::addCallLinkInfo(CodeOrigin codeOrigin)
-{
- ConcurrentJSLocker locker(m_lock);
- return ensureJITData(locker).m_callLinkInfos.add(codeOrigin);
-}
-
CallLinkInfo* CodeBlock::getCallLinkInfoForBytecodeIndex(BytecodeIndex index)
{
ConcurrentJSLocker locker(m_lock);
if (auto* jitData = m_jitData.get()) {
- for (CallLinkInfo* callLinkInfo : jitData->m_callLinkInfos) {
+ for (auto& callLinkInfo : jitData->m_callLinkInfos) {
+ if (callLinkInfo.codeOrigin() == CodeOrigin(index))
+ return &callLinkInfo;
+ }
+ }
+#if ENABLE(DFG_JIT)
+ if (JITCode::isOptimizingJIT(jitType())) {
+ DFG::CommonData* dfgCommon = m_jitCode->dfgCommon();
+ for (auto* callLinkInfo : dfgCommon->m_callLinkInfos) {
if (callLinkInfo->codeOrigin() == CodeOrigin(index))
return callLinkInfo;
}
}
+#endif
return nullptr;
}
@@ -1781,9 +1819,9 @@
// these *infos, but when we have an OSR exit linked to this CodeBlock, we won't downgrade
// to LLInt.
- for (StructureStubInfo* stubInfo : jitData->m_stubInfos) {
- stubInfo->aboutToDie();
- stubInfo->deref();
+ for (auto& stubInfo : jitData->m_stubInfos) {
+ stubInfo.aboutToDie();
+ stubInfo.deref();
}
// We can clear this because the DFG's queries to these data structures are guarded by whether
@@ -1836,8 +1874,8 @@
#if ENABLE(JIT)
if (auto* jitData = m_jitData.get()) {
- for (StructureStubInfo* stubInfo : jitData->m_stubInfos)
- stubInfo->visitAggregate(visitor);
+ for (auto& stubInfo : jitData->m_stubInfos)
+ stubInfo.visitAggregate(visitor);
}
#endif
@@ -1844,6 +1882,8 @@
#if ENABLE(DFG_JIT)
if (JITCode::isOptimizingJIT(jitType())) {
DFG::CommonData* dfgCommon = m_jitCode->dfgCommon();
+ for (auto* stubInfo : dfgCommon->m_stubInfos)
+ stubInfo->visitAggregate(visitor);
dfgCommon->recordedStatuses.visitAggregate(visitor);
visitOSRExitTargets(locker, visitor);
}
@@ -2293,9 +2333,16 @@
{
ConcurrentJSLocker locker(m_lock);
if (JITData* jitData = m_jitData.get()) {
- for (CallLinkInfo* callLinkInfo : jitData->m_callLinkInfos)
+ for (auto& callLinkInfo : jitData->m_callLinkInfos)
+ callLinkInfo.setClearedByJettison();
+ }
+#if ENABLE(DFG_JIT)
+ if (JITCode::isOptimizingJIT(jitType())) {
+ DFG::CommonData* dfgCommon = m_jitCode->dfgCommon();
+ for (auto* callLinkInfo : dfgCommon->m_callLinkInfos)
callLinkInfo->setClearedByJettison();
}
+#endif
}
#endif
@@ -3496,17 +3543,23 @@
{
ConcurrentJSLocker locker(m_lock);
if (auto* jitData = m_jitData.get()) {
- for (StructureStubInfo* stubInfo : jitData->m_stubInfos) {
+ for (auto& stubInfo : jitData->m_stubInfos) {
+ if (stubInfo.containsPC(pc))
+ return stubInfo.codeOrigin;
+ }
+ }
+#if ENABLE(DFG_JIT)
+ if (JITCode::isOptimizingJIT(jitType())) {
+ DFG::CommonData* dfgCommon = m_jitCode->dfgCommon();
+ for (auto* stubInfo : dfgCommon->m_stubInfos) {
if (stubInfo->containsPC(pc))
- return std::optional<CodeOrigin>(stubInfo->codeOrigin);
+ return stubInfo->codeOrigin;
}
}
+#endif
}
- if (std::optional<CodeOrigin> codeOrigin = m_jitCode->findPC(this, pc))
- return codeOrigin;
-
- return std::nullopt;
+ return m_jitCode->findPC(this, pc);
}
#endif // ENABLE(JIT)
Modified: trunk/Source/_javascript_Core/bytecode/CodeBlock.h (285077 => 285078)
--- trunk/Source/_javascript_Core/bytecode/CodeBlock.h 2021-10-30 06:28:57 UTC (rev 285077)
+++ trunk/Source/_javascript_Core/bytecode/CodeBlock.h 2021-10-30 06:48:10 UTC (rev 285078)
@@ -68,7 +68,6 @@
#include "ValueProfile.h"
#include "VirtualRegister.h"
#include "Watchpoint.h"
-#include <wtf/Bag.h>
#include <wtf/FastMalloc.h>
#include <wtf/FixedVector.h>
#include <wtf/HashSet.h>
@@ -261,8 +260,8 @@
WTF_MAKE_STRUCT_FAST_ALLOCATED;
friend class LLIntOffsetsExtractor;
- Bag<StructureStubInfo> m_stubInfos;
- Bag<CallLinkInfo> m_callLinkInfos;
+ FixedVector<StructureStubInfo> m_stubInfos;
+ FixedVector<CallLinkInfo> m_callLinkInfos;
SentinelLinkedList<CallLinkInfo, PackedRawSentinelNode<CallLinkInfo>> m_incomingCalls;
SentinelLinkedList<PolymorphicCallNode, PackedRawSentinelNode<PolymorphicCallNode>> m_incomingPolymorphicCalls;
bool m_hasCalleeSaveRegisters { false };
@@ -289,8 +288,6 @@
// O(n) operation. Use getICStatusMap() unless you really only intend to get one stub info.
StructureStubInfo* findStubInfo(CodeOrigin);
- CallLinkInfo* addCallLinkInfo(CodeOrigin);
-
// This is a slow function call used primarily for compiling OSR exits in the case
// that there had been inlining. Chances are if you want to use this, you're really
// looking for a CallLinkInfoMap to amortize the cost of calling this.
Modified: trunk/Source/_javascript_Core/bytecode/StructureStubInfo.cpp (285077 => 285078)
--- trunk/Source/_javascript_Core/bytecode/StructureStubInfo.cpp 2021-10-30 06:28:57 UTC (rev 285077)
+++ trunk/Source/_javascript_Core/bytecode/StructureStubInfo.cpp 2021-10-30 06:48:10 UTC (rev 285078)
@@ -39,23 +39,6 @@
static constexpr bool verbose = false;
}
-StructureStubInfo::StructureStubInfo(AccessType accessType, CodeOrigin codeOrigin)
- : codeOrigin(codeOrigin)
- , accessType(accessType)
- , bufferingCountdown(Options::repatchBufferingCountdown())
- , resetByGC(false)
- , tookSlowPath(false)
- , everConsidered(false)
- , prototypeIsKnownObject(false)
- , sawNonCell(false)
- , hasConstantIdentifier(true)
- , propertyIsString(false)
- , propertyIsInt32(false)
- , propertyIsSymbol(false)
-{
- regs.thisGPR = InvalidGPRReg;
-}
-
StructureStubInfo::~StructureStubInfo()
{
}
Modified: trunk/Source/_javascript_Core/bytecode/StructureStubInfo.h (285077 => 285078)
--- trunk/Source/_javascript_Core/bytecode/StructureStubInfo.h 2021-10-30 06:28:57 UTC (rev 285077)
+++ trunk/Source/_javascript_Core/bytecode/StructureStubInfo.h 2021-10-30 06:48:10 UTC (rev 285078)
@@ -86,7 +86,27 @@
WTF_MAKE_NONCOPYABLE(StructureStubInfo);
WTF_MAKE_FAST_ALLOCATED;
public:
- StructureStubInfo(AccessType, CodeOrigin);
+ StructureStubInfo(AccessType accessType, CodeOrigin codeOrigin)
+ : codeOrigin(codeOrigin)
+ , accessType(accessType)
+ , bufferingCountdown(Options::repatchBufferingCountdown())
+ , resetByGC(false)
+ , tookSlowPath(false)
+ , everConsidered(false)
+ , prototypeIsKnownObject(false)
+ , sawNonCell(false)
+ , hasConstantIdentifier(true)
+ , propertyIsString(false)
+ , propertyIsInt32(false)
+ , propertyIsSymbol(false)
+ {
+ regs.thisGPR = InvalidGPRReg;
+ }
+
+ StructureStubInfo()
+ : StructureStubInfo(AccessType::GetById, { })
+ { }
+
~StructureStubInfo();
void initGetByIdSelf(const ConcurrentJSLockerBase&, CodeBlock*, Structure* inlineAccessBaseStructure, PropertyOffset, CacheableIdentifier);
Modified: trunk/Source/_javascript_Core/dfg/DFGCommonData.h (285077 => 285078)
--- trunk/Source/_javascript_Core/dfg/DFGCommonData.h 2021-10-30 06:28:57 UTC (rev 285077)
+++ trunk/Source/_javascript_Core/dfg/DFGCommonData.h 2021-10-30 06:48:10 UTC (rev 285078)
@@ -28,6 +28,7 @@
#if ENABLE(DFG_JIT)
#include "BaselineJITCode.h"
+#include "CallLinkInfo.h"
#include "CodeBlockJettisoningWatchpoint.h"
#include "DFGAdaptiveInferredPropertyValueWatchpoint.h"
#include "DFGAdaptiveStructureWatchpoint.h"
@@ -40,6 +41,7 @@
#include "PCToCodeOriginMap.h"
#include "ProfilerCompilation.h"
#include "RecordedStatuses.h"
+#include "StructureStubInfo.h"
#include <wtf/Bag.h>
#include <wtf/Noncopyable.h>
@@ -108,6 +110,11 @@
void clearWatchpoints();
+ CallLinkInfo* addCallLinkInfo(CodeOrigin codeOrigin)
+ {
+ return m_callLinkInfos.add(codeOrigin);
+ }
+
RefPtr<InlineCallFrameSet> inlineCallFrames;
Ref<CodeOriginPool> codeOrigins;
@@ -122,6 +129,8 @@
std::unique_ptr<PCToCodeOriginMap> m_pcToCodeOriginMap;
RecordedStatuses recordedStatuses;
Vector<JumpReplacement> m_jumpReplacements;
+ Bag<StructureStubInfo> m_stubInfos;
+ Bag<CallLinkInfo> m_callLinkInfos;
ScratchBuffer* catchOSREntryBuffer;
RefPtr<Profiler::Compilation> compilation;
Modified: trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT.cpp (285077 => 285078)
--- trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT.cpp 2021-10-30 06:28:57 UTC (rev 285077)
+++ trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT.cpp 2021-10-30 06:48:10 UTC (rev 285078)
@@ -1179,7 +1179,7 @@
RegisterSet usedRegisters = this->usedRegisters();
JITDelByIdGenerator gen(
- m_jit.codeBlock(), JITType::DFGJIT, codeOrigin, callSite, usedRegisters, node->cacheableIdentifier(),
+ m_jit.codeBlock(), &m_jit.jitCode()->common.m_stubInfos, JITType::DFGJIT, codeOrigin, callSite, usedRegisters, node->cacheableIdentifier(),
JSValueRegs::payloadOnly(baseGPR), resultRegs, stubInfoGPR, scratchGPR);
gen.generateFastPath(m_jit);
@@ -1265,7 +1265,7 @@
RegisterSet usedRegisters = this->usedRegisters();
JITDelByValGenerator gen(
- m_jit.codeBlock(), JITType::DFGJIT, codeOrigin, callSite, usedRegisters,
+ m_jit.codeBlock(), &m_jit.jitCode()->common.m_stubInfos, JITType::DFGJIT, codeOrigin, callSite, usedRegisters,
JSValueRegs::payloadOnly(baseGPR), keyRegs, resultRegs, stubInfoGPR, scratchGPR);
gen.generateFastPath(m_jit);
@@ -1340,7 +1340,7 @@
CallSiteIndex callSite = m_jit.recordCallSiteAndGenerateExceptionHandlingOSRExitIfNeeded(codeOrigin, m_stream->size());
RegisterSet usedRegisters = this->usedRegisters();
JITInByIdGenerator gen(
- m_jit.codeBlock(), JITType::DFGJIT, codeOrigin, callSite, usedRegisters, node->cacheableIdentifier(),
+ m_jit.codeBlock(), &m_jit.jitCode()->common.m_stubInfos, JITType::DFGJIT, codeOrigin, callSite, usedRegisters, node->cacheableIdentifier(),
JSValueRegs::payloadOnly(baseGPR), resultRegs, stubInfoGPR);
gen.generateFastPath(m_jit);
@@ -1391,7 +1391,7 @@
CallSiteIndex callSite = m_jit.recordCallSiteAndGenerateExceptionHandlingOSRExitIfNeeded(codeOrigin, m_stream->size());
RegisterSet usedRegisters = this->usedRegisters();
JITInByValGenerator gen(
- m_jit.codeBlock(), JITType::DFGJIT, codeOrigin, callSite, AccessType::InByVal, usedRegisters,
+ m_jit.codeBlock(), &m_jit.jitCode()->common.m_stubInfos, JITType::DFGJIT, codeOrigin, callSite, AccessType::InByVal, usedRegisters,
JSValueRegs::payloadOnly(baseGPR), keyRegs, resultRegs, stubInfoGPR);
gen.generateFastPath(m_jit);
if (!JITCode::useDataIC(JITType::DFGJIT))
@@ -1443,7 +1443,7 @@
CallSiteIndex callSite = m_jit.recordCallSiteAndGenerateExceptionHandlingOSRExitIfNeeded(codeOrigin, m_stream->size());
RegisterSet usedRegisters = this->usedRegisters();
JITInByValGenerator gen(
- m_jit.codeBlock(), JITType::DFGJIT, codeOrigin, callSite, type, usedRegisters,
+ m_jit.codeBlock(), &m_jit.jitCode()->common.m_stubInfos, JITType::DFGJIT, codeOrigin, callSite, type, usedRegisters,
JSValueRegs::payloadOnly(baseGPR), JSValueRegs::payloadOnly(propertyOrBrandGPR), resultRegs, stubInfoGPR);
gen.stubInfo()->propertyIsSymbol = true;
@@ -3840,7 +3840,7 @@
slowCases.append(m_jit.branchIfNotCell(base));
JITGetByValGenerator gen(
- m_jit.codeBlock(), JITType::DFGJIT, codeOrigin, callSite, AccessType::GetPrivateName, usedRegisters,
+ m_jit.codeBlock(), &m_jit.jitCode()->common.m_stubInfos, JITType::DFGJIT, codeOrigin, callSite, AccessType::GetPrivateName, usedRegisters,
base, property, resultRegs, stubInfoGPR);
gen.stubInfo()->propertyIsSymbol = true;
gen.generateFastPath(m_jit);
@@ -4032,7 +4032,7 @@
RegisterSet usedRegisters = this->usedRegisters();
JITPutByValGenerator gen(
- m_jit.codeBlock(), JITType::DFGJIT, codeOrigin, callSite, AccessType::PutPrivateName, usedRegisters,
+ m_jit.codeBlock(), &m_jit.jitCode()->common.m_stubInfos, JITType::DFGJIT, codeOrigin, callSite, AccessType::PutPrivateName, usedRegisters,
JSValueRegs::payloadOnly(baseGPR), JSValueRegs::payloadOnly(propertyGPR), valueRegs, InvalidGPRReg, stubInfoGPR);
gen.stubInfo()->propertyIsSymbol = true;
@@ -4109,7 +4109,7 @@
slowCases.append(m_jit.branchIfNotCell(baseRegs));
JITPrivateBrandAccessGenerator gen(
- m_jit.codeBlock(), JITType::DFGJIT, codeOrigin, callSite, AccessType::CheckPrivateBrand, usedRegisters,
+ m_jit.codeBlock(), &m_jit.jitCode()->common.m_stubInfos, JITType::DFGJIT, codeOrigin, callSite, AccessType::CheckPrivateBrand, usedRegisters,
baseRegs, JSValueRegs::payloadOnly(brandGPR), stubInfoGPR);
gen.stubInfo()->propertyIsSymbol = true;
@@ -4157,7 +4157,7 @@
JITCompiler::JumpList slowCases;
JITPrivateBrandAccessGenerator gen(
- m_jit.codeBlock(), JITType::DFGJIT, codeOrigin, callSite, AccessType::SetPrivateBrand, usedRegisters,
+ m_jit.codeBlock(), &m_jit.jitCode()->common.m_stubInfos, JITType::DFGJIT, codeOrigin, callSite, AccessType::SetPrivateBrand, usedRegisters,
JSValueRegs::payloadOnly(baseGPR), JSValueRegs::payloadOnly(brandGPR), stubInfoGPR);
gen.stubInfo()->propertyIsSymbol = true;
@@ -4297,7 +4297,7 @@
CallSiteIndex callSiteIndex = m_jit.addCallSite(node->origin.semantic);
JITInstanceOfGenerator gen(
- m_jit.codeBlock(), JITType::DFGJIT, node->origin.semantic, callSiteIndex, usedRegisters(), resultGPR,
+ m_jit.codeBlock(), &m_jit.jitCode()->common.m_stubInfos, JITType::DFGJIT, node->origin.semantic, callSiteIndex, usedRegisters(), resultGPR,
valueRegs.payloadGPR(), prototypeRegs.payloadGPR(), stubInfoGPR, scratchGPR, scratch2GPR,
m_state.forNode(node->child2()).isType(SpecObject | ~SpecCell));
gen.generateFastPath(m_jit);
@@ -15499,7 +15499,7 @@
}
CallSiteIndex callSite = m_jit.recordCallSiteAndGenerateExceptionHandlingOSRExitIfNeeded(codeOrigin, m_stream->size());
JITPutByIdGenerator gen(
- m_jit.codeBlock(), JITType::DFGJIT, codeOrigin, callSite, usedRegisters, identifier,
+ m_jit.codeBlock(), &m_jit.jitCode()->common.m_stubInfos, JITType::DFGJIT, codeOrigin, callSite, usedRegisters, identifier,
JSValueRegs::payloadOnly(baseGPR), valueRegs, stubInfoGPR,
scratchGPR, ecmaMode, putKind);
Modified: trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT32_64.cpp (285077 => 285078)
--- trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT32_64.cpp 2021-10-30 06:28:57 UTC (rev 285077)
+++ trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT32_64.cpp 2021-10-30 06:48:10 UTC (rev 285078)
@@ -201,7 +201,7 @@
CallSiteIndex callSite = m_jit.recordCallSiteAndGenerateExceptionHandlingOSRExitIfNeeded(codeOrigin, m_stream->size());
JITGetByIdGenerator gen(
- m_jit.codeBlock(), JITType::DFGJIT, codeOrigin, callSite, usedRegisters, identifier,
+ m_jit.codeBlock(), &m_jit.jitCode()->common.m_stubInfos, JITType::DFGJIT, codeOrigin, callSite, usedRegisters, identifier,
JSValueRegs(baseTagGPROrNone, basePayloadGPR), JSValueRegs(resultTagGPR, resultPayloadGPR), InvalidGPRReg, type);
gen.generateFastPath(m_jit);
@@ -237,7 +237,7 @@
CallSiteIndex callSite = m_jit.recordCallSiteAndGenerateExceptionHandlingOSRExitIfNeeded(codeOrigin, m_stream->size());
JITGetByIdWithThisGenerator gen(
- m_jit.codeBlock(), JITType::DFGJIT, codeOrigin, callSite, usedRegisters, identifier,
+ m_jit.codeBlock(), &m_jit.jitCode()->common.m_stubInfos, JITType::DFGJIT, codeOrigin, callSite, usedRegisters, identifier,
JSValueRegs(resultTagGPR, resultPayloadGPR), JSValueRegs(baseTagGPROrNone, basePayloadGPR), JSValueRegs(thisTagGPR, thisPayloadGPR), InvalidGPRReg);
gen.generateFastPath(m_jit);
@@ -786,7 +786,7 @@
isEmulatedTail ? *staticInlineCallFrame->getCallerSkippingTailCalls() : staticOrigin;
CallSiteIndex callSite = m_jit.recordCallSiteAndGenerateExceptionHandlingOSRExitIfNeeded(dynamicOrigin, m_stream->size());
- CallLinkInfo* info = m_jit.codeBlock()->addCallLinkInfo(node->origin.semantic);
+ CallLinkInfo* info = m_jit.jitCode()->common.addCallLinkInfo(node->origin.semantic);
info->setUpCall(callType, calleePayloadGPR);
auto setResultAndResetStack = [&] () {
@@ -1896,7 +1896,7 @@
slowCases.append(m_jit.branchIfNotCell(baseRegs));
JITGetByValGenerator gen(
- m_jit.codeBlock(), JITType::DFGJIT, codeOrigin, callSite, AccessType::GetByVal, usedRegisters,
+ m_jit.codeBlock(), &m_jit.jitCode()->common.m_stubInfos, JITType::DFGJIT, codeOrigin, callSite, AccessType::GetByVal, usedRegisters,
baseRegs, propertyRegs, resultRegs, InvalidGPRReg);
if (m_state.forNode(m_graph.varArgChild(node, 1)).isType(SpecString))
@@ -2783,7 +2783,7 @@
ECMAMode ecmaMode = node->ecmaMode();
JITPutByValGenerator gen(
- m_jit.codeBlock(), JITType::DFGJIT, codeOrigin, callSite, AccessType::PutByVal, usedRegisters,
+ m_jit.codeBlock(), &m_jit.jitCode()->common.m_stubInfos, JITType::DFGJIT, codeOrigin, callSite, AccessType::PutByVal, usedRegisters,
baseRegs, propertyRegs, valueRegs, InvalidGPRReg, InvalidGPRReg);
if (m_state.forNode(child2).isType(SpecString))
Modified: trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT64.cpp (285077 => 285078)
--- trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT64.cpp 2021-10-30 06:28:57 UTC (rev 285077)
+++ trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT64.cpp 2021-10-30 06:48:10 UTC (rev 285078)
@@ -164,7 +164,7 @@
usedRegisters.set(stubInfoGPR, false);
}
JITGetByIdGenerator gen(
- m_jit.codeBlock(), JITType::DFGJIT, codeOrigin, callSite, usedRegisters, identifier,
+ m_jit.codeBlock(), &m_jit.jitCode()->common.m_stubInfos, JITType::DFGJIT, codeOrigin, callSite, usedRegisters, identifier,
JSValueRegs(baseGPR), JSValueRegs(resultGPR), stubInfoGPR, type);
gen.generateFastPath(m_jit);
@@ -201,7 +201,7 @@
usedRegisters.set(stubInfoGPR, false);
JITGetByIdWithThisGenerator gen(
- m_jit.codeBlock(), JITType::DFGJIT, codeOrigin, callSite, usedRegisters, identifier,
+ m_jit.codeBlock(), &m_jit.jitCode()->common.m_stubInfos, JITType::DFGJIT, codeOrigin, callSite, usedRegisters, identifier,
JSValueRegs(resultGPR), JSValueRegs(baseGPR), JSValueRegs(thisGPR), stubInfoGPR);
gen.generateFastPath(m_jit);
@@ -891,7 +891,7 @@
m_jit.addPtr(TrustedImm32(m_jit.graph().stackPointerOffset() * sizeof(Register)), GPRInfo::callFrameRegister, JITCompiler::stackPointerRegister);
};
- CallLinkInfo* callLinkInfo = m_jit.codeBlock()->addCallLinkInfo(m_currentNode->origin.semantic);
+ CallLinkInfo* callLinkInfo = m_jit.jitCode()->common.addCallLinkInfo(m_currentNode->origin.semantic);
callLinkInfo->setUpCall(callType, calleeGPR);
if (node->op() == CallEval) {
@@ -2421,7 +2421,7 @@
slowCases.append(m_jit.branchIfNotCell(baseGPR));
JITGetByValGenerator gen(
- m_jit.codeBlock(), JITType::DFGJIT, codeOrigin, callSite, AccessType::GetByVal, usedRegisters,
+ m_jit.codeBlock(), &m_jit.jitCode()->common.m_stubInfos, JITType::DFGJIT, codeOrigin, callSite, AccessType::GetByVal, usedRegisters,
JSValueRegs(baseGPR), JSValueRegs(propertyGPR), JSValueRegs(resultGPR), stubInfoGPR);
if (m_state.forNode(m_graph.varArgChild(node, 1)).isType(SpecString))
@@ -3408,7 +3408,7 @@
ECMAMode ecmaMode = node->ecmaMode();
JITPutByValGenerator gen(
- m_jit.codeBlock(), JITType::DFGJIT, codeOrigin, callSite, AccessType::PutByVal, usedRegisters,
+ m_jit.codeBlock(), &m_jit.jitCode()->common.m_stubInfos, JITType::DFGJIT, codeOrigin, callSite, AccessType::PutByVal, usedRegisters,
JSValueRegs(baseGPR), JSValueRegs(propertyGPR), JSValueRegs(valueGPR), InvalidGPRReg, stubInfoGPR);
if (m_state.forNode(child2).isType(SpecString))
Modified: trunk/Source/_javascript_Core/ftl/FTLLowerDFGToB3.cpp (285077 => 285078)
--- trunk/Source/_javascript_Core/ftl/FTLLowerDFGToB3.cpp 2021-10-30 06:28:57 UTC (rev 285077)
+++ trunk/Source/_javascript_Core/ftl/FTLLowerDFGToB3.cpp 2021-10-30 06:48:10 UTC (rev 285078)
@@ -4034,7 +4034,7 @@
GPRReg stubInfoGPR = JITCode::useDataIC(JITType::FTLJIT) ? params.gpScratch(0) : InvalidGPRReg;
auto generator = Box<JITGetByValGenerator>::create(
- jit.codeBlock(), JITType::FTLJIT, nodeSemanticOrigin, callSiteIndex, AccessType::GetPrivateName,
+ jit.codeBlock(), &state->jitCode->common.m_stubInfos, JITType::FTLJIT, nodeSemanticOrigin, callSiteIndex, AccessType::GetPrivateName,
params.unavailableRegisters(), JSValueRegs(baseGPR), JSValueRegs(propertyGPR), JSValueRegs(resultGPR), stubInfoGPR);
CCallHelpers::Jump notCell;
@@ -4180,7 +4180,7 @@
GPRReg stubInfoGPR = JITCode::useDataIC(JITType::FTLJIT) ? params.gpScratch(0) : InvalidGPRReg;
auto generator = Box<JITPrivateBrandAccessGenerator>::create(
- jit.codeBlock(), JITType::FTLJIT, nodeSemanticOrigin, callSiteIndex, accessType,
+ jit.codeBlock(), &state->jitCode->common.m_stubInfos, JITType::FTLJIT, nodeSemanticOrigin, callSiteIndex, accessType,
params.unavailableRegisters(), JSValueRegs(baseGPR), JSValueRegs(brandGPR), stubInfoGPR);
CCallHelpers::Jump notCell;
@@ -4341,7 +4341,7 @@
GPRReg stubInfoGPR = JITCode::useDataIC(JITType::FTLJIT) ? params.gpScratch(0) : InvalidGPRReg;
auto generator = Box<JITPutByValGenerator>::create(
- jit.codeBlock(), JITType::FTLJIT, nodeSemanticOrigin, callSiteIndex, AccessType::PutPrivateName,
+ jit.codeBlock(), &state->jitCode->common.m_stubInfos, JITType::FTLJIT, nodeSemanticOrigin, callSiteIndex, AccessType::PutPrivateName,
params.unavailableRegisters(), JSValueRegs(baseGPR), JSValueRegs(propertyGPR), JSValueRegs(valueGPR), InvalidGPRReg, stubInfoGPR);
generator->stubInfo()->propertyIsSymbol = true;
@@ -4688,7 +4688,7 @@
GPRReg stubInfoGPR = JITCode::useDataIC(JITType::FTLJIT) ? params.gpScratch(0) : InvalidGPRReg;
auto generator = Box<JITPutByIdGenerator>::create(
- jit.codeBlock(), JITType::FTLJIT, nodeSemanticOrigin, callSiteIndex,
+ jit.codeBlock(), &state->jitCode->common.m_stubInfos, JITType::FTLJIT, nodeSemanticOrigin, callSiteIndex,
params.unavailableRegisters(), identifier, JSValueRegs(params[0].gpr()),
JSValueRegs(params[1].gpr()), stubInfoGPR, GPRInfo::patchpointScratchRegister, ecmaMode,
putKind);
@@ -5465,7 +5465,7 @@
GPRReg stubInfoGPR = JITCode::useDataIC(JITType::FTLJIT) ? params.gpScratch(0) : InvalidGPRReg;
auto generator = Box<JITGetByValGenerator>::create(
- jit.codeBlock(), JITType::FTLJIT, nodeSemanticOrigin, callSiteIndex, AccessType::GetByVal,
+ jit.codeBlock(), &state->jitCode->common.m_stubInfos, JITType::FTLJIT, nodeSemanticOrigin, callSiteIndex, AccessType::GetByVal,
params.unavailableRegisters(), JSValueRegs(baseGPR), JSValueRegs(propertyGPR), JSValueRegs(resultGPR), stubInfoGPR);
generator->stubInfo()->propertyIsString = propertyIsString;
@@ -5822,7 +5822,7 @@
GPRReg stubInfoGPR = JITCode::useDataIC(JITType::FTLJIT) ? params.gpScratch(0) : InvalidGPRReg;
auto generator = Box<JITPutByValGenerator>::create(
- jit.codeBlock(), JITType::FTLJIT, nodeSemanticOrigin, callSiteIndex, AccessType::PutByVal,
+ jit.codeBlock(), &state->jitCode->common.m_stubInfos, JITType::FTLJIT, nodeSemanticOrigin, callSiteIndex, AccessType::PutByVal,
params.unavailableRegisters(), JSValueRegs(baseGPR), JSValueRegs(propertyGPR), JSValueRegs(valueGPR), InvalidGPRReg, stubInfoGPR);
generator->stubInfo()->propertyIsString = propertyIsString;
@@ -6223,12 +6223,12 @@
const auto generator = [&] {
if constexpr (kind == DelByKind::ById) {
return Box<JITDelByIdGenerator>::create(
- jit.codeBlock(), JITType::FTLJIT, nodeSemanticOrigin, callSiteIndex,
+ jit.codeBlock(), &state->jitCode->common.m_stubInfos, JITType::FTLJIT, nodeSemanticOrigin, callSiteIndex,
params.unavailableRegisters(), subscriptValue, base,
JSValueRegs(returnGPR), stubInfoGPR, scratchGPR);
} else {
return Box<JITDelByValGenerator>::create(
- jit.codeBlock(), JITType::FTLJIT, nodeSemanticOrigin, callSiteIndex,
+ jit.codeBlock(), &state->jitCode->common.m_stubInfos, JITType::FTLJIT, nodeSemanticOrigin, callSiteIndex,
params.unavailableRegisters(), base,
subscript, JSValueRegs(returnGPR), stubInfoGPR, scratchGPR);
}
@@ -10255,7 +10255,7 @@
CCallHelpers::TrustedImm32(callSiteIndex.bits()),
CCallHelpers::tagFor(VirtualRegister(CallFrameSlot::argumentCountIncludingThis)));
- CallLinkInfo* callLinkInfo = jit.codeBlock()->addCallLinkInfo(nodeSemanticOrigin);
+ CallLinkInfo* callLinkInfo = state->jitCode->common.addCallLinkInfo(nodeSemanticOrigin);
callLinkInfo->setUpCall(
nodeOp == Construct ? CallLinkInfo::Construct : CallLinkInfo::Call, GPRInfo::regT0);
@@ -10389,7 +10389,7 @@
shuffleData.numParameters = jit.codeBlock()->numParameters();
shuffleData.setupCalleeSaveRegisters(jit.codeBlock());
- CallLinkInfo* callLinkInfo = jit.codeBlock()->addCallLinkInfo(semanticNodeOrigin);
+ CallLinkInfo* callLinkInfo = state->jitCode->common.addCallLinkInfo(semanticNodeOrigin);
callLinkInfo->setUpCall(CallLinkInfo::DirectTailCall, InvalidGPRReg);
CCallHelpers::Label mainPath = jit.label();
@@ -10421,7 +10421,7 @@
return;
}
- CallLinkInfo* callLinkInfo = jit.codeBlock()->addCallLinkInfo(semanticNodeOrigin);
+ CallLinkInfo* callLinkInfo = state->jitCode->common.addCallLinkInfo(semanticNodeOrigin);
callLinkInfo->setUpCall(
isConstruct ? CallLinkInfo::DirectConstruct : CallLinkInfo::DirectCall, InvalidGPRReg);
@@ -10549,7 +10549,7 @@
shuffleData.setupCalleeSaveRegisters(jit.codeBlock());
- CallLinkInfo* callLinkInfo = jit.codeBlock()->addCallLinkInfo(codeOrigin);
+ CallLinkInfo* callLinkInfo = state->jitCode->common.addCallLinkInfo(codeOrigin);
callLinkInfo->setUpCall(CallLinkInfo::TailCall, GPRInfo::regT0);
auto slowPath = callLinkInfo->emitTailCallFastPath(jit, GPRInfo::regT0, [&] {
@@ -10754,7 +10754,7 @@
CCallHelpers::TrustedImm32(callSiteIndex.bits()),
CCallHelpers::tagFor(VirtualRegister(CallFrameSlot::argumentCountIncludingThis)));
- CallLinkInfo* callLinkInfo = jit.codeBlock()->addCallLinkInfo(semanticNodeOrigin);
+ CallLinkInfo* callLinkInfo = state->jitCode->common.addCallLinkInfo(semanticNodeOrigin);
RegisterSet usedRegisters = RegisterSet::allRegisters();
usedRegisters.exclude(RegisterSet::volatileRegistersForJSCall());
@@ -11038,7 +11038,7 @@
CCallHelpers::TrustedImm32(callSiteIndex.bits()),
CCallHelpers::tagFor(VirtualRegister(CallFrameSlot::argumentCountIncludingThis)));
- CallLinkInfo* callLinkInfo = jit.codeBlock()->addCallLinkInfo(semanticNodeOrigin);
+ CallLinkInfo* callLinkInfo = state->jitCode->common.addCallLinkInfo(semanticNodeOrigin);
unsigned argIndex = 1;
GPRReg calleeGPR = params[argIndex++].gpr();
@@ -11280,7 +11280,7 @@
CCallHelpers::TrustedImm32(callSiteIndex.bits()),
CCallHelpers::tagFor(VirtualRegister(CallFrameSlot::argumentCountIncludingThis)));
- CallLinkInfo* callLinkInfo = jit.codeBlock()->addCallLinkInfo(semanticNodeOrigin);
+ CallLinkInfo* callLinkInfo = state->jitCode->common.addCallLinkInfo(semanticNodeOrigin);
callLinkInfo->setUpCall(CallLinkInfo::Call, GPRInfo::regT0);
jit.addPtr(CCallHelpers::TrustedImm32(-static_cast<ptrdiff_t>(sizeof(CallerFrameAndPC))), CCallHelpers::stackPointerRegister, GPRInfo::regT1);
@@ -12869,12 +12869,12 @@
const auto generator = [&] {
if constexpr (type == AccessType::InById) {
return Box<JITInByIdGenerator>::create(
- jit.codeBlock(), JITType::FTLJIT, semanticNodeOrigin, callSiteIndex,
+ jit.codeBlock(), &state->jitCode->common.m_stubInfos, JITType::FTLJIT, semanticNodeOrigin, callSiteIndex,
params.unavailableRegisters(), subscriptValue, base,
JSValueRegs(returnGPR), stubInfoGPR);
} else {
return Box<JITInByValGenerator>::create(
- jit.codeBlock(), JITType::FTLJIT, semanticNodeOrigin, callSiteIndex,
+ jit.codeBlock(), &state->jitCode->common.m_stubInfos, JITType::FTLJIT, semanticNodeOrigin, callSiteIndex,
type, params.unavailableRegisters(), base, subscript,
JSValueRegs(returnGPR), stubInfoGPR);
}
@@ -13197,7 +13197,7 @@
exceptionHandle->scheduleExitCreation(params)->jumps(jit);
auto generator = Box<JITInstanceOfGenerator>::create(
- jit.codeBlock(), JITType::FTLJIT, semanticNodeOrigin, callSiteIndex,
+ jit.codeBlock(), &state->jitCode->common.m_stubInfos, JITType::FTLJIT, semanticNodeOrigin, callSiteIndex,
params.unavailableRegisters(), resultGPR, valueGPR, prototypeGPR, stubInfoGPR, scratchGPR,
scratch2GPR, prototypeIsObject);
generator->generateFastPath(jit);
@@ -14923,7 +14923,7 @@
GPRReg stubInfoGPR = JITCode::useDataIC(JITType::FTLJIT) ? params.gpScratch(0) : InvalidGPRReg;
auto generator = Box<JITGetByIdGenerator>::create(
- jit.codeBlock(), JITType::FTLJIT, semanticNodeOrigin, callSiteIndex,
+ jit.codeBlock(), &state->jitCode->common.m_stubInfos, JITType::FTLJIT, semanticNodeOrigin, callSiteIndex,
params.unavailableRegisters(), identifier, JSValueRegs(params[1].gpr()),
JSValueRegs(params[0].gpr()), stubInfoGPR, type);
@@ -15007,7 +15007,7 @@
GPRReg stubInfoGPR = JITCode::useDataIC(JITType::FTLJIT) ? params.gpScratch(0) : InvalidGPRReg;
auto generator = Box<JITGetByIdWithThisGenerator>::create(
- jit.codeBlock(), JITType::FTLJIT, semanticNodeOrigin, callSiteIndex,
+ jit.codeBlock(), &state->jitCode->common.m_stubInfos, JITType::FTLJIT, semanticNodeOrigin, callSiteIndex,
params.unavailableRegisters(), identifier, JSValueRegs(params[0].gpr()),
JSValueRegs(params[1].gpr()), JSValueRegs(params[2].gpr()), stubInfoGPR);
Modified: trunk/Source/_javascript_Core/jit/BaselineJITCode.h (285077 => 285078)
--- trunk/Source/_javascript_Core/jit/BaselineJITCode.h 2021-10-30 06:28:57 UTC (rev 285077)
+++ trunk/Source/_javascript_Core/jit/BaselineJITCode.h 2021-10-30 06:48:10 UTC (rev 285078)
@@ -93,8 +93,8 @@
~BaselineJITCode() override;
PCToCodeOriginMap* pcToCodeOriginMap() override { return m_pcToCodeOriginMap.get(); }
- Bag<UnlinkedCallLinkInfo> m_unlinkedCalls;
Bag<CallLinkInfo> m_evalCallLinkInfos;
+ FixedVector<UnlinkedCallLinkInfo> m_unlinkedCalls;
FixedVector<UnlinkedStructureStubInfo> m_unlinkedStubInfos;
FixedVector<SimpleJumpTable> m_switchJumpTables;
FixedVector<StringJumpTable> m_stringSwitchJumpTables;
Modified: trunk/Source/_javascript_Core/jit/JIT.cpp (285077 => 285078)
--- trunk/Source/_javascript_Core/jit/JIT.cpp 2021-10-30 06:28:57 UTC (rev 285077)
+++ trunk/Source/_javascript_Core/jit/JIT.cpp 2021-10-30 06:48:10 UTC (rev 285078)
@@ -101,6 +101,14 @@
return std::tuple { stubInfo, stubInfoIndex };
}
+std::tuple<UnlinkedCallLinkInfo*, JITConstantPool::Constant> JIT::addUnlinkedCallLinkInfo()
+{
+ void* unlinkedCallLinkInfoIndex = bitwise_cast<void*>(static_cast<uintptr_t>(m_unlinkedCalls.size()));
+ UnlinkedCallLinkInfo* info = &m_unlinkedCalls.alloc();
+ JITConstantPool::Constant callLinkInfoIndex = addToConstantPool(JITConstantPool::Type::CallLinkInfo, unlinkedCallLinkInfoIndex);
+ return std::tuple { info, callLinkInfoIndex };
+}
+
#if ENABLE(DFG_JIT)
void JIT::emitEnterOptimizationCheck()
{
@@ -999,11 +1007,13 @@
MacroAssemblerCodePtr<JSEntryPtrTag> withArityCheck = patchBuffer.locationOf<JSEntryPtrTag>(m_arityCheck);
m_jitCode = adoptRef(*new BaselineJITCode(result, withArityCheck));
- m_jitCode->m_unlinkedCalls = WTFMove(m_unlinkedCalls);
+ m_jitCode->m_unlinkedCalls = FixedVector<UnlinkedCallLinkInfo>(m_unlinkedCalls.size());
+ if (m_jitCode->m_unlinkedCalls.size())
+ std::move(m_unlinkedCalls.begin(), m_unlinkedCalls.end(), m_jitCode->m_unlinkedCalls.begin());
m_jitCode->m_evalCallLinkInfos = WTFMove(m_evalCallLinkInfos);
m_jitCode->m_unlinkedStubInfos = FixedVector<UnlinkedStructureStubInfo>(m_unlinkedStubInfos.size());
if (m_jitCode->m_unlinkedStubInfos.size())
- std::copy(m_unlinkedStubInfos.begin(), m_unlinkedStubInfos.end(), m_jitCode->m_unlinkedStubInfos.begin());
+ std::move(m_unlinkedStubInfos.begin(), m_unlinkedStubInfos.end(), m_jitCode->m_unlinkedStubInfos.begin());
m_jitCode->m_switchJumpTables = WTFMove(m_switchJumpTables);
m_jitCode->m_stringSwitchJumpTables = WTFMove(m_stringSwitchJumpTables);
m_jitCode->m_jitCodeMap = jitCodeMapBuilder.finalize();
Modified: trunk/Source/_javascript_Core/jit/JIT.h (285077 => 285078)
--- trunk/Source/_javascript_Core/jit/JIT.h 2021-10-30 06:28:57 UTC (rev 285077)
+++ trunk/Source/_javascript_Core/jit/JIT.h 2021-10-30 06:48:10 UTC (rev 285078)
@@ -958,6 +958,7 @@
JITConstantPool::Constant addToConstantPool(JITConstantPool::Type, void* payload = nullptr);
std::tuple<UnlinkedStructureStubInfo*, JITConstantPool::Constant> addUnlinkedStructureStubInfo();
+ std::tuple<UnlinkedCallLinkInfo*, JITConstantPool::Constant> addUnlinkedCallLinkInfo();
Interpreter* m_interpreter;
@@ -1028,8 +1029,8 @@
Vector<JITConstantPool::Value> m_constantPool;
JITConstantPool::Constant m_globalObjectConstant { std::numeric_limits<unsigned>::max() };
- Bag<UnlinkedCallLinkInfo> m_unlinkedCalls;
Bag<CallLinkInfo> m_evalCallLinkInfos;
+ SegmentedVector<UnlinkedCallLinkInfo> m_unlinkedCalls;
SegmentedVector<UnlinkedStructureStubInfo> m_unlinkedStubInfos;
FixedVector<SimpleJumpTable> m_switchJumpTables;
FixedVector<StringJumpTable> m_stringSwitchJumpTables;
Modified: trunk/Source/_javascript_Core/jit/JITCall.cpp (285077 => 285078)
--- trunk/Source/_javascript_Core/jit/JITCall.cpp 2021-10-30 06:28:57 UTC (rev 285077)
+++ trunk/Source/_javascript_Core/jit/JITCall.cpp 2021-10-30 06:48:10 UTC (rev 285078)
@@ -290,12 +290,9 @@
UnlinkedCallLinkInfo* info = nullptr;
JITConstantPool::Constant infoConstant = UINT_MAX;
if (opcodeID != op_call_eval) {
- info = m_unlinkedCalls.add();
+ std::tie(info, infoConstant) = addUnlinkedCallLinkInfo();
info->bytecodeIndex = m_bytecodeIndex;
info->callType = CallLinkInfo::callTypeFor(opcodeID);
-
- infoConstant = addToConstantPool(JITConstantPool::Type::CallLinkInfo, info);
-
ASSERT(m_callCompilationInfo.size() == callLinkInfoIndex);
m_callCompilationInfo.append(CallCompilationInfo());
m_callCompilationInfo[callLinkInfoIndex].unlinkedCallLinkInfo = info;
@@ -487,7 +484,7 @@
const Identifier* ident = &vm().propertyNames->next;
JITGetByIdGenerator gen(
- nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(BytecodeIndex(m_bytecodeIndex.offset())), RegisterSet::stubUnavailableRegisters(),
+ nullptr, nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(BytecodeIndex(m_bytecodeIndex.offset())), RegisterSet::stubUnavailableRegisters(),
CacheableIdentifier::createFromImmortalIdentifier(ident->impl()), baseJSR, resultJSR, stubInfoGPR, AccessType::GetById);
auto [ stubInfo, stubInfoIndex ] = addUnlinkedStructureStubInfo();
@@ -597,7 +594,7 @@
RegisterSet preservedRegs = RegisterSet::stubUnavailableRegisters();
preservedRegs.set(iterCallResultJSR);
JITGetByIdGenerator gen(
- nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(BytecodeIndex(m_bytecodeIndex.offset())), preservedRegs,
+ nullptr, nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(BytecodeIndex(m_bytecodeIndex.offset())), preservedRegs,
CacheableIdentifier::createFromImmortalIdentifier(vm().propertyNames->done.impl()), returnValueJSR, doneJSR, stubInfoGPR, AccessType::GetById);
auto [ stubInfo, stubInfoIndex ] = addUnlinkedStructureStubInfo();
@@ -629,7 +626,7 @@
moveValueRegs(iterCallResultJSR, baseJSR);
JITGetByIdGenerator gen(
- nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(BytecodeIndex(m_bytecodeIndex.offset())), RegisterSet::stubUnavailableRegisters(),
+ nullptr, nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(BytecodeIndex(m_bytecodeIndex.offset())), RegisterSet::stubUnavailableRegisters(),
CacheableIdentifier::createFromImmortalIdentifier(vm().propertyNames->value.impl()), baseJSR, resultJSR, stubInfoGPR, AccessType::GetById);
auto [ stubInfo, stubInfoIndex ] = addUnlinkedStructureStubInfo();
Modified: trunk/Source/_javascript_Core/jit/JITInlineCacheGenerator.cpp (285077 => 285078)
--- trunk/Source/_javascript_Core/jit/JITInlineCacheGenerator.cpp 2021-10-30 06:28:57 UTC (rev 285077)
+++ trunk/Source/_javascript_Core/jit/JITInlineCacheGenerator.cpp 2021-10-30 06:48:10 UTC (rev 285078)
@@ -40,17 +40,20 @@
namespace JSC {
JITInlineCacheGenerator::JITInlineCacheGenerator(
- CodeBlock* codeBlock, JITType jitType, CodeOrigin codeOrigin, CallSiteIndex callSite, AccessType accessType,
+ CodeBlock* codeBlock, Bag<StructureStubInfo>* stubInfos, JITType jitType, CodeOrigin codeOrigin, CallSiteIndex callSite, AccessType accessType,
const RegisterSet& usedRegisters)
: m_jitType(jitType)
{
if (JITCode::isOptimizingJIT(m_jitType)) {
- ASSERT(codeBlock);
- m_stubInfo = codeBlock->addOptimizingStubInfo(accessType, codeOrigin);
+ ASSERT_UNUSED(codeBlock, codeBlock);
+ ASSERT(stubInfos);
+ m_stubInfo = stubInfos->add(accessType, codeOrigin);
m_stubInfo->callSiteIndex = callSite;
m_stubInfo->usedRegisters = usedRegisters;
- } else
+ } else {
ASSERT(!codeBlock);
+ ASSERT(!stubInfos);
+ }
}
void JITInlineCacheGenerator::finalize(
@@ -75,9 +78,9 @@
}
JITByIdGenerator::JITByIdGenerator(
- CodeBlock* codeBlock, JITType jitType, CodeOrigin codeOrigin, CallSiteIndex callSite, AccessType accessType,
+ CodeBlock* codeBlock, Bag<StructureStubInfo>* stubInfos, JITType jitType, CodeOrigin codeOrigin, CallSiteIndex callSite, AccessType accessType,
const RegisterSet& usedRegisters, JSValueRegs base, JSValueRegs value, GPRReg stubInfoGPR)
- : JITInlineCacheGenerator(codeBlock, jitType, codeOrigin, callSite, accessType, usedRegisters)
+ : JITInlineCacheGenerator(codeBlock, stubInfos, jitType, codeOrigin, callSite, accessType, usedRegisters)
, m_base(base)
, m_value(value)
{
@@ -117,9 +120,9 @@
}
JITGetByIdGenerator::JITGetByIdGenerator(
- CodeBlock* codeBlock, JITType jitType, CodeOrigin codeOrigin, CallSiteIndex callSite, const RegisterSet& usedRegisters,
+ CodeBlock* codeBlock, Bag<StructureStubInfo>* stubInfos, JITType jitType, CodeOrigin codeOrigin, CallSiteIndex callSite, const RegisterSet& usedRegisters,
CacheableIdentifier propertyName, JSValueRegs base, JSValueRegs value, GPRReg stubInfoGPR, AccessType accessType)
- : JITByIdGenerator(codeBlock, jitType, codeOrigin, callSite, accessType, usedRegisters, base, value, stubInfoGPR)
+ : JITByIdGenerator(codeBlock, stubInfos, jitType, codeOrigin, callSite, accessType, usedRegisters, base, value, stubInfoGPR)
, m_isLengthAccess(codeBlock && propertyName.uid() == codeBlock->vm().propertyNames->length.impl())
{
RELEASE_ASSERT(base.payloadGPR() != value.tagGPR());
@@ -164,9 +167,9 @@
}
JITGetByIdWithThisGenerator::JITGetByIdWithThisGenerator(
- CodeBlock* codeBlock, JITType jitType, CodeOrigin codeOrigin, CallSiteIndex callSite, const RegisterSet& usedRegisters,
+ CodeBlock* codeBlock, Bag<StructureStubInfo>* stubInfos, JITType jitType, CodeOrigin codeOrigin, CallSiteIndex callSite, const RegisterSet& usedRegisters,
CacheableIdentifier, JSValueRegs value, JSValueRegs base, JSValueRegs thisRegs, GPRReg stubInfoGPR)
- : JITByIdGenerator(codeBlock, jitType, codeOrigin, callSite, AccessType::GetByIdWithThis, usedRegisters, base, value, stubInfoGPR)
+ : JITByIdGenerator(codeBlock, stubInfos, jitType, codeOrigin, callSite, AccessType::GetByIdWithThis, usedRegisters, base, value, stubInfoGPR)
{
RELEASE_ASSERT(thisRegs.payloadGPR() != thisRegs.tagGPR());
if (m_stubInfo) {
@@ -200,10 +203,10 @@
}
JITPutByIdGenerator::JITPutByIdGenerator(
- CodeBlock* codeBlock, JITType jitType, CodeOrigin codeOrigin, CallSiteIndex callSite, const RegisterSet& usedRegisters, CacheableIdentifier,
+ CodeBlock* codeBlock, Bag<StructureStubInfo>* stubInfos, JITType jitType, CodeOrigin codeOrigin, CallSiteIndex callSite, const RegisterSet& usedRegisters, CacheableIdentifier,
JSValueRegs base, JSValueRegs value, GPRReg stubInfoGPR, GPRReg scratch,
ECMAMode ecmaMode, PutKind putKind)
- : JITByIdGenerator(codeBlock, jitType, codeOrigin, callSite, AccessType::PutById, usedRegisters, base, value, stubInfoGPR)
+ : JITByIdGenerator(codeBlock, stubInfos, jitType, codeOrigin, callSite, AccessType::PutById, usedRegisters, base, value, stubInfoGPR)
, m_ecmaMode(ecmaMode)
, m_putKind(putKind)
{
@@ -266,8 +269,8 @@
return nullptr;
}
-JITDelByValGenerator::JITDelByValGenerator(CodeBlock* codeBlock, JITType jitType, CodeOrigin codeOrigin, CallSiteIndex callSiteIndex, const RegisterSet& usedRegisters, JSValueRegs base, JSValueRegs property, JSValueRegs result, GPRReg stubInfoGPR, GPRReg scratch)
- : Base(codeBlock, jitType, codeOrigin, callSiteIndex, AccessType::DeleteByVal, usedRegisters)
+JITDelByValGenerator::JITDelByValGenerator(CodeBlock* codeBlock, Bag<StructureStubInfo>* stubInfos, JITType jitType, CodeOrigin codeOrigin, CallSiteIndex callSiteIndex, const RegisterSet& usedRegisters, JSValueRegs base, JSValueRegs property, JSValueRegs result, GPRReg stubInfoGPR, GPRReg scratch)
+ : Base(codeBlock, stubInfos, jitType, codeOrigin, callSiteIndex, AccessType::DeleteByVal, usedRegisters)
{
ASSERT(base.payloadGPR() != result.payloadGPR());
#if USE(JSVALUE32_64)
@@ -308,8 +311,8 @@
m_stubInfo->m_codePtr = m_stubInfo->slowPathStartLocation;
}
-JITDelByIdGenerator::JITDelByIdGenerator(CodeBlock* codeBlock, JITType jitType, CodeOrigin codeOrigin, CallSiteIndex callSiteIndex, const RegisterSet& usedRegisters, CacheableIdentifier, JSValueRegs base, JSValueRegs result, GPRReg stubInfoGPR, GPRReg scratch)
- : Base(codeBlock, jitType, codeOrigin, callSiteIndex, AccessType::DeleteByID, usedRegisters)
+JITDelByIdGenerator::JITDelByIdGenerator(CodeBlock* codeBlock, Bag<StructureStubInfo>* stubInfos, JITType jitType, CodeOrigin codeOrigin, CallSiteIndex callSiteIndex, const RegisterSet& usedRegisters, CacheableIdentifier, JSValueRegs base, JSValueRegs result, GPRReg stubInfoGPR, GPRReg scratch)
+ : Base(codeBlock, stubInfos, jitType, codeOrigin, callSiteIndex, AccessType::DeleteByID, usedRegisters)
{
ASSERT(base.payloadGPR() != result.payloadGPR());
#if USE(JSVALUE32_64)
@@ -350,8 +353,8 @@
m_stubInfo->m_codePtr = m_stubInfo->slowPathStartLocation;
}
-JITInByValGenerator::JITInByValGenerator(CodeBlock* codeBlock, JITType jitType, CodeOrigin codeOrigin, CallSiteIndex callSiteIndex, AccessType accessType, const RegisterSet& usedRegisters, JSValueRegs base, JSValueRegs property, JSValueRegs result, GPRReg stubInfoGPR)
- : Base(codeBlock, jitType, codeOrigin, callSiteIndex, accessType, usedRegisters)
+JITInByValGenerator::JITInByValGenerator(CodeBlock* codeBlock, Bag<StructureStubInfo>* stubInfos, JITType jitType, CodeOrigin codeOrigin, CallSiteIndex callSiteIndex, AccessType accessType, const RegisterSet& usedRegisters, JSValueRegs base, JSValueRegs property, JSValueRegs result, GPRReg stubInfoGPR)
+ : Base(codeBlock, stubInfos, jitType, codeOrigin, callSiteIndex, accessType, usedRegisters)
{
if (m_stubInfo) {
m_stubInfo->hasConstantIdentifier = false;
@@ -390,9 +393,9 @@
}
JITInByIdGenerator::JITInByIdGenerator(
- CodeBlock* codeBlock, JITType jitType, CodeOrigin codeOrigin, CallSiteIndex callSite, const RegisterSet& usedRegisters,
+ CodeBlock* codeBlock, Bag<StructureStubInfo>* stubInfos, JITType jitType, CodeOrigin codeOrigin, CallSiteIndex callSite, const RegisterSet& usedRegisters,
CacheableIdentifier propertyName, JSValueRegs base, JSValueRegs value, GPRReg stubInfoGPR)
- : JITByIdGenerator(codeBlock, jitType, codeOrigin, callSite, AccessType::InById, usedRegisters, base, value, stubInfoGPR)
+ : JITByIdGenerator(codeBlock, stubInfos, jitType, codeOrigin, callSite, AccessType::InById, usedRegisters, base, value, stubInfoGPR)
{
// FIXME: We are not supporting fast path for "length" property.
UNUSED_PARAM(propertyName);
@@ -432,10 +435,10 @@
}
JITInstanceOfGenerator::JITInstanceOfGenerator(
- CodeBlock* codeBlock, JITType jitType, CodeOrigin codeOrigin, CallSiteIndex callSiteIndex,
+ CodeBlock* codeBlock, Bag<StructureStubInfo>* stubInfos, JITType jitType, CodeOrigin codeOrigin, CallSiteIndex callSiteIndex,
const RegisterSet& usedRegisters, GPRReg result, GPRReg value, GPRReg prototype, GPRReg stubInfoGPR,
GPRReg scratch1, GPRReg scratch2, bool prototypeIsKnownObject)
- : JITInlineCacheGenerator(codeBlock, jitType, codeOrigin, callSiteIndex, AccessType::InstanceOf, usedRegisters)
+ : JITInlineCacheGenerator(codeBlock, stubInfos, jitType, codeOrigin, callSiteIndex, AccessType::InstanceOf, usedRegisters)
{
if (m_stubInfo) {
m_stubInfo->baseGPR = value;
@@ -479,8 +482,8 @@
m_stubInfo->m_codePtr = m_stubInfo->slowPathStartLocation;
}
-JITGetByValGenerator::JITGetByValGenerator(CodeBlock* codeBlock, JITType jitType, CodeOrigin codeOrigin, CallSiteIndex callSiteIndex, AccessType accessType, const RegisterSet& usedRegisters, JSValueRegs base, JSValueRegs property, JSValueRegs result, GPRReg stubInfoGPR)
- : Base(codeBlock, jitType, codeOrigin, callSiteIndex, accessType, usedRegisters)
+JITGetByValGenerator::JITGetByValGenerator(CodeBlock* codeBlock, Bag<StructureStubInfo>* stubInfos, JITType jitType, CodeOrigin codeOrigin, CallSiteIndex callSiteIndex, AccessType accessType, const RegisterSet& usedRegisters, JSValueRegs base, JSValueRegs property, JSValueRegs result, GPRReg stubInfoGPR)
+ : Base(codeBlock, stubInfos, jitType, codeOrigin, callSiteIndex, accessType, usedRegisters)
, m_base(base)
, m_result(result)
{
@@ -518,8 +521,8 @@
m_stubInfo->m_codePtr = m_stubInfo->slowPathStartLocation;
}
-JITPutByValGenerator::JITPutByValGenerator(CodeBlock* codeBlock, JITType jitType, CodeOrigin codeOrigin, CallSiteIndex callSiteIndex, AccessType accessType, const RegisterSet& usedRegisters, JSValueRegs base, JSValueRegs property, JSValueRegs value, GPRReg arrayProfileGPR, GPRReg stubInfoGPR)
- : Base(codeBlock, jitType, codeOrigin, callSiteIndex, accessType, usedRegisters)
+JITPutByValGenerator::JITPutByValGenerator(CodeBlock* codeBlock, Bag<StructureStubInfo>* stubInfos, JITType jitType, CodeOrigin codeOrigin, CallSiteIndex callSiteIndex, AccessType accessType, const RegisterSet& usedRegisters, JSValueRegs base, JSValueRegs property, JSValueRegs value, GPRReg arrayProfileGPR, GPRReg stubInfoGPR)
+ : Base(codeBlock, stubInfos, jitType, codeOrigin, callSiteIndex, accessType, usedRegisters)
, m_base(base)
, m_value(value)
{
@@ -558,8 +561,8 @@
m_stubInfo->m_codePtr = m_stubInfo->slowPathStartLocation;
}
-JITPrivateBrandAccessGenerator::JITPrivateBrandAccessGenerator(CodeBlock* codeBlock, JITType jitType, CodeOrigin codeOrigin, CallSiteIndex callSiteIndex, AccessType accessType, const RegisterSet& usedRegisters, JSValueRegs base, JSValueRegs brand, GPRReg stubInfoGPR)
- : Base(codeBlock, jitType, codeOrigin, callSiteIndex, accessType, usedRegisters)
+JITPrivateBrandAccessGenerator::JITPrivateBrandAccessGenerator(CodeBlock* codeBlock, Bag<StructureStubInfo>* stubInfos, JITType jitType, CodeOrigin codeOrigin, CallSiteIndex callSiteIndex, AccessType accessType, const RegisterSet& usedRegisters, JSValueRegs base, JSValueRegs brand, GPRReg stubInfoGPR)
+ : Base(codeBlock, stubInfos, jitType, codeOrigin, callSiteIndex, accessType, usedRegisters)
{
ASSERT(accessType == AccessType::CheckPrivateBrand || accessType == AccessType::SetPrivateBrand);
if (m_stubInfo) {
Modified: trunk/Source/_javascript_Core/jit/JITInlineCacheGenerator.h (285077 => 285078)
--- trunk/Source/_javascript_Core/jit/JITInlineCacheGenerator.h 2021-10-30 06:28:57 UTC (rev 285077)
+++ trunk/Source/_javascript_Core/jit/JITInlineCacheGenerator.h 2021-10-30 06:48:10 UTC (rev 285078)
@@ -239,7 +239,7 @@
class JITInlineCacheGenerator {
protected:
JITInlineCacheGenerator() { }
- JITInlineCacheGenerator(CodeBlock*, JITType, CodeOrigin, CallSiteIndex, AccessType, const RegisterSet& usedRegisters);
+ JITInlineCacheGenerator(CodeBlock*, Bag<StructureStubInfo>*, JITType, CodeOrigin, CallSiteIndex, AccessType, const RegisterSet& usedRegisters);
public:
StructureStubInfo* stubInfo() const { return m_stubInfo; }
@@ -277,7 +277,7 @@
JITByIdGenerator() { }
JITByIdGenerator(
- CodeBlock*, JITType, CodeOrigin, CallSiteIndex, AccessType, const RegisterSet& usedRegisters,
+ CodeBlock*, Bag<StructureStubInfo>*, JITType, CodeOrigin, CallSiteIndex, AccessType, const RegisterSet& usedRegisters,
JSValueRegs base, JSValueRegs value, GPRReg stubInfoGPR);
public:
@@ -306,7 +306,7 @@
JITGetByIdGenerator() { }
JITGetByIdGenerator(
- CodeBlock*, JITType, CodeOrigin, CallSiteIndex, const RegisterSet& usedRegisters, CacheableIdentifier,
+ CodeBlock*, Bag<StructureStubInfo>*, JITType, CodeOrigin, CallSiteIndex, const RegisterSet& usedRegisters, CacheableIdentifier,
JSValueRegs base, JSValueRegs value, GPRReg stubInfoGPR, AccessType);
void generateFastPath(MacroAssembler&);
@@ -321,7 +321,7 @@
JITGetByIdWithThisGenerator() { }
JITGetByIdWithThisGenerator(
- CodeBlock*, JITType, CodeOrigin, CallSiteIndex, const RegisterSet& usedRegisters, CacheableIdentifier,
+ CodeBlock*, Bag<StructureStubInfo>*, JITType, CodeOrigin, CallSiteIndex, const RegisterSet& usedRegisters, CacheableIdentifier,
JSValueRegs value, JSValueRegs base, JSValueRegs thisRegs, GPRReg stubInfoGPR);
void generateBaselineDataICFastPath(JIT&, unsigned stubInfoConstant, GPRReg stubInfoGPR);
@@ -333,7 +333,7 @@
JITPutByIdGenerator() = default;
JITPutByIdGenerator(
- CodeBlock*, JITType, CodeOrigin, CallSiteIndex, const RegisterSet& usedRegisters, CacheableIdentifier,
+ CodeBlock*, Bag<StructureStubInfo>*, JITType, CodeOrigin, CallSiteIndex, const RegisterSet& usedRegisters, CacheableIdentifier,
JSValueRegs base, JSValueRegs value, GPRReg stubInfoGPR, GPRReg scratch, ECMAMode, PutKind);
void generateFastPath(MacroAssembler&);
@@ -352,7 +352,7 @@
JITPutByValGenerator() = default;
JITPutByValGenerator(
- CodeBlock*, JITType, CodeOrigin, CallSiteIndex, AccessType, const RegisterSet& usedRegisters,
+ CodeBlock*, Bag<StructureStubInfo>*, JITType, CodeOrigin, CallSiteIndex, AccessType, const RegisterSet& usedRegisters,
JSValueRegs base, JSValueRegs property, JSValueRegs result, GPRReg arrayProfileGPR, GPRReg stubInfoGPR);
MacroAssembler::Jump slowPathJump() const
@@ -377,7 +377,7 @@
JITDelByValGenerator() { }
JITDelByValGenerator(
- CodeBlock*, JITType, CodeOrigin, CallSiteIndex, const RegisterSet& usedRegisters,
+ CodeBlock*, Bag<StructureStubInfo>*, JITType, CodeOrigin, CallSiteIndex, const RegisterSet& usedRegisters,
JSValueRegs base, JSValueRegs property, JSValueRegs result, GPRReg stubInfoGPR, GPRReg scratch);
MacroAssembler::Jump slowPathJump() const
@@ -400,7 +400,7 @@
JITDelByIdGenerator() { }
JITDelByIdGenerator(
- CodeBlock*, JITType, CodeOrigin, CallSiteIndex, const RegisterSet& usedRegisters, CacheableIdentifier,
+ CodeBlock*, Bag<StructureStubInfo>*, JITType, CodeOrigin, CallSiteIndex, const RegisterSet& usedRegisters, CacheableIdentifier,
JSValueRegs base, JSValueRegs result, GPRReg stubInfoGPR, GPRReg scratch);
MacroAssembler::Jump slowPathJump() const
@@ -423,7 +423,7 @@
JITInByValGenerator() { }
JITInByValGenerator(
- CodeBlock*, JITType, CodeOrigin, CallSiteIndex, AccessType, const RegisterSet& usedRegisters,
+ CodeBlock*, Bag<StructureStubInfo>*, JITType, CodeOrigin, CallSiteIndex, AccessType, const RegisterSet& usedRegisters,
JSValueRegs base, JSValueRegs property, JSValueRegs result, GPRReg stubInfoGPR);
MacroAssembler::Jump slowPathJump() const
@@ -445,7 +445,7 @@
JITInByIdGenerator() { }
JITInByIdGenerator(
- CodeBlock*, JITType, CodeOrigin, CallSiteIndex, const RegisterSet& usedRegisters, CacheableIdentifier,
+ CodeBlock*, Bag<StructureStubInfo>*, JITType, CodeOrigin, CallSiteIndex, const RegisterSet& usedRegisters, CacheableIdentifier,
JSValueRegs base, JSValueRegs value, GPRReg stubInfoGPR);
void generateFastPath(MacroAssembler&);
@@ -458,7 +458,7 @@
JITInstanceOfGenerator() { }
JITInstanceOfGenerator(
- CodeBlock*, JITType, CodeOrigin, CallSiteIndex, const RegisterSet& usedRegisters, GPRReg result,
+ CodeBlock*, Bag<StructureStubInfo>*, JITType, CodeOrigin, CallSiteIndex, const RegisterSet& usedRegisters, GPRReg result,
GPRReg value, GPRReg prototype, GPRReg stubInfoGPR, GPRReg scratch1, GPRReg scratch2,
bool prototypeIsKnownObject = false);
@@ -481,7 +481,7 @@
JITGetByValGenerator() { }
JITGetByValGenerator(
- CodeBlock*, JITType, CodeOrigin, CallSiteIndex, AccessType, const RegisterSet& usedRegisters,
+ CodeBlock*, Bag<StructureStubInfo>*, JITType, CodeOrigin, CallSiteIndex, AccessType, const RegisterSet& usedRegisters,
JSValueRegs base, JSValueRegs property, JSValueRegs result, GPRReg stubInfoGPR);
MacroAssembler::Jump slowPathJump() const
@@ -507,7 +507,7 @@
JITPrivateBrandAccessGenerator() { }
JITPrivateBrandAccessGenerator(
- CodeBlock*, JITType, CodeOrigin, CallSiteIndex, AccessType, const RegisterSet& usedRegisters,
+ CodeBlock*, Bag<StructureStubInfo>*, JITType, CodeOrigin, CallSiteIndex, AccessType, const RegisterSet& usedRegisters,
JSValueRegs base, JSValueRegs brand, GPRReg stubInfoGPR);
MacroAssembler::Jump slowPathJump() const
Modified: trunk/Source/_javascript_Core/jit/JITOpcodes.cpp (285077 => 285078)
--- trunk/Source/_javascript_Core/jit/JITOpcodes.cpp 2021-10-30 06:28:57 UTC (rev 285077)
+++ trunk/Source/_javascript_Core/jit/JITOpcodes.cpp 2021-10-30 06:48:10 UTC (rev 285078)
@@ -169,7 +169,7 @@
emitJumpSlowCaseIfNotJSCell(protoGPR, proto);
JITInstanceOfGenerator gen(
- nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex),
+ nullptr, nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex),
RegisterSet::stubUnavailableRegisters(),
resultGPR,
valueGPR,
Modified: trunk/Source/_javascript_Core/jit/JITOpcodes32_64.cpp (285077 => 285078)
--- trunk/Source/_javascript_Core/jit/JITOpcodes32_64.cpp 2021-10-30 06:28:57 UTC (rev 285077)
+++ trunk/Source/_javascript_Core/jit/JITOpcodes32_64.cpp 2021-10-30 06:48:10 UTC (rev 285078)
@@ -167,7 +167,7 @@
emitJumpSlowCaseIfNotJSCell(proto);
JITInstanceOfGenerator gen(
- nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex),
+ nullptr, nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex),
RegisterSet::stubUnavailableRegisters(),
resultGPR,
valueJSR.payloadGPR(),
Modified: trunk/Source/_javascript_Core/jit/JITPropertyAccess.cpp (285077 => 285078)
--- trunk/Source/_javascript_Core/jit/JITPropertyAccess.cpp 2021-10-30 06:28:57 UTC (rev 285077)
+++ trunk/Source/_javascript_Core/jit/JITPropertyAccess.cpp 2021-10-30 06:48:10 UTC (rev 285078)
@@ -72,7 +72,7 @@
emitArrayProfilingSiteWithCell(bytecode, baseJSR.payloadGPR(), scratchGPR);
JITGetByValGenerator gen(
- nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), AccessType::GetByVal, RegisterSet::stubUnavailableRegisters(),
+ nullptr, nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), AccessType::GetByVal, RegisterSet::stubUnavailableRegisters(),
baseJSR, propertyJSR, resultJSR, stubInfoGPR);
auto [ stubInfo, stubInfoIndex ] = addUnlinkedStructureStubInfo();
@@ -218,7 +218,7 @@
emitJumpSlowCaseIfNotJSCell(baseJSR, base);
JITGetByValGenerator gen(
- nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), AccessType::GetPrivateName,
+ nullptr, nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), AccessType::GetPrivateName,
RegisterSet::stubUnavailableRegisters(), baseJSR, propertyJSR, resultJSR, stubInfoGPR);
auto [ stubInfo, stubInfoIndex ] = addUnlinkedStructureStubInfo();
@@ -340,7 +340,7 @@
emitJumpSlowCaseIfNotJSCell(baseJSR, base);
JITPrivateBrandAccessGenerator gen(
- nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), AccessType::SetPrivateBrand, RegisterSet::stubUnavailableRegisters(),
+ nullptr, nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), AccessType::SetPrivateBrand, RegisterSet::stubUnavailableRegisters(),
baseJSR, brandJSR, stubInfoGPR);
auto [ stubInfo, stubInfoIndex ] = addUnlinkedStructureStubInfo();
@@ -424,7 +424,7 @@
emitJumpSlowCaseIfNotJSCell(baseJSR, base);
JITPrivateBrandAccessGenerator gen(
- nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), AccessType::CheckPrivateBrand, RegisterSet::stubUnavailableRegisters(),
+ nullptr, nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), AccessType::CheckPrivateBrand, RegisterSet::stubUnavailableRegisters(),
baseJSR, brandJSR, stubInfoGPR);
auto [ stubInfo, stubInfoIndex ] = addUnlinkedStructureStubInfo();
@@ -508,7 +508,7 @@
materializePointerIntoMetadata(bytecode, Op::Metadata::offsetOfArrayProfile(), profileGPR);
JITPutByValGenerator gen(
- nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), AccessType::PutByVal, RegisterSet::stubUnavailableRegisters(),
+ nullptr, nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), AccessType::PutByVal, RegisterSet::stubUnavailableRegisters(),
baseJSR, propertyJSR, valueJSR, profileGPR, stubInfoGPR);
auto [ stubInfo, stubInfoIndex ] = addUnlinkedStructureStubInfo();
@@ -669,7 +669,7 @@
emitJumpSlowCaseIfNotJSCell(baseJSR, base);
JITPutByValGenerator gen(
- nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), AccessType::PutPrivateName, RegisterSet::stubUnavailableRegisters(),
+ nullptr, nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), AccessType::PutPrivateName, RegisterSet::stubUnavailableRegisters(),
baseJSR, propertyJSR, valueJSR, InvalidGPRReg, stubInfoGPR);
auto [ stubInfo, stubInfoIndex ] = addUnlinkedStructureStubInfo();
@@ -847,7 +847,7 @@
emitGetVirtualRegister(base, baseJSR);
emitJumpSlowCaseIfNotJSCell(baseJSR, base);
JITDelByIdGenerator gen(
- nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), RegisterSet::stubUnavailableRegisters(),
+ nullptr, nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), RegisterSet::stubUnavailableRegisters(),
CacheableIdentifier::createFromIdentifierOwnedByCodeBlock(m_unlinkedCodeBlock, *ident),
baseJSR, resultJSR, stubInfoGPR, scratchGPR);
@@ -983,7 +983,7 @@
emitJumpSlowCaseIfNotJSCell(propertyJSR, property);
JITDelByValGenerator gen(
- nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), RegisterSet::stubUnavailableRegisters(),
+ nullptr, nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), RegisterSet::stubUnavailableRegisters(),
baseJSR, propertyJSR, resultJSR, stubInfoGPR, scratchGPR);
auto [ stubInfo, stubInfoIndex ] = addUnlinkedStructureStubInfo();
@@ -1115,7 +1115,7 @@
emitJumpSlowCaseIfNotJSCell(baseJSR, baseVReg);
JITGetByIdGenerator gen(
- nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), RegisterSet::stubUnavailableRegisters(),
+ nullptr, nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), RegisterSet::stubUnavailableRegisters(),
CacheableIdentifier::createFromIdentifierOwnedByCodeBlock(m_unlinkedCodeBlock, *ident), baseJSR, resultJSR, stubInfoGPR, AccessType::TryGetById);
auto [ stubInfo, stubInfoIndex ] = addUnlinkedStructureStubInfo();
@@ -1198,7 +1198,7 @@
emitJumpSlowCaseIfNotJSCell(baseJSR, baseVReg);
JITGetByIdGenerator gen(
- nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), RegisterSet::stubUnavailableRegisters(),
+ nullptr, nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), RegisterSet::stubUnavailableRegisters(),
CacheableIdentifier::createFromIdentifierOwnedByCodeBlock(m_unlinkedCodeBlock, *ident), baseJSR, resultJSR, stubInfoGPR, AccessType::GetByIdDirect);
auto [ stubInfo, stubInfoIndex ] = addUnlinkedStructureStubInfo();
@@ -1294,7 +1294,7 @@
}
JITGetByIdGenerator gen(
- nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), RegisterSet::stubUnavailableRegisters(),
+ nullptr, nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), RegisterSet::stubUnavailableRegisters(),
CacheableIdentifier::createFromIdentifierOwnedByCodeBlock(m_unlinkedCodeBlock, *ident), baseJSR, resultJSR, stubInfoGPR, AccessType::GetById);
auto [ stubInfo, stubInfoIndex ] = addUnlinkedStructureStubInfo();
@@ -1383,7 +1383,7 @@
emitJumpSlowCaseIfNotJSCell(thisJSR, thisVReg);
JITGetByIdWithThisGenerator gen(
- nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), RegisterSet::stubUnavailableRegisters(),
+ nullptr, nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), RegisterSet::stubUnavailableRegisters(),
CacheableIdentifier::createFromIdentifierOwnedByCodeBlock(m_unlinkedCodeBlock, *ident), resultJSR, baseJSR, thisJSR, stubInfoGPR);
auto [ stubInfo, stubInfoIndex ] = addUnlinkedStructureStubInfo();
@@ -1563,7 +1563,7 @@
emitJumpSlowCaseIfNotJSCell(baseJSR, baseVReg);
JITPutByIdGenerator gen(
- nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), RegisterSet::stubUnavailableRegisters(),
+ nullptr, nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), RegisterSet::stubUnavailableRegisters(),
CacheableIdentifier::createFromIdentifierOwnedByCodeBlock(m_unlinkedCodeBlock, *ident),
baseJSR, valueJSR, stubInfoGPR, scratchGPR, ecmaMode(bytecode),
direct ? PutKind::Direct : PutKind::NotDirect);
@@ -1691,7 +1691,7 @@
emitJumpSlowCaseIfNotJSCell(baseJSR, baseVReg);
JITInByIdGenerator gen(
- nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), RegisterSet::stubUnavailableRegisters(),
+ nullptr, nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), RegisterSet::stubUnavailableRegisters(),
CacheableIdentifier::createFromIdentifierOwnedByCodeBlock(m_unlinkedCodeBlock, *ident), baseJSR, resultJSR, stubInfoGPR);
auto [ stubInfo, stubInfoIndex ] = addUnlinkedStructureStubInfo();
@@ -1779,7 +1779,7 @@
emitArrayProfilingSiteWithCell(bytecode, baseJSR.payloadGPR(), scratchGPR);
JITInByValGenerator gen(
- nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), AccessType::InByVal, RegisterSet::stubUnavailableRegisters(),
+ nullptr, nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), AccessType::InByVal, RegisterSet::stubUnavailableRegisters(),
baseJSR, propertyJSR, resultJSR, stubInfoGPR);
auto [ stubInfo, stubInfoIndex ] = addUnlinkedStructureStubInfo();
@@ -1864,7 +1864,7 @@
emitJumpSlowCaseIfNotJSCell(baseJSR, base);
JITInByValGenerator gen(
- nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), type, RegisterSet::stubUnavailableRegisters(),
+ nullptr, nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), type, RegisterSet::stubUnavailableRegisters(),
baseJSR, propertyJSR, resultJSR, stubInfoGPR);
auto [ stubInfo, stubInfoIndex ] = addUnlinkedStructureStubInfo();
@@ -3196,7 +3196,7 @@
emitArrayProfilingSiteWithCell(bytecode, baseGPR, scratch1);
JITGetByValGenerator gen(
- nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), AccessType::GetByVal, RegisterSet::stubUnavailableRegisters(),
+ nullptr, nullptr, JITType::BaselineJIT, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), AccessType::GetByVal, RegisterSet::stubUnavailableRegisters(),
JSValueRegs(baseGPR), JSValueRegs(propertyGPR), JSValueRegs(resultGPR), stubInfoGPR);
auto [ stubInfo, stubInfoIndex ] = addUnlinkedStructureStubInfo();