diff options
author | John Hauser <jhauser@eecs.berkeley.edu> | 2014-12-11 14:27:41 -0800 |
---|---|---|
committer | John Hauser <jhauser@eecs.berkeley.edu> | 2014-12-11 14:27:41 -0800 |
commit | 5c93163afa8d4b00eddd401880c0bacb6d8c5d84 (patch) | |
tree | d9fb7f37413597d388d24a8c17546ce1d20c0bc6 /source/f64_add.c | |
parent | 8f59d925353145a65c09301dea6c47da1f1311b1 (diff) | |
download | berkeley-softfloat-3-5c93163afa8d4b00eddd401880c0bacb6d8c5d84.zip berkeley-softfloat-3-5c93163afa8d4b00eddd401880c0bacb6d8c5d84.tar.gz berkeley-softfloat-3-5c93163afa8d4b00eddd401880c0bacb6d8c5d84.tar.bz2 |
Update in RC for Release 3, fixing some bugs and adding to the documentation.
Diffstat (limited to 'source/f64_add.c')
-rw-r--r-- | source/f64_add.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/source/f64_add.c b/source/f64_add.c index fcce50e..8bdb428 100644 --- a/source/f64_add.c +++ b/source/f64_add.c @@ -45,7 +45,9 @@ float64_t f64_add( float64_t a, float64_t b ) union ui64_f64 uB; uint_fast64_t uiB; bool signB; +#if ! defined INLINE_LEVEL || (INLINE_LEVEL < 2) float64_t (*magsFuncPtr)( uint_fast64_t, uint_fast64_t, bool ); +#endif uA.f = a; uiA = uA.ui; @@ -53,9 +55,17 @@ float64_t f64_add( float64_t a, float64_t b ) uB.f = b; uiB = uB.ui; signB = signF64UI( uiB ); +#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) + if ( signA == signB ) { + return softfloat_addMagsF64( uiA, uiB, signA ); + } else { + return softfloat_subMagsF64( uiA, uiB, signA ); + } +#else magsFuncPtr = (signA == signB) ? softfloat_addMagsF64 : softfloat_subMagsF64; return (*magsFuncPtr)( uiA, uiB, signA ); +#endif } |