root/arch/mips/math-emu/ieee754sp.h

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

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. ieee754sp_finite
  2. buildsp

   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 /*
   3  * IEEE754 floating point
   4  * double precision internal header file
   5  */
   6 /*
   7  * MIPS floating point support
   8  * Copyright (C) 1994-2000 Algorithmics Ltd.
   9  */
  10 
  11 #include <linux/compiler.h>
  12 
  13 #include "ieee754int.h"
  14 
  15 #define assert(expr) ((void)0)
  16 
  17 #define SP_EBIAS        127
  18 #define SP_EMIN         (-126)
  19 #define SP_EMAX         127
  20 #define SP_FBITS        23
  21 #define SP_MBITS        23
  22 
  23 #define SP_MBIT(x)      ((u32)1 << (x))
  24 #define SP_HIDDEN_BIT   SP_MBIT(SP_FBITS)
  25 #define SP_SIGN_BIT     SP_MBIT(31)
  26 
  27 #define SPSIGN(sp)      (sp.sign)
  28 #define SPBEXP(sp)      (sp.bexp)
  29 #define SPMANT(sp)      (sp.mant)
  30 
  31 static inline int ieee754sp_finite(union ieee754sp x)
  32 {
  33         return SPBEXP(x) != SP_EMAX + 1 + SP_EBIAS;
  34 }
  35 
  36 /* 64 bit right shift with rounding */
  37 #define XSPSRS64(v, rs)                                         \
  38         (((rs) >= 64) ? ((v) != 0) : ((v) >> (rs)) | ((v) << (64-(rs)) != 0))
  39 
  40 /* 3bit extended single precision sticky right shift */
  41 #define XSPSRS(v, rs)                                           \
  42         ((rs > (SP_FBITS+3))?1:((v) >> (rs)) | ((v) << (32-(rs)) != 0))
  43 
  44 #define XSPSRS1(m) \
  45         ((m >> 1) | (m & 1))
  46 
  47 #define SPXSRSX1() \
  48         (xe++, (xm = XSPSRS1(xm)))
  49 
  50 #define SPXSRSY1() \
  51         (ye++, (ym = XSPSRS1(ym)))
  52 
  53 /* convert denormal to normalized with extended exponent */
  54 #define SPDNORMx(m,e) \
  55         while ((m >> SP_FBITS) == 0) { m <<= 1; e--; }
  56 #define SPDNORMX        SPDNORMx(xm, xe)
  57 #define SPDNORMY        SPDNORMx(ym, ye)
  58 #define SPDNORMZ        SPDNORMx(zm, ze)
  59 
  60 static inline union ieee754sp buildsp(int s, int bx, unsigned int m)
  61 {
  62         union ieee754sp r;
  63 
  64         assert((s) == 0 || (s) == 1);
  65         assert((bx) >= SP_EMIN - 1 + SP_EBIAS
  66                && (bx) <= SP_EMAX + 1 + SP_EBIAS);
  67         assert(((m) >> SP_FBITS) == 0);
  68 
  69         r.sign = s;
  70         r.bexp = bx;
  71         r.mant = m;
  72 
  73         return r;
  74 }
  75 
  76 extern union ieee754sp __cold ieee754sp_nanxcpt(union ieee754sp);
  77 extern union ieee754sp ieee754sp_format(int, int, unsigned);

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