[Mono-dev] [PATCH] Generic sharing: Static field access
Paolo Molaro
lupus at ximian.com
Tue Nov 20 04:34:16 EST 2007
On 11/19/07 Zoltan Varga wrote:
> The problem with the trampoline is that since the class to init is dynamically
> decided, there is nothing to patch, so all calls will go through the
> generic trampoline
> code, which is much slower than a simple managed-to-native transition.
No, here is again the trampoline pseudo code I described in the first
email (vtable is in a register):
deref vtable->initialized
cmp/and/test
condbranch slow_path:
ret
slow_path:
call class_init
ret
We do the unmanaged transition only when the cctor has not been run yet.
The x86 implementation could be something like (with vtable in edx):
test $INIT_BIT,initialize_offset(%edx)
jz slow_path
ret
slow_path:
call class_init
ret
The common path is 3 instructions, we need a single trampoline for all
the process and this works for both generics and AOT.
I think the tiny amount of arch-specific code is worth writing to avoid
the increased memory usage with the other solutions.
BTW, for AOT code we could put the above code inside the AOT image
itself, so it would be a direct call with no PLT entry involved.
lupus
--
-----------------------------------------------------------------
lupus at debian.org debian/rules
lupus at ximian.com Monkeys do it better
More information about the Mono-devel-list
mailing list