Authors: Josh DuBois <duboisj@codeweavers.com>, Marcus Meissner <meissner@suse.de>
PowerPC locked exchange functions merged from old ppc patch.
NtCurrentTeb handling for PowerPC (using gpr 13).

diff --git a/scheduler/sysdeps.c b/scheduler/sysdeps.c
index b3320e7..06170db 100644
--- a/scheduler/sysdeps.c
+++ b/scheduler/sysdeps.c
@@ -85,6 +85,9 @@
 #if defined(__i386__)
     /* On the i386, the current thread is in the %fs register */
     wine_set_fs( teb->teb_sel );
+#elif defined(__powerpc__)
+    /* On PowerPC, the current TEB is in the gpr13 register */
+    __asm__ __volatile__("mr 13, %0" : : "r" (teb));
 #elif defined(HAVE__LWP_CREATE)
     /* On non-i386 Solaris, we use the LWP private pointer */
     _lwp_setprivate( teb );
@@ -249,13 +252,13 @@
   __asm int 3;
 }
 #endif /* defined(__GNUC__) || defined(_MSC_VER) */
-#else /* defined(__i386__) */
+#else /* !defined(__i386__) */
 void SYSDEPS_CallOnStack( void (*func)(LPVOID), LPVOID arg )
 {
     func( arg );
     while(1); /* avoid warning */
 }
-#endif /* defined(__i386__) */
+#endif /* !defined(__i386__) */
 
 
 /***********************************************************************
@@ -335,6 +338,8 @@
     extern void *_lwp_getprivate(void);
     return (struct _TEB *)_lwp_getprivate();
 }
+#elif defined(__powerpc__)
+__ASM_GLOBAL_FUNC( NtCurrentTeb, "\n\tmr 3,13\n\tblr" );
 #else
 # error NtCurrentTeb not defined for this architecture
 #endif  /* __i386__ */