]> granicus.if.org Git - gc/commitdiff
Support UWP/arm64 target
authorTautvydas Zilys <tautvydas.zilys@gmail.com>
Mon, 10 Sep 2018 18:43:39 +0000 (11:43 -0700)
committerIvan Maidanski <ivmai@mail.ru>
Fri, 26 Oct 2018 08:40:09 +0000 (11:40 +0300)
* 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.

include/private/gcconfig.h
win32_threads.c

index 9314aec47a6ef7b26f31cc890db7f9fca3bab684..17163fe5d3f0036efaaea46803d3bfb4eab514a5 100644 (file)
@@ -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
index bf3f655f2860f685cf36731074db018fae0b7885..db03d09f474c8a9072dba81a91f60554754f70ad 100644 (file)
@@ -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);