Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/mips/math-emu/ieee754d.c
26424 views
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, [email protected] and Carsten Langgaard, [email protected]
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
}
100
101