diff -b -u -r /home/tommd/dev/Test/House-0.8.93/ghc-6.8.2/compiler/cmm/PprC.hs ghc-6.8.2/compiler/cmm/PprC.hs
--- /home/tommd/dev/Test/House-0.8.93/ghc-6.8.2/compiler/cmm/PprC.hs	2007-12-10 10:11:31.000000000 -0800
+++ ghc-6.8.2/compiler/cmm/PprC.hs	2009-09-06 14:48:20.749294857 -0700
@@ -781,6 +781,7 @@
 -- change in the future...
 is_cish CCallConv   = True
 is_cish StdCallConv = True
+is_cish RegParm3CallConv = True
 
 -- ---------------------------------------------------------------------
 -- Find and print local and external declarations for a list of
diff -b -u -r /home/tommd/dev/Test/House-0.8.93/ghc-6.8.2/compiler/deSugar/DsForeign.lhs ghc-6.8.2/compiler/deSugar/DsForeign.lhs
--- /home/tommd/dev/Test/House-0.8.93/ghc-6.8.2/compiler/deSugar/DsForeign.lhs	2007-12-10 10:11:31.000000000 -0800
+++ ghc-6.8.2/compiler/deSugar/DsForeign.lhs	2009-09-06 11:26:11.316536838 -0700
@@ -473,6 +473,7 @@
   pprCconv = case cc of
 		CCallConv   -> empty
 		StdCallConv -> text (ccallConvAttribute cc)
+		RegParm3CallConv -> text (ccallConvAttribute cc)
 
   header_bits = ptext SLIT("extern") <+> fun_proto <> semi
 
diff -b -u -r /home/tommd/dev/Test/House-0.8.93/ghc-6.8.2/compiler/parser/Lexer.x ghc-6.8.2/compiler/parser/Lexer.x
--- /home/tommd/dev/Test/House-0.8.93/ghc-6.8.2/compiler/parser/Lexer.x	2007-12-10 10:11:32.000000000 -0800
+++ ghc-6.8.2/compiler/parser/Lexer.x	2009-09-06 10:50:34.893735674 -0700
@@ -443,6 +443,7 @@
   | ITunsafe
   | ITstdcallconv
   | ITccallconv
+  | ITregparm3callconv
   | ITdotnet
   | ITmdo
   | ITfamily
@@ -575,6 +576,7 @@
 isSpecial ITthreadsafe 	= True
 isSpecial ITunsafe    	= True
 isSpecial ITccallconv   = True
+isSpecial ITregparm3callconv = True
 isSpecial ITstdcallconv = True
 isSpecial ITmdo		= True
 isSpecial ITfamily	= True
@@ -629,6 +631,7 @@
 	( "unsafe",	ITunsafe,	 bit ffiBit),
 	( "stdcall",    ITstdcallconv,	 bit ffiBit),
 	( "ccall",      ITccallconv,	 bit ffiBit),
+	( "regparm3",	ITregparm3callconv,  bit ffiBit),
 	( "dotnet",     ITdotnet,	 bit ffiBit),
 
 	( "rec",	ITrec,		 bit arrowsBit),
diff -b -u -r /home/tommd/dev/Test/House-0.8.93/ghc-6.8.2/compiler/parser/Parser.y ghc-6.8.2/compiler/parser/Parser.y
--- /home/tommd/dev/Test/House-0.8.93/ghc-6.8.2/compiler/parser/Parser.y	2007-12-10 10:28:46.000000000 -0800
+++ ghc-6.8.2/compiler/parser/Parser.y	2009-08-18 21:24:05.889206463 -0700
@@ -242,6 +242,7 @@
  'family'	{ L _ ITfamily }
  'stdcall'      { L _ ITstdcallconv }
  'ccall'        { L _ ITccallconv }
+ 'regparm3'	{ L _ ITregparm3callconv }
  'dotnet'       { L _ ITdotnet }
  'proc'		{ L _ ITproc }		-- for arrow notation extension
  'rec'		{ L _ ITrec }		-- for arrow notation extension
@@ -912,6 +913,7 @@
 callconv :: { CallConv }
 	  : 'stdcall'			{ CCall  StdCallConv }
 	  | 'ccall'			{ CCall  CCallConv   }
