On 7/24/09 12:31 AM, Ville Voutilainen wrote:
Here's a very simple patch that should make function calls faster. I have only anecdotal tests with the raytracing shootout test and the compiled ansi-tests, but the numbers seem to support this patch.
If nobody objects, I'll commit this.
Sorry for the late reply.
In this case, I think it is the correct decision to copy the reference as opposed to the values into StackFrame. Presumably the args never go out of scope as long as its corresponding StackFrame is contained in LispThread.stack.
But if we wished to retain the code, there is a little Java "trick" for copying arrays, namely that java.lang.System contains a arraycopy() method:
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
which "Copies an array from the specified source array, beginning at the specified position, to the specified position of the destination array."
In the Sun JVM 1.1 this was at least an order or two of magnitude faster in array copies for largish arrays (I think it translated down to the equivalent memcpy() on the native platform). I'm not sure what the current JVM implementation what the speed gains might be, but it is useful to keep in mind.
Mark