Linux Audio

Check our new training course

Loading...
v3.15
  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 *  59 Temple Place - Suite 330, Boston MA 02111-1307, 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/kernel.h>
 29#include "ieee754.h"
 30
 31#define DP_EBIAS	1023
 32#define DP_EMIN		(-1022)
 33#define DP_EMAX		1023
 34#define DP_FBITS	52
 35
 36#define SP_EBIAS	127
 37#define SP_EMIN		(-126)
 38#define SP_EMAX		127
 39#define SP_FBITS	23
 40
 41#define DP_MBIT(x)	((u64)1 << (x))
 42#define DP_HIDDEN_BIT	DP_MBIT(DP_FBITS)
 43#define DP_SIGN_BIT	DP_MBIT(63)
 44
 45
 46#define SP_MBIT(x)	((u32)1 << (x))
 47#define SP_HIDDEN_BIT	SP_MBIT(SP_FBITS)
 48#define SP_SIGN_BIT	SP_MBIT(31)
 49
 50
 51#define SPSIGN(sp)	(sp.parts.sign)
 52#define SPBEXP(sp)	(sp.parts.bexp)
 53#define SPMANT(sp)	(sp.parts.mant)
 54
 55#define DPSIGN(dp)	(dp.parts.sign)
 56#define DPBEXP(dp)	(dp.parts.bexp)
 57#define DPMANT(dp)	(dp.parts.mant)
 58
 59ieee754dp ieee754dp_dump(char *m, ieee754dp x)
 60{
 61	int i;
 62
 63	printk("%s", m);
 64	printk("<%08x,%08x>\n", (unsigned) (x.bits >> 32),
 65	       (unsigned) x.bits);
 66	printk("\t=");
 67	switch (ieee754dp_class(x)) {
 68	case IEEE754_CLASS_QNAN:
 69	case IEEE754_CLASS_SNAN:
 70		printk("Nan %c", DPSIGN(x) ? '-' : '+');
 71		for (i = DP_FBITS - 1; i >= 0; i--)
 72			printk("%c", DPMANT(x) & DP_MBIT(i) ? '1' : '0');
 73		break;
 74	case IEEE754_CLASS_INF:
 75		printk("%cInfinity", DPSIGN(x) ? '-' : '+');
 76		break;
 77	case IEEE754_CLASS_ZERO:
 78		printk("%cZero", DPSIGN(x) ? '-' : '+');
 79		break;
 80	case IEEE754_CLASS_DNORM:
 81		printk("%c0.", DPSIGN(x) ? '-' : '+');
 82		for (i = DP_FBITS - 1; i >= 0; i--)
 83			printk("%c", DPMANT(x) & DP_MBIT(i) ? '1' : '0');
 84		printk("e%d", DPBEXP(x) - DP_EBIAS);
 85		break;
 86	case IEEE754_CLASS_NORM:
 87		printk("%c1.", DPSIGN(x) ? '-' : '+');
 88		for (i = DP_FBITS - 1; i >= 0; i--)
 89			printk("%c", DPMANT(x) & DP_MBIT(i) ? '1' : '0');
 90		printk("e%d", DPBEXP(x) - DP_EBIAS);
 91		break;
 92	default:
 93		printk("Illegal/Unknown IEEE754 value class");
 94	}
 95	printk("\n");
 96	return x;
 97}
 98
 99ieee754sp ieee754sp_dump(char *m, ieee754sp x)
