/* -----------------------------------------------------------------------------
- * $Id: RtsStartup.c,v 1.83 2004/09/03 15:28:42 simonmar Exp $
*
* (c) The GHC Team, 1998-2002
*
}
}
-#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
/* -----------------------------------------------------------------------------
/* initialise the stable pointer table */
initStablePtrTable();
+#if defined(DEBUG)
/* initialise thread label table (tso->char*) */
initThreadLabelTable();
+#endif
#if defined(PROFILING) || defined(DEBUG)
initProfiling1();
setlocale(LC_CTYPE,"");
#endif
-#if i386_TARGET_ARCH
-// x86_init_fpu();
+#if X86_INIT_FPU
+ x86_init_fpu();
#endif
/* Record initialization times */
#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
-