Ignore:
Timestamp:
Sep 26, 2008, 3:40:26 PM (17 years ago)
Author:
[email protected]
Message:

2008-09-26 Geoffrey Garen <[email protected]>

Reviewed by Maciej Stachowiak.


Removed dynamic check for whether the callee needs an activation object.
Replaced with callee code to create the activation object.

0.5% speedup on SunSpider.
No change on v8 benchmark. (Might be a speedup, but it's in range of the
variance.)

0.7% speedup on v8 benchmark in bytecode.
1.3% speedup on empty call benchmark in bytecode.

  • VM/CTI.cpp: (JSC::CTI::privateCompileMainPass): Added support for op_init_activation, the new opcode that specifies that the callee's initialization should create an activation object. (JSC::CTI::privateCompile): Removed previous code that did a similar thing in an ad-hoc way.
  • VM/CodeBlock.cpp: (JSC::CodeBlock::dump): Added a case for dumping op_init_activation.
  • VM/CodeGenerator.cpp: (JSC::CodeGenerator::generate): Added fixup code to change op_init to op_init_activation if necessary. (With a better parser, we would know which to use from the beginning.)
  • VM/Instruction.h: (JSC::Instruction::Instruction): (WTF::): Faster traits for the instruction vector. An earlier version of this patch relied on inserting at the beginning of the vector, and depended on this change for speed.
  • VM/Machine.cpp: (JSC::Machine::execute): Removed clients of setScopeChain, the old abstraction for dynamically checking for whether an activation object needed to be created. (JSC::Machine::privateExecute): ditto

(JSC::Machine::cti_op_push_activation): Renamed this function from
cti_vm_updateScopeChain, and made it faster by removing the call to
setScopeChain.

  • VM/Machine.h:
  • VM/Opcode.h: Declared op_init_activation.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/VM/CodeGenerator.cpp

    r36821 r36972  
    136136
    137137    m_scopeNode->emitCode(*this);
     138
     139    if (m_codeType == FunctionCode && m_codeBlock->needsFullScopeChain) {
     140        ASSERT(globalData()->machine->getOpcodeID(m_codeBlock->instructions[0].u.opcode) == op_init);
     141        m_codeBlock->instructions[0] = globalData()->machine->getOpcode(op_init_activation);
     142    }
    138143
    139144#ifndef NDEBUG
Note: See TracChangeset for help on using the changeset viewer.