+	  | 'regparm3'			{ CCall  RegParm3CallConv  }
 	  | 'dotnet'			{ DNCall	     }
 
 safety :: { Safety }
diff -b -u -r /home/tommd/dev/Test/House-0.8.93/ghc-6.8.2/compiler/prelude/ForeignCall.lhs ghc-6.8.2/compiler/prelude/ForeignCall.lhs
--- /home/tommd/dev/Test/House-0.8.93/ghc-6.8.2/compiler/prelude/ForeignCall.lhs	2007-12-10 10:11:31.000000000 -0800
+++ ghc-6.8.2/compiler/prelude/ForeignCall.lhs	2009-09-06 11:21:25.655720351 -0700
@@ -135,7 +135,7 @@
 platforms.
 
 \begin{code}
-data CCallConv = CCallConv | StdCallConv | CmmCallConv
+data CCallConv = CCallConv | StdCallConv | RegParm3CallConv | CmmCallConv
   deriving (Eq)
   {-! derive: Binary !-}
 
@@ -159,6 +159,7 @@
 ccallConvAttribute :: CCallConv -> String
 ccallConvAttribute StdCallConv = "__attribute__((__stdcall__))"
 ccallConvAttribute CCallConv   = ""
+ccallConvAttribute RegParm3CallConv = "__attribute__((regparm (3)))"
 \end{code}
 
 \begin{code}
diff -b -u -r /home/tommd/dev/Test/House-0.8.93/ghc-6.8.2/compiler/typecheck/TcForeign.lhs ghc-6.8.2/compiler/typecheck/TcForeign.lhs
--- /home/tommd/dev/Test/House-0.8.93/ghc-6.8.2/compiler/typecheck/TcForeign.lhs	2007-12-10 10:11:31.000000000 -0800
+++ ghc-6.8.2/compiler/typecheck/TcForeign.lhs	2009-09-06 14:43:14.738293057 -0700
@@ -332,6 +332,7 @@
 \begin{code}
 checkCConv :: CCallConv -> TcM ()
 checkCConv CCallConv  = return ()
+checkCConv RegParm3CallConv = return ()
 #if i386_TARGET_ARCH
 checkCConv StdCallConv = return ()
 #else
diff -b -u -r /home/tommd/dev/Test/House-0.8.93/ghc-6.8.2/rts/house/Signals.c ghc-6.8.2/rts/house/Signals.c
--- /home/tommd/dev/Test/House-0.8.93/ghc-6.8.2/rts/house/Signals.c	2009-01-22 11:20:38.000000000 -0800
+++ ghc-6.8.2/rts/house/Signals.c	2009-08-19 14:01:13.517071731 -0700
@@ -25,15 +25,15 @@
 void
 blockUserSignals(void)
 {
-    __asm__("cli");
+// TMD    __asm__("cli");
 }
 
 void
 unblockUserSignals(void)
 {
-    extern int kernelInterruptsAllowed;
-    if (kernelInterruptsAllowed)
-        __asm__("sti");
+// TMD    extern int kernelInterruptsAllowed;
+// TMD    if (kernelInterruptsAllowed)
+// TMD        __asm__("sti");
 }
 
 void
diff -b -u -r /home/tommd/dev/Test/House-0.8.93/ghc-6.8.2/rts/Makefile ghc-6.8.2/rts/Makefile
--- /home/tommd/dev/Test/House-0.8.93/ghc-6.8.2/rts/Makefile	2009-09-06 13:57:02.355294237 -0700
+++ ghc-6.8.2/rts/Makefile	2009-08-12 14:55:58.815267164 -0700
@@ -190,7 +190,7 @@
 # Windows gets confused.
 # This has to be in HC rather than CC opts, as otherwise there's a
 # -optc-O2 that comes after it.
-Main_HC_OPTS += -optc-O0
+Main_HC_OPTS += -optc-Os
 
 RtsMessages_CC_OPTS += -DProjectVersion=$(DQ)$(ProjectVersion)$(DQ)
 RtsUtils_CC_OPTS += -DProjectVersion=$(DQ)$(ProjectVersion)$(DQ)
