Ignore:
Timestamp:
Sep 9, 2013, 10:37:51 PM (12 years ago)
Author:
[email protected]
Message:

Add local to/from operand helpers similar to argument to/from operand2
https://bugs.webkit.org/show_bug.cgi?id=121056

Reviewed by Geoffrey Garen.

Added localToOperand(), operandToLocal() and operandIsLocal() to Operands.h, very similar to
argumentToOperand(), et al. Used the new helpers everywhere where an index into a data
structure is intended instead of the actual virtual register offset. When the stack is
changed to grow down, local register offsets can be negative. Also added the helper
DFG::SpeculativeJIT::generationInfoFromVirtualRegister() for the common case accessing
m_generationInfo[operandToLocal(val)].

  • bytecode/CodeBlock.cpp:
  • bytecode/CodeBlock.h:
  • bytecode/Operands.h:

(JSC::localToOperand):
(JSC::operandIsLocal):
(JSC::operandToLocal):

  • bytecompiler/BytecodeGenerator.h:
  • dfg/DFGAbstractInterpreterInlines.h:
  • dfg/DFGByteCodeParser.cpp:
  • dfg/DFGCFGSimplificationPhase.cpp:
  • dfg/DFGCPSRethreadingPhase.cpp:
  • dfg/DFGOSREntry.cpp:
  • dfg/DFGOSRExitCompiler32_64.cpp:
  • dfg/DFGOSRExitCompiler64.cpp:
  • dfg/DFGScoreBoard.h:
  • dfg/DFGSpeculativeJIT.cpp:
  • dfg/DFGSpeculativeJIT.h:

(JSC::DFG::SpeculativeJIT::generationInfoFromVirtualRegister):

  • dfg/DFGSpeculativeJIT32_64.cpp:
  • dfg/DFGSpeculativeJIT64.cpp:
  • dfg/DFGValidate.cpp:
  • dfg/DFGVariableEventStream.cpp:
  • dfg/DFGVirtualRegisterAllocationPhase.cpp:
  • jit/JITInlines.h:
  • jit/JITOpcodes.cpp:
  • jit/JITOpcodes32_64.cpp:
File:
1 edited

Legend:

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

    r155201 r155415  
    318318SilentRegisterSavePlan SpeculativeJIT::silentSavePlanForGPR(VirtualRegister spillMe, GPRReg source)
    319319{
    320     GenerationInfo& info = m_generationInfo[spillMe];
     320    GenerationInfo& info = generationInfoFromVirtualRegister(spillMe);
    321321    Node* node = info.node();
    322322    DataFormat registerFormat = info.registerFormat();
     
    437437SilentRegisterSavePlan SpeculativeJIT::silentSavePlanForFPR(VirtualRegister spillMe, FPRReg source)
    438438{
    439     GenerationInfo& info = m_generationInfo[spillMe];
     439    GenerationInfo& info = generationInfoFromVirtualRegister(spillMe);
    440440    Node* node = info.node();
    441441    ASSERT(info.registerFormat() == DataFormatDouble);
     
    778778{
    779779    VirtualRegister virtualRegister = edge->virtualRegister();
    780     GenerationInfo& info = m_generationInfo[virtualRegister];
     780    GenerationInfo& info = generationInfoFromVirtualRegister(virtualRegister);
    781781   
    782782    switch (info.registerFormat()) {
     
    10771077    for (unsigned i = 0; i < m_generationInfo.size(); ++i) {
    10781078        VirtualRegister virtualRegister = (VirtualRegister)i;
    1079         GenerationInfo& info = m_generationInfo[virtualRegister];
     1079        GenerationInfo& info = generationInfoFromVirtualRegister(virtualRegister);
    10801080        if (!info.alive())
    10811081            continue;
     
    11251125            continue;
    11261126
    1127         GenerationInfo& info = m_generationInfo[virtualRegister];
     1127        GenerationInfo& info = generationInfoFromVirtualRegister(virtualRegister);
    11281128#if USE(JSVALUE64)
    11291129        if (iter.regID() != info.gpr()) {
     
    11511151            continue;
    11521152
    1153         GenerationInfo& info = m_generationInfo[virtualRegister];
     1153        GenerationInfo& info = generationInfoFromVirtualRegister(virtualRegister);
    11541154        if (iter.regID() != info.fpr()) {
    11551155            dataLogF("DFG_CONSISTENCY_CHECK failed: name mismatch for fpr %s (virtual register %d).\n", iter.debugName(), virtualRegister);
     
    15491549   
    15501550    VirtualRegister virtualRegister = node->virtualRegister();
    1551     GenerationInfo& info = m_generationInfo[virtualRegister];
     1551    GenerationInfo& info = generationInfoFromVirtualRegister(virtualRegister);
    15521552   
    15531553    info.noticeOSRBirth(*m_stream, node, virtualRegister);
     
    16821682        m_variables[i] = valueSource;
    16831683        // FIXME: Don't emit SetLocal(Dead). https://bugs.webkit.org/show_bug.cgi?id=108019
    1684         m_stream->appendAndLog(VariableEvent::setLocal(i, valueSource.dataFormat()));
     1684        m_stream->appendAndLog(VariableEvent::setLocal(localToOperand(i), valueSource.dataFormat()));
    16851685    }
    16861686   
     
    21772177#endif
    21782178    VirtualRegister virtualRegister = node->virtualRegister();
    2179     GenerationInfo& info = m_generationInfo[virtualRegister];
     2179    GenerationInfo& info = generationInfoFromVirtualRegister(virtualRegister);
    21802180
    21812181    switch (info.registerFormat()) {
     
    22912291            Node* childNode = node->child1().node();
    22922292            VirtualRegister virtualRegister = childNode->virtualRegister();
    2293             GenerationInfo& info = m_generationInfo[virtualRegister];
     2293            GenerationInfo& info = generationInfoFromVirtualRegister(virtualRegister);
    22942294
    22952295            JSValueOperand op1(this, node->child1(), ManualOperandSpeculation);
Note: See TracChangeset for help on using the changeset viewer.