Switch to Microsoft VS2015 MSVC toolchain for Windows x64 AOT compiler.
[mono.git] / mono / utils / mono-context.c
index cd6c4b2365ed268ae18949ecd92fd72974140d5d..3056c3afd3a63e31ed39b746dabc589cc0ccc6a1 100644 (file)
@@ -3,6 +3,7 @@
  *
  *
  * Copyright (c) 2011 Novell, Inc (http://www.novell.com)
+ * Licensed under the MIT license. See LICENSE file in the project root for full license information.
  */
 
 #include <mono/utils/mono-sigcontext.h>
@@ -47,7 +48,7 @@ mono_sigctx_to_monoctx (void *sigctx, MonoContext *mctx)
        mctx->eip = 0xDEADBEEF;
 #elif MONO_CROSS_COMPILE
        g_assert_not_reached ();
-#elif defined(MONO_SIGNAL_USE_SIGACTION)
+#elif defined(MONO_SIGNAL_USE_UCONTEXT_T)
        ucontext_t *ctx = (ucontext_t*)sigctx;
        
        mctx->eax = UCONTEXT_REG_EAX (ctx);
@@ -93,7 +94,7 @@ mono_monoctx_to_sigctx (MonoContext *mctx, void *sigctx)
        printf("WARNING: mono_arch_monoctx_to_sigctx() called!\n");
 #elif MONO_CROSS_COMPILE
        g_assert_not_reached ();
-#elif defined(MONO_SIGNAL_USE_SIGACTION)
+#elif defined(MONO_SIGNAL_USE_UCONTEXT_T)
        ucontext_t *ctx = (ucontext_t*)sigctx;
 
        UCONTEXT_REG_EAX (ctx) = mctx->eax;
@@ -149,7 +150,7 @@ mono_sigctx_to_monoctx (void *sigctx, MonoContext *mctx)
 
 #ifdef MONO_CROSS_COMPILE
        g_assert_not_reached ();
-#elif defined(UCONTEXT_REG_RAX)
+#elif defined(MONO_SIGNAL_USE_UCONTEXT_T)
        ucontext_t *ctx = (ucontext_t*)sigctx;
 
        mctx->gregs [AMD64_RAX] = UCONTEXT_REG_RAX (ctx);
@@ -169,6 +170,26 @@ mono_sigctx_to_monoctx (void *sigctx, MonoContext *mctx)
        mctx->gregs [AMD64_R14] = UCONTEXT_REG_R14 (ctx);
        mctx->gregs [AMD64_R15] = UCONTEXT_REG_R15 (ctx);
        mctx->gregs [AMD64_RIP] = UCONTEXT_REG_RIP (ctx);
+
+#ifdef UCONTEXT_REG_XMM
+       mctx->fregs [0] = UCONTEXT_REG_XMM0 (ctx);
+       mctx->fregs [1] = UCONTEXT_REG_XMM1 (ctx);
+       mctx->fregs [2] = UCONTEXT_REG_XMM2 (ctx);
+       mctx->fregs [3] = UCONTEXT_REG_XMM3 (ctx);
+       mctx->fregs [4] = UCONTEXT_REG_XMM4 (ctx);
+       mctx->fregs [5] = UCONTEXT_REG_XMM5 (ctx);
+       mctx->fregs [6] = UCONTEXT_REG_XMM6 (ctx);
+       mctx->fregs [7] = UCONTEXT_REG_XMM7 (ctx);
+       mctx->fregs [8] = UCONTEXT_REG_XMM8 (ctx);
+       mctx->fregs [9] = UCONTEXT_REG_XMM9 (ctx);
+       mctx->fregs [10] = UCONTEXT_REG_XMM10 (ctx);
+       mctx->fregs [11] = UCONTEXT_REG_XMM11 (ctx);
+       mctx->fregs [12] = UCONTEXT_REG_XMM12 (ctx);
+       mctx->fregs [13] = UCONTEXT_REG_XMM13 (ctx);
+       mctx->fregs [14] = UCONTEXT_REG_XMM14 (ctx);
+       mctx->fregs [15] = UCONTEXT_REG_XMM15 (ctx);
+#endif
+
 #elif defined(HOST_WIN32)
        CONTEXT *context = (CONTEXT*)sigctx;
 
@@ -203,7 +224,7 @@ mono_monoctx_to_sigctx (MonoContext *mctx, void *sigctx)
 
 #ifdef MONO_CROSS_COMPILE
        g_assert_not_reached ();
-#elif defined(UCONTEXT_REG_RAX)
+#elif defined(MONO_SIGNAL_USE_UCONTEXT_T)
        ucontext_t *ctx = (ucontext_t*)sigctx;
 
        UCONTEXT_REG_RAX (ctx) = mctx->gregs [AMD64_RAX];
@@ -223,6 +244,26 @@ mono_monoctx_to_sigctx (MonoContext *mctx, void *sigctx)
        UCONTEXT_REG_R14 (ctx) = mctx->gregs [AMD64_R14];
        UCONTEXT_REG_R15 (ctx) = mctx->gregs [AMD64_R15];
        UCONTEXT_REG_RIP (ctx) = mctx->gregs [AMD64_RIP];
+
+#ifdef UCONTEXT_REG_XMM
+       UCONTEXT_REG_XMM0 (ctx) = mctx->fregs [0];
+       UCONTEXT_REG_XMM1 (ctx) = mctx->fregs [1];
+       UCONTEXT_REG_XMM2 (ctx) = mctx->fregs [2];
+       UCONTEXT_REG_XMM3 (ctx) = mctx->fregs [3];
+       UCONTEXT_REG_XMM4 (ctx) = mctx->fregs [4];
+       UCONTEXT_REG_XMM5 (ctx) = mctx->fregs [5];
+       UCONTEXT_REG_XMM6 (ctx) = mctx->fregs [6];
+       UCONTEXT_REG_XMM7 (ctx) = mctx->fregs [7];
+       UCONTEXT_REG_XMM8 (ctx) = mctx->fregs [8];
+       UCONTEXT_REG_XMM9 (ctx) = mctx->fregs [9];
+       UCONTEXT_REG_XMM10 (ctx) = mctx->fregs [10];
+       UCONTEXT_REG_XMM11 (ctx) = mctx->fregs [11];
+       UCONTEXT_REG_XMM12 (ctx) = mctx->fregs [12];
+       UCONTEXT_REG_XMM13 (ctx) = mctx->fregs [13];
+       UCONTEXT_REG_XMM14 (ctx) = mctx->fregs [14];
+       UCONTEXT_REG_XMM15 (ctx) = mctx->fregs [15];
+#endif
+
 #elif defined(HOST_WIN32)
        CONTEXT *context = (CONTEXT*)sigctx;