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

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

DEFINITIONS

This source file includes following definitions.
  1. ieee754dp_fint

   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 union ieee754dp ieee754dp_fint(int x)
  13 {
  14         u64 xm;
  15         int xe;
  16         int xs;
  17 
  18         ieee754_clearcx();
  19 
  20         if (x == 0)
  21                 return ieee754dp_zero(0);
  22         if (x == 1 || x == -1)
  23                 return ieee754dp_one(x < 0);
  24         if (x == 10 || x == -10)
  25                 return ieee754dp_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 
  37         /* normalize - result can never be inexact or overflow */
  38         xe = DP_FBITS;
  39         while ((xm >> DP_FBITS) == 0) {
  40                 xm <<= 1;
  41                 xe--;
  42         }
  43         return builddp(xs, xe + DP_EBIAS, xm & ~DP_HIDDEN_BIT);
  44 }

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