]> git.mxchange.org Git - flightgear.git/commitdiff
Add some floating point (exception) optimizations for IRIX machines.
authorehofman <ehofman>
Fri, 14 May 2004 11:58:57 +0000 (11:58 +0000)
committerehofman <ehofman>
Fri, 14 May 2004 11:58:57 +0000 (11:58 +0000)
src/Main/bootstrap.cxx

index 39bfcbc899f75fe3eaf545e40b04a63c3c4c7ae1..88664bd8dd958f719c38e75f7dfe83a6158b166b 100644 (file)
@@ -110,6 +110,29 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
 }
 #endif
 
+#if defined( sgi )
+#include <sys/fpu.h>
+
+/*
+    set the special "flush zero" bit (FS, bit 24) in the Control Status
+    Register of the FPU of R4k and beyond so that the result of any
+    underflowing operation will be clamped to zero, and no exception of
+    any kind will be generated on the CPU.  This has no effect on an
+    R3000.
+
+    the FS bit is inherited by processes fork()ed out of this one,
+    but it is not inherited across an exec().  so anytime you exec()
+    a process, you must re-set the FS bit in that process.
+  */
+void flush_fpe(void)
+{
+    union fpc_csr f;
+    f.fc_word = get_fpc_csr();
+    f.fc_struct.flush = 1;
+    set_fpc_csr(f.fc_word);
+}
+#endif
+
 // Main entry point; catch any exceptions that have made it this far.
 int main ( int argc, char **argv ) {
 
@@ -118,6 +141,10 @@ int main ( int argc, char **argv ) {
     initFPE();
 #endif
 
+#if defined(sgi)
+    flush_fpe();
+#endif
+
     // Enable floating-point exceptions for Windows
 #if defined( _MSC_VER ) && defined( DEBUG )
     // Christian, we should document what this does