| IDA SDK

Classes | Functions | Macros | Enumerations
ieee.h File Reference

## Detailed Description

IEEE floating point functions.

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

## 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. More...
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)

## Macros
#define | FPVAL_NWORDS 8
| number of words in fpvalue_t
#define | IEEE_EXONE (0x3FFF)
| The exponent of 1.0.
#define | E_SPECIAL_EXP 0x7FFF
| Exponent in fpvalue_t for NaN and Inf.

## 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 }

## 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

## Enumeration Type Documentation

## ◆ fpvalue_kind_t

enum 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

enum 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

  m | pointer to data
  out | internal IEEE format data
  swt | operation: 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