100{
101	int i;
102
103	printk("%s=", m);
104	printk("<%08x>\n", (unsigned) x.bits);
105	printk("\t=");
106	switch (ieee754sp_class(x)) {
107	case IEEE754_CLASS_QNAN:
108	case IEEE754_CLASS_SNAN:
109		printk("Nan %c", SPSIGN(x) ? '-' : '+');
110		for (i = SP_FBITS - 1; i >= 0; i--)
111			printk("%c", SPMANT(x) & SP_MBIT(i) ? '1' : '0');
112		break;
113	case IEEE754_CLASS_INF:
114		printk("%cInfinity", SPSIGN(x) ? '-' : '+');
115		break;
116	case IEEE754_CLASS_ZERO:
117		printk("%cZero", SPSIGN(x) ? '-' : '+');
118		break;
119	case IEEE754_CLASS_DNORM:
120		printk("%c0.", SPSIGN(x) ? '-' : '+');
121		for (i = SP_FBITS - 1; i >= 0; i--)
122			printk("%c", SPMANT(x) & SP_MBIT(i) ? '1' : '0');
123		printk("e%d", SPBEXP(x) - SP_EBIAS);
124		break;
125	case IEEE754_CLASS_NORM:
126		printk("%c1.", SPSIGN(x) ? '-' : '+');
127		for (i = SP_FBITS - 1; i >= 0; i--)
128			printk("%c", SPMANT(x) & SP_MBIT(i) ? '1' : '0');
129		printk("e%d", SPBEXP(x) - SP_EBIAS);
130		break;
131	default:
132		printk("Illegal/Unknown IEEE754 value class");
133	}
134	printk("\n");
135	return x;
136}
v3.5.6
  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 *  59 Temple Place - Suite 330, Boston MA 02111-1307, 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/kernel.h>
 29#include "ieee754.h"
 30
 31#define DP_EBIAS	1023
 32#define DP_EMIN		(-1022)
 33#define DP_EMAX		1023
 34#define DP_FBITS	52
 35
 36#define SP_EBIAS	127
 37#define SP_EMIN		(-126)
 38#define SP_EMAX		127
 39#define SP_FBITS	23
 40
 41#define DP_MBIT(x)	((u64)1 << (x))
 42#define DP_HIDDEN_BIT	DP_MBIT(DP_FBITS)
 43#define DP_SIGN_BIT	DP_MBIT(63)
 44
 45
 46#define SP_MBIT(x)	((u32)1 << (x))
 47#define SP_HIDDEN_BIT	SP_MBIT(SP_FBITS)
 48#define SP_SIGN_BIT	SP_MBIT(31)
 49
 50
 51#define SPSIGN(sp)	(sp.parts.sign)
 52#define SPBEXP(sp)	(sp.parts.bexp)
 53#define SPMANT(sp)	(sp.parts.mant)
 54
 55#define DPSIGN(dp)	(dp.parts.sign)
 56#define DPBEXP(dp)	(dp.parts.bexp)
 57#define DPMANT(dp)	(dp.parts.mant)
 58
 59ieee754dp ieee754dp_dump(char *m, ieee754dp x)
 60{
 61	int i;
 62
 63	printk("%s", m);
 64	printk("<%08x,%08x>\n", (unsigned) (x.bits >> 32),
 65	       (unsigned) x.bits);
 66	printk("\t=");
 67	switch (ieee754dp_class(x)) {
 68	case IEEE754_CLASS_QNAN:
 69	case IEEE754_CLASS_SNAN:
 70		printk("Nan %c", DPSIGN(x) ? '-' : '+');
 71		for (i = DP_FBITS - 1; i >= 0; i--)
 72			printk("%c", DPMANT(x) & DP_MBIT(i) ? '1' : '0');
 73		break;
 74	case IEEE754_CLASS_INF:
 75		printk("%cInfinity", DPSIGN(x) ? '-' : '+');
 76		break;
 77	case IEEE754_CLASS_ZERO:
 78		printk("%cZero", DPSIGN(x) ? '-' : '+');
 79		break;
 80	case IEEE754_CLASS_DNORM:
 81		printk("%c0.", DPSIGN(x) ? '-' : '+');
 82		for (i = DP_FBITS - 1; i >= 0; i--)
 83			printk("%c", DPMANT(x) & DP_MBIT(i) ? '1' : '0');
 84		printk("e%d", DPBEXP(x) - DP_EBIAS);
 85		break;
 86	case IEEE754_CLASS_NORM:
 87		printk("%c1.", DPSIGN(x) ? '-' : '+');
 88		for (i = DP_FBITS - 1; i >= 0; i--)
 89			printk("%c", DPMANT(x) & DP_MBIT(i) ? '1' : '0');
 90		printk("e%d", DPBEXP(x) - DP_EBIAS);
 91		break;
 92	default:
 93		printk("Illegal/Unknown IEEE754 value class");
 94	}
 95	printk("\n");
 96	return x;
 97}
 98
 99ieee754sp ieee754sp_dump(char *m, ieee754sp x)
100{
101	int i;
102
103	printk("%s=", m);
104	printk("<%08x>\n", (unsigned) x.bits);
105	printk("\t=");
106	switch (ieee754sp_class(x)) {
107	case IEEE754_CLASS_QNAN:
108	case IEEE754_CLASS_SNAN:
109		printk("Nan %c", SPSIGN(x) ? '-' : '+');
110		for (i = SP_FBITS - 1; i >= 0; i--)
111			printk("%c", SPMANT(x) & SP_MBIT(i) ? '1' : '0');
112		break;
113	case IEEE754_CLASS_INF:
114		printk("%cInfinity", SPSIGN(x) ? '-' : '+');
115		break;
116	case IEEE754_CLASS_ZERO:
117		printk("%cZero", SPSIGN(x) ? '-' : '+');
118		break;
119	case IEEE754_CLASS_DNORM:
120		printk("%c0.", SPSIGN(x) ? '-' : '+');
121		for (i = SP_FBITS - 1; i >= 0; i--)
122			printk("%c", SPMANT(x) & SP_MBIT(i) ? '1' : '0');
123		printk("e%d", SPBEXP(x) - SP_EBIAS);
124		break;
125	case IEEE754_CLASS_NORM:
126		printk("%c1.", SPSIGN(x) ? '-' : '+');
127		for (i = SP_FBITS - 1; i >= 0; i--)
128			printk("%c", SPMANT(x) & SP_MBIT(i) ? '1' : '0');
129		printk("e%d", SPBEXP(x) - SP_EBIAS);
130		break;
131	default:
132		printk("Illegal/Unknown IEEE754 value class");
133	}
134	printk("\n");
135	return x;
136}