debug/fpe: add win32 implementation
This commit is contained in:
parent
f9c298fba5
commit
f1ff722085
@ -0,0 +1,71 @@
|
|||||||
|
#include "./fpe.hpp"
|
||||||
|
|
||||||
|
#undef __STRICT_ANSI__
|
||||||
|
|
||||||
|
#include <float.h>
|
||||||
|
|
||||||
|
//#pragma fenv_access (on)
|
||||||
|
|
||||||
|
|
||||||
|
using cruft::debug::fpe::scoped_reset;
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
void
|
||||||
|
cruft::debug::fpe::enable (void)
|
||||||
|
{
|
||||||
|
unsigned int current;
|
||||||
|
(void)current;
|
||||||
|
_controlfp_s (¤t, _MCW_EM, _EM_INVALID | _EM_ZERODIVIDE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
void
|
||||||
|
cruft::debug::fpe::disable (void)
|
||||||
|
{
|
||||||
|
unsigned int current;
|
||||||
|
(void)current;
|
||||||
|
_controlfp_s (¤t, 0, _EM_INVALID | _EM_ZERODIVIDE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
bool cruft::debug::fpe::value (void)
|
||||||
|
{
|
||||||
|
unsigned current;
|
||||||
|
_controlfp_s (¤t, _EM_INVALID, 0);
|
||||||
|
return current;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
bool cruft::debug::fpe::value (bool val)
|
||||||
|
{
|
||||||
|
if (val)
|
||||||
|
enable ();
|
||||||
|
else
|
||||||
|
disable ();
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
scoped_reset::scoped_reset ()
|
||||||
|
: m_prev (value ())
|
||||||
|
{ }
|
||||||
|
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
scoped_reset::scoped_reset (bool _value)
|
||||||
|
: scoped_reset ()
|
||||||
|
{
|
||||||
|
value (_value);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
scoped_reset::~scoped_reset ()
|
||||||
|
{
|
||||||
|
value (m_prev);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user