[foreign-memaccess+abi] RFR: 8255903: Enable multi-register return values for native invokers
Jorn Vernee
jvernee at openjdk.java.net
Thu Oct 21 13:32:24 UTC 2021
On Thu, 21 Oct 2021 13:15:39 GMT, Jorn Vernee <jvernee at openjdk.org> wrote:
> Hi,
>
> This patch implements support for multi-register returns in native invokers, and removes the buffered invocation strategy for downcalls. This is achieved, essentially, by using an in memory return: the caller allocates a bit of memory, and the native invoker stub writes the values of the return register to that memory. Then, the post processing code reads the register values back from there.
>
> Currently, the target address of a downcall is handled separately from the other arguments. I initially implemented passing the IMR address the same way, but I realized the removal of the buffered invocation strategy affords us a better way of doing things: we can just make the target address and the IMR address part of the normal calling sequence, and remove a bunch of special-casing code to handle these. We now just use a binding recipe to unbox these arguments and shuffle them into registers, and the ABIDescriptor tells the native invoker stub which registers to pick up these arguments from.
>
> Thanks,
> Jorn
src/jdk.incubator.foreign/share/classes/jdk/internal/foreign/abi/ProgrammableInvoker.java line 121:
> 119: * abi.arch.typeSize(abi.arch.stackType());
> 120:
> 121: this.bufferCopySize = SharedUtils.bufferCopySize(callingSequence);
I folded the `bufferCopySize` into `CallingSequence` (together with the new IMR data), and renamed it to `allocationSize` (since it is for more than just buffer copies).
-------------
PR: https://git.openjdk.java.net/panama-foreign/pull/603
More information about the panama-dev
mailing list