extmath.h 2.5 KB
/* */

#ifndef EXTENDED_MATH_HEADER
#define EXTENDED_MATH_HEADER

/* bitmask for each FP operation has to correspond to mask defined in clang/lib/Basic/Targets/Sparc.h */

#define EXTMATH_FPOP_MASK_ADD   (0x00000001)    /* FPOP_ADD */
#define EXTMATH_FPOP_MASK_SUB   (0x00000002)    /* FPOP_SUB */
#define EXTMATH_FPOP_MASK_MUL   (0x00000004)    /* FPOP_MUL */
#define EXTMATH_FPOP_MASK_DIV   (0x00000008)    /* FPOP_DIV */
#define EXTMATH_FPOP_MASK_MULEX (0x00000010)    /* FPOP_MULEX */
#define EXTMATH_FPOP_MASK_SQRT  (0x00000020)    /* FPOP_SQRT */
#define EXTMATH_FPOP_MASK_CMP   (0x00000040)    /* FPOP_CMP */
#define EXTMATH_FPOP_MASK_CI2F  (0x00000080)    /* FPOP_CI2F */
#define EXTMATH_FPOP_MASK_CF2I  (0x00000100)    /* FPOP_CF2I */
#define EXTMATH_FPOP_MASK_CFUP  (0x00000200)    /* FPOP_CFUP */
#define EXTMATH_FPOP_MASK_CFDN  (0x00000400)    /* FPOP_CFDN */
#define EXTMATH_FPOP_MASK_ABS   (0x00000800)    /* FPOP_ABS */
#define EXTMATH_FPOP_MASK_PACK  (0x00001000)    /* FPOP_PACK */
#define EXTMATH_FPOP_MASK_MOV   (0x00002000)    /* FPOP_MOV */
#define EXTMATH_FPOP_MASK_NEG   (0x00004000)    /* FPOP_NEG */

#ifndef SOFT_FOPS_HALF
  #define SOFT_FOPS_HALF    (0)
#endif /* SOFT_FOPS_HALF */

#ifndef SOFT_FOPS_SINGLE
  #define SOFT_FOPS_SINGLE  (0)
#endif /* SOFT_FOPS_SINGLE */

#ifndef SOFT_FOPS_DOUBLE
  #define SOFT_FOPS_DOUBLE  (0)
#endif /* SOFT_FOPS_DOUBLE */


#include <stdint.h>

typedef union {
  half value;
  uint16_t word;
} ieee_half_shape_type;

#define GET_HALF_WORD(i,d)                                                     \
  do {                                                                         \
    ieee_half_shape_type gf_u;                                                 \
    gf_u.value = (d);                                                          \
    (i) = gf_u.word;                                                           \
  } while(0)

#define SET_HALF_WORD(d,i)                                                     \
  do {                                                                         \
    ieee_half_shape_type sf_u;                                                 \
    sf_u.word = (i);                                                           \
    (d) = sf_u.value;                                                          \
  } while (0)




extern half fabsh(half x);
//extern half fmovh(half);
extern half floorh(half x);
extern half logh(half x);
extern half powh(half x, half y);
extern half sqrth(half x);

extern double sqrt(double x);

#endif /* EXTENDED_MATH_HEADER */