On 01/20/2011 07:19 PM, John Rose wrote:
On Jan 20, 2011, at 10:08 AM, Rémi Forax wrote:
You know the type of the parameter and you remember the type if there is a
store.
(If there are several reaching stores of differing types, it gets a little
ugly; there is a single-inheritance LCA. Little known fact: Interface types
on variables are rewritten to Object, and are reasserted on every
invokeinterface instruction. So there's no problem with multiple inheritance.)
invokedynamic is not magic (almost :), it's a way to avoid to do the lookup at
each call by
storing (caching) the target method by protecting it with one or several guards
depending on
the assumptions you have done to find the target method.
The magic overload resolution should go into the next layer up. Attila wrote a
version of this. Sadly, he found that it was difficult to deal with overloads. A
key problem is that even if C.m is not overloaded, D.m might be, where D is a
subclass of C. This means that inline caches on C.m have to do exact receiver
typing (this.class == C.class => invoke C.m, to exclude this.class == D.class).
That's the easy solution.
Here is the table based solution:
http://www-igm.univ-mlv.fr/~duris/PUBLICATIONS/forax-igm01.ps.gz
I haven't find the time to implement it with invokedynamic,
Now that POPCNT is an assembler instruction, I'm curious to see the
benchmark.
-- John
Rémi
--
You received this message because you are subscribed to the Google Groups "JVM
Languages" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/jvm-languages?hl=en.