Ignore:
Timestamp:
Mar 20, 2008, 2:34:47 AM (17 years ago)
Author:
[email protected]
Message:

2008-03-20 Maciej Stachowiak <[email protected]>

Reviewed by Oliver.


  • reduce function call overhead for 1.014x speedup on SunSpider

I moved some functions from ExecState.cpp to ExecStateInline.h and
from JSGlobalObject.cpp to JSGlobalObject.h, and declared them
inline; machine function call overhead for these was hurting JS
funcion call overhead.


  • kjs/ExecState.cpp:
  • kjs/ExecStateInlines.h: Added. (KJS::ExecState::ExecState): (KJS::ExecState::~ExecState): (KJS::FunctionExecState::FunctionExecState): (KJS::FunctionExecState::~FunctionExecState):
  • kjs/JSGlobalObject.cpp:
  • kjs/JSGlobalObject.h: (KJS::JSGlobalObject::pushActivation): (KJS::JSGlobalObject::checkActivationCount): (KJS::JSGlobalObject::popActivation):
  • kjs/function.cpp:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/kjs/JSGlobalObject.h

    r31167 r31173  
    2525
    2626#include "JSVariableObject.h"
     27#include "Activation.h"
    2728
    2829namespace KJS {
     
    264265    }
    265266
     267    inline ActivationImp* JSGlobalObject::pushActivation(ExecState* exec)
     268    {
     269        if (d()->activationCount == activationStackNodeSize) {
     270            ActivationStackNode* newNode = new ActivationStackNode;
     271            newNode->prev = d()->activations;
     272            d()->activations = newNode;
     273            d()->activationCount = 0;
     274        }
     275       
     276        StackActivation* stackEntry = &d()->activations->data[d()->activationCount++];
     277        stackEntry->activationStorage.init(exec);
     278        return &stackEntry->activationStorage;
     279    }
     280
     281    inline void JSGlobalObject::checkActivationCount()
     282    {
     283        if (!d()->activationCount) {
     284            ActivationStackNode* prev = d()->activations->prev;
     285            ASSERT(prev);
     286            delete d()->activations;
     287            d()->activations = prev;
     288            d()->activationCount = activationStackNodeSize;
     289        }
     290    }
     291
     292    inline void JSGlobalObject::popActivation()
     293    {
     294        checkActivationCount();
     295        d()->activations->data[--d()->activationCount].activationDataStorage.localStorage.shrink(0);   
     296    }
     297
    266298} // namespace KJS
    267299
Note: See TracChangeset for help on using the changeset viewer.