linux/arch/mips/math-emu/sp_cmp.c
<<
>>
Prefs
   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}
  48