1 // SPDX-License-Identifier: GPL-2.0-only
2 /* ieee754 floating point arithmetic
3 * single and double precision
7 * doesn't generate IEEE754_INEXACT
10 * MIPS floating point support
11 * Copyright (C) 1994-2000 Algorithmics Ltd.
14 #include <linux/compiler.h>
17 #include "ieee754sp.h"
18 #include "ieee754dp.h"
25 * Older GCC requires the inner braces for initialization of union ieee754dp's
26 * anonymous struct member. Without an error will result.
28 #define xPCNST(s, b, m, ebias) \
32 .bexp = (b) + ebias, \
37 #define DPCNST(s, b, m) \
38 xPCNST(s, b, m, DP_EBIAS)
40 const union ieee754dp __ieee754dp_spcvals
[] = {
41 DPCNST(0, DP_EMIN
- 1, 0x0000000000000ULL
), /* + zero */
42 DPCNST(1, DP_EMIN
- 1, 0x0000000000000ULL
), /* - zero */
43 DPCNST(0, 0, 0x0000000000000ULL
), /* + 1.0 */
44 DPCNST(1, 0, 0x0000000000000ULL
), /* - 1.0 */
45 DPCNST(0, 3, 0x4000000000000ULL
), /* + 10.0 */
46 DPCNST(1, 3, 0x4000000000000ULL
), /* - 10.0 */
47 DPCNST(0, DP_EMAX
+ 1, 0x0000000000000ULL
), /* + infinity */
48 DPCNST(1, DP_EMAX
+ 1, 0x0000000000000ULL
), /* - infinity */
49 DPCNST(0, DP_EMAX
+ 1, 0x7FFFFFFFFFFFFULL
), /* + ind legacy qNaN */
50 DPCNST(0, DP_EMAX
+ 1, 0x8000000000000ULL
), /* + indef 2008 qNaN */
51 DPCNST(0, DP_EMAX
, 0xFFFFFFFFFFFFFULL
), /* + max */
52 DPCNST(1, DP_EMAX
, 0xFFFFFFFFFFFFFULL
), /* - max */
53 DPCNST(0, DP_EMIN
, 0x0000000000000ULL
), /* + min normal */
54 DPCNST(1, DP_EMIN
, 0x0000000000000ULL
), /* - min normal */
55 DPCNST(0, DP_EMIN
- 1, 0x0000000000001ULL
), /* + min denormal */
56 DPCNST(1, DP_EMIN
- 1, 0x0000000000001ULL
), /* - min denormal */
57 DPCNST(0, 31, 0x0000000000000ULL
), /* + 1.0e31 */
58 DPCNST(0, 63, 0x0000000000000ULL
), /* + 1.0e63 */
61 #define SPCNST(s, b, m) \
62 xPCNST(s, b, m, SP_EBIAS)
64 const union ieee754sp __ieee754sp_spcvals
[] = {
65 SPCNST(0, SP_EMIN
- 1, 0x000000), /* + zero */
66 SPCNST(1, SP_EMIN
- 1, 0x000000), /* - zero */
67 SPCNST(0, 0, 0x000000), /* + 1.0 */
68 SPCNST(1, 0, 0x000000), /* - 1.0 */
69 SPCNST(0, 3, 0x200000), /* + 10.0 */
70 SPCNST(1, 3, 0x200000), /* - 10.0 */
71 SPCNST(0, SP_EMAX
+ 1, 0x000000), /* + infinity */
72 SPCNST(1, SP_EMAX
+ 1, 0x000000), /* - infinity */
73 SPCNST(0, SP_EMAX
+ 1, 0x3FFFFF), /* + indef legacy quiet NaN */
74 SPCNST(0, SP_EMAX
+ 1, 0x400000), /* + indef 2008 quiet NaN */
75 SPCNST(0, SP_EMAX
, 0x7FFFFF), /* + max normal */
76 SPCNST(1, SP_EMAX
, 0x7FFFFF), /* - max normal */
77 SPCNST(0, SP_EMIN
, 0x000000), /* + min normal */
78 SPCNST(1, SP_EMIN
, 0x000000), /* - min normal */
79 SPCNST(0, SP_EMIN
- 1, 0x000001), /* + min denormal */
80 SPCNST(1, SP_EMIN
- 1, 0x000001), /* - min denormal */
81 SPCNST(0, 31, 0x000000), /* + 1.0e31 */
82 SPCNST(0, 63, 0x000000), /* + 1.0e63 */