@@ -384,7 +384,11 @@
 SRC_HC_OPTS += -optc-fno-stack-protector
 endif
 
-# -O3 helps unroll some loops (especially in copy() with a constant argument).
+SRC_HC_OPTS +=  -optc-fno-common -optc-nostdlib -optc-I/usr/src/kernels/2.6.29.6-213.fc11.i586/arch/x86/include/ -optc-MD -optc-mno-sse -optc-mno-mmx -optc-mno-sse2 -optc-mno-3dnow -optc-fno-optimize-sibling-calls -I/usr/src/kernels/2.6.29.6-213.fc11.i586/include/ -optc-march=i586 -optc-Wa,-mtune=generic32 -optc-ffreestanding -optc-fno-asynchronous-unwind-tables -optc-g -fvia-c
+SRC_HC_OPTS += -optc-Wno-pointer-sign -optc-Wframe-larger-than=1024 -optc-fno-stack-protector -optc-fno-dwarf2-cfi-asm -optc-mtune=generic
+# -optc-msoft-float
+
+# -O3 helps unroll some loops (especially in copy() with a constant argument)
 sm/Evac_HC_OPTS += -optc-funroll-loops
 
 # Without this, thread_obj will not be inlined (at least on x86 with GCC 4.1.0)
@@ -396,7 +400,9 @@
 # allowed to assume that these pointers do not alias.  eg. without
 # this flag we get problems in GC.c:copy() with gcc 3.4.3, the
 # upd_evacee() assigments get moved before the object copy.
-SRC_CC_OPTS += -fno-strict-aliasing
+SRC_CC_OPTS += -MD -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fno-optimize-sibling-calls -g -fwrapv -fno-strict-aliasing -Wa,symbolic -fno-common -static-libgcc -nostdlib -I/usr/src/kernels/2.6.29.6-213.fc11.i586/include/ -mpreferred-stack-boundary=2 -march=i586 -m32 -Wa,-mtune=generic32 -ffreestanding -fno-asynchronous-unwind-tables -pg -fno-omit-frame-pointer -Os
+SRC_CC_OPTS += -Wno-pointer-sign -Wframe-larger-than=1024 -fno-stack-protector -fno-dwarf2-cfi-asm
+# -msoft-float
 
 # We *want* type-checking of hand-written cmm.
 SRC_HC_OPTS += -dcmm-lint 
diff -b -u -r /home/tommd/dev/Test/House-0.8.93/ghc-6.8.2/rts/RtsStartup.c ghc-6.8.2/rts/RtsStartup.c
--- /home/tommd/dev/Test/House-0.8.93/ghc-6.8.2/rts/RtsStartup.c	2009-09-06 13:57:02.382294184 -0700
+++ ghc-6.8.2/rts/RtsStartup.c	2009-09-06 14:04:34.453543514 -0700
@@ -536,6 +536,11 @@
     // be safe; this might be a DLL
 }
 
+void hs_exit_nowait(void)
+{
+    hs_exit_(rtsFalse);
+}
+
 // Compatibility interfaces
 void
 shutdownHaskell(void)
diff -b -u -r /home/tommd/dev/Test/House-0.8.93/ghc-6.8.2/rts/sm/MBlock.c ghc-6.8.2/rts/sm/MBlock.c
--- /home/tommd/dev/Test/House-0.8.93/ghc-6.8.2/rts/sm/MBlock.c	2009-09-06 13:57:02.404293703 -0700
+++ ghc-6.8.2/rts/sm/MBlock.c	2009-08-12 15:20:18.686302386 -0700
@@ -144,6 +144,7 @@
 
 void *
 getMBlocks(unsigned n) {
+/*
   void * p = next_mblock;
   unsigned i = 0;
   next_mblock += MBLOCK_SIZE * n;
@@ -154,6 +155,16 @@
       markHeapAlloced(p + i * MBLOCK_SIZE);
   }
   return p;
+*/
+  // TMD
+  unsigned i = 0;
+  size_t n2 = (size_t) n;
+  void *p = NULL;
+  p = calloc(n2, MBLOCK_SIZE);
+  for (i = 0; i < n; i++) {
+      markHeapAlloced(p + i * MBLOCK_SIZE);
+  }
+  return p;
 }
 
 void
