On May 26, 2011, at 1:42 AM, Christian Thalinger wrote:
> Using Tom's new code doesn't make a difference since I think the meth.jar
> from John includes the reverted GWT code.
I just added a hook to test whether the GWT change matters or not. Choose
either flag setting:
java -Djava.lang.invoke.GWT_FORCE_RICOCHET_FRAMES=true
java -Djava.lang.invoke.GWT_FORCE_RICOCHET_FRAMES=false
If false or missing, you get the old "reverted" logic.
This is the refreshed JAR:
http://cr.openjdk.java.net/~jrose/pres/indy-javadoc-mlvm/meth.jar
The code is also in the mlvm patch repo.
> A quick check on bench_string_ops.rb shows that a couple of numbers are
> better but some are worse, especially string == comparison (compare with
> http://mail.openjdk.java.net/pipermail/mlvm-dev/2011-April/002887.html):
This rings a bell: I recently had to fix the primitive unboxing logic to make
this sort of thing work correctly (compatibly with reflection):
MethodHandle iid = identity(int.class);
Object o = (p ? (Byte)(byte)1 : (Integer)2);
int x = (int) iid.asType(methodType(int.class, Object.class).invokeExact(o);
Note that simply casting to Integer and unboxing won't work. So there's a
tricky (and potentially slow) test to do in the adaptation of object arguments
to primitive formal parameters, or from object return types to primitive return
values.
If this is a problem, your assembly code might have calls to something ugly
called ValueConversions.primitiveConversion. Hopefully, it just has fast-path
code which verifies that a reference is the expected box type, and unboxes.
There is always a fast path which does this. But funny wrapper mixing (like
the Byte above) will cause the slow path to kick in.
-- John
_______________________________________________
mlvm-dev mailing list
mlvm-dev@openjdk.java.net
http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev