2005-04-16 15:20:36 -07:00
/*
* 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 . ,
2014-04-26 01:49:14 +02:00
* 51 Franklin St , Fifth Floor , Boston , MA 02110 - 1301 USA .
2005-04-16 15:20:36 -07:00
*
* 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 .
*/
2014-04-16 02:09:53 +02:00
# include <linux/types.h>
# include <linux/printk.h>
2005-04-16 15:20:36 -07:00
# include "ieee754.h"
2014-04-22 16:33:07 +02:00
# include "ieee754sp.h"
# include "ieee754dp.h"
2005-04-16 15:20:36 -07:00
2014-04-16 01:31:11 +02:00
union ieee754dp ieee754dp_dump ( char * m , union ieee754dp x )
2005-04-16 15:20:36 -07:00
{
int i ;
printk ( " %s " , m ) ;
printk ( " <%08x,%08x> \n " , ( 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 ( " \n " ) ;
return x ;
}
2014-04-16 01:31:11 +02:00
union ieee754sp ieee754sp_dump ( char * m , union ieee754sp x )
2005-04-16 15:20:36 -07:00
{
int i ;
printk ( " %s= " , m ) ;
printk ( " <%08x> \n " , ( 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 ( " \n " ) ;
return x ;
}