Ignore:
Timestamp:
Aug 6, 2008, 3:37:34 AM (17 years ago)
Author:
[email protected]
Message:

2008-08-06 Cameron Zwarich <[email protected]>

Reviewed by Maciej.

Bug 20286: Load constants all at once instead of using op_load
<https://bugs.webkit.org/show_bug.cgi?id=20286>

Load constants all at once into temporary registers instead of using
individual instances of op_load.

This is a 2.6% speedup on SunSpider.

JavaScriptCore:

  • JavaScriptCore.exp:
  • VM/CodeBlock.cpp: (KJS::CodeBlock::dump): (KJS::CodeBlock::mark):
  • VM/CodeBlock.h:
  • VM/CodeGenerator.cpp: (KJS::CodeGenerator::CodeGenerator): (KJS::CodeGenerator::newTemporary): (KJS::CodeGenerator::addConstant): (KJS::CodeGenerator::addUnexpectedConstant): (KJS::CodeGenerator::emitLoad): (KJS::CodeGenerator::emitUnexpectedLoad): (KJS::CodeGenerator::emitNewError):
  • VM/CodeGenerator.h:
  • VM/Machine.cpp: (KJS::slideRegisterWindowForCall): (KJS::Machine::unwindCallFrame): (KJS::Machine::throwException): (KJS::Machine::execute): (KJS::Machine::privateExecute):
  • VM/Machine.h:
  • VM/Opcode.h:
  • VM/RegisterID.h: (KJS::RegisterID::RegisterID): (KJS::RegisterID::makeConstant): (KJS::RegisterID::isTemporary):
  • kjs/NodeInfo.h:
  • kjs/Parser.cpp: (KJS::Parser::didFinishParsing):
  • kjs/Parser.h: (KJS::Parser::parse):
  • kjs/grammar.y:
  • kjs/nodes.cpp: (KJS::NullNode::emitCode): (KJS::BooleanNode::emitCode): (KJS::NumberNode::emitCode): (KJS::StringNode::emitCode): (KJS::ArrayNode::emitCode): (KJS::DeleteResolveNode::emitCode): (KJS::DeleteValueNode::emitCode): (KJS::VoidNode::emitCode): (KJS::ConstDeclNode::emitCodeSingle): (KJS::ReturnNode::emitCode): (KJS::ScopeNode::ScopeNode): (KJS::ProgramNode::ProgramNode): (KJS::ProgramNode::create): (KJS::EvalNode::EvalNode): (KJS::EvalNode::create): (KJS::FunctionBodyNode::FunctionBodyNode): (KJS::FunctionBodyNode::create): (KJS::FunctionBodyNode::emitCode):
  • kjs/nodes.h: (KJS::ScopeNode::neededConstants):

LayoutTests:

  • fast/js/constant-count-expected.txt: Added.
  • fast/js/constant-count.html: Added.
  • fast/js/deep-recursion-test.html:
  • fast/js/resources/constant-count.js: Added.
File:
1 edited

Legend:

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

    r35533 r35593  
    231231        RegisterID* emitLoad(RegisterID* dst, double);
    232232        RegisterID* emitLoad(RegisterID* dst, JSValue*);
     233        RegisterID* emitUnexpectedLoad(RegisterID* dst, bool);
    233234
    234235        RegisterID* emitNullaryOp(OpcodeID, RegisterID* dst);
     
    376377        unsigned addConstant(FuncExprNode*);
    377378        unsigned addConstant(const Identifier&);
    378         unsigned addConstant(JSValue*);
     379        RegisterID* addConstant(JSValue*);
     380        unsigned addUnexpectedConstant(JSValue*);
    379381        unsigned addRegExp(RegExp* r);
    380382
     
    397399        RegisterID m_thisRegister;
    398400        SegmentedVector<RegisterID, 512> m_locals;
     401        SegmentedVector<RegisterID, 512> m_constants;
    399402        SegmentedVector<RegisterID, 512> m_temporaries;
    400403        SegmentedVector<LabelID, 512> m_labels;
Note: See TracChangeset for help on using the changeset viewer.