arm32 status

Aleksey Shipilev shade at redhat.com
Tue Feb 2 16:03:54 UTC 2021


Hi,

On 2/2/21 4:53 PM, Peter Johnson wrote:
> Is anyone actively working on arm32 support?  The wiki says "in
> development, help wanted" and Aleksey’s Sept 2019 presentation says
> "prototyping," but it doesn’t appear like there’s anything committed in
> hotspot/cpu/arm/gc. Does anyone have a work in progress on a personal fork?

I had started it at pre-COVID times, but then we had to stabilize ARM32 itself. Once we reached some 
level of ARM32 stability, other things preempted further ARM32 work. I have restarted the ARM32 port 
work yesterday, but -- kid you not -- I have to stabilize ARM32 itself before continuing! Such is life.

So the bird-eye-view status is: the port is not even in alpha stage.

What is your interest? Are you willing to contribute the port? :)

> Is the scope essentially porting what’s in
> hotspot/cpu/aarch64/gc/shenandoah to arm32, or is there more to it?

Pretty much, yes. Plus some minor shared code changes to accept ARM32 for Shenandoah:

diff -r 3b9b5cb7586f make/autoconf/jvm-features.m4
--- a/make/autoconf/jvm-features.m4	Thu Feb 27 12:19:24 2020 +0800
+++ b/make/autoconf/jvm-features.m4	Thu Feb 27 13:08:32 2020 +0100
@@ -353,7 +353,8 @@
    JVM_FEATURES_CHECK_AVAILABILITY(shenandoahgc, [
      AC_MSG_CHECKING([if platform is supported by Shenandoah])
      if test "x$OPENJDK_TARGET_CPU_ARCH" = "xx86" || \
-        test "x$OPENJDK_TARGET_CPU" = "xaarch64" ; then
+        test "x$OPENJDK_TARGET_CPU" = "xaarch64" || \
+        test "x$OPENJDK_TARGET_CPU" = "xarm" ; then
        AC_MSG_RESULT([yes])
      else
        AC_MSG_RESULT([no, $OPENJDK_TARGET_CPU])

diff -r 3b9b5cb7586f src/hotspot/share/gc/shenandoah/shenandoahArguments.cpp
--- a/src/hotspot/share/gc/shenandoah/shenandoahArguments.cpp	Thu Feb 27 12:19:24 2020 +0800
+++ b/src/hotspot/share/gc/shenandoah/shenandoahArguments.cpp	Thu Feb 27 13:08:32 2020 +0100
@@ -32,7 +32,7 @@
  #include "utilities/defaultStream.hpp"

  void ShenandoahArguments::initialize() {
-#if !(defined AARCH64 || defined AMD64 || defined IA32)
+#if !(defined AARCH64 || defined AMD64 || defined IA32 || defined ARM32)
    vm_exit_during_initialization("Shenandoah GC is not supported on this platform.");
  #endif

@@ -41,7 +41,8 @@
    log_warning(gc)("  concurrent modes are not supported, only STW cycles are enabled;");
    log_warning(gc)("  arch-specific barrier code is not implemented, disabling barriers;");

-  FLAG_SET_DEFAULT(ShenandoahGCHeuristics,           "passive");
+  FLAG_SET_DEFAULT(UnlockDiagnosticVMOptions,        true);
+  FLAG_SET_DEFAULT(ShenandoahGCMode,                 "passive");

    FLAG_SET_DEFAULT(ShenandoahSATBBarrier,            false);
    FLAG_SET_DEFAULT(ShenandoahLoadRefBarrier,         false);
@@ -50,8 +51,10 @@
    FLAG_SET_DEFAULT(ShenandoahCASBarrier,             false);
    FLAG_SET_DEFAULT(ShenandoahCloneBarrier,           false);

+#ifdef ASSERT
    FLAG_SET_DEFAULT(ShenandoahVerifyOptoBarriers,     false);
  #endif
+#endif

Once these two test suites succeed, you are pretty much done:
  $ CONF=linux-arm-server-fastdebug make images run-test TEST=hotspot_gc_shenandoah
  $ CONF=linux-arm-server-fastdebug make images run-test TEST=tier1 TEST_VM_OPTS=-XX:+UseShenandoahGC

-- 
Thanks,
-Aleksey



More information about the shenandoah-dev mailing list