diff options
Diffstat (limited to 'arch/mips/math-emu/ieee754d.c')
-rw-r--r-- | arch/mips/math-emu/ieee754d.c | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/arch/mips/math-emu/ieee754d.c b/arch/mips/math-emu/ieee754d.c new file mode 100644 index 000000000..586c4db2d --- /dev/null +++ b/arch/mips/math-emu/ieee754d.c | |||
@@ -0,0 +1,99 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
2 | /* | ||
3 | * Some debug functions | ||
4 | * | ||
5 | * MIPS floating point support | ||
6 | * | ||
7 | * Copyright (C) 1994-2000 Algorithmics Ltd. | ||
8 | * | ||
9 | * Nov 7, 2000 | ||
10 | * Modified to build and operate in Linux kernel environment. | ||
11 | * | ||
12 | * Kevin D. Kissell, kevink@mips.com and Carsten Langgaard, carstenl@mips.com | ||
13 | * Copyright (C) 2000 MIPS Technologies, Inc. All rights reserved. | ||
14 | */ | ||
15 | |||
16 | #include <linux/types.h> | ||
17 | #include <linux/printk.h> | ||
18 | #include "ieee754.h" | ||
19 | #include "ieee754sp.h" | ||
20 | #include "ieee754dp.h" | ||
21 | |||
22 | union ieee754dp ieee754dp_dump(char *m, union ieee754dp x) | ||
23 | { | ||
24 | int i; | ||
25 | |||
26 | printk("%s", m); | ||
27 | printk("<%08x,%08x>\n", (unsigned) (x.bits >> 32), | ||
28 | (unsigned) x.bits); | ||
29 | printk("\t="); | ||
30 | switch (ieee754dp_class(x)) { | ||
31 | case IEEE754_CLASS_QNAN: | ||
32 | case IEEE754_CLASS_SNAN: | ||
33 | printk("Nan %c", DPSIGN(x) ? '-' : '+'); | ||
34 | for (i = DP_FBITS - 1; i >= 0; i--) | ||
35 | printk("%c", DPMANT(x) & DP_MBIT(i) ? '1' : '0'); | ||
36 | break; | ||
37 | case IEEE754_CLASS_INF: | ||
38 | printk("%cInfinity", DPSIGN(x) ? '-' : '+'); | ||
39 | break; | ||
40 | case IEEE754_CLASS_ZERO: | ||
41 | printk("%cZero", DPSIGN(x) ? '-' : '+'); | ||
42 | break; | ||
43 | case IEEE754_CLASS_DNORM: | ||
44 | printk("%c0.", DPSIGN(x) ? '-' : '+'); | ||
45 | for (i = DP_FBITS - 1; i >= 0; i--) | ||
46 | printk("%c", DPMANT(x) & DP_MBIT(i) ? '1' : '0'); | ||
47 | printk("e%d", DPBEXP(x) - DP_EBIAS); | ||
48 | break; | ||
49 | case IEEE754_CLASS_NORM: | ||
50 | printk("%c1.", DPSIGN(x) ? '-' : '+'); | ||
51 | for (i = DP_FBITS - 1; i >= 0; i--) | ||
52 | printk("%c", DPMANT(x) & DP_MBIT(i) ? '1' : '0'); | ||
53 | printk("e%d", DPBEXP(x) - DP_EBIAS); | ||
54 | break; | ||
55 | default: | ||
56 | printk("Illegal/Unknown IEEE754 value class"); | ||
57 | } | ||
58 | printk("\n"); | ||
59 | return x; | ||
60 | } | ||
61 | |||
62 | union ieee754sp ieee754sp_dump(char *m, union ieee754sp x) | ||
63 | { | ||
64 | int i; | ||
65 | |||
66 | printk("%s=", m); | ||
67 | printk("<%08x>\n", (unsigned) x.bits); | ||
68 | printk("\t="); | ||
69 | switch (ieee754sp_class(x)) { | ||
70 | case IEEE754_CLASS_QNAN: | ||
71 | case IEEE754_CLASS_SNAN: | ||
72 | printk("Nan %c", SPSIGN(x) ? '-' : '+'); | ||
73 | for (i = SP_FBITS - 1; i >= 0; i--) | ||
74 | printk("%c", SPMANT(x) & SP_MBIT(i) ? '1' : '0'); | ||
75 | break; | ||
76 | case IEEE754_CLASS_INF: | ||
77 | printk("%cInfinity", SPSIGN(x) ? '-' : '+'); | ||
78 | break; | ||
79 | case IEEE754_CLASS_ZERO: | ||
80 | printk("%cZero", SPSIGN(x) ? '-' : '+'); | ||
81 | break; | ||
82 | case IEEE754_CLASS_DNORM: | ||
83 | printk("%c0.", SPSIGN(x) ? '-' : '+'); | ||
84 | for (i = SP_FBITS - 1; i >= 0; i--) | ||
85 | printk("%c", SPMANT(x) & SP_MBIT(i) ? '1' : '0'); | ||
86 | printk("e%d", SPBEXP(x) - SP_EBIAS); | ||
87 | break; | ||
88 | case IEEE754_CLASS_NORM: | ||
89 | printk("%c1.", SPSIGN(x) ? '-' : '+'); | ||
90 | for (i = SP_FBITS - 1; i >= 0; i--) | ||
91 | printk("%c", SPMANT(x) & SP_MBIT(i) ? '1' : '0'); | ||
92 | printk("e%d", SPBEXP(x) - SP_EBIAS); | ||
93 | break; | ||
94 | default: | ||
95 | printk("Illegal/Unknown IEEE754 value class"); | ||
96 | } | ||
97 | printk("\n"); | ||
98 | return x; | ||
99 | } | ||