Blame view

kernel/linux-rt-4.4.41/arch/mips/math-emu/ieee754d.c 3.15 KB
5113f6f70   김현기   kernel add
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
  /*
   * Some debug functions
   *
   * MIPS floating point support
   *
   * Copyright (C) 1994-2000 Algorithmics Ltd.
   *
   *  This program is free software; you can distribute it and/or modify it
   *  under the terms of the GNU General Public License (Version 2) as
   *  published by the Free Software Foundation.
   *
   *  This program is distributed in the hope it will be useful, but WITHOUT
   *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   *  for more details.
   *
   *  You should have received a copy of the GNU General Public License along
   *  with this program; if not, write to the Free Software Foundation, Inc.,
   *  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
   *
   *  Nov 7, 2000
   *  Modified to build and operate in Linux kernel environment.
   *
   *  Kevin D. Kissell, kevink@mips.com and Carsten Langgaard, carstenl@mips.com
   *  Copyright (C) 2000 MIPS Technologies, Inc. All rights reserved.
   */
  
  #include <linux/types.h>
  #include <linux/printk.h>
  #include "ieee754.h"
  #include "ieee754sp.h"
  #include "ieee754dp.h"
  
  union ieee754dp ieee754dp_dump(char *m, union ieee754dp x)
  {
  	int i;
  
  	printk("%s", m);
  	printk("<%08x,%08x>
  ", (unsigned) (x.bits >> 32),
  	       (unsigned) x.bits);
  	printk("\t=");
  	switch (ieee754dp_class(x)) {
  	case IEEE754_CLASS_QNAN:
  	case IEEE754_CLASS_SNAN:
  		printk("Nan %c", DPSIGN(x) ? '-' : '+');
  		for (i = DP_FBITS - 1; i >= 0; i--)
  			printk("%c", DPMANT(x) & DP_MBIT(i) ? '1' : '0');
  		break;
  	case IEEE754_CLASS_INF:
  		printk("%cInfinity", DPSIGN(x) ? '-' : '+');
  		break;
  	case IEEE754_CLASS_ZERO:
  		printk("%cZero", DPSIGN(x) ? '-' : '+');
  		break;
  	case IEEE754_CLASS_DNORM:
  		printk("%c0.", DPSIGN(x) ? '-' : '+');
  		for (i = DP_FBITS - 1; i >= 0; i--)
  			printk("%c", DPMANT(x) & DP_MBIT(i) ? '1' : '0');
  		printk("e%d", DPBEXP(x) - DP_EBIAS);
  		break;
  	case IEEE754_CLASS_NORM:
  		printk("%c1.", DPSIGN(x) ? '-' : '+');
  		for (i = DP_FBITS - 1; i >= 0; i--)
  			printk("%c", DPMANT(x) & DP_MBIT(i) ? '1' : '0');
  		printk("e%d", DPBEXP(x) - DP_EBIAS);
  		break;
  	default:
  		printk("Illegal/Unknown IEEE754 value class");
  	}
  	printk("
  ");
  	return x;
  }
  
  union ieee754sp ieee754sp_dump(char *m, union ieee754sp x)
  {
  	int i;
  
  	printk("%s=", m);
  	printk("<%08x>
  ", (unsigned) x.bits);
  	printk("\t=");
  	switch (ieee754sp_class(x)) {
  	case IEEE754_CLASS_QNAN:
  	case IEEE754_CLASS_SNAN:
  		printk("Nan %c", SPSIGN(x) ? '-' : '+');
  		for (i = SP_FBITS - 1; i >= 0; i--)
  			printk("%c", SPMANT(x) & SP_MBIT(i) ? '1' : '0');
  		break;
  	case IEEE754_CLASS_INF:
  		printk("%cInfinity", SPSIGN(x) ? '-' : '+');
  		break;
  	case IEEE754_CLASS_ZERO:
  		printk("%cZero", SPSIGN(x) ? '-' : '+');
  		break;
  	case IEEE754_CLASS_DNORM:
  		printk("%c0.", SPSIGN(x) ? '-' : '+');
  		for (i = SP_FBITS - 1; i >= 0; i--)
  			printk("%c", SPMANT(x) & SP_MBIT(i) ? '1' : '0');
  		printk("e%d", SPBEXP(x) - SP_EBIAS);
  		break;
  	case IEEE754_CLASS_NORM:
  		printk("%c1.", SPSIGN(x) ? '-' : '+');
  		for (i = SP_FBITS - 1; i >= 0; i--)
  			printk("%c", SPMANT(x) & SP_MBIT(i) ? '1' : '0');
  		printk("e%d", SPBEXP(x) - SP_EBIAS);
  		break;
  	default:
  		printk("Illegal/Unknown IEEE754 value class");
  	}
  	printk("
  ");
  	return x;
  }