2008-10-13 Maciej Stachowiak <mjs@apple.com>
authormjs@apple.com <mjs@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 14 Oct 2008 05:29:39 +0000 (05:29 +0000)
committermjs@apple.com <mjs@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 14 Oct 2008 05:29:39 +0000 (05:29 +0000)
        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):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@37576 268f45cc-cd09-0410-ab3c-d52691b4dbfc

JavaScriptCore/ChangeLog
JavaScriptCore/VM/Machine.cpp
JavaScriptCore/kjs/Arguments.h

index bb985d6b35868448398056313ac585f1972011fe..2c949a6fe5b119ad898aad21cf708515d77857a7 100644 (file)
@@ -1,3 +1,15 @@
+2008-10-13  Maciej Stachowiak  <mjs@apple.com>
+
+        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):
+
 2008-10-13  Alp Toker  <alp@nuanti.com>
 
         Fix autotools dist build target by listing recently added header
 2008-10-13  Alp Toker  <alp@nuanti.com>
 
         Fix autotools dist build target by listing recently added header
index 284203dfab9236b69b3f1bc1aeee20e70472c7f3..e205099e20bd3141f91bb33bda7cd33b66b1820b 100644 (file)
@@ -3973,23 +3973,6 @@ CallFrame* Machine::findFunctionCallFrame(CallFrame* callFrame, InternalFunction
     return 0;
 }
 
     return 0;
 }
 
-void Machine::getArgumentsData(CallFrame* callFrame, JSFunction*& function, ptrdiff_t& firstParameterIndex, Register*& argv, int& argc)
-{
-    function = callFrame->callee();
-    
-    CodeBlock* codeBlock = &function->m_body->generatedByteCode();
-    int numParameters = codeBlock->numParameters;
-    argc = callFrame->argumentCount();
-
-    if (argc <= numParameters)
-        argv = callFrame->registers() - RegisterFile::CallFrameHeaderSize - numParameters + 1; // + 1 to skip "this"
-    else
-        argv = callFrame->registers() - RegisterFile::CallFrameHeaderSize - numParameters - argc + 1; // + 1 to skip "this"
-
-    argc -= 1; // - 1 to skip "this"
-    firstParameterIndex = -RegisterFile::CallFrameHeaderSize - numParameters + 1; // + 1 to skip "this"
-}
-
 #if ENABLE(CTI)
 
 NEVER_INLINE static void doSetReturnAddressVMThrowTrampoline(void** returnAddress)
 #if ENABLE(CTI)
 
 NEVER_INLINE static void doSetReturnAddressVMThrowTrampoline(void** returnAddress)
index 8f48eaf8b5a4b6f08729b63c9062904c0a187a32..39f98bfa9bea76e990e0a1bf7e8aec6bf1610498 100644 (file)
@@ -71,6 +71,7 @@ namespace JSC {
         }
 
     private:
         }
 
     private:
+        void getArgumentsData(CallFrame*, JSFunction*&, ptrdiff_t& firstParameterIndex, Register*& argv, int& argc);
         virtual bool getOwnPropertySlot(ExecState*, const Identifier& propertyName, PropertySlot&);
         virtual bool getOwnPropertySlot(ExecState*, unsigned propertyName, PropertySlot&);
         virtual void put(ExecState*, const Identifier& propertyName, JSValue*, PutPropertySlot&);
         virtual bool getOwnPropertySlot(ExecState*, const Identifier& propertyName, PropertySlot&);
         virtual bool getOwnPropertySlot(ExecState*, unsigned propertyName, PropertySlot&);
         virtual void put(ExecState*, const Identifier& propertyName, JSValue*, PutPropertySlot&);
@@ -85,6 +86,23 @@ namespace JSC {
         OwnPtr<ArgumentsData> d;
     };
 
         OwnPtr<ArgumentsData> d;
     };
 
+    ALWAYS_INLINE void Arguments::getArgumentsData(CallFrame* callFrame, JSFunction*& function, ptrdiff_t& firstParameterIndex, Register*& argv, int& argc)
+    {
+        function = callFrame->callee();
+    
+        CodeBlock* codeBlock = &function->m_body->generatedByteCode();
+        int numParameters = codeBlock->numParameters;
+        argc = callFrame->argumentCount();
+
+        if (argc <= numParameters)
+            argv = callFrame->registers() - RegisterFile::CallFrameHeaderSize - numParameters + 1; // + 1 to skip "this"
+        else
+            argv = callFrame->registers() - RegisterFile::CallFrameHeaderSize - numParameters - argc + 1; // + 1 to skip "this"
+
+        argc -= 1; // - 1 to skip "this"
+        firstParameterIndex = -RegisterFile::CallFrameHeaderSize - numParameters + 1; // + 1 to skip "this"
+    }
+
     inline Arguments::Arguments(CallFrame* callFrame)
         : JSObject(callFrame->lexicalGlobalObject()->argumentsStructure())
         , d(new ArgumentsData)
     inline Arguments::Arguments(CallFrame* callFrame)
         : JSObject(callFrame->lexicalGlobalObject()->argumentsStructure())
         , d(new ArgumentsData)
@@ -93,7 +111,7 @@ namespace JSC {
         ptrdiff_t firstParameterIndex;
         Register* argv;
         int numArguments;
         ptrdiff_t firstParameterIndex;
         Register* argv;
         int numArguments;
-        callFrame->machine()->getArgumentsData(callFrame, callee, firstParameterIndex, argv, numArguments);
+        getArgumentsData(callFrame, callee, firstParameterIndex, argv, numArguments);
 
         d->numParameters = callee->m_body->parameterCount();
         d->firstParameterIndex = firstParameterIndex;
 
         d->numParameters = callee->m_body->parameterCount();
         d->firstParameterIndex = firstParameterIndex;