mirror of
https://github.com/reactos/reactos.git
synced 2024-11-02 21:09:15 +00:00
45 lines
1.3 KiB
C
45 lines
1.3 KiB
C
/*
|
|
* COPYRIGHT: See COPYING in the top level directory
|
|
* PROJECT: ReactOS system libraries
|
|
* FILE: lib/sdk/crt/float/i386/statfp.c
|
|
* PURPOSE: Unknown
|
|
* PROGRAMER: Unknown
|
|
* UPDATE HISTORY:
|
|
* 25/11/05: Added license header
|
|
*/
|
|
|
|
#include <precomp.h>
|
|
#include "float.h"
|
|
|
|
//WTF IS HAPPENING WITH float.h !??!?!
|
|
#define _SW_INVALID 0x00000010 /* invalid */
|
|
#define _SW_ZERODIVIDE 0x00000008 /* zero divide */
|
|
#define _SW_UNDERFLOW 0x00000002 /* underflow */
|
|
#define _SW_OVERFLOW 0x00000004 /* overflow */
|
|
#define _SW_INEXACT 0x00000001 /* inexact (precision) */
|
|
#define _SW_DENORMAL 0x00080000 /* denormal status bit */
|
|
|
|
/**********************************************************************
|
|
* _statusfp (MSVCRT.@)
|
|
*/
|
|
unsigned int CDECL _statusfp(void)
|
|
{
|
|
unsigned int retVal = 0;
|
|
unsigned short fpword;
|
|
|
|
#ifdef _M_AMD64
|
|
fpword = _mm_getcsr();
|
|
#elif defined(__GNUC__)
|
|
__asm__ __volatile__( "fstsw %0" : "=m" (fpword) : );
|
|
#else // _MSC_VER
|
|
__asm fstsw [fpword];
|
|
#endif
|
|
if (fpword & 0x1) retVal |= _SW_INVALID;
|
|
if (fpword & 0x2) retVal |= _SW_DENORMAL;
|
|
if (fpword & 0x4) retVal |= _SW_ZERODIVIDE;
|
|
if (fpword & 0x8) retVal |= _SW_OVERFLOW;
|
|
if (fpword & 0x10) retVal |= _SW_UNDERFLOW;
|
|
if (fpword & 0x20) retVal |= _SW_INEXACT;
|
|
return retVal;
|
|
}
|