Title: [289037] trunk/Source/_javascript_Core
Revision
289037
Author
[email protected]
Date
2022-02-03 02:07:16 -0800 (Thu, 03 Feb 2022)

Log Message

[JSC] Use MetadataTable instead of UnlinkedMetadataTable
https://bugs.webkit.org/show_bug.cgi?id=236063
rdar://88269480

Reviewed by Robin Morisset.

Use MetadataTable from profiled CodeBlock instead of UnlinkedMetadataTable in concurrent JIT compiler.

* bytecode/MetadataTable.h:
(JSC::MetadataTable::offsetInMetadataTable):
* bytecode/UnlinkedMetadataTable.h:
(JSC::UnlinkedMetadataTable::offsetInMetadataTable):
* jit/JITInlines.h:
(JSC::JIT::emitValueProfilingSite):
(JSC::JIT::loadPtrFromMetadata):
(JSC::JIT::load32FromMetadata):
(JSC::JIT::load8FromMetadata):
(JSC::JIT::store8ToMetadata):
(JSC::JIT::store32ToMetadata):
(JSC::JIT::materializePointerIntoMetadata):
* jit/JITPropertyAccess.cpp:
(JSC::JIT::emit_op_resolve_scope):
(JSC::JIT::emit_op_get_from_scope):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (289036 => 289037)


--- trunk/Source/_javascript_Core/ChangeLog	2022-02-03 09:18:07 UTC (rev 289036)
+++ trunk/Source/_javascript_Core/ChangeLog	2022-02-03 10:07:16 UTC (rev 289037)
@@ -1,3 +1,29 @@
+2022-02-03  Yusuke Suzuki  <[email protected]>
+
+        [JSC] Use MetadataTable instead of UnlinkedMetadataTable
+        https://bugs.webkit.org/show_bug.cgi?id=236063
+        rdar://88269480
+
+        Reviewed by Robin Morisset.
+
+        Use MetadataTable from profiled CodeBlock instead of UnlinkedMetadataTable in concurrent JIT compiler.
+
+        * bytecode/MetadataTable.h:
+        (JSC::MetadataTable::offsetInMetadataTable):
+        * bytecode/UnlinkedMetadataTable.h:
+        (JSC::UnlinkedMetadataTable::offsetInMetadataTable):
+        * jit/JITInlines.h:
+        (JSC::JIT::emitValueProfilingSite):
+        (JSC::JIT::loadPtrFromMetadata):
+        (JSC::JIT::load32FromMetadata):
+        (JSC::JIT::load8FromMetadata):
+        (JSC::JIT::store8ToMetadata):
+        (JSC::JIT::store32ToMetadata):
+        (JSC::JIT::materializePointerIntoMetadata):
+        * jit/JITPropertyAccess.cpp:
+        (JSC::JIT::emit_op_resolve_scope):
+        (JSC::JIT::emit_op_get_from_scope):
+
 2022-02-02  Saam Barati  <[email protected]>
 
         SecureARM64EHashPins should check g_jscConfig.useFastJITPermissions

Modified: trunk/Source/_javascript_Core/bytecode/MetadataTable.h (289036 => 289037)


--- trunk/Source/_javascript_Core/bytecode/MetadataTable.h	2022-02-03 09:18:07 UTC (rev 289036)
+++ trunk/Source/_javascript_Core/bytecode/MetadataTable.h	2022-02-03 10:07:16 UTC (rev 289037)
@@ -92,6 +92,14 @@
         return refCount() == 1;
     }
 
+    template <typename Opcode>
+    uintptr_t offsetInMetadataTable(const Opcode& opcode)
+    {
+        uintptr_t baseTypeOffset = is32Bit() ? offsetTable32()[Opcode::opcodeID] : offsetTable16()[Opcode::opcodeID];
+        baseTypeOffset = roundUpToMultipleOf(alignof(typename Opcode::Metadata), baseTypeOffset);
+        return baseTypeOffset + sizeof(typename Opcode::Metadata) * opcode.m_metadataID;
+    }
+
 private:
     MetadataTable(UnlinkedMetadataTable&);
 

Modified: trunk/Source/_javascript_Core/bytecode/UnlinkedMetadataTable.h (289036 => 289037)


--- trunk/Source/_javascript_Core/bytecode/UnlinkedMetadataTable.h	2022-02-03 09:18:07 UTC (rev 289036)
+++ trunk/Source/_javascript_Core/bytecode/UnlinkedMetadataTable.h	2022-02-03 10:07:16 UTC (rev 289037)
@@ -68,6 +68,8 @@
     uintptr_t offsetInMetadataTable(const Opcode& opcode)
     {
         ASSERT(m_isFinalized);
+        // UnlinkedMetadataTable can be realloc-ed from the mutator thread, thus, it is not OK to touch this table from non mutator thread if the mutator thread is running.
+        ASSERT(!isCompilationThread() && !Thread::mayBeGCThread());
         uintptr_t baseTypeOffset = m_is32Bit ? offsetTable32()[Opcode::opcodeID] : offsetTable16()[Opcode::opcodeID];
         baseTypeOffset = roundUpToMultipleOf(alignof(typename Opcode::Metadata), baseTypeOffset);
         return baseTypeOffset + sizeof(typename Opcode::Metadata) * opcode.m_metadataID;

Modified: trunk/Source/_javascript_Core/jit/JITInlines.h (289036 => 289037)


--- trunk/Source/_javascript_Core/jit/JITInlines.h	2022-02-03 09:18:07 UTC (rev 289036)
+++ trunk/Source/_javascript_Core/jit/JITInlines.h	2022-02-03 10:07:16 UTC (rev 289037)
@@ -318,7 +318,7 @@
     if (!shouldEmitProfiling())
         return;
 
-    ptrdiff_t offset = m_unlinkedCodeBlock->metadata().offsetInMetadataTable(bytecode) + valueProfileOffsetFor<Bytecode>(m_bytecodeIndex.checkpoint()) + ValueProfile::offsetOfFirstBucket();
+    ptrdiff_t offset = m_profiledCodeBlock->metadataTable()->offsetInMetadataTable(bytecode) + valueProfileOffsetFor<Bytecode>(m_bytecodeIndex.checkpoint()) + ValueProfile::offsetOfFirstBucket();
     storeValue(value, Address(s_metadataGPR, offset));
 }
 
