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) /* ieee754 floating point arithmetic
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3)  * single and double precision
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5)  * BUGS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6)  * not much dp done
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7)  * doesn't generate IEEE754_INEXACT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10)  * MIPS floating point support
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11)  * Copyright (C) 1994-2000 Algorithmics Ltd.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #include <linux/compiler.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #include "ieee754.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #include "ieee754sp.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #include "ieee754dp.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21)  * Special constants
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25)  * Older GCC requires the inner braces for initialization of union ieee754dp's
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26)  * anonymous struct member.  Without an error will result.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) #define xPCNST(s, b, m, ebias)						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) {									\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) 	{								\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) 		.sign	= (s),						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) 		.bexp	= (b) + ebias,					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) 		.mant	= (m)						\
^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) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) #define DPCNST(s, b, m)							\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) 	xPCNST(s, b, m, DP_EBIAS)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) const union ieee754dp __ieee754dp_spcvals[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) 	DPCNST(0, DP_EMIN - 1, 0x0000000000000ULL),	/* + zero   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) 	DPCNST(1, DP_EMIN - 1, 0x0000000000000ULL),	/* - zero   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) 	DPCNST(0, 0,	       0x0000000000000ULL),	/* + 1.0   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) 	DPCNST(1, 0,	       0x0000000000000ULL),	/* - 1.0   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) 	DPCNST(0, 3,           0x4000000000000ULL),	/* + 10.0   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) 	DPCNST(1, 3,           0x4000000000000ULL),	/* - 10.0   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) 	DPCNST(0, DP_EMAX + 1, 0x0000000000000ULL),	/* + infinity */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) 	DPCNST(1, DP_EMAX + 1, 0x0000000000000ULL),	/* - infinity */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) 	DPCNST(0, DP_EMAX + 1, 0x7FFFFFFFFFFFFULL),	/* + ind legacy qNaN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) 	DPCNST(0, DP_EMAX + 1, 0x8000000000000ULL),	/* + indef 2008 qNaN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) 	DPCNST(0, DP_EMAX,     0xFFFFFFFFFFFFFULL),	/* + max */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) 	DPCNST(1, DP_EMAX,     0xFFFFFFFFFFFFFULL),	/* - max */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) 	DPCNST(0, DP_EMIN,     0x0000000000000ULL),	/* + min normal */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) 	DPCNST(1, DP_EMIN,     0x0000000000000ULL),	/* - min normal */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) 	DPCNST(0, DP_EMIN - 1, 0x0000000000001ULL),	/* + min denormal */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) 	DPCNST(1, DP_EMIN - 1, 0x0000000000001ULL),	/* - min denormal */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) 	DPCNST(0, 31,          0x0000000000000ULL),	/* + 1.0e31 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) 	DPCNST(0, 63,          0x0000000000000ULL),	/* + 1.0e63 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) #define SPCNST(s, b, m)							\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) 	xPCNST(s, b, m, SP_EBIAS)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) const union ieee754sp __ieee754sp_spcvals[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) 	SPCNST(0, SP_EMIN - 1, 0x000000),	/* + zero   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) 	SPCNST(1, SP_EMIN - 1, 0x000000),	/* - zero   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) 	SPCNST(0, 0,	       0x000000),	/* + 1.0   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) 	SPCNST(1, 0,	       0x000000),	/* - 1.0   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) 	SPCNST(0, 3,	       0x200000),	/* + 10.0   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) 	SPCNST(1, 3,	       0x200000),	/* - 10.0   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) 	SPCNST(0, SP_EMAX + 1, 0x000000),	/* + infinity */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) 	SPCNST(1, SP_EMAX + 1, 0x000000),	/* - infinity */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) 	SPCNST(0, SP_EMAX + 1, 0x3FFFFF),	/* + indef legacy quiet NaN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) 	SPCNST(0, SP_EMAX + 1, 0x400000),	/* + indef 2008 quiet NaN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) 	SPCNST(0, SP_EMAX,     0x7FFFFF),	/* + max normal */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) 	SPCNST(1, SP_EMAX,     0x7FFFFF),	/* - max normal */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) 	SPCNST(0, SP_EMIN,     0x000000),	/* + min normal */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) 	SPCNST(1, SP_EMIN,     0x000000),	/* - min normal */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) 	SPCNST(0, SP_EMIN - 1, 0x000001),	/* + min denormal */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) 	SPCNST(1, SP_EMIN - 1, 0x000001),	/* - min denormal */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) 	SPCNST(0, 31,	       0x000000),	/* + 1.0e31 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) 	SPCNST(0, 63,	       0x000000),	/* + 1.0e63 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) };