RFR: 8317545: AIX PPC64: Implementation of Foreign Function & Memory API

Jorn Vernee jvernee at openjdk.org
Fri Oct 13 10:28:46 UTC 2023


On Fri, 13 Oct 2023 10:12:24 GMT, Martin Doerr <mdoerr at openjdk.org> wrote:

> The AIX linker has a few minor diffs to the linux ABIv1 linker. In addition, double values have only 4 Byte alignment. This PR is based on JDK22 version of the FFI.

src/java.base/share/classes/jdk/internal/foreign/abi/ppc64/aix/AixPPC64Linker.java line 48:

> 46:     static {
> 47:         HashMap<String, MemoryLayout> layouts = new HashMap<>();
> 48:         layouts.putAll(SharedUtils.canonicalLayouts(ValueLayout.JAVA_LONG, ValueLayout.JAVA_LONG, ValueLayout.JAVA_INT));

You may also add an extra parameter for the double layout to SharedUtils::canonicalLayouts.

Also, what about `jdouble`? It seems to be defined to a native `double` on AIX as well? (see src/java.base/share/native/include/jni.h)

test/micro/org/openjdk/bench/java/lang/foreign/CLayouts.java line 68:

> 66:      * The layout for the {@code double} C type
> 67:      */
> 68:     public static final ValueLayout.OfDouble C_DOUBLE = ValueLayout.JAVA_DOUBLE.withByteAlignment(IS_AIX ? 4 : 8);

Would prefer if this used `Linker.canonicalLayouts`
Suggestion:

    public static final ValueLayout.OfDouble C_DOUBLE = (ValueLayout.OfDouble) LINKER.canonicalLayouts().get("double");

test/micro/org/openjdk/bench/java/lang/foreign/pointers/NativeType.java line 67:

> 65:         @Override
> 66:         public ValueLayout.OfDouble layout() {
> 67:             return ValueLayout.JAVA_DOUBLE.withByteAlignment(IS_AIX ? 4 : 8);

Same here.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/16179#discussion_r1358079923
PR Review Comment: https://git.openjdk.org/jdk/pull/16179#discussion_r1358076295
PR Review Comment: https://git.openjdk.org/jdk/pull/16179#discussion_r1358076261


More information about the hotspot-compiler-dev mailing list