Skip to content

Commit

Permalink
Merge pull request #4447 from knn-k/aarch64build2
Browse files Browse the repository at this point in the history
AArch64: Add support for AArch64 in JIT-related files
  • Loading branch information
DanHeidinga committed Feb 28, 2019
2 parents 6a39d04 + 9fce880 commit 0d213e5
Show file tree
Hide file tree
Showing 11 changed files with 226 additions and 17 deletions.
7 changes: 7 additions & 0 deletions runtime/codert_vm/cnathelp.cpp
Expand Up @@ -247,6 +247,13 @@ J9_EXTERN_BUILDER_SYMBOL(icallVMprJavaSendStatic1);
#define JIT_LO_U64_RETURN_REGISTER gpr.numbered[0]
#define JIT_HI_U64_RETURN_REGISTER gpr.numbered[1]

#elif defined(J9VM_ARCH_AARCH64)

#define JIT_STACK_OVERFLOW_SIZE_REGISTER gpr.numbered[18] // TODO: determine which register to use
#define JIT_UDATA_RETURN_VALUE_REGISTER gpr.numbered[0]
#define JIT_RETURN_ADDRESS_REGISTER gpr.numbered[30]
#define JIT_J2I_METHOD_REGISTER gpr.numbered[0]

#else
#error UNKNOWN PROCESSOR
#endif
Expand Down
4 changes: 3 additions & 1 deletion runtime/compiler/module.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (c) 2000, 2018 IBM Corp. and others
Copyright (c) 2000, 2019 IBM Corp. and others
This program and the accompanying materials are made available under
the terms of the Eclipse Public License 2.0 which accompanies this
Expand All @@ -23,6 +23,8 @@ SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0 WITH Classpath-excepti
<module>
<artifact type="target" name="j9jitlauncher">
<include-if condition="spec.flags.interp_nativeSupport"/>
<!-- TODO: Build of aarch64 JIT is disabled for the time being -->
<exclude-if condition="spec.linux_aarch64.*" />
<phase>jit j2se</phase>

<dependencies>
Expand Down
5 changes: 4 additions & 1 deletion runtime/compiler/runtime/MethodMetaData.c
@@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2000, 2018 IBM Corp. and others
* Copyright (c) 2000, 2019 IBM Corp. and others
*
* This program and the accompanying materials are made available under
* the terms of the Eclipse Public License 2.0 which accompanies this
Expand Down Expand Up @@ -1746,6 +1746,9 @@ void jitAddSpilledRegisters(J9StackWalkState * walkState, void * stackMap)
}
while (savedGPRs != 0);
}
#elif defined(TR_HOST_ARM64)
// TODO: Implement this
assert(0);
#else
#error Unknown TR_HOST type
#endif
Expand Down
9 changes: 8 additions & 1 deletion runtime/ddr/jitflagsddr.c
@@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 1991, 2018 IBM Corp. and others
* Copyright (c) 1991, 2019 IBM Corp. and others
*
* This program and the accompanying materials are made available under
* the terms of the Eclipse Public License 2.0 which accompanies this
Expand Down Expand Up @@ -36,6 +36,13 @@ J9DDRConstantTableBegin(TRBuildFlags)
#endif
J9DDRConstantTableEntryWithValue("host_ARM", host_ARM)

#if defined(TR_HOST_AARCH64)
#define host_AARCH64 1
#else
#define host_AARCH64 0
#endif
J9DDRConstantTableEntryWithValue("host_AARCH64", host_AARCH64)

#if defined(TR_HOST_IA32)
#define host_IA32 1
#else
Expand Down
9 changes: 8 additions & 1 deletion runtime/ddr/module.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (c) 2010, 2018 IBM Corp. and others
Copyright (c) 2010, 2019 IBM Corp. and others
This program and the accompanying materials are made available under
the terms of the Eclipse Public License 2.0 which accompanies this
Expand Down Expand Up @@ -277,6 +277,7 @@ SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0 WITH Classpath-excepti
<makefilestubs>
<makefilestub data="UMA_EXE_POSTFIX_FLAGS+=-static">
<include-if condition="spec.linux_arm.*"/>
<include-if condition="spec.linux_aarch64.*" />
</makefilestub>
<makefilestub data="UMA_TREAT_WARNINGS_AS_ERRORS=1"/>
<makefilestub data="include ddr_cpp_headers.mk"/>
Expand All @@ -294,9 +295,11 @@ SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0 WITH Classpath-excepti

<library name="j9thrstatic" type="external">
<include-if condition="spec.linux_arm.*"/>
<include-if condition="spec.linux_aarch64.*" />
</library>
<library name="j9thr">
<exclude-if condition="spec.linux_arm.*"/>
<exclude-if condition="spec.linux_aarch64.*" />
</library>
<library name="j9portautoblob"/>
<library name="j9ddr_cppewautoblob"/>
Expand Down Expand Up @@ -345,11 +348,15 @@ SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0 WITH Classpath-excepti
<commands>
<command line="cd $(UMA_PATH_TO_ROOT) &amp;&amp; ./j9ddrgen" type="all">
<exclude-if condition="spec.linux_arm.*"/>
<exclude-if condition="spec.linux_aarch64.*"/>
<exclude-if condition="spec.linux_ztpf.*"/>
</command>
<command line="cd $(UMA_PATH_TO_ROOT) &amp;&amp; qemu-arm -r '9' ./j9ddrgen" type="all">
<include-if condition="spec.linux_arm.*"/>
</command>
<command line="cd $(UMA_PATH_TO_ROOT) &amp;&amp; qemu-aarch64 -r '9' ./j9ddrgen" type="all">
<include-if condition="spec.linux_aarch64.*"/>
</command>
<command line="cd $(UMA_PATH_TO_ROOT); if [ -x ../build_j9ddrgen.sh ] &amp;&amp; [ ! -e ../j9ddrgen.completed ] ; then ../build_j9ddrgen.sh ; fi" type="all">
<include-if condition="spec.linux_ztpf.*"/>
</command>
Expand Down
8 changes: 7 additions & 1 deletion runtime/jilgen/jilconsts.c
Expand Up @@ -365,7 +365,13 @@ writeConstants(OMRPortLibrary *OMRPORTLIB, IDATA fd)
writeConstant(OMRPORTLIB, fd, "J9TR_cframe_preservedFPRs", offsetof(J9CInterpreterStackFrame, preservedFPRs)) |
writeConstant(OMRPORTLIB, fd, "J9TR_cframe_jitGPRs", offsetof(J9CInterpreterStackFrame, jitGPRs)) |
writeConstant(OMRPORTLIB, fd, "J9TR_cframe_jitFPRs", offsetof(J9CInterpreterStackFrame, jitFPRs)) |
#elif defined(J9VM_ARCH_X86) /* J9VM_ARCH_ARM */
#elif defined(J9VM_ARCH_AARCH64) /* J9VM_ARCH_ARM */
/* AARCH64 */
writeConstant(OMRPORTLIB, fd, "J9TR_cframe_preservedGPRs", offsetof(J9CInterpreterStackFrame, preservedGPRs)) |
writeConstant(OMRPORTLIB, fd, "J9TR_cframe_preservedFPRs", offsetof(J9CInterpreterStackFrame, preservedFPRs)) |
writeConstant(OMRPORTLIB, fd, "J9TR_cframe_jitGPRs", offsetof(J9CInterpreterStackFrame, jitGPRs)) |
writeConstant(OMRPORTLIB, fd, "J9TR_cframe_jitFPRs", offsetof(J9CInterpreterStackFrame, jitFPRs)) |
#elif defined(J9VM_ARCH_X86) /* J9VM_ARCH_AARCH64 */
/* x86 */
writeConstant(OMRPORTLIB, fd, "J9TR_cframe_vmStruct", offsetof(J9CInterpreterStackFrame, vmStruct)) |
writeConstant(OMRPORTLIB, fd, "J9TR_cframe_machineBP", offsetof(J9CInterpreterStackFrame, machineBP)) |
Expand Down
9 changes: 8 additions & 1 deletion runtime/jilgen/module.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (c) 2017, 2018 IBM Corp. and others
Copyright (c) 2017, 2019 IBM Corp. and others
This program and the accompanying materials are made available under
the terms of the Eclipse Public License 2.0 which accompanies this
Expand Down Expand Up @@ -34,6 +34,7 @@ SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0 WITH Classpath-excepti
<makefilestubs>
<makefilestub data="UMA_EXE_POSTFIX_FLAGS+=-static">
<include-if condition="spec.linux_arm.*" />
<include-if condition="spec.linux_aarch64.*" />
</makefilestub>
<makefilestub data="UMA_TREAT_WARNINGS_AS_ERRORS=1"/>
</makefilestubs>
Expand All @@ -50,9 +51,11 @@ SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0 WITH Classpath-excepti

<library name="j9thrstatic" type="external">
<include-if condition="spec.linux_arm.*" />
<include-if condition="spec.linux_aarch64.*" />
</library>
<library name="j9thr">
<exclude-if condition="spec.linux_arm.*" />
<exclude-if condition="spec.linux_aarch64.*" />
</library>
<library name="j9hashtable" type="external"/>
<library name="j9avl" type="external"/>
Expand Down Expand Up @@ -96,11 +99,15 @@ SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0 WITH Classpath-excepti
<commands>
<command line="cd $(UMA_PATH_TO_ROOT) &amp;&amp; ./constgen" type="all">
<exclude-if condition="spec.linux_arm.*"/>
<exclude-if condition="spec.linux_aarch64.*"/>
<exclude-if condition="spec.linux_ztpf.*"/>
</command>
<command line="cd $(UMA_PATH_TO_ROOT) &amp;&amp; qemu-arm -r '9' ./constgen" type="all">
<include-if condition="spec.linux_arm.*"/>
</command>
<command line="cd $(UMA_PATH_TO_ROOT) &amp;&amp; qemu-aarch64 -r '9' ./constgen" type="all">
<include-if condition="spec.linux_aarch64.*"/>
</command>
<command line="cd $(UMA_PATH_TO_ROOT); if [ -x ../build_constgen.sh ] &amp;&amp; [ ! -e ../constgen.completed ] ; then ../build_constgen.sh ; fi" type="all">
<include-if condition="spec.linux_ztpf.*"/>
</command>
Expand Down
23 changes: 22 additions & 1 deletion runtime/oti/JITInterface.hpp
@@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 1991, 2014 IBM Corp. and others
* Copyright (c) 1991, 2019 IBM Corp. and others
*
* This program and the accompanying materials are made available under
* the terms of the Eclipse Public License 2.0 which accompanies this
Expand All @@ -25,6 +25,11 @@

#include "j9port.h"

/* TODO: Implement jitVTableIndex() to remove this #include */
#if defined(J9VM_ARCH_AARCH64)
#include "assert.h"
#endif

