From: Tautvydas Zilys Date: Mon, 10 Sep 2018 18:43:39 +0000 (-0700) Subject: Support UWP/arm64 target X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1471f940e9;p=gc Support UWP/arm64 target * include/private/gcconfig.h [!_WIN32_WCE && _WIN32 && !__CYGWIN32__ && !__INTERIX && !SYMBIAN && _M_X64] (X86_64): Define (do not check _WIN64). * include/private/gcconfig.h [!_WIN32_WCE && _WIN32 && !__CYGWIN32__ && !__INTERIX && !SYMBIAN && _M_ARM64] (AARCH64): Define macro. * win32_threads.c [AARCH64] (GC_push_stack_for): Push Xn (n=0..28) and Lr registers. --- diff --git a/include/private/gcconfig.h b/include/private/gcconfig.h index 9314aec4..17163fe5 100644 --- a/include/private/gcconfig.h +++ b/include/private/gcconfig.h @@ -539,10 +539,12 @@ EXTERN_C_BEGIN # if ((defined(_MSDOS) || defined(_MSC_VER)) && (_M_IX86 >= 300)) \ || (defined(_WIN32) && !defined(__CYGWIN32__) && !defined(__CYGWIN__) \ && !defined(__INTERIX) && !defined(SYMBIAN)) -# if defined(__LP64__) || defined(_WIN64) +# if defined(__LP64__) || defined(_M_X64) # define X86_64 # elif defined(_M_ARM) # define ARM32 +# elif defined(_M_ARM64) +# define AARCH64 # else /* _M_IX86 */ # define I386 # endif diff --git a/win32_threads.c b/win32_threads.c index bf3f655f..db03d09f 100644 --- a/win32_threads.c +++ b/win32_threads.c @@ -1418,6 +1418,12 @@ STATIC word GC_push_stack_for(GC_thread thread, DWORD me) PUSH4(R0,R1,R2,R3),PUSH4(R4,R5,R6,R7),PUSH4(R8,R9,R10,R11); PUSH1(R12); sp = (ptr_t)context.Sp; +# elif defined(AARCH64) + PUSH4(X0,X1,X2,X3),PUSH4(X4,X5,X6,X7),PUSH4(X8,X9,X10,X11); + PUSH4(X12,X13,X14,X15),PUSH4(X16,X17,X18,X19),PUSH4(X20,X21,X22,X23); + PUSH4(X24,X25,X26,X27),PUSH1(X28); + PUSH1(Lr); + sp = (ptr_t)context.Sp; # elif defined(SHx) PUSH4(R0,R1,R2,R3), PUSH4(R4,R5,R6,R7), PUSH4(R8,R9,R10,R11); PUSH2(R12,R13), PUSH1(R14);