On Tue, 28 Feb 2023 20:51:50 GMT, Jorn Vernee <[email protected]> wrote:
>> Martin Doerr has updated the pull request incrementally with one additional
>> commit since the last revision:
>>
>> Remove size restriction for structs. Add TODO for Big Endian.
>
> src/java.base/share/classes/jdk/internal/foreign/abi/ppc64/CallArranger.java
> line 68:
>
>> 66: public abstract class CallArranger {
>> 67: // Linux PPC64 Little Endian uses ABI v2.
>> 68: private static final boolean useABIv2 = ByteOrder.nativeOrder() ==
>> ByteOrder.LITTLE_ENDIAN;
>
> Now that I'm here. This could be a potentially interesting case for having 2
> subclasses of CallArranger: one for `useABIv2 == true` and one for `false`.
Yeah, let's wait until we know what changes we need for AIX (and Big Endian
linux).
> src/java.base/share/classes/jdk/internal/foreign/abi/ppc64/CallArranger.java
> line 293:
>
>> 291: } else {
>> 292: overlappingReg = new
>> VMStorage(StorageType.STACK_AND_FLOAT,
>> 293: (short)
>> STACK_SLOT_SIZE, (int) stackOffset - 4);
>
> I think you could remove the mixed VMStorage types here relatively easily by
> returning a `VMStorage[][]`, where each element is a single element array,
> but then for the `needOverlapping` case add another element to the array for
> the extra store (instead of replacing the existing one).
>
> Then when unboxing a `STRUCT_HFA`, `dup` the result of the `bufferLoad` and
> then do 2 `vmStore`s (one for each element).
>
> For boxing, you could just ignore the extra storage, and just `vmLoad` the
> first one (or, whichever one you like :))
Thanks! I need to find extra time for this. Sounds like a good idea and I may
be able to get rid of some nasty code.
-------------
PR: https://git.openjdk.org/jdk/pull/12708