xref: /netbsd-src/regress/lib/libc/ieeefp/testfloat/include/testLoops.h (revision ce099b40997c43048fb78bd578195f81d2456523)
1*ce099b40Smartin /*	$NetBSD: testLoops.h,v 1.4 2008/04/28 20:23:04 martin Exp $	*/
24d8829d5Sross 
34d8829d5Sross /* This is a derivative work. */
44d8829d5Sross 
54d8829d5Sross /*-
64d8829d5Sross  * Copyright (c) 2001 The NetBSD Foundation, Inc.
74d8829d5Sross  * All rights reserved.
84d8829d5Sross  *
94d8829d5Sross  * This code is derived from software contributed to The NetBSD Foundation
104d8829d5Sross  * by Ross Harvey.
114d8829d5Sross  *
124d8829d5Sross  * Redistribution and use in source and binary forms, with or without
134d8829d5Sross  * modification, are permitted provided that the following conditions
144d8829d5Sross  * are met:
154d8829d5Sross  * 1. Redistributions of source code must retain the above copyright
164d8829d5Sross  *    notice, this list of conditions and the following disclaimer.
174d8829d5Sross  * 2. Redistributions in binary form must reproduce the above copyright
184d8829d5Sross  *    notice, this list of conditions and the following disclaimer in the
194d8829d5Sross  *    documentation and/or other materials provided with the distribution.
204d8829d5Sross  *
214d8829d5Sross  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
224d8829d5Sross  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
234d8829d5Sross  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
244d8829d5Sross  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
254d8829d5Sross  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
264d8829d5Sross  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
274d8829d5Sross  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
284d8829d5Sross  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
294d8829d5Sross  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
304d8829d5Sross  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
314d8829d5Sross  * POSSIBILITY OF SUCH DAMAGE.
324d8829d5Sross  */
335a6cac71Sross 
345a6cac71Sross /*
355a6cac71Sross ===============================================================================
365a6cac71Sross 
375a6cac71Sross This C header file is part of TestFloat, Release 2a, a package of programs
385a6cac71Sross for testing the correctness of floating-point arithmetic complying to the
395a6cac71Sross IEC/IEEE Standard for Floating-Point.
405a6cac71Sross 
415a6cac71Sross Written by John R. Hauser.  More information is available through the Web
425a6cac71Sross page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
435a6cac71Sross 
445a6cac71Sross THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort
455a6cac71Sross has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
465a6cac71Sross TIMES RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO
475a6cac71Sross PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
485a6cac71Sross AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
495a6cac71Sross 
505a6cac71Sross Derivative works are acceptable, even for commercial purposes, so long as
515a6cac71Sross (1) they include prominent notice that the work is derivative, and (2) they
525a6cac71Sross include prominent notice akin to these four paragraphs for those parts of
535a6cac71Sross this code that are retained.
545a6cac71Sross 
555a6cac71Sross ===============================================================================
565a6cac71Sross */
575a6cac71Sross 
585a6cac71Sross #include <stdio.h>
595a6cac71Sross 
605a6cac71Sross extern volatile flag stop;
615a6cac71Sross 
624d8829d5Sross extern const char *trueName, *testName;
635a6cac71Sross extern flag forever, errorStop;
645a6cac71Sross extern uint32 maxErrorCount;
655a6cac71Sross extern flag checkNaNs;
665a6cac71Sross extern int8 *trueFlagsPtr;
675a6cac71Sross extern int8 ( *testFlagsFunctionPtr )( void );
684d8829d5Sross extern const char *functionName;
694d8829d5Sross extern const char *roundingPrecisionName, *roundingModeName, *tininessModeName;
705a6cac71Sross extern flag anyErrors;
715a6cac71Sross 
725a6cac71Sross void writeFunctionName( FILE * );
735a6cac71Sross void exitWithStatus( void );
745a6cac71Sross 
755a6cac71Sross void test_a_int32_z_float32( float32 ( int32 ), float32 ( int32 ) );
765a6cac71Sross void test_a_int32_z_float64( float64 ( int32 ), float64 ( int32 ) );
775a6cac71Sross #ifdef FLOATX80
785a6cac71Sross void test_a_int32_z_floatx80( floatx80 ( int32 ), floatx80 ( int32 ) );
795a6cac71Sross #endif
805a6cac71Sross #ifdef FLOAT128
815a6cac71Sross void test_a_int32_z_float128( float128 ( int32 ), float128 ( int32 ) );
825a6cac71Sross #endif
835a6cac71Sross #ifdef BITS64
845a6cac71Sross void test_a_int64_z_float32( float32 ( int64 ), float32 ( int64 ) );
855a6cac71Sross void test_a_int64_z_float64( float64 ( int64 ), float64 ( int64 ) );
865a6cac71Sross #ifdef FLOATX80
875a6cac71Sross void test_a_int64_z_floatx80( floatx80 ( int64 ), floatx80 ( int64 ) );
885a6cac71Sross #endif
895a6cac71Sross #ifdef FLOAT128
905a6cac71Sross void test_a_int64_z_float128( float128 ( int64 ), float128 ( int64 ) );
915a6cac71Sross #endif
925a6cac71Sross #endif
935a6cac71Sross 
945a6cac71Sross void test_a_float32_z_int32( int32 ( float32 ), int32 ( float32 ) );
955a6cac71Sross #ifdef BITS64
965a6cac71Sross void test_a_float32_z_int64( int64 ( float32 ), int64 ( float32 ) );
975a6cac71Sross #endif
985a6cac71Sross void test_a_float32_z_float64( float64 ( float32 ), float64 ( float32 ) );
995a6cac71Sross #ifdef FLOATX80
1005a6cac71Sross void test_a_float32_z_floatx80( floatx80 ( float32 ), floatx80 ( float32 ) );
1015a6cac71Sross #endif
1025a6cac71Sross #ifdef FLOAT128
1035a6cac71Sross void test_a_float32_z_float128( float128 ( float32 ), float128 ( float32 ) );
1045a6cac71Sross #endif
1055a6cac71Sross void test_az_float32( float32 ( float32 ), float32 ( float32 ) );
1065a6cac71Sross void
1075a6cac71Sross  test_ab_float32_z_flag(
1085a6cac71Sross      flag ( float32, float32 ), flag ( float32, float32 ) );
1095a6cac71Sross void
1105a6cac71Sross  test_abz_float32(
1115a6cac71Sross      float32 ( float32, float32 ), float32 ( float32, float32 ) );
1125a6cac71Sross 
1135a6cac71Sross void test_a_float64_z_int32( int32 ( float64 ), int32 ( float64 ) );
1145a6cac71Sross #ifdef BITS64
1155a6cac71Sross void test_a_float64_z_int64( int64 ( float64 ), int64 ( float64 ) );
1165a6cac71Sross #endif
1175a6cac71Sross void test_a_float64_z_float32( float32 ( float64 ), float32 ( float64 ) );
1185a6cac71Sross #ifdef FLOATX80
1195a6cac71Sross void test_a_float64_z_floatx80( floatx80 ( float64 ), floatx80 ( float64 ) );
1205a6cac71Sross #endif
1215a6cac71Sross #ifdef FLOAT128
1225a6cac71Sross void test_a_float64_z_float128( float128 ( float64 ), float128 ( float64 ) );
1235a6cac71Sross #endif
1245a6cac71Sross void test_az_float64( float64 ( float64 ), float64 ( float64 ) );
1255a6cac71Sross void
1265a6cac71Sross  test_ab_float64_z_flag(
1275a6cac71Sross      flag ( float64, float64 ), flag ( float64, float64 ) );
1285a6cac71Sross void
1295a6cac71Sross  test_abz_float64(
1305a6cac71Sross      float64 ( float64, float64 ), float64 ( float64, float64 ) );
1315a6cac71Sross 
1325a6cac71Sross #ifdef FLOATX80
1335a6cac71Sross 
1345a6cac71Sross void test_a_floatx80_z_int32( int32 ( floatx80 ), int32 ( floatx80 ) );
1355a6cac71Sross #ifdef BITS64
1365a6cac71Sross void test_a_floatx80_z_int64( int64 ( floatx80 ), int64 ( floatx80 ) );
1375a6cac71Sross #endif
1385a6cac71Sross void test_a_floatx80_z_float32( float32 ( floatx80 ), float32 ( floatx80 ) );
1395a6cac71Sross void test_a_floatx80_z_float64( float64 ( floatx80 ), float64 ( floatx80 ) );
1405a6cac71Sross #ifdef FLOAT128
1415a6cac71Sross void
1425a6cac71Sross  test_a_floatx80_z_float128( float128 ( floatx80 ), float128 ( floatx80 ) );
1435a6cac71Sross #endif
1445a6cac71Sross void test_az_floatx80( floatx80 ( floatx80 ), floatx80 ( floatx80 ) );
1455a6cac71Sross void
1465a6cac71Sross  test_ab_floatx80_z_flag(
1475a6cac71Sross      flag ( floatx80, floatx80 ), flag ( floatx80, floatx80 ) );
1485a6cac71Sross void
1495a6cac71Sross  test_abz_floatx80(
1505a6cac71Sross      floatx80 ( floatx80, floatx80 ), floatx80 ( floatx80, floatx80 ) );
1515a6cac71Sross 
1525a6cac71Sross #endif
1535a6cac71Sross 
1545a6cac71Sross #ifdef FLOAT128
1555a6cac71Sross 
1565a6cac71Sross void test_a_float128_z_int32( int32 ( float128 ), int32 ( float128 ) );
1575a6cac71Sross #ifdef BITS64
1585a6cac71Sross void test_a_float128_z_int64( int64 ( float128 ), int64 ( float128 ) );
1595a6cac71Sross #endif
1605a6cac71Sross void test_a_float128_z_float32( float32 ( float128 ), float32 ( float128 ) );
1615a6cac71Sross void test_a_float128_z_float64( float64 ( float128 ), float64 ( float128 ) );
1625a6cac71Sross #ifdef FLOATX80
1635a6cac71Sross void
1645a6cac71Sross  test_a_float128_z_floatx80( floatx80 ( float128 ), floatx80 ( float128 ) );
1655a6cac71Sross #endif
1665a6cac71Sross void test_az_float128( float128 ( float128 ), float128 ( float128 ) );
1675a6cac71Sross void
1685a6cac71Sross  test_ab_float128_z_flag(
1695a6cac71Sross      flag ( float128, float128 ), flag ( float128, float128 ) );
1705a6cac71Sross void
1715a6cac71Sross  test_abz_float128(
1725a6cac71Sross      float128 ( float128, float128 ), float128 ( float128, float128 ) );
1735a6cac71Sross 
1745a6cac71Sross #endif
1755a6cac71Sross 
176