Ignore:
Timestamp:
Aug 24, 2011, 2:50:40 AM (14 years ago)
Author:
[email protected]
Message:

There is no facility for profiling how the write barrier is used
https://bugs.webkit.org/show_bug.cgi?id=66747

Reviewed by Geoffrey Garen.

Added facilities for the JIT to specify the kind of write barrier
being executed. Added code for profiling the number of each kind
of barrier encountered.

(JSC::DFG::JITCodeGenerator::writeBarrier):
(JSC::DFG::JITCodeGenerator::cachedPutById):

  • dfg/DFGJITCodeGenerator.h:
  • dfg/DFGJITCompiler.cpp:

(JSC::DFG::JITCompiler::emitCount):

  • dfg/DFGJITCompiler.h:

(JSC::DFG::JITCompiler::emitCount):

  • dfg/DFGNonSpeculativeJIT.cpp:

(JSC::DFG::NonSpeculativeJIT::compile):

  • dfg/DFGRepatch.cpp:

(JSC::DFG::tryCachePutByID):

  • dfg/DFGSpeculativeJIT.cpp:

(JSC::DFG::SpeculativeJIT::compile):

  • heap/Heap.h:

(JSC::Heap::writeBarrier):

  • heap/WriteBarrierSupport.cpp: Added.

(JSC::WriteBarrierCounters::initialize):

  • heap/WriteBarrierSupport.h: Added.

(JSC::WriteBarrierCounters::WriteBarrierCounters):
(JSC::WriteBarrierCounters::jitCounterFor):
(JSC::WriteBarrierCounters::countWriteBarrier):

  • jit/JIT.h:
  • jit/JITPropertyAccess.cpp:

(JSC::JIT::emit_op_put_by_id):
(JSC::JIT::privateCompilePutByIdTransition):
(JSC::JIT::emit_op_put_scoped_var):
(JSC::JIT::emit_op_put_global_var):
(JSC::JIT::emitWriteBarrier):

  • jit/JITPropertyAccess32_64.cpp:

(JSC::JIT::emit_op_put_by_val):
(JSC::JIT::emit_op_put_by_id):
(JSC::JIT::privateCompilePutByIdTransition):
(JSC::JIT::emit_op_put_scoped_var):
(JSC::JIT::emit_op_put_global_var):
(JSC::JIT::emitWriteBarrier):

  • runtime/InitializeThreading.cpp:

(JSC::initializeThreadingOnce):

  • runtime/WriteBarrier.h:

(JSC::WriteBarrierBase::setWithoutWriteBarrier):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp

    r93298 r93698  
    946946            return;
    947947       
    948         writeBarrier(m_jit, baseReg, scratchReg);
     948        writeBarrier(m_jit, baseReg, scratchReg, WriteBarrierForPropertyAccess);
    949949
    950950        // Check that base is an array, and that property is contained within m_vector (< m_vectorLength).
     
    10051005        GPRReg scratchReg = scratch.gpr();
    10061006
    1007         writeBarrier(m_jit, baseReg, scratchReg);
     1007        writeBarrier(m_jit, baseReg, scratchReg, WriteBarrierForPropertyAccess);
    10081008
    10091009        // Get the array storage.
     
    11661166        m_jit.move(MacroAssembler::TrustedImmPtr(m_jit.codeBlock()->globalObject()), globalObjectReg);
    11671167
    1168         writeBarrier(m_jit, globalObjectReg, scratchReg);
     1168        writeBarrier(m_jit, globalObjectReg, scratchReg, WriteBarrierForVariableAccess);
    11691169
    11701170        m_jit.loadPtr(MacroAssembler::Address(globalObjectReg, JSVariableObject::offsetOfRegisters()), scratchReg);
Note: See TracChangeset for help on using the changeset viewer.