Changeset 37576 in webkit for trunk/JavaScriptCore


Ignore:
Timestamp:
Oct 13, 2008, 10:29:39 PM (17 years ago)
Author:
[email protected]
Message:

2008-10-13 Maciej Stachowiak <[email protected]>

Reviewed by Cameron Zwarich.


  • make Machine::getArgumentsData an Arguments method and inline it


~2% on v8 raytrace

  • VM/Machine.cpp:
  • kjs/Arguments.h: (JSC::Machine::getArgumentsData):
Location:
trunk/JavaScriptCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/ChangeLog

    r37575 r37576  
     12008-10-13  Maciej Stachowiak  <[email protected]>
     2
     3        Reviewed by Cameron Zwarich.
     4       
     5        - make Machine::getArgumentsData an Arguments method and inline it
     6       
     7        ~2% on v8 raytrace
     8
     9        * VM/Machine.cpp:
     10        * kjs/Arguments.h:
     11        (JSC::Machine::getArgumentsData):
     12
    1132008-10-13  Alp Toker  <[email protected]>
    214
  • trunk/JavaScriptCore/VM/Machine.cpp

    r37570 r37576  
    39743974}
    39753975
    3976 void Machine::getArgumentsData(CallFrame* callFrame, JSFunction*& function, ptrdiff_t& firstParameterIndex, Register*& argv, int& argc)
    3977 {
    3978     function = callFrame->callee();
    3979    
    3980     CodeBlock* codeBlock = &function->m_body->generatedByteCode();
    3981     int numParameters = codeBlock->numParameters;
    3982     argc = callFrame->argumentCount();
    3983 
    3984     if (argc <= numParameters)
    3985         argv = callFrame->registers() - RegisterFile::CallFrameHeaderSize - numParameters + 1; // + 1 to skip "this"
    3986     else
    3987         argv = callFrame->registers() - RegisterFile::CallFrameHeaderSize - numParameters - argc + 1; // + 1 to skip "this"
    3988 
    3989     argc -= 1; // - 1 to skip "this"
    3990     firstParameterIndex = -RegisterFile::CallFrameHeaderSize - numParameters + 1; // + 1 to skip "this"
    3991 }
    3992 
    39933976#if ENABLE(CTI)
    39943977
  • trunk/JavaScriptCore/kjs/Arguments.h

    r37450 r37576  
    7272
    7373    private:
     74        void getArgumentsData(CallFrame*, JSFunction*&, ptrdiff_t& firstParameterIndex, Register*& argv, int& argc);
    7475        virtual bool getOwnPropertySlot(ExecState*, const Identifier& propertyName, PropertySlot&);
    7576        virtual bool getOwnPropertySlot(ExecState*, unsigned propertyName, PropertySlot&);
     
    8687    };
    8788
     89    ALWAYS_INLINE void Arguments::getArgumentsData(CallFrame* callFrame, JSFunction*& function, ptrdiff_t& firstParameterIndex, Register*& argv, int& argc)
     90    {
     91        function = callFrame->callee();
     92   
     93        CodeBlock* codeBlock = &function->m_body->generatedByteCode();
     94        int numParameters = codeBlock->numParameters;
     95        argc = callFrame->argumentCount();
     96
     97        if (argc <= numParameters)
     98            argv = callFrame->registers() - RegisterFile::CallFrameHeaderSize - numParameters + 1; // + 1 to skip "this"
     99        else
     100            argv = callFrame->registers() - RegisterFile::CallFrameHeaderSize - numParameters - argc + 1; // + 1 to skip "this"
     101
     102        argc -= 1; // - 1 to skip "this"
     103        firstParameterIndex = -RegisterFile::CallFrameHeaderSize - numParameters + 1; // + 1 to skip "this"
     104    }
     105
    88106    inline Arguments::Arguments(CallFrame* callFrame)
    89107        : JSObject(callFrame->lexicalGlobalObject()->argumentsStructure())
     
    94112        Register* argv;
    95113        int numArguments;
    96         callFrame->machine()->getArgumentsData(callFrame, callee, firstParameterIndex, argv, numArguments);
     114        getArgumentsData(callFrame, callee, firstParameterIndex, argv, numArguments);
    97115
    98116        d->numParameters = callee->m_body->parameterCount();
Note: See TracChangeset for help on using the changeset viewer.