Skip to content

Commit 994276c

Browse files
Reka Kovacslewurm
authored and
Vladimir Kempik
committed
8254827: JVMCI: Enable it for Windows+AArch64
Co-authored-by: Bernhard Urban-Forster <burban@openjdk.org> Reviewed-by: aph Backport-of: 88ee973
1 parent 8989823 commit 994276c

File tree

4 files changed

+23
-7
lines changed

4 files changed

+23
-7
lines changed

make/autoconf/hotspot.m4

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,7 @@ AC_DEFUN_ONCE([HOTSPOT_SETUP_JVM_FEATURES],
413413
# Only enable jvmci on x86_64, sparcv9 and aarch64
414414
if test "x$OPENJDK_TARGET_CPU" = "xx86_64" || \
415415
test "x$OPENJDK_TARGET_CPU" = "xsparcv9" || \
416-
test "x$OPENJDK_TARGET_OS-$OPENJDK_TARGET_CPU" = "xlinux-aarch64" ; then
416+
test "x$OPENJDK_TARGET_CPU" = "xaarch64" ; then
417417
AC_MSG_RESULT([yes])
418418
JVM_FEATURES_jvmci="jvmci"
419419
INCLUDE_JVMCI="true"
@@ -444,10 +444,11 @@ AC_DEFUN_ONCE([HOTSPOT_SETUP_JVM_FEATURES],
444444
JVM_FEATURES_graal="graal"
445445
INCLUDE_GRAAL="true"
446446
else
447-
# By default enable graal build on x64 or where AOT is available.
447+
# By default enable graal build on x64/aarch64 or where AOT is available.
448448
# graal build requires jvmci.
449449
if test "x$JVM_FEATURES_jvmci" = "xjvmci" && \
450450
(test "x$OPENJDK_TARGET_CPU" = "xx86_64" || \
451+
test "x$OPENJDK_TARGET_CPU" = "xaarch64" || \
451452
test "x$ENABLE_AOT" = "xtrue") ; then
452453
AC_MSG_RESULT([yes])
453454
JVM_FEATURES_graal="graal"

src/hotspot/cpu/aarch64/jvmciCodeInstaller_aarch64.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
* questions.
2222
*/
2323

24+
#include "precompiled.hpp"
2425
#include "asm/macroAssembler.hpp"
2526
#include "jvmci/jvmciCodeInstaller.hpp"
2627
#include "jvmci/jvmciRuntime.hpp"

src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot.aarch64/src/jdk/vm/ci/hotspot/aarch64/AArch64HotSpotJVMCIBackendFactory.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,11 @@ protected HotSpotConstantReflectionProvider createConstantReflection(HotSpotJVMC
128128
}
129129

130130
protected RegisterConfig createRegisterConfig(AArch64HotSpotVMConfig config, TargetDescription target) {
131-
return new AArch64HotSpotRegisterConfig(target, config.useCompressedOops);
131+
// ARMv8 defines r18 as being available to the platform ABI. Windows
132+
// and Darwin use it for such. Linux doesn't assign it and thus r18 can
133+
// be used as an additional register.
134+
boolean canUsePlatformRegister = config.linuxOs;
135+
return new AArch64HotSpotRegisterConfig(target, config.useCompressedOops, canUsePlatformRegister);
132136
}
133137

134138
protected HotSpotCodeCacheProvider createCodeCache(HotSpotJVMCIRuntime runtime, TargetDescription target, RegisterConfig regConfig) {

src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot.aarch64/src/jdk/vm/ci/hotspot/aarch64/AArch64HotSpotRegisterConfig.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import static jdk.vm.ci.aarch64.AArch64.rscratch1;
3535
import static jdk.vm.ci.aarch64.AArch64.rscratch2;
3636
import static jdk.vm.ci.aarch64.AArch64.r12;
37+
import static jdk.vm.ci.aarch64.AArch64.r18;
3738
import static jdk.vm.ci.aarch64.AArch64.r27;
3839
import static jdk.vm.ci.aarch64.AArch64.r28;
3940
import static jdk.vm.ci.aarch64.AArch64.r29;
@@ -122,16 +123,22 @@ public RegisterAttributes[] getAttributesMap() {
122123
*/
123124
public static final Register metaspaceMethodRegister = r12;
124125

126+
/**
127+
* The platform ABI can use r18 to carry inter-procedural state (e.g. thread
128+
* context). If not defined as such by the platform ABI, it can be used as
129+
* additional temporary register.
130+
*/
131+
public static final Register platformRegister = r18;
125132
public static final Register heapBaseRegister = r27;
126133
public static final Register threadRegister = r28;
127134
public static final Register fp = r29;
128135

129136
private static final RegisterArray reservedRegisters
130137
= new RegisterArray(rscratch1, rscratch2, threadRegister, fp, lr, r31, zr, sp);
131138

132-
private static RegisterArray initAllocatable(Architecture arch, boolean reserveForHeapBase) {
139+
private static RegisterArray initAllocatable(Architecture arch, boolean reserveForHeapBase, boolean canUsePlatformRegister) {
133140
RegisterArray allRegisters = arch.getAvailableValueRegisters();
134-
Register[] registers = new Register[allRegisters.size() - reservedRegisters.size() - (reserveForHeapBase ? 1 : 0)];
141+
Register[] registers = new Register[allRegisters.size() - reservedRegisters.size() - (reserveForHeapBase ? 1 : 0) - (!canUsePlatformRegister ? 1 : 0)];
135142
List<Register> reservedRegistersList = reservedRegisters.asList();
136143

137144
int idx = 0;
@@ -140,6 +147,9 @@ private static RegisterArray initAllocatable(Architecture arch, boolean reserveF
140147
// skip reserved registers
141148
continue;
142149
}
150+
if (!canUsePlatformRegister && reg.equals(platformRegister)) {
151+
continue;
152+
}
143153
assert !(reg.equals(threadRegister) || reg.equals(fp) || reg.equals(lr) || reg.equals(r31) || reg.equals(zr) || reg.equals(sp));
144154
if (reserveForHeapBase && reg.equals(heapBaseRegister)) {
145155
// skip heap base register
@@ -153,8 +163,8 @@ private static RegisterArray initAllocatable(Architecture arch, boolean reserveF
153163
return new RegisterArray(registers);
154164
}
155165

156-
public AArch64HotSpotRegisterConfig(TargetDescription target, boolean useCompressedOops) {
157-
this(target, initAllocatable(target.arch, useCompressedOops));
166+
public AArch64HotSpotRegisterConfig(TargetDescription target, boolean useCompressedOops, boolean canUsePlatformRegister) {
167+
this(target, initAllocatable(target.arch, useCompressedOops, canUsePlatformRegister));
158168
assert callerSaved.size() >= allocatable.size();
159169
}
160170

0 commit comments

Comments
 (0)