Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

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