IDA C++ SDK 9.2
Loading...
Searching...
No Matches
ieee.h File Reference

IEEE floating point functions. More...

Go to the source code of this file.

Classes

struct  fpvalue_t
 Processor-independent representation of a floating point value. More...

Typedefs

typedef uint16 eNI[IEEE_NI]
 There is one more internal format used by IDA to store intermediate values.

Enumerations

enum  fpvalue_kind_t {
  FPV_BADARG , FPV_NORM , FPV_NAN , FPV_PINF ,
  FPV_NINF
}
 Floating value kinds. More...
enum  fpvalue_error_t {
  REAL_ERROR_OK = 1 , REAL_ERROR_FORMAT = -1 , REAL_ERROR_RANGE = -2 , REAL_ERROR_BADDATA = -3 ,
  REAL_ERROR_FPOVER = 2 , REAL_ERROR_BADSTR = 3 , REAL_ERROR_ZERODIV = 4 , REAL_ERROR_INTOVER = 5
}

Functions

idaman THREAD_SAFE fpvalue_error_t ida_export ieee_realcvt (void *m, fpvalue_t *out, uint16 swt)
 Standard IEEE 754 floating point conversion function.
idaman THREAD_SAFE void ida_export realtoasc (char *buf, size_t bufsize, const fpvalue_t &x, uint mode)
idaman THREAD_SAFE fpvalue_error_t ida_export asctoreal (const char **sss, fpvalue_t *out)
idaman THREAD_SAFE void ida_export eltoe (sval_t l, fpvalue_t *vout)
idaman THREAD_SAFE void ida_export eltoe64 (int64 l, fpvalue_t *vout)
idaman THREAD_SAFE void ida_export eltoe64u (uint64 l, fpvalue_t *vout)
idaman THREAD_SAFE fpvalue_error_t ida_export eetol (sval_t *out, const fpvalue_t &a, bool roundflg)
idaman THREAD_SAFE fpvalue_error_t ida_export eetol64 (int64 *out, const fpvalue_t &a, bool roundflg)
idaman THREAD_SAFE fpvalue_error_t ida_export eetol64u (uint64 *out, const fpvalue_t &a, bool roundflg)
idaman THREAD_SAFE fpvalue_error_t ida_export eldexp (const fpvalue_t &a, int32 pwr2, fpvalue_t *zout)
idaman THREAD_SAFE fpvalue_error_t ida_export eadd (const fpvalue_t &a, const fpvalue_t &b, fpvalue_t *zout, bool subflg)
idaman THREAD_SAFE fpvalue_error_t ida_export emul (const fpvalue_t &a, const fpvalue_t &b, fpvalue_t *zout)
idaman THREAD_SAFE fpvalue_error_t ida_export ediv (const fpvalue_t &a, const fpvalue_t &b, fpvalue_t *zout)
idaman THREAD_SAFE int ida_export ecmp (const fpvalue_t &a, const fpvalue_t &b)
idaman THREAD_SAFE fpvalue_kind_t ida_export get_fpvalue_kind (const fpvalue_t &a, uint16 reserved=0)
IEEE_DEPRECATED void ecleaz (eNI x)
idaman IEEE_DEPRECATED THREAD_SAFE void ida_export emovo (const eNI a, fpvalue_t *vout)
idaman IEEE_DEPRECATED THREAD_SAFE void ida_export emovi (const fpvalue_t &a, eNI vout)
 Move eNI => eNE.
idaman IEEE_DEPRECATED THREAD_SAFE int ida_export eshift (eNI x, int sc)
 Move eNE => eNI.
idaman IEEE_DEPRECATED THREAD_SAFE bool ida_export emdnorm (eNI s, bool lost, bool subflg, int32 exp, int rndbase)
 Shift NI format up (+) or down.

Variables

max_exp values

Common values for max_exp (for IEEE floating point values)

const uint32 MAXEXP_FLOAT = 0x80
 maximum exponent for 32-bit float
const uint32 MAXEXP_DOUBLE = 0x400
 maximum exponent for 64-bit double
const uint32 MAXEXP_LNGDBL = 0x4000
 maximum exponent for 80-bit long double

Detailed Description

IEEE floating point functions.

Typedef Documentation

◆ eNI

typedef uint16 eNI[IEEE_NI]

