root/arch/mips/math-emu/dp_cmp.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. ieee754dp_cmp

   1 // SPDX-License-Identifier: GPL-2.0-only
   2 /* IEEE754 floating point arithmetic
   3  * double precision: common utilities
   4  */
   5 /*
   6  * MIPS floating point support
   7  * Copyright (C) 1994-2000 Algorithmics Ltd.
   8  */
   9 
  10 #include "ieee754dp.h"
  11 
  12 int ieee754dp_cmp(union ieee754dp x, union ieee754dp y, int cmp, int sig)
  13 {
  14         s64 vx;
  15         s64 vy;
  16 
  17         COMPXDP;
  18         COMPYDP;
  19 
  20         EXPLODEXDP;
  21         EXPLODEYDP;
  22         FLUSHXDP;
  23         FLUSHYDP;
  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 ^ DP_SIGN_BIT;
  37                 if (vy < 0)
  38                         vy = -vy ^ DP_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 }

/* [<][>][^][v][top][bottom][index][help] */