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