2005-04-17 02:20:36 +04:00
/* IEEE754 floating point arithmetic
* double precision : common utilities
*/
/*
* 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 . ,
* 59 Temple Place - Suite 330 , Boston MA 02111 - 1307 , USA .
*
* # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
*/
# include "ieee754dp.h"
ieee754dp ieee754dp_fsp ( ieee754sp x )
{
COMPXSP ;
EXPLODEXSP ;
CLEARCX ;
FLUSHXSP ;
switch ( xc ) {
case IEEE754_CLASS_SNAN :
SETCX ( IEEE754_INVALID_OPERATION ) ;
return ieee754dp_nanxcpt ( ieee754dp_indef ( ) , " fsp " ) ;
case IEEE754_CLASS_QNAN :
return ieee754dp_nanxcpt ( builddp ( xs ,
DP_EMAX + 1 + DP_EBIAS ,
( ( u64 ) xm
< < ( DP_MBITS -
SP_MBITS ) ) ) , " fsp " ,
x ) ;
case IEEE754_CLASS_INF :
return ieee754dp_inf ( xs ) ;
case IEEE754_CLASS_ZERO :
return ieee754dp_zero ( xs ) ;
case IEEE754_CLASS_DNORM :
/* normalize */
while ( ( xm > > SP_MBITS ) = = 0 ) {
xm < < = 1 ;
xe - - ;
}
break ;
case IEEE754_CLASS_NORM :
break ;
}
2011-03-31 05:57:33 +04:00
/* CAN'T possibly overflow,underflow, or need rounding
2005-04-17 02:20:36 +04:00
*/
/* drop the hidden bit */
xm & = ~ SP_HIDDEN_BIT ;
return builddp ( xs , xe + DP_EBIAS ,
( u64 ) xm < < ( DP_MBITS - SP_MBITS ) ) ;
}