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/DFGJITCompiler.cpp

    r93238 r93698  
    10421042
    10431043#if ENABLE(SAMPLING_COUNTERS) && CPU(X86_64) // Or any other 64-bit platform!
    1044 void JITCompiler::emitCount(AbstractSamplingCounter& counter, uint32_t increment)
    1045 {
    1046     addPtr(TrustedImm32(increment), AbsoluteAddress(counter.addressOfCounter()));
     1044void JITCompiler::emitCount(MacroAssembler& jit, AbstractSamplingCounter& counter, uint32_t increment)
     1045{
     1046    jit.addPtr(TrustedImm32(increment), AbsoluteAddress(counter.addressOfCounter()));
    10471047}
    10481048#endif
    10491049
    10501050#if ENABLE(SAMPLING_COUNTERS) && CPU(X86) // Or any other little-endian 32-bit platform!
    1051 void JITCompiler::emitCount(AbstractSamplingCounter& counter, uint32_t increment)
     1051void JITCompiler::emitCount(MacroAsembler& jit, AbstractSamplingCounter& counter, uint32_t increment)
    10521052{
    10531053    intptr_t hiWord = reinterpret_cast<intptr_t>(counter.addressOfCounter()) + sizeof(int32_t);
    1054     add32(TrustedImm32(increment), AbsoluteAddress(counter.addressOfCounter()));
    1055     addWithCarry32(TrustedImm32(0), AbsoluteAddress(reinterpret_cast<void*>(hiWord)));
     1054    jit.add32(TrustedImm32(increment), AbsoluteAddress(counter.addressOfCounter()));
     1055    jit.addWithCarry32(TrustedImm32(0), AbsoluteAddress(reinterpret_cast<void*>(hiWord)));
    10561056}
    10571057#endif
Note: See TracChangeset for help on using the changeset viewer.