[foreign-memaccess+abi] RFR: 8274912: Eagerly generate native invokers
Jorn Vernee
jvernee at openjdk.java.net
Thu Oct 7 14:43:42 UTC 2021
Hi,
This patch is a refactoring of VM code pertaining to downcalls. As outlined in the JBS issue, this patch makes 'native invoker' generation currently done by C2 eager.
Most of the changes in this patch are moving around existing code:
- The native invoker generation code is moved from sharedRuntime*.cpp to universalNativeInvoker*.cpp, to match what is done for upcalls.
- C2 & nmethod scaffolding for registering native invokers has been removed (lifetime is now managed in Java code).
- Now, C2 will only intrinsify trivial downcalls, which means some of the code was simplified there.
- To reduce code duplication, several utilities have been added:
- ArgumentShuffle (and impls of CallConvClosure): a utility class for computing argument shuffles and generating shuffling code. The shuffling code is heavily based on what is done today for optimized upcalls on x64.
- To support the above, I've made a copy of the ComputeMoveOrder utility from SharedRuntime code (which was only implemented on x64), and adapted it to our use case.
- RegSpillFill: similarly, a utility for computing and generating register spill and fill code (given a list of registers).
- oop_cast: this was a pre-existing utility that was renamed (from 'cast') and moved into a separate file.
- The linkToNative method handle intrinsic now just loads the invoker address from the appendix argument and jumps to it, instead of jumping to the fallback method handle.
The implementation passes all the jdk_foreign tests on Windows/x64, Linux/x64 (WSL), and Linux/AArch64. Though, there were some pre-exsiting test failures on AArch64 wrt variadic functions.
Thanks,
Jorn
-------------
Commit messages:
- Whitespace fix
- Last AArch64 fixes
- - Simplify xmm to gp reg move code
- simplifiy ForeignCMO
- Fix scratch register conflicts for AArch64
- Dissable aarch64 invoker for now
- Add aarch64 linkToNative impl + remove redundant blob decode
- Trim whitespace
- WIP - attempt at aarch64 native invoker impl
- WIP - native invoker support for aarch64
- ... and 18 more: https://git.openjdk.java.net/panama-foreign/compare/1414f2c2...493165e4
Changes: https://git.openjdk.java.net/panama-foreign/pull/593/files
Webrev: https://webrevs.openjdk.java.net/?repo=panama-foreign&pr=593&range=00
Issue: https://bugs.openjdk.java.net/browse/JDK-8274912
Stats: 3117 lines in 70 files changed: 1734 ins; 1247 del; 136 mod
Patch: https://git.openjdk.java.net/panama-foreign/pull/593.diff
Fetch: git fetch https://git.openjdk.java.net/panama-foreign pull/593/head:pull/593
PR: https://git.openjdk.java.net/panama-foreign/pull/593
More information about the panama-dev
mailing list