+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
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)
}
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&);
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)
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;