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

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

Version: ~ [ linux-6.11-rc3 ] ~ [ linux-6.10.4 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.45 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.104 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.164 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.223 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.281 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.319 ] ~ [ 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 DP_EBIAS        1023
 18 #define DP_EMIN         (-1022)
 19 #define DP_EMAX         1023
 20 #define DP_FBITS        52
 21 #define DP_MBITS        52
 22 
 23 #define DP_MBIT(x)      ((u64)1 << (x))
 24 #define DP_HIDDEN_BIT   DP_MBIT(DP_FBITS)
 25 #define DP_SIGN_BIT     DP_MBIT(63)
 26 
 27 #define DPSIGN(dp)      (dp.sign)
 28 #define DPBEXP(dp)      (dp.bexp)
 29 #define DPMANT(dp)      (dp.mant)
 30 
 31 static inline int ieee754dp_finite(union ieee754dp x)
 32 {
 33         return DPBEXP(x) != DP_EMAX + 1 + DP_EBIAS;
 34 }
 35 
 36 /* 3bit extended double precision sticky right shift */
 37 #define XDPSRS(v,rs)    \
 38         ((rs > (DP_FBITS+3))?1:((v) >> (rs)) | ((v) << (64-(rs)) != 0))
 39 
 40 #define XDPSRSX1() \
 41         (xe++, (xm = (xm >> 1) | (xm & 1)))
 42 
 43 #define XDPSRS1(v)      \
 44         (((v) >> 1) | ((v) & 1))
 45 
 46 /* 32bit * 32bit => 64bit unsigned integer multiplication */
 47 #define DPXMULT(x, y)   ((u64)(x) * (u64)y)
 48 
 49 /* convert denormal to normalized with extended exponent */
 50 #define DPDNORMx(m,e) \
 51         while ((m >> DP_FBITS) == 0) { m <<= 1; e--; }
 52 #define DPDNORMX        DPDNORMx(xm, xe)
 53 #define DPDNORMY        DPDNORMx(ym, ye)
 54 #define DPDNORMZ        DPDNORMx(zm, ze)
 55 
 56 static inline union ieee754dp builddp(int s, int bx, u64 m)
 57 {
 58         union ieee754dp r;
 59 
 60         assert((s) == 0 || (s) == 1);
 61         assert((bx) >= DP_EMIN - 1 + DP_EBIAS
 62                && (bx) <= DP_EMAX + 1 + DP_EBIAS);
 63         assert(((m) >> DP_FBITS) == 0);
 64 
 65         r.sign = s;
 66         r.bexp = bx;
 67         r.mant = m;
 68 
 69         return r;
 70 }
 71 
 72 extern union ieee754dp __cold ieee754dp_nanxcpt(union ieee754dp);
 73 extern union ieee754dp ieee754dp_format(int, int, u64);
 74 

~ [ 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