sp_cmp.c (918B)
1// SPDX-License-Identifier: GPL-2.0-only 2/* IEEE754 floating point arithmetic 3 * single precision 4 */ 5/* 6 * MIPS floating point support 7 * Copyright (C) 1994-2000 Algorithmics Ltd. 8 */ 9 10#include "ieee754sp.h" 11 12int ieee754sp_cmp(union ieee754sp x, union ieee754sp y, int cmp, int sig) 13{ 14 int vx; 15 int vy; 16 17 COMPXSP; 18 COMPYSP; 19 20 EXPLODEXSP; 21 EXPLODEYSP; 22 FLUSHXSP; 23 FLUSHYSP; 24 ieee754_clearcx(); /* Even clear inexact flag here */ 25 26 if (ieee754_class_nan(xc) || ieee754_class_nan(yc)) { 27 if (sig || 28 xc == IEEE754_CLASS_SNAN || yc == IEEE754_CLASS_SNAN) 29 ieee754_setcx(IEEE754_INVALID_OPERATION); 30 return (cmp & IEEE754_CUN) != 0; 31 } else { 32 vx = x.bits; 33 vy = y.bits; 34 35 if (vx < 0) 36 vx = -vx ^ SP_SIGN_BIT; 37 if (vy < 0) 38 vy = -vy ^ SP_SIGN_BIT; 39 40 if (vx < vy) 41 return (cmp & IEEE754_CLT) != 0; 42 else if (vx == vy) 43 return (cmp & IEEE754_CEQ) != 0; 44 else 45 return (cmp & IEEE754_CGT) != 0; 46 } 47}