0001
0002
0003
0004
0005
0006
0007
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();
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 }