I've just discovered that while the spec specified that vaload and vastore
takes a constant class as parameter, the implementation use vaload and vastore
with no parameter (like aaload, aastore).
Let see the tradeoffs:
1/ vaload/vastore <empty> has the same bytecode shape as the other
*aload/*astore, need to get the header of the array to find how to shift from
one array cell to another,
it also mean you call the same vaload/vastore at a
bci with array of different value types, which is pure evil from the JIT POV.
I believe it's only true if the verifier is
deactivated otherwise, you need to have a stackframe when joining two different
kinds of array.
2/ vaload/vastore valueref has the same model as the other *aload/*astore
bytecode, you can precompute the shift from one array cell to another.
so apart from the size of the opcodes, i think i prefer the solution 2.
Do i miss something ?
regards,
Rémi