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/f128_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/f128_add.c')
-rw-r--r-- | source/f128_add.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/source/f128_add.c b/source/f128_add.c index b168508..bcc15db 100644 --- a/source/f128_add.c +++ b/source/f128_add.c @@ -45,9 +45,11 @@ float128_t f128_add( float128_t a, float128_t b ) union ui128_f128 uB; uint_fast64_t uiB64, uiB0; bool signB; +#if ! defined INLINE_LEVEL || (INLINE_LEVEL < 2) float128_t (*magsFuncPtr)( uint_fast64_t, uint_fast64_t, uint_fast64_t, uint_fast64_t, bool ); +#endif uA.f = a; uiA64 = uA.ui.v64; @@ -57,9 +59,17 @@ float128_t f128_add( float128_t a, float128_t b ) uiB64 = uB.ui.v64; uiB0 = uB.ui.v0; signB = signF128UI64( uiB64 ); +#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) + if ( signA == signB ) { + return softfloat_addMagsF128( uiA64, uiA0, uiB64, uiB0, signA ); + } else { + return softfloat_subMagsF128( uiA64, uiA0, uiB64, uiB0, signA ); + } +#else magsFuncPtr = (signA == signB) ? softfloat_addMagsF128 : softfloat_subMagsF128; return (*magsFuncPtr)( uiA64, uiA0, uiB64, uiB0, signA ); +#endif } |