On AArch64 it is sometimes convenient to have LSE atomics right from the start. 
Currently they are enabled after feature detection and RR reverse debugger 
works incorrectly.

New build configuration feature 'hardlse' is added. If it is enabled for 
aarch64 type of build, then statically compiled stubs replace the initial 
pessimistic implementation and dynamically generated replacements (when LSE 
support is detected). The feature works for builds of all debug levels.

New file atomic_linux_aarch64_lse.S is derived from atomic_linux_aarch64.S and 
inherits its copyright. This alternative static implementation corresponds to 
the dynamically generated code.

Note, this configuration part is necessary but not sufficient to fully avoid 
strex instructions for practical purposes. Other parts are:

* Run on the OS built without strex family instructions. E.g. Amazon Linux 2022.
* Compile with outline atomics enabled and the configuration flag enabled. E.g. 
configure with
--with-extra-cflags='-march=armv8.3-a+crc+crypto -moutline-atomics' 
--with-extra-cxxflags='-march=armv8.3-a+crc+crypto -moutline-atomics' 
--with-extra-ldflags='-Wl,--allow-multiple-definition' 
--with-jvm-features=hardlse

Testing: tier1, tier2 on linux-aarch64 release builds with feature off and 
feature on.

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

Commit messages:
 - Merge branch 'openjdk:master' into JDK-8282322
 - hardlse feature

Changes: https://git.openjdk.java.net/jdk/pull/8779/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=8779&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8282322
  Stats: 194 lines in 5 files changed: 193 ins; 0 del; 1 mod
  Patch: https://git.openjdk.java.net/jdk/pull/8779.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/8779/head:pull/8779

PR: https://git.openjdk.java.net/jdk/pull/8779

Reply via email to