diff options
author | John Hauser <jhauser@eecs.berkeley.edu> | 2017-08-18 16:21:07 -0700 |
---|---|---|
committer | John Hauser <jhauser@eecs.berkeley.edu> | 2017-08-18 16:21:07 -0700 |
commit | 0d2862cdb35361d47548020b97dc60b58d53d048 (patch) | |
tree | 89a4e0171e641a9a46e073ebb7fbe043cee5b57c /source/subj-C/subjfloat.c | |
parent | f755993d040a8ea9c1acf758efce76da60870627 (diff) | |
download | berkeley-testfloat-3-0d2862cdb35361d47548020b97dc60b58d53d048.zip berkeley-testfloat-3-0d2862cdb35361d47548020b97dc60b58d53d048.tar.gz berkeley-testfloat-3-0d2862cdb35361d47548020b97dc60b58d53d048.tar.bz2 |
Release 3d. See "doc/TestFloat-history.html".
Diffstat (limited to 'source/subj-C/subjfloat.c')
-rw-r--r-- | source/subj-C/subjfloat.c | 91 |
1 files changed, 90 insertions, 1 deletions
diff --git a/source/subj-C/subjfloat.c b/source/subj-C/subjfloat.c index f5381a4..68a4ce7 100644 --- a/source/subj-C/subjfloat.c +++ b/source/subj-C/subjfloat.c @@ -1,7 +1,7 @@ /*============================================================================ -This C source file is part of TestFloat, Release 3c, a package of programs for +This C source file is part of TestFloat, Release 3d, a package of programs for testing the correctness of floating-point arithmetic complying with the IEEE Standard for Floating-Point, by John R. Hauser. @@ -201,6 +201,24 @@ float32_t subj_f32_mul( float32_t a, float32_t b ) } +#ifdef __STDC_VERSION__ +#if 199901L <= __STDC_VERSION__ + +float32_t subj_f32_mulAdd( float32_t a, float32_t b, float32_t c ) +{ + union f32_f uA, uB, uC, uZ; + + uA.f32 = a; + uB.f32 = b; + uC.f32 = c; + uZ.f = fmaf( uA.f, uB.f, uC.f ); + return uZ.f32; + +} + +#endif +#endif + float32_t subj_f32_div( float32_t a, float32_t b ) { union f32_f uA, uB, uZ; @@ -212,6 +230,22 @@ float32_t subj_f32_div( float32_t a, float32_t b ) } +#ifdef __STDC_VERSION__ +#if 199901L <= __STDC_VERSION__ + +float32_t subj_f32_sqrt( float32_t a ) +{ + union f32_f uA, uZ; + + uA.f32 = a; + uZ.f = sqrtf( uA.f ); + return uZ.f32; + +} + +#endif +#endif + bool subj_f32_eq( float32_t a, float32_t b ) { union f32_f uA, uB; @@ -376,6 +410,24 @@ float64_t subj_f64_mul( float64_t a, float64_t b ) } +#ifdef __STDC_VERSION__ +#if 199901L <= __STDC_VERSION__ + +float64_t subj_f64_mulAdd( float64_t a, float64_t b, float64_t c ) +{ + union f64_d uA, uB, uC, uZ; + + uA.f64 = a; + uB.f64 = b; + uC.f64 = c; + uZ.d = fma( uA.d, uB.d, uC.d ); + return uZ.f64; + +} + +#endif +#endif + float64_t subj_f64_div( float64_t a, float64_t b ) { union f64_d uA, uB, uZ; @@ -732,6 +784,30 @@ void } +#ifdef __STDC_VERSION__ +#if 199901L <= __STDC_VERSION__ + +void + subj_f128M_mulAdd( + const float128_t *aPtr, + const float128_t *bPtr, + const float128_t *cPtr, + float128_t *zPtr + ) +{ + + *((long double *) zPtr) = + fmal( + *((const long double *) aPtr), + *((const long double *) bPtr), + *((const long double *) cPtr) + ); + +} + +#endif +#endif + void subj_f128M_div( const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) @@ -742,6 +818,19 @@ void } +#ifdef __STDC_VERSION__ +#if 199901L <= __STDC_VERSION__ + +void subj_f128M_sqrt( const float128_t *aPtr, float128_t *zPtr ) +{ + + *((long double *) zPtr) = sqrtl( *((const long double *) aPtr) ); + +} + +#endif +#endif + bool subj_f128M_eq( const float128_t *aPtr, const float128_t *bPtr ) { |