aboutsummaryrefslogtreecommitdiff
path: root/source/f64_add.c
diff options
context:
space:
mode:
authorJohn Hauser <jhauser@eecs.berkeley.edu>2014-12-11 14:27:41 -0800
committerJohn Hauser <jhauser@eecs.berkeley.edu>2014-12-11 14:27:41 -0800
commit5c93163afa8d4b00eddd401880c0bacb6d8c5d84 (patch)
treed9fb7f37413597d388d24a8c17546ce1d20c0bc6 /source/f64_add.c
parent8f59d925353145a65c09301dea6c47da1f1311b1 (diff)
downloadberkeley-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.c10
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
}