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