extern "C" {

#if defined(J9VM_ARCH_X86)
Expand Down Expand Up @@ -114,6 +119,15 @@ typedef struct {
U_64 fpr[16];
} J9JITRegisters;

#elif defined(J9VM_ARCH_AARCH64)

typedef struct {
union {
UDATA numbered[32];
} gpr;
U_64 fpr[32];
} J9JITRegisters;

#else
#error UNKNOWN PROCESSOR
#endif
Expand Down Expand Up @@ -177,6 +191,9 @@ class VM_JITInterface
/* Virtual - unsigned offset is in the low 12 bits, assume the sign bit is set (i.e. the offset is always negative) */
jitVTableIndex = 0 - (instruction & 0x00000FFF);
}
#elif defined(J9VM_ARCH_AARCH64)
/* TODO: Implement this */
assert(0);
#elif defined(J9VM_ARCH_S390)
/* The vtable index is always in the register */
#else
Expand All @@ -194,6 +211,8 @@ class VM_JITInterface
return (void*)((J9JITRegisters*)vmThread->entryLocalStorage->jitGlobalStorageBase)->lr;
#elif defined(J9VM_ARCH_ARM)
return (void*)((J9JITRegisters*)vmThread->entryLocalStorage->jitGlobalStorageBase)->gpr.numbered[14];
#elif defined(J9VM_ARCH_AARCH64)
return (void*)((J9JITRegisters*)vmThread->entryLocalStorage->jitGlobalStorageBase)->gpr.numbered[30]; // LR
#elif defined(J9VM_ARCH_S390)
return (void*)((J9JITRegisters*)vmThread->entryLocalStorage->jitGlobalStorageBase)->gpr.numbered[14];
#else
Expand All @@ -210,6 +229,8 @@ class VM_JITInterface
((J9JITRegisters*)vmThread->entryLocalStorage->jitGlobalStorageBase)->lr = (UDATA)returnAddress;
#elif defined(J9VM_ARCH_ARM)
((J9JITRegisters*)vmThread->entryLocalStorage->jitGlobalStorageBase)->gpr.numbered[14] = (UDATA)returnAddress;
#elif defined(J9VM_ARCH_AARCH64)
((J9JITRegisters*)vmThread->entryLocalStorage->jitGlobalStorageBase)->gpr.numbered[30] = (UDATA)returnAddress; // LR
#elif defined(J9VM_ARCH_S390)
((J9JITRegisters*)vmThread->entryLocalStorage->jitGlobalStorageBase)->gpr.numbered[14] = (UDATA)returnAddress;
#else
Expand Down
64 changes: 57 additions & 7 deletions runtime/oti/j9nonbuilder.h
Expand Up @@ -2285,7 +2285,20 @@ typedef struct J9WalkStackFramesAndSlotsStorage {
UDATA* jit_r30;
UDATA* jit_r31;
#endif /* !J9VM_ENV_DATA64 */
#elif defined(J9VM_ARCH_ARM) /* J9VM_ARCH_POWER */
#elif defined(J9VM_ARCH_ARM) /* J9VM_ARCH_S390 */
UDATA* jit_r0;
UDATA* jit_r1;
UDATA* jit_r2;
UDATA* jit_r3;
UDATA* jit_r4;
UDATA* jit_r5;
UDATA* jit_r6;
UDATA* jit_r7;
UDATA* jit_r8;
UDATA* jit_r9;
UDATA* jit_r10;
UDATA* jit_r11;
#elif defined(J9VM_ARCH_AARCH64) /* J9VM_ARCH_ARM */
UDATA* jit_r0;
UDATA* jit_r1;
UDATA* jit_r2;
Expand All @@ -2298,9 +2311,29 @@ typedef struct J9WalkStackFramesAndSlotsStorage {
UDATA* jit_r9;
UDATA* jit_r10;
UDATA* jit_r11;
#else /* J9VM_ARCH_ARM */
UDATA* jit_r12;
UDATA* jit_r13;
UDATA* jit_r14;
UDATA* jit_r15;
UDATA* jit_r16;
UDATA* jit_r17;
UDATA* jit_r18;
UDATA* jit_r19;
UDATA* jit_r20;
UDATA* jit_r21;
UDATA* jit_r22;
UDATA* jit_r23;
UDATA* jit_r24;
UDATA* jit_r25;
UDATA* jit_r26;
UDATA* jit_r27;
UDATA* jit_r28;
UDATA* jit_r29;
UDATA* jit_r30;
UDATA* jit_r31;
#else /* J9VM_ARCH_AARCH64 */
#error Unknown processor architecture
#endif /* J9VM_ARCH_ARM */
#endif /* J9VM_ARCH_AARCH64 */
} J9WalkStackFramesAndSlotsStorage;

typedef struct J9I2JState {
Expand Down Expand Up @@ -2503,13 +2536,25 @@ typedef struct J9SFJ2IFrame {
UDATA jit_r8;
UDATA jit_r7;
UDATA jit_r6;
#elif defined(J9VM_ARCH_ARM)
#elif defined(J9VM_ARCH_ARM) /* J9VM_ARCH_S390 */
UDATA jit_r10;
UDATA jit_r9;
UDATA jit_r6;
#else /* J9VM_ARCH_ARM */
#elif defined(J9VM_ARCH_AARCH64) /* J9VM_ARCH_ARM */
UDATA jit_r18;
UDATA jit_r19;
UDATA jit_r20;
UDATA jit_r21;
UDATA jit_r22;
UDATA jit_r23;
UDATA jit_r24;
UDATA jit_r25;
UDATA jit_r26;
UDATA jit_r27;
UDATA jit_r28;
#else /* J9VM_ARCH_AARCH64 */
#error Unknown processor architecture
#endif /* J9VM_ARCH_ARM */
#endif /* J9VM_ARCH_AARCH64 */
UDATA specialFrameFlags;
void* exitPoint;
U_8* returnAddress;
Expand Down Expand Up @@ -5501,7 +5546,12 @@ typedef struct J9CInterpreterStackFrame {
UDATA jitGPRs[16]; /* r0-r15 */
U_8 jitFPRs[16 * 8]; /* fpr0-15 */
#endif /* J9VM_ENV_DATA64 */
#elif defined(J9VM_ARCH_X86) /* J9VM_ARCH_ARM */
#elif defined(J9VM_ARCH_AARCH64) /* J9VM_ARCH_ARM */
UDATA preservedGPRs[12]; /* x19-x30 */
U_8 preservedFPRs[8 * 8]; /* v8-15 */
UDATA jitGPRs[32]; /* x0-x31 */
U_8 jitFPRs[32 * 8]; /* v0-v31 */
#elif defined(J9VM_ARCH_X86) /* J9VM_ARCH_AARCH64 */
#if defined(J9VM_ENV_DATA64) && defined(WIN32)
UDATA arguments[4]; /* outgoing arguments shadow */
#endif /*J9VM_ENV_DATA64 && WIN32*/
Expand Down
29 changes: 28 additions & 1 deletion runtime/oti/stackwalk.h
@@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 1991, 2018 IBM Corp. and others
* Copyright (c) 1991, 2019 IBM Corp. and others
*
* This program and the accompanying materials are made available under
* the terms of the Eclipse Public License 2.0 which accompanies this
Expand Down Expand Up @@ -340,6 +340,33 @@ extern "C" {
#define J9SW_LOWEST_MEMORY_PRESERVED_REGISTER jit_r10
#define J9SW_JIT_CALLEE_PRESERVED_SIZE 3

#elif defined(J9VM_ARCH_AARCH64)

/* AArch64 */

/* @ddr_namespace: map_to_type=J9StackWalkFlags */

#define J9SW_JIT_FLOATS_PASSED_AS_DOUBLES
#undef J9SW_JIT_HELPERS_PASS_PARAMETERS_ON_STACK
#undef J9SW_NEEDS_JIT_2_INTERP_CALLEE_ARG_POP
#define J9SW_NEEDS_JIT_2_INTERP_THUNKS
#define J9SW_PARAMETERS_IN_REGISTERS
#define J9SW_REGISTER_MAP_WALK_REGISTERS_LOW_TO_HIGH

/* @ddr_namespace: map_to_type=J9StackWalkConstants */

#define J9SW_ARGUMENT_REGISTER_COUNT 0x8
#define J9SW_JIT_FLOAT_ARGUMENT_REGISTER_COUNT 0x8
#define JIT_RESOLVE_PARM(parmNumber) (walkState->walkedEntryLocalStorage->jitGlobalStorageBase[jitArgumentRegisterNumbers[(parmNumber) - 1]])
#define J9SW_JIT_STACK_SLOTS_USED_BY_CALL 0x0
#define J9SW_POTENTIAL_SAVED_REGISTERS 0x20
#define J9SW_REGISTER_MAP_MASK 0xFFFFFFFF
#define J9SW_JIT_FIRST_RESOLVE_PARM_REGISTER 0x0
#undef J9SW_JIT_LOOKUP_INTERFACE_RESOLVE_OFFSET_TO_SAVED_RECEIVER
#undef J9SW_JIT_VIRTUAL_METHOD_RESOLVE_OFFSET_TO_SAVED_RECEIVER
#define J9SW_LOWEST_MEMORY_PRESERVED_REGISTER jit_r18
#define J9SW_JIT_CALLEE_PRESERVED_SIZE 11

#else
#error Unsupported platform
#endif
Expand Down

0 comments on commit 0d213e5

Please sign in to comment.