ReactOS 0.4.16-dev-329-g9223134
libm_util.h File Reference
#include <emmintrin.h>
#include <float.h>
Include dependency graph for libm_util.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define inline   __inline
 
#define MULTIPLIER_SP   24
 
#define MULTIPLIER_DP   53
 
#define SIGNBIT_DP64   0x8000000000000000
 
#define EXPBITS_DP64   0x7ff0000000000000
 
#define MANTBITS_DP64   0x000fffffffffffff
 
#define ONEEXPBITS_DP64   0x3ff0000000000000
 
#define TWOEXPBITS_DP64   0x4000000000000000
 
#define HALFEXPBITS_DP64   0x3fe0000000000000
 
#define IMPBIT_DP64   0x0010000000000000
 
#define QNANBITPATT_DP64   0x7ff8000000000000
 
#define INDEFBITPATT_DP64   0xfff8000000000000
 
#define PINFBITPATT_DP64   0x7ff0000000000000
 
#define NINFBITPATT_DP64   0xfff0000000000000
 
#define EXPBIAS_DP64   1023
 
#define EXPSHIFTBITS_DP64   52
 
#define BIASEDEMIN_DP64   1
 
#define EMIN_DP64   -1022
 
#define BIASEDEMAX_DP64   2046
 
#define EMAX_DP64   1023
 
#define LAMBDA_DP64   1.0e300
 
#define MANTLENGTH_DP64   53
 
#define BASEDIGITS_DP64   15
 
#define SIGNBIT_SP32   0x80000000
 
#define EXPBITS_SP32   0x7f800000
 
#define MANTBITS_SP32   0x007fffff
 
#define ONEEXPBITS_SP32   0x3f800000
 
#define TWOEXPBITS_SP32   0x40000000
 
#define HALFEXPBITS_SP32   0x3f000000
 
#define IMPBIT_SP32   0x00800000
 
#define QNANBITPATT_SP32   0x7fc00000
 
#define INDEFBITPATT_SP32   0xffc00000
 
#define PINFBITPATT_SP32   0x7f800000
 
#define NINFBITPATT_SP32   0xff800000
 
#define EXPBIAS_SP32   127
 
#define EXPSHIFTBITS_SP32   23
 
#define BIASEDEMIN_SP32   1
 
#define EMIN_SP32   -126
 
#define BIASEDEMAX_SP32   254
 
#define EMAX_SP32   127
 
#define LAMBDA_SP32   1.0e30
 
#define MANTLENGTH_SP32   24
 
#define BASEDIGITS_SP32   7
 
#define CLASS_SIGNALLING_NAN   1
 
#define CLASS_QUIET_NAN   2
 
#define CLASS_NEGATIVE_INFINITY   3
 
#define CLASS_NEGATIVE_NORMAL_NONZERO   4
 
#define CLASS_NEGATIVE_DENORMAL   5
 
#define CLASS_NEGATIVE_ZERO   6
 
#define CLASS_POSITIVE_ZERO   7
 
#define CLASS_POSITIVE_DENORMAL   8
 
#define CLASS_POSITIVE_NORMAL_NONZERO   9
 
#define CLASS_POSITIVE_INFINITY   10
 
#define OLD_BITS_SP32(x)   (*((unsigned int *)&x))
 
#define OLD_BITS_DP64(x)   (*((unsigned long long *)&x))
 
#define GET_BITS_SP32(x, ux)
 
#define PUT_BITS_SP32(ux, x)
 
#define GET_BITS_DP64(x, ux)
 
#define PUT_BITS_DP64(ux, x)
 
#define AMD_F_OVERFLOW   0x00000001
 
#define AMD_F_UNDERFLOW   0x00000002
 
#define AMD_F_DIVBYZERO   0x00000004
 
#define AMD_F_INVALID   0x00000008
 
#define AMD_F_INEXACT   0x00000010
 
#define AMD_F_EXTENDED   0x00000300
 
#define AMD_F_DOUBLE   0x00000200
 
#define AMD_F_SINGLE   0x00000000
 
#define AMD_F_RC_NEAREST   0x00000000
 
