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

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

DEFINITIONS

This source file includes following definitions.
  1. ieee754sp_fint

   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 
  12 union ieee754sp ieee754sp_fint(int x)
  13 {
  14         unsigned int xm;
  15         int xe;
  16         int xs;
  17 
  18         ieee754_clearcx();
  19 
  20         if (x == 0)
  21                 return ieee754sp_zero(0);
  22         if (x == 1 || x == -1)
  23                 return ieee754sp_one(x < 0);
  24         if (x == 10 || x == -10)
  25                 return ieee754sp_ten(x < 0);
  26 
  27         xs = (x < 0);
  28         if (xs) {
  29                 if (x == (1 << 31))
  30                         xm = ((unsigned) 1 << 31);      /* max neg can't be safely negated */
  31                 else
  32                         xm = -x;
  33         } else {
  34                 xm = x;
  35         }
  36         xe = SP_FBITS + 3;
  37 
  38         if (xm >> (SP_FBITS + 1 + 3)) {
  39                 /* shunt out overflow bits
  40                  */
  41                 while (xm >> (SP_FBITS + 1 + 3)) {
  42                         SPXSRSX1();
  43                 }
  44         } else {
  45                 /* normalize in grs extended single precision
  46                  */
  47                 while ((xm >> (SP_FBITS + 3)) == 0) {
  48                         xm <<= 1;
  49                         xe--;
  50                 }
  51         }
  52         return ieee754sp_format(xs, xe, xm);
  53 }

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