There is one more internal format used by IDA to store intermediate values.

  • 0 : sign (0/1)
  • 1 : exponent (based of #IEEE_EXONE). If exp = 0, value = 0.
  • 2 : high word of mantissa (always zero after normalize)

Enumeration Type Documentation

◆ fpvalue_kind_t

Floating value kinds.

They are useful when checking for NaN/Inf

Enumerator
FPV_BADARG 

wrong value of max_exp

FPV_NORM 

regular value

FPV_NAN 

NaN.

FPV_PINF 

positive infinity

FPV_NINF 

negative infinity

◆ fpvalue_error_t

Enumerator
REAL_ERROR_OK 

no error

REAL_ERROR_FORMAT 

realcvt: not supported format for current .idp

REAL_ERROR_RANGE 

realcvt: number too big (small) for store (mem NOT modified)

REAL_ERROR_BADDATA 

realcvt: illegal real data for load (IEEE data not filled)

REAL_ERROR_FPOVER 

floating overflow or underflow

REAL_ERROR_BADSTR 

asctoreal: illegal input string

REAL_ERROR_ZERODIV 

ediv: divide by 0

REAL_ERROR_INTOVER 

eetol*: integer overflow

Function Documentation

◆ ieee_realcvt()

idaman THREAD_SAFE fpvalue_error_t ida_export ieee_realcvt ( void * m,
fpvalue_t * out,
uint16 swt )

Standard IEEE 754 floating point conversion function.

Parameters
mpointer to data
outinternal IEEE format data
swtoperation:
  • 000: load trunc. float (DEC ^F) 2 bytes (m->e)
  • 001: load float 4 bytes (m->e)
  • 003: load double 8 bytes (m->e)
  • 004: load long double 10 bytes (m->e)
  • 005: load long double 12 bytes (m->e)
  • 010: store trunc. float (DEC ^F) 2 bytes (e->m)
  • 011: store float 4 bytes (e->m)
  • 013: store double 8 bytes (e->m)
  • 014: store long double 10 bytes (e->m)
  • 015: store long double 12 bytes (e->m) bit 0x80 forces little endian even for big endian processors
Returns
fpvalue_error_t

◆ realtoasc()

idaman THREAD_SAFE void ida_export realtoasc ( char * buf,
size_t bufsize,
const fpvalue_t & x,
uint mode )

◆ asctoreal()

idaman THREAD_SAFE fpvalue_error_t ida_export asctoreal ( const char ** sss,
fpvalue_t * out )

◆ eltoe()

idaman THREAD_SAFE void ida_export eltoe ( sval_t l,
fpvalue_t * vout )

◆ eltoe64()

idaman THREAD_SAFE void ida_export eltoe64 ( int64 l,
fpvalue_t * vout )

◆ eltoe64u()

idaman THREAD_SAFE void ida_export eltoe64u ( uint64 l,
fpvalue_t * vout )

◆ eetol()

idaman THREAD_SAFE fpvalue_error_t ida_export eetol ( sval_t * out,
const fpvalue_t & a,
bool roundflg )

◆ eetol64()

idaman THREAD_SAFE fpvalue_error_t ida_export eetol64 ( int64 * out,
const fpvalue_t & a,
bool roundflg )

◆ eetol64u()

idaman THREAD_SAFE fpvalue_error_t ida_export eetol64u ( uint64 * out,
const fpvalue_t & a,
bool roundflg )

◆ eldexp()

idaman THREAD_SAFE fpvalue_error_t ida_export eldexp ( const fpvalue_t & a,
int32 pwr2,
fpvalue_t * zout )

◆ eadd()

idaman THREAD_SAFE fpvalue_error_t ida_export eadd ( const fpvalue_t & a,
const fpvalue_t & b,
fpvalue_t * zout,
bool subflg )

◆ emul()

idaman THREAD_SAFE fpvalue_error_t ida_export emul ( const fpvalue_t & a,
const fpvalue_t & b,
fpvalue_t * zout )

◆ ediv()

idaman THREAD_SAFE fpvalue_error_t ida_export ediv ( const fpvalue_t & a,
const fpvalue_t & b,
fpvalue_t * zout )

◆ ecmp()

idaman THREAD_SAFE int ida_export ecmp ( const fpvalue_t & a,
const fpvalue_t & b )

◆ get_fpvalue_kind()

idaman THREAD_SAFE fpvalue_kind_t ida_export get_fpvalue_kind ( const fpvalue_t & a,
uint16 reserved = 0 )

◆ ecleaz()

IEEE_DEPRECATED void ecleaz ( eNI x)
inline

◆ emovo()

idaman IEEE_DEPRECATED THREAD_SAFE void ida_export emovo ( const eNI a,
fpvalue_t * vout )

◆ emovi()

idaman IEEE_DEPRECATED THREAD_SAFE void ida_export emovi ( const fpvalue_t & a,
eNI vout )

Move eNI => eNE.

◆ eshift()

idaman IEEE_DEPRECATED THREAD_SAFE int ida_export eshift ( eNI x,
int sc )

Move eNE => eNI.

◆ emdnorm()

idaman IEEE_DEPRECATED THREAD_SAFE bool ida_export emdnorm ( eNI s,
bool lost,
bool subflg,
int32 exp,
int rndbase )

Shift NI format up (+) or down.

Normalize and round off.

Parameters
sthe internal format number to be rounded
lostindicates whether or not the number is exact. this is the so-called sticky bit.
subflgindicates whether the number was obtained by a subtraction operation. In that case if lost is nonzero then the number is slightly smaller than indicated.
expthe biased exponent, which may be negative. the exponent field of "s" is ignored but is replaced by "exp" as adjusted by normalization and rounding.
rndbaseif 0 => is the rounding control. else is processor defined base (rndprc)
Returns
success

Variable Documentation

◆ MAXEXP_FLOAT

const uint32 MAXEXP_FLOAT = 0x80

maximum exponent for 32-bit float

◆ MAXEXP_DOUBLE

const uint32 MAXEXP_DOUBLE = 0x400

maximum exponent for 64-bit double

◆ MAXEXP_LNGDBL

const uint32 MAXEXP_LNGDBL = 0x4000

maximum exponent for 80-bit long double