123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- From 9a3c2a0714420186ae8d5159d5416c6fa2009ad9 Mon Sep 17 00:00:00 2001
- From: Alexey Brodkin <abrodkin@synopsys.com>
- Date: Mon, 18 Oct 2021 05:20:05 -0700
- Subject: [PATCH] Add ARCv2 ISA processors support to Zero
- This adds ARCv2 processors support in OpenJDK via
- "Zero Assembly Project" (see https://openjdk.java.net/projects/zero).
- That' a purely interpretive mode, so likely not that fast
- as JIT'ed version, but for starters it's much better than nothing.
- Once all the logistical problems are solved hopefully this
- change will be accepted upstream.
- Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
- ---
- make/autoconf/libraries.m4 | 8 ++++++++
- make/autoconf/platform.m4 | 8 ++++++++
- src/hotspot/os/linux/os_linux.cpp | 8 +++++++-
- 3 files changed, 23 insertions(+), 1 deletion(-)
- diff --git a/make/autoconf/libraries.m4 b/make/autoconf/libraries.m4
- index 5120918aed2..f7a99955874 100644
- --- a/make/autoconf/libraries.m4
- +++ b/make/autoconf/libraries.m4
- @@ -146,6 +146,14 @@ AC_DEFUN_ONCE([LIB_SETUP_LIBRARIES],
- fi
- fi
-
- + # Libatomic library
- + # 32-bit ARC needs fallback library for 8-byte atomic ops
- + # Inspired by a fix for MIPS, see https://github.com/openjdk/jdk/commit/1b3aa3af
- + if test "x$OPENJDK_TARGET_OS" = xlinux &&
- + (test "x$OPENJDK_TARGET_CPU" = xarc); then
- + BASIC_JVM_LIBS="$BASIC_JVM_LIBS -latomic"
- + fi
- +
- # perfstat lib
- if test "x$OPENJDK_TARGET_OS" = xaix; then
- BASIC_JVM_LIBS="$BASIC_JVM_LIBS -lperfstat"
- diff --git a/make/autoconf/platform.m4 b/make/autoconf/platform.m4
- index c0f2446dbd7..dc416ece885 100644
- --- a/make/autoconf/platform.m4
- +++ b/make/autoconf/platform.m4
- @@ -54,6 +54,12 @@ AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_CPU],
- VAR_CPU_BITS=64
- VAR_CPU_ENDIAN=little
- ;;
- + arc)
- + VAR_CPU=arc
- + VAR_CPU_ARCH=arc
- + VAR_CPU_BITS=32
- + VAR_CPU_ENDIAN=little
- + ;;
- arm*)
- VAR_CPU=arm
- VAR_CPU_ARCH=arm
- @@ -563,6 +569,8 @@ AC_DEFUN([PLATFORM_SETUP_LEGACY_VARS_HELPER],
- HOTSPOT_$1_CPU_DEFINE=PPC64
-
- # The cpu defines below are for zero, we don't support them directly.
- + elif test "x$OPENJDK_$1_CPU" = xarc; then
- + HOTSPOT_$1_CPU_DEFINE=ARC
- elif test "x$OPENJDK_$1_CPU" = xsparc; then
- HOTSPOT_$1_CPU_DEFINE=SPARC
- elif test "x$OPENJDK_$1_CPU" = xppc; then
- diff --git a/src/hotspot/os/linux/os_linux.cpp b/src/hotspot/os/linux/os_linux.cpp
- index b08caf4d5d3..2bf084895ba 100644
- --- a/src/hotspot/os/linux/os_linux.cpp
- +++ b/src/hotspot/os/linux/os_linux.cpp
- @@ -1676,6 +1676,9 @@ void * os::dll_load(const char *filename, char *ebuf, int ebuflen) {
- #ifndef EM_AARCH64
- #define EM_AARCH64 183 /* ARM AARCH64 */
- #endif
- +#ifndef EM_ARC_COMPACT2
- + #define EM_ARC_COMPACT2 195 /* ARC ARCv2 ISA */
- +#endif
- #ifndef EM_RISCV
- #define EM_RISCV 243 /* RISC-V */
- #endif
- @@ -1700,6 +1703,7 @@ void * os::dll_load(const char *filename, char *ebuf, int ebuflen) {
- {EM_SH, EM_SH, ELFCLASS32, ELFDATA2MSB, (char*)"SuperH BE"},
- #endif
- {EM_ARM, EM_ARM, ELFCLASS32, ELFDATA2LSB, (char*)"ARM"},
- + {EM_ARC_COMPACT2, EM_ARC_COMPACT2, ELFCLASS32, ELFDATA2LSB, (char*)"ARC"},
- // we only support 64 bit z architecture
- {EM_S390, EM_S390, ELFCLASS64, ELFDATA2MSB, (char*)"IBM System/390"},
- {EM_ALPHA, EM_ALPHA, ELFCLASS64, ELFDATA2LSB, (char*)"Alpha"},
- @@ -1728,6 +1732,8 @@ void * os::dll_load(const char *filename, char *ebuf, int ebuflen) {
- static Elf32_Half running_arch_code=EM_PPC;
- #elif (defined AARCH64)
- static Elf32_Half running_arch_code=EM_AARCH64;
- +#elif (defined ARC)
- + static Elf32_Half running_arch_code=EM_ARC_COMPACT2;
- #elif (defined ARM)
- static Elf32_Half running_arch_code=EM_ARM;
- #elif (defined S390)
- @@ -1750,7 +1756,7 @@ void * os::dll_load(const char *filename, char *ebuf, int ebuflen) {
- static Elf32_Half running_arch_code=EM_LOONGARCH;
- #else
- #error Method os::dll_load requires that one of following is defined:\
- - AARCH64, ALPHA, ARM, AMD64, IA32, IA64, LOONGARCH, M68K, MIPS, MIPSEL, PARISC, __powerpc__, __powerpc64__, RISCV, S390, SH, __sparc
- + AARCH64, ALPHA, ARC ARM, AMD64, IA32, IA64, LOONGARCH, M68K, MIPS, MIPSEL, PARISC, __powerpc__, __powerpc64__, RISCV, S390, SH, __sparc
- #endif
-
- // Identify compatibility class for VM's architecture and library's architecture
- --
- 2.16.2
|