Ignore:
Timestamp:
Jun 30, 2011, 5:10:23 PM (14 years ago)
Author:
[email protected]
Message:

2011-06-30 Geoffrey Garen <[email protected]>

Reviewed by Gavin Barraclough.

Added empty write barrier stubs in all the right places in the DFG JIT
https://bugs.webkit.org/show_bug.cgi?id=63764


SunSpider thinks this might be a 0.5% speedup. Meh.

  • dfg/DFGJITCodeGenerator.cpp: (JSC::DFG::JITCodeGenerator::writeBarrier): Le stub.

(JSC::DFG::JITCodeGenerator::cachedPutById): Don't do anything special
for the case where base == scratch, since we now require base and scratch
to be not equal, for the sake of the write barrier.

  • dfg/DFGJITCodeGenerator.h: Le stub.
  • dfg/DFGNonSpeculativeJIT.cpp: (JSC::DFG::NonSpeculativeJIT::compile): Don't reuse the base register as the scratch register, since that's incompatible with the write barrier, which needs a distinct base and scratch.


Do put the global object into a register before loading its var storage,
since it needs to be in a register for the write barrier to operate on it.

  • dfg/DFGSpeculativeJIT.cpp: (JSC::DFG::SpeculativeJIT::compile):
  • jit/JITPropertyAccess.cpp: (JSC::JIT::emitWriteBarrier): Second verse, same as the first.
  • jit/JITPropertyAccess.cpp: (JSC::JIT::emit_op_get_scoped_var): (JSC::JIT::emit_op_put_scoped_var): (JSC::JIT::emit_op_put_global_var): Deployed offsetOfRegisters() to more places.

(JSC::JIT::emitWriteBarrier): Added a teeny tiny ASSERT so this function
is a little more than meaningless.

  • jit/JITPropertyAccess32_64.cpp: (JSC::JIT::emit_op_get_scoped_var): (JSC::JIT::emit_op_put_scoped_var): (JSC::JIT::emit_op_put_global_var): Deployed offsetOfRegisters() to more places.

(JSC::JIT::emitWriteBarrier): Added a teeny tiny ASSERT so this function
is a little more than meaningless.

  • runtime/JSVariableObject.h: (JSC::JSVariableObject::offsetOfRegisters): Now used by the JIT, since we put the global object in a register and only then load its var storage by offset.

(JSC::JIT::emitWriteBarrier):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r90179 r90187  
     12011-06-30  Geoffrey Garen  <[email protected]>
     2
     3        Reviewed by Gavin Barraclough.
     4
     5        Added empty write barrier stubs in all the right places in the DFG JIT
     6        https://bugs.webkit.org/show_bug.cgi?id=63764
     7       
     8        SunSpider thinks this might be a 0.5% speedup. Meh.
     9
     10        * dfg/DFGJITCodeGenerator.cpp:
     11        (JSC::DFG::JITCodeGenerator::writeBarrier): Le stub.
     12
     13        (JSC::DFG::JITCodeGenerator::cachedPutById): Don't do anything special
     14        for the case where base == scratch, since we now require base and scratch
     15        to be not equal, for the sake of the write barrier.
     16
     17        * dfg/DFGJITCodeGenerator.h: Le stub.
     18
     19        * dfg/DFGNonSpeculativeJIT.cpp:
     20        (JSC::DFG::NonSpeculativeJIT::compile): Don't reuse the base register
     21        as the scratch register, since that's incompatible with the write barrier,
     22        which needs a distinct base and scratch.
     23       
     24        Do put the global object into a register before loading its var storage,
     25        since it needs to be in a register for the write barrier to operate on it.
     26
     27        * dfg/DFGSpeculativeJIT.cpp:
     28        (JSC::DFG::SpeculativeJIT::compile):
     29        * jit/JITPropertyAccess.cpp:
     30        (JSC::JIT::emitWriteBarrier): Second verse, same as the first.
     31
     32        * jit/JITPropertyAccess.cpp:
     33        (JSC::JIT::emit_op_get_scoped_var):
     34        (JSC::JIT::emit_op_put_scoped_var):
     35        (JSC::JIT::emit_op_put_global_var): Deployed offsetOfRegisters() to more
     36        places.
     37
     38        (JSC::JIT::emitWriteBarrier): Added a teeny tiny ASSERT so this function
     39        is a little more than meaningless.
     40
     41        * jit/JITPropertyAccess32_64.cpp:
     42        (JSC::JIT::emit_op_get_scoped_var):
     43        (JSC::JIT::emit_op_put_scoped_var):
     44        (JSC::JIT::emit_op_put_global_var): Deployed offsetOfRegisters() to more
     45        places.
     46
     47        (JSC::JIT::emitWriteBarrier): Added a teeny tiny ASSERT so this function
     48        is a little more than meaningless.
     49
     50        * runtime/JSVariableObject.h:
     51        (JSC::JSVariableObject::offsetOfRegisters): Now used by the JIT, since
     52        we put the global object in a register and only then load its var storage
     53        by offset.
     54
     55        (JSC::JIT::emitWriteBarrier):
     56
    1572011-06-30  Oliver Hunt  <[email protected]>
    258
Note: See TracChangeset for help on using the changeset viewer.