diff options
author | John Hauser <jhauser@eecs.berkeley.edu> | 2017-02-10 12:38:35 -0800 |
---|---|---|
committer | John Hauser <jhauser@eecs.berkeley.edu> | 2017-02-10 12:38:35 -0800 |
commit | f755993d040a8ea9c1acf758efce76da60870627 (patch) | |
tree | dbc9bd5562476b06769ac1a1fe429ac1dde56b84 /source/genLoops.c | |
parent | ddfb9e70c434ae238635784ce66cb7ed93d0a2e7 (diff) | |
download | berkeley-testfloat-3-f755993d040a8ea9c1acf758efce76da60870627.zip berkeley-testfloat-3-f755993d040a8ea9c1acf758efce76da60870627.tar.gz berkeley-testfloat-3-f755993d040a8ea9c1acf758efce76da60870627.tar.bz2 |
Release 3c. See "doc/TestFloat-history.html".
Diffstat (limited to 'source/genLoops.c')
-rw-r--r-- | source/genLoops.c | 82 |
1 files changed, 47 insertions, 35 deletions
diff --git a/source/genLoops.c b/source/genLoops.c index f8a843a..c855edd 100644 --- a/source/genLoops.c +++ b/source/genLoops.c @@ -1,12 +1,12 @@ /*============================================================================ -This C source file is part of TestFloat, Release 3b, a package of programs for +This C source file is part of TestFloat, Release 3c, a package of programs for testing the correctness of floating-point arithmetic complying with the IEEE Standard for Floating-Point, by John R. Hauser. -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. +Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the +University of California. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -38,6 +38,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <stdbool.h> #include <stdint.h> #include <stdio.h> +#include <signal.h> #include "platform.h" #include "uint128.h" #include "fail.h" @@ -46,7 +47,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "writeHex.h" #include "genLoops.h" -volatile bool genLoops_stop = false; +volatile sig_atomic_t genLoops_stop = false; bool genLoops_forever; bool genLoops_givenCount; @@ -57,7 +58,9 @@ uint_fast8_t *genLoops_trueFlagsPtr; union ui16_f16 { uint16_t ui; float16_t f; }; #endif union ui32_f32 { uint32_t ui; float32_t f; }; +#ifdef FLOAT64 union ui64_f64 { uint64_t ui; float64_t f; }; +#endif static void checkEnoughCases( void ) { @@ -391,6 +394,8 @@ void gen_abc_f32( void ) } +#ifdef FLOAT64 + void gen_a_f64( void ) { union ui64_f64 uA; @@ -451,6 +456,8 @@ void gen_abc_f64( void ) } +#endif + #ifdef EXTFLOAT80 void gen_a_extF80( void ) @@ -601,6 +608,8 @@ void gen_a_ui32_z_f32( float32_t trueFunction( uint32_t ) ) } +#ifdef FLOAT64 + void gen_a_ui32_z_f64( float64_t trueFunction( uint32_t ) ) { union ui64_f64 uTrueZ; @@ -619,6 +628,8 @@ void gen_a_ui32_z_f64( float64_t trueFunction( uint32_t ) ) } +#endif + #ifdef EXTFLOAT80 void gen_a_ui32_z_extF80( void trueFunction( uint32_t, extFloat80_t * ) ) @@ -703,6 +714,8 @@ void gen_a_ui64_z_f32( float32_t trueFunction( uint64_t ) ) } +#ifdef FLOAT64 + void gen_a_ui64_z_f64( float64_t trueFunction( uint64_t ) ) { union ui64_f64 uTrueZ; @@ -721,6 +734,8 @@ void gen_a_ui64_z_f64( float64_t trueFunction( uint64_t ) ) } +#endif + #ifdef EXTFLOAT80 void gen_a_ui64_z_extF80( void trueFunction( uint64_t, extFloat80_t * ) ) @@ -805,6 +820,8 @@ void gen_a_i32_z_f32( float32_t trueFunction( int32_t ) ) } +#ifdef FLOAT64 + void gen_a_i32_z_f64( float64_t trueFunction( int32_t ) ) { union ui64_f64 uTrueZ; @@ -823,6 +840,8 @@ void gen_a_i32_z_f64( float64_t trueFunction( int32_t ) ) } +#endif + #ifdef EXTFLOAT80 void gen_a_i32_z_extF80( void trueFunction( int32_t, extFloat80_t * ) ) @@ -907,6 +926,8 @@ void gen_a_i64_z_f32( float32_t trueFunction( int64_t ) ) } +#ifdef FLOAT64 + void gen_a_i64_z_f64( float64_t trueFunction( int64_t ) ) { union ui64_f64 uTrueZ; @@ -925,6 +946,8 @@ void gen_a_i64_z_f64( float64_t trueFunction( int64_t ) ) } +#endif + #ifdef EXTFLOAT80 void gen_a_i64_z_extF80( void trueFunction( int64_t, extFloat80_t * ) ) @@ -1177,6 +1200,8 @@ void gen_a_f16_z_f32( float32_t trueFunction( float16_t ) ) } +#ifdef FLOAT64 + void gen_a_f16_z_f64( float64_t trueFunction( float16_t ) ) { union ui16_f16 uA; @@ -1197,6 +1222,8 @@ void gen_a_f16_z_f64( float64_t trueFunction( float16_t ) ) } +#endif + #ifdef EXTFLOAT80 void gen_a_f16_z_extF80( void trueFunction( float16_t, extFloat80_t * ) ) @@ -1566,6 +1593,8 @@ void gen_a_f32_z_f16( float16_t trueFunction( float32_t ) ) #endif +#ifdef FLOAT64 + void gen_a_f32_z_f64( float64_t trueFunction( float32_t ) ) { union ui32_f32 uA; @@ -1586,6 +1615,8 @@ void gen_a_f32_z_f64( float64_t trueFunction( float32_t ) ) } +#endif + #ifdef EXTFLOAT80 void gen_a_f32_z_extF80( void trueFunction( float32_t, extFloat80_t * ) ) @@ -1743,6 +1774,8 @@ void gen_ab_f32_z_bool( bool trueFunction( float32_t, float32_t ) ) } +#ifdef FLOAT64 + void gen_a_f64_z_ui32_rx( uint_fast32_t trueFunction( float64_t, uint_fast8_t, bool ), @@ -2130,6 +2163,8 @@ void gen_ab_f64_z_bool( bool trueFunction( float64_t, float64_t ) ) } +#endif + #ifdef EXTFLOAT80 void @@ -2344,6 +2379,8 @@ void gen_a_extF80_z_f32( float32_t trueFunction( const extFloat80_t * ) ) } +#ifdef FLOAT64 + void gen_a_extF80_z_f64( float64_t trueFunction( const extFloat80_t * ) ) { union ui64_f64 uTrueZ; @@ -2362,6 +2399,8 @@ void gen_a_extF80_z_f64( float64_t trueFunction( const extFloat80_t * ) ) } +#endif + #ifdef FLOAT128 void @@ -2452,37 +2491,6 @@ void } void - gen_abcz_extF80( - void - trueFunction( - const extFloat80_t *, - const extFloat80_t *, - const extFloat80_t *, - extFloat80_t * - ) - ) -{ - extFloat80_t trueZ; - uint_fast8_t trueFlags; - - genCases_extF80_abc_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_abc_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - writeHex_uiExtF80M( &genCases_extF80_b, ' ' ); - writeHex_uiExtF80M( &genCases_extF80_c, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( - &genCases_extF80_a, &genCases_extF80_b, &genCases_extF80_c, &trueZ - ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_extF80M( &trueZ, trueFlags ) ) break; - } - -} - -void gen_ab_extF80_z_bool( bool trueFunction( const extFloat80_t *, const extFloat80_t * ) ) { @@ -2719,6 +2727,8 @@ void gen_a_f128_z_f32( float32_t trueFunction( const float128_t * ) ) } +#ifdef FLOAT64 + void gen_a_f128_z_f64( float64_t trueFunction( const float128_t * ) ) { union ui64_f64 uTrueZ; @@ -2737,6 +2747,8 @@ void gen_a_f128_z_f64( float64_t trueFunction( const float128_t * ) ) } +#endif + #ifdef EXTFLOAT80 void |