X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2Fsm%2FGCThread.h;h=3ee2757f19e48999720c76aa788e293bd844790f;hb=70b761657f7707075302d7fa9f1ddba41247539e;hp=d6af2b157129367d3cc8800a981f26a523285740;hpb=3ebcd3deb769a03f4ded0fca2cf38201048c0214;p=ghc-hetmet.git diff --git a/rts/sm/GCThread.h b/rts/sm/GCThread.h index d6af2b1..3ee2757 100644 --- a/rts/sm/GCThread.h +++ b/rts/sm/GCThread.h @@ -131,6 +131,14 @@ typedef struct gc_thread_ { // block that is currently being scanned bdescr * scan_bd; + // Remembered sets on this CPU. Each GC thread has its own + // private per-generation remembered sets, so it can add an item + // to the remembered set without taking a lock. The mut_lists + // array on a gc_thread is the same as the one on the + // corresponding Capability; we stash it here too for easy access + // during GC; see recordMutableGen_GC(). + bdescr ** mut_lists; + // -------------------- // evacuate flags @@ -195,7 +203,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