Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /* IEEE754 floating point arithmetic
0003  * single precision
0004  */
0005 /*
0006  * MIPS floating point support
0007  * Copyright (C) 1994-2000 Algorithmics Ltd.
0008  */
0009 
0010 #include "ieee754sp.h"
0011 
0012 int ieee754sp_cmp(union ieee754sp x, union ieee754sp y, int cmp, int sig)
0013 {
0014     int vx;
0015     int vy;
0016 
0017     COMPXSP;
0018     COMPYSP;
0019 
0020     EXPLODEXSP;
0021     EXPLODEYSP;
0022     FLUSHXSP;
0023     FLUSHYSP;
0024     ieee754_clearcx();  /* Even clear inexact flag here */
0025 
0026     if (ieee754_class_nan(xc) || ieee754_class_nan(yc)) {
0027         if (sig ||
0028             xc == IEEE754_CLASS_SNAN || yc == IEEE754_CLASS_SNAN)
0029             ieee754_setcx(IEEE754_INVALID_OPERATION);
0030         return (cmp & IEEE754_CUN) != 0;
0031     } else {
0032         vx = x.bits;
0033         vy = y.bits;
0034 
0035         if (vx < 0)
0036             vx = -vx ^ SP_SIGN_BIT;
0037         if (vy < 0)
0038             vy = -vy ^ SP_SIGN_BIT;
0039 
0040         if (vx < vy)
0041             return (cmp & IEEE754_CLT) != 0;
0042         else if (vx == vy)
0043             return (cmp & IEEE754_CEQ) != 0;
0044         else
0045             return (cmp & IEEE754_CGT) != 0;
0046     }
0047 }