Skip to content

Commit 88ee973

Browse files
lewurmTom Rodriguez
authored andcommitted
8254827: JVMCI: Enable it for Windows+AArch64
Reviewed-by: ihse, never, kvn
1 parent f64a15d commit 88ee973

File tree

4 files changed

+24
-9
lines changed

4 files changed

+24
-9
lines changed

make/autoconf/jvm-features.m4

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,7 @@ AC_DEFUN_ONCE([JVM_FEATURES_CHECK_GRAAL],
306306
# Graal is only available where JVMCI is available since it requires JVMCI.
307307
if test "x$OPENJDK_TARGET_CPU" = "xx86_64"; then
308308
AC_MSG_RESULT([yes])
309-
elif test "x$OPENJDK_TARGET_OS-$OPENJDK_TARGET_CPU" = "xlinux-aarch64"; then
309+
elif test "x$OPENJDK_TARGET_CPU" = "xaarch64"; then
310310
AC_MSG_RESULT([yes])
311311
else
312312
AC_MSG_RESULT([no, $OPENJDK_TARGET_CPU])
@@ -340,7 +340,7 @@ AC_DEFUN_ONCE([JVM_FEATURES_CHECK_JVMCI],
340340
AC_MSG_CHECKING([if platform is supported by JVMCI])
341341
if test "x$OPENJDK_TARGET_CPU" = "xx86_64"; then
342342
AC_MSG_RESULT([yes])
343-
elif test "x$OPENJDK_TARGET_OS-$OPENJDK_TARGET_CPU" = "xlinux-aarch64"; then
343+
elif test "x$OPENJDK_TARGET_CPU" = "xaarch64"; then
344344
AC_MSG_RESULT([yes])
345345
else
346346
AC_MSG_RESULT([no, $OPENJDK_TARGET_CPU])

src/hotspot/cpu/aarch64/jvmciCodeInstaller_aarch64.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,9 @@
2121
* questions.
2222
*/
2323

24-
#include "jvmci/jvmci.hpp"
25-
#include "jvmci/jvmciCodeInstaller.hpp"
24+
#include "precompiled.hpp"
25+
#include "jvmci/jvmci.hpp"
26+
#include "jvmci/jvmciCodeInstaller.hpp"
2627
#include "jvmci/jvmciRuntime.hpp"
2728
#include "jvmci/jvmciCompilerToVM.hpp"
2829
#include "jvmci/jvmciJavaClasses.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
@@ -122,7 +122,11 @@ protected HotSpotConstantReflectionProvider createConstantReflection(HotSpotJVMC
122122
}
123123

124124
private static RegisterConfig createRegisterConfig(AArch64HotSpotVMConfig config, TargetDescription target) {
125-
return new AArch64HotSpotRegisterConfig(target, config.useCompressedOops);
125+
// ARMv8 defines r18 as being available to the platform ABI. Windows
126+
// and Darwin use it for such. Linux doesn't assign it and thus r18 can
127+
// be used as an additional register.
128+
boolean canUsePlatformRegister = config.linuxOs;
129+
return new AArch64HotSpotRegisterConfig(target, config.useCompressedOops, canUsePlatformRegister);
126130
}
127131

128132
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,15 +123,21 @@ 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 = new RegisterArray(rscratch1, rscratch2, threadRegister, fp, lr, r31, zr, sp);
130137

131-
private static RegisterArray initAllocatable(Architecture arch, boolean reserveForHeapBase) {
138+
private static RegisterArray initAllocatable(Architecture arch, boolean reserveForHeapBase, boolean canUsePlatformRegister) {
132139
RegisterArray allRegisters = arch.getAvailableValueRegisters();
133-
Register[] registers = new Register[allRegisters.size() - reservedRegisters.size() - (reserveForHeapBase ? 1 : 0)];
140+
Register[] registers = new Register[allRegisters.size() - reservedRegisters.size() - (reserveForHeapBase ? 1 : 0) - (!canUsePlatformRegister ? 1 : 0)];
134141
List<Register> reservedRegistersList = reservedRegisters.asList();
135142

136143
int idx = 0;
@@ -139,6 +146,9 @@ private static RegisterArray initAllocatable(Architecture arch, boolean reserveF
139146
// skip reserved registers
140147
continue;
141148
}
149+
if (!canUsePlatformRegister && reg.equals(platformRegister)) {
150+
continue;
151+
}
142152
assert !(reg.equals(threadRegister) || reg.equals(fp) || reg.equals(lr) || reg.equals(r31) || reg.equals(zr) || reg.equals(sp));
143153
if (reserveForHeapBase && reg.equals(heapBaseRegister)) {
144154
// skip heap base register
@@ -152,8 +162,8 @@ private static RegisterArray initAllocatable(Architecture arch, boolean reserveF
152162
return new RegisterArray(registers);
153163
}
154164

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

0 commit comments

Comments
 (0)