#define AMD_F_RC_DOWN   0x00002000
 
#define AMD_F_RC_UP   0x00004000
 
#define AMD_F_RC_ZERO   0x00006000
 

Variables

static const double VAL_2PMULTIPLIER_DP = 9007199254740992.0
 
static const double VAL_2PMMULTIPLIER_DP = 1.1102230246251565404236316680908e-16
 
static const float VAL_2PMULTIPLIER_SP = 16777216.0F
 
static const float VAL_2PMMULTIPLIER_SP = 5.9604645e-8F
 

Macro Definition Documentation

◆ AMD_F_DIVBYZERO

#define AMD_F_DIVBYZERO   0x00000004

Definition at line 135 of file libm_util.h.

◆ AMD_F_DOUBLE

#define AMD_F_DOUBLE   0x00000200

Definition at line 141 of file libm_util.h.

◆ AMD_F_EXTENDED

#define AMD_F_EXTENDED   0x00000300

Definition at line 140 of file libm_util.h.

◆ AMD_F_INEXACT

#define AMD_F_INEXACT   0x00000010

Definition at line 137 of file libm_util.h.

◆ AMD_F_INVALID

#define AMD_F_INVALID   0x00000008

Definition at line 136 of file libm_util.h.

◆ AMD_F_OVERFLOW

#define AMD_F_OVERFLOW   0x00000001

Definition at line 133 of file libm_util.h.

◆ AMD_F_RC_DOWN

#define AMD_F_RC_DOWN   0x00002000

Definition at line 146 of file libm_util.h.

◆ AMD_F_RC_NEAREST

#define AMD_F_RC_NEAREST   0x00000000

Definition at line 145 of file libm_util.h.

◆ AMD_F_RC_UP

#define AMD_F_RC_UP   0x00004000

Definition at line 147 of file libm_util.h.

◆ AMD_F_RC_ZERO

#define AMD_F_RC_ZERO   0x00006000

Definition at line 148 of file libm_util.h.

◆ AMD_F_SINGLE

#define AMD_F_SINGLE   0x00000000

Definition at line 142 of file libm_util.h.

◆ AMD_F_UNDERFLOW

#define AMD_F_UNDERFLOW   0x00000002

Definition at line 134 of file libm_util.h.

◆ BASEDIGITS_DP64

#define BASEDIGITS_DP64   15

Definition at line 63 of file libm_util.h.

◆ BASEDIGITS_SP32

#define BASEDIGITS_SP32   7

Definition at line 87 of file libm_util.h.

◆ BIASEDEMAX_DP64

#define BIASEDEMAX_DP64   2046

Definition at line 59 of file libm_util.h.

◆ BIASEDEMAX_SP32

#define BIASEDEMAX_SP32   254

Definition at line 83 of file libm_util.h.

◆ BIASEDEMIN_DP64

#define BIASEDEMIN_DP64   1

Definition at line 57 of file libm_util.h.

◆ BIASEDEMIN_SP32

#define BIASEDEMIN_SP32   1

Definition at line 81 of file libm_util.h.

◆ CLASS_NEGATIVE_DENORMAL

#define CLASS_NEGATIVE_DENORMAL   5

Definition at line 93 of file libm_util.h.

◆ CLASS_NEGATIVE_INFINITY

#define CLASS_NEGATIVE_INFINITY   3

Definition at line 91 of file libm_util.h.

◆ CLASS_NEGATIVE_NORMAL_NONZERO

#define CLASS_NEGATIVE_NORMAL_NONZERO   4

Definition at line 92 of file libm_util.h.

◆ CLASS_NEGATIVE_ZERO

#define CLASS_NEGATIVE_ZERO   6

Definition at line 94 of file libm_util.h.

◆ CLASS_POSITIVE_DENORMAL

#define CLASS_POSITIVE_DENORMAL   8

Definition at line 96 of file libm_util.h.

◆ CLASS_POSITIVE_INFINITY

#define CLASS_POSITIVE_INFINITY   10

Definition at line 98 of file libm_util.h.

◆ CLASS_POSITIVE_NORMAL_NONZERO

