[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