From d51cb8c0f7966ac0b870e90e421cc8a796d98abf Mon Sep 17 00:00:00 2001 From: Simon South Date: Tue, 9 Jun 2020 13:48:42 -0400 Subject: [PATCH] Extend AArch64 support This adds to IcedTea 6 a patch that extends the support for AArch64 in its version of HotSpot, allowing the portable Zero virtual machine to be built for that platform. The patch added is a backport of the one prepared for JDK 9 by the OpenJDK AArch64 Porting Project, available (as of 11 June 2020) for download from https://openjdk.java.net/jeps/237. --- Makefile.am | 3 +- Makefile.in | 12 +- .../hs23/aarch64-extended-support.patch | 1766 +++++++++++++++++ 3 files changed, 1775 insertions(+), 6 deletions(-) create mode 100644 patches/hotspot/hs23/aarch64-extended-support.patch diff --git a/Makefile.am b/Makefile.am index 97dac85..f5c917b 100644 --- a/Makefile.am +++ b/Makefile.am @@ -621,7 +621,8 @@ ICEDTEA_PATCHES = \ patches/openjdk/6260348-pr3068.patch \ patches/openjdk/6961123-pr2975.patch \ patches/pr2800-missing_resources.patch \ - patches/pr3213-conditional_arm32jit.patch + patches/pr3213-conditional_arm32jit.patch \ + patches/hotspot/hs23/aarch64-extended-support.patch if WITH_RHINO ICEDTEA_PATCHES += \ diff --git a/Makefile.in b/Makefile.in index aced7c2..e3545ee 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1049,11 +1049,13 @@ ICEDTEA_PATCHES = $(DROP_PATCHES) $(SECURITY_PATCHES) \ patches/openjdk/6260348-pr3068.patch \ patches/openjdk/6961123-pr2975.patch \ patches/pr2800-missing_resources.patch \ - patches/pr3213-conditional_arm32jit.patch $(am__append_21) \ - $(am__append_22) $(am__append_23) $(am__append_24) \ - $(am__append_25) $(am__append_26) $(am__append_27) \ - $(am__append_28) $(am__append_29) $(am__append_30) \ - $(am__append_31) $(am__append_32) $(DISTRIBUTION_PATCHES) + patches/pr3213-conditional_arm32jit.patch \ + patches/hotspot/hs23/aarch64-extended-support.patch \ + $(am__append_21) $(am__append_22) $(am__append_23) \ + $(am__append_24) $(am__append_25) $(am__append_26) \ + $(am__append_27) $(am__append_28) $(am__append_29) \ + $(am__append_30) $(am__append_31) $(am__append_32) \ + $(DISTRIBUTION_PATCHES) @ENABLE_NSS_FALSE@NSS_PATCHES = patches/nss-not-enabled-config.patch @ENABLE_NSS_TRUE@NSS_PATCHES = patches/nss-config.patch diff --git a/patches/hotspot/hs23/aarch64-extended-support.patch b/patches/hotspot/hs23/aarch64-extended-support.patch new file mode 100644 index 0000000..7817f4d --- /dev/null +++ b/patches/hotspot/hs23/aarch64-extended-support.patch @@ -0,0 +1,1766 @@ +diff --git openjdk.orig/hotspot/agent/src/os/linux/LinuxDebuggerLocal.c openjdk/hotspot/agent/src/os/linux/LinuxDebuggerLocal.c +index 5771fdd..b23cc17 100644 +--- openjdk.orig/hotspot/agent/src/os/linux/LinuxDebuggerLocal.c ++++ openjdk/hotspot/agent/src/os/linux/LinuxDebuggerLocal.c +@@ -304,6 +304,9 @@ JNIEXPORT jlongArray JNICALL Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLo + #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 +@@ -406,6 +409,12 @@ JNIEXPORT jlongArray JNICALL Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLo + 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; +diff --git openjdk.orig/hotspot/agent/src/os/linux/libproc.h openjdk/hotspot/agent/src/os/linux/libproc.h +index e4d77f7..c02b841 100644 +--- openjdk.orig/hotspot/agent/src/os/linux/libproc.h ++++ openjdk/hotspot/agent/src/os/linux/libproc.h +@@ -54,6 +54,10 @@ struct pt_regs { + + #endif //sparc or sparcv9 + ++#if defined(aarch64) ++#include "asm/ptrace.h" ++#endif ++ + /************************************************************************************ + + 0. This is very minimal subset of Solaris libproc just enough for current application. +@@ -97,6 +101,9 @@ unsigned long regs[IA64_REG_COUNT]; /* integer and fp regs */ + #if defined(sparc) || defined(sparcv9) + #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 +diff --git openjdk.orig/hotspot/make/defs.make openjdk/hotspot/make/defs.make +index 44f21f8..4e8d00b 100644 +--- openjdk.orig/hotspot/make/defs.make ++++ openjdk/hotspot/make/defs.make +@@ -232,7 +232,7 @@ ifneq ($(OSNAME),windows) + + # 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 zero,$(ARCH))) ++ SRCARCH = $(ARCH/$(filter sparc sparc64 ia64 amd64 x86_64 arm ppc aarch64 zero,$(ARCH))) + ARCH/ = x86 + ARCH/sparc = sparc + ARCH/sparc64= sparc +@@ -242,6 +242,7 @@ ifneq ($(OSNAME),windows) + 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 +@@ -267,11 +268,12 @@ ifneq ($(OSNAME),windows) + LIBARCH/sparcv9 = sparcv9 + LIBARCH/ia64 = ia64 + LIBARCH/ppc64 = ppc ++ LIBARCH/aarch64 = aarch64 + LIBARCH/ppc = ppc + LIBARCH/arm = arm + LIBARCH/zero = $(ZERO_LIBARCH) + +- LP64_ARCH = sparcv9 amd64 ia64 zero ++ LP64_ARCH = sparcv9 amd64 ia64 aarch64 zero + endif + + # Required make macro settings for all platforms +diff --git openjdk.orig/hotspot/make/linux/makefiles/buildtree.make openjdk/hotspot/make/linux/makefiles/buildtree.make +index 7c3d4f9..3bc7e8a 100644 +--- openjdk.orig/hotspot/make/linux/makefiles/buildtree.make ++++ openjdk/hotspot/make/linux/makefiles/buildtree.make +@@ -385,6 +385,7 @@ DATA_MODE/sparc = 32 + DATA_MODE/sparcv9 = 64 + DATA_MODE/amd64 = 64 + DATA_MODE/ia64 = 64 ++DATA_MODE/aarch64 = 64 + DATA_MODE/zero = $(ARCH_DATA_MODEL) + + JAVA_FLAG/32 = -d32 +diff --git openjdk.orig/hotspot/make/linux/makefiles/defs.make openjdk/hotspot/make/linux/makefiles/defs.make +index 7bb3149..39ffda4 100644 +--- openjdk.orig/hotspot/make/linux/makefiles/defs.make ++++ openjdk/hotspot/make/linux/makefiles/defs.make +@@ -118,6 +118,15 @@ ifeq ($(ARCH), ppc) + 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 ++ + # determine if HotSpot is being built in JDK6 or earlier version + JDK6_OR_EARLIER=0 + ifeq "$(shell expr \( '$(JDK_MAJOR_VERSION)' != '' \& '$(JDK_MINOR_VERSION)' != '' \& '$(JDK_MICRO_VERSION)' != '' \))" "1" +diff --git openjdk.orig/hotspot/make/linux/makefiles/gcc.make openjdk/hotspot/make/linux/makefiles/gcc.make +index 897e3a6..44f1673 100644 +--- openjdk.orig/hotspot/make/linux/makefiles/gcc.make ++++ openjdk/hotspot/make/linux/makefiles/gcc.make +@@ -104,6 +104,7 @@ endif + ARCHFLAG = $(ARCHFLAG/$(BUILDARCH)) + ARCHFLAG/i486 = -m32 -march=i586 + ARCHFLAG/amd64 = -m64 ++ARCHFLAG/aarch64 = + ARCHFLAG/ia64 = + ARCHFLAG/sparc = -m32 -mcpu=v9 + ARCHFLAG/sparcv9 = -m64 -mcpu=v9 +diff --git openjdk.orig/hotspot/src/os/linux/vm/os_linux.cpp openjdk/hotspot/src/os/linux/vm/os_linux.cpp +index c1b0e5c..9f7cda0 100644 +--- openjdk.orig/hotspot/src/os/linux/vm/os_linux.cpp ++++ openjdk/hotspot/src/os/linux/vm/os_linux.cpp +@@ -296,6 +296,8 @@ static char cpu_arch[] = "sparcv9"; + # else + static char cpu_arch[] = "sparc"; + # endif ++#elif defined(AARCH64) ++static char cpu_arch[] = "aarch64"; + #else + #error Add appropriate cpu_arch setting + #endif +@@ -1442,7 +1444,7 @@ void os::Linux::clock_init() { + #ifndef SYS_clock_getres + + #if defined(IA32) || defined(AMD64) +-#define SYS_clock_getres IA32_ONLY(266) AMD64_ONLY(229) ++#define SYS_clock_getres IA32_ONLY(266) AMD64_ONLY(229) AARCH64_ONLY(114) + #define sys_clock_getres(x,y) ::syscall(SYS_clock_getres, x, y) + #else + #warning "SYS_clock_getres not defined for this platform, disabling fast_thread_cpu_time" +@@ -1930,7 +1932,7 @@ void * os::dll_load(const char *filename, char *ebuf, int ebuflen) + 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, SH ++ IA32, AMD64, IA64, __sparc, __powerpc__, ARM, S390, ALPHA, MIPS, MIPSEL, PARISC, M68K, SH, AARCH64 + #endif + + // Identify compatability class for VM's architecture and library's architecture +@@ -3056,7 +3058,7 @@ void os::large_page_init() { + + #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"); +@@ -5378,11 +5380,11 @@ void Parker::unpark() { + 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, +diff --git openjdk.orig/hotspot/src/share/vm/adlc/main.cpp openjdk/hotspot/src/share/vm/adlc/main.cpp +index 47e207a..b93504e 100644 +--- openjdk.orig/hotspot/src/share/vm/adlc/main.cpp ++++ openjdk/hotspot/src/share/vm/adlc/main.cpp +@@ -244,6 +244,11 @@ int main(int argc, char *argv[]) + AD.addInclude(AD._CPP_file, "assembler_arm.inline.hpp"); + AD.addInclude(AD._CPP_file, "nativeInst_arm.hpp"); + AD.addInclude(AD._CPP_file, "vmreg_arm.inline.hpp"); ++#endif ++#ifdef TARGET_ARCH_aarch64 ++ AD.addInclude(AD._CPP_file, "assembler_aarch64.inline.hpp"); ++ AD.addInclude(AD._CPP_file, "nativeInst_aarch64.hpp"); ++ AD.addInclude(AD._CPP_file, "vmreg_aarch64.inline.hpp"); + #endif + AD.addInclude(AD._HPP_file, "memory/allocation.hpp"); + AD.addInclude(AD._HPP_file, "opto/machnode.hpp"); +diff --git openjdk.orig/hotspot/src/share/vm/asm/assembler.cpp openjdk/hotspot/src/share/vm/asm/assembler.cpp +index 2bcdcbc..57787ac 100644 +--- openjdk.orig/hotspot/src/share/vm/asm/assembler.cpp ++++ openjdk/hotspot/src/share/vm/asm/assembler.cpp +@@ -43,6 +43,9 @@ + #ifdef TARGET_ARCH_ppc + # include "assembler_ppc.inline.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "assembler_aarch64.inline.hpp" ++#endif + + + // Implementation of AbstractAssembler +diff --git openjdk.orig/hotspot/src/share/vm/asm/assembler.hpp openjdk/hotspot/src/share/vm/asm/assembler.hpp +index c25aa3f..4f77825 100644 +--- openjdk.orig/hotspot/src/share/vm/asm/assembler.hpp ++++ openjdk/hotspot/src/share/vm/asm/assembler.hpp +@@ -51,6 +51,10 @@ + # include "register_ppc.hpp" + # include "vm_version_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "register_aarch64.hpp" ++# include "vm_version_aarch64.hpp" ++#endif + + // This file contains platform-independent assembler declarations. + +@@ -459,6 +463,9 @@ class AbstractAssembler : public ResourceObj { + #ifdef TARGET_ARCH_ppc + # include "assembler_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "assembler_aarch64.hpp" ++#endif + + + #endif // SHARE_VM_ASM_ASSEMBLER_HPP +diff --git openjdk.orig/hotspot/src/share/vm/asm/codeBuffer.hpp openjdk/hotspot/src/share/vm/asm/codeBuffer.hpp +index 685297a..002faef 100644 +--- openjdk.orig/hotspot/src/share/vm/asm/codeBuffer.hpp ++++ openjdk/hotspot/src/share/vm/asm/codeBuffer.hpp +@@ -573,6 +573,9 @@ class CodeBuffer: public StackObj { + #ifdef TARGET_ARCH_ppc + # include "codeBuffer_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "codeBuffer_aarch64.hpp" ++#endif + + }; + +diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_Canonicalizer.cpp openjdk/hotspot/src/share/vm/c1/c1_Canonicalizer.cpp +index c95a23c..2ec31e5 100644 +--- openjdk.orig/hotspot/src/share/vm/c1/c1_Canonicalizer.cpp ++++ openjdk/hotspot/src/share/vm/c1/c1_Canonicalizer.cpp +@@ -877,6 +877,13 @@ static bool match(UnsafeRawOp* x, + return false; + } + ++// AARCH64 cannot handle shifts which are not either 0, or log2 of the type size ++#ifdef AARCH64 ++ if (*log2_scale != 0 && ++ (1 << *log2_scale) != type2aelembytes(x->basic_type(), true)) ++ return false; ++#endif ++ + // If the value is pinned then it will be always be computed so + // there's no profit to reshaping the expression. + return !root->is_pinned(); +diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_Defs.hpp openjdk/hotspot/src/share/vm/c1/c1_Defs.hpp +index bebb3b0..ddaceb7 100644 +--- openjdk.orig/hotspot/src/share/vm/c1/c1_Defs.hpp ++++ openjdk/hotspot/src/share/vm/c1/c1_Defs.hpp +@@ -41,6 +41,9 @@ + #ifdef TARGET_ARCH_ppc + # include "register_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "register_aarch64.hpp" ++#endif + + // set frame size and return address offset to these values in blobs + // (if the compiled frame uses ebp as link pointer on IA; otherwise, +@@ -62,6 +65,9 @@ enum { + #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 +diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_FpuStackSim.hpp openjdk/hotspot/src/share/vm/c1/c1_FpuStackSim.hpp +index a1e4c38..491b064 100644 +--- openjdk.orig/hotspot/src/share/vm/c1/c1_FpuStackSim.hpp ++++ openjdk/hotspot/src/share/vm/c1/c1_FpuStackSim.hpp +@@ -44,6 +44,9 @@ class FpuStackSim; + #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 +diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_FrameMap.cpp openjdk/hotspot/src/share/vm/c1/c1_FrameMap.cpp +index ea50b27..6a3dc63 100644 +--- openjdk.orig/hotspot/src/share/vm/c1/c1_FrameMap.cpp ++++ openjdk/hotspot/src/share/vm/c1/c1_FrameMap.cpp +@@ -41,6 +41,9 @@ + #ifdef TARGET_ARCH_ppc + # include "vmreg_ppc.inline.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "vmreg_aarch64.inline.hpp" ++#endif + + + +diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_FrameMap.hpp openjdk/hotspot/src/share/vm/c1/c1_FrameMap.hpp +index 288fc5c..e9a0250 100644 +--- openjdk.orig/hotspot/src/share/vm/c1/c1_FrameMap.hpp ++++ openjdk/hotspot/src/share/vm/c1/c1_FrameMap.hpp +@@ -93,6 +93,9 @@ class FrameMap : public CompilationResourceObj { + #endif + #ifdef TARGET_ARCH_ppc + # include "c1_FrameMap_ppc.hpp" ++#endif ++#ifdef TARGET_ARCH_aarch64 ++# include "c1_FrameMap_aarch64.hpp" + #endif + + +diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_LIR.cpp openjdk/hotspot/src/share/vm/c1/c1_LIR.cpp +index 776a6a3..6e1a362 100644 +--- openjdk.orig/hotspot/src/share/vm/c1/c1_LIR.cpp ++++ openjdk/hotspot/src/share/vm/c1/c1_LIR.cpp +@@ -67,7 +67,7 @@ FloatRegister LIR_OprDesc::as_double_reg() const { + + #endif + +-#ifdef ARM ++#if defined(ARM) || defined (TARGET_ARCH_aarch64) + + FloatRegister LIR_OprDesc::as_float_reg() const { + return as_FloatRegister(fpu_regnr()); +@@ -147,7 +147,11 @@ void LIR_Address::verify() const { + #endif + #ifdef _LP64 + assert(base()->is_cpu_register(), "wrong base operand"); ++#ifndef TARGET_ARCH_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, + "wrong type for addresses"); + #else +@@ -545,7 +549,7 @@ void LIR_OpVisitState::visit(LIR_Op* op) { + assert(opConvert->_info == NULL, "must be"); + if (opConvert->_opr->is_valid()) do_input(opConvert->_opr); + if (opConvert->_result->is_valid()) do_output(opConvert->_result); +-#ifdef PPC ++#if defined(PPC) || defined(TARGET_ARCH_aarch64) + if (opConvert->_tmp1->is_valid()) do_temp(opConvert->_tmp1); + if (opConvert->_tmp2->is_valid()) do_temp(opConvert->_tmp2); + #endif +@@ -1468,6 +1472,11 @@ void LIR_OprDesc::print(outputStream* out) const { + 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()); +@@ -1836,7 +1845,7 @@ void LIR_OpConvert::print_instr(outputStream* out) const { + print_bytecode(out, bytecode()); + in_opr()->print(out); out->print(" "); + result_opr()->print(out); out->print(" "); +-#ifdef PPC ++#if defined(PPC) || defined(TARGET_ARCH_aarch64) + if(tmp1()->is_valid()) { + tmp1()->print(out); out->print(" "); + tmp2()->print(out); out->print(" "); +diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_LIR.hpp openjdk/hotspot/src/share/vm/c1/c1_LIR.hpp +index f8589c3..eb3383f 100644 +--- openjdk.orig/hotspot/src/share/vm/c1/c1_LIR.hpp ++++ openjdk/hotspot/src/share/vm/c1/c1_LIR.hpp +@@ -437,8 +437,8 @@ class LIR_OprDesc: public CompilationResourceObj { + 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 +@@ -526,7 +526,7 @@ class LIR_Address: public LIR_OprPtr { + , _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) +@@ -601,7 +601,7 @@ class LIR_OprFact: public AllStatic { + 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 | +@@ -1398,7 +1398,7 @@ class LIR_OpConvert: public LIR_Op1 { + private: + Bytecodes::Code _bytecode; + ConversionStub* _stub; +-#ifdef PPC ++#if defined(PPC) || defined(TARGET_ARCH_aarch64) + LIR_Opr _tmp1; + LIR_Opr _tmp2; + #endif +@@ -1413,7 +1413,7 @@ class LIR_OpConvert: public LIR_Op1 { + #endif + , _bytecode(code) {} + +-#ifdef PPC ++#if defined(PPC) || defined(TARGET_ARCH_aarch64) + LIR_OpConvert(Bytecodes::Code code, LIR_Opr opr, LIR_Opr result, ConversionStub* stub + ,LIR_Opr tmp1, LIR_Opr tmp2) + : LIR_Op1(lir_convert, opr, result) +@@ -1425,7 +1425,7 @@ class LIR_OpConvert: public LIR_Op1 { + + Bytecodes::Code bytecode() const { return _bytecode; } + ConversionStub* stub() const { return _stub; } +-#ifdef PPC ++#if defined(PPC) || defined(TARGET_ARCH_aarch64) + LIR_Opr tmp1() const { return _tmp1; } + LIR_Opr tmp2() const { return _tmp2; } + #endif +@@ -1973,7 +1973,14 @@ class LIR_List: public CompilationResourceObj { + #ifdef PPC + void convert(Bytecodes::Code code, LIR_Opr left, LIR_Opr dst, LIR_Opr tmp1, LIR_Opr tmp2) { append(new LIR_OpConvert(code, left, dst, NULL, tmp1, tmp2)); } + #endif ++#if defined (TARGET_ARCH_aarch64) ++ void convert(Bytecodes::Code code, LIR_Opr left, LIR_Opr dst, ++ ConversionStub* stub = NULL, LIR_Opr tmp1 = LIR_OprDesc::illegalOpr()) { ++ append(new LIR_OpConvert(code, left, dst, stub, tmp1, LIR_OprDesc::illegalOpr())); ++ } ++#else + void convert(Bytecodes::Code code, LIR_Opr left, LIR_Opr dst, ConversionStub* stub = NULL/*, bool is_32bit = false*/) { append(new LIR_OpConvert(code, left, dst, stub)); } ++#endif + + void logical_and (LIR_Opr left, LIR_Opr right, LIR_Opr dst) { append(new LIR_Op2(lir_logic_and, left, right, dst)); } + void logical_or (LIR_Opr left, LIR_Opr right, LIR_Opr dst) { append(new LIR_Op2(lir_logic_or, left, right, dst)); } +diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp openjdk/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp +index 528f21e..4d83fca 100644 +--- openjdk.orig/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp ++++ openjdk/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp +@@ -50,6 +50,10 @@ + # include "nativeInst_ppc.hpp" + # include "vmreg_ppc.inline.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "nativeInst_aarch64.hpp" ++# include "vmreg_aarch64.inline.hpp" ++#endif + + + void LIR_Assembler::patching_epilog(PatchingStub* patch, LIR_PatchCode patch_code, Register obj, CodeEmitInfo* info) { +diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_LIRAssembler.hpp openjdk/hotspot/src/share/vm/c1/c1_LIRAssembler.hpp +index 58adf59..f4a49b3 100644 +--- openjdk.orig/hotspot/src/share/vm/c1/c1_LIRAssembler.hpp ++++ openjdk/hotspot/src/share/vm/c1/c1_LIRAssembler.hpp +@@ -261,6 +261,9 @@ class LIR_Assembler: public CompilationResourceObj { + #ifdef TARGET_ARCH_ppc + # include "c1_LIRAssembler_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "c1_LIRAssembler_aarch64.hpp" ++#endif + + }; + +diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_LinearScan.cpp openjdk/hotspot/src/share/vm/c1/c1_LinearScan.cpp +index aaae71d..93f9f5f 100644 +--- openjdk.orig/hotspot/src/share/vm/c1/c1_LinearScan.cpp ++++ openjdk/hotspot/src/share/vm/c1/c1_LinearScan.cpp +@@ -47,6 +47,9 @@ + #ifdef TARGET_ARCH_ppc + # include "vmreg_ppc.inline.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "vmreg_aarch64.inline.hpp" ++#endif + + + #ifndef PRODUCT +@@ -2190,7 +2193,7 @@ LIR_Opr LinearScan::color_lir_opr(LIR_Opr opr, int op_id, LIR_OpVisitState::OprM + + LIR_Opr res = operand_for_interval(interval); + +-#ifdef X86 ++#if defined(X86) || defined(AARCH64) + // new semantic for is_last_use: not only set on definite end of interval, + // but also before hole + // This may still miss some cases (e.g. for dead values), but it is not necessary that the +diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_LinearScan.hpp openjdk/hotspot/src/share/vm/c1/c1_LinearScan.hpp +index 0c06f1b..a152328 100644 +--- openjdk.orig/hotspot/src/share/vm/c1/c1_LinearScan.hpp ++++ openjdk/hotspot/src/share/vm/c1/c1_LinearScan.hpp +@@ -985,6 +985,9 @@ class LinearScanTimers : public StackObj { + #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 +diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_MacroAssembler.hpp openjdk/hotspot/src/share/vm/c1/c1_MacroAssembler.hpp +index 55d9803..eda2174 100644 +--- openjdk.orig/hotspot/src/share/vm/c1/c1_MacroAssembler.hpp ++++ openjdk/hotspot/src/share/vm/c1/c1_MacroAssembler.hpp +@@ -41,6 +41,9 @@ + #ifdef TARGET_ARCH_ppc + # include "assembler_ppc.inline.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "assembler_aarch64.inline.hpp" ++#endif + + class CodeEmitInfo; + +@@ -73,6 +76,9 @@ class C1_MacroAssembler: public MacroAssembler { + #ifdef TARGET_ARCH_ppc + # include "c1_MacroAssembler_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "c1_MacroAssembler_aarch64.hpp" ++#endif + + }; + +diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_Runtime1.cpp openjdk/hotspot/src/share/vm/c1/c1_Runtime1.cpp +index 765dec4..f0b3aae 100644 +--- openjdk.orig/hotspot/src/share/vm/c1/c1_Runtime1.cpp ++++ openjdk/hotspot/src/share/vm/c1/c1_Runtime1.cpp +@@ -1103,6 +1103,7 @@ JRT_END + // completes we can check for deoptimization. This simplifies the + // assembly code in the cpu directories. + // ++#ifndef TARGET_ARCH_aarch64 + int Runtime1::move_klass_patching(JavaThread* thread) { + // + // NOTE: we are still in Java +@@ -1150,6 +1151,7 @@ int Runtime1::access_field_patching(JavaThread* thread) { + + return caller_is_deopted(); + JRT_END ++#endif + + + JRT_LEAF(void, Runtime1::trace_block_entry(jint block_id)) +diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_Runtime1.hpp openjdk/hotspot/src/share/vm/c1/c1_Runtime1.hpp +index 2032564..19261be 100644 +--- openjdk.orig/hotspot/src/share/vm/c1/c1_Runtime1.hpp ++++ openjdk/hotspot/src/share/vm/c1/c1_Runtime1.hpp +@@ -159,6 +159,9 @@ class Runtime1: public AllStatic { + static int move_klass_patching(JavaThread* thread); + + static void patch_code(JavaThread* thread, StubID stub_id); ++#ifdef TARGET_ARCH_aarch64 ++ static void patch_code_aarch64(JavaThread* thread, StubID stub_id); ++#endif + + public: + // initialization +diff --git openjdk.orig/hotspot/src/share/vm/c1/c1_globals.hpp openjdk/hotspot/src/share/vm/c1/c1_globals.hpp +index 15f3cc1..4143a87 100644 +--- openjdk.orig/hotspot/src/share/vm/c1/c1_globals.hpp ++++ openjdk/hotspot/src/share/vm/c1/c1_globals.hpp +@@ -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 +diff --git openjdk.orig/hotspot/src/share/vm/classfile/classFileStream.hpp openjdk/hotspot/src/share/vm/classfile/classFileStream.hpp +index cf6f0e5..b128b3a 100644 +--- openjdk.orig/hotspot/src/share/vm/classfile/classFileStream.hpp ++++ openjdk/hotspot/src/share/vm/classfile/classFileStream.hpp +@@ -41,6 +41,9 @@ + #ifdef TARGET_ARCH_ppc + # include "bytes_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "bytes_aarch64.hpp" ++#endif + + // Input stream for reading .class file + // +diff --git openjdk.orig/hotspot/src/share/vm/classfile/stackMapTable.hpp openjdk/hotspot/src/share/vm/classfile/stackMapTable.hpp +index f876029..ac415b6 100644 +--- openjdk.orig/hotspot/src/share/vm/classfile/stackMapTable.hpp ++++ openjdk/hotspot/src/share/vm/classfile/stackMapTable.hpp +@@ -46,6 +46,9 @@ + #ifdef TARGET_ARCH_ppc + # include "bytes_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "bytes_aarch64.hpp" ++#endif + + class StackMapReader; + +diff --git openjdk.orig/hotspot/src/share/vm/classfile/verifier.cpp openjdk/hotspot/src/share/vm/classfile/verifier.cpp +index c5c5e11..9c22a21 100644 +--- openjdk.orig/hotspot/src/share/vm/classfile/verifier.cpp ++++ openjdk/hotspot/src/share/vm/classfile/verifier.cpp +@@ -60,6 +60,9 @@ + #ifdef TARGET_ARCH_ppc + # include "bytes_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "bytes_aarch64.hpp" ++#endif + + #define NOFAILOVER_MAJOR_VERSION 51 + +diff --git openjdk.orig/hotspot/src/share/vm/code/codeBlob.cpp openjdk/hotspot/src/share/vm/code/codeBlob.cpp +index 244c320..429e0be 100644 +--- openjdk.orig/hotspot/src/share/vm/code/codeBlob.cpp ++++ openjdk/hotspot/src/share/vm/code/codeBlob.cpp +@@ -54,6 +54,9 @@ + #ifdef TARGET_ARCH_ppc + # include "nativeInst_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "nativeInst_aarch64.hpp" ++#endif + #ifdef COMPILER1 + #include "c1/c1_Runtime1.hpp" + #endif +diff --git openjdk.orig/hotspot/src/share/vm/code/compiledIC.hpp openjdk/hotspot/src/share/vm/code/compiledIC.hpp +index fe1cfb3..c9f6a2e 100644 +--- openjdk.orig/hotspot/src/share/vm/code/compiledIC.hpp ++++ openjdk/hotspot/src/share/vm/code/compiledIC.hpp +@@ -44,6 +44,9 @@ + #ifdef TARGET_ARCH_ppc + # include "nativeInst_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "nativeInst_aarch64.hpp" ++#endif + + //----------------------------------------------------------------------------- + // The CompiledIC represents a compiled inline cache. +diff --git openjdk.orig/hotspot/src/share/vm/code/icBuffer.cpp openjdk/hotspot/src/share/vm/code/icBuffer.cpp +index ed70457..d022482 100644 +--- openjdk.orig/hotspot/src/share/vm/code/icBuffer.cpp ++++ openjdk/hotspot/src/share/vm/code/icBuffer.cpp +@@ -52,6 +52,9 @@ + #ifdef TARGET_ARCH_ppc + # include "assembler_ppc.inline.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "assembler_aarch64.inline.hpp" ++#endif + + + DEF_STUB_INTERFACE(ICStub); +diff --git openjdk.orig/hotspot/src/share/vm/code/relocInfo.cpp openjdk/hotspot/src/share/vm/code/relocInfo.cpp +index 4fd82df..78310e6 100644 +--- openjdk.orig/hotspot/src/share/vm/code/relocInfo.cpp ++++ openjdk/hotspot/src/share/vm/code/relocInfo.cpp +@@ -49,6 +49,10 @@ + # include "assembler_ppc.inline.hpp" + # include "nativeInst_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "assembler_aarch64.inline.hpp" ++# include "nativeInst_aarch64.hpp" ++#endif + + + const RelocationHolder RelocationHolder::none; // its type is relocInfo::none +diff --git openjdk.orig/hotspot/src/share/vm/code/relocInfo.hpp openjdk/hotspot/src/share/vm/code/relocInfo.hpp +index 1d14b44..3823889 100644 +--- openjdk.orig/hotspot/src/share/vm/code/relocInfo.hpp ++++ openjdk/hotspot/src/share/vm/code/relocInfo.hpp +@@ -435,6 +435,9 @@ class relocInfo VALUE_OBJ_CLASS_SPEC { + #endif + #ifdef TARGET_ARCH_ppc + # include "relocInfo_ppc.hpp" ++#endif ++#ifdef TARGET_ARCH_aarch64 ++# include "relocInfo_aarch64.hpp" + #endif + + +diff --git openjdk.orig/hotspot/src/share/vm/code/vmreg.hpp openjdk/hotspot/src/share/vm/code/vmreg.hpp +index d57e6f8..1c18e47 100644 +--- openjdk.orig/hotspot/src/share/vm/code/vmreg.hpp ++++ openjdk/hotspot/src/share/vm/code/vmreg.hpp +@@ -42,6 +42,9 @@ + #ifdef TARGET_ARCH_ppc + # include "register_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "register_aarch64.hpp" ++#endif + #ifdef COMPILER2 + #include "opto/adlcVMDeps.hpp" + #include "utilities/ostream.hpp" +@@ -63,6 +66,9 @@ + #ifdef TARGET_ARCH_MODEL_ppc + # include "adfiles/adGlobals_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_MODEL_aarch64 ++# include "adfiles/adGlobals_aarch64.hpp" ++#endif + #endif + + //------------------------------VMReg------------------------------------------ +@@ -182,6 +188,9 @@ public: + #ifdef TARGET_ARCH_ppc + # include "vmreg_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "vmreg_aarch64.hpp" ++#endif + + + }; +diff --git openjdk.orig/hotspot/src/share/vm/compiler/disassembler.cpp openjdk/hotspot/src/share/vm/compiler/disassembler.cpp +index 9603e86..3a67259 100644 +--- openjdk.orig/hotspot/src/share/vm/compiler/disassembler.cpp ++++ openjdk/hotspot/src/share/vm/compiler/disassembler.cpp +@@ -47,6 +47,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 +diff --git openjdk.orig/hotspot/src/share/vm/compiler/disassembler.hpp openjdk/hotspot/src/share/vm/compiler/disassembler.hpp +index a70b8cc..4c90c9a 100644 +--- openjdk.orig/hotspot/src/share/vm/compiler/disassembler.hpp ++++ openjdk/hotspot/src/share/vm/compiler/disassembler.hpp +@@ -78,6 +78,9 @@ class Disassembler { + #endif + #ifdef TARGET_ARCH_ppc + # include "disassembler_ppc.hpp" ++#endif ++#ifdef TARGET_ARCH_aarch64 ++# include "disassembler_aarch64.hpp" + #endif + + +diff --git openjdk.orig/hotspot/src/share/vm/interpreter/abstractInterpreter.hpp openjdk/hotspot/src/share/vm/interpreter/abstractInterpreter.hpp +index d23f37a..24ca30e 100644 +--- openjdk.orig/hotspot/src/share/vm/interpreter/abstractInterpreter.hpp ++++ openjdk/hotspot/src/share/vm/interpreter/abstractInterpreter.hpp +@@ -44,6 +44,9 @@ + #ifdef TARGET_ARCH_MODEL_ppc + # include "interp_masm_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_MODEL_aarch64 ++# include "interp_masm_aarch64.hpp" ++#endif + #ifdef TARGET_OS_FAMILY_linux + # include "thread_linux.inline.hpp" + #endif +diff --git openjdk.orig/hotspot/src/share/vm/interpreter/bytecode.hpp openjdk/hotspot/src/share/vm/interpreter/bytecode.hpp +index 107161a..205d0f7 100644 +--- openjdk.orig/hotspot/src/share/vm/interpreter/bytecode.hpp ++++ openjdk/hotspot/src/share/vm/interpreter/bytecode.hpp +@@ -43,6 +43,9 @@ + #ifdef TARGET_ARCH_ppc + # include "bytes_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "bytes_aarch64.hpp" ++#endif + + class ciBytecodeStream; + +diff --git openjdk.orig/hotspot/src/share/vm/interpreter/bytecodeInterpreter.hpp openjdk/hotspot/src/share/vm/interpreter/bytecodeInterpreter.hpp +index e637414..308ad3b 100644 +--- openjdk.orig/hotspot/src/share/vm/interpreter/bytecodeInterpreter.hpp ++++ openjdk/hotspot/src/share/vm/interpreter/bytecodeInterpreter.hpp +@@ -47,6 +47,9 @@ + #ifdef TARGET_ARCH_ppc + # include "bytes_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "bytes_aarch64.hpp" ++#endif + + #ifdef CC_INTERP + +@@ -618,6 +621,9 @@ void print(); + #ifdef TARGET_ARCH_ppc + # include "bytecodeInterpreter_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "bytecodeInterpreter_aarch64.hpp" ++#endif + + + }; // BytecodeInterpreter +diff --git openjdk.orig/hotspot/src/share/vm/interpreter/bytecodeInterpreter.inline.hpp openjdk/hotspot/src/share/vm/interpreter/bytecodeInterpreter.inline.hpp +index 3715a52..0d6a8aa 100644 +--- openjdk.orig/hotspot/src/share/vm/interpreter/bytecodeInterpreter.inline.hpp ++++ openjdk/hotspot/src/share/vm/interpreter/bytecodeInterpreter.inline.hpp +@@ -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 + +diff --git openjdk.orig/hotspot/src/share/vm/interpreter/bytecodeStream.hpp openjdk/hotspot/src/share/vm/interpreter/bytecodeStream.hpp +index 6106eac..f3dee0a 100644 +--- openjdk.orig/hotspot/src/share/vm/interpreter/bytecodeStream.hpp ++++ openjdk/hotspot/src/share/vm/interpreter/bytecodeStream.hpp +@@ -43,6 +43,9 @@ + #ifdef TARGET_ARCH_ppc + # include "bytes_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "bytes_aarch64.hpp" ++#endif + + // A BytecodeStream is used for fast iteration over the bytecodes + // of a methodOop. +diff --git openjdk.orig/hotspot/src/share/vm/interpreter/bytecodes.cpp openjdk/hotspot/src/share/vm/interpreter/bytecodes.cpp +index 04f3f64..48ef30e 100644 +--- openjdk.orig/hotspot/src/share/vm/interpreter/bytecodes.cpp ++++ openjdk/hotspot/src/share/vm/interpreter/bytecodes.cpp +@@ -41,6 +41,9 @@ + #ifdef TARGET_ARCH_ppc + # include "bytes_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "bytes_aarch64.hpp" ++#endif + + + #if defined(WIN32) && (defined(_MSC_VER) && (_MSC_VER < 1600)) +diff --git openjdk.orig/hotspot/src/share/vm/interpreter/cppInterpreter.hpp openjdk/hotspot/src/share/vm/interpreter/cppInterpreter.hpp +index e3a9f2e..8347473 100644 +--- openjdk.orig/hotspot/src/share/vm/interpreter/cppInterpreter.hpp ++++ openjdk/hotspot/src/share/vm/interpreter/cppInterpreter.hpp +@@ -101,6 +101,9 @@ class CppInterpreter: public AbstractInterpreter { + #ifdef TARGET_ARCH_ppc + # include "cppInterpreter_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "cppInterpreter_aarch64.hpp" ++#endif + + + }; +diff --git openjdk.orig/hotspot/src/share/vm/interpreter/cppInterpreterGenerator.hpp openjdk/hotspot/src/share/vm/interpreter/cppInterpreterGenerator.hpp +index c27805e..272f6e8 100644 +--- openjdk.orig/hotspot/src/share/vm/interpreter/cppInterpreterGenerator.hpp ++++ openjdk/hotspot/src/share/vm/interpreter/cppInterpreterGenerator.hpp +@@ -59,6 +59,9 @@ class CppInterpreterGenerator: public AbstractInterpreterGenerator { + #ifdef TARGET_ARCH_ppc + # include "cppInterpreterGenerator_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "cppInterpreterGenerator_aarch64.hpp" ++#endif + + }; + +diff --git openjdk.orig/hotspot/src/share/vm/interpreter/interpreter.hpp openjdk/hotspot/src/share/vm/interpreter/interpreter.hpp +index 0ab0be7..6a6822f 100644 +--- openjdk.orig/hotspot/src/share/vm/interpreter/interpreter.hpp ++++ openjdk/hotspot/src/share/vm/interpreter/interpreter.hpp +@@ -158,6 +158,9 @@ class Interpreter: public CC_INTERP_ONLY(CppInterpreter) NOT_CC_INTERP(TemplateI + #ifdef TARGET_ARCH_ppc + # include "interpreter_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "interpreter_aarch64.hpp" ++#endif + + }; + +diff --git openjdk.orig/hotspot/src/share/vm/interpreter/interpreterGenerator.hpp openjdk/hotspot/src/share/vm/interpreter/interpreterGenerator.hpp +index 7bc43ec..0434ca3 100644 +--- openjdk.orig/hotspot/src/share/vm/interpreter/interpreterGenerator.hpp ++++ openjdk/hotspot/src/share/vm/interpreter/interpreterGenerator.hpp +@@ -56,6 +56,9 @@ InterpreterGenerator(StubQueue* _code); + #ifdef TARGET_ARCH_ppc + # include "interpreterGenerator_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "interpreterGenerator_aarch64.hpp" ++#endif + + + }; +diff --git openjdk.orig/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp openjdk/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp +index e451c04..37700fb 100644 +--- openjdk.orig/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp ++++ openjdk/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp +@@ -71,6 +71,9 @@ + #ifdef TARGET_ARCH_ppc + # include "vm_version_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "vm_version_aarch64.hpp" ++#endif + #ifdef COMPILER2 + #include "opto/runtime.hpp" + #endif +diff --git openjdk.orig/hotspot/src/share/vm/interpreter/interpreterRuntime.hpp openjdk/hotspot/src/share/vm/interpreter/interpreterRuntime.hpp +index 93c1a9e..425400e 100644 +--- openjdk.orig/hotspot/src/share/vm/interpreter/interpreterRuntime.hpp ++++ openjdk/hotspot/src/share/vm/interpreter/interpreterRuntime.hpp +@@ -164,6 +164,9 @@ class InterpreterRuntime: AllStatic { + #endif + #ifdef TARGET_ARCH_ppc + # include "interpreterRT_ppc.hpp" ++#endif ++#ifdef TARGET_ARCH_aarch64 ++# include "interpreterRT_aarch64.hpp" + #endif + + +diff --git openjdk.orig/hotspot/src/share/vm/interpreter/templateInterpreter.hpp openjdk/hotspot/src/share/vm/interpreter/templateInterpreter.hpp +index 25d74f7..f78a16e 100644 +--- openjdk.orig/hotspot/src/share/vm/interpreter/templateInterpreter.hpp ++++ openjdk/hotspot/src/share/vm/interpreter/templateInterpreter.hpp +@@ -198,6 +198,9 @@ class TemplateInterpreter: public AbstractInterpreter { + #ifdef TARGET_ARCH_ppc + # include "templateInterpreter_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "templateInterpreter_aarch64.hpp" ++#endif + + + }; +diff --git openjdk.orig/hotspot/src/share/vm/interpreter/templateInterpreterGenerator.hpp openjdk/hotspot/src/share/vm/interpreter/templateInterpreterGenerator.hpp +index fb7bdc5..6007630 100644 +--- openjdk.orig/hotspot/src/share/vm/interpreter/templateInterpreterGenerator.hpp ++++ openjdk/hotspot/src/share/vm/interpreter/templateInterpreterGenerator.hpp +@@ -101,6 +101,9 @@ class TemplateInterpreterGenerator: public AbstractInterpreterGenerator { + #ifdef TARGET_ARCH_ppc + # include "templateInterpreterGenerator_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "templateInterpreterGenerator_aarch64.hpp" ++#endif + + + }; +diff --git openjdk.orig/hotspot/src/share/vm/interpreter/templateTable.hpp openjdk/hotspot/src/share/vm/interpreter/templateTable.hpp +index 5d2a7e8..c5e0f0a 100644 +--- openjdk.orig/hotspot/src/share/vm/interpreter/templateTable.hpp ++++ openjdk/hotspot/src/share/vm/interpreter/templateTable.hpp +@@ -43,6 +43,9 @@ + #ifdef TARGET_ARCH_MODEL_ppc + # include "interp_masm_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_MODEL_aarch64 ++# include "interp_masm_aarch64.hpp" ++#endif + + #ifndef CC_INTERP + // All the necessary definitions used for (bytecode) template generation. Instead of +@@ -373,6 +376,9 @@ class TemplateTable: AllStatic { + #ifdef TARGET_ARCH_MODEL_ppc + # include "templateTable_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_MODEL_aarch64 ++# include "templateTable_aarch64.hpp" ++#endif + + }; + #endif /* !CC_INTERP */ +diff --git openjdk.orig/hotspot/src/share/vm/oops/constantPoolOop.hpp openjdk/hotspot/src/share/vm/oops/constantPoolOop.hpp +index c2f985d..3d0d0fc 100644 +--- openjdk.orig/hotspot/src/share/vm/oops/constantPoolOop.hpp ++++ openjdk/hotspot/src/share/vm/oops/constantPoolOop.hpp +@@ -45,6 +45,9 @@ + #ifdef TARGET_ARCH_ppc + # include "bytes_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "bytes_aarch64.hpp" ++#endif + + // A constantPool is an array containing class constants as described in the + // class file. +diff --git openjdk.orig/hotspot/src/share/vm/oops/oop.inline.hpp openjdk/hotspot/src/share/vm/oops/oop.inline.hpp +index db14b2e..c8b326f 100644 +--- openjdk.orig/hotspot/src/share/vm/oops/oop.inline.hpp ++++ openjdk/hotspot/src/share/vm/oops/oop.inline.hpp +@@ -58,6 +58,9 @@ + #ifdef TARGET_ARCH_ppc + # include "bytes_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "bytes_aarch64.hpp" ++#endif + + // Implementation of all inlined member functions defined in oop.hpp + // We need a separate file to avoid circular references +diff --git openjdk.orig/hotspot/src/share/vm/opto/buildOopMap.cpp openjdk/hotspot/src/share/vm/opto/buildOopMap.cpp +index fc73160..2c5ec41 100644 +--- openjdk.orig/hotspot/src/share/vm/opto/buildOopMap.cpp ++++ openjdk/hotspot/src/share/vm/opto/buildOopMap.cpp +@@ -47,6 +47,9 @@ + #ifdef TARGET_ARCH_ppc + # include "vmreg_ppc.inline.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "vmreg_aarch64.inline.hpp" ++#endif + + // The functions in this file builds OopMaps after all scheduling is done. + // +diff --git openjdk.orig/hotspot/src/share/vm/opto/c2_globals.hpp openjdk/hotspot/src/share/vm/opto/c2_globals.hpp +index f73dcbd..462c875 100644 +--- openjdk.orig/hotspot/src/share/vm/opto/c2_globals.hpp ++++ openjdk/hotspot/src/share/vm/opto/c2_globals.hpp +@@ -35,6 +35,9 @@ + #ifdef TARGET_ARCH_arm + # include "c2_globals_arm.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "c2_globals_aarch64.hpp" ++#endif + #ifdef TARGET_OS_FAMILY_linux + # include "c2_globals_linux.hpp" + #endif +diff --git openjdk.orig/hotspot/src/share/vm/opto/c2compiler.cpp openjdk/hotspot/src/share/vm/opto/c2compiler.cpp +index 713e3f1..948e447 100644 +--- openjdk.orig/hotspot/src/share/vm/opto/c2compiler.cpp ++++ openjdk/hotspot/src/share/vm/opto/c2compiler.cpp +@@ -43,6 +43,9 @@ + #ifdef TARGET_ARCH_MODEL_ppc + # include "adfiles/ad_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_MODEL_aarch64 ++# include "adfiles/ad_aarch64.hpp" ++#endif + + + volatile int C2Compiler::_runtimes = uninitialized; +diff --git openjdk.orig/hotspot/src/share/vm/opto/compile.cpp openjdk/hotspot/src/share/vm/opto/compile.cpp +index a7ee07a..91dc290 100644 +--- openjdk.orig/hotspot/src/share/vm/opto/compile.cpp ++++ openjdk/hotspot/src/share/vm/opto/compile.cpp +@@ -80,6 +80,9 @@ + #ifdef TARGET_ARCH_MODEL_ppc + # include "adfiles/ad_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_MODEL_aarch64 ++# include "adfiles/ad_aarch64.hpp" ++#endif + + + // -------------------- Compile::mach_constant_base_node ----------------------- +diff --git openjdk.orig/hotspot/src/share/vm/opto/gcm.cpp openjdk/hotspot/src/share/vm/opto/gcm.cpp +index 8b8f311..4deb0b4 100644 +--- openjdk.orig/hotspot/src/share/vm/opto/gcm.cpp ++++ openjdk/hotspot/src/share/vm/opto/gcm.cpp +@@ -53,6 +53,9 @@ + #ifdef TARGET_ARCH_MODEL_ppc + # include "adfiles/ad_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_MODEL_aarch64 ++# include "adfiles/ad_aarch64.hpp" ++#endif + + // Portions of code courtesy of Clifford Click + +diff --git openjdk.orig/hotspot/src/share/vm/opto/lcm.cpp openjdk/hotspot/src/share/vm/opto/lcm.cpp +index aee6123..4b9aaed 100644 +--- openjdk.orig/hotspot/src/share/vm/opto/lcm.cpp ++++ openjdk/hotspot/src/share/vm/opto/lcm.cpp +@@ -48,6 +48,9 @@ + #ifdef TARGET_ARCH_MODEL_ppc + # include "adfiles/ad_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_MODEL_aarch64 ++# include "adfiles/ad_aarch64.hpp" ++#endif + + // Optimization - Graph Style + +diff --git openjdk.orig/hotspot/src/share/vm/opto/locknode.hpp openjdk/hotspot/src/share/vm/opto/locknode.hpp +index 91b99bc..665594f 100644 +--- openjdk.orig/hotspot/src/share/vm/opto/locknode.hpp ++++ openjdk/hotspot/src/share/vm/opto/locknode.hpp +@@ -46,6 +46,9 @@ + #ifdef TARGET_ARCH_MODEL_ppc + # include "adfiles/ad_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_MODEL_aarch64 ++# include "adfiles/ad_aarch64.hpp" ++#endif + + //------------------------------BoxLockNode------------------------------------ + class BoxLockNode : public Node { +diff --git openjdk.orig/hotspot/src/share/vm/opto/matcher.cpp openjdk/hotspot/src/share/vm/opto/matcher.cpp +index ca2d4e3..d0f55c5 100644 +--- openjdk.orig/hotspot/src/share/vm/opto/matcher.cpp ++++ openjdk/hotspot/src/share/vm/opto/matcher.cpp +@@ -55,6 +55,9 @@ + #ifdef TARGET_ARCH_MODEL_ppc + # include "adfiles/ad_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_MODEL_aarch64 ++# include "adfiles/ad_aarch64.hpp" ++#endif + + OptoReg::Name OptoReg::c_frame_pointer; + +diff --git openjdk.orig/hotspot/src/share/vm/opto/output.hpp openjdk/hotspot/src/share/vm/opto/output.hpp +index 50b6e76..6a920b2 100644 +--- openjdk.orig/hotspot/src/share/vm/opto/output.hpp ++++ openjdk/hotspot/src/share/vm/opto/output.hpp +@@ -45,6 +45,9 @@ + #ifdef TARGET_ARCH_MODEL_ppc + # include "adfiles/ad_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_MODEL_aarch64 ++# include "adfiles/ad_aarch64.hpp" ++#endif + + class Arena; + class Bundle; +diff --git openjdk.orig/hotspot/src/share/vm/opto/regmask.cpp openjdk/hotspot/src/share/vm/opto/regmask.cpp +index ce220f0..20c6028 100644 +--- openjdk.orig/hotspot/src/share/vm/opto/regmask.cpp ++++ openjdk/hotspot/src/share/vm/opto/regmask.cpp +@@ -43,6 +43,9 @@ + #ifdef TARGET_ARCH_MODEL_ppc + # include "adfiles/ad_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_MODEL_aarch64 ++# include "adfiles/ad_aarch64.hpp" ++#endif + + #define RM_SIZE _RM_SIZE /* a constant private to the class RegMask */ + +diff --git openjdk.orig/hotspot/src/share/vm/opto/regmask.hpp openjdk/hotspot/src/share/vm/opto/regmask.hpp +index e50ff84..26c6854 100644 +--- openjdk.orig/hotspot/src/share/vm/opto/regmask.hpp ++++ openjdk/hotspot/src/share/vm/opto/regmask.hpp +@@ -46,6 +46,9 @@ + #ifdef TARGET_ARCH_MODEL_ppc + # include "adfiles/adGlobals_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_MODEL_aarch64 ++# include "adfiles/adGlobals_aarch64.hpp" ++#endif + + // Some fun naming (textual) substitutions: + // +diff --git openjdk.orig/hotspot/src/share/vm/opto/runtime.cpp openjdk/hotspot/src/share/vm/opto/runtime.cpp +index d315f10..11a58b1 100644 +--- openjdk.orig/hotspot/src/share/vm/opto/runtime.cpp ++++ openjdk/hotspot/src/share/vm/opto/runtime.cpp +@@ -86,6 +86,9 @@ + #ifdef TARGET_ARCH_MODEL_ppc + # include "adfiles/ad_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_MODEL_aarch64 ++# include "adfiles/ad_aarch64.hpp" ++#endif + + + // For debugging purposes: +diff --git openjdk.orig/hotspot/src/share/vm/prims/jniCheck.cpp openjdk/hotspot/src/share/vm/prims/jniCheck.cpp +index 3bf4ecd..2ad9014 100644 +--- openjdk.orig/hotspot/src/share/vm/prims/jniCheck.cpp ++++ openjdk/hotspot/src/share/vm/prims/jniCheck.cpp +@@ -51,6 +51,9 @@ + #ifdef TARGET_ARCH_ppc + # include "jniTypes_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "jniTypes_aarch64.hpp" ++#endif + + + // Heap objects are allowed to be directly referenced only in VM code, +diff --git openjdk.orig/hotspot/src/share/vm/prims/jni_md.h openjdk/hotspot/src/share/vm/prims/jni_md.h +index 7fa5829..3bd4e31 100644 +--- openjdk.orig/hotspot/src/share/vm/prims/jni_md.h ++++ openjdk/hotspot/src/share/vm/prims/jni_md.h +@@ -39,6 +39,9 @@ + #ifdef TARGET_ARCH_ppc + # include "jni_ppc.h" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "jni_aarch64.h" ++#endif + + + /* +diff --git openjdk.orig/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.cpp openjdk/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.cpp +index 97dd154..fd1fa43 100644 +--- openjdk.orig/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.cpp ++++ openjdk/hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.cpp +@@ -43,6 +43,9 @@ + #ifdef TARGET_ARCH_ppc + # include "bytes_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "bytes_aarch64.hpp" ++#endif + // FIXME: add Deprecated, LVTT attributes + // FIXME: fix Synthetic attribute + // FIXME: per Serguei, add error return handling for constantPoolOopDesc::copy_cpool_bytes() +diff --git openjdk.orig/hotspot/src/share/vm/prims/methodHandles.hpp openjdk/hotspot/src/share/vm/prims/methodHandles.hpp +index 514ba6a..ea747d0 100644 +--- openjdk.orig/hotspot/src/share/vm/prims/methodHandles.hpp ++++ openjdk/hotspot/src/share/vm/prims/methodHandles.hpp +@@ -738,6 +738,9 @@ public: + #ifdef TARGET_ARCH_ppc + # include "methodHandles_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "methodHandles_aarch64.hpp" ++#endif + }; + + +diff --git openjdk.orig/hotspot/src/share/vm/runtime/atomic.cpp openjdk/hotspot/src/share/vm/runtime/atomic.cpp +index 80780d7..5a34f15 100644 +--- openjdk.orig/hotspot/src/share/vm/runtime/atomic.cpp ++++ openjdk/hotspot/src/share/vm/runtime/atomic.cpp +@@ -60,6 +60,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 + #ifdef TARGET_OS_ARCH_bsd_x86 + # include "atomic_bsd_x86.inline.hpp" + #endif +diff --git openjdk.orig/hotspot/src/share/vm/runtime/deoptimization.cpp openjdk/hotspot/src/share/vm/runtime/deoptimization.cpp +index 4735588..4e7958a 100644 +--- openjdk.orig/hotspot/src/share/vm/runtime/deoptimization.cpp ++++ openjdk/hotspot/src/share/vm/runtime/deoptimization.cpp +@@ -65,6 +65,9 @@ + #ifdef TARGET_ARCH_ppc + # include "vmreg_ppc.inline.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "vmreg_aarch64.inline.hpp" ++#endif + #ifdef COMPILER2 + #ifdef TARGET_ARCH_MODEL_x86_32 + # include "adfiles/ad_x86_32.hpp" +@@ -84,6 +87,9 @@ + #ifdef TARGET_ARCH_MODEL_ppc + # include "adfiles/ad_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_MODEL_aarch64 ++# include "adfiles/ad_aarch64.hpp" ++#endif + #endif + + bool DeoptimizationMarker::_is_active = false; +diff --git openjdk.orig/hotspot/src/share/vm/runtime/dtraceJSDT.hpp openjdk/hotspot/src/share/vm/runtime/dtraceJSDT.hpp +index bff4310..1129cd6 100644 +--- openjdk.orig/hotspot/src/share/vm/runtime/dtraceJSDT.hpp ++++ openjdk/hotspot/src/share/vm/runtime/dtraceJSDT.hpp +@@ -41,6 +41,9 @@ + #ifdef TARGET_ARCH_ppc + # include "nativeInst_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "nativeInst_aarch64.hpp" ++#endif + + class RegisteredProbes; + typedef jlong OpaqueProbes; +diff --git openjdk.orig/hotspot/src/share/vm/runtime/frame.cpp openjdk/hotspot/src/share/vm/runtime/frame.cpp +index 7ae9aa8..6654714 100644 +--- openjdk.orig/hotspot/src/share/vm/runtime/frame.cpp ++++ openjdk/hotspot/src/share/vm/runtime/frame.cpp +@@ -59,6 +59,9 @@ + #ifdef TARGET_ARCH_ppc + # include "nativeInst_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "nativeInst_aarch64.hpp" ++#endif + + RegisterMap::RegisterMap(JavaThread *thread, bool update_map) { + _thread = thread; +diff --git openjdk.orig/hotspot/src/share/vm/runtime/frame.hpp openjdk/hotspot/src/share/vm/runtime/frame.hpp +index c55380e..c13caae 100644 +--- openjdk.orig/hotspot/src/share/vm/runtime/frame.hpp ++++ openjdk/hotspot/src/share/vm/runtime/frame.hpp +@@ -50,6 +50,9 @@ + #ifdef TARGET_ARCH_MODEL_ppc + # include "adfiles/adGlobals_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_MODEL_aarch64 ++# include "adfiles/adGlobals_aarch64.hpp" ++#endif + #endif + #ifdef ZERO + #ifdef TARGET_ARCH_zero +@@ -491,6 +494,9 @@ class frame VALUE_OBJ_CLASS_SPEC { + #ifdef TARGET_ARCH_ppc + # include "frame_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "frame_aarch64.hpp" ++#endif + + }; + +diff --git openjdk.orig/hotspot/src/share/vm/runtime/frame.inline.hpp openjdk/hotspot/src/share/vm/runtime/frame.inline.hpp +index b80b042..f6e1b0e 100644 +--- openjdk.orig/hotspot/src/share/vm/runtime/frame.inline.hpp ++++ openjdk/hotspot/src/share/vm/runtime/frame.inline.hpp +@@ -46,6 +46,9 @@ + #ifdef TARGET_ARCH_ppc + # include "jniTypes_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "jniTypes_aarch64.hpp" ++#endif + #ifdef ZERO + #ifdef TARGET_ARCH_zero + # include "entryFrame_zero.hpp" +@@ -100,6 +103,9 @@ inline bool frame::is_first_frame() const { + #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 +diff --git openjdk.orig/hotspot/src/share/vm/runtime/globals.hpp openjdk/hotspot/src/share/vm/runtime/globals.hpp +index 10d74cd..4cc5dfb 100644 +--- openjdk.orig/hotspot/src/share/vm/runtime/globals.hpp ++++ openjdk/hotspot/src/share/vm/runtime/globals.hpp +@@ -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 +@@ -88,6 +91,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_bsd_x86 + # include "globals_bsd_x86.hpp" + #endif +@@ -107,6 +113,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 +@@ -130,6 +139,9 @@ + #ifdef TARGET_ARCH_arm + # include "c2_globals_arm.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "c2_globals_aarch64.hpp" ++#endif + #ifdef TARGET_OS_FAMILY_linux + # include "c2_globals_linux.hpp" + #endif +diff --git openjdk.orig/hotspot/src/share/vm/runtime/icache.hpp openjdk/hotspot/src/share/vm/runtime/icache.hpp +index d460a0f..9a3b9c8 100644 +--- openjdk.orig/hotspot/src/share/vm/runtime/icache.hpp ++++ openjdk/hotspot/src/share/vm/runtime/icache.hpp +@@ -83,6 +83,9 @@ class AbstractICache : AllStatic { + #ifdef TARGET_ARCH_ppc + # include "icache_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "icache_aarch64.hpp" ++#endif + + + +diff --git openjdk.orig/hotspot/src/share/vm/runtime/java.cpp openjdk/hotspot/src/share/vm/runtime/java.cpp +index fc3b67a..46794b0 100644 +--- openjdk.orig/hotspot/src/share/vm/runtime/java.cpp ++++ openjdk/hotspot/src/share/vm/runtime/java.cpp +@@ -78,6 +78,9 @@ + #ifdef TARGET_ARCH_ppc + # include "vm_version_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "vm_version_aarch64.hpp" ++#endif + #ifdef TARGET_OS_FAMILY_linux + # include "thread_linux.inline.hpp" + #endif +diff --git openjdk.orig/hotspot/src/share/vm/runtime/javaCalls.hpp openjdk/hotspot/src/share/vm/runtime/javaCalls.hpp +index d4f8595..bc2ca9b 100644 +--- openjdk.orig/hotspot/src/share/vm/runtime/javaCalls.hpp ++++ openjdk/hotspot/src/share/vm/runtime/javaCalls.hpp +@@ -45,6 +45,9 @@ + #ifdef TARGET_ARCH_ppc + # include "jniTypes_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "jniTypes_aarch64.hpp" ++#endif + #ifdef TARGET_OS_FAMILY_linux + # include "thread_linux.inline.hpp" + #endif +diff --git openjdk.orig/hotspot/src/share/vm/runtime/javaFrameAnchor.hpp openjdk/hotspot/src/share/vm/runtime/javaFrameAnchor.hpp +index 8374aa2..6be5f79 100644 +--- openjdk.orig/hotspot/src/share/vm/runtime/javaFrameAnchor.hpp ++++ openjdk/hotspot/src/share/vm/runtime/javaFrameAnchor.hpp +@@ -47,6 +47,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 +@@ -121,6 +124,9 @@ friend class JavaCallWrapper; + #ifdef TARGET_ARCH_ppc + # include "javaFrameAnchor_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "javaFrameAnchor_aarch64.hpp" ++#endif + + + public: +diff --git openjdk.orig/hotspot/src/share/vm/runtime/os.hpp openjdk/hotspot/src/share/vm/runtime/os.hpp +index 5867deb..0f1fbb4 100644 +--- openjdk.orig/hotspot/src/share/vm/runtime/os.hpp ++++ openjdk/hotspot/src/share/vm/runtime/os.hpp +@@ -719,6 +719,9 @@ class os: AllStatic { + #ifdef TARGET_OS_ARCH_linux_ppc + # include "os_linux_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 +diff --git openjdk.orig/hotspot/src/share/vm/runtime/registerMap.hpp openjdk/hotspot/src/share/vm/runtime/registerMap.hpp +index 5dd677a..7bd425f 100644 +--- openjdk.orig/hotspot/src/share/vm/runtime/registerMap.hpp ++++ openjdk/hotspot/src/share/vm/runtime/registerMap.hpp +@@ -42,6 +42,9 @@ + #ifdef TARGET_ARCH_ppc + # include "register_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "register_aarch64.hpp" ++#endif + + class JavaThread; + +@@ -150,6 +153,9 @@ class RegisterMap : public StackObj { + #ifdef TARGET_ARCH_ppc + # include "registerMap_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "registerMap_aarch64.hpp" ++#endif + + }; + +diff --git openjdk.orig/hotspot/src/share/vm/runtime/relocator.hpp openjdk/hotspot/src/share/vm/runtime/relocator.hpp +index c34866f..790bd80 100644 +--- openjdk.orig/hotspot/src/share/vm/runtime/relocator.hpp ++++ openjdk/hotspot/src/share/vm/runtime/relocator.hpp +@@ -42,6 +42,9 @@ + #ifdef TARGET_ARCH_ppc + # include "bytes_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "bytes_aarch64.hpp" ++#endif + + // This code has been converted from the 1.1E java virtual machine + // Thanks to the JavaTopics group for using the code +diff --git openjdk.orig/hotspot/src/share/vm/runtime/safepoint.cpp openjdk/hotspot/src/share/vm/runtime/safepoint.cpp +index c29d257..a842bb3 100644 +--- openjdk.orig/hotspot/src/share/vm/runtime/safepoint.cpp ++++ openjdk/hotspot/src/share/vm/runtime/safepoint.cpp +@@ -70,6 +70,10 @@ + # include "nativeInst_ppc.hpp" + # include "vmreg_ppc.inline.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "nativeInst_aarch64.hpp" ++# include "vmreg_aarch64.inline.hpp" ++#endif + #ifdef TARGET_OS_FAMILY_linux + # include "thread_linux.inline.hpp" + #endif +diff --git openjdk.orig/hotspot/src/share/vm/runtime/sharedRuntime.cpp openjdk/hotspot/src/share/vm/runtime/sharedRuntime.cpp +index c25dcfe..aa7caff 100644 +--- openjdk.orig/hotspot/src/share/vm/runtime/sharedRuntime.cpp ++++ openjdk/hotspot/src/share/vm/runtime/sharedRuntime.cpp +@@ -76,6 +76,10 @@ + # include "nativeInst_ppc.hpp" + # include "vmreg_ppc.inline.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "nativeInst_aarch64.hpp" ++# include "vmreg_aarch64.inline.hpp" ++#endif + #ifdef COMPILER1 + #include "c1/c1_Runtime1.hpp" + #endif +diff --git openjdk.orig/hotspot/src/share/vm/runtime/stackValueCollection.cpp openjdk/hotspot/src/share/vm/runtime/stackValueCollection.cpp +index 110f712..779f994 100644 +--- openjdk.orig/hotspot/src/share/vm/runtime/stackValueCollection.cpp ++++ openjdk/hotspot/src/share/vm/runtime/stackValueCollection.cpp +@@ -39,6 +39,9 @@ + #ifdef TARGET_ARCH_ppc + # include "jniTypes_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "jniTypes_aarch64.hpp" ++#endif + + jint StackValueCollection::int_at(int slot) const { + intptr_t val = at(slot)->get_int(); +diff --git openjdk.orig/hotspot/src/share/vm/runtime/statSampler.cpp openjdk/hotspot/src/share/vm/runtime/statSampler.cpp +index 0b24def..c82a214 100644 +--- openjdk.orig/hotspot/src/share/vm/runtime/statSampler.cpp ++++ openjdk/hotspot/src/share/vm/runtime/statSampler.cpp +@@ -48,6 +48,9 @@ + #ifdef TARGET_ARCH_ppc + # include "vm_version_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "vm_version_aarch64.hpp" ++#endif + + // -------------------------------------------------------- + // StatSamplerTask +diff --git openjdk.orig/hotspot/src/share/vm/runtime/stubCodeGenerator.cpp openjdk/hotspot/src/share/vm/runtime/stubCodeGenerator.cpp +index b6068a5..4ef7e38 100644 +--- openjdk.orig/hotspot/src/share/vm/runtime/stubCodeGenerator.cpp ++++ openjdk/hotspot/src/share/vm/runtime/stubCodeGenerator.cpp +@@ -42,6 +42,9 @@ + #ifdef TARGET_ARCH_ppc + # include "assembler_ppc.inline.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "assembler_aarch64.inline.hpp" ++#endif + + + // Implementation of StubCodeDesc +diff --git openjdk.orig/hotspot/src/share/vm/runtime/stubRoutines.hpp openjdk/hotspot/src/share/vm/runtime/stubRoutines.hpp +index 8481dce..f233b56 100644 +--- openjdk.orig/hotspot/src/share/vm/runtime/stubRoutines.hpp ++++ openjdk/hotspot/src/share/vm/runtime/stubRoutines.hpp +@@ -46,6 +46,9 @@ + #ifdef TARGET_ARCH_ppc + # include "nativeInst_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "nativeInst_aarch64.hpp" ++#endif + + // StubRoutines provides entry points to assembly routines used by + // compiled code and the run-time system. Platform-specific entry +@@ -116,6 +119,9 @@ class StubRoutines: AllStatic { + #endif + #ifdef TARGET_ARCH_MODEL_ppc + # include "stubRoutines_ppc.hpp" ++#endif ++#ifdef TARGET_ARCH_MODEL_aarch64 ++# include "stubRoutines_aarch64.hpp" + #endif + + +diff --git openjdk.orig/hotspot/src/share/vm/runtime/thread.hpp openjdk/hotspot/src/share/vm/runtime/thread.hpp +index 7846cc0..6964c22 100644 +--- openjdk.orig/hotspot/src/share/vm/runtime/thread.hpp ++++ openjdk/hotspot/src/share/vm/runtime/thread.hpp +@@ -1651,6 +1651,9 @@ public: + #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_bsd_x86 + # include "thread_bsd_x86.hpp" + #endif +diff --git openjdk.orig/hotspot/src/share/vm/runtime/threadLocalStorage.hpp openjdk/hotspot/src/share/vm/runtime/threadLocalStorage.hpp +index c2f7a9e..26ef559 100644 +--- openjdk.orig/hotspot/src/share/vm/runtime/threadLocalStorage.hpp ++++ openjdk/hotspot/src/share/vm/runtime/threadLocalStorage.hpp +@@ -68,6 +68,9 @@ class ThreadLocalStorage : AllStatic { + #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_bsd_x86 + # include "threadLS_bsd_x86.hpp" + #endif +diff --git openjdk.orig/hotspot/src/share/vm/runtime/vmStructs.cpp openjdk/hotspot/src/share/vm/runtime/vmStructs.cpp +index 8afd933..359f9fc 100644 +--- openjdk.orig/hotspot/src/share/vm/runtime/vmStructs.cpp ++++ openjdk/hotspot/src/share/vm/runtime/vmStructs.cpp +@@ -125,6 +125,9 @@ + #ifdef TARGET_ARCH_ppc + # include "vmStructs_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "vmStructs_aarch64.hpp" ++#endif + #ifdef TARGET_OS_FAMILY_linux + # include "thread_linux.inline.hpp" + #endif +@@ -161,6 +164,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_bsd_x86 + # include "vmStructs_bsd_x86.hpp" + #endif +@@ -221,6 +227,9 @@ + #ifdef TARGET_ARCH_MODEL_ppc + # include "adfiles/adGlobals_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_MODEL_aarch64 ++# include "adfiles/adGlobals_aarch64.hpp" ++#endif + #endif + + // Note: the cross-product of (c1, c2, product, nonproduct, ...), +diff --git openjdk.orig/hotspot/src/share/vm/runtime/vm_version.cpp openjdk/hotspot/src/share/vm/runtime/vm_version.cpp +index 2d51b67..bba9b01 100644 +--- openjdk.orig/hotspot/src/share/vm/runtime/vm_version.cpp ++++ openjdk/hotspot/src/share/vm/runtime/vm_version.cpp +@@ -41,6 +41,9 @@ + #ifdef TARGET_ARCH_ppc + # include "vm_version_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "vm_version_aarch64.hpp" ++#endif + + const char* Abstract_VM_Version::_s_vm_release = Abstract_VM_Version::vm_release(); + const char* Abstract_VM_Version::_s_internal_vm_info_string = Abstract_VM_Version::internal_vm_info_string(); +@@ -185,6 +188,7 @@ const char* Abstract_VM_Version::jre_release_version() { + AMD64_ONLY("amd64") \ + ARM_ONLY("arm") \ + PPC_ONLY("ppc") \ ++ AARCH64_ONLY("aarch64") \ + SPARC_ONLY("sparc") + #endif // ZERO + +diff --git openjdk.orig/hotspot/src/share/vm/utilities/copy.hpp openjdk/hotspot/src/share/vm/utilities/copy.hpp +index 3dcbfee..198590f 100644 +--- openjdk.orig/hotspot/src/share/vm/utilities/copy.hpp ++++ openjdk/hotspot/src/share/vm/utilities/copy.hpp +@@ -337,6 +337,9 @@ class Copy : AllStatic { + #ifdef TARGET_ARCH_ppc + # include "copy_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "copy_aarch64.hpp" ++#endif + + }; + +diff --git openjdk.orig/hotspot/src/share/vm/utilities/globalDefinitions.hpp openjdk/hotspot/src/share/vm/utilities/globalDefinitions.hpp +index b55b0ac..5d11e26 100644 +--- openjdk.orig/hotspot/src/share/vm/utilities/globalDefinitions.hpp ++++ openjdk/hotspot/src/share/vm/utilities/globalDefinitions.hpp +@@ -346,6 +346,9 @@ extern int LogMinObjAlignmentInBytes; + #ifdef TARGET_ARCH_ppc + # include "globalDefinitions_ppc.hpp" + #endif ++#ifdef TARGET_ARCH_aarch64 ++# include "globalDefinitions_aarch64.hpp" ++#endif + + + // The byte alignment to be used by Arena::Amalloc. See bugid 4169348. +diff --git openjdk.orig/hotspot/src/share/vm/utilities/macros.hpp openjdk/hotspot/src/share/vm/utilities/macros.hpp +index 003f2af..2aa7f87 100644 +--- openjdk.orig/hotspot/src/share/vm/utilities/macros.hpp ++++ openjdk/hotspot/src/share/vm/utilities/macros.hpp +@@ -261,6 +261,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) -- 2.26.2