#define CLASS_POSITIVE_NORMAL_NONZERO   9

Definition at line 97 of file libm_util.h.

◆ CLASS_POSITIVE_ZERO

#define CLASS_POSITIVE_ZERO   7

Definition at line 95 of file libm_util.h.

◆ CLASS_QUIET_NAN

#define CLASS_QUIET_NAN   2

Definition at line 90 of file libm_util.h.

◆ CLASS_SIGNALLING_NAN

#define CLASS_SIGNALLING_NAN   1

Definition at line 89 of file libm_util.h.

◆ EMAX_DP64

#define EMAX_DP64   1023

Definition at line 60 of file libm_util.h.

◆ EMAX_SP32

#define EMAX_SP32   127

Definition at line 84 of file libm_util.h.

◆ EMIN_DP64

#define EMIN_DP64   -1022

Definition at line 58 of file libm_util.h.

◆ EMIN_SP32

#define EMIN_SP32   -126

Definition at line 82 of file libm_util.h.

◆ EXPBIAS_DP64

#define EXPBIAS_DP64   1023

Definition at line 55 of file libm_util.h.

◆ EXPBIAS_SP32

#define EXPBIAS_SP32   127

Definition at line 79 of file libm_util.h.

◆ EXPBITS_DP64

#define EXPBITS_DP64   0x7ff0000000000000

Definition at line 45 of file libm_util.h.

◆ EXPBITS_SP32

#define EXPBITS_SP32   0x7f800000

Definition at line 69 of file libm_util.h.

◆ EXPSHIFTBITS_DP64

#define EXPSHIFTBITS_DP64   52

Definition at line 56 of file libm_util.h.

◆ EXPSHIFTBITS_SP32

#define EXPSHIFTBITS_SP32   23

Definition at line 80 of file libm_util.h.

◆ GET_BITS_DP64

#define GET_BITS_DP64 (   x,
  ux 
)
Value:
{ \
volatile union {double d; unsigned long long i;} _bitsy; \
_bitsy.d = (x); \
ux = _bitsy.i; \
}
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define d
Definition: ke_i.h:81

Definition at line 118 of file libm_util.h.

◆ GET_BITS_SP32

#define GET_BITS_SP32 (   x,
  ux 
)
Value:
{ \
volatile union {float f; unsigned int i;} _bitsy; \
_bitsy.f = (x); \
ux = _bitsy.i; \
}
#define f
Definition: ke_i.h:83

Definition at line 105 of file libm_util.h.

◆ HALFEXPBITS_DP64

#define HALFEXPBITS_DP64   0x3fe0000000000000

Definition at line 49 of file libm_util.h.

◆ HALFEXPBITS_SP32

#define HALFEXPBITS_SP32   0x3f000000

Definition at line 73 of file libm_util.h.

◆ IMPBIT_DP64

#define IMPBIT_DP64   0x0010000000000000

Definition at line 50 of file libm_util.h.

◆ IMPBIT_SP32

#define IMPBIT_SP32   0x00800000

Definition at line 74 of file libm_util.h.

◆ INDEFBITPATT_DP64

#define INDEFBITPATT_DP64   0xfff8000000000000

Definition at line 52 of file libm_util.h.

◆ INDEFBITPATT_SP32

#define INDEFBITPATT_SP32   0xffc00000

Definition at line 76 of file libm_util.h.

◆ inline

#define inline   __inline

MIT License


Copyright (c) 2002-2019 Advanced Micro Devices, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this Software and associated documentaon files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Definition at line 29 of file libm_util.h.

◆ LAMBDA_DP64

#define LAMBDA_DP64   1.0e300

Definition at line 61 of file libm_util.h.

◆ LAMBDA_SP32

#define LAMBDA_SP32   1.0e30

Definition at line 85 of file libm_util.h.

◆ MANTBITS_DP64

#define MANTBITS_DP64   0x000fffffffffffff

Definition at line 46 of file libm_util.h.

◆ MANTBITS_SP32

#define MANTBITS_SP32   0x007fffff

Definition at line 70 of file libm_util.h.

