Ignore:
Timestamp:
Dec 19, 2011, 6:42:06 PM (13 years ago)
Author:
[email protected]
Message:

If we detect that we can use the JIT, don't use computed opcode lookups
https://bugs.webkit.org/show_bug.cgi?id=74899
<rdar://problem/10604551>

Reviewed by Gavin Barraclough.

  • interpreter/Interpreter.cpp:

(JSC::Interpreter::Interpreter):
(JSC::Interpreter::initialize):
(JSC::Interpreter::privateExecute):

  • interpreter/Interpreter.h:

(JSC::Interpreter::getOpcode):
(JSC::Interpreter::getOpcodeID):

  • runtime/JSGlobalData.cpp:

(JSC::JSGlobalData::JSGlobalData):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/interpreter/Interpreter.h

    r102545 r103292  
    9595    public:
    9696        Interpreter();
     97       
     98        void initialize(bool canUseJIT);
    9799
    98100        RegisterFile& registerFile() { return m_registerFile; }
     
    100102        Opcode getOpcode(OpcodeID id)
    101103        {
    102             #if ENABLE(COMPUTED_GOTO_INTERPRETER)
    103                 return m_opcodeTable[id];
    104             #else
    105                 return id;
    106             #endif
     104            ASSERT(m_initialized);
     105#if ENABLE(COMPUTED_GOTO_INTERPRETER)
     106            return m_opcodeTable[id];
     107#else
     108            return id;
     109#endif
    107110        }
    108111
    109112        OpcodeID getOpcodeID(Opcode opcode)
    110113        {
    111             #if ENABLE(COMPUTED_GOTO_INTERPRETER)
    112                 ASSERT(isOpcode(opcode));
    113                 return m_opcodeIDTable.get(opcode);
    114             #else
    115                 return opcode;
    116             #endif
     114            ASSERT(m_initialized);
     115#if ENABLE(COMPUTED_GOTO_INTERPRETER)
     116            ASSERT(isOpcode(opcode));
     117            if (!m_enabled) {
     118                OpcodeID result = static_cast<OpcodeID>(bitwise_cast<uintptr_t>(opcode));
     119                ASSERT(result == m_opcodeIDTable.get(opcode));
     120                return result;
     121            }
     122            return m_opcodeIDTable.get(opcode);
     123#else
     124            return opcode;
     125#endif
    117126        }
    118127
     
    187196        HashMap<Opcode, OpcodeID> m_opcodeIDTable; // Maps Opcode => OpcodeID for decompiling
    188197#endif
     198
     199#if !ASSERT_DISABLED
     200        bool m_initialized;
     201#endif
     202        bool m_enabled;
    189203    };
    190204
Note: See TracChangeset for help on using the changeset viewer.