#include "../includes/ghcconfig.h"
-#if defined(powerpc_TARGET_ARCH) || defined(powerpc64_TARGET_ARCH)
-#if !(defined(powerpc_TARGET_ARCH) && defined(linux_TARGET_OS))
+#if defined(powerpc_HOST_ARCH) || defined(powerpc64_HOST_ARCH)
+#if !(defined(powerpc_HOST_ARCH) && defined(linux_HOST_OS))
/* The following code applies, with some differences,
to all powerpc platforms except for powerpc32-linux,
whose calling convention is annoyingly complex.
/* The code is "almost" the same for
32-bit and for 64-bit
*/
-#if defined(powerpc64_TARGET_ARCH)
+#if defined(powerpc64_HOST_ARCH)
#define WS 8
#define LOAD ld
#define STORE std
/* The following defines mirror struct AdjustorStub
from Adjustor.c. Make sure to keep these in sync.
*/
-#if defined(powerpc_TARGET_ARCH) && defined(darwin_TARGET_OS)
+#if defined(powerpc_HOST_ARCH) && defined(darwin_HOST_OS)
#define HEADER_WORDS 6
-#elif defined(powerpc64_TARGET_ARCH) && defined(darwin_TARGET_OS)
+#elif defined(powerpc64_HOST_ARCH) && defined(darwin_HOST_OS)
#else
#define HEADER_WORDS 3
#endif
/* Darwin insists on register names, everyone else prefers
to use numbers. */
-#if !defined(darwin_TARGET_OS)
+#if !defined(darwin_HOST_OS)
#define r0 0
#define r1 1
#define r2 2
/* set up stack frame */
LOAD r12, FRAMESIZE_OFF(r2)
-#ifdef powerpc64_TARGET_ARCH
+#ifdef powerpc64_HOST_ARCH
stdux r1, r1, r12
#else
stwux r1, r1, r12
LOAD r3, HPTR_OFF(r2)
- LOAD r0, WPTR_OFF(r2)
+ LOAD r12, WPTR_OFF(r2)
+#if defined(darwin_HOST_OS)
+ mtctr r12
+#else
+ LOAD r0, 0(r12)
+ /* The function we're calling will never be a nested function,
+ so we don't load r11.
+ */
mtctr r0
+ LOAD r2, WS(r12)
+#endif
bctrl
LOAD r1, 0(r1)