On Tue, 28 Feb 2023 20:51:50 GMT, Jorn Vernee <jver...@openjdk.org> 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