int _Q_flt(const long double a, const long double b) { FP_DECL_EX; FP_DECL_Q(A); FP_DECL_Q(B); int r; FP_UNPACK_RAW_Q(A, a); FP_UNPACK_RAW_Q(B, b); FP_CMP_Q(r, B, A, 3, 2); FP_HANDLE_EXCEPTIONS; return (r == 1); }
int _Q_cmpe(const long double a, const long double b) { FP_DECL_EX; FP_DECL_Q(A); FP_DECL_Q(B); int r; FP_UNPACK_RAW_Q(A, a); FP_UNPACK_RAW_Q(B, b); FP_CMP_Q(r, B, A, 3, 2); if (r == -1) r = 2; FP_HANDLE_EXCEPTIONS; return r; }
CMPtype __letf2(TFtype a, TFtype b) { FP_DECL_EX; FP_DECL_Q(A); FP_DECL_Q(B); CMPtype r; FP_UNPACK_RAW_Q(A, a); FP_UNPACK_RAW_Q(B, b); FP_CMP_Q(r, A, B, 2); if (r == 2 && (FP_ISSIGNAN_Q(A) || FP_ISSIGNAN_Q(B))) FP_SET_EXCEPTION(FP_EX_INVALID); FP_HANDLE_EXCEPTIONS; return r; }
int _Q_flt(const long double a, const long double b) { FP_DECL_EX; FP_DECL_Q(A); FP_DECL_Q(B); int r; FP_UNPACK_RAW_Q(A, a); FP_UNPACK_RAW_Q(B, b); FP_CMP_Q(r, B, A, 3); if (r == 3) FP_SET_EXCEPTION(FP_EX_INVALID); FP_HANDLE_EXCEPTIONS; return (r == 1); }
CMPtype __getf2 (TFtype a, TFtype b) { FP_DECL_EX; FP_DECL_Q (A); FP_DECL_Q (B); CMPtype r; FP_INIT_EXCEPTIONS; FP_UNPACK_RAW_Q (A, a); FP_UNPACK_RAW_Q (B, b); FP_CMP_Q (r, A, B, -2, 2); FP_HANDLE_EXCEPTIONS; return r; }
int _Q_cmp(const long double a, const long double b) { FP_DECL_EX; FP_DECL_Q(A); FP_DECL_Q(B); int r; FP_UNPACK_RAW_Q(A, a); FP_UNPACK_RAW_Q(B, b); FP_CMP_Q(r, B, A, 3); if (r == -1) r = 2; if (r == 3 && (FP_ISSIGNAN_Q(A) || FP_ISSIGNAN_Q(B))) FP_SET_EXCEPTION(FP_EX_INVALID); FP_HANDLE_EXCEPTIONS; return r; }
int FCMPEQ(void *rd, void *rs2, void *rs1) { FP_DECL_Q(A); FP_DECL_Q(B); long ret; int fccno = ((long)rd) & 3; unsigned long fsr; rd = (void *)(((long)rd)&~3); __FP_UNPACK_Q(A, rs1); __FP_UNPACK_Q(B, rs2); FP_CMP_Q(ret, B, A, 3); if (ret == -1) ret = 2; fsr = *(unsigned long *)rd; switch (fccno) { case 0: fsr &= ~0xc00; fsr |= (ret << 10); break; case 1: fsr &= ~0x300000000UL; fsr |= (ret << 32); break; case 2: fsr &= ~0xc00000000UL; fsr |= (ret << 34); break; case 3: fsr &= ~0x3000000000UL; fsr |= (ret << 36); break; } *(unsigned long *)rd = fsr; return 1; }