Paul, thanks! Best regards, Vladimir Ivanov
On 2/21/14 2:11 PM, Paul Sandoz wrote: > > On Feb 20, 2014, at 6:57 PM, Vladimir Ivanov <vladimir.x.iva...@oracle.com> > wrote: > >> Paul, >> >> Thanks for the feedback! See my answers inline. >> >> Updated webrev: >> http://cr.openjdk.java.net/~vlivanov/8027827/final/webrev.01/ >> >> I finally figured out how to make caching work. This webrev contains these >> changes. >> > > +1 > > >> I changed LF representation a bit and added 2 auxiliary method handles - >> argument boxing and wrapping into Object[] and result unboxing. These >> operations depend on actual type and can't be shared among arbitrary >> combinators with the same basic type. They are used only during LF >> interpretation and are completely ignored in compiled LFs. >> > > >>> src/share/classes/java/lang/invoke/MethodHandleImpl.java >>> >>> 634 // t_{i+2}:L=ValueConversions.unbox(t_{i+1}) OR >>> ValueConversions.identity(t_{i+1}) >>> 635 if (type.returnType().isPrimitive()) { >>> 636 names[UNBOX_RESULT] = new >>> Name(ValueConversions.unbox(type.returnType()), >>> 637 names[TRY_CATCH]); >>> 638 } else { >>> 639 names[UNBOX_RESULT] = new >>> Name(ValueConversions.identity(), >>> 640 names[TRY_CATCH]); >>> 641 } >>> >>> >>> You could create the form without the identity transform for the >>> non-primitive case? >>> >>> final int UNBOX_RESULT = type.returnType().isPrimitive() ? nameCursor++ >>> : 0; >>> ... >>> >>> if (UNBOX_RESULT > 0) { ... >>> names[UNBOX_RESULT] = new >>> Name(ValueConversions.unbox(type.returnType()), names[TRY_CATCH]); >>> } >> I can, but it complicates matching and compiling the pattern in >> InvokerBytecodeGenerator. I decided to keep the shape uniform for all cases. >> > > Ah, yes i see now, the code is simpler being kept uniform. > > Paul. > _______________________________________________ mlvm-dev mailing list mlvm-dev@openjdk.java.net http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev