
/*============================================================================

This C header file is part of TestFloat, Release 3, 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 The Regents of the University of California
(Regents).  All Rights Reserved.  Redistribution and use in source and binary
forms, with or without modification, are permitted provided that the following
conditions are met:

Redistributions of source code must retain the above copyright notice,
this list of conditions, and the following two paragraphs of disclaimer.
Redistributions in binary form must reproduce the above copyright notice,
this list of conditions, and the following two paragraphs of disclaimer in the
documentation and/or other materials provided with the distribution.  Neither
the name of the Regents nor the names of its contributors may be used to
endorse or promote products derived from this software without specific prior
written permission.

IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING
OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED
HEREUNDER IS PROVIDED "AS IS".  REGENTS HAS NO OBLIGATION TO PROVIDE
MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.

=============================================================================*/

#include <stdbool.h>
#include <stdint.h>
#include "softfloat.h"

extern int genCases_level;

void genCases_setLevel( int );

extern uint_fast64_t genCases_total;
extern bool genCases_done;

void genCases_ui32_a_init( void );
void genCases_ui32_a_next( void );
extern uint32_t genCases_ui32_a;

void genCases_ui64_a_init( void );
void genCases_ui64_a_next( void );
extern uint64_t genCases_ui64_a;

void genCases_i32_a_init( void );
void genCases_i32_a_next( void );
extern int32_t genCases_i32_a;

void genCases_i64_a_init( void );
void genCases_i64_a_next( void );
extern int64_t genCases_i64_a;

void genCases_f32_a_init( void );
void genCases_f32_a_next( void );
void genCases_f32_ab_init( void );
void genCases_f32_ab_next( void );
void genCases_f32_abc_init( void );
void genCases_f32_abc_next( void );
extern float32_t genCases_f32_a, genCases_f32_b, genCases_f32_c;

void genCases_f64_a_init( void );
void genCases_f64_a_next( void );
void genCases_f64_ab_init( void );
void genCases_f64_ab_next( void );
void genCases_f64_abc_init( void );
void genCases_f64_abc_next( void );
extern float64_t genCases_f64_a, genCases_f64_b, genCases_f64_c;

#ifdef EXTFLOAT80
void genCases_extF80_a_init( void );
void genCases_extF80_a_next( void );
void genCases_extF80_ab_init( void );
void genCases_extF80_ab_next( void );
void genCases_extF80_abc_init( void );
void genCases_extF80_abc_next( void );
extern extFloat80_t genCases_extF80_a, genCases_extF80_b, genCases_extF80_c;
#endif

#ifdef FLOAT128
void genCases_f128_a_init( void );
void genCases_f128_a_next( void );
void genCases_f128_ab_init( void );
void genCases_f128_ab_next( void );
void genCases_f128_abc_init( void );
void genCases_f128_abc_next( void );
extern float128_t genCases_f128_a, genCases_f128_b, genCases_f128_c;
#endif

void genCases_writeTestsTotal( bool );

