[foreign-memaccess+abi] RFR: 8295290: Add Windows ARM64 ABI support to the Foreign Function & Memory API [v2]
Saint Wesonga
duke at openjdk.org
Sun Jan 1 06:16:01 UTC 2023
> 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
>
> This work builds on @lewurm / Bernhard's branch at https://github.com/lewurm/openjdk/commits/foreign-windows-aarch64
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
-------------
Changes: https://git.openjdk.org/panama-foreign/pull/754/files
Webrev: https://webrevs.openjdk.org/?repo=panama-foreign&pr=754&range=01
Stats: 1038 lines in 18 files changed: 1008 ins; 1 del; 29 mod
Patch: https://git.openjdk.org/panama-foreign/pull/754.diff
Fetch: git fetch https://git.openjdk.org/panama-foreign pull/754/head:pull/754
PR: https://git.openjdk.org/panama-foreign/pull/754
More information about the panama-dev
mailing list