]> granicus.if.org Git - gc/commitdiff
2008-04-15 Jonathan Chambers <joncham@gmail.com>
authorJonathan Chambers <joncham@gmail.com>
Wed, 16 Apr 2008 01:07:58 +0000 (01:07 +0000)
committerguest <ivmai@mail.ru>
Fri, 29 Jul 2011 11:31:21 +0000 (15:31 +0400)
* include/private/gcconfig.h: Backport GC7 code to support Win64.
* win32_threads.c: Backport GC7 code to support Win64.

svn path=/trunk/mono/; revision=100798

ChangeLog
include/private/gcconfig.h
win32_threads.c

index 3bfe49b6e73651342aac60a5904f3db1e1133ae5..ea3476127152b7dd57c6da80086846697185c02e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2008-04-15  Jonathan Chambers  <joncham@gmail.com>
+       * include/private/gcconfig.h: Backport GC7 code to support Win64.
+       * win32_threads.c: Backport GC7 code to support Win64.
+
 2008-02-07  Massimiliano Mantione  <massi@ximian.com>
        * include/gc.h: (GCEventType): Added start-stop the world events.
        * pthread_stop_world.c: (GC_stop_world and GC_start_world): hooked
index cf2a825cc3cce3169bf851c1450147e05578fe5b..11aee1311f773ab968fa7fbd9e5161c9826e66bc 100644 (file)
 # else
 #   if (defined(_MSDOS) || defined(_MSC_VER)) && (_M_IX86 >= 300) \
         || defined(_WIN32) && !defined(__CYGWIN32__) && !defined(__CYGWIN__)
-#     define I386
-#     define MSWIN32   /* or Win32s */
-#     define mach_type_known
-#   endif
-#   if defined(_MSC_VER) && defined(_M_IA64)
-#     define IA64
-#     define MSWIN32   /* Really win64, but we don't treat 64-bit      */
-                       /* variants as a differnt platform.             */
+#     if defined(__LP64__) || defined(_WIN64)\r
+#      define X86_64\r
+#     else\r
+#       define I386\r
+#     endif\r
+#     define MSWIN32   /* or Win64 */\r
+#     define mach_type_known\r
+#   endif\r
+#   if defined(_MSC_VER) && defined(_M_IA64)\r
+#     define IA64\r
+#     define MSWIN32   /* Really win64, but we don't treat 64-bit      */\r
+                       /* variants as a differnt platform.             */\r
 #   endif
 # endif
 # if defined(__DJGPP__)
index a9569c83f00e4badf914f06ef241abfab210fb42..deb3eae4e0a24e65a193a0f440b491e3158e5213 100644 (file)
@@ -385,7 +385,11 @@ void GC_push_all_stacks()
 #       define PUSH4(r1,r2,r3,r4) PUSH2(r1,r2), PUSH2(r3,r4)
 #       if defined(I386)
           PUSH4(Edi,Esi,Ebx,Edx), PUSH2(Ecx,Eax), PUSH1(Ebp);
-         sp = (ptr_t)context.Esp;
+         sp = (ptr_t)context.Esp;\r
+#      elif defined(X86_64)\r
+         PUSH4(Rax,Rcx,Rdx,Rbx); PUSH2(Rbp, Rsi); PUSH1(Rdi);\r
+         PUSH4(R8, R9, R10, R11); PUSH4(R12, R13, R14, R15);\r
+         sp = (ptr_t)context.Rsp;
 #       elif defined(ARM32)
          PUSH4(R0,R1,R2,R3),PUSH4(R4,R5,R6,R7),PUSH4(R8,R9,R10,R11),PUSH1(R12);
          sp = (ptr_t)context.Sp;