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 } 100