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; }
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; }
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; } }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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)); }
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; }
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; }
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; }
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; }
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; }
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; }