1
0
Fork 0

Add some floating point (exception) optimizations for IRIX machines.

This commit is contained in:
ehofman 2004-05-14 11:58:57 +00:00
parent 8402f0b296
commit 410e02ceaf

View 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