@@ -470,37 +470,37 @@
 template <typename Bytecode>
 ALWAYS_INLINE void JIT::loadPtrFromMetadata(const Bytecode& bytecode, size_t offset, GPRReg result)
 {
-    loadPtr(Address(s_metadataGPR, m_unlinkedCodeBlock->metadata().offsetInMetadataTable(bytecode) + offset), result);
+    loadPtr(Address(s_metadataGPR, m_profiledCodeBlock->metadataTable()->offsetInMetadataTable(bytecode) + offset), result);
 }
 
 template <typename Bytecode>
 ALWAYS_INLINE void JIT::load32FromMetadata(const Bytecode& bytecode, size_t offset, GPRReg result)
 {
-    load32(Address(s_metadataGPR, m_unlinkedCodeBlock->metadata().offsetInMetadataTable(bytecode) + offset), result);
+    load32(Address(s_metadataGPR, m_profiledCodeBlock->metadataTable()->offsetInMetadataTable(bytecode) + offset), result);
 }
 
 template <typename Bytecode>
 ALWAYS_INLINE void JIT::load8FromMetadata(const Bytecode& bytecode, size_t offset, GPRReg result)
 {
-    load8(Address(s_metadataGPR, m_unlinkedCodeBlock->metadata().offsetInMetadataTable(bytecode) + offset), result);
+    load8(Address(s_metadataGPR, m_profiledCodeBlock->metadataTable()->offsetInMetadataTable(bytecode) + offset), result);
 }
 
 template <typename ValueType, typename Bytecode>
 ALWAYS_INLINE void JIT::store8ToMetadata(ValueType value, const Bytecode& bytecode, size_t offset)
 {
-    store8(value, Address(s_metadataGPR, m_unlinkedCodeBlock->metadata().offsetInMetadataTable(bytecode) + offset));
+    store8(value, Address(s_metadataGPR, m_profiledCodeBlock->metadataTable()->offsetInMetadataTable(bytecode) + offset));
 }
 
 template <typename Bytecode>
 ALWAYS_INLINE void JIT::store32ToMetadata(GPRReg value, const Bytecode& bytecode, size_t offset)
 {
-    store32(value, Address(s_metadataGPR, m_unlinkedCodeBlock->metadata().offsetInMetadataTable(bytecode) + offset));
+    store32(value, Address(s_metadataGPR, m_profiledCodeBlock->metadataTable()->offsetInMetadataTable(bytecode) + offset));
 }
 
 template <typename Bytecode>
 ALWAYS_INLINE void JIT::materializePointerIntoMetadata(const Bytecode& bytecode, size_t offset, GPRReg result)
 {
-    addPtr(TrustedImm32(m_unlinkedCodeBlock->metadata().offsetInMetadataTable(bytecode) + offset), s_metadataGPR, result);
+    addPtr(TrustedImm32(m_profiledCodeBlock->metadataTable()->offsetInMetadataTable(bytecode) + offset), s_metadataGPR, result);
 }
 
 ALWAYS_INLINE void JIT::loadConstant(JITConstantPool::Constant constantIndex, GPRReg result)

Modified: trunk/Source/_javascript_Core/jit/JITPropertyAccess.cpp (289036 => 289037)


--- trunk/Source/_javascript_Core/jit/JITPropertyAccess.cpp	2022-02-03 09:18:07 UTC (rev 289036)
+++ trunk/Source/_javascript_Core/jit/JITPropertyAccess.cpp	2022-02-03 10:07:16 UTC (rev 289037)
@@ -1952,7 +1952,7 @@
     if (profiledResolveType == ModuleVar) 
         loadPtrFromMetadata(bytecode, OpResolveScope::Metadata::offsetOfLexicalEnvironment(), returnValueGPR);
     else {
-        uint32_t metadataOffset = m_unlinkedCodeBlock->metadata().offsetInMetadataTable(bytecode);
+        uint32_t metadataOffset = m_profiledCodeBlock->metadataTable()->offsetInMetadataTable(bytecode);
 
         constexpr GPRReg metadataGPR = regT2;
         constexpr GPRReg scopeGPR = regT0;
@@ -2199,7 +2199,7 @@
     constexpr GPRReg scopeGPR = regT2;
     constexpr GPRReg bytecodeOffsetGPR = regT3;
 
-    uint32_t metadataOffset = m_unlinkedCodeBlock->metadata().offsetInMetadataTable(bytecode);
+    uint32_t metadataOffset = m_profiledCodeBlock->metadataTable()->offsetInMetadataTable(bytecode);
 
     emitGetVirtualRegisterPayload(scope, scopeGPR);
     addPtr(TrustedImm32(metadataOffset), s_metadataGPR, metadataGPR);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to