Changeset 175593 in webkit for trunk/Source/JavaScriptCore/llint


Ignore:
Timestamp:
Nov 4, 2014, 5:19:37 PM (11 years ago)
Author:
[email protected]
Message:

Rename checkMarkByte() to jumpIfIsRememberedOrInEden().
<https://webkit.org/b/138369>

Reviewed by Geoffrey Garen.

Write barriers are needed for GC Eden collections so that we can scan pointers
pointing from old generation objects to eden generation objects. The barrier
currently checks the mark byte in a cell to see if we should skip adding the
cell to the GC remembered set. The addition should be skipped if:

  1. The cell is in the young generation. It has no old to eden pointers by definition.
  2. The cell is already in the remembered set. While it is ok to add the cell to the GC remembered set more than once, it would be redundant. Hence, we skip this as an optimization to avoid doing unnecessary work.

The barrier currently names this check as checkMarkByte(). We should rename it
to jumpIfIsRememberedOrInEden() to be clearer about its intent.

Similarly, Jump results of this check are currently named
ownerNotMarkedOrAlreadyRemembered. This can be misinterpreted as the owner is
not marked or not already remembered. We should rename it to
ownerIsRememberedOrInEden which is clearer about the intent of the
check. What we are really checking for is that the cell is in the eden gen,
which is implied by it being "not marked".

  • dfg/DFGOSRExitCompilerCommon.cpp:

(JSC::DFG::osrWriteBarrier):

  • dfg/DFGSpeculativeJIT.cpp:

(JSC::DFG::SpeculativeJIT::writeBarrier):

  • dfg/DFGSpeculativeJIT32_64.cpp:

(JSC::DFG::SpeculativeJIT::writeBarrier):

  • dfg/DFGSpeculativeJIT64.cpp:

(JSC::DFG::SpeculativeJIT::writeBarrier):

  • jit/AssemblyHelpers.h:

(JSC::AssemblyHelpers::jumpIfIsRememberedOrInEden):
(JSC::AssemblyHelpers::checkMarkByte): Deleted.

  • jit/JITPropertyAccess.cpp:

(JSC::JIT::emitWriteBarrier):

  • llint/LowLevelInterpreter.asm:
  • llint/LowLevelInterpreter32_64.asm:
  • llint/LowLevelInterpreter64.asm:
  • runtime/JSCell.h:
Location:
trunk/Source/JavaScriptCore/llint
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/llint/LowLevelInterpreter.asm

    r175426 r175593  
    510510end
    511511
    512 macro checkMarkByte(cell, scratch1, scratch2, continuation)
     512macro skipIfIsRememberedOrInEden(cell, scratch1, scratch2, continuation)
    513513    loadb JSCell::m_gcData[cell], scratch1
    514514    continuation(scratch1)
  • trunk/Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm

    r175508 r175593  
    570570        loadisFromInstruction(cellOperand, t1)
    571571        loadConstantOrVariablePayload(t1, CellTag, t2, .writeBarrierDone)
    572         checkMarkByte(t2, t1, t3,
     572        skipIfIsRememberedOrInEden(t2, t1, t3,
    573573            macro(gcData)
    574574                btbnz gcData, .writeBarrierDone
     
    604604        loadp CodeBlock[cfr], t3
    605605        loadp CodeBlock::m_globalObject[t3], t3
    606         checkMarkByte(t3, t1, t2,
     606        skipIfIsRememberedOrInEden(t3, t1, t2,
    607607            macro(gcData)
    608608                btbnz gcData, .writeBarrierDone
  • trunk/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm

    r175508 r175593  
    444444        loadisFromInstruction(cellOperand, t1)
    445445        loadConstantOrVariableCell(t1, t2, .writeBarrierDone)
    446         checkMarkByte(t2, t1, t3,
     446        skipIfIsRememberedOrInEden(t2, t1, t3,
    447447            macro(gcData)
    448448                btbnz gcData, .writeBarrierDone
     
    475475        loadp CodeBlock[cfr], t3
    476476        loadp CodeBlock::m_globalObject[t3], t3
    477         checkMarkByte(t3, t1, t2,
     477        skipIfIsRememberedOrInEden(t3, t1, t2,
    478478            macro(gcData)
    479479                btbnz gcData, .writeBarrierDone
Note: See TracChangeset for help on using the changeset viewer.