From 28f0821b5ed4ccca824a519a4d5f1b94d2c29ad8 Mon Sep 17 00:00:00 2001 From: "mjs@apple.com" Date: Tue, 14 Oct 2008 05:29:39 +0000 Subject: [PATCH] 2008-10-13 Maciej Stachowiak 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 | 12 ++++++++++++ JavaScriptCore/VM/Machine.cpp | 17 ----------------- JavaScriptCore/kjs/Arguments.h | 20 +++++++++++++++++++- 3 files changed, 31 insertions(+), 18 deletions(-) diff --git a/JavaScriptCore/ChangeLog b/JavaScriptCore/ChangeLog index bb985d6b3586..2c949a6fe5b1 100644 --- a/JavaScriptCore/ChangeLog +++ b/JavaScriptCore/ChangeLog @@ -1,3 +1,15 @@ +2008-10-13 Maciej Stachowiak + + 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 Fix autotools dist build target by listing recently added header diff --git a/JavaScriptCore/VM/Machine.cpp b/JavaScriptCore/VM/Machine.cpp index 284203dfab92..e205099e20bd 100644 --- a/JavaScriptCore/VM/Machine.cpp +++ b/JavaScriptCore/VM/Machine.cpp @@ -3973,23 +3973,6 @@ CallFrame* Machine::findFunctionCallFrame(CallFrame* callFrame, InternalFunction 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) diff --git a/JavaScriptCore/kjs/Arguments.h b/JavaScriptCore/kjs/Arguments.h index 8f48eaf8b5a4..39f98bfa9bea 100644 --- a/JavaScriptCore/kjs/Arguments.h +++ b/JavaScriptCore/kjs/Arguments.h @@ -71,6 +71,7 @@ namespace JSC { } 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&); @@ -85,6 +86,23 @@ namespace JSC { OwnPtr 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) @@ -93,7 +111,7 @@ namespace JSC { 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; -- 2.36.0