Using a Condy instead of a Constant_Utf8

John Rose john.r.rose at oracle.com
Wed Dec 2 18:56:14 UTC 2020


On Dec 2, 2020, at 2:53 AM, Remi Forax <forax at univ-mlv.fr> wrote:
> 
> There is one case where i dynamically patch a method descriptor so I can select how many arguments will be sent to a closure,
> i.e. in the bytecode i put all arguments on the stack but because i've patched the callee descriptor, only some of them will be used.

One workaround out of many:  Put a switch in your class template,
one case per supported arity (limited by the number of stacked items).
Then use a fixed descriptor for the call on each arm.  Drive the switch
from a condy.

BTW, if you need to down-cast from Object, use Class::cast on a
dynamic Class constant.   In the JIT those fold up the same as
checkcast.  Or just use asType.  I’m guessing you are calling
MH::invokeExact or some other low-level “erased” API point,
so casting is not strictly necessary but it may help the JIT.

— John


More information about the valhalla-spec-observers mailing list