aboutsummaryrefslogtreecommitdiff
path: root/source/f128_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/f128_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/f128_add.c')
-rw-r--r--source/f128_add.c10
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
}