Ejemplo n.º 1
0
UTItype
__fixunstfti (TFtype a)
{
  FP_DECL_EX;
  FP_DECL_Q (A);
  UTItype r;

  FP_INIT_EXCEPTIONS;
  FP_UNPACK_RAW_Q (A, a);
  FP_TO_INT_Q (r, A, TI_BITS, 0);
  FP_HANDLE_EXCEPTIONS;

  return r;
}
Ejemplo n.º 2
0
DItype
__fixtfdi (TFtype a)
{
  FP_DECL_EX;
  FP_DECL_Q (A);
  UDItype r;

  FP_INIT_EXCEPTIONS;
  FP_UNPACK_RAW_Q (A, a);
  FP_TO_INT_Q (r, A, DI_BITS, 1);
  FP_HANDLE_EXCEPTIONS;

  return r;
}
Ejemplo n.º 3
0
int __ieee754_ilogbl (long double x)
{
  FP_DECL_EX;
  FP_DECL_Q(X);

/*
  FP_UNPACK_Q(X, x);
  switch (X_c)
    {
    case FP_CLS_ZERO:
      return FP_ILOGB0;
    case FP_CLS_NAN:
    case FP_CLS_INF:
      return FP_ILOGBNAN;
    default:
      return X_e;
    }
 */
  FP_UNPACK_RAW_Q(X, x);
  switch (X_e)
    {
    default:
      return X_e - _FP_EXPBIAS_Q;
    case 0:
#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
      if (_FP_FRAC_ZEROP_4(X))
	return FP_ILOGB0;
      else
	{
	  _FP_I_TYPE shift;
	  _FP_FRAC_CLZ_4(shift, X);
	  shift -= _FP_FRACXBITS_Q;
	  return X_e - _FP_EXPBIAS_Q - 1 + shift;
	}
#else
      if (_FP_FRAC_ZEROP_2(X))
	return FP_ILOGB0;
      else
	{
	  _FP_I_TYPE shift;
	  _FP_FRAC_CLZ_2(shift, X);
	  shift -= _FP_FRACXBITS_Q;
	  return X_e - _FP_EXPBIAS_Q - 1 + shift;
	}
#endif
    case _FP_EXPBIAS_Q:
      return FP_ILOGBNAN;
    }
}
Ejemplo n.º 4
0
float
__fsubl (_Float128 x, _Float128 y)
{
  FP_DECL_EX;
  FP_DECL_Q (X);
  FP_DECL_Q (Y);
  FP_DECL_Q (R);
  FP_DECL_S (RN);
  float ret;

  FP_INIT_ROUNDMODE;
  FP_UNPACK_SEMIRAW_Q (X, x);
  FP_UNPACK_SEMIRAW_Q (Y, y);
  FP_SUB_Q (R, X, Y);
#if _FP_W_TYPE_SIZE < 64
  FP_TRUNC (S, Q, 1, 4, RN, R);
#else
  FP_TRUNC (S, Q, 1, 2, RN, R);
#endif
  FP_PACK_SEMIRAW_S (ret, RN);
  FP_HANDLE_EXCEPTIONS;
  CHECK_NARROW_SUB (ret, x, y);
  return ret;
}
Ejemplo n.º 5
0
long double __frexpl(long double arg, int *exp)
{
  FP_DECL_EX;
  FP_DECL_Q(A);
  long double r;

  *exp = 0;
  FP_UNPACK_Q(A, arg);
  if (A_c != FP_CLS_NORMAL)
    return arg;
  *exp = A_e + 1;
  A_e = -1;
  FP_PACK_Q(r, A);

  return r;
}
Ejemplo n.º 6
0
long double _Q_stoq(const float a)
{
  FP_DECL_EX;
  FP_DECL_S(A);
  FP_DECL_Q(C);
  long double c;

  FP_UNPACK_RAW_S(A, a);
#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
  FP_EXTEND(Q,S,4,1,C,A);
#else
  FP_EXTEND(Q,S,2,1,C,A);
#endif
  FP_PACK_RAW_Q(c, C);
  FP_HANDLE_EXCEPTIONS;
  return c;
}
long double _q_dtoq(const double a)
{
  FP_DECL_EX;
  FP_DECL_D(A);
  FP_DECL_Q(C);
  long double c;

  FP_INIT_ROUNDMODE;
  FP_UNPACK_RAW_D(A, a);
#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
  FP_EXTEND(Q,D,4,2,C,A);
#else
  FP_EXTEND(Q,D,2,1,C,A);
#endif
  FP_PACK_RAW_Q(c, C);
  FP_HANDLE_EXCEPTIONS;
  return c;
}
Ejemplo n.º 8
0
double __trunctfdf2(long double a)
{
  FP_DECL_EX;
  FP_DECL_Q(A);
  FP_DECL_D(R);
  double r;

  FP_INIT_ROUNDMODE;
  FP_UNPACK_Q(A, a);
#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
  FP_CONV(D,Q,2,4,R,A);
#else
  FP_CONV(D,Q,1,2,R,A);
#endif
  FP_PACK_D(r, R);
  FP_HANDLE_EXCEPTIONS;

  return r;
}
Ejemplo n.º 9
0
double _Q_qtod(const long double a)
{
  FP_DECL_EX;
  FP_DECL_Q(A);
  FP_DECL_D(R);
  double r;

  FP_INIT_ROUNDMODE;
  FP_UNPACK_SEMIRAW_Q(A, a);
#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
  FP_TRUNC(D,Q,2,4,R,A);
#else
  FP_TRUNC(D,Q,1,2,R,A);
#endif
  FP_PACK_SEMIRAW_D(r, R);
  FP_HANDLE_EXCEPTIONS;

  return r;
}
Ejemplo n.º 10
0
SFtype __trunctfsf2(TFtype a)
{
  FP_DECL_EX;
  FP_DECL_Q(A);
  FP_DECL_S(R);
  SFtype r;

  FP_INIT_ROUNDMODE;
  FP_UNPACK_SEMIRAW_Q(A, a);
#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
  FP_TRUNC(S,Q,1,4,R,A);
#else
  FP_TRUNC(S,Q,1,2,R,A);
#endif
  FP_PACK_SEMIRAW_S(r, R);
  FP_HANDLE_EXCEPTIONS;

  return r;
}
float _q_qtos(const long double a)
{
  FP_DECL_EX;
  FP_DECL_Q(A);
  FP_DECL_S(R);
  float r;

  FP_INIT_ROUNDMODE;
  FP_UNPACK_SEMIRAW_Q(A, a);
#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
  FP_TRUNC(S,Q,1,4,R,A);
#else
  FP_TRUNC(S,Q,1,2,R,A);
#endif
  FP_PACK_SEMIRAW_S(r, R);
  FP_HANDLE_EXCEPTIONS;

  return r;
}
Ejemplo n.º 12
0
TFtype __extenddftf2(DFtype a)
{
FP_DECL_EX;
FP_DECL_D(A);
FP_DECL_Q(R);
TFtype r;

FP_INIT_ROUNDMODE;
FP_UNPACK_RAW_D(A, a);
#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
FP_EXTEND(Q,D,4,2,R,A);
#else
FP_EXTEND(Q,D,2,1,R,A);
#endif
FP_PACK_RAW_Q(r, R);
FP_HANDLE_EXCEPTIONS;

return r;
}
Ejemplo n.º 13
0
void _Qp_stoq(long double *c, const float a)
{
  FP_DECL_EX;
  FP_DECL_S(A);
  FP_DECL_Q(C);

  FP_INIT_ROUNDMODE;
  FP_UNPACK_RAW_S(A, a);
#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
  FP_EXTEND(Q,S,4,1,C,A);
#else
  FP_EXTEND(Q,S,2,1,C,A);
#endif
  FP_PACK_RAW_QP(c, C);
  QP_HANDLE_EXCEPTIONS(__asm (
"	fstoq %1, %%f60\n"
"	std %%f60, [%0]\n"
"	std %%f62, [%0+8]\n"
"	" : : "r" (c), "f" (a) : QP_CLOBBER));
}
Ejemplo n.º 14
0
TFtype
__extendxftf2 (XFtype a)
{
  FP_DECL_EX;
  FP_DECL_E (A);
  FP_DECL_Q (R);
  TFtype r;

  FP_INIT_TRAPPING_EXCEPTIONS;
  FP_UNPACK_RAW_E (A, a);
#if _FP_W_TYPE_SIZE < 64
  FP_EXTEND (Q, E, 4, 4, R, A);
#else
  FP_EXTEND (Q, E, 2, 2, R, A);
#endif
  FP_PACK_RAW_Q (r, R);
  FP_HANDLE_EXCEPTIONS;

  return r;
}
Ejemplo n.º 15
0
TFtype
__extendhftf2 (HFtype a)
{
  FP_DECL_EX;
  FP_DECL_H (A);
  FP_DECL_Q (R);
  TFtype r;

  FP_INIT_EXCEPTIONS;
  FP_UNPACK_RAW_H (A, a);
#if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
  FP_EXTEND (Q, H, 4, 1, R, A);
#else
  FP_EXTEND (Q, H, 2, 1, R, A);
#endif
  FP_PACK_RAW_Q (r, R);
  FP_HANDLE_EXCEPTIONS;

  return r;
}
Ejemplo n.º 16
0
TFtype
__extenddftf2 (DFtype a)
{
  FP_DECL_EX;
  FP_DECL_D (A);
  FP_DECL_Q (R);
  TFtype r;

  FP_INIT_EXCEPTIONS;
  FP_UNPACK_RAW_D (A, a);
#if _FP_W_TYPE_SIZE < 64
  FP_EXTEND (Q, D, 4, 2, R, A);
#else
  FP_EXTEND (Q, D, 2, 1, R, A);
#endif
  FP_PACK_RAW_Q (r, R);
  FP_HANDLE_EXCEPTIONS;

  return r;
}
Ejemplo n.º 17
0
XFtype
__trunctfxf2 (TFtype a)
{
  FP_DECL_EX;
  FP_DECL_Q (A);
  FP_DECL_E (R);
  XFtype r;

  FP_INIT_ROUNDMODE;
  FP_UNPACK_SEMIRAW_Q (A, a);
#if _FP_W_TYPE_SIZE < 64
  FP_TRUNC (E, Q, 4, 4, R, A);
#else
  FP_TRUNC (E, Q, 2, 2, R, A);
#endif
  FP_PACK_SEMIRAW_E (r, R);
  FP_HANDLE_EXCEPTIONS;

  return r;
}
Ejemplo n.º 18
0
long
_OtsCvtXQ (long al, long ah, long _round)
{
  FP_DECL_EX;
  FP_DECL_Q(A);
  unsigned long r;
  long s;

  /* If bit 3 is set, then integer overflow detection is requested.  */
  s = _round & 8 ? 1 : -1;
  _round = _round & 3;

  FP_INIT_ROUNDMODE;
  FP_UNPACK_RAW_Q(A, a);
  FP_TO_INT_Q(r, A, 64, s);

  if (s > 0 && (_fex &= FP_EX_INVALID))
    FP_HANDLE_EXCEPTIONS;

  return r;
}
Ejemplo n.º 19
0
long double __scalblnl(long double arg, int exp)
{
  FP_DECL_EX;
  FP_DECL_Q(A);
  long double r;

  FP_UNPACK_Q(A, arg);
  switch (A_c)
    {
    case FP_CLS_ZERO:
      return arg;
    case FP_CLS_NAN:
    case FP_CLS_INF:
      FP_HANDLE_EXCEPTIONS;
      return arg;
    }
  A_e += exp;
  FP_PACK_Q(r, A);
  FP_HANDLE_EXCEPTIONS;

  return r;
}