X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2Fsm%2FGCThread.h;h=1d0a05ce447285f9c12ec3e5bd17ae8c8ffa82ef;hb=e50364a5a8e5d736445cd8e5b10a813ec0a5a2e0;hp=1b5c5d429182f897d3db4249c4f5a68468b109e5;hpb=2ad3ac2baca1c6fd0d69f3417fa62ae10cffcf49;p=ghc-hetmet.git diff --git a/rts/sm/GCThread.h b/rts/sm/GCThread.h index 1b5c5d4..1d0a05c 100644 --- a/rts/sm/GCThread.h +++ b/rts/sm/GCThread.h @@ -113,10 +113,9 @@ typedef struct step_workspace_ { typedef struct gc_thread_ { #ifdef THREADED_RTS OSThreadId id; // The OS thread that this struct belongs to - Mutex wake_mutex; - Condition wake_cond; // So we can go to sleep between GCs - rtsBool wakeup; - rtsBool exit; + SpinLock gc_spin; + SpinLock mut_spin; + volatile rtsBool wakeup; #endif nat thread_index; // a zero based index identifying the thread @@ -196,7 +195,14 @@ extern gc_thread **gc_threads; #define GLOBAL_REG_DECL(type,name,reg) register type name REG(reg); -#if defined(REG_Base) && !defined(i386_HOST_ARCH) +#if defined(sparc_HOST_ARCH) +// Don't use REG_base or R1 for gct on SPARC because they're getting clobbered +// by something else. Not sure what yet. -- BL 2009/01/03 + +extern __thread gc_thread* gct; +#define DECLARE_GCT __thread gc_thread* gct; + +#elif defined(REG_Base) && !defined(i386_HOST_ARCH) // on i386, REG_Base is %ebx which is also used for PIC, so we don't // want to steal it