[foreign-memaccess+abi] RFR: 8295290: Add Windows ARM64 ABI support to the Foreign Function & Memory API [v2]
Saint Wesonga
duke at openjdk.org
Tue Jan 10 17:42:18 UTC 2023
On Thu, 5 Jan 2023 15:31:29 GMT, Jorn Vernee <jvernee at openjdk.org> wrote:
>> Saint Wesonga has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains ten commits:
>>
>> - Merge branch 'foreign-memaccess+abi' into WindowsAArch64ABI
>> - Update Windows FFM implementation to match latest Preview API
>> - Merge branch 'foreign-memaccess+abi' into WindowsAArch64ABI
>> - Simplify newly added tests in TestVarArgs
>> - Move storage decisions into StorageCalculator
>> - Remove toSessionImpl method
>> - Remove unnecessary null check
>> - Move Windows CallArranger tests into separate file
>> - Add Windows ARM64 ABI support to the Foreign Function & Memory API
>>
>> There are 2 primary differences between the Windows ARM64 ABI and
>> the macOS/Linux ARM64 ABI: variadic floating point arguments are passed
>> in general purpose registers on Windows (instead of the vector registers).
>> In addition to this, up to 64 bytes of a struct being passed to a
>> variadic function can be placed in general purpose registers. This
>> happens regardless of the type of struct (HFA or other generic struct).
>> This means that a struct can be split across registers and the stack
>> when invoking a variadic function.
>>
>> This change introduces tests that compute the sum of the fields of
>> structs containing 1-4 ints, floats, and doubles to verify that each
>> field is correctly assigned a register or stack location when invoking
>> a variadic function (both when the struct can be passed entirely in
>> registers as well as when the struct spills onto the stack).
>>
>> For details about the Foreign Function & Memory API, see JEP 434
>> defined at https://openjdk.org/jeps/434
>>
>> The Windows ARM64 ABI conventions are documented at
>> https://learn.microsoft.com/en-us/cpp/build/arm64-windows-abi-conventions
>
> test/jdk/java/foreign/valist/VaListTest.java line 136:
>
>> 134: private static final Function<Consumer<VaList.Builder>, VaList> linuxAArch64VaListFactory
>> 135: = actions -> LinuxAArch64Linker.newVaList(actions, SegmentScope.auto());
>> 136: private static final Function<Consumer<VaList.Builder>, VaList> macAArch64VaListFactory
>
> Spurious whitespace
> Suggestion:
>
> private static final Function<Consumer<VaList.Builder>, VaList> macAArch64VaListFactory
Deleted this file in latest merge (deleted by https://github.com/openjdk/panama-foreign/commit/4617dee95b649a5eb7fbd8a83d4e2c8af1250116)
-------------
PR: https://git.openjdk.org/panama-foreign/pull/754
More information about the panama-dev
mailing list