Merge pull request #704 from jgagnon/master
[mono.git] / mono / utils / mono-context.h
index 82ee789dd1d02bf048e4fe48cf2c087ef3216f33..dc53e857aae60158bae7474d76c8a662dcdd8465 100644 (file)
@@ -17,7 +17,7 @@
 #include <signal.h>
 #endif
 
-#ifdef HOST_WATCHOS
+#if defined (HOST_WATCHOS) || defined (HOST_APPLETVOS)
 #include <libunwind.h>
 #endif
 
@@ -183,11 +183,11 @@ extern void mono_context_get_current (void *);
 #define MONO_CONTEXT_GET_CURRENT(ctx)  \
        __asm__ __volatile__(   \
                "movq $0x0,  %%nacl:0x00(%%r15, %0, 1)\n"       \
-               "movq %%rbx, %%nacl:0x08(%%r15, %0, 1)\n"       \
-               "movq %%rcx, %%nacl:0x10(%%r15, %0, 1)\n"       \
-               "movq %%rdx, %%nacl:0x18(%%r15, %0, 1)\n"       \
-               "movq %%rbp, %%nacl:0x20(%%r15, %0, 1)\n"       \
-               "movq %%rsp, %%nacl:0x28(%%r15, %0, 1)\n"       \
+               "movq %%rcx, %%nacl:0x08(%%r15, %0, 1)\n"       \
+               "movq %%rdx, %%nacl:0x10(%%r15, %0, 1)\n"       \
+               "movq %%rbx, %%nacl:0x18(%%r15, %0, 1)\n"       \
+               "movq %%rsp, %%nacl:0x20(%%r15, %0, 1)\n"       \
+               "movq %%rbp, %%nacl:0x28(%%r15, %0, 1)\n"       \
                "movq %%rsi, %%nacl:0x30(%%r15, %0, 1)\n"       \
                "movq %%rdi, %%nacl:0x38(%%r15, %0, 1)\n"       \
                "movq %%r8,  %%nacl:0x40(%%r15, %0, 1)\n"       \
@@ -204,14 +204,15 @@ extern void mono_context_get_current (void *);
                : "a" ((int64_t)&(ctx)) \
                : "rdx", "memory")
 #else
+
 #define MONO_CONTEXT_GET_CURRENT(ctx)  \
        __asm__ __volatile__(   \
                "movq $0x0,  0x00(%0)\n"        \
-               "movq %%rbx, 0x08(%0)\n"        \
-               "movq %%rcx, 0x10(%0)\n"        \
-               "movq %%rdx, 0x18(%0)\n"        \
-               "movq %%rbp, 0x20(%0)\n"        \
-               "movq %%rsp, 0x28(%0)\n"        \
+               "movq %%rcx, 0x08(%0)\n"        \
+               "movq %%rdx, 0x10(%0)\n"        \
+               "movq %%rbx, 0x18(%0)\n"        \
+               "movq %%rsp, 0x20(%0)\n"        \
+               "movq %%rbp, 0x28(%0)\n"        \
                "movq %%rsi, 0x30(%0)\n"        \
                "movq %%rdi, 0x38(%0)\n"        \
                "movq %%r8,  0x40(%0)\n"        \
@@ -324,6 +325,15 @@ typedef struct {
 #define MONO_CONTEXT_GET_BP(ctx) (gpointer)((ctx)->regs [ARMREG_FP])
 #define MONO_CONTEXT_GET_SP(ctx) (gpointer)((ctx)->regs [ARMREG_SP])
 
+#if defined (HOST_APPLETVOS)
+
+#define MONO_CONTEXT_GET_CURRENT(ctx) do { \
+       fprintf (stderr, "MONO_CONTEXT_GET_CURRENT: Not implemented"); \
+       g_error ("MONO_CONTEXT_GET_CURRENT: Not implemented"); \
+} while (0);
+
+#else
+
 #define MONO_CONTEXT_GET_CURRENT(ctx)  do {    \
        __asm__ __volatile__(                   \
                "mov x16, %0\n" \
@@ -358,6 +368,8 @@ typedef struct {
        ); \
 } while (0)
 
+#endif
+
 #define MONO_ARCH_HAS_MONO_CONTEXT 1
 
 #elif defined(__mono_ppc__) /* defined(__arm__) */