2005-04-17 02:20:36 +04:00
/* IEEE754 floating point arithmetic
* single precision
*/
/*
* 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 03:49:14 +04:00
* 51 Franklin St , Fifth Floor , Boston , MA 02110 - 1301 USA .
2005-04-17 02:20:36 +04:00
*/
# include "ieee754sp.h"
2014-04-16 03:31:11 +04:00
union ieee754sp ieee754sp_flong ( s64 x )
2005-04-17 02:20:36 +04:00
{
2006-05-31 20:00:03 +04:00
u64 xm ; /* <--- need 64-bit mantissa temp */
int xe ;
int xs ;
2005-04-17 02:20:36 +04:00
2014-04-19 02:36:32 +04:00
ieee754_clearcx ( ) ;
2005-04-17 02:20:36 +04:00
if ( x = = 0 )
return ieee754sp_zero ( 0 ) ;
if ( x = = 1 | | x = = - 1 )
return ieee754sp_one ( x < 0 ) ;
if ( x = = 10 | | x = = - 10 )
return ieee754sp_ten ( x < 0 ) ;
xs = ( x < 0 ) ;
if ( xs ) {
if ( x = = ( 1ULL < < 63 ) )
xm = ( 1ULL < < 63 ) ; /* max neg can't be safely negated */
else
xm = - x ;
} else {
xm = x ;
}
2014-04-22 17:51:55 +04:00
xe = SP_FBITS + 3 ;
2005-04-17 02:20:36 +04:00
2014-04-22 17:51:55 +04:00
if ( xm > > ( SP_FBITS + 1 + 3 ) ) {
2005-04-17 02:20:36 +04:00
/* shunt out overflow bits
*/
2014-04-22 17:51:55 +04:00
while ( xm > > ( SP_FBITS + 1 + 3 ) ) {
2005-04-17 02:20:36 +04:00
SPXSRSX1 ( ) ;
}
} else {
/* normalize in grs extended single precision */
2014-04-22 17:51:55 +04:00
while ( ( xm > > ( SP_FBITS + 3 ) ) = = 0 ) {
2005-04-17 02:20:36 +04:00
xm < < = 1 ;
xe - - ;
}
}
2014-04-25 05:19:57 +04:00
return ieee754sp_format ( xs , xe , xm ) ;
2005-04-17 02:20:36 +04:00
}