8064611: AARCH64: Changes to HotSpot shared code
Summary: Everything except cpu/ and os_cpu/
Reviewed-by: dholmes, goetz, dlong, coleenp, kvn
--- a/hotspot/agent/src/os/linux/LinuxDebuggerLocal.c Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/agent/src/os/linux/LinuxDebuggerLocal.c Thu Dec 11 13:11:53 2014 -0800
@@ -341,7 +341,7 @@
return (err == PS_OK)? array : 0;
}
-#if defined(i386) || defined(amd64) || defined(sparc) || defined(sparcv9)
+#if defined(i386) || defined(amd64) || defined(sparc) || defined(sparcv9) || defined(aarch64)
JNIEXPORT jlongArray JNICALL Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLocal_getThreadIntegerRegisterSet0
(JNIEnv *env, jobject this_obj, jint lwp_id) {
@@ -363,6 +363,9 @@
#ifdef amd64
#define NPRGREG sun_jvm_hotspot_debugger_amd64_AMD64ThreadContext_NPRGREG
#endif
+#ifdef aarch64
+#define NPRGREG 32
+#endif
#if defined(sparc) || defined(sparcv9)
#define NPRGREG sun_jvm_hotspot_debugger_sparc_SPARCThreadContext_NPRGREG
#endif
@@ -458,6 +461,12 @@
regs[REG_INDEX(R_O7)] = gregs.u_regs[14];
#endif /* sparc */
+#if defined(aarch64)
+
+#define REG_INDEX(reg) sun_jvm_hotspot_debugger_aarch64_AARCH64ThreadContext_##reg
+
+#endif /* aarch64 */
+
(*env)->ReleaseLongArrayElements(env, array, regs, JNI_COMMIT);
return array;
--- a/hotspot/agent/src/os/linux/libproc.h Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/agent/src/os/linux/libproc.h Thu Dec 11 13:11:53 2014 -0800
@@ -71,6 +71,9 @@
#if defined(sparc) || defined(sparcv9) || defined(ppc64)
#define user_regs_struct pt_regs
#endif
+#if defined(aarch64)
+#define user_regs_struct user_pt_regs
+#endif
// This C bool type must be int for compatibility with Linux calls and
// it would be a mistake to equivalence it to C++ bool on many platforms
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/HotSpotAgent.java Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/HotSpotAgent.java Thu Dec 11 13:11:53 2014 -0800
@@ -34,6 +34,7 @@
import sun.jvm.hotspot.debugger.MachineDescription;
import sun.jvm.hotspot.debugger.MachineDescriptionAMD64;
import sun.jvm.hotspot.debugger.MachineDescriptionPPC64;
+import sun.jvm.hotspot.debugger.MachineDescriptionAArch64;
import sun.jvm.hotspot.debugger.MachineDescriptionIA64;
import sun.jvm.hotspot.debugger.MachineDescriptionIntelX86;
import sun.jvm.hotspot.debugger.MachineDescriptionSPARC32Bit;
@@ -591,6 +592,8 @@
machDesc = new MachineDescriptionAMD64();
} else if (cpu.equals("ppc64")) {
machDesc = new MachineDescriptionPPC64();
+ } else if (cpu.equals("aarch64")) {
+ machDesc = new MachineDescriptionAArch64();
} else if (cpu.equals("sparc")) {
if (LinuxDebuggerLocal.getAddressSize()==8) {
machDesc = new MachineDescriptionSPARC64Bit();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/MachineDescriptionAArch64.java Thu Dec 11 13:11:53 2014 -0800
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+package sun.jvm.hotspot.debugger;
+
+public class MachineDescriptionAArch64 extends MachineDescriptionTwosComplement implements MachineDescription {
+ public long getAddressSize() {
+ return 8;
+ }
+
+ public boolean isLP64() {
+ return true;
+ }
+
+ public boolean isBigEndian() {
+ return false;
+ }
+}
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/PlatformInfo.java Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/utilities/PlatformInfo.java Thu Dec 11 13:11:53 2014 -0800
@@ -61,7 +61,7 @@
return "x86";
} else if (cpu.equals("sparc") || cpu.equals("sparcv9")) {
return "sparc";
- } else if (cpu.equals("ia64") || cpu.equals("amd64") || cpu.equals("x86_64") || cpu.equals("ppc64")) {
+ } else if (cpu.equals("ia64") || cpu.equals("amd64") || cpu.equals("x86_64") || cpu.equals("ppc64") || cpu.equals("aarch64")) {
return cpu;
} else {
try {
--- a/hotspot/make/defs.make Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/make/defs.make Thu Dec 11 13:11:53 2014 -0800
@@ -286,7 +286,7 @@
# Use uname output for SRCARCH, but deal with platform differences. If ARCH
# is not explicitly listed below, it is treated as x86.
- SRCARCH = $(ARCH/$(filter sparc sparc64 ia64 amd64 x86_64 arm ppc ppc64 zero,$(ARCH)))
+ SRCARCH = $(ARCH/$(filter sparc sparc64 ia64 amd64 x86_64 arm ppc ppc64 aarch64 zero,$(ARCH)))
ARCH/ = x86
ARCH/sparc = sparc
ARCH/sparc64= sparc
@@ -296,6 +296,7 @@
ARCH/ppc64 = ppc
ARCH/ppc = ppc
ARCH/arm = arm
+ ARCH/aarch64= aarch64
ARCH/zero = zero
# BUILDARCH is usually the same as SRCARCH, except for sparcv9
@@ -326,11 +327,12 @@
LIBARCH/sparcv9 = sparcv9
LIBARCH/ia64 = ia64
LIBARCH/ppc64 = ppc64
+ LIBARCH/aarch64 = aarch64
LIBARCH/ppc = ppc
LIBARCH/arm = arm
LIBARCH/zero = $(ZERO_LIBARCH)
- LP64_ARCH = sparcv9 amd64 ia64 ppc64 zero
+ LP64_ARCH = sparcv9 amd64 ia64 ppc64 aarch64 zero
endif
# Required make macro settings for all platforms
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/make/linux/makefiles/aarch64.make Thu Dec 11 13:11:53 2014 -0800
@@ -0,0 +1,32 @@
+#
+# Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+#
+
+# The copied fdlibm routines in sharedRuntimeTrig.o must not be optimized
+OPT_CFLAGS/sharedRuntimeTrig.o = $(OPT_CFLAGS/NOOPT)
+# The copied fdlibm routines in sharedRuntimeTrans.o must not be optimized
+OPT_CFLAGS/sharedRuntimeTrans.o = $(OPT_CFLAGS/NOOPT)
+# Must also specify if CPU is little endian
+CFLAGS += -DVM_LITTLE_ENDIAN
+
+CFLAGS += -D_LP64=1
--- a/hotspot/make/linux/makefiles/buildtree.make Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/make/linux/makefiles/buildtree.make Thu Dec 11 13:11:53 2014 -0800
@@ -194,6 +194,7 @@
DATA_MODE/sparcv9 = 64
DATA_MODE/amd64 = 64
DATA_MODE/ppc64 = 64
+DATA_MODE/aarch64 = 64
DATA_MODE = $(DATA_MODE/$(BUILDARCH))
--- a/hotspot/make/linux/makefiles/defs.make Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/make/linux/makefiles/defs.make Thu Dec 11 13:11:53 2014 -0800
@@ -130,6 +130,15 @@
HS_ARCH = ppc
endif
+# AARCH64
+ifeq ($(ARCH), aarch64)
+ ARCH_DATA_MODEL = 64
+ MAKE_ARGS += LP64=1
+ PLATFORM = linux-aarch64
+ VM_PLATFORM = linux_aarch64
+ HS_ARCH = aarch64
+endif
+
# On 32 bit linux we build server and client, on 64 bit just server.
ifeq ($(JVM_VARIANTS),)
ifeq ($(ARCH_DATA_MODEL), 32)
--- a/hotspot/make/linux/makefiles/gcc.make Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/make/linux/makefiles/gcc.make Thu Dec 11 13:11:53 2014 -0800
@@ -172,6 +172,7 @@
ARCHFLAG = $(ARCHFLAG/$(BUILDARCH))
ARCHFLAG/i486 = -m32 -march=i586
ARCHFLAG/amd64 = -m64 $(STACK_ALIGNMENT_OPT)
+ARCHFLAG/aarch64 =
ARCHFLAG/ia64 =
ARCHFLAG/sparc = -m32 -mcpu=v9
ARCHFLAG/sparcv9 = -m64 -mcpu=v9
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspot/make/linux/platform_aarch64 Thu Dec 11 13:11:53 2014 -0800
@@ -0,0 +1,15 @@
+os_family = linux
+
+arch = aarch64
+
+arch_model = aarch64
+
+os_arch = linux_aarch64
+
+os_arch_model = linux_aarch64
+
+lib_arch = aarch64
+
+compiler = gcc
+
+sysdefs = -DLINUX -D_GNU_SOURCE -DAARCH64
--- a/hotspot/src/os/linux/vm/os_linux.cpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/os/linux/vm/os_linux.cpp Thu Dec 11 13:11:53 2014 -0800
@@ -246,6 +246,8 @@
#else
static char cpu_arch[] = "sparc";
#endif
+#elif defined(AARCH64)
+static char cpu_arch[] = "aarch64";
#else
#error Add appropriate cpu_arch setting
#endif
@@ -1900,6 +1902,9 @@
#ifndef EM_486
#define EM_486 6 /* Intel 80486 */
#endif
+#ifndef EM_AARCH64
+ #define EM_AARCH64 183 /* ARM AARCH64 */
+#endif
static const arch_t arch_array[]={
{EM_386, EM_386, ELFCLASS32, ELFDATA2LSB, (char*)"IA 32"},
@@ -1921,7 +1926,8 @@
{EM_MIPS_RS3_LE, EM_MIPS_RS3_LE, ELFCLASS32, ELFDATA2LSB, (char*)"MIPSel"},
{EM_MIPS, EM_MIPS, ELFCLASS32, ELFDATA2MSB, (char*)"MIPS"},
{EM_PARISC, EM_PARISC, ELFCLASS32, ELFDATA2MSB, (char*)"PARISC"},
- {EM_68K, EM_68K, ELFCLASS32, ELFDATA2MSB, (char*)"M68k"}
+ {EM_68K, EM_68K, ELFCLASS32, ELFDATA2MSB, (char*)"M68k"},
+ {EM_AARCH64, EM_AARCH64, ELFCLASS64, ELFDATA2LSB, (char*)"AARCH64"},
};
#if (defined IA32)
@@ -1952,9 +1958,11 @@
static Elf32_Half running_arch_code=EM_MIPS;
#elif (defined M68K)
static Elf32_Half running_arch_code=EM_68K;
+#elif (defined AARCH64)
+ static Elf32_Half running_arch_code=EM_AARCH64;
#else
#error Method os::dll_load requires that one of following is defined:\
- IA32, AMD64, IA64, __sparc, __powerpc__, ARM, S390, ALPHA, MIPS, MIPSEL, PARISC, M68K
+ IA32, AMD64, IA64, __sparc, __powerpc__, ARM, S390, ALPHA, MIPS, MIPSEL, PARISC, M68K, AARCH64
#endif
// Identify compatability class for VM's architecture and library's architecture
@@ -3285,7 +3293,7 @@
#ifndef ZERO
large_page_size = IA32_ONLY(4 * M) AMD64_ONLY(2 * M) IA64_ONLY(256 * M) SPARC_ONLY(4 * M)
- ARM_ONLY(2 * M) PPC_ONLY(4 * M);
+ ARM_ONLY(2 * M) PPC_ONLY(4 * M) AARCH64_ONLY(2 * M);
#endif // ZERO
FILE *fp = fopen("/proc/meminfo", "r");
@@ -5864,11 +5872,11 @@
extern char** environ;
#ifndef __NR_fork
- #define __NR_fork IA32_ONLY(2) IA64_ONLY(not defined) AMD64_ONLY(57)
+ #define __NR_fork IA32_ONLY(2) IA64_ONLY(not defined) AMD64_ONLY(57) AARCH64_ONLY(1079)
#endif
#ifndef __NR_execve
- #define __NR_execve IA32_ONLY(11) IA64_ONLY(1033) AMD64_ONLY(59)
+ #define __NR_execve IA32_ONLY(11) IA64_ONLY(1033) AMD64_ONLY(59) AARCH64_ONLY(221)
#endif
// Run the specified command in a separate process. Return its exit value,
--- a/hotspot/src/share/vm/asm/assembler.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/asm/assembler.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -433,6 +433,9 @@
#ifdef TARGET_ARCH_ppc
# include "assembler_ppc.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "assembler_aarch64.hpp"
+#endif
#endif // SHARE_VM_ASM_ASSEMBLER_HPP
--- a/hotspot/src/share/vm/asm/assembler.inline.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/asm/assembler.inline.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -42,5 +42,8 @@
#ifdef TARGET_ARCH_ppc
# include "assembler_ppc.inline.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "assembler_aarch64.inline.hpp"
+#endif
#endif // SHARE_VM_ASM_ASSEMBLER_INLINE_HPP
--- a/hotspot/src/share/vm/asm/codeBuffer.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/asm/codeBuffer.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -632,6 +632,9 @@
#ifdef TARGET_ARCH_ppc
# include "codeBuffer_ppc.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "codeBuffer_aarch64.hpp"
+#endif
};
--- a/hotspot/src/share/vm/asm/macroAssembler.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/asm/macroAssembler.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -42,5 +42,8 @@
#ifdef TARGET_ARCH_ppc
# include "macroAssembler_ppc.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "macroAssembler_aarch64.hpp"
+#endif
#endif // SHARE_VM_ASM_MACROASSEMBLER_HPP
--- a/hotspot/src/share/vm/asm/macroAssembler.inline.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/asm/macroAssembler.inline.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -42,5 +42,8 @@
#ifdef TARGET_ARCH_ppc
# include "macroAssembler_ppc.inline.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "macroAssembler_aarch64.inline.hpp"
+#endif
#endif // SHARE_VM_ASM_MACROASSEMBLER_INLINE_HPP
--- a/hotspot/src/share/vm/asm/register.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/asm/register.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -108,6 +108,9 @@
#ifdef TARGET_ARCH_ppc
# include "register_ppc.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "register_aarch64.hpp"
+#endif
// Debugging support
--- a/hotspot/src/share/vm/c1/c1_Defs.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/c1/c1_Defs.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -48,6 +48,9 @@
#ifdef TARGET_ARCH_ppc
# include "c1_Defs_ppc.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "c1_Defs_aarch64.hpp"
+#endif
// native word offsets from memory address
--- a/hotspot/src/share/vm/c1/c1_FpuStackSim.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/c1/c1_FpuStackSim.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -44,6 +44,9 @@
#ifdef TARGET_ARCH_ppc
# include "c1_FpuStackSim_ppc.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "c1_FpuStackSim_aarch64.hpp"
+#endif
#endif // SHARE_VM_C1_C1_FPUSTACKSIM_HPP
--- a/hotspot/src/share/vm/c1/c1_FrameMap.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/c1/c1_FrameMap.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -94,6 +94,9 @@
#ifdef TARGET_ARCH_ppc
# include "c1_FrameMap_ppc.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "c1_FrameMap_aarch64.hpp"
+#endif
friend class LIR_OprDesc;
--- a/hotspot/src/share/vm/c1/c1_LIR.cpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/c1/c1_LIR.cpp Thu Dec 11 13:11:53 2014 -0800
@@ -67,7 +67,7 @@
#endif
-#ifdef ARM
+#if defined(ARM) || defined (AARCH64)
FloatRegister LIR_OprDesc::as_float_reg() const {
return as_FloatRegister(fpu_regnr());
@@ -154,7 +154,11 @@
#endif
#ifdef _LP64
assert(base()->is_cpu_register(), "wrong base operand");
+#ifndef AARCH64
assert(index()->is_illegal() || index()->is_double_cpu(), "wrong index operand");
+#else
+ assert(index()->is_illegal() || index()->is_double_cpu() || index()->is_single_cpu(), "wrong index operand");
+#endif
assert(base()->type() == T_OBJECT || base()->type() == T_LONG || base()->type() == T_METADATA,
"wrong type for addresses");
#else
@@ -1576,6 +1580,11 @@
out->print("fpu%d", fpu_regnr());
} else if (is_double_fpu()) {
out->print("fpu%d", fpu_regnrLo());
+#elif defined(AARCH64)
+ } else if (is_single_fpu()) {
+ out->print("fpu%d", fpu_regnr());
+ } else if (is_double_fpu()) {
+ out->print("fpu%d", fpu_regnrLo());
#elif defined(ARM)
} else if (is_single_fpu()) {
out->print("s%d", fpu_regnr());
--- a/hotspot/src/share/vm/c1/c1_LIR.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/c1/c1_LIR.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -450,8 +450,8 @@
XMMRegister as_xmm_double_reg() const;
// for compatibility with RInfo
int fpu () const { return lo_reg_half(); }
-#endif // X86
-#if defined(SPARC) || defined(ARM) || defined(PPC)
+#endif
+#if defined(SPARC) || defined(ARM) || defined(PPC) || defined(AARCH64)
FloatRegister as_float_reg () const;
FloatRegister as_double_reg () const;
#endif
@@ -541,7 +541,7 @@
, _type(type)
, _disp(0) { verify(); }
-#if defined(X86) || defined(ARM)
+#if defined(X86) || defined(ARM) || defined(AARCH64)
LIR_Address(LIR_Opr base, LIR_Opr index, Scale scale, intx disp, BasicType type):
_base(base)
, _index(index)
@@ -622,7 +622,7 @@
LIR_OprDesc::fpu_register |
LIR_OprDesc::double_size); }
#endif
-#ifdef X86
+#if defined(X86) || defined(AARCH64)
static LIR_Opr double_fpu(int reg) { return (LIR_Opr)(intptr_t)((reg << LIR_OprDesc::reg1_shift) |
(reg << LIR_OprDesc::reg2_shift) |
LIR_OprDesc::double_type |
--- a/hotspot/src/share/vm/c1/c1_LIRAssembler.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/c1/c1_LIRAssembler.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -274,6 +274,9 @@
#ifdef TARGET_ARCH_ppc
# include "c1_LIRAssembler_ppc.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "c1_LIRAssembler_aarch64.hpp"
+#endif
};
--- a/hotspot/src/share/vm/c1/c1_LinearScan.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/c1/c1_LinearScan.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -985,6 +985,9 @@
#ifdef TARGET_ARCH_ppc
# include "c1_LinearScan_ppc.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "c1_LinearScan_aarch64.hpp"
+#endif
#endif // SHARE_VM_C1_C1_LINEARSCAN_HPP
--- a/hotspot/src/share/vm/c1/c1_MacroAssembler.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/c1/c1_MacroAssembler.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -59,6 +59,9 @@
#ifdef TARGET_ARCH_ppc
# include "c1_MacroAssembler_ppc.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "c1_MacroAssembler_aarch64.hpp"
+#endif
};
--- a/hotspot/src/share/vm/c1/c1_Runtime1.cpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/c1/c1_Runtime1.cpp Thu Dec 11 13:11:53 2014 -0800
@@ -722,6 +722,8 @@
JRT_END
+#ifndef DEOPTIMIZE_WHEN_PATCHING
+
static Klass* resolve_field_return_klass(methodHandle caller, int bci, TRAPS) {
Bytecode_field field_access(caller, bci);
// This can be static or non-static field access
@@ -1210,6 +1212,33 @@
}
JRT_END
+#else // DEOPTIMIZE_WHEN_PATCHING
+
+JRT_ENTRY(void, Runtime1::patch_code(JavaThread* thread, Runtime1::StubID stub_id ))
+ RegisterMap reg_map(thread, false);
+
+ NOT_PRODUCT(_patch_code_slowcase_cnt++;)
+ if (TracePatching) {
+ tty->print_cr("Deoptimizing because patch is needed");
+ }
+
+ frame runtime_frame = thread->last_frame();
+ frame caller_frame = runtime_frame.sender(®_map);
+
+ // It's possible the nmethod was invalidated in the last
+ // safepoint, but if it's still alive then make it not_entrant.
+ nmethod* nm = CodeCache::find_nmethod(caller_frame.pc());
+ if (nm != NULL) {
+ nm->make_not_entrant();
+ }
+
+ Deoptimization::deoptimize_frame(thread, caller_frame.id());
+
+ // Return to the now deoptimized frame.
+JRT_END
+
+#endif // DEOPTIMIZE_WHEN_PATCHING
+
//
// Entry point for compiled code. We want to patch a nmethod.
// We don't do a normal VM transition here because we want to
--- a/hotspot/src/share/vm/c1/c1_globals.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/c1/c1_globals.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -38,6 +38,9 @@
#ifdef TARGET_ARCH_ppc
# include "c1_globals_ppc.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "c1_globals_aarch64.hpp"
+#endif
#ifdef TARGET_OS_FAMILY_linux
# include "c1_globals_linux.hpp"
#endif
--- a/hotspot/src/share/vm/code/nativeInst.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/code/nativeInst.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -40,5 +40,8 @@
#ifdef TARGET_ARCH_ppc
# include "nativeInst_ppc.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "nativeInst_aarch64.hpp"
+#endif
#endif // SHARE_VM_CODE_NATIVEINST_HPP
--- a/hotspot/src/share/vm/code/relocInfo.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/code/relocInfo.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -430,7 +430,9 @@
#ifdef TARGET_ARCH_ppc
# include "relocInfo_ppc.hpp"
#endif
-
+#ifdef TARGET_ARCH_aarch64
+# include "relocInfo_aarch64.hpp"
+#endif
protected:
// Derived constant, based on format_width which is PD:
--- a/hotspot/src/share/vm/code/vmreg.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/code/vmreg.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -155,6 +155,9 @@
#ifdef TARGET_ARCH_ppc
# include "vmreg_ppc.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "vmreg_aarch64.hpp"
+#endif
};
--- a/hotspot/src/share/vm/code/vmreg.inline.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/code/vmreg.inline.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -42,5 +42,8 @@
#ifdef TARGET_ARCH_ppc
# include "vmreg_ppc.inline.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "vmreg_aarch64.inline.hpp"
+#endif
#endif // SHARE_VM_CODE_VMREG_INLINE_HPP
--- a/hotspot/src/share/vm/compiler/disassembler.cpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/compiler/disassembler.cpp Thu Dec 11 13:11:53 2014 -0800
@@ -48,6 +48,9 @@
#ifdef TARGET_ARCH_ppc
# include "depChecker_ppc.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "depChecker_aarch64.hpp"
+#endif
#ifdef SHARK
#include "shark/sharkEntry.hpp"
#endif
--- a/hotspot/src/share/vm/compiler/disassembler.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/compiler/disassembler.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -78,6 +78,9 @@
#ifdef TARGET_ARCH_ppc
# include "disassembler_ppc.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "disassembler_aarch64.hpp"
+#endif
public:
--- a/hotspot/src/share/vm/interpreter/bytecodeInterpreter.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/interpreter/bytecodeInterpreter.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -588,6 +588,9 @@
#ifdef TARGET_ARCH_ppc
# include "bytecodeInterpreter_ppc.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "bytecodeInterpreter_aarch64.hpp"
+#endif
}; // BytecodeInterpreter
--- a/hotspot/src/share/vm/interpreter/bytecodeInterpreter.inline.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/interpreter/bytecodeInterpreter.inline.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -58,6 +58,9 @@
#ifdef TARGET_ARCH_ppc
# include "bytecodeInterpreter_ppc.inline.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "bytecodeInterpreter_aarch64.inline.hpp"
+#endif
#endif // CC_INTERP
--- a/hotspot/src/share/vm/interpreter/cppInterpreter.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/interpreter/cppInterpreter.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -96,6 +96,9 @@
#ifdef TARGET_ARCH_ppc
# include "cppInterpreter_ppc.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "cppInterpreter_aarch64.hpp"
+#endif
};
--- a/hotspot/src/share/vm/interpreter/cppInterpreterGenerator.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/interpreter/cppInterpreterGenerator.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -59,6 +59,9 @@
#ifdef TARGET_ARCH_ppc
# include "cppInterpreterGenerator_ppc.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "cppInterpreterGenerator_aarch64.hpp"
+#endif
};
--- a/hotspot/src/share/vm/interpreter/interp_masm.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/interpreter/interp_masm.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -45,5 +45,8 @@
#ifdef TARGET_ARCH_MODEL_ppc_64
# include "interp_masm_ppc_64.hpp"
#endif
+#ifdef TARGET_ARCH_MODEL_aarch64
+# include "interp_masm_aarch64.hpp"
+#endif
#endif // SHARE_VM_INTERPRETER_INTERP_MASM_HPP
--- a/hotspot/src/share/vm/interpreter/interpreter.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/interpreter/interpreter.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -140,6 +140,9 @@
#ifdef TARGET_ARCH_ppc
# include "interpreter_ppc.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "interpreter_aarch64.hpp"
+#endif
};
--- a/hotspot/src/share/vm/interpreter/interpreterGenerator.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/interpreter/interpreterGenerator.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -58,6 +58,9 @@
#ifdef TARGET_ARCH_ppc
# include "interpreterGenerator_ppc.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "interpreterGenerator_aarch64.hpp"
+#endif
};
--- a/hotspot/src/share/vm/interpreter/interpreterRuntime.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/interpreter/interpreterRuntime.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -177,6 +177,9 @@
#ifdef TARGET_ARCH_ppc
# include "interpreterRT_ppc.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "interpreterRT_aarch64.hpp"
+#endif
// Interpreter's frequency counter overflow
--- a/hotspot/src/share/vm/interpreter/templateInterpreter.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/interpreter/templateInterpreter.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -204,6 +204,9 @@
#ifdef TARGET_ARCH_ppc
# include "templateInterpreter_ppc.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "templateInterpreter_aarch64.hpp"
+#endif
};
--- a/hotspot/src/share/vm/interpreter/templateInterpreterGenerator.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/interpreter/templateInterpreterGenerator.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -98,6 +98,9 @@
#ifdef TARGET_ARCH_ppc
# include "templateInterpreterGenerator_ppc.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "templateInterpreterGenerator_aarch64.hpp"
+#endif
};
--- a/hotspot/src/share/vm/interpreter/templateTable.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/interpreter/templateTable.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -362,6 +362,9 @@
#ifdef TARGET_ARCH_MODEL_ppc_64
# include "templateTable_ppc_64.hpp"
#endif
+#ifdef TARGET_ARCH_MODEL_aarch64
+# include "templateTable_aarch64.hpp"
+#endif
};
#endif /* !CC_INTERP */
--- a/hotspot/src/share/vm/memory/metaspace.cpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/memory/metaspace.cpp Thu Dec 11 13:11:53 2014 -0800
@@ -3020,10 +3020,55 @@
// Don't use large pages for the class space.
bool large_pages = false;
+#ifndef AARCH64
ReservedSpace metaspace_rs = ReservedSpace(compressed_class_space_size(),
_reserve_alignment,
large_pages,
requested_addr, 0);
+#else // AARCH64
+ ReservedSpace metaspace_rs;
+
+ // Our compressed klass pointers may fit nicely into the lower 32
+ // bits.
+ if ((uint64_t)requested_addr + compressed_class_space_size() < 4*G) {
+ metaspace_rs = ReservedSpace(compressed_class_space_size(),
+ _reserve_alignment,
+ large_pages,
+ requested_addr, 0);
+ }
+
+ if (! metaspace_rs.is_reserved()) {
+ // Try to align metaspace so that we can decode a compressed klass
+ // with a single MOVK instruction. We can do this iff the
+ // compressed class base is a multiple of 4G.
+ for (char *a = (char*)align_ptr_up(requested_addr, 4*G);
+ a < (char*)(1024*G);
+ a += 4*G) {
+
+#if INCLUDE_CDS
+ if (UseSharedSpaces
+ && ! can_use_cds_with_metaspace_addr(a, cds_base)) {
+ // We failed to find an aligned base that will reach. Fall
+ // back to using our requested addr.
+ metaspace_rs = ReservedSpace(compressed_class_space_size(),
+ _reserve_alignment,
+ large_pages,
+ requested_addr, 0);
+ break;
+ }
+#endif
+
+ metaspace_rs = ReservedSpace(compressed_class_space_size(),
+ _reserve_alignment,
+ large_pages,
+ a, 0);
+ if (metaspace_rs.is_reserved())
+ break;
+ }
+ }
+
+#endif // AARCH64
+
if (!metaspace_rs.is_reserved()) {
#if INCLUDE_CDS
if (UseSharedSpaces) {
--- a/hotspot/src/share/vm/opto/ad.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/opto/ad.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -46,5 +46,8 @@
#ifdef TARGET_ARCH_MODEL_ppc_64
# include "adfiles/ad_ppc_64.hpp"
#endif
+#ifdef TARGET_ARCH_MODEL_aarch64
+# include "adfiles/ad_aarch64.hpp"
+#endif
#endif // SHARE_VM_OPTO_AD_HPP
--- a/hotspot/src/share/vm/opto/c2_globals.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/opto/c2_globals.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -38,6 +38,9 @@
#ifdef TARGET_ARCH_ppc
# include "c2_globals_ppc.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "c2_globals_aarch64.hpp"
+#endif
#ifdef TARGET_OS_FAMILY_linux
# include "c2_globals_linux.hpp"
#endif
--- a/hotspot/src/share/vm/opto/graphKit.cpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/opto/graphKit.cpp Thu Dec 11 13:11:53 2014 -0800
@@ -3813,7 +3813,7 @@
// Smash zero into card
if( !UseConcMarkSweepGC ) {
- __ store(__ ctrl(), card_adr, zero, bt, adr_type, MemNode::release);
+ __ store(__ ctrl(), card_adr, zero, bt, adr_type, MemNode::unordered);
} else {
// Specialized path for CM store barrier
__ storeCM(__ ctrl(), card_adr, zero, oop_store, adr_idx, bt, adr_type);
--- a/hotspot/src/share/vm/opto/memnode.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/opto/memnode.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -511,10 +511,16 @@
// Conservatively release stores of object references in order to
// ensure visibility of object initialization.
static inline MemOrd release_if_reference(const BasicType t) {
+#ifdef AARCH64
+ // AArch64 doesn't need a release store here because object
+ // initialization contains the necessary barriers.
+ return unordered;
+#else
const MemOrd mo = (t == T_ARRAY ||
t == T_ADDRESS || // Might be the address of an object reference (`boxing').
t == T_OBJECT) ? release : unordered;
return mo;
+#endif
}
// Polymorphic factory method
--- a/hotspot/src/share/vm/opto/optoreg.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/opto/optoreg.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -48,6 +48,9 @@
#ifdef TARGET_ARCH_MODEL_ppc_64
# include "adfiles/adGlobals_ppc_64.hpp"
#endif
+#ifdef TARGET_ARCH_MODEL_aarch64
+# include "adfiles/adGlobals_aarch64.hpp"
+#endif
//------------------------------OptoReg----------------------------------------
// We eventually need Registers for the Real World. Registers are essentially
--- a/hotspot/src/share/vm/opto/parse2.cpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/opto/parse2.cpp Thu Dec 11 13:11:53 2014 -0800
@@ -1689,7 +1689,8 @@
a = pop(); // the array itself
const TypeOopPtr* elemtype = _gvn.type(a)->is_aryptr()->elem()->make_oopptr();
const TypeAryPtr* adr_type = TypeAryPtr::OOPS;
- Node* store = store_oop_to_array(control(), a, d, adr_type, c, elemtype, T_OBJECT, MemNode::release);
+ Node* store = store_oop_to_array(control(), a, d, adr_type, c, elemtype, T_OBJECT,
+ StoreNode::release_if_reference(T_OBJECT));
break;
}
case Bytecodes::_lastore: {
--- a/hotspot/src/share/vm/prims/jni_md.h Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/prims/jni_md.h Thu Dec 11 13:11:53 2014 -0800
@@ -39,6 +39,9 @@
#ifdef TARGET_ARCH_ppc
# include "jni_ppc.h"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "jni_aarch64.h"
+#endif
/*
--- a/hotspot/src/share/vm/prims/methodHandles.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/prims/methodHandles.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -194,6 +194,9 @@
#ifdef TARGET_ARCH_ppc
# include "methodHandles_ppc.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "methodHandles_aarch64.hpp"
+#endif
// Tracing
static void trace_method_handle(MacroAssembler* _masm, const char* adaptername) PRODUCT_RETURN;
--- a/hotspot/src/share/vm/runtime/arguments.cpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/runtime/arguments.cpp Thu Dec 11 13:11:53 2014 -0800
@@ -1164,7 +1164,8 @@
}
// Increase the code cache size - tiered compiles a lot more.
if (FLAG_IS_DEFAULT(ReservedCodeCacheSize)) {
- FLAG_SET_ERGO(uintx, ReservedCodeCacheSize, ReservedCodeCacheSize * 5);
+ FLAG_SET_ERGO(uintx, ReservedCodeCacheSize,
+ MIN2(CODE_CACHE_DEFAULT_LIMIT, ReservedCodeCacheSize * 5));
}
// Enable SegmentedCodeCache if TieredCompilation is enabled and ReservedCodeCacheSize >= 240M
if (FLAG_IS_DEFAULT(SegmentedCodeCache) && ReservedCodeCacheSize >= 240*M) {
@@ -2520,11 +2521,11 @@
"Invalid ReservedCodeCacheSize=%dK. Must be at least %uK.\n", ReservedCodeCacheSize/K,
min_code_cache_size/K);
status = false;
- } else if (ReservedCodeCacheSize > 2*G) {
- // Code cache size larger than MAXINT is not supported.
+ } else if (ReservedCodeCacheSize > CODE_CACHE_SIZE_LIMIT) {
+ // Code cache size larger than CODE_CACHE_SIZE_LIMIT is not supported.
jio_fprintf(defaultStream::error_stream(),
"Invalid ReservedCodeCacheSize=%dM. Must be at most %uM.\n", ReservedCodeCacheSize/M,
- (2*G)/M);
+ CODE_CACHE_SIZE_LIMIT/M);
status = false;
} else if (NonNMethodCodeHeapSize < min_code_cache_size){
jio_fprintf(defaultStream::error_stream(),
--- a/hotspot/src/share/vm/runtime/atomic.inline.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/runtime/atomic.inline.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -43,6 +43,9 @@
#ifdef TARGET_OS_ARCH_linux_ppc
# include "atomic_linux_ppc.inline.hpp"
#endif
+#ifdef TARGET_OS_ARCH_linux_aarch64
+# include "atomic_linux_aarch64.inline.hpp"
+#endif
// Solaris
#ifdef TARGET_OS_ARCH_solaris_x86
--- a/hotspot/src/share/vm/runtime/frame.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/runtime/frame.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -469,6 +469,9 @@
#ifdef TARGET_ARCH_ppc
# include "frame_ppc.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "frame_aarch64.hpp"
+#endif
};
--- a/hotspot/src/share/vm/runtime/frame.inline.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/runtime/frame.inline.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -76,6 +76,9 @@
#ifdef TARGET_ARCH_ppc
# include "frame_ppc.inline.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "frame_aarch64.inline.hpp"
+#endif
#endif // SHARE_VM_RUNTIME_FRAME_INLINE_HPP
--- a/hotspot/src/share/vm/runtime/globals.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/runtime/globals.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -52,6 +52,9 @@
#ifdef TARGET_ARCH_ppc
# include "globals_ppc.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "globals_aarch64.hpp"
+#endif
#ifdef TARGET_OS_FAMILY_linux
# include "globals_linux.hpp"
#endif
@@ -91,6 +94,9 @@
#ifdef TARGET_OS_ARCH_linux_ppc
# include "globals_linux_ppc.hpp"
#endif
+#ifdef TARGET_OS_ARCH_linux_aarch64
+# include "globals_linux_aarch64.hpp"
+#endif
#ifdef TARGET_OS_ARCH_aix_ppc
# include "globals_aix_ppc.hpp"
#endif
@@ -110,8 +116,8 @@
#ifdef TARGET_ARCH_arm
# include "c1_globals_arm.hpp"
#endif
-#ifdef TARGET_ARCH_ppc
-# include "c1_globals_ppc.hpp"
+#ifdef TARGET_ARCH_aarch64
+# include "c1_globals_aarch64.hpp"
#endif
#ifdef TARGET_OS_FAMILY_linux
# include "c1_globals_linux.hpp"
@@ -128,6 +134,9 @@
#ifdef TARGET_OS_FAMILY_bsd
# include "c1_globals_bsd.hpp"
#endif
+#ifdef TARGET_ARCH_ppc
+# include "c1_globals_ppc.hpp"
+#endif
#endif
#ifdef COMPILER2
#ifdef TARGET_ARCH_x86
@@ -142,6 +151,9 @@
#ifdef TARGET_ARCH_ppc
# include "c2_globals_ppc.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "c2_globals_aarch64.hpp"
+#endif
#ifdef TARGET_OS_FAMILY_linux
# include "c2_globals_linux.hpp"
#endif
--- a/hotspot/src/share/vm/runtime/icache.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/runtime/icache.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -83,6 +83,9 @@
#ifdef TARGET_ARCH_ppc
# include "icache_ppc.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "icache_aarch64.hpp"
+#endif
--- a/hotspot/src/share/vm/runtime/javaCalls.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/runtime/javaCalls.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -46,6 +46,9 @@
#ifdef TARGET_ARCH_ppc
# include "jniTypes_ppc.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "jniTypes_aarch64.hpp"
+#endif
// A JavaCallWrapper is constructed before each JavaCall and destructed after the call.
// Its purpose is to allocate/deallocate a new handle block and to save/restore the last
--- a/hotspot/src/share/vm/runtime/javaFrameAnchor.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/runtime/javaFrameAnchor.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -92,6 +92,9 @@
#ifdef TARGET_ARCH_ppc
# include "javaFrameAnchor_ppc.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "javaFrameAnchor_aarch64.hpp"
+#endif
public:
--- a/hotspot/src/share/vm/runtime/orderAccess.inline.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/runtime/orderAccess.inline.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -41,6 +41,9 @@
#ifdef TARGET_OS_ARCH_linux_arm
# include "orderAccess_linux_arm.inline.hpp"
#endif
+#ifdef TARGET_OS_ARCH_linux_aarch64
+# include "orderAccess_linux_aarch64.inline.hpp"
+#endif
#ifdef TARGET_OS_ARCH_linux_ppc
# include "orderAccess_linux_ppc.inline.hpp"
#endif
--- a/hotspot/src/share/vm/runtime/os.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/runtime/os.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -804,6 +804,9 @@
#ifdef TARGET_OS_ARCH_aix_ppc
# include "os_aix_ppc.hpp"
#endif
+#ifdef TARGET_OS_ARCH_linux_aarch64
+# include "os_linux_aarch64.hpp"
+#endif
#ifdef TARGET_OS_ARCH_bsd_x86
# include "os_bsd_x86.hpp"
#endif
--- a/hotspot/src/share/vm/runtime/prefetch.inline.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/runtime/prefetch.inline.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -40,6 +40,9 @@
#ifdef TARGET_OS_ARCH_linux_arm
# include "prefetch_linux_arm.inline.hpp"
#endif
+#ifdef TARGET_OS_ARCH_linux_aarch64
+# include "prefetch_linux_aarch64.inline.hpp"
+#endif
#ifdef TARGET_OS_ARCH_linux_ppc
# include "prefetch_linux_ppc.inline.hpp"
#endif
--- a/hotspot/src/share/vm/runtime/registerMap.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/runtime/registerMap.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -135,6 +135,9 @@
#ifdef TARGET_ARCH_ppc
# include "registerMap_ppc.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "registerMap_aarch64.hpp"
+#endif
};
--- a/hotspot/src/share/vm/runtime/stubRoutines.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/runtime/stubRoutines.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -105,6 +105,9 @@
#ifdef TARGET_ARCH_MODEL_ppc_64
# include "stubRoutines_ppc_64.hpp"
#endif
+#ifdef TARGET_ARCH_MODEL_aarch64
+# include "stubRoutines_aarch64.hpp"
+#endif
static jint _verify_oop_count;
--- a/hotspot/src/share/vm/runtime/thread.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/runtime/thread.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -1694,6 +1694,9 @@
#ifdef TARGET_OS_ARCH_linux_ppc
# include "thread_linux_ppc.hpp"
#endif
+#ifdef TARGET_OS_ARCH_linux_aarch64
+# include "thread_linux_aarch64.hpp"
+#endif
#ifdef TARGET_OS_ARCH_aix_ppc
# include "thread_aix_ppc.hpp"
#endif
--- a/hotspot/src/share/vm/runtime/threadLocalStorage.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/runtime/threadLocalStorage.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -68,6 +68,9 @@
#ifdef TARGET_OS_ARCH_linux_ppc
# include "threadLS_linux_ppc.hpp"
#endif
+#ifdef TARGET_OS_ARCH_linux_aarch64
+# include "threadLS_linux_aarch64.hpp"
+#endif
#ifdef TARGET_OS_ARCH_aix_ppc
# include "threadLS_aix_ppc.hpp"
#endif
--- a/hotspot/src/share/vm/runtime/vmStructs.cpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/runtime/vmStructs.cpp Thu Dec 11 13:11:53 2014 -0800
@@ -122,6 +122,9 @@
#ifdef TARGET_ARCH_ppc
# include "vmStructs_ppc.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "vmStructs_aarch64.hpp"
+#endif
#ifdef TARGET_OS_ARCH_linux_x86
# include "vmStructs_linux_x86.hpp"
#endif
@@ -146,6 +149,9 @@
#ifdef TARGET_OS_ARCH_linux_ppc
# include "vmStructs_linux_ppc.hpp"
#endif
+#ifdef TARGET_OS_ARCH_linux_aarch64
+# include "vmStructs_linux_aarch64.hpp"
+#endif
#ifdef TARGET_OS_ARCH_aix_ppc
# include "vmStructs_aix_ppc.hpp"
#endif
--- a/hotspot/src/share/vm/runtime/vm_version.cpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/runtime/vm_version.cpp Thu Dec 11 13:11:53 2014 -0800
@@ -196,6 +196,7 @@
ARM_ONLY("arm") \
PPC32_ONLY("ppc") \
PPC64_ONLY("ppc64") \
+ AARCH64_ONLY("aarch64") \
SPARC_ONLY("sparc")
#endif // ZERO
--- a/hotspot/src/share/vm/utilities/bytes.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/utilities/bytes.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -40,5 +40,8 @@
#ifdef TARGET_ARCH_ppc
# include "bytes_ppc.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "bytes_aarch64.hpp"
+#endif
#endif // SHARE_VM_UTILITIES_BYTES_HPP
--- a/hotspot/src/share/vm/utilities/copy.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/utilities/copy.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -337,6 +337,9 @@
#ifdef TARGET_ARCH_ppc
# include "copy_ppc.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "copy_aarch64.hpp"
+#endif
};
--- a/hotspot/src/share/vm/utilities/globalDefinitions.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/utilities/globalDefinitions.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -417,6 +417,11 @@
ProfileRTM = 0x0 // Use RTM with abort ratio calculation
};
+// The maximum size of the code cache. Can be overridden by targets.
+#define CODE_CACHE_SIZE_LIMIT (2*G)
+// Allow targets to reduce the default size of the code cache.
+#define CODE_CACHE_DEFAULT_LIMIT CODE_CACHE_SIZE_LIMIT
+
#ifdef TARGET_ARCH_x86
# include "globalDefinitions_x86.hpp"
#endif
@@ -432,6 +437,9 @@
#ifdef TARGET_ARCH_ppc
# include "globalDefinitions_ppc.hpp"
#endif
+#ifdef TARGET_ARCH_aarch64
+# include "globalDefinitions_aarch64.hpp"
+#endif
/*
* If a platform does not support native stack walking
--- a/hotspot/src/share/vm/utilities/macros.hpp Fri Nov 21 08:00:31 2014 -0800
+++ b/hotspot/src/share/vm/utilities/macros.hpp Thu Dec 11 13:11:53 2014 -0800
@@ -401,6 +401,14 @@
#define NOT_ARM(code) code
#endif
+#ifdef AARCH64
+#define AARCH64_ONLY(code) code
+#define NOT_AARCH64(code)
+#else
+#define AARCH64_ONLY(code)
+#define NOT_AARCH64(code) code
+#endif
+
#ifdef JAVASE_EMBEDDED
#define EMBEDDED_ONLY(code) code
#define NOT_EMBEDDED(code)