From 58617584d4d2541ff9fcfe23a9a492af86b11efb Mon Sep 17 00:00:00 2001 From: Ignacio Date: Mon, 20 Jul 2015 23:47:01 +0200 Subject: [PATCH] Apply patch provided in issue #224. Add support for ARM64. --- extern/poshlib/posh.h | 7 ++++++- src/nvcore/Debug.cpp | 3 +++ src/nvcore/nvcore.h | 3 +++ src/nvthread/Atomic.h | 4 ++-- 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/extern/poshlib/posh.h b/extern/poshlib/posh.h index b68dcae..e401fb8 100644 --- a/extern/poshlib/posh.h +++ b/extern/poshlib/posh.h @@ -493,6 +493,11 @@ LLVM: # define POSH_CPU_STRING "ARM" #endif +#if defined __aarch64__ +# define POSH_CPU_AARCH64 1 +# define POSH_CPU_STRING "ARM64" +#endif + #if defined mips || defined __mips__ || defined __MIPS__ || defined _MIPS # define POSH_CPU_MIPS 1 # if defined _R5900 @@ -666,7 +671,7 @@ LLVM: ** the MIPS series, so we have to be careful about those. ** ---------------------------------------------------------------------------- */ -#if defined POSH_CPU_X86 || defined POSH_CPU_AXP || defined POSH_CPU_STRONGARM || defined POSH_OS_WIN32 || defined POSH_OS_WINCE || defined __MIPSEL__ +#if defined POSH_CPU_X86 || defined POSH_CPU_AXP || defined POSH_CPU_STRONGARM || defined POSH_CPU_AARCH64 || defined POSH_OS_WIN32 || defined POSH_OS_WINCE || defined __MIPSEL__ # define POSH_ENDIAN_STRING "little" # define POSH_LITTLE_ENDIAN 1 #else diff --git a/src/nvcore/Debug.cpp b/src/nvcore/Debug.cpp index 99e7d39..2e4f769 100644 --- a/src/nvcore/Debug.cpp +++ b/src/nvcore/Debug.cpp @@ -656,6 +656,9 @@ namespace # elif NV_CPU_PPC ucontext_t * ucp = (ucontext_t *)secret; return (void *) ucp->uc_mcontext.regs->nip; +# elif NV_CPU_AARCH64 + ucontext_t * ucp = (ucontext_t *)secret; + return (void *) ucp->uc_mcontext.pc; # else # error "Unknown CPU" # endif diff --git a/src/nvcore/nvcore.h b/src/nvcore/nvcore.h index d193e05..ae80afd 100644 --- a/src/nvcore/nvcore.h +++ b/src/nvcore/nvcore.h @@ -93,6 +93,7 @@ // NV_CPU_X86_64 // NV_CPU_PPC // NV_CPU_ARM +// NV_CPU_AARCH64 #define NV_CPU_STRING POSH_CPU_STRING @@ -105,6 +106,8 @@ # define NV_CPU_PPC 1 #elif defined POSH_CPU_STRONGARM # define NV_CPU_ARM 1 +#elif defined POSH_CPU_AARCH64 +# define NV_CPU_AARCH64 1 #else # error "Unsupported CPU" #endif diff --git a/src/nvthread/Atomic.h b/src/nvthread/Atomic.h index 6c2e0fa..ec3044a 100644 --- a/src/nvthread/Atomic.h +++ b/src/nvthread/Atomic.h @@ -58,7 +58,7 @@ namespace nv { uint32 ret = *ptr; // on x86, loads are Acquire nvCompilerReadBarrier(); return ret; -#elif POSH_CPU_STRONGARM +#elif POSH_CPU_STRONGARM || POSH_CPU_AARCH64 // need more specific cpu type for armv7? // also utilizes a full barrier // currently treating laod like x86 - this could be wrong @@ -82,7 +82,7 @@ namespace nv { nvCompilerWriteBarrier(); *ptr = value; // on x86, stores are Release //nvCompilerWriteBarrier(); // @@ IC: Where does this barrier go? In nvtt it was after, in Witness before. Not sure which one is right. -#elif POSH_CPU_STRONGARM +#elif POSH_CPU_STRONGARM || POSH_CPU_AARCH64 // this is the easiest but slowest way to do this nvCompilerReadWriteBarrier(); *ptr = value; //strex?