Switch to Microsoft VS2015 MSVC toolchain for Windows x64 AOT compiler.
[mono.git] / mono / utils / mono-context.c
index b796c81ec7be686242fece021f587e6b3888f0e3..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>
@@ -45,7 +46,9 @@ mono_sigctx_to_monoctx (void *sigctx, MonoContext *mctx)
        mctx->esi = 0xDEADBEEF;
        mctx->edi = 0xDEADBEEF;
        mctx->eip = 0xDEADBEEF;
-#elif defined(MONO_SIGNAL_USE_SIGACTION)
+#elif MONO_CROSS_COMPILE
+       g_assert_not_reached ();
+#elif defined(MONO_SIGNAL_USE_UCONTEXT_T)
        ucontext_t *ctx = (ucontext_t*)sigctx;
        
        mctx->eax = UCONTEXT_REG_EAX (ctx);
@@ -89,7 +92,9 @@ mono_monoctx_to_sigctx (MonoContext *mctx, void *sigctx)
 {
 #if defined(__native_client__) || defined(HOST_WATCHOS)
        printf("WARNING: mono_arch_monoctx_to_sigctx() called!\n");
-#elif defined(MONO_SIGNAL_USE_SIGACTION)
+#elif MONO_CROSS_COMPILE
+       g_assert_not_reached ();
+#elif defined(MONO_SIGNAL_USE_UCONTEXT_T)
        ucontext_t *ctx = (ucontext_t*)sigctx;
 
        UCONTEXT_REG_EAX (ctx) = mctx->eax;
@@ -143,7 +148,9 @@ mono_sigctx_to_monoctx (void *sigctx, MonoContext *mctx)
        printf("WARNING: mono_arch_sigctx_to_monoctx() called!\n");
 #endif
 
-#if defined(MONO_SIGNAL_USE_SIGACTION)
+#ifdef MONO_CROSS_COMPILE
+       g_assert_not_reached ();
+#elif defined(MONO_SIGNAL_USE_UCONTEXT_T)
        ucontext_t *ctx = (ucontext_t*)sigctx;
 
        mctx->gregs [AMD64_RAX] = UCONTEXT_REG_RAX (ctx);
@@ -163,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;
 
@@ -184,25 +211,7 @@ mono_sigctx_to_monoctx (void *sigctx, MonoContext *mctx)
        mctx->gregs [AMD64_R14] = context->R14;
        mctx->gregs [AMD64_R15] = context->R15;
 #else
-       MonoContext *ctx = (MonoContext *)sigctx;
-
-       mctx->gregs [AMD64_RAX] = ctx->gregs [AMD64_RAX];
-       mctx->gregs [AMD64_RBX] = ctx->gregs [AMD64_RBX];
-       mctx->gregs [AMD64_RCX] = ctx->gregs [AMD64_RCX];
-       mctx->gregs [AMD64_RDX] = ctx->gregs [AMD64_RDX];
-       mctx->gregs [AMD64_RBP] = ctx->gregs [AMD64_RBP];
-       mctx->gregs [AMD64_RSP] = ctx->gregs [AMD64_RSP];
-       mctx->gregs [AMD64_RSI] = ctx->gregs [AMD64_RSI];
-       mctx->gregs [AMD64_RDI] = ctx->gregs [AMD64_RDI];
-       mctx->gregs [AMD64_R8] = ctx->gregs [AMD64_R8];
-       mctx->gregs [AMD64_R9] = ctx->gregs [AMD64_R9];
-       mctx->gregs [AMD64_R10] = ctx->gregs [AMD64_R10];
-       mctx->gregs [AMD64_R11] = ctx->gregs [AMD64_R11];
-       mctx->gregs [AMD64_R12] = ctx->gregs [AMD64_R12];
-       mctx->gregs [AMD64_R13] = ctx->gregs [AMD64_R13];
-       mctx->gregs [AMD64_R14] = ctx->gregs [AMD64_R14];
-       mctx->gregs [AMD64_R15] = ctx->gregs [AMD64_R15];
-       mctx->gregs [AMD64_RIP] = ctx->gregs [AMD64_RIP];
+       g_assert_not_reached ();
 #endif
 }
 
@@ -213,7 +222,9 @@ mono_monoctx_to_sigctx (MonoContext *mctx, void *sigctx)
   printf("WARNING: mono_arch_monoctx_to_sigctx() called!\n");
 #endif
 
-#if defined(MONO_SIGNAL_USE_SIGACTION)
+#ifdef MONO_CROSS_COMPILE
+       g_assert_not_reached ();
+#elif defined(MONO_SIGNAL_USE_UCONTEXT_T)
        ucontext_t *ctx = (ucontext_t*)sigctx;
 
        UCONTEXT_REG_RAX (ctx) = mctx->gregs [AMD64_RAX];
@@ -233,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;
 
@@ -254,25 +285,7 @@ mono_monoctx_to_sigctx (MonoContext *mctx, void *sigctx)
        context->R14 = mctx->gregs [AMD64_R14];
        context->R15 = mctx->gregs [AMD64_R15];
 #else
-       MonoContext *ctx = (MonoContext *)sigctx;
-
-       ctx->gregs [AMD64_RAX] = mctx->gregs [AMD64_RAX];
-       ctx->gregs [AMD64_RBX] = mctx->gregs [AMD64_RBX];
-       ctx->gregs [AMD64_RCX] = mctx->gregs [AMD64_RCX];
-       ctx->gregs [AMD64_RDX] = mctx->gregs [AMD64_RDX];
-       ctx->gregs [AMD64_RBP] = mctx->gregs [AMD64_RBP];
-       ctx->gregs [AMD64_RSP] = mctx->gregs [AMD64_RSP];
-       ctx->gregs [AMD64_RSI] = mctx->gregs [AMD64_RSI];
-       ctx->gregs [AMD64_RDI] = mctx->gregs [AMD64_RDI];
-       ctx->gregs [AMD64_R8] = mctx->gregs [AMD64_R8];
-       ctx->gregs [AMD64_R9] = mctx->gregs [AMD64_R9];
-       ctx->gregs [AMD64_R10] = mctx->gregs [AMD64_R10];
-       ctx->gregs [AMD64_R11] = mctx->gregs [AMD64_R11];
-       ctx->gregs [AMD64_R12] = mctx->gregs [AMD64_R12];
-       ctx->gregs [AMD64_R13] = mctx->gregs [AMD64_R13];
-       ctx->gregs [AMD64_R14] = mctx->gregs [AMD64_R14];
-       ctx->gregs [AMD64_R15] = mctx->gregs [AMD64_R15];
-       ctx->gregs [AMD64_RIP] = mctx->gregs [AMD64_RIP];
+       g_assert_not_reached ();
 #endif
 }