162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci/* IEEE754 floating point arithmetic 362306a36Sopenharmony_ci * double precision: common utilities 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci/* 662306a36Sopenharmony_ci * MIPS floating point support 762306a36Sopenharmony_ci * Copyright (C) 1994-2000 Algorithmics Ltd. 862306a36Sopenharmony_ci */ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#include "ieee754dp.h" 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ciint ieee754dp_cmp(union ieee754dp x, union ieee754dp y, int cmp, int sig) 1362306a36Sopenharmony_ci{ 1462306a36Sopenharmony_ci s64 vx; 1562306a36Sopenharmony_ci s64 vy; 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci COMPXDP; 1862306a36Sopenharmony_ci COMPYDP; 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci EXPLODEXDP; 2162306a36Sopenharmony_ci EXPLODEYDP; 2262306a36Sopenharmony_ci FLUSHXDP; 2362306a36Sopenharmony_ci FLUSHYDP; 2462306a36Sopenharmony_ci ieee754_clearcx(); /* Even clear inexact flag here */ 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci if (ieee754_class_nan(xc) || ieee754_class_nan(yc)) { 2762306a36Sopenharmony_ci if (sig || 2862306a36Sopenharmony_ci xc == IEEE754_CLASS_SNAN || yc == IEEE754_CLASS_SNAN) 2962306a36Sopenharmony_ci ieee754_setcx(IEEE754_INVALID_OPERATION); 3062306a36Sopenharmony_ci return (cmp & IEEE754_CUN) != 0; 3162306a36Sopenharmony_ci } else { 3262306a36Sopenharmony_ci vx = x.bits; 3362306a36Sopenharmony_ci vy = y.bits; 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci if (vx < 0) 3662306a36Sopenharmony_ci vx = -vx ^ DP_SIGN_BIT; 3762306a36Sopenharmony_ci if (vy < 0) 3862306a36Sopenharmony_ci vy = -vy ^ DP_SIGN_BIT; 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci if (vx < vy) 4162306a36Sopenharmony_ci return (cmp & IEEE754_CLT) != 0; 4262306a36Sopenharmony_ci else if (vx == vy) 4362306a36Sopenharmony_ci return (cmp & IEEE754_CEQ) != 0; 4462306a36Sopenharmony_ci else 4562306a36Sopenharmony_ci return (cmp & IEEE754_CGT) != 0; 4662306a36Sopenharmony_ci } 4762306a36Sopenharmony_ci} 48