◆ MANTLENGTH_DP64

#define MANTLENGTH_DP64   53

Definition at line 62 of file libm_util.h.

◆ MANTLENGTH_SP32

#define MANTLENGTH_SP32   24

Definition at line 86 of file libm_util.h.

◆ MULTIPLIER_DP

#define MULTIPLIER_DP   53

Definition at line 36 of file libm_util.h.

◆ MULTIPLIER_SP

#define MULTIPLIER_SP   24

Definition at line 35 of file libm_util.h.

◆ NINFBITPATT_DP64

#define NINFBITPATT_DP64   0xfff0000000000000

Definition at line 54 of file libm_util.h.

◆ NINFBITPATT_SP32

#define NINFBITPATT_SP32   0xff800000

Definition at line 78 of file libm_util.h.

◆ OLD_BITS_DP64

#define OLD_BITS_DP64 (   x)    (*((unsigned long long *)&x))

Definition at line 101 of file libm_util.h.

◆ OLD_BITS_SP32

#define OLD_BITS_SP32 (   x)    (*((unsigned int *)&x))

Definition at line 100 of file libm_util.h.

◆ ONEEXPBITS_DP64

#define ONEEXPBITS_DP64   0x3ff0000000000000

Definition at line 47 of file libm_util.h.

◆ ONEEXPBITS_SP32

#define ONEEXPBITS_SP32   0x3f800000

Definition at line 71 of file libm_util.h.

◆ PINFBITPATT_DP64

#define PINFBITPATT_DP64   0x7ff0000000000000

Definition at line 53 of file libm_util.h.

◆ PINFBITPATT_SP32

#define PINFBITPATT_SP32   0x7f800000

Definition at line 77 of file libm_util.h.

◆ PUT_BITS_DP64

#define PUT_BITS_DP64 (   ux,
  x 
)
Value:
{ \
volatile union {double d; unsigned long long i;} _bitsy; \
_bitsy.i = (ux); \
x = _bitsy.d; \
}

Definition at line 124 of file libm_util.h.

◆ PUT_BITS_SP32

#define PUT_BITS_SP32 (   ux,
  x 
)
Value:
{ \
volatile union {float f; unsigned int i;} _bitsy; \
_bitsy.i = (ux); \
x = _bitsy.f; \
}

Definition at line 111 of file libm_util.h.

◆ QNANBITPATT_DP64

#define QNANBITPATT_DP64   0x7ff8000000000000

Definition at line 51 of file libm_util.h.

◆ QNANBITPATT_SP32

#define QNANBITPATT_SP32   0x7fc00000

Definition at line 75 of file libm_util.h.

◆ SIGNBIT_DP64

#define SIGNBIT_DP64   0x8000000000000000

Definition at line 44 of file libm_util.h.

◆ SIGNBIT_SP32

#define SIGNBIT_SP32   0x80000000

Definition at line 68 of file libm_util.h.

◆ TWOEXPBITS_DP64

#define TWOEXPBITS_DP64   0x4000000000000000

Definition at line 48 of file libm_util.h.

◆ TWOEXPBITS_SP32

#define TWOEXPBITS_SP32   0x40000000

Definition at line 72 of file libm_util.h.

Variable Documentation

◆ VAL_2PMMULTIPLIER_DP

const double VAL_2PMMULTIPLIER_DP = 1.1102230246251565404236316680908e-16
static

Definition at line 39 of file libm_util.h.

Referenced by ldexp().

◆ VAL_2PMMULTIPLIER_SP

const float VAL_2PMMULTIPLIER_SP = 5.9604645e-8F
static

Definition at line 41 of file libm_util.h.

Referenced by ldexpf().

◆ VAL_2PMULTIPLIER_DP

const double VAL_2PMULTIPLIER_DP = 9007199254740992.0
static

Definition at line 38 of file libm_util.h.

Referenced by ldexp().

◆ VAL_2PMULTIPLIER_SP

const float VAL_2PMULTIPLIER_SP = 16777216.0F
static

Definition at line 40 of file libm_util.h.

Referenced by ldexpf().