diff options
author | Andrew Waterman <andrew@sifive.com> | 2017-09-24 20:25:34 -0700 |
---|---|---|
committer | Andrew Waterman <andrew@sifive.com> | 2017-09-24 20:25:34 -0700 |
commit | bd85811c35ea38180d27440507fc222d585ef780 (patch) | |
tree | 214c6b615d7775f73da5ff9a94bd4a0a2772f9cf /softfloat/f64_to_f32.c | |
parent | b86f2a51f522f020ad0d90f598f4c501f41da232 (diff) | |
download | spike-bd85811c35ea38180d27440507fc222d585ef780.zip spike-bd85811c35ea38180d27440507fc222d585ef780.tar.gz spike-bd85811c35ea38180d27440507fc222d585ef780.tar.bz2 |
Update SoftFloat
Diffstat (limited to 'softfloat/f64_to_f32.c')
-rw-r--r-- | softfloat/f64_to_f32.c | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/softfloat/f64_to_f32.c b/softfloat/f64_to_f32.c index c08b964..99b13dd 100644 --- a/softfloat/f64_to_f32.c +++ b/softfloat/f64_to_f32.c @@ -2,10 +2,10 @@ /*============================================================================ This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3a, by John R. Hauser. +Package, Release 3d, by John R. Hauser. -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. +Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of +California. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -47,18 +47,22 @@ float32_t f64_to_f32( float64_t a ) uint_fast64_t uiA; bool sign; int_fast16_t exp; - uint_fast64_t sig; + uint_fast64_t frac; struct commonNaN commonNaN; - uint_fast32_t uiZ, sig32; + uint_fast32_t uiZ, frac32; union ui32_f32 uZ; + /*------------------------------------------------------------------------ + *------------------------------------------------------------------------*/ uA.f = a; uiA = uA.ui; sign = signF64UI( uiA ); exp = expF64UI( uiA ); - sig = fracF64UI( uiA ); + frac = fracF64UI( uiA ); + /*------------------------------------------------------------------------ + *------------------------------------------------------------------------*/ if ( exp == 0x7FF ) { - if ( sig ) { + if ( frac ) { softfloat_f64UIToCommonNaN( uiA, &commonNaN ); uiZ = softfloat_commonNaNToF32UI( &commonNaN ); } else { @@ -66,12 +70,16 @@ float32_t f64_to_f32( float64_t a ) } goto uiZ; } - sig32 = softfloat_shortShiftRightJam64( sig, 22 ); - if ( ! (exp | sig32) ) { + /*------------------------------------------------------------------------ + *------------------------------------------------------------------------*/ + frac32 = softfloat_shortShiftRightJam64( frac, 22 ); + if ( ! (exp | frac32) ) { uiZ = packToF32UI( sign, 0, 0 ); goto uiZ; } - return softfloat_roundPackToF32( sign, exp - 0x381, sig32 | 0x40000000 ); + /*------------------------------------------------------------------------ + *------------------------------------------------------------------------*/ + return softfloat_roundPackToF32( sign, exp - 0x381, frac32 | 0x40000000 ); uiZ: uZ.ui = uiZ; return uZ.f; |