[project @ 2005-01-28 12:55:17 by simonmar]
[ghc-hetmet.git] / ghc / rts / RtsStartup.c
index 89fb4a4..c5fa744 100644 (file)
@@ -1,5 +1,4 @@
 /* -----------------------------------------------------------------------------
- * $Id: RtsStartup.c,v 1.82 2004/08/21 12:48:00 panne Exp $
  *
  * (c) The GHC Team, 1998-2002
  *
@@ -15,6 +14,7 @@
 #include "Storage.h"    /* initStorage, exitStorage */
 #include "Schedule.h"   /* initScheduler */
 #include "Stats.h"      /* initStats */
+#include "STM.h"        /* initSTM */
 #include "Signals.h"
 #include "Timer.h"      /* startTimer, stopTimer */
 #include "Weak.h"
@@ -49,7 +49,7 @@
 # include "LLC.h"
 #endif
 
-#if defined(mingw32_TARGET_OS)
+#if defined(mingw32_HOST_OS)
 #include "win32/AsyncIO.h"
 #endif
 
@@ -89,8 +89,31 @@ __hscore_set_saved_termios(int fd, void* ts)
   }
 }
 
-#if i386_TARGET_ARCH
-static void x86_init_fpu ( void );
+/* -----------------------------------------------------------------------------
+   Initialise floating point unit on x86 (currently disabled. why?)
+   -------------------------------------------------------------------------- */
+
+#define X86_INIT_FPU 0
+
+#if X86_INIT_FPU
+static void
+x86_init_fpu ( void )
+{
+  __volatile unsigned short int fpu_cw;
+
+  // Grab the control word
+  __asm __volatile ("fnstcw %0" : "=m" (fpu_cw));
+
+#if 0
+  printf("fpu_cw: %x\n", fpu_cw);
+#endif
+
+  // Set bits 8-9 to 10 (64-bit precision).
+  fpu_cw = (fpu_cw & 0xfcff) | 0x0200;
+
+  // Store the new control word back
+  __asm __volatile ("fldcw %0" : : "m" (fpu_cw));
+}
 #endif
 
 /* -----------------------------------------------------------------------------
@@ -143,7 +166,7 @@ hs_init(int *argc, char **argv[])
 #if defined(PAR)
     /* NB: this really must be done after processing the RTS flags */
     IF_PAR_DEBUG(verbose,
-                 fprintf(stderr, "==== Synchronising system (%d PEs)\n", nPEs));
+                 debugBelch("==== Synchronising system (%d PEs)\n", nPEs));
     synchroniseSystem();             // calls initParallelSystem etc
 #endif /* PAR */
 
@@ -171,8 +194,10 @@ hs_init(int *argc, char **argv[])
     /* initialise the stable pointer table */
     initStablePtrTable();
 
+#if defined(DEBUG)
     /* initialise thread label table (tso->char*) */
     initThreadLabelTable();
+#endif
 
 #if defined(PROFILING) || defined(DEBUG)
     initProfiling1();
@@ -191,10 +216,12 @@ hs_init(int *argc, char **argv[])
     initDefaultHandlers();
 #endif
  
-#if defined(mingw32_TARGET_OS)
+#if defined(mingw32_HOST_OS)
     startupAsyncIO();
 #endif
 
+    initSTM();
+
 #ifdef RTS_GTK_FRONTPANEL
     if (RtsFlags.GcFlags.frontpanel) {
        initFrontPanel();
@@ -205,8 +232,8 @@ hs_init(int *argc, char **argv[])
     setlocale(LC_CTYPE,"");
 #endif
 
-#if i386_TARGET_ARCH
-//    x86_init_fpu();
+#if X86_INIT_FPU
+    x86_init_fpu();
 #endif
 
     /* Record initialization times */
@@ -333,11 +360,6 @@ hs_exit(void)
     /* start timing the shutdown */
     stat_startExit();
     
-#if !defined(GRAN)
-    /* Finalize any remaining weak pointers */
-    finalizeWeakPointersNow();
-#endif
-    
     /* stop all running tasks */
     exitScheduler();
     
@@ -417,7 +439,7 @@ hs_exit(void)
     if (RtsFlags.TickyFlags.showTickyStats) PrintTickyInfo();
 #endif
 
-#if defined(mingw32_TARGET_OS)
+#if defined(mingw32_HOST_OS)
     shutdownAsyncIO();
 #endif
 }
@@ -461,34 +483,8 @@ stg_exit(int n)
     return;
   exit_started=rtsTrue;
 
-  IF_PAR_DEBUG(verbose, fprintf(stderr,"==-- stg_exit %d on [%x]...", n, mytid));
+  IF_PAR_DEBUG(verbose, debugBelch("==-- stg_exit %d on [%x]...", n, mytid));
   shutdownParallelSystem(n);
 #endif
   exit(n);
 }
-
-/* -----------------------------------------------------------------------------
-   Initialise floating point unit on x86
-   -------------------------------------------------------------------------- */
-
-#if i386_TARGET_ARCH
-static void
-x86_init_fpu ( void )
-{
-  __volatile unsigned short int fpu_cw;
-
-  // Grab the control word
-  __asm __volatile ("fnstcw %0" : "=m" (fpu_cw));
-
-#if 0
-  printf("fpu_cw: %x\n", fpu_cw);
-#endif
-
-  // Set bits 8-9 to 10 (64-bit precision).
-  fpu_cw = (fpu_cw & 0xfcff) | 0x0200;
-
-  // Store the new control word back
-  __asm __volatile ("fldcw %0" : : "m" (fpu_cw));
-}
-#endif
-