~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/mips/math-emu/ieee754sp.h

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  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);
 78 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php