Home | History | Annotate | Line # | Download | only in testfloat
testFunction.c revision 1.6
      1  1.6    martin /*	$NetBSD: testFunction.c,v 1.6 2008/04/28 20:23:04 martin Exp $	*/
      2  1.3      ross 
      3  1.3      ross /* This is a derivative work. */
      4  1.3      ross 
      5  1.3      ross /*-
      6  1.3      ross  * Copyright (c) 2001 The NetBSD Foundation, Inc.
      7  1.3      ross  * All rights reserved.
      8  1.3      ross  *
      9  1.3      ross  * This code is derived from software contributed to The NetBSD Foundation
     10  1.3      ross  * by Ross Harvey.
     11  1.3      ross  *
     12  1.3      ross  * Redistribution and use in source and binary forms, with or without
     13  1.3      ross  * modification, are permitted provided that the following conditions
     14  1.3      ross  * are met:
     15  1.3      ross  * 1. Redistributions of source code must retain the above copyright
     16  1.3      ross  *    notice, this list of conditions and the following disclaimer.
     17  1.3      ross  * 2. Redistributions in binary form must reproduce the above copyright
     18  1.3      ross  *    notice, this list of conditions and the following disclaimer in the
     19  1.3      ross  *    documentation and/or other materials provided with the distribution.
     20  1.3      ross  *
     21  1.3      ross  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     22  1.3      ross  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     23  1.3      ross  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     24  1.3      ross  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     25  1.3      ross  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     26  1.3      ross  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     27  1.3      ross  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     28  1.3      ross  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     29  1.3      ross  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     30  1.3      ross  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     31  1.3      ross  * POSSIBILITY OF SUCH DAMAGE.
     32  1.3      ross  */
     33  1.1      ross 
     34  1.1      ross /*
     35  1.1      ross ===============================================================================
     36  1.1      ross 
     37  1.1      ross This C source file is part of TestFloat, Release 2a, a package of programs
     38  1.1      ross for testing the correctness of floating-point arithmetic complying to the
     39  1.1      ross IEC/IEEE Standard for Floating-Point.
     40  1.1      ross 
     41  1.1      ross Written by John R. Hauser.  More information is available through the Web
     42  1.1      ross page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
     43  1.1      ross 
     44  1.1      ross THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort
     45  1.1      ross has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
     46  1.1      ross TIMES RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO
     47  1.1      ross PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
     48  1.1      ross AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
     49  1.1      ross 
     50  1.1      ross Derivative works are acceptable, even for commercial purposes, so long as
     51  1.1      ross (1) they include prominent notice that the work is derivative, and (2) they
     52  1.1      ross include prominent notice akin to these four paragraphs for those parts of
     53  1.1      ross this code that are retained.
     54  1.1      ross 
     55  1.1      ross ===============================================================================
     56  1.1      ross */
     57  1.1      ross 
     58  1.1      ross #include "milieu.h"
     59  1.1      ross #include "softfloat.h"
     60  1.1      ross #include "testCases.h"
     61  1.1      ross #include "testLoops.h"
     62  1.1      ross #include "systmodes.h"
     63  1.1      ross #include "systflags.h"
     64  1.1      ross #include "systfloat.h"
     65  1.1      ross #include "testFunction.h"
     66  1.1      ross 
     67  1.1      ross const functionT functions[ NUM_FUNCTIONS ] = {
     68  1.1      ross     { 0, 0, 0, 0 },
     69  1.1      ross     { "int32_to_float32",                1, FALSE, TRUE  },
     70  1.1      ross     { "int32_to_float64",                1, FALSE, FALSE },
     71  1.1      ross     { "int32_to_floatx80",               1, FALSE, FALSE },
     72  1.1      ross     { "int32_to_float128",               1, FALSE, FALSE },
     73  1.1      ross     { "int64_to_float32",                1, FALSE, TRUE  },
     74  1.1      ross     { "int64_to_float64",                1, FALSE, TRUE  },
     75  1.1      ross     { "int64_to_floatx80",               1, FALSE, FALSE },
     76  1.1      ross     { "int64_to_float128",               1, FALSE, FALSE },
     77  1.1      ross     { "float32_to_int32",                1, FALSE, TRUE  },
     78  1.1      ross     { "float32_to_int32_round_to_zero",  1, FALSE, FALSE },
     79  1.1      ross     { "float32_to_int64",                1, FALSE, TRUE  },
     80  1.1      ross     { "float32_to_int64_round_to_zero",  1, FALSE, FALSE },
     81  1.1      ross     { "float32_to_float64",              1, FALSE, FALSE },
     82  1.1      ross     { "float32_to_floatx80",             1, FALSE, FALSE },
     83  1.1      ross     { "float32_to_float128",             1, FALSE, FALSE },
     84  1.1      ross     { "float32_round_to_int",            1, FALSE, TRUE  },
     85  1.1      ross     { "float32_add",                     2, FALSE, TRUE  },
     86  1.1      ross     { "float32_sub",                     2, FALSE, TRUE  },
     87  1.1      ross     { "float32_mul",                     2, FALSE, TRUE  },
     88  1.1      ross     { "float32_div",                     2, FALSE, TRUE  },
     89  1.1      ross     { "float32_rem",                     2, FALSE, FALSE },
     90  1.1      ross     { "float32_sqrt",                    1, FALSE, TRUE  },
     91  1.1      ross     { "float32_eq",                      2, FALSE, FALSE },
     92  1.1      ross     { "float32_le",                      2, FALSE, FALSE },
     93  1.1      ross     { "float32_lt",                      2, FALSE, FALSE },
     94  1.1      ross     { "float32_eq_signaling",            2, FALSE, FALSE },
     95  1.1      ross     { "float32_le_quiet",                2, FALSE, FALSE },
     96  1.1      ross     { "float32_lt_quiet",                2, FALSE, FALSE },
     97  1.1      ross     { "float64_to_int32",                1, FALSE, TRUE  },
     98  1.1      ross     { "float64_to_int32_round_to_zero",  1, FALSE, FALSE },
     99  1.1      ross     { "float64_to_int64",                1, FALSE, TRUE  },
    100  1.1      ross     { "float64_to_int64_round_to_zero",  1, FALSE, FALSE },
    101  1.1      ross     { "float64_to_float32",              1, FALSE, TRUE  },
    102  1.1      ross     { "float64_to_floatx80",             1, FALSE, FALSE },
    103  1.1      ross     { "float64_to_float128",             1, FALSE, FALSE },
    104  1.1      ross     { "float64_round_to_int",            1, FALSE, TRUE  },
    105  1.1      ross     { "float64_add",                     2, FALSE, TRUE  },
    106  1.1      ross     { "float64_sub",                     2, FALSE, TRUE  },
    107  1.1      ross     { "float64_mul",                     2, FALSE, TRUE  },
    108  1.1      ross     { "float64_div",                     2, FALSE, TRUE  },
    109  1.1      ross     { "float64_rem",                     2, FALSE, FALSE },
    110  1.1      ross     { "float64_sqrt",                    1, FALSE, TRUE  },
    111  1.1      ross     { "float64_eq",                      2, FALSE, FALSE },
    112  1.1      ross     { "float64_le",                      2, FALSE, FALSE },
    113  1.1      ross     { "float64_lt",                      2, FALSE, FALSE },
    114  1.1      ross     { "float64_eq_signaling",            2, FALSE, FALSE },
    115  1.1      ross     { "float64_le_quiet",                2, FALSE, FALSE },
    116  1.1      ross     { "float64_lt_quiet",                2, FALSE, FALSE },
    117  1.1      ross     { "floatx80_to_int32",               1, FALSE, TRUE  },
    118  1.1      ross     { "floatx80_to_int32_round_to_zero", 1, FALSE, FALSE },
    119  1.1      ross     { "floatx80_to_int64",               1, FALSE, TRUE  },
    120  1.1      ross     { "floatx80_to_int64_round_to_zero", 1, FALSE, FALSE },
    121  1.1      ross     { "floatx80_to_float32",             1, FALSE, TRUE  },
    122  1.1      ross     { "floatx80_to_float64",             1, FALSE, TRUE  },
    123  1.1      ross     { "floatx80_to_float128",            1, FALSE, FALSE },
    124  1.1      ross     { "floatx80_round_to_int",           1, FALSE, TRUE  },
    125  1.1      ross     { "floatx80_add",                    2, TRUE,  TRUE  },
    126  1.1      ross     { "floatx80_sub",                    2, TRUE,  TRUE  },
    127  1.1      ross     { "floatx80_mul",                    2, TRUE,  TRUE  },
    128  1.1      ross     { "floatx80_div",                    2, TRUE,  TRUE  },
    129  1.1      ross     { "floatx80_rem",                    2, FALSE, FALSE },
    130  1.1      ross     { "floatx80_sqrt",                   1, TRUE,  TRUE  },
    131  1.1      ross     { "floatx80_eq",                     2, FALSE, FALSE },
    132  1.1      ross     { "floatx80_le",                     2, FALSE, FALSE },
    133  1.1      ross     { "floatx80_lt",                     2, FALSE, FALSE },
    134  1.1      ross     { "floatx80_eq_signaling",           2, FALSE, FALSE },
    135  1.1      ross     { "floatx80_le_quiet",               2, FALSE, FALSE },
    136  1.1      ross     { "floatx80_lt_quiet",               2, FALSE, FALSE },
    137  1.1      ross     { "float128_to_int32",               1, FALSE, TRUE  },
    138  1.1      ross     { "float128_to_int32_round_to_zero", 1, FALSE, FALSE },
    139  1.1      ross     { "float128_to_int64",               1, FALSE, TRUE  },
    140  1.1      ross     { "float128_to_int64_round_to_zero", 1, FALSE, FALSE },
    141  1.1      ross     { "float128_to_float32",             1, FALSE, TRUE  },
    142  1.1      ross     { "float128_to_float64",             1, FALSE, TRUE  },
    143  1.1      ross     { "float128_to_floatx80",            1, FALSE, TRUE  },
    144  1.1      ross     { "float128_round_to_int",           1, FALSE, TRUE  },
    145  1.1      ross     { "float128_add",                    2, FALSE, TRUE  },
    146  1.1      ross     { "float128_sub",                    2, FALSE, TRUE  },
    147  1.1      ross     { "float128_mul",                    2, FALSE, TRUE  },
    148  1.1      ross     { "float128_div",                    2, FALSE, TRUE  },
    149  1.1      ross     { "float128_rem",                    2, FALSE, FALSE },
    150  1.1      ross     { "float128_sqrt",                   1, FALSE, TRUE  },
    151  1.1      ross     { "float128_eq",                     2, FALSE, FALSE },
    152  1.1      ross     { "float128_le",                     2, FALSE, FALSE },
    153  1.1      ross     { "float128_lt",                     2, FALSE, FALSE },
    154  1.1      ross     { "float128_eq_signaling",           2, FALSE, FALSE },
    155  1.1      ross     { "float128_le_quiet",               2, FALSE, FALSE },
    156  1.1      ross     { "float128_lt_quiet",               2, FALSE, FALSE },
    157  1.1      ross };
    158  1.1      ross 
    159  1.1      ross const flag functionExists[ NUM_FUNCTIONS ] = {
    160  1.1      ross     0,
    161  1.1      ross #ifdef SYST_INT32_TO_FLOAT32
    162  1.1      ross     1,
    163  1.1      ross #else
    164  1.1      ross     0,
    165  1.1      ross #endif
    166  1.1      ross #ifdef SYST_INT32_TO_FLOAT64
    167  1.1      ross     1,
    168  1.1      ross #else
    169  1.1      ross     0,
    170  1.1      ross #endif
    171  1.1      ross #ifdef SYST_INT32_TO_FLOATX80
    172  1.1      ross     1,
    173  1.1      ross #else
    174  1.1      ross     0,
    175  1.1      ross #endif
    176  1.1      ross #ifdef SYST_INT32_TO_FLOAT128
    177  1.1      ross     1,
    178  1.1      ross #else
    179  1.1      ross     0,
    180  1.1      ross #endif
    181  1.1      ross #ifdef SYST_INT64_TO_FLOAT32
    182  1.1      ross     1,
    183  1.1      ross #else
    184  1.1      ross     0,
    185  1.1      ross #endif
    186  1.1      ross #ifdef SYST_INT64_TO_FLOAT64
    187  1.1      ross     1,
    188  1.1      ross #else
    189  1.1      ross     0,
    190  1.1      ross #endif
    191  1.1      ross #ifdef SYST_INT64_TO_FLOATX80
    192  1.1      ross     1,
    193  1.1      ross #else
    194  1.1      ross     0,
    195  1.1      ross #endif
    196  1.1      ross #ifdef SYST_INT64_TO_FLOAT128
    197  1.1      ross     1,
    198  1.1      ross #else
    199  1.1      ross     0,
    200  1.1      ross #endif
    201  1.1      ross #ifdef SYST_FLOAT32_TO_INT32
    202  1.1      ross     1,
    203  1.1      ross #else
    204  1.1      ross     0,
    205  1.1      ross #endif
    206  1.1      ross #ifdef SYST_FLOAT32_TO_INT32_ROUND_TO_ZERO
    207  1.1      ross     1,
    208  1.1      ross #else
    209  1.1      ross     0,
    210  1.1      ross #endif
    211  1.1      ross #ifdef SYST_FLOAT32_TO_INT64
    212  1.1      ross     1,
    213  1.1      ross #else
    214  1.1      ross     0,
    215  1.1      ross #endif
    216  1.1      ross #ifdef SYST_FLOAT32_TO_INT64_ROUND_TO_ZERO
    217  1.1      ross     1,
    218  1.1      ross #else
    219  1.1      ross     0,
    220  1.1      ross #endif
    221  1.1      ross #ifdef SYST_FLOAT32_TO_FLOAT64
    222  1.1      ross     1,
    223  1.1      ross #else
    224  1.1      ross     0,
    225  1.1      ross #endif
    226  1.1      ross #ifdef SYST_FLOAT32_TO_FLOATX80
    227  1.1      ross     1,
    228  1.1      ross #else
    229  1.1      ross     0,
    230  1.1      ross #endif
    231  1.1      ross #ifdef SYST_FLOAT32_TO_FLOAT128
    232  1.1      ross     1,
    233  1.1      ross #else
    234  1.1      ross     0,
    235  1.1      ross #endif
    236  1.1      ross #ifdef SYST_FLOAT32_ROUND_TO_INT
    237  1.1      ross     1,
    238  1.1      ross #else
    239  1.1      ross     0,
    240  1.1      ross #endif
    241  1.1      ross #ifdef SYST_FLOAT32_ADD
    242  1.1      ross     1,
    243  1.1      ross #else
    244  1.1      ross     0,
    245  1.1      ross #endif
    246  1.1      ross #ifdef SYST_FLOAT32_SUB
    247  1.1      ross     1,
    248  1.1      ross #else
    249  1.1      ross     0,
    250  1.1      ross #endif
    251  1.1      ross #ifdef SYST_FLOAT32_MUL
    252  1.1      ross     1,
    253  1.1      ross #else
    254  1.1      ross     0,
    255  1.1      ross #endif
    256  1.1      ross #ifdef SYST_FLOAT32_DIV
    257  1.1      ross     1,
    258  1.1      ross #else
    259  1.1      ross     0,
    260  1.1      ross #endif
    261  1.1      ross #ifdef SYST_FLOAT32_REM
    262  1.1      ross     1,
    263  1.1      ross #else
    264  1.1      ross     0,
    265  1.1      ross #endif
    266  1.1      ross #ifdef SYST_FLOAT32_SQRT
    267  1.1      ross     1,
    268  1.1      ross #else
    269  1.1      ross     0,
    270  1.1      ross #endif
    271  1.1      ross #ifdef SYST_FLOAT32_EQ
    272  1.1      ross     1,
    273  1.1      ross #else
    274  1.1      ross     0,
    275  1.1      ross #endif
    276  1.1      ross #ifdef SYST_FLOAT32_LE
    277  1.1      ross     1,
    278  1.1      ross #else
    279  1.1      ross     0,
    280  1.1      ross #endif
    281  1.1      ross #ifdef SYST_FLOAT32_LT
    282  1.1      ross     1,
    283  1.1      ross #else
    284  1.1      ross     0,
    285  1.1      ross #endif
    286  1.1      ross #ifdef SYST_FLOAT32_EQ_SIGNALING
    287  1.1      ross     1,
    288  1.1      ross #else
    289  1.1      ross     0,
    290  1.1      ross #endif
    291  1.1      ross #ifdef SYST_FLOAT32_LE_QUIET
    292  1.1      ross     1,
    293  1.1      ross #else
    294  1.1      ross     0,
    295  1.1      ross #endif
    296  1.1      ross #ifdef SYST_FLOAT32_LT_QUIET
    297  1.1      ross     1,
    298  1.1      ross #else
    299  1.1      ross     0,
    300  1.1      ross #endif
    301  1.1      ross #ifdef SYST_FLOAT64_TO_INT32
    302  1.1      ross     1,
    303  1.1      ross #else
    304  1.1      ross     0,
    305  1.1      ross #endif
    306  1.1      ross #ifdef SYST_FLOAT64_TO_INT32_ROUND_TO_ZERO
    307  1.1      ross     1,
    308  1.1      ross #else
    309  1.1      ross     0,
    310  1.1      ross #endif
    311  1.1      ross #ifdef SYST_FLOAT64_TO_INT64
    312  1.1      ross     1,
    313  1.1      ross #else
    314  1.1      ross     0,
    315  1.1      ross #endif
    316  1.1      ross #ifdef SYST_FLOAT64_TO_INT64_ROUND_TO_ZERO
    317  1.1      ross     1,
    318  1.1      ross #else
    319  1.1      ross     0,
    320  1.1      ross #endif
    321  1.1      ross #ifdef SYST_FLOAT64_TO_FLOAT32
    322  1.1      ross     1,
    323  1.1      ross #else
    324  1.1      ross     0,
    325  1.1      ross #endif
    326  1.1      ross #ifdef SYST_FLOAT64_TO_FLOATX80
    327  1.1      ross     1,
    328  1.1      ross #else
    329  1.1      ross     0,
    330  1.1      ross #endif
    331  1.1      ross #ifdef SYST_FLOAT64_TO_FLOAT128
    332  1.1      ross     1,
    333  1.1      ross #else
    334  1.1      ross     0,
    335  1.1      ross #endif
    336  1.1      ross #ifdef SYST_FLOAT64_ROUND_TO_INT
    337  1.1      ross     1,
    338  1.1      ross #else
    339  1.1      ross     0,
    340  1.1      ross #endif
    341  1.1      ross #ifdef SYST_FLOAT64_ADD
    342  1.1      ross     1,
    343  1.1      ross #else
    344  1.1      ross     0,
    345  1.1      ross #endif
    346  1.1      ross #ifdef SYST_FLOAT64_SUB
    347  1.1      ross     1,
    348  1.1      ross #else
    349  1.1      ross     0,
    350  1.1      ross #endif
    351  1.1      ross #ifdef SYST_FLOAT64_MUL
    352  1.1      ross     1,
    353  1.1      ross #else
    354  1.1      ross     0,
    355  1.1      ross #endif
    356  1.1      ross #ifdef SYST_FLOAT64_DIV
    357  1.1      ross     1,
    358  1.1      ross #else
    359  1.1      ross     0,
    360  1.1      ross #endif
    361  1.1      ross #ifdef SYST_FLOAT64_REM
    362  1.1      ross     1,
    363  1.1      ross #else
    364  1.1      ross     0,
    365  1.1      ross #endif
    366  1.1      ross #ifdef SYST_FLOAT64_SQRT
    367  1.1      ross     1,
    368  1.1      ross #else
    369  1.1      ross     0,
    370  1.1      ross #endif
    371  1.1      ross #ifdef SYST_FLOAT64_EQ
    372  1.1      ross     1,
    373  1.1      ross #else
    374  1.1      ross     0,
    375  1.1      ross #endif
    376  1.1      ross #ifdef SYST_FLOAT64_LE
    377  1.1      ross     1,
    378  1.1      ross #else
    379  1.1      ross     0,
    380  1.1      ross #endif
    381  1.1      ross #ifdef SYST_FLOAT64_LT
    382  1.1      ross     1,
    383  1.1      ross #else
    384  1.1      ross     0,
    385  1.1      ross #endif
    386  1.1      ross #ifdef SYST_FLOAT64_EQ_SIGNALING
    387  1.1      ross     1,
    388  1.1      ross #else
    389  1.1      ross     0,
    390  1.1      ross #endif
    391  1.1      ross #ifdef SYST_FLOAT64_LE_QUIET
    392  1.1      ross     1,
    393  1.1      ross #else
    394  1.1      ross     0,
    395  1.1      ross #endif
    396  1.1      ross #ifdef SYST_FLOAT64_LT_QUIET
    397  1.1      ross     1,
    398  1.1      ross #else
    399  1.1      ross     0,
    400  1.1      ross #endif
    401  1.1      ross #ifdef SYST_FLOATX80_TO_INT32
    402  1.1      ross     1,
    403  1.1      ross #else
    404  1.1      ross     0,
    405  1.1      ross #endif
    406  1.1      ross #ifdef SYST_FLOATX80_TO_INT32_ROUND_TO_ZERO
    407  1.1      ross     1,
    408  1.1      ross #else
    409  1.1      ross     0,
    410  1.1      ross #endif
    411  1.1      ross #ifdef SYST_FLOATX80_TO_INT64
    412  1.1      ross     1,
    413  1.1      ross #else
    414  1.1      ross     0,
    415  1.1      ross #endif
    416  1.1      ross #ifdef SYST_FLOATX80_TO_INT64_ROUND_TO_ZERO
    417  1.1      ross     1,
    418  1.1      ross #else
    419  1.1      ross     0,
    420  1.1      ross #endif
    421  1.1      ross #ifdef SYST_FLOATX80_TO_FLOAT32
    422  1.1      ross     1,
    423  1.1      ross #else
    424  1.1      ross     0,
    425  1.1      ross #endif
    426  1.1      ross #ifdef SYST_FLOATX80_TO_FLOAT64
    427  1.1      ross     1,
    428  1.1      ross #else
    429  1.1      ross     0,
    430  1.1      ross #endif
    431  1.1      ross #ifdef SYST_FLOATX80_TO_FLOAT128
    432  1.1      ross     1,
    433  1.1      ross #else
    434  1.1      ross     0,
    435  1.1      ross #endif
    436  1.1      ross #ifdef SYST_FLOATX80_ROUND_TO_INT
    437  1.1      ross     1,
    438  1.1      ross #else
    439  1.1      ross     0,
    440  1.1      ross #endif
    441  1.1      ross #ifdef SYST_FLOATX80_ADD
    442  1.1      ross     1,
    443  1.1      ross #else
    444  1.1      ross     0,
    445  1.1      ross #endif
    446  1.1      ross #ifdef SYST_FLOATX80_SUB
    447  1.1      ross     1,
    448  1.1      ross #else
    449  1.1      ross     0,
    450  1.1      ross #endif
    451  1.1      ross #ifdef SYST_FLOATX80_MUL
    452  1.1      ross     1,
    453  1.1      ross #else
    454  1.1      ross     0,
    455  1.1      ross #endif
    456  1.1      ross #ifdef SYST_FLOATX80_DIV
    457  1.1      ross     1,
    458  1.1      ross #else
    459  1.1      ross     0,
    460  1.1      ross #endif
    461  1.1      ross #ifdef SYST_FLOATX80_REM
    462  1.1      ross     1,
    463  1.1      ross #else
    464  1.1      ross     0,
    465  1.1      ross #endif
    466  1.1      ross #ifdef SYST_FLOATX80_SQRT
    467  1.1      ross     1,
    468  1.1      ross #else
    469  1.1      ross     0,
    470  1.1      ross #endif
    471  1.1      ross #ifdef SYST_FLOATX80_EQ
    472  1.1      ross     1,
    473  1.1      ross #else
    474  1.1      ross     0,
    475  1.1      ross #endif
    476  1.1      ross #ifdef SYST_FLOATX80_LE
    477  1.1      ross     1,
    478  1.1      ross #else
    479  1.1      ross     0,
    480  1.1      ross #endif
    481  1.1      ross #ifdef SYST_FLOATX80_LT
    482  1.1      ross     1,
    483  1.1      ross #else
    484  1.1      ross     0,
    485  1.1      ross #endif
    486  1.1      ross #ifdef SYST_FLOATX80_EQ_SIGNALING
    487  1.1      ross     1,
    488  1.1      ross #else
    489  1.1      ross     0,
    490  1.1      ross #endif
    491  1.1      ross #ifdef SYST_FLOATX80_LE_QUIET
    492  1.1      ross     1,
    493  1.1      ross #else
    494  1.1      ross     0,
    495  1.1      ross #endif
    496  1.1      ross #ifdef SYST_FLOATX80_LT_QUIET
    497  1.1      ross     1,
    498  1.1      ross #else
    499  1.1      ross     0,
    500  1.1      ross #endif
    501  1.1      ross #ifdef SYST_FLOAT128_TO_INT32
    502  1.1      ross     1,
    503  1.1      ross #else
    504  1.1      ross     0,
    505  1.1      ross #endif
    506  1.1      ross #ifdef SYST_FLOAT128_TO_INT32_ROUND_TO_ZERO
    507  1.1      ross     1,
    508  1.1      ross #else
    509  1.1      ross     0,
    510  1.1      ross #endif
    511  1.1      ross #ifdef SYST_FLOAT128_TO_INT64
    512  1.1      ross     1,
    513  1.1      ross #else
    514  1.1      ross     0,
    515  1.1      ross #endif
    516  1.1      ross #ifdef SYST_FLOAT128_TO_INT64_ROUND_TO_ZERO
    517  1.1      ross     1,
    518  1.1      ross #else
    519  1.1      ross     0,
    520  1.1      ross #endif
    521  1.1      ross #ifdef SYST_FLOAT128_TO_FLOAT32
    522  1.1      ross     1,
    523  1.1      ross #else
    524  1.1      ross     0,
    525  1.1      ross #endif
    526  1.1      ross #ifdef SYST_FLOAT128_TO_FLOAT64
    527  1.1      ross     1,
    528  1.1      ross #else
    529  1.1      ross     0,
    530  1.1      ross #endif
    531  1.1      ross #ifdef SYST_FLOAT128_TO_FLOATX80
    532  1.1      ross     1,
    533  1.1      ross #else
    534  1.1      ross     0,
    535  1.1      ross #endif
    536  1.1      ross #ifdef SYST_FLOAT128_ROUND_TO_INT
    537  1.1      ross     1,
    538  1.1      ross #else
    539  1.1      ross     0,
    540  1.1      ross #endif
    541  1.1      ross #ifdef SYST_FLOAT128_ADD
    542  1.1      ross     1,
    543  1.1      ross #else
    544  1.1      ross     0,
    545  1.1      ross #endif
    546  1.1      ross #ifdef SYST_FLOAT128_SUB
    547  1.1      ross     1,
    548  1.1      ross #else
    549  1.1      ross     0,
    550  1.1      ross #endif
    551  1.1      ross #ifdef SYST_FLOAT128_MUL
    552  1.1      ross     1,
    553  1.1      ross #else
    554  1.1      ross     0,
    555  1.1      ross #endif
    556  1.1      ross #ifdef SYST_FLOAT128_DIV
    557  1.1      ross     1,
    558  1.1      ross #else
    559  1.1      ross     0,
    560  1.1      ross #endif
    561  1.1      ross #ifdef SYST_FLOAT128_REM
    562  1.1      ross     1,
    563  1.1      ross #else
    564  1.1      ross     0,
    565  1.1      ross #endif
    566  1.1      ross #ifdef SYST_FLOAT128_SQRT
    567  1.1      ross     1,
    568  1.1      ross #else
    569  1.1      ross     0,
    570  1.1      ross #endif
    571  1.1      ross #ifdef SYST_FLOAT128_EQ
    572  1.1      ross     1,
    573  1.1      ross #else
    574  1.1      ross     0,
    575  1.1      ross #endif
    576  1.1      ross #ifdef SYST_FLOAT128_LE
    577  1.1      ross     1,
    578  1.1      ross #else
    579  1.1      ross     0,
    580  1.1      ross #endif
    581  1.1      ross #ifdef SYST_FLOAT128_LT
    582  1.1      ross     1,
    583  1.1      ross #else
    584  1.1      ross     0,
    585  1.1      ross #endif
    586  1.1      ross #ifdef SYST_FLOAT128_EQ_SIGNALING
    587  1.1      ross     1,
    588  1.1      ross #else
    589  1.1      ross     0,
    590  1.1      ross #endif
    591  1.1      ross #ifdef SYST_FLOAT128_LE_QUIET
    592  1.1      ross     1,
    593  1.1      ross #else
    594  1.1      ross     0,
    595  1.1      ross #endif
    596  1.1      ross #ifdef SYST_FLOAT128_LT_QUIET
    597  1.1      ross     1,
    598  1.1      ross #else
    599  1.1      ross     0,
    600  1.1      ross #endif
    601  1.1      ross };
    602  1.1      ross 
    603  1.1      ross static void
    604  1.1      ross  testFunctionVariety(
    605  1.1      ross      uint8 functionCode, int8 roundingPrecision, int8 roundingMode )
    606  1.1      ross {
    607  1.1      ross     uint8 roundingCode;
    608  1.1      ross 
    609  1.1      ross     functionName = functions[ functionCode ].name;
    610  1.1      ross #ifdef FLOATX80
    611  1.1      ross     if ( roundingPrecision == 32 ) {
    612  1.1      ross         roundingPrecisionName = "32";
    613  1.1      ross     }
    614  1.1      ross     else if ( roundingPrecision == 64 ) {
    615  1.1      ross         roundingPrecisionName = "64";
    616  1.1      ross     }
    617  1.1      ross     else if ( roundingPrecision == 80 ) {
    618  1.1      ross         roundingPrecisionName = "80";
    619  1.1      ross     }
    620  1.1      ross     else {
    621  1.1      ross         roundingPrecision = 80;
    622  1.1      ross         roundingPrecisionName = 0;
    623  1.1      ross     }
    624  1.1      ross     floatx80_rounding_precision = roundingPrecision;
    625  1.1      ross     syst_float_set_rounding_precision( roundingPrecision );
    626  1.1      ross #endif
    627  1.1      ross     switch ( roundingMode ) {
    628  1.1      ross      case 0:
    629  1.1      ross         roundingModeName = 0;
    630  1.1      ross         roundingCode = float_round_nearest_even;
    631  1.1      ross         break;
    632  1.1      ross      case ROUND_NEAREST_EVEN:
    633  1.1      ross         roundingModeName = "nearest_even";
    634  1.1      ross         roundingCode = float_round_nearest_even;
    635  1.1      ross         break;
    636  1.1      ross      case ROUND_TO_ZERO:
    637  1.1      ross         roundingModeName = "to_zero";
    638  1.1      ross         roundingCode = float_round_to_zero;
    639  1.1      ross         break;
    640  1.1      ross      case ROUND_DOWN:
    641  1.1      ross         roundingModeName = "down";
    642  1.1      ross         roundingCode = float_round_down;
    643  1.1      ross         break;
    644  1.1      ross      case ROUND_UP:
    645  1.1      ross         roundingModeName = "up";
    646  1.1      ross         roundingCode = float_round_up;
    647  1.1      ross         break;
    648  1.5  drochner      default:
    649  1.5  drochner 	return;
    650  1.1      ross     }
    651  1.1      ross     float_rounding_mode = roundingCode;
    652  1.1      ross     syst_float_set_rounding_mode( roundingCode );
    653  1.1      ross     fputs( "Testing ", stderr );
    654  1.1      ross     writeFunctionName( stderr );
    655  1.1      ross     fputs( ".\n", stderr );
    656  1.1      ross     switch ( functionCode ) {
    657  1.1      ross #ifdef SYST_INT32_TO_FLOAT32
    658  1.1      ross      case INT32_TO_FLOAT32:
    659  1.1      ross         test_a_int32_z_float32( int32_to_float32, syst_int32_to_float32 );
    660  1.1      ross         break;
    661  1.1      ross #endif
    662  1.1      ross #ifdef SYST_INT32_TO_FLOAT64
    663  1.1      ross      case INT32_TO_FLOAT64:
    664  1.1      ross         test_a_int32_z_float64( int32_to_float64, syst_int32_to_float64 );
    665  1.1      ross         break;
    666  1.1      ross #endif
    667  1.1      ross #ifdef SYST_INT32_TO_FLOATX80
    668  1.1      ross      case INT32_TO_FLOATX80:
    669  1.1      ross         test_a_int32_z_floatx80( int32_to_floatx80, syst_int32_to_floatx80 );
    670  1.1      ross         break;
    671  1.1      ross #endif
    672  1.1      ross #ifdef SYST_INT32_TO_FLOAT128
    673  1.1      ross      case INT32_TO_FLOAT128:
    674  1.1      ross         test_a_int32_z_float128( int32_to_float128, syst_int32_to_float128 );
    675  1.1      ross         break;
    676  1.1      ross #endif
    677  1.1      ross #ifdef SYST_INT64_TO_FLOAT32
    678  1.1      ross      case INT64_TO_FLOAT32:
    679  1.1      ross         test_a_int64_z_float32( int64_to_float32, syst_int64_to_float32 );
    680  1.1      ross         break;
    681  1.1      ross #endif
    682  1.1      ross #ifdef SYST_INT64_TO_FLOAT64
    683  1.1      ross      case INT64_TO_FLOAT64:
    684  1.1      ross         test_a_int64_z_float64( int64_to_float64, syst_int64_to_float64 );
    685  1.1      ross         break;
    686  1.1      ross #endif
    687  1.1      ross #ifdef SYST_INT64_TO_FLOATX80
    688  1.1      ross      case INT64_TO_FLOATX80:
    689  1.1      ross         test_a_int64_z_floatx80( int64_to_floatx80, syst_int64_to_floatx80 );
    690  1.1      ross         break;
    691  1.1      ross #endif
    692  1.1      ross #ifdef SYST_INT64_TO_FLOAT128
    693  1.1      ross      case INT64_TO_FLOAT128:
    694  1.1      ross         test_a_int64_z_float128( int64_to_float128, syst_int64_to_float128 );
    695  1.1      ross         break;
    696  1.1      ross #endif
    697  1.1      ross #ifdef SYST_FLOAT32_TO_INT32
    698  1.1      ross      case FLOAT32_TO_INT32:
    699  1.1      ross         test_a_float32_z_int32( float32_to_int32, syst_float32_to_int32 );
    700  1.1      ross         break;
    701  1.1      ross #endif
    702  1.1      ross #ifdef SYST_FLOAT32_TO_INT32_ROUND_TO_ZERO
    703  1.1      ross      case FLOAT32_TO_INT32_ROUND_TO_ZERO:
    704  1.1      ross         test_a_float32_z_int32(
    705  1.1      ross             float32_to_int32_round_to_zero,
    706  1.1      ross             syst_float32_to_int32_round_to_zero
    707  1.1      ross         );
    708  1.1      ross         break;
    709  1.1      ross #endif
    710  1.1      ross #ifdef SYST_FLOAT32_TO_INT64
    711  1.1      ross      case FLOAT32_TO_INT64:
    712  1.1      ross         test_a_float32_z_int64( float32_to_int64, syst_float32_to_int64 );
    713  1.1      ross         break;
    714  1.1      ross #endif
    715  1.1      ross #ifdef SYST_FLOAT32_TO_INT64_ROUND_TO_ZERO
    716  1.1      ross      case FLOAT32_TO_INT64_ROUND_TO_ZERO:
    717  1.1      ross         test_a_float32_z_int64(
    718  1.1      ross             float32_to_int64_round_to_zero,
    719  1.1      ross             syst_float32_to_int64_round_to_zero
    720  1.1      ross         );
    721  1.1      ross         break;
    722  1.1      ross #endif
    723  1.1      ross #ifdef SYST_FLOAT32_TO_FLOAT64
    724  1.1      ross      case FLOAT32_TO_FLOAT64:
    725  1.1      ross         test_a_float32_z_float64(
    726  1.1      ross             float32_to_float64, syst_float32_to_float64 );
    727  1.1      ross         break;
    728  1.1      ross #endif
    729  1.1      ross #ifdef SYST_FLOAT32_TO_FLOATX80
    730  1.1      ross      case FLOAT32_TO_FLOATX80:
    731  1.1      ross         test_a_float32_z_floatx80(
    732  1.1      ross             float32_to_floatx80, syst_float32_to_floatx80 );
    733  1.1      ross         break;
    734  1.1      ross #endif
    735  1.1      ross #ifdef SYST_FLOAT32_TO_FLOAT128
    736  1.1      ross      case FLOAT32_TO_FLOAT128:
    737  1.1      ross         test_a_float32_z_float128(
    738  1.1      ross             float32_to_float128, syst_float32_to_float128 );
    739  1.1      ross         break;
    740  1.1      ross #endif
    741  1.1      ross #ifdef SYST_FLOAT32_ROUND_TO_INT
    742  1.1      ross      case FLOAT32_ROUND_TO_INT:
    743  1.1      ross         test_az_float32( float32_round_to_int, syst_float32_round_to_int );
    744  1.1      ross         break;
    745  1.1      ross #endif
    746  1.1      ross #ifdef SYST_FLOAT32_ADD
    747  1.1      ross      case FLOAT32_ADD:
    748  1.1      ross         test_abz_float32( float32_add, syst_float32_add );
    749  1.1      ross         break;
    750  1.1      ross #endif
    751  1.1      ross #ifdef SYST_FLOAT32_SUB
    752  1.1      ross      case FLOAT32_SUB:
    753  1.1      ross         test_abz_float32( float32_sub, syst_float32_sub );
    754  1.1      ross         break;
    755  1.1      ross #endif
    756  1.1      ross #ifdef SYST_FLOAT32_MUL
    757  1.1      ross      case FLOAT32_MUL:
    758  1.1      ross         test_abz_float32( float32_mul, syst_float32_mul );
    759  1.1      ross         break;
    760  1.1      ross #endif
    761  1.1      ross #ifdef SYST_FLOAT32_DIV
    762  1.1      ross      case FLOAT32_DIV:
    763  1.1      ross         test_abz_float32( float32_div, syst_float32_div );
    764  1.1      ross         break;
    765  1.1      ross #endif
    766  1.1      ross #ifdef SYST_FLOAT32_REM
    767  1.1      ross      case FLOAT32_REM:
    768  1.1      ross         test_abz_float32( float32_rem, syst_float32_rem );
    769  1.1      ross         break;
    770  1.1      ross #endif
    771  1.1      ross #ifdef SYST_FLOAT32_SQRT
    772  1.1      ross      case FLOAT32_SQRT:
    773  1.1      ross         test_az_float32( float32_sqrt, syst_float32_sqrt );
    774  1.1      ross         break;
    775  1.1      ross #endif
    776  1.1      ross #ifdef SYST_FLOAT32_EQ
    777  1.1      ross      case FLOAT32_EQ:
    778  1.1      ross         test_ab_float32_z_flag( float32_eq, syst_float32_eq );
    779  1.1      ross         break;
    780  1.1      ross #endif
    781  1.1      ross #ifdef SYST_FLOAT32_LE
    782  1.1      ross      case FLOAT32_LE:
    783  1.1      ross         test_ab_float32_z_flag( float32_le, syst_float32_le );
    784  1.1      ross         break;
    785  1.1      ross #endif
    786  1.1      ross #ifdef SYST_FLOAT32_LT
    787  1.1      ross      case FLOAT32_LT:
    788  1.1      ross         test_ab_float32_z_flag( float32_lt, syst_float32_lt );
    789  1.1      ross         break;
    790  1.1      ross #endif
    791  1.1      ross #ifdef SYST_FLOAT32_EQ_SIGNALING
    792  1.1      ross      case FLOAT32_EQ_SIGNALING:
    793  1.1      ross         test_ab_float32_z_flag(
    794  1.1      ross             float32_eq_signaling, syst_float32_eq_signaling );
    795  1.1      ross         break;
    796  1.1      ross #endif
    797  1.1      ross #ifdef SYST_FLOAT32_LE_QUIET
    798  1.1      ross      case FLOAT32_LE_QUIET:
    799  1.1      ross         test_ab_float32_z_flag( float32_le_quiet, syst_float32_le_quiet );
    800  1.1      ross         break;
    801  1.1      ross #endif
    802  1.1      ross #ifdef SYST_FLOAT32_LT_QUIET
    803  1.1      ross      case FLOAT32_LT_QUIET:
    804  1.1      ross         test_ab_float32_z_flag( float32_lt_quiet, syst_float32_lt_quiet );
    805  1.1      ross         break;
    806  1.1      ross #endif
    807  1.1      ross #ifdef SYST_FLOAT64_TO_INT32
    808  1.1      ross      case FLOAT64_TO_INT32:
    809  1.1      ross         test_a_float64_z_int32( float64_to_int32, syst_float64_to_int32 );
    810  1.1      ross         break;
    811  1.1      ross #endif
    812  1.1      ross #ifdef SYST_FLOAT64_TO_INT32_ROUND_TO_ZERO
    813  1.1      ross      case FLOAT64_TO_INT32_ROUND_TO_ZERO:
    814  1.1      ross         test_a_float64_z_int32(
    815  1.1      ross             float64_to_int32_round_to_zero,
    816  1.1      ross             syst_float64_to_int32_round_to_zero
    817  1.1      ross         );
    818  1.1      ross         break;
    819  1.1      ross #endif
    820  1.1      ross #ifdef SYST_FLOAT64_TO_INT64
    821  1.1      ross      case FLOAT64_TO_INT64:
    822  1.1      ross         test_a_float64_z_int64( float64_to_int64, syst_float64_to_int64 );
    823  1.1      ross         break;
    824  1.1      ross #endif
    825  1.1      ross #ifdef SYST_FLOAT64_TO_INT64_ROUND_TO_ZERO
    826  1.1      ross      case FLOAT64_TO_INT64_ROUND_TO_ZERO:
    827  1.1      ross         test_a_float64_z_int64(
    828  1.1      ross             float64_to_int64_round_to_zero,
    829  1.1      ross             syst_float64_to_int64_round_to_zero
    830  1.1      ross         );
    831  1.1      ross         break;
    832  1.1      ross #endif
    833  1.1      ross #ifdef SYST_FLOAT64_TO_FLOAT32
    834  1.1      ross      case FLOAT64_TO_FLOAT32:
    835  1.1      ross         test_a_float64_z_float32(
    836  1.1      ross             float64_to_float32, syst_float64_to_float32 );
    837  1.1      ross         break;
    838  1.1      ross #endif
    839  1.1      ross #ifdef SYST_FLOAT64_TO_FLOATX80
    840  1.1      ross      case FLOAT64_TO_FLOATX80:
    841  1.1      ross         test_a_float64_z_floatx80(
    842  1.1      ross             float64_to_floatx80, syst_float64_to_floatx80 );
    843  1.1      ross         break;
    844  1.1      ross #endif
    845  1.1      ross #ifdef SYST_FLOAT64_TO_FLOAT128
    846  1.1      ross      case FLOAT64_TO_FLOAT128:
    847  1.1      ross         test_a_float64_z_float128(
    848  1.1      ross             float64_to_float128, syst_float64_to_float128 );
    849  1.1      ross         break;
    850  1.1      ross #endif
    851  1.1      ross #ifdef SYST_FLOAT64_ROUND_TO_INT
    852  1.1      ross      case FLOAT64_ROUND_TO_INT:
    853  1.1      ross         test_az_float64( float64_round_to_int, syst_float64_round_to_int );
    854  1.1      ross         break;
    855  1.1      ross #endif
    856  1.1      ross #ifdef SYST_FLOAT64_ADD
    857  1.1      ross      case FLOAT64_ADD:
    858  1.1      ross         test_abz_float64( float64_add, syst_float64_add );
    859  1.1      ross         break;
    860  1.1      ross #endif
    861  1.1      ross #ifdef SYST_FLOAT64_SUB
    862  1.1      ross      case FLOAT64_SUB:
    863  1.1      ross         test_abz_float64( float64_sub, syst_float64_sub );
    864  1.1      ross         break;
    865  1.1      ross #endif
    866  1.1      ross #ifdef SYST_FLOAT64_MUL
    867  1.1      ross      case FLOAT64_MUL:
    868  1.1      ross         test_abz_float64( float64_mul, syst_float64_mul );
    869  1.1      ross         break;
    870  1.1      ross #endif
    871  1.1      ross #ifdef SYST_FLOAT64_DIV
    872  1.1      ross      case FLOAT64_DIV:
    873  1.1      ross         test_abz_float64( float64_div, syst_float64_div );
    874  1.1      ross         break;
    875  1.1      ross #endif
    876  1.1      ross #ifdef SYST_FLOAT64_REM
    877  1.1      ross      case FLOAT64_REM:
    878  1.1      ross         test_abz_float64( float64_rem, syst_float64_rem );
    879  1.1      ross         break;
    880  1.1      ross #endif
    881  1.1      ross #ifdef SYST_FLOAT64_SQRT
    882  1.1      ross      case FLOAT64_SQRT:
    883  1.1      ross         test_az_float64( float64_sqrt, syst_float64_sqrt );
    884  1.1      ross         break;
    885  1.1      ross #endif
    886  1.1      ross #ifdef SYST_FLOAT64_EQ
    887  1.1      ross      case FLOAT64_EQ:
    888  1.1      ross         test_ab_float64_z_flag( float64_eq, syst_float64_eq );
    889  1.1      ross         break;
    890  1.1      ross #endif
    891  1.1      ross #ifdef SYST_FLOAT64_LE
    892  1.1      ross      case FLOAT64_LE:
    893  1.1      ross         test_ab_float64_z_flag( float64_le, syst_float64_le );
    894  1.1      ross         break;
    895  1.1      ross #endif
    896  1.1      ross #ifdef SYST_FLOAT64_LT
    897  1.1      ross      case FLOAT64_LT:
    898  1.1      ross         test_ab_float64_z_flag( float64_lt, syst_float64_lt );
    899  1.1      ross         break;
    900  1.1      ross #endif
    901  1.1      ross #ifdef SYST_FLOAT64_EQ_SIGNALING
    902  1.1      ross      case FLOAT64_EQ_SIGNALING:
    903  1.1      ross         test_ab_float64_z_flag(
    904  1.1      ross             float64_eq_signaling, syst_float64_eq_signaling );
    905  1.1      ross         break;
    906  1.1      ross #endif
    907  1.1      ross #ifdef SYST_FLOAT64_LE_QUIET
    908  1.1      ross      case FLOAT64_LE_QUIET:
    909  1.1      ross         test_ab_float64_z_flag( float64_le_quiet, syst_float64_le_quiet );
    910  1.1      ross         break;
    911  1.1      ross #endif
    912  1.1      ross #ifdef SYST_FLOAT64_LT_QUIET
    913  1.1      ross      case FLOAT64_LT_QUIET:
    914  1.1      ross         test_ab_float64_z_flag( float64_lt_quiet, syst_float64_lt_quiet );
    915  1.1      ross         break;
    916  1.1      ross #endif
    917  1.1      ross #ifdef SYST_FLOATX80_TO_INT32
    918  1.1      ross      case FLOATX80_TO_INT32:
    919  1.1      ross         test_a_floatx80_z_int32( floatx80_to_int32, syst_floatx80_to_int32 );
    920  1.1      ross         break;
    921  1.1      ross #endif
    922  1.1      ross #ifdef SYST_FLOATX80_TO_INT32_ROUND_TO_ZERO
    923  1.1      ross      case FLOATX80_TO_INT32_ROUND_TO_ZERO:
    924  1.1      ross         test_a_floatx80_z_int32(
    925  1.1      ross             floatx80_to_int32_round_to_zero,
    926  1.1      ross             syst_floatx80_to_int32_round_to_zero
    927  1.1      ross         );
    928  1.1      ross         break;
    929  1.1      ross #endif
    930  1.1      ross #ifdef SYST_FLOATX80_TO_INT64
    931  1.1      ross      case FLOATX80_TO_INT64:
    932  1.1      ross         test_a_floatx80_z_int64( floatx80_to_int64, syst_floatx80_to_int64 );
    933  1.1      ross         break;
    934  1.1      ross #endif
    935  1.1      ross #ifdef SYST_FLOATX80_TO_INT64_ROUND_TO_ZERO
    936  1.1      ross      case FLOATX80_TO_INT64_ROUND_TO_ZERO:
    937  1.1      ross         test_a_floatx80_z_int64(
    938  1.1      ross             floatx80_to_int64_round_to_zero,
    939  1.1      ross             syst_floatx80_to_int64_round_to_zero
    940  1.1      ross         );
    941  1.1      ross         break;
    942  1.1      ross #endif
    943  1.1      ross #ifdef SYST_FLOATX80_TO_FLOAT32
    944  1.1      ross      case FLOATX80_TO_FLOAT32:
    945  1.1      ross         test_a_floatx80_z_float32(
    946  1.1      ross             floatx80_to_float32, syst_floatx80_to_float32 );
    947  1.1      ross         break;
    948  1.1      ross #endif
    949  1.1      ross #ifdef SYST_FLOATX80_TO_FLOAT64
    950  1.1      ross      case FLOATX80_TO_FLOAT64:
    951  1.1      ross         test_a_floatx80_z_float64(
    952  1.1      ross             floatx80_to_float64, syst_floatx80_to_float64 );
    953  1.1      ross         break;
    954  1.1      ross #endif
    955  1.1      ross #ifdef SYST_FLOATX80_TO_FLOAT128
    956  1.1      ross      case FLOATX80_TO_FLOAT128:
    957  1.1      ross         test_a_floatx80_z_float128(
    958  1.1      ross             floatx80_to_float128, syst_floatx80_to_float128 );
    959  1.1      ross         break;
    960  1.1      ross #endif
    961  1.1      ross #ifdef SYST_FLOATX80_ROUND_TO_INT
    962  1.1      ross      case FLOATX80_ROUND_TO_INT:
    963  1.1      ross         test_az_floatx80( floatx80_round_to_int, syst_floatx80_round_to_int );
    964  1.1      ross         break;
    965  1.1      ross #endif
    966  1.1      ross #ifdef SYST_FLOATX80_ADD
    967  1.1      ross      case FLOATX80_ADD:
    968  1.1      ross         test_abz_floatx80( floatx80_add, syst_floatx80_add );
    969  1.1      ross         break;
    970  1.1      ross #endif
    971  1.1      ross #ifdef SYST_FLOATX80_SUB
    972  1.1      ross      case FLOATX80_SUB:
    973  1.1      ross         test_abz_floatx80( floatx80_sub, syst_floatx80_sub );
    974  1.1      ross         break;
    975  1.1      ross #endif
    976  1.1      ross #ifdef SYST_FLOATX80_MUL
    977  1.1      ross      case FLOATX80_MUL:
    978  1.1      ross         test_abz_floatx80( floatx80_mul, syst_floatx80_mul );
    979  1.1      ross         break;
    980  1.1      ross #endif
    981  1.1      ross #ifdef SYST_FLOATX80_DIV
    982  1.1      ross      case FLOATX80_DIV:
    983  1.1      ross         test_abz_floatx80( floatx80_div, syst_floatx80_div );
    984  1.1      ross         break;
    985  1.1      ross #endif
    986  1.1      ross #ifdef SYST_FLOATX80_REM
    987  1.1      ross      case FLOATX80_REM:
    988  1.1      ross         test_abz_floatx80( floatx80_rem, syst_floatx80_rem );
    989  1.1      ross         break;
    990  1.1      ross #endif
    991  1.1      ross #ifdef SYST_FLOATX80_SQRT
    992  1.1      ross      case FLOATX80_SQRT:
    993  1.1      ross         test_az_floatx80( floatx80_sqrt, syst_floatx80_sqrt );
    994  1.1      ross         break;
    995  1.1      ross #endif
    996  1.1      ross #ifdef SYST_FLOATX80_EQ
    997  1.1      ross      case FLOATX80_EQ:
    998  1.1      ross         test_ab_floatx80_z_flag( floatx80_eq, syst_floatx80_eq );
    999  1.1      ross         break;
   1000  1.1      ross #endif
   1001  1.1      ross #ifdef SYST_FLOATX80_LE
   1002  1.1      ross      case FLOATX80_LE:
   1003  1.1      ross         test_ab_floatx80_z_flag( floatx80_le, syst_floatx80_le );
   1004  1.1      ross         break;
   1005  1.1      ross #endif
   1006  1.1      ross #ifdef SYST_FLOATX80_LT
   1007  1.1      ross      case FLOATX80_LT:
   1008  1.1      ross         test_ab_floatx80_z_flag( floatx80_lt, syst_floatx80_lt );
   1009  1.1      ross         break;
   1010  1.1      ross #endif
   1011  1.1      ross #ifdef SYST_FLOATX80_EQ_SIGNALING
   1012  1.1      ross      case FLOATX80_EQ_SIGNALING:
   1013  1.1      ross         test_ab_floatx80_z_flag(
   1014  1.1      ross             floatx80_eq_signaling, syst_floatx80_eq_signaling );
   1015  1.1      ross         break;
   1016  1.1      ross #endif
   1017  1.1      ross #ifdef SYST_FLOATX80_LE_QUIET
   1018  1.1      ross      case FLOATX80_LE_QUIET:
   1019  1.1      ross         test_ab_floatx80_z_flag( floatx80_le_quiet, syst_floatx80_le_quiet );
   1020  1.1      ross         break;
   1021  1.1      ross #endif
   1022  1.1      ross #ifdef SYST_FLOATX80_LT_QUIET
   1023  1.1      ross      case FLOATX80_LT_QUIET:
   1024  1.1      ross         test_ab_floatx80_z_flag( floatx80_lt_quiet, syst_floatx80_lt_quiet );
   1025  1.1      ross         break;
   1026  1.1      ross #endif
   1027  1.1      ross #ifdef SYST_FLOAT128_TO_INT32
   1028  1.1      ross      case FLOAT128_TO_INT32:
   1029  1.1      ross         test_a_float128_z_int32( float128_to_int32, syst_float128_to_int32 );
   1030  1.1      ross         break;
   1031  1.1      ross #endif
   1032  1.1      ross #ifdef SYST_FLOAT128_TO_INT32_ROUND_TO_ZERO
   1033  1.1      ross      case FLOAT128_TO_INT32_ROUND_TO_ZERO:
   1034  1.1      ross         test_a_float128_z_int32(
   1035  1.1      ross             float128_to_int32_round_to_zero,
   1036  1.1      ross             syst_float128_to_int32_round_to_zero
   1037  1.1      ross         );
   1038  1.1      ross         break;
   1039  1.1      ross #endif
   1040  1.1      ross #ifdef SYST_FLOAT128_TO_INT64
   1041  1.1      ross      case FLOAT128_TO_INT64:
   1042  1.1      ross         test_a_float128_z_int64( float128_to_int64, syst_float128_to_int64 );
   1043  1.1      ross         break;
   1044  1.1      ross #endif
   1045  1.1      ross #ifdef SYST_FLOAT128_TO_INT64_ROUND_TO_ZERO
   1046  1.1      ross      case FLOAT128_TO_INT64_ROUND_TO_ZERO:
   1047  1.1      ross         test_a_float128_z_int64(
   1048  1.1      ross             float128_to_int64_round_to_zero,
   1049  1.1      ross             syst_float128_to_int64_round_to_zero
   1050  1.1      ross         );
   1051  1.1      ross         break;
   1052  1.1      ross #endif
   1053  1.1      ross #ifdef SYST_FLOAT128_TO_FLOAT32
   1054  1.1      ross      case FLOAT128_TO_FLOAT32:
   1055  1.1      ross         test_a_float128_z_float32(
   1056  1.1      ross             float128_to_float32, syst_float128_to_float32 );
   1057  1.1      ross         break;
   1058  1.1      ross #endif
   1059  1.1      ross #ifdef SYST_FLOAT128_TO_FLOAT64
   1060  1.1      ross      case FLOAT128_TO_FLOAT64:
   1061  1.1      ross         test_a_float128_z_float64(
   1062  1.1      ross             float128_to_float64, syst_float128_to_float64 );
   1063  1.1      ross         break;
   1064  1.1      ross #endif
   1065  1.1      ross #ifdef SYST_FLOAT128_TO_FLOATX80
   1066  1.1      ross      case FLOAT128_TO_FLOATX80:
   1067  1.1      ross         test_a_float128_z_floatx80(
   1068  1.1      ross             float128_to_floatx80, syst_float128_to_floatx80 );
   1069  1.1      ross         break;
   1070  1.1      ross #endif
   1071  1.1      ross #ifdef SYST_FLOAT128_ROUND_TO_INT
   1072  1.1      ross      case FLOAT128_ROUND_TO_INT:
   1073  1.1      ross         test_az_float128( float128_round_to_int, syst_float128_round_to_int );
   1074  1.1      ross         break;
   1075  1.1      ross #endif
   1076  1.1      ross #ifdef SYST_FLOAT128_ADD
   1077  1.1      ross      case FLOAT128_ADD:
   1078  1.1      ross         test_abz_float128( float128_add, syst_float128_add );
   1079  1.1      ross         break;
   1080  1.1      ross #endif
   1081  1.1      ross #ifdef SYST_FLOAT128_SUB
   1082  1.1      ross      case FLOAT128_SUB:
   1083  1.1      ross         test_abz_float128( float128_sub, syst_float128_sub );
   1084  1.1      ross         break;
   1085  1.1      ross #endif
   1086  1.1      ross #ifdef SYST_FLOAT128_MUL
   1087  1.1      ross      case FLOAT128_MUL:
   1088  1.1      ross         test_abz_float128( float128_mul, syst_float128_mul );
   1089  1.1      ross         break;
   1090  1.1      ross #endif
   1091  1.1      ross #ifdef SYST_FLOAT128_DIV
   1092  1.1      ross      case FLOAT128_DIV:
   1093  1.1      ross         test_abz_float128( float128_div, syst_float128_div );
   1094  1.1      ross         break;
   1095  1.1      ross #endif
   1096  1.1      ross #ifdef SYST_FLOAT128_REM
   1097  1.1      ross      case FLOAT128_REM:
   1098  1.1      ross         test_abz_float128( float128_rem, syst_float128_rem );
   1099  1.1      ross         break;
   1100  1.1      ross #endif
   1101  1.1      ross #ifdef SYST_FLOAT128_SQRT
   1102  1.1      ross      case FLOAT128_SQRT:
   1103  1.1      ross         test_az_float128( float128_sqrt, syst_float128_sqrt );
   1104  1.1      ross         break;
   1105  1.1      ross #endif
   1106  1.1      ross #ifdef SYST_FLOAT128_EQ
   1107  1.1      ross      case FLOAT128_EQ:
   1108  1.1      ross         test_ab_float128_z_flag( float128_eq, syst_float128_eq );
   1109  1.1      ross         break;
   1110  1.1      ross #endif
   1111  1.1      ross #ifdef SYST_FLOAT128_LE
   1112  1.1      ross      case FLOAT128_LE:
   1113  1.1      ross         test_ab_float128_z_flag( float128_le, syst_float128_le );
   1114  1.1      ross         break;
   1115  1.1      ross #endif
   1116  1.1      ross #ifdef SYST_FLOAT128_LT
   1117  1.1      ross      case FLOAT128_LT:
   1118  1.1      ross         test_ab_float128_z_flag( float128_lt, syst_float128_lt );
   1119  1.1      ross         break;
   1120  1.1      ross #endif
   1121  1.1      ross #ifdef SYST_FLOAT128_EQ_SIGNALING
   1122  1.1      ross      case FLOAT128_EQ_SIGNALING:
   1123  1.1      ross         test_ab_float128_z_flag(
   1124  1.1      ross             float128_eq_signaling, syst_float128_eq_signaling );
   1125  1.1      ross         break;
   1126  1.1      ross #endif
   1127  1.1      ross #ifdef SYST_FLOAT128_LE_QUIET
   1128  1.1      ross      case FLOAT128_LE_QUIET:
   1129  1.1      ross         test_ab_float128_z_flag( float128_le_quiet, syst_float128_le_quiet );
   1130  1.1      ross         break;
   1131  1.1      ross #endif
   1132  1.1      ross #ifdef SYST_FLOAT128_LT_QUIET
   1133  1.1      ross      case FLOAT128_LT_QUIET:
   1134  1.1      ross         test_ab_float128_z_flag( float128_lt_quiet, syst_float128_lt_quiet );
   1135  1.1      ross         break;
   1136  1.1      ross #endif
   1137  1.1      ross     }
   1138  1.1      ross     if ( ( errorStop && anyErrors ) || stop ) exitWithStatus();
   1139  1.1      ross 
   1140  1.1      ross }
   1141  1.1      ross 
   1142  1.1      ross void
   1143  1.1      ross  testFunction(
   1144  1.1      ross      uint8 functionCode, int8 roundingPrecisionIn, int8 roundingModeIn )
   1145  1.1      ross {
   1146  1.1      ross     int8 roundingPrecision, roundingMode;
   1147  1.1      ross 
   1148  1.1      ross     roundingPrecision = 32;
   1149  1.1      ross     for (;;) {
   1150  1.1      ross         if ( ! functions[ functionCode ].roundingPrecision ) {
   1151  1.1      ross             roundingPrecision = 0;
   1152  1.1      ross         }
   1153  1.1      ross         else if ( roundingPrecisionIn ) {
   1154  1.1      ross             roundingPrecision = roundingPrecisionIn;
   1155  1.1      ross         }
   1156  1.1      ross         for ( roundingMode = 1;
   1157  1.1      ross               roundingMode < NUM_ROUNDINGMODES;
   1158  1.1      ross               ++roundingMode
   1159  1.1      ross             ) {
   1160  1.1      ross             if ( ! functions[ functionCode ].roundingMode ) {
   1161  1.1      ross                 roundingMode = 0;
   1162  1.1      ross             }
   1163  1.1      ross             else if ( roundingModeIn ) {
   1164  1.1      ross                 roundingMode = roundingModeIn;
   1165  1.1      ross             }
   1166  1.1      ross             testFunctionVariety(
   1167  1.1      ross                 functionCode, roundingPrecision, roundingMode );
   1168  1.1      ross             if ( roundingModeIn || ! roundingMode ) break;
   1169  1.1      ross         }
   1170  1.1      ross         if ( roundingPrecisionIn || ! roundingPrecision ) break;
   1171  1.1      ross         if ( roundingPrecision == 80 ) {
   1172  1.1      ross             break;
   1173  1.1      ross         }
   1174  1.1      ross         else if ( roundingPrecision == 64 ) {
   1175  1.1      ross             roundingPrecision = 80;
   1176  1.1      ross         }
   1177  1.1      ross         else if ( roundingPrecision == 32 ) {
   1178  1.1      ross             roundingPrecision = 64;
   1179  1.1      ross         }
   1180  1.1      ross     }
   1181  1.1      ross 
   1182  1.1      ross }
   1183  1.1      ross 
   1184