Home | History | Annotate | Line # | Download | only in testfloat
testCases.c revision 1.3
      1  1.3  ross /* $NetBSD: testCases.c,v 1.3 2001/03/13 07:39:58 ross 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  * 3. All advertising materials mentioning features or use of this software
     21  1.3  ross  *    must display the following acknowledgement:
     22  1.3  ross  *        This product includes software developed by the NetBSD
     23  1.3  ross  *        Foundation, Inc. and its contributors.
     24  1.3  ross  * 4. Neither the name of The NetBSD Foundation nor the names of its
     25  1.3  ross  *    contributors may be used to endorse or promote products derived
     26  1.3  ross  *    from this software without specific prior written permission.
     27  1.3  ross  *
     28  1.3  ross  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     29  1.3  ross  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     30  1.3  ross  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     31  1.3  ross  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     32  1.3  ross  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     33  1.3  ross  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     34  1.3  ross  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     35  1.3  ross  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     36  1.3  ross  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     37  1.3  ross  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     38  1.3  ross  * POSSIBILITY OF SUCH DAMAGE.
     39  1.3  ross  */
     40  1.1  ross 
     41  1.1  ross /*
     42  1.1  ross ===============================================================================
     43  1.1  ross 
     44  1.1  ross This C source file is part of TestFloat, Release 2a, a package of programs
     45  1.1  ross for testing the correctness of floating-point arithmetic complying to the
     46  1.1  ross IEC/IEEE Standard for Floating-Point.
     47  1.1  ross 
     48  1.1  ross Written by John R. Hauser.  More information is available through the Web
     49  1.1  ross page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
     50  1.1  ross 
     51  1.1  ross THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort
     52  1.1  ross has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
     53  1.1  ross TIMES RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO
     54  1.1  ross PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
     55  1.1  ross AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
     56  1.1  ross 
     57  1.1  ross Derivative works are acceptable, even for commercial purposes, so long as
     58  1.1  ross (1) they include prominent notice that the work is derivative, and (2) they
     59  1.1  ross include prominent notice akin to these four paragraphs for those parts of
     60  1.1  ross this code that are retained.
     61  1.1  ross 
     62  1.1  ross ===============================================================================
     63  1.1  ross */
     64  1.1  ross 
     65  1.2  ross #include <stdlib.h>
     66  1.2  ross 
     67  1.1  ross #include "milieu.h"
     68  1.1  ross #include "fail.h"
     69  1.1  ross #include "softfloat.h"
     70  1.1  ross #include "testCases.h"
     71  1.2  ross #include "random.h"
     72  1.1  ross 
     73  1.1  ross typedef struct {
     74  1.1  ross     int16 expNum, term1Num, term2Num;
     75  1.1  ross     flag done;
     76  1.1  ross } sequenceT;
     77  1.1  ross 
     78  1.1  ross enum {
     79  1.1  ross     int32NumP1 = 124
     80  1.1  ross };
     81  1.1  ross 
     82  1.1  ross static const uint32 int32P1[ int32NumP1 ] = {
     83  1.1  ross     0x00000000,
     84  1.1  ross     0x00000001,
     85  1.1  ross     0x00000002,
     86  1.1  ross     0x00000004,
     87  1.1  ross     0x00000008,
     88  1.1  ross     0x00000010,
     89  1.1  ross     0x00000020,
     90  1.1  ross     0x00000040,
     91  1.1  ross     0x00000080,
     92  1.1  ross     0x00000100,
     93  1.1  ross     0x00000200,
     94  1.1  ross     0x00000400,
     95  1.1  ross     0x00000800,
     96  1.1  ross     0x00001000,
     97  1.1  ross     0x00002000,
     98  1.1  ross     0x00004000,
     99  1.1  ross     0x00008000,
    100  1.1  ross     0x00010000,
    101  1.1  ross     0x00020000,
    102  1.1  ross     0x00040000,
    103  1.1  ross     0x00080000,
    104  1.1  ross     0x00100000,
    105  1.1  ross     0x00200000,
    106  1.1  ross     0x00400000,
    107  1.1  ross     0x00800000,
    108  1.1  ross     0x01000000,
    109  1.1  ross     0x02000000,
    110  1.1  ross     0x04000000,
    111  1.1  ross     0x08000000,
    112  1.1  ross     0x10000000,
    113  1.1  ross     0x20000000,
    114  1.1  ross     0x40000000,
    115  1.1  ross     0x80000000,
    116  1.1  ross     0xC0000000,
    117  1.1  ross     0xE0000000,
    118  1.1  ross     0xF0000000,
    119  1.1  ross     0xF8000000,
    120  1.1  ross     0xFC000000,
    121  1.1  ross     0xFE000000,
    122  1.1  ross     0xFF000000,
    123  1.1  ross     0xFF800000,
    124  1.1  ross     0xFFC00000,
    125  1.1  ross     0xFFE00000,
    126  1.1  ross     0xFFF00000,
    127  1.1  ross     0xFFF80000,
    128  1.1  ross     0xFFFC0000,
    129  1.1  ross     0xFFFE0000,
    130  1.1  ross     0xFFFF0000,
    131  1.1  ross     0xFFFF8000,
    132  1.1  ross     0xFFFFC000,
    133  1.1  ross     0xFFFFE000,
    134  1.1  ross     0xFFFFF000,
    135  1.1  ross     0xFFFFF800,
    136  1.1  ross     0xFFFFFC00,
    137  1.1  ross     0xFFFFFE00,
    138  1.1  ross     0xFFFFFF00,
    139  1.1  ross     0xFFFFFF80,
    140  1.1  ross     0xFFFFFFC0,
    141  1.1  ross     0xFFFFFFE0,
    142  1.1  ross     0xFFFFFFF0,
    143  1.1  ross     0xFFFFFFF8,
    144  1.1  ross     0xFFFFFFFC,
    145  1.1  ross     0xFFFFFFFE,
    146  1.1  ross     0xFFFFFFFF,
    147  1.1  ross     0xFFFFFFFD,
    148  1.1  ross     0xFFFFFFFB,
    149  1.1  ross     0xFFFFFFF7,
    150  1.1  ross     0xFFFFFFEF,
    151  1.1  ross     0xFFFFFFDF,
    152  1.1  ross     0xFFFFFFBF,
    153  1.1  ross     0xFFFFFF7F,
    154  1.1  ross     0xFFFFFEFF,
    155  1.1  ross     0xFFFFFDFF,
    156  1.1  ross     0xFFFFFBFF,
    157  1.1  ross     0xFFFFF7FF,
    158  1.1  ross     0xFFFFEFFF,
    159  1.1  ross     0xFFFFDFFF,
    160  1.1  ross     0xFFFFBFFF,
    161  1.1  ross     0xFFFF7FFF,
    162  1.1  ross     0xFFFEFFFF,
    163  1.1  ross     0xFFFDFFFF,
    164  1.1  ross     0xFFFBFFFF,
    165  1.1  ross     0xFFF7FFFF,
    166  1.1  ross     0xFFEFFFFF,
    167  1.1  ross     0xFFDFFFFF,
    168  1.1  ross     0xFFBFFFFF,
    169  1.1  ross     0xFF7FFFFF,
    170  1.1  ross     0xFEFFFFFF,
    171  1.1  ross     0xFDFFFFFF,
    172  1.1  ross     0xFBFFFFFF,
    173  1.1  ross     0xF7FFFFFF,
    174  1.1  ross     0xEFFFFFFF,
    175  1.1  ross     0xDFFFFFFF,
    176  1.1  ross     0xBFFFFFFF,
    177  1.1  ross     0x7FFFFFFF,
    178  1.1  ross     0x3FFFFFFF,
    179  1.1  ross     0x1FFFFFFF,
    180  1.1  ross     0x0FFFFFFF,
    181  1.1  ross     0x07FFFFFF,
    182  1.1  ross     0x03FFFFFF,
    183  1.1  ross     0x01FFFFFF,
    184  1.1  ross     0x00FFFFFF,
    185  1.1  ross     0x007FFFFF,
    186  1.1  ross     0x003FFFFF,
    187  1.1  ross     0x001FFFFF,
    188  1.1  ross     0x000FFFFF,
    189  1.1  ross     0x0007FFFF,
    190  1.1  ross     0x0003FFFF,
    191  1.1  ross     0x0001FFFF,
    192  1.1  ross     0x0000FFFF,
    193  1.1  ross     0x00007FFF,
    194  1.1  ross     0x00003FFF,
    195  1.1  ross     0x00001FFF,
    196  1.1  ross     0x00000FFF,
    197  1.1  ross     0x000007FF,
    198  1.1  ross     0x000003FF,
    199  1.1  ross     0x000001FF,
    200  1.1  ross     0x000000FF,
    201  1.1  ross     0x0000007F,
    202  1.1  ross     0x0000003F,
    203  1.1  ross     0x0000001F,
    204  1.1  ross     0x0000000F,
    205  1.1  ross     0x00000007,
    206  1.1  ross     0x00000003
    207  1.1  ross };
    208  1.1  ross 
    209  1.1  ross static int32 int32NextP1( sequenceT *sequencePtr )
    210  1.1  ross {
    211  1.1  ross     uint8 termNum;
    212  1.1  ross     int32 z;
    213  1.1  ross 
    214  1.1  ross     termNum = sequencePtr->term1Num;
    215  1.1  ross     z = int32P1[ termNum ];
    216  1.1  ross     ++termNum;
    217  1.1  ross     if ( int32NumP1 <= termNum ) {
    218  1.1  ross         termNum = 0;
    219  1.1  ross         sequencePtr->done = TRUE;
    220  1.1  ross     }
    221  1.1  ross     sequencePtr->term1Num = termNum;
    222  1.1  ross     return (sbits32) z;
    223  1.1  ross 
    224  1.1  ross }
    225  1.1  ross 
    226  1.1  ross static const int32 int32NumP2 = ( int32NumP1 * int32NumP1 + int32NumP1 ) / 2;
    227  1.1  ross 
    228  1.1  ross static int32 int32NextP2( sequenceT *sequencePtr )
    229  1.1  ross {
    230  1.1  ross     uint8 term1Num, term2Num;
    231  1.1  ross     int32 z;
    232  1.1  ross 
    233  1.1  ross     term2Num = sequencePtr->term2Num;
    234  1.1  ross     term1Num = sequencePtr->term1Num;
    235  1.1  ross     z = int32P1[ term1Num ] + int32P1[ term2Num ];
    236  1.1  ross     ++term2Num;
    237  1.1  ross     if ( int32NumP1 <= term2Num ) {
    238  1.1  ross         ++term1Num;
    239  1.1  ross         if ( int32NumP1 <= term1Num ) {
    240  1.1  ross             term1Num = 0;
    241  1.1  ross             sequencePtr->done = TRUE;
    242  1.1  ross         }
    243  1.1  ross         term2Num = term1Num;
    244  1.1  ross         sequencePtr->term1Num = term1Num;
    245  1.1  ross     }
    246  1.1  ross     sequencePtr->term2Num = term2Num;
    247  1.1  ross     return (sbits32) z;
    248  1.1  ross 
    249  1.1  ross }
    250  1.1  ross 
    251  1.1  ross static int32 int32RandomP3( void )
    252  1.1  ross {
    253  1.1  ross 
    254  1.1  ross     return
    255  1.1  ross         (sbits32) (
    256  1.1  ross               int32P1[ randomUint8() % int32NumP1 ]
    257  1.1  ross             + int32P1[ randomUint8() % int32NumP1 ]
    258  1.1  ross             + int32P1[ randomUint8() % int32NumP1 ]
    259  1.1  ross         );
    260  1.1  ross 
    261  1.1  ross }
    262  1.1  ross 
    263  1.1  ross enum {
    264  1.1  ross     int32NumPInfWeightMasks = 29
    265  1.1  ross };
    266  1.1  ross 
    267  1.1  ross static const uint32 int32PInfWeightMasks[ int32NumPInfWeightMasks ] = {
    268  1.1  ross     0xFFFFFFFF,
    269  1.1  ross     0x7FFFFFFF,
    270  1.1  ross     0x3FFFFFFF,
    271  1.1  ross     0x1FFFFFFF,
    272  1.1  ross     0x0FFFFFFF,
    273  1.1  ross     0x07FFFFFF,
    274  1.1  ross     0x03FFFFFF,
    275  1.1  ross     0x01FFFFFF,
    276  1.1  ross     0x00FFFFFF,
    277  1.1  ross     0x007FFFFF,
    278  1.1  ross     0x003FFFFF,
    279  1.1  ross     0x001FFFFF,
    280  1.1  ross     0x000FFFFF,
    281  1.1  ross     0x0007FFFF,
    282  1.1  ross     0x0003FFFF,
    283  1.1  ross     0x0001FFFF,
    284  1.1  ross     0x0000FFFF,
    285  1.1  ross     0x00007FFF,
    286  1.1  ross     0x00003FFF,
    287  1.1  ross     0x00001FFF,
    288  1.1  ross     0x00000FFF,
    289  1.1  ross     0x000007FF,
    290  1.1  ross     0x000003FF,
    291  1.1  ross     0x000001FF,
    292  1.1  ross     0x000000FF,
    293  1.1  ross     0x0000007F,
    294  1.1  ross     0x0000003F,
    295  1.1  ross     0x0000001F,
    296  1.1  ross     0x0000000F
    297  1.1  ross };
    298  1.1  ross 
    299  1.1  ross static const uint32 int32PInfWeightOffsets[ int32NumPInfWeightMasks ] = {
    300  1.1  ross     0x00000000,
    301  1.1  ross     0xC0000000,
    302  1.1  ross     0xE0000000,
    303  1.1  ross     0xF0000000,
    304  1.1  ross     0xF8000000,
    305  1.1  ross     0xFC000000,
    306  1.1  ross     0xFE000000,
    307  1.1  ross     0xFF000000,
    308  1.1  ross     0xFF800000,
    309  1.1  ross     0xFFC00000,
    310  1.1  ross     0xFFE00000,
    311  1.1  ross     0xFFF00000,
    312  1.1  ross     0xFFF80000,
    313  1.1  ross     0xFFFC0000,
    314  1.1  ross     0xFFFE0000,
    315  1.1  ross     0xFFFF0000,
    316  1.1  ross     0xFFFF8000,
    317  1.1  ross     0xFFFFC000,
    318  1.1  ross     0xFFFFE000,
    319  1.1  ross     0xFFFFF000,
    320  1.1  ross     0xFFFFF800,
    321  1.1  ross     0xFFFFFC00,
    322  1.1  ross     0xFFFFFE00,
    323  1.1  ross     0xFFFFFF00,
    324  1.1  ross     0xFFFFFF80,
    325  1.1  ross     0xFFFFFFC0,
    326  1.1  ross     0xFFFFFFE0,
    327  1.1  ross     0xFFFFFFF0,
    328  1.1  ross     0xFFFFFFF8
    329  1.1  ross };
    330  1.1  ross 
    331  1.1  ross static int32 int32RandomPInf( void )
    332  1.1  ross {
    333  1.1  ross     int8 weightMaskNum;
    334  1.1  ross 
    335  1.1  ross     weightMaskNum = randomUint8() % int32NumPInfWeightMasks;
    336  1.1  ross     return
    337  1.1  ross         (sbits32) (
    338  1.1  ross               ( randomUint32() & int32PInfWeightMasks[ weightMaskNum ] )
    339  1.1  ross             + int32PInfWeightOffsets[ weightMaskNum ]
    340  1.1  ross         );
    341  1.1  ross 
    342  1.1  ross }
    343  1.1  ross 
    344  1.1  ross #ifdef BITS64
    345  1.1  ross 
    346  1.1  ross enum {
    347  1.1  ross     int64NumP1 = 252
    348  1.1  ross };
    349  1.1  ross 
    350  1.1  ross static const uint64 int64P1[ int64NumP1 ] = {
    351  1.1  ross     LIT64( 0x0000000000000000 ),
    352  1.1  ross     LIT64( 0x0000000000000001 ),
    353  1.1  ross     LIT64( 0x0000000000000002 ),
    354  1.1  ross     LIT64( 0x0000000000000004 ),
    355  1.1  ross     LIT64( 0x0000000000000008 ),
    356  1.1  ross     LIT64( 0x0000000000000010 ),
    357  1.1  ross     LIT64( 0x0000000000000020 ),
    358  1.1  ross     LIT64( 0x0000000000000040 ),
    359  1.1  ross     LIT64( 0x0000000000000080 ),
    360  1.1  ross     LIT64( 0x0000000000000100 ),
    361  1.1  ross     LIT64( 0x0000000000000200 ),
    362  1.1  ross     LIT64( 0x0000000000000400 ),
    363  1.1  ross     LIT64( 0x0000000000000800 ),
    364  1.1  ross     LIT64( 0x0000000000001000 ),
    365  1.1  ross     LIT64( 0x0000000000002000 ),
    366  1.1  ross     LIT64( 0x0000000000004000 ),
    367  1.1  ross     LIT64( 0x0000000000008000 ),
    368  1.1  ross     LIT64( 0x0000000000010000 ),
    369  1.1  ross     LIT64( 0x0000000000020000 ),
    370  1.1  ross     LIT64( 0x0000000000040000 ),
    371  1.1  ross     LIT64( 0x0000000000080000 ),
    372  1.1  ross     LIT64( 0x0000000000100000 ),
    373  1.1  ross     LIT64( 0x0000000000200000 ),
    374  1.1  ross     LIT64( 0x0000000000400000 ),
    375  1.1  ross     LIT64( 0x0000000000800000 ),
    376  1.1  ross     LIT64( 0x0000000001000000 ),
    377  1.1  ross     LIT64( 0x0000000002000000 ),
    378  1.1  ross     LIT64( 0x0000000004000000 ),
    379  1.1  ross     LIT64( 0x0000000008000000 ),
    380  1.1  ross     LIT64( 0x0000000010000000 ),
    381  1.1  ross     LIT64( 0x0000000020000000 ),
    382  1.1  ross     LIT64( 0x0000000040000000 ),
    383  1.1  ross     LIT64( 0x0000000080000000 ),
    384  1.1  ross     LIT64( 0x0000000100000000 ),
    385  1.1  ross     LIT64( 0x0000000200000000 ),
    386  1.1  ross     LIT64( 0x0000000400000000 ),
    387  1.1  ross     LIT64( 0x0000000800000000 ),
    388  1.1  ross     LIT64( 0x0000001000000000 ),
    389  1.1  ross     LIT64( 0x0000002000000000 ),
    390  1.1  ross     LIT64( 0x0000004000000000 ),
    391  1.1  ross     LIT64( 0x0000008000000000 ),
    392  1.1  ross     LIT64( 0x0000010000000000 ),
    393  1.1  ross     LIT64( 0x0000020000000000 ),
    394  1.1  ross     LIT64( 0x0000040000000000 ),
    395  1.1  ross     LIT64( 0x0000080000000000 ),
    396  1.1  ross     LIT64( 0x0000100000000000 ),
    397  1.1  ross     LIT64( 0x0000200000000000 ),
    398  1.1  ross     LIT64( 0x0000400000000000 ),
    399  1.1  ross     LIT64( 0x0000800000000000 ),
    400  1.1  ross     LIT64( 0x0001000000000000 ),
    401  1.1  ross     LIT64( 0x0002000000000000 ),
    402  1.1  ross     LIT64( 0x0004000000000000 ),
    403  1.1  ross     LIT64( 0x0008000000000000 ),
    404  1.1  ross     LIT64( 0x0010000000000000 ),
    405  1.1  ross     LIT64( 0x0020000000000000 ),
    406  1.1  ross     LIT64( 0x0040000000000000 ),
    407  1.1  ross     LIT64( 0x0080000000000000 ),
    408  1.1  ross     LIT64( 0x0100000000000000 ),
    409  1.1  ross     LIT64( 0x0200000000000000 ),
    410  1.1  ross     LIT64( 0x0400000000000000 ),
    411  1.1  ross     LIT64( 0x0800000000000000 ),
    412  1.1  ross     LIT64( 0x1000000000000000 ),
    413  1.1  ross     LIT64( 0x2000000000000000 ),
    414  1.1  ross     LIT64( 0x4000000000000000 ),
    415  1.1  ross     LIT64( 0x8000000000000000 ),
    416  1.1  ross     LIT64( 0xC000000000000000 ),
    417  1.1  ross     LIT64( 0xE000000000000000 ),
    418  1.1  ross     LIT64( 0xF000000000000000 ),
    419  1.1  ross     LIT64( 0xF800000000000000 ),
    420  1.1  ross     LIT64( 0xFC00000000000000 ),
    421  1.1  ross     LIT64( 0xFE00000000000000 ),
    422  1.1  ross     LIT64( 0xFF00000000000000 ),
    423  1.1  ross     LIT64( 0xFF80000000000000 ),
    424  1.1  ross     LIT64( 0xFFC0000000000000 ),
    425  1.1  ross     LIT64( 0xFFE0000000000000 ),
    426  1.1  ross     LIT64( 0xFFF0000000000000 ),
    427  1.1  ross     LIT64( 0xFFF8000000000000 ),
    428  1.1  ross     LIT64( 0xFFFC000000000000 ),
    429  1.1  ross     LIT64( 0xFFFE000000000000 ),
    430  1.1  ross     LIT64( 0xFFFF000000000000 ),
    431  1.1  ross     LIT64( 0xFFFF800000000000 ),
    432  1.1  ross     LIT64( 0xFFFFC00000000000 ),
    433  1.1  ross     LIT64( 0xFFFFE00000000000 ),
    434  1.1  ross     LIT64( 0xFFFFF00000000000 ),
    435  1.1  ross     LIT64( 0xFFFFF80000000000 ),
    436  1.1  ross     LIT64( 0xFFFFFC0000000000 ),
    437  1.1  ross     LIT64( 0xFFFFFE0000000000 ),
    438  1.1  ross     LIT64( 0xFFFFFF0000000000 ),
    439  1.1  ross     LIT64( 0xFFFFFF8000000000 ),
    440  1.1  ross     LIT64( 0xFFFFFFC000000000 ),
    441  1.1  ross     LIT64( 0xFFFFFFE000000000 ),
    442  1.1  ross     LIT64( 0xFFFFFFF000000000 ),
    443  1.1  ross     LIT64( 0xFFFFFFF800000000 ),
    444  1.1  ross     LIT64( 0xFFFFFFFC00000000 ),
    445  1.1  ross     LIT64( 0xFFFFFFFE00000000 ),
    446  1.1  ross     LIT64( 0xFFFFFFFF00000000 ),
    447  1.1  ross     LIT64( 0xFFFFFFFF80000000 ),
    448  1.1  ross     LIT64( 0xFFFFFFFFC0000000 ),
    449  1.1  ross     LIT64( 0xFFFFFFFFE0000000 ),
    450  1.1  ross     LIT64( 0xFFFFFFFFF0000000 ),
    451  1.1  ross     LIT64( 0xFFFFFFFFF8000000 ),
    452  1.1  ross     LIT64( 0xFFFFFFFFFC000000 ),
    453  1.1  ross     LIT64( 0xFFFFFFFFFE000000 ),
    454  1.1  ross     LIT64( 0xFFFFFFFFFF000000 ),
    455  1.1  ross     LIT64( 0xFFFFFFFFFF800000 ),
    456  1.1  ross     LIT64( 0xFFFFFFFFFFC00000 ),
    457  1.1  ross     LIT64( 0xFFFFFFFFFFE00000 ),
    458  1.1  ross     LIT64( 0xFFFFFFFFFFF00000 ),
    459  1.1  ross     LIT64( 0xFFFFFFFFFFF80000 ),
    460  1.1  ross     LIT64( 0xFFFFFFFFFFFC0000 ),
    461  1.1  ross     LIT64( 0xFFFFFFFFFFFE0000 ),
    462  1.1  ross     LIT64( 0xFFFFFFFFFFFF0000 ),
    463  1.1  ross     LIT64( 0xFFFFFFFFFFFF8000 ),
    464  1.1  ross     LIT64( 0xFFFFFFFFFFFFC000 ),
    465  1.1  ross     LIT64( 0xFFFFFFFFFFFFE000 ),
    466  1.1  ross     LIT64( 0xFFFFFFFFFFFFF000 ),
    467  1.1  ross     LIT64( 0xFFFFFFFFFFFFF800 ),
    468  1.1  ross     LIT64( 0xFFFFFFFFFFFFFC00 ),
    469  1.1  ross     LIT64( 0xFFFFFFFFFFFFFE00 ),
    470  1.1  ross     LIT64( 0xFFFFFFFFFFFFFF00 ),
    471  1.1  ross     LIT64( 0xFFFFFFFFFFFFFF80 ),
    472  1.1  ross     LIT64( 0xFFFFFFFFFFFFFFC0 ),
    473  1.1  ross     LIT64( 0xFFFFFFFFFFFFFFE0 ),
    474  1.1  ross     LIT64( 0xFFFFFFFFFFFFFFF0 ),
    475  1.1  ross     LIT64( 0xFFFFFFFFFFFFFFF8 ),
    476  1.1  ross     LIT64( 0xFFFFFFFFFFFFFFFC ),
    477  1.1  ross     LIT64( 0xFFFFFFFFFFFFFFFE ),
    478  1.1  ross     LIT64( 0xFFFFFFFFFFFFFFFF ),
    479  1.1  ross     LIT64( 0xFFFFFFFFFFFFFFFD ),
    480  1.1  ross     LIT64( 0xFFFFFFFFFFFFFFFB ),
    481  1.1  ross     LIT64( 0xFFFFFFFFFFFFFFF7 ),
    482  1.1  ross     LIT64( 0xFFFFFFFFFFFFFFEF ),
    483  1.1  ross     LIT64( 0xFFFFFFFFFFFFFFDF ),
    484  1.1  ross     LIT64( 0xFFFFFFFFFFFFFFBF ),
    485  1.1  ross     LIT64( 0xFFFFFFFFFFFFFF7F ),
    486  1.1  ross     LIT64( 0xFFFFFFFFFFFFFEFF ),
    487  1.1  ross     LIT64( 0xFFFFFFFFFFFFFDFF ),
    488  1.1  ross     LIT64( 0xFFFFFFFFFFFFFBFF ),
    489  1.1  ross     LIT64( 0xFFFFFFFFFFFFF7FF ),
    490  1.1  ross     LIT64( 0xFFFFFFFFFFFFEFFF ),
    491  1.1  ross     LIT64( 0xFFFFFFFFFFFFDFFF ),
    492  1.1  ross     LIT64( 0xFFFFFFFFFFFFBFFF ),
    493  1.1  ross     LIT64( 0xFFFFFFFFFFFF7FFF ),
    494  1.1  ross     LIT64( 0xFFFFFFFFFFFEFFFF ),
    495  1.1  ross     LIT64( 0xFFFFFFFFFFFDFFFF ),
    496  1.1  ross     LIT64( 0xFFFFFFFFFFFBFFFF ),
    497  1.1  ross     LIT64( 0xFFFFFFFFFFF7FFFF ),
    498  1.1  ross     LIT64( 0xFFFFFFFFFFEFFFFF ),
    499  1.1  ross     LIT64( 0xFFFFFFFFFFDFFFFF ),
    500  1.1  ross     LIT64( 0xFFFFFFFFFFBFFFFF ),
    501  1.1  ross     LIT64( 0xFFFFFFFFFF7FFFFF ),
    502  1.1  ross     LIT64( 0xFFFFFFFFFEFFFFFF ),
    503  1.1  ross     LIT64( 0xFFFFFFFFFDFFFFFF ),
    504  1.1  ross     LIT64( 0xFFFFFFFFFBFFFFFF ),
    505  1.1  ross     LIT64( 0xFFFFFFFFF7FFFFFF ),
    506  1.1  ross     LIT64( 0xFFFFFFFFEFFFFFFF ),
    507  1.1  ross     LIT64( 0xFFFFFFFFDFFFFFFF ),
    508  1.1  ross     LIT64( 0xFFFFFFFFBFFFFFFF ),
    509  1.1  ross     LIT64( 0xFFFFFFFF7FFFFFFF ),
    510  1.1  ross     LIT64( 0xFFFFFFFEFFFFFFFF ),
    511  1.1  ross     LIT64( 0xFFFFFFFDFFFFFFFF ),
    512  1.1  ross     LIT64( 0xFFFFFFFBFFFFFFFF ),
    513  1.1  ross     LIT64( 0xFFFFFFF7FFFFFFFF ),
    514  1.1  ross     LIT64( 0xFFFFFFEFFFFFFFFF ),
    515  1.1  ross     LIT64( 0xFFFFFFDFFFFFFFFF ),
    516  1.1  ross     LIT64( 0xFFFFFFBFFFFFFFFF ),
    517  1.1  ross     LIT64( 0xFFFFFF7FFFFFFFFF ),
    518  1.1  ross     LIT64( 0xFFFFFEFFFFFFFFFF ),
    519  1.1  ross     LIT64( 0xFFFFFDFFFFFFFFFF ),
    520  1.1  ross     LIT64( 0xFFFFFBFFFFFFFFFF ),
    521  1.1  ross     LIT64( 0xFFFFF7FFFFFFFFFF ),
    522  1.1  ross     LIT64( 0xFFFFEFFFFFFFFFFF ),
    523  1.1  ross     LIT64( 0xFFFFDFFFFFFFFFFF ),
    524  1.1  ross     LIT64( 0xFFFFBFFFFFFFFFFF ),
    525  1.1  ross     LIT64( 0xFFFF7FFFFFFFFFFF ),
    526  1.1  ross     LIT64( 0xFFFEFFFFFFFFFFFF ),
    527  1.1  ross     LIT64( 0xFFFDFFFFFFFFFFFF ),
    528  1.1  ross     LIT64( 0xFFFBFFFFFFFFFFFF ),
    529  1.1  ross     LIT64( 0xFFF7FFFFFFFFFFFF ),
    530  1.1  ross     LIT64( 0xFFEFFFFFFFFFFFFF ),
    531  1.1  ross     LIT64( 0xFFDFFFFFFFFFFFFF ),
    532  1.1  ross     LIT64( 0xFFBFFFFFFFFFFFFF ),
    533  1.1  ross     LIT64( 0xFF7FFFFFFFFFFFFF ),
    534  1.1  ross     LIT64( 0xFEFFFFFFFFFFFFFF ),
    535  1.1  ross     LIT64( 0xFDFFFFFFFFFFFFFF ),
    536  1.1  ross     LIT64( 0xFBFFFFFFFFFFFFFF ),
    537  1.1  ross     LIT64( 0xF7FFFFFFFFFFFFFF ),
    538  1.1  ross     LIT64( 0xEFFFFFFFFFFFFFFF ),
    539  1.1  ross     LIT64( 0xDFFFFFFFFFFFFFFF ),
    540  1.1  ross     LIT64( 0xBFFFFFFFFFFFFFFF ),
    541  1.1  ross     LIT64( 0x7FFFFFFFFFFFFFFF ),
    542  1.1  ross     LIT64( 0x3FFFFFFFFFFFFFFF ),
    543  1.1  ross     LIT64( 0x1FFFFFFFFFFFFFFF ),
    544  1.1  ross     LIT64( 0x0FFFFFFFFFFFFFFF ),
    545  1.1  ross     LIT64( 0x07FFFFFFFFFFFFFF ),
    546  1.1  ross     LIT64( 0x03FFFFFFFFFFFFFF ),
    547  1.1  ross     LIT64( 0x01FFFFFFFFFFFFFF ),
    548  1.1  ross     LIT64( 0x00FFFFFFFFFFFFFF ),
    549  1.1  ross     LIT64( 0x007FFFFFFFFFFFFF ),
    550  1.1  ross     LIT64( 0x003FFFFFFFFFFFFF ),
    551  1.1  ross     LIT64( 0x001FFFFFFFFFFFFF ),
    552  1.1  ross     LIT64( 0x000FFFFFFFFFFFFF ),
    553  1.1  ross     LIT64( 0x0007FFFFFFFFFFFF ),
    554  1.1  ross     LIT64( 0x0003FFFFFFFFFFFF ),
    555  1.1  ross     LIT64( 0x0001FFFFFFFFFFFF ),
    556  1.1  ross     LIT64( 0x0000FFFFFFFFFFFF ),
    557  1.1  ross     LIT64( 0x00007FFFFFFFFFFF ),
    558  1.1  ross     LIT64( 0x00003FFFFFFFFFFF ),
    559  1.1  ross     LIT64( 0x00001FFFFFFFFFFF ),
    560  1.1  ross     LIT64( 0x00000FFFFFFFFFFF ),
    561  1.1  ross     LIT64( 0x000007FFFFFFFFFF ),
    562  1.1  ross     LIT64( 0x000003FFFFFFFFFF ),
    563  1.1  ross     LIT64( 0x000001FFFFFFFFFF ),
    564  1.1  ross     LIT64( 0x000000FFFFFFFFFF ),
    565  1.1  ross     LIT64( 0x0000007FFFFFFFFF ),
    566  1.1  ross     LIT64( 0x0000003FFFFFFFFF ),
    567  1.1  ross     LIT64( 0x0000001FFFFFFFFF ),
    568  1.1  ross     LIT64( 0x0000000FFFFFFFFF ),
    569  1.1  ross     LIT64( 0x00000007FFFFFFFF ),
    570  1.1  ross     LIT64( 0x00000003FFFFFFFF ),
    571  1.1  ross     LIT64( 0x00000001FFFFFFFF ),
    572  1.1  ross     LIT64( 0x00000000FFFFFFFF ),
    573  1.1  ross     LIT64( 0x000000007FFFFFFF ),
    574  1.1  ross     LIT64( 0x000000003FFFFFFF ),
    575  1.1  ross     LIT64( 0x000000001FFFFFFF ),
    576  1.1  ross     LIT64( 0x000000000FFFFFFF ),
    577  1.1  ross     LIT64( 0x0000000007FFFFFF ),
    578  1.1  ross     LIT64( 0x0000000003FFFFFF ),
    579  1.1  ross     LIT64( 0x0000000001FFFFFF ),
    580  1.1  ross     LIT64( 0x0000000000FFFFFF ),
    581  1.1  ross     LIT64( 0x00000000007FFFFF ),
    582  1.1  ross     LIT64( 0x00000000003FFFFF ),
    583  1.1  ross     LIT64( 0x00000000001FFFFF ),
    584  1.1  ross     LIT64( 0x00000000000FFFFF ),
    585  1.1  ross     LIT64( 0x000000000007FFFF ),
    586  1.1  ross     LIT64( 0x000000000003FFFF ),
    587  1.1  ross     LIT64( 0x000000000001FFFF ),
    588  1.1  ross     LIT64( 0x000000000000FFFF ),
    589  1.1  ross     LIT64( 0x0000000000007FFF ),
    590  1.1  ross     LIT64( 0x0000000000003FFF ),
    591  1.1  ross     LIT64( 0x0000000000001FFF ),
    592  1.1  ross     LIT64( 0x0000000000000FFF ),
    593  1.1  ross     LIT64( 0x00000000000007FF ),
    594  1.1  ross     LIT64( 0x00000000000003FF ),
    595  1.1  ross     LIT64( 0x00000000000001FF ),
    596  1.1  ross     LIT64( 0x00000000000000FF ),
    597  1.1  ross     LIT64( 0x000000000000007F ),
    598  1.1  ross     LIT64( 0x000000000000003F ),
    599  1.1  ross     LIT64( 0x000000000000001F ),
    600  1.1  ross     LIT64( 0x000000000000000F ),
    601  1.1  ross     LIT64( 0x0000000000000007 ),
    602  1.1  ross     LIT64( 0x0000000000000003 )
    603  1.1  ross };
    604  1.1  ross 
    605  1.1  ross static int64 int64NextP1( sequenceT *sequencePtr )
    606  1.1  ross {
    607  1.1  ross     uint8 termNum;
    608  1.1  ross     int64 z;
    609  1.1  ross 
    610  1.1  ross     termNum = sequencePtr->term1Num;
    611  1.1  ross     z = int64P1[ termNum ];
    612  1.1  ross     ++termNum;
    613  1.1  ross     if ( int64NumP1 <= termNum ) {
    614  1.1  ross         termNum = 0;
    615  1.1  ross         sequencePtr->done = TRUE;
    616  1.1  ross     }
    617  1.1  ross     sequencePtr->term1Num = termNum;
    618  1.1  ross     return (sbits64) z;
    619  1.1  ross 
    620  1.1  ross }
    621  1.1  ross 
    622  1.1  ross static const int64 int64NumP2 = ( int64NumP1 * int64NumP1 + int64NumP1 ) / 2;
    623  1.1  ross 
    624  1.1  ross static int64 int64NextP2( sequenceT *sequencePtr )
    625  1.1  ross {
    626  1.1  ross     uint8 term1Num, term2Num;
    627  1.1  ross     int64 z;
    628  1.1  ross 
    629  1.1  ross     term2Num = sequencePtr->term2Num;
    630  1.1  ross     term1Num = sequencePtr->term1Num;
    631  1.1  ross     z = int64P1[ term1Num ] + int64P1[ term2Num ];
    632  1.1  ross     ++term2Num;
    633  1.1  ross     if ( int64NumP1 <= term2Num ) {
    634  1.1  ross         ++term1Num;
    635  1.1  ross         if ( int64NumP1 <= term1Num ) {
    636  1.1  ross             term1Num = 0;
    637  1.1  ross             sequencePtr->done = TRUE;
    638  1.1  ross         }
    639  1.1  ross         term2Num = term1Num;
    640  1.1  ross         sequencePtr->term1Num = term1Num;
    641  1.1  ross     }
    642  1.1  ross     sequencePtr->term2Num = term2Num;
    643  1.1  ross     return (sbits64) z;
    644  1.1  ross 
    645  1.1  ross }
    646  1.1  ross 
    647  1.1  ross static int64 int64RandomP3( void )
    648  1.1  ross {
    649  1.1  ross 
    650  1.1  ross     return
    651  1.1  ross         (sbits64) (
    652  1.1  ross               int64P1[ randomUint8() % int64NumP1 ]
    653  1.1  ross             + int64P1[ randomUint8() % int64NumP1 ]
    654  1.1  ross             + int64P1[ randomUint8() % int64NumP1 ]
    655  1.1  ross         );
    656  1.1  ross 
    657  1.1  ross }
    658  1.1  ross 
    659  1.1  ross enum {
    660  1.1  ross     int64NumPInfWeightMasks = 61
    661  1.1  ross };
    662  1.1  ross 
    663  1.1  ross static const uint64 int64PInfWeightMasks[ int64NumPInfWeightMasks ] = {
    664  1.1  ross     LIT64( 0xFFFFFFFFFFFFFFFF ),
    665  1.1  ross     LIT64( 0x7FFFFFFFFFFFFFFF ),
    666  1.1  ross     LIT64( 0x3FFFFFFFFFFFFFFF ),
    667  1.1  ross     LIT64( 0x1FFFFFFFFFFFFFFF ),
    668  1.1  ross     LIT64( 0x0FFFFFFFFFFFFFFF ),
    669  1.1  ross     LIT64( 0x07FFFFFFFFFFFFFF ),
    670  1.1  ross     LIT64( 0x03FFFFFFFFFFFFFF ),
    671  1.1  ross     LIT64( 0x01FFFFFFFFFFFFFF ),
    672  1.1  ross     LIT64( 0x00FFFFFFFFFFFFFF ),
    673  1.1  ross     LIT64( 0x007FFFFFFFFFFFFF ),
    674  1.1  ross     LIT64( 0x003FFFFFFFFFFFFF ),
    675  1.1  ross     LIT64( 0x001FFFFFFFFFFFFF ),
    676  1.1  ross     LIT64( 0x000FFFFFFFFFFFFF ),
    677  1.1  ross     LIT64( 0x0007FFFFFFFFFFFF ),
    678  1.1  ross     LIT64( 0x0003FFFFFFFFFFFF ),
    679  1.1  ross     LIT64( 0x0001FFFFFFFFFFFF ),
    680  1.1  ross     LIT64( 0x0000FFFFFFFFFFFF ),
    681  1.1  ross     LIT64( 0x00007FFFFFFFFFFF ),
    682  1.1  ross     LIT64( 0x00003FFFFFFFFFFF ),
    683  1.1  ross     LIT64( 0x00001FFFFFFFFFFF ),
    684  1.1  ross     LIT64( 0x00000FFFFFFFFFFF ),
    685  1.1  ross     LIT64( 0x000007FFFFFFFFFF ),
    686  1.1  ross     LIT64( 0x000003FFFFFFFFFF ),
    687  1.1  ross     LIT64( 0x000001FFFFFFFFFF ),
    688  1.1  ross     LIT64( 0x000000FFFFFFFFFF ),
    689  1.1  ross     LIT64( 0x0000007FFFFFFFFF ),
    690  1.1  ross     LIT64( 0x0000003FFFFFFFFF ),
    691  1.1  ross     LIT64( 0x0000001FFFFFFFFF ),
    692  1.1  ross     LIT64( 0x0000000FFFFFFFFF ),
    693  1.1  ross     LIT64( 0x00000007FFFFFFFF ),
    694  1.1  ross     LIT64( 0x00000003FFFFFFFF ),
    695  1.1  ross     LIT64( 0x00000001FFFFFFFF ),
    696  1.1  ross     LIT64( 0x00000000FFFFFFFF ),
    697  1.1  ross     LIT64( 0x000000007FFFFFFF ),
    698  1.1  ross     LIT64( 0x000000003FFFFFFF ),
    699  1.1  ross     LIT64( 0x000000001FFFFFFF ),
    700  1.1  ross     LIT64( 0x000000000FFFFFFF ),
    701  1.1  ross     LIT64( 0x0000000007FFFFFF ),
    702  1.1  ross     LIT64( 0x0000000003FFFFFF ),
    703  1.1  ross     LIT64( 0x0000000001FFFFFF ),
    704  1.1  ross     LIT64( 0x0000000000FFFFFF ),
    705  1.1  ross     LIT64( 0x00000000007FFFFF ),
    706  1.1  ross     LIT64( 0x00000000003FFFFF ),
    707  1.1  ross     LIT64( 0x00000000001FFFFF ),
    708  1.1  ross     LIT64( 0x00000000000FFFFF ),
    709  1.1  ross     LIT64( 0x000000000007FFFF ),
    710  1.1  ross     LIT64( 0x000000000003FFFF ),
    711  1.1  ross     LIT64( 0x000000000001FFFF ),
    712  1.1  ross     LIT64( 0x000000000000FFFF ),
    713  1.1  ross     LIT64( 0x0000000000007FFF ),
    714  1.1  ross     LIT64( 0x0000000000003FFF ),
    715  1.1  ross     LIT64( 0x0000000000001FFF ),
    716  1.1  ross     LIT64( 0x0000000000000FFF ),
    717  1.1  ross     LIT64( 0x00000000000007FF ),
    718  1.1  ross     LIT64( 0x00000000000003FF ),
    719  1.1  ross     LIT64( 0x00000000000001FF ),
    720  1.1  ross     LIT64( 0x00000000000000FF ),
    721  1.1  ross     LIT64( 0x000000000000007F ),
    722  1.1  ross     LIT64( 0x000000000000003F ),
    723  1.1  ross     LIT64( 0x000000000000001F ),
    724  1.1  ross     LIT64( 0x000000000000000F )
    725  1.1  ross };
    726  1.1  ross 
    727  1.1  ross static const uint64 int64PInfWeightOffsets[ int64NumPInfWeightMasks ] = {
    728  1.1  ross     LIT64( 0x0000000000000000 ),
    729  1.1  ross     LIT64( 0xC000000000000000 ),
    730  1.1  ross     LIT64( 0xE000000000000000 ),
    731  1.1  ross     LIT64( 0xF000000000000000 ),
    732  1.1  ross     LIT64( 0xF800000000000000 ),
    733  1.1  ross     LIT64( 0xFC00000000000000 ),
    734  1.1  ross     LIT64( 0xFE00000000000000 ),
    735  1.1  ross     LIT64( 0xFF00000000000000 ),
    736  1.1  ross     LIT64( 0xFF80000000000000 ),
    737  1.1  ross     LIT64( 0xFFC0000000000000 ),
    738  1.1  ross     LIT64( 0xFFE0000000000000 ),
    739  1.1  ross     LIT64( 0xFFF0000000000000 ),
    740  1.1  ross     LIT64( 0xFFF8000000000000 ),
    741  1.1  ross     LIT64( 0xFFFC000000000000 ),
    742  1.1  ross     LIT64( 0xFFFE000000000000 ),
    743  1.1  ross     LIT64( 0xFFFF000000000000 ),
    744  1.1  ross     LIT64( 0xFFFF800000000000 ),
    745  1.1  ross     LIT64( 0xFFFFC00000000000 ),
    746  1.1  ross     LIT64( 0xFFFFE00000000000 ),
    747  1.1  ross     LIT64( 0xFFFFF00000000000 ),
    748  1.1  ross     LIT64( 0xFFFFF80000000000 ),
    749  1.1  ross     LIT64( 0xFFFFFC0000000000 ),
    750  1.1  ross     LIT64( 0xFFFFFE0000000000 ),
    751  1.1  ross     LIT64( 0xFFFFFF0000000000 ),
    752  1.1  ross     LIT64( 0xFFFFFF8000000000 ),
    753  1.1  ross     LIT64( 0xFFFFFFC000000000 ),
    754  1.1  ross     LIT64( 0xFFFFFFE000000000 ),
    755  1.1  ross     LIT64( 0xFFFFFFF000000000 ),
    756  1.1  ross     LIT64( 0xFFFFFFF800000000 ),
    757  1.1  ross     LIT64( 0xFFFFFFFC00000000 ),
    758  1.1  ross     LIT64( 0xFFFFFFFE00000000 ),
    759  1.1  ross     LIT64( 0xFFFFFFFF00000000 ),
    760  1.1  ross     LIT64( 0xFFFFFFFF80000000 ),
    761  1.1  ross     LIT64( 0xFFFFFFFFC0000000 ),
    762  1.1  ross     LIT64( 0xFFFFFFFFE0000000 ),
    763  1.1  ross     LIT64( 0xFFFFFFFFF0000000 ),
    764  1.1  ross     LIT64( 0xFFFFFFFFF8000000 ),
    765  1.1  ross     LIT64( 0xFFFFFFFFFC000000 ),
    766  1.1  ross     LIT64( 0xFFFFFFFFFE000000 ),
    767  1.1  ross     LIT64( 0xFFFFFFFFFF000000 ),
    768  1.1  ross     LIT64( 0xFFFFFFFFFF800000 ),
    769  1.1  ross     LIT64( 0xFFFFFFFFFFC00000 ),
    770  1.1  ross     LIT64( 0xFFFFFFFFFFE00000 ),
    771  1.1  ross     LIT64( 0xFFFFFFFFFFF00000 ),
    772  1.1  ross     LIT64( 0xFFFFFFFFFFF80000 ),
    773  1.1  ross     LIT64( 0xFFFFFFFFFFFC0000 ),
    774  1.1  ross     LIT64( 0xFFFFFFFFFFFE0000 ),
    775  1.1  ross     LIT64( 0xFFFFFFFFFFFF0000 ),
    776  1.1  ross     LIT64( 0xFFFFFFFFFFFF8000 ),
    777  1.1  ross     LIT64( 0xFFFFFFFFFFFFC000 ),
    778  1.1  ross     LIT64( 0xFFFFFFFFFFFFE000 ),
    779  1.1  ross     LIT64( 0xFFFFFFFFFFFFF000 ),
    780  1.1  ross     LIT64( 0xFFFFFFFFFFFFF800 ),
    781  1.1  ross     LIT64( 0xFFFFFFFFFFFFFC00 ),
    782  1.1  ross     LIT64( 0xFFFFFFFFFFFFFE00 ),
    783  1.1  ross     LIT64( 0xFFFFFFFFFFFFFF00 ),
    784  1.1  ross     LIT64( 0xFFFFFFFFFFFFFF80 ),
    785  1.1  ross     LIT64( 0xFFFFFFFFFFFFFFC0 ),
    786  1.1  ross     LIT64( 0xFFFFFFFFFFFFFFE0 ),
    787  1.1  ross     LIT64( 0xFFFFFFFFFFFFFFF0 ),
    788  1.1  ross     LIT64( 0xFFFFFFFFFFFFFFF8 )
    789  1.1  ross };
    790  1.1  ross 
    791  1.1  ross static int64 int64RandomPInf( void )
    792  1.1  ross {
    793  1.1  ross     int8 weightMaskNum;
    794  1.1  ross 
    795  1.1  ross     weightMaskNum = randomUint8() % int64NumPInfWeightMasks;
    796  1.1  ross     return
    797  1.1  ross         (sbits64) (
    798  1.1  ross               ( randomUint64() & int64PInfWeightMasks[ weightMaskNum ] )
    799  1.1  ross             + int64PInfWeightOffsets[ weightMaskNum ]
    800  1.1  ross         );
    801  1.1  ross 
    802  1.1  ross }
    803  1.1  ross 
    804  1.1  ross #endif
    805  1.1  ross 
    806  1.1  ross enum {
    807  1.1  ross     float32NumQIn  = 22,
    808  1.1  ross     float32NumQOut = 50,
    809  1.1  ross     float32NumP1   =  4,
    810  1.1  ross     float32NumP2   = 88
    811  1.1  ross };
    812  1.1  ross 
    813  1.1  ross static const uint32 float32QIn[ float32NumQIn ] = {
    814  1.1  ross     0x00000000,		/* positive, subnormal		*/
    815  1.1  ross     0x00800000,		/* positive, -126		*/
    816  1.1  ross     0x33800000,		/* positive,  -24		*/
    817  1.1  ross     0x3E800000,		/* positive,   -2		*/
    818  1.1  ross     0x3F000000,		/* positive,   -1		*/
    819  1.1  ross     0x3F800000,		/* positive,    0		*/
    820  1.1  ross     0x40000000,		/* positive,    1		*/
    821  1.1  ross     0x40800000,		/* positive,    2		*/
    822  1.1  ross     0x4B800000,		/* positive,   24		*/
    823  1.1  ross     0x7F000000,		/* positive,  127		*/
    824  1.1  ross     0x7F800000,		/* positive, infinity or NaN	*/
    825  1.1  ross     0x80000000,		/* negative, subnormal		*/
    826  1.1  ross     0x80800000,		/* negative, -126		*/
    827  1.1  ross     0xB3800000,		/* negative,  -24		*/
    828  1.1  ross     0xBE800000,		/* negative,   -2		*/
    829  1.1  ross     0xBF000000,		/* negative,   -1		*/
    830  1.1  ross     0xBF800000,		/* negative,    0		*/
    831  1.1  ross     0xC0000000,		/* negative,    1		*/
    832  1.1  ross     0xC0800000,		/* negative,    2		*/
    833  1.1  ross     0xCB800000,		/* negative,   24		*/
    834  1.1  ross     0xFE800000,		/* negative,  126		*/
    835  1.1  ross     0xFF800000		/* negative, infinity or NaN	*/
    836  1.1  ross };
    837  1.1  ross 
    838  1.1  ross static const uint32 float32QOut[ float32NumQOut ] = {
    839  1.1  ross     0x00000000,		/* positive, subnormal		*/
    840  1.1  ross     0x00800000,		/* positive, -126		*/
    841  1.1  ross     0x01000000,		/* positive, -125		*/
    842  1.1  ross     0x33800000,		/* positive,  -24		*/
    843  1.1  ross     0x3D800000,		/* positive,   -4		*/
    844  1.1  ross     0x3E000000,		/* positive,   -3		*/
    845  1.1  ross     0x3E800000,		/* positive,   -2		*/
    846  1.1  ross     0x3F000000,		/* positive,   -1		*/
    847  1.1  ross     0x3F800000,		/* positive,    0		*/
    848  1.1  ross     0x40000000,		/* positive,    1		*/
    849  1.1  ross     0x40800000,		/* positive,    2		*/
    850  1.1  ross     0x41000000,		/* positive,    3		*/
    851  1.1  ross     0x41800000,		/* positive,    4		*/
    852  1.1  ross     0x4B800000,		/* positive,   24		*/
    853  1.1  ross     0x4E000000,		/* positive,   29		*/
    854  1.1  ross     0x4E800000,		/* positive,   30		*/
    855  1.1  ross     0x4F000000,		/* positive,   31		*/
    856  1.1  ross     0x4F800000,		/* positive,   32		*/
    857  1.1  ross     0x5E000000,		/* positive,   61		*/
    858  1.1  ross     0x5E800000,		/* positive,   62		*/
    859  1.1  ross     0x5F000000,		/* positive,   63		*/
    860  1.1  ross     0x5F800000,		/* positive,   64		*/
    861  1.1  ross     0x7E800000,		/* positive,  126		*/
    862  1.1  ross     0x7F000000,		/* positive,  127		*/
    863  1.1  ross     0x7F800000,		/* positive, infinity or NaN	*/
    864  1.1  ross     0x80000000,		/* negative, subnormal		*/
    865  1.1  ross     0x80800000,		/* negative, -126		*/
    866  1.1  ross     0x81000000,		/* negative, -125		*/
    867  1.1  ross     0xB3800000,		/* negative,  -24		*/
    868  1.1  ross     0xBD800000,		/* negative,   -4		*/
    869  1.1  ross     0xBE000000,		/* negative,   -3		*/
    870  1.1  ross     0xBE800000,		/* negative,   -2		*/
    871  1.1  ross     0xBF000000,		/* negative,   -1		*/
    872  1.1  ross     0xBF800000,		/* negative,    0		*/
    873  1.1  ross     0xC0000000,		/* negative,    1		*/
    874  1.1  ross     0xC0800000,		/* negative,    2		*/
    875  1.1  ross     0xC1000000,		/* negative,    3		*/
    876  1.1  ross     0xC1800000,		/* negative,    4		*/
    877  1.1  ross     0xCB800000,		/* negative,   24		*/
    878  1.1  ross     0xCE000000,		/* negative,   29		*/
    879  1.1  ross     0xCE800000,		/* negative,   30		*/
    880  1.1  ross     0xCF000000,		/* negative,   31		*/
    881  1.1  ross     0xCF800000,		/* negative,   32		*/
    882  1.1  ross     0xDE000000,		/* negative,   61		*/
    883  1.1  ross     0xDE800000,		/* negative,   62		*/
    884  1.1  ross     0xDF000000,		/* negative,   63		*/
    885  1.1  ross     0xDF800000,		/* negative,   64		*/
    886  1.1  ross     0xFE800000,		/* negative,  126		*/
    887  1.1  ross     0xFF000000,		/* negative,  127		*/
    888  1.1  ross     0xFF800000		/* negative, infinity or NaN	*/
    889  1.1  ross };
    890  1.1  ross 
    891  1.1  ross static const uint32 float32P1[ float32NumP1 ] = {
    892  1.1  ross     0x00000000,
    893  1.1  ross     0x00000001,
    894  1.1  ross     0x007FFFFF,
    895  1.1  ross     0x007FFFFE
    896  1.1  ross };
    897  1.1  ross 
    898  1.1  ross static const uint32 float32P2[ float32NumP2 ] = {
    899  1.1  ross     0x00000000,
    900  1.1  ross     0x00000001,
    901  1.1  ross     0x00000002,
    902  1.1  ross     0x00000004,
    903  1.1  ross     0x00000008,
    904  1.1  ross     0x00000010,
    905  1.1  ross     0x00000020,
    906  1.1  ross     0x00000040,
    907  1.1  ross     0x00000080,
    908  1.1  ross     0x00000100,
    909  1.1  ross     0x00000200,
    910  1.1  ross     0x00000400,
    911  1.1  ross     0x00000800,
    912  1.1  ross     0x00001000,
    913  1.1  ross     0x00002000,
    914  1.1  ross     0x00004000,
    915  1.1  ross     0x00008000,
    916  1.1  ross     0x00010000,
    917  1.1  ross     0x00020000,
    918  1.1  ross     0x00040000,
    919  1.1  ross     0x00080000,
    920  1.1  ross     0x00100000,
    921  1.1  ross     0x00200000,
    922  1.1  ross     0x00400000,
    923  1.1  ross     0x00600000,
    924  1.1  ross     0x00700000,
    925  1.1  ross     0x00780000,
    926  1.1  ross     0x007C0000,
    927  1.1  ross     0x007E0000,
    928  1.1  ross     0x007F0000,
    929  1.1  ross     0x007F8000,
    930  1.1  ross     0x007FC000,
    931  1.1  ross     0x007FE000,
    932  1.1  ross     0x007FF000,
    933  1.1  ross     0x007FF800,
    934  1.1  ross     0x007FFC00,
    935  1.1  ross     0x007FFE00,
    936  1.1  ross     0x007FFF00,
    937  1.1  ross     0x007FFF80,
    938  1.1  ross     0x007FFFC0,
    939  1.1  ross     0x007FFFE0,
    940  1.1  ross     0x007FFFF0,
    941  1.1  ross     0x007FFFF8,
    942  1.1  ross     0x007FFFFC,
    943  1.1  ross     0x007FFFFE,
    944  1.1  ross     0x007FFFFF,
    945  1.1  ross     0x007FFFFD,
    946  1.1  ross     0x007FFFFB,
    947  1.1  ross     0x007FFFF7,
    948  1.1  ross     0x007FFFEF,
    949  1.1  ross     0x007FFFDF,
    950  1.1  ross     0x007FFFBF,
    951  1.1  ross     0x007FFF7F,
    952  1.1  ross     0x007FFEFF,
    953  1.1  ross     0x007FFDFF,
    954  1.1  ross     0x007FFBFF,
    955  1.1  ross     0x007FF7FF,
    956  1.1  ross     0x007FEFFF,
    957  1.1  ross     0x007FDFFF,
    958  1.1  ross     0x007FBFFF,
    959  1.1  ross     0x007F7FFF,
    960  1.1  ross     0x007EFFFF,
    961  1.1  ross     0x007DFFFF,
    962  1.1  ross     0x007BFFFF,
    963  1.1  ross     0x0077FFFF,
    964  1.1  ross     0x006FFFFF,
    965  1.1  ross     0x005FFFFF,
    966  1.1  ross     0x003FFFFF,
    967  1.1  ross     0x001FFFFF,
    968  1.1  ross     0x000FFFFF,
    969  1.1  ross     0x0007FFFF,
    970  1.1  ross     0x0003FFFF,
    971  1.1  ross     0x0001FFFF,
    972  1.1  ross     0x0000FFFF,
    973  1.1  ross     0x00007FFF,
    974  1.1  ross     0x00003FFF,
    975  1.1  ross     0x00001FFF,
    976  1.1  ross     0x00000FFF,
    977  1.1  ross     0x000007FF,
    978  1.1  ross     0x000003FF,
    979  1.1  ross     0x000001FF,
    980  1.1  ross     0x000000FF,
    981  1.1  ross     0x0000007F,
    982  1.1  ross     0x0000003F,
    983  1.1  ross     0x0000001F,
    984  1.1  ross     0x0000000F,
    985  1.1  ross     0x00000007,
    986  1.1  ross     0x00000003
    987  1.1  ross };
    988  1.1  ross 
    989  1.1  ross static const uint32 float32NumQInP1 = float32NumQIn * float32NumP1;
    990  1.1  ross static const uint32 float32NumQOutP1 = float32NumQOut * float32NumP1;
    991  1.1  ross 
    992  1.1  ross static float32 float32NextQInP1( sequenceT *sequencePtr )
    993  1.1  ross {
    994  1.1  ross     uint8 expNum, sigNum;
    995  1.1  ross     float32 z;
    996  1.1  ross 
    997  1.1  ross     sigNum = sequencePtr->term1Num;
    998  1.1  ross     expNum = sequencePtr->expNum;
    999  1.1  ross     z = float32QIn[ expNum ] | float32P1[ sigNum ];
   1000  1.1  ross     ++sigNum;
   1001  1.1  ross     if ( float32NumP1 <= sigNum ) {
   1002  1.1  ross         sigNum = 0;
   1003  1.1  ross         ++expNum;
   1004  1.1  ross         if ( float32NumQIn <= expNum ) {
   1005  1.1  ross             expNum = 0;
   1006  1.1  ross             sequencePtr->done = TRUE;
   1007  1.1  ross         }
   1008  1.1  ross         sequencePtr->expNum = expNum;
   1009  1.1  ross     }
   1010  1.1  ross     sequencePtr->term1Num = sigNum;
   1011  1.1  ross     return z;
   1012  1.1  ross 
   1013  1.1  ross }
   1014  1.1  ross 
   1015  1.1  ross static float32 float32NextQOutP1( sequenceT *sequencePtr )
   1016  1.1  ross {
   1017  1.1  ross     uint8 expNum, sigNum;
   1018  1.1  ross     float32 z;
   1019  1.1  ross 
   1020  1.1  ross     sigNum = sequencePtr->term1Num;
   1021  1.1  ross     expNum = sequencePtr->expNum;
   1022  1.1  ross     z = float32QOut[ expNum ] | float32P1[ sigNum ];
   1023  1.1  ross     ++sigNum;
   1024  1.1  ross     if ( float32NumP1 <= sigNum ) {
   1025  1.1  ross         sigNum = 0;
   1026  1.1  ross         ++expNum;
   1027  1.1  ross         if ( float32NumQOut <= expNum ) {
   1028  1.1  ross             expNum = 0;
   1029  1.1  ross             sequencePtr->done = TRUE;
   1030  1.1  ross         }
   1031  1.1  ross         sequencePtr->expNum = expNum;
   1032  1.1  ross     }
   1033  1.1  ross     sequencePtr->term1Num = sigNum;
   1034  1.1  ross     return z;
   1035  1.1  ross 
   1036  1.1  ross }
   1037  1.1  ross 
   1038  1.1  ross static const uint32 float32NumQInP2 = float32NumQIn * float32NumP2;
   1039  1.1  ross static const uint32 float32NumQOutP2 = float32NumQOut * float32NumP2;
   1040  1.1  ross 
   1041  1.1  ross static float32 float32NextQInP2( sequenceT *sequencePtr )
   1042  1.1  ross {
   1043  1.1  ross     uint8 expNum, sigNum;
   1044  1.1  ross     float32 z;
   1045  1.1  ross 
   1046  1.1  ross     sigNum = sequencePtr->term1Num;
   1047  1.1  ross     expNum = sequencePtr->expNum;
   1048  1.1  ross     z = float32QIn[ expNum ] | float32P2[ sigNum ];
   1049  1.1  ross     ++sigNum;
   1050  1.1  ross     if ( float32NumP2 <= sigNum ) {
   1051  1.1  ross         sigNum = 0;
   1052  1.1  ross         ++expNum;
   1053  1.1  ross         if ( float32NumQIn <= expNum ) {
   1054  1.1  ross             expNum = 0;
   1055  1.1  ross             sequencePtr->done = TRUE;
   1056  1.1  ross         }
   1057  1.1  ross         sequencePtr->expNum = expNum;
   1058  1.1  ross     }
   1059  1.1  ross     sequencePtr->term1Num = sigNum;
   1060  1.1  ross     return z;
   1061  1.1  ross 
   1062  1.1  ross }
   1063  1.1  ross 
   1064  1.1  ross static float32 float32NextQOutP2( sequenceT *sequencePtr )
   1065  1.1  ross {
   1066  1.1  ross     uint8 expNum, sigNum;
   1067  1.1  ross     float32 z;
   1068  1.1  ross 
   1069  1.1  ross     sigNum = sequencePtr->term1Num;
   1070  1.1  ross     expNum = sequencePtr->expNum;
   1071  1.1  ross     z = float32QOut[ expNum ] | float32P2[ sigNum ];
   1072  1.1  ross     ++sigNum;
   1073  1.1  ross     if ( float32NumP2 <= sigNum ) {
   1074  1.1  ross         sigNum = 0;
   1075  1.1  ross         ++expNum;
   1076  1.1  ross         if ( float32NumQOut <= expNum ) {
   1077  1.1  ross             expNum = 0;
   1078  1.1  ross             sequencePtr->done = TRUE;
   1079  1.1  ross         }
   1080  1.1  ross         sequencePtr->expNum = expNum;
   1081  1.1  ross     }
   1082  1.1  ross     sequencePtr->term1Num = sigNum;
   1083  1.1  ross     return z;
   1084  1.1  ross 
   1085  1.1  ross }
   1086  1.1  ross 
   1087  1.1  ross static float32 float32RandomQOutP3( void )
   1088  1.1  ross {
   1089  1.1  ross 
   1090  1.1  ross     return
   1091  1.1  ross           float32QOut[ randomUint8() % float32NumQOut ]
   1092  1.1  ross         | (   (   float32P2[ randomUint8() % float32NumP2 ]
   1093  1.1  ross                 + float32P2[ randomUint8() % float32NumP2 ] )
   1094  1.1  ross             & 0x007FFFFF );
   1095  1.1  ross 
   1096  1.1  ross }
   1097  1.1  ross 
   1098  1.1  ross static float32 float32RandomQOutPInf( void )
   1099  1.1  ross {
   1100  1.1  ross 
   1101  1.1  ross     return
   1102  1.1  ross           float32QOut[ randomUint8() % float32NumQOut ]
   1103  1.1  ross         | ( randomUint32() & 0x007FFFFF );
   1104  1.1  ross 
   1105  1.1  ross }
   1106  1.1  ross 
   1107  1.1  ross enum {
   1108  1.1  ross     float32NumQInfWeightMasks = 7
   1109  1.1  ross };
   1110  1.1  ross 
   1111  1.1  ross static const uint32 float32QInfWeightMasks[ float32NumQInfWeightMasks ] = {
   1112  1.1  ross     0x7F800000,
   1113  1.1  ross     0x7F800000,
   1114  1.1  ross     0x3F800000,
   1115  1.1  ross     0x1F800000,
   1116  1.1  ross     0x0F800000,
   1117  1.1  ross     0x07800000,
   1118  1.1  ross     0x03800000
   1119  1.1  ross };
   1120  1.1  ross 
   1121  1.1  ross static const uint32 float32QInfWeightOffsets[ float32NumQInfWeightMasks ] = {
   1122  1.1  ross     0x00000000,
   1123  1.1  ross     0x00000000,
   1124  1.1  ross     0x20000000,
   1125  1.1  ross     0x30000000,
   1126  1.1  ross     0x38000000,
   1127  1.1  ross     0x3C000000,
   1128  1.1  ross     0x3E000000
   1129  1.1  ross };
   1130  1.1  ross 
   1131  1.1  ross static float32 float32RandomQInfP3( void )
   1132  1.1  ross {
   1133  1.1  ross     int8 weightMaskNum;
   1134  1.1  ross 
   1135  1.1  ross     weightMaskNum = randomUint8() % float32NumQInfWeightMasks;
   1136  1.1  ross     return
   1137  1.1  ross           ( ( (uint32) ( randomUint8() & 1 ) )<<31 )
   1138  1.1  ross         | (   (   ( ( (uint32) ( randomUint16() & 0x1FF ) )<<23 )
   1139  1.1  ross                 & float32QInfWeightMasks[ weightMaskNum ] )
   1140  1.1  ross             + float32QInfWeightOffsets[ weightMaskNum ]
   1141  1.1  ross           )
   1142  1.1  ross         | (   (   float32P2[ randomUint8() % float32NumP2 ]
   1143  1.1  ross                 + float32P2[ randomUint8() % float32NumP2 ] )
   1144  1.1  ross             & 0x007FFFFF );
   1145  1.1  ross 
   1146  1.1  ross }
   1147  1.1  ross 
   1148  1.1  ross static float32 float32RandomQInfPInf( void )
   1149  1.1  ross {
   1150  1.1  ross     int8 weightMaskNum;
   1151  1.1  ross 
   1152  1.1  ross     weightMaskNum = randomUint8() % float32NumQInfWeightMasks;
   1153  1.1  ross     return
   1154  1.1  ross           ( ( (uint32) ( randomUint8() & 1 ) )<<31 )
   1155  1.1  ross         | (   (   ( ( (uint32) ( randomUint16() & 0x1FF ) )<<23 )
   1156  1.1  ross                 & float32QInfWeightMasks[ weightMaskNum ] )
   1157  1.1  ross             + float32QInfWeightOffsets[ weightMaskNum ]
   1158  1.1  ross           )
   1159  1.1  ross         | ( randomUint32() & 0x007FFFFF );
   1160  1.1  ross 
   1161  1.1  ross }
   1162  1.1  ross 
   1163  1.1  ross static float32 float32Random( void )
   1164  1.1  ross {
   1165  1.1  ross 
   1166  1.1  ross     switch ( randomUint8() & 7 ) {
   1167  1.1  ross      case 0:
   1168  1.1  ross      case 1:
   1169  1.1  ross      case 2:
   1170  1.1  ross         return float32RandomQOutP3();
   1171  1.1  ross      case 3:
   1172  1.1  ross         return float32RandomQOutPInf();
   1173  1.1  ross      case 4:
   1174  1.1  ross      case 5:
   1175  1.1  ross      case 6:
   1176  1.1  ross         return float32RandomQInfP3();
   1177  1.1  ross      case 7:
   1178  1.1  ross         return float32RandomQInfPInf();
   1179  1.1  ross     }
   1180  1.2  ross     abort();
   1181  1.2  ross     return 0;
   1182  1.1  ross }
   1183  1.1  ross 
   1184  1.1  ross #ifdef BITS64
   1185  1.1  ross #define SETFLOAT64( z, zHigh, zLow ) z = ( ( (float64) zHigh )<<32 ) | zLow
   1186  1.1  ross #else
   1187  1.1  ross #define SETFLOAT64( z, zHigh, zLow ) z.low = zLow; z.high = zHigh
   1188  1.1  ross #endif
   1189  1.1  ross 
   1190  1.1  ross enum {
   1191  1.1  ross     float64NumQIn  =  22,
   1192  1.1  ross     float64NumQOut =  64,
   1193  1.1  ross     float64NumP1   =   4,
   1194  1.1  ross     float64NumP2   = 204
   1195  1.1  ross };
   1196  1.1  ross 
   1197  1.1  ross static const uint32 float64QIn[ float64NumQIn ] = {
   1198  1.1  ross     0x00000000,		/* positive, subnormal		*/
   1199  1.1  ross     0x00100000,		/* positive, -1022		*/
   1200  1.1  ross     0x3CA00000,		/* positive,   -53		*/
   1201  1.1  ross     0x3FD00000,		/* positive,    -2		*/
   1202  1.1  ross     0x3FE00000,		/* positive,    -1		*/
   1203  1.1  ross     0x3FF00000,		/* positive,     0		*/
   1204  1.1  ross     0x40000000,		/* positive,     1		*/
   1205  1.1  ross     0x40100000,		/* positive,     2		*/
   1206  1.1  ross     0x43400000,		/* positive,    53		*/
   1207  1.1  ross     0x7FE00000,		/* positive,  1023		*/
   1208  1.1  ross     0x7FF00000,		/* positive, infinity or NaN	*/
   1209  1.1  ross     0x80000000,		/* negative, subnormal		*/
   1210  1.1  ross     0x80100000,		/* negative, -1022		*/
   1211  1.1  ross     0xBCA00000,		/* negative,   -53		*/
   1212  1.1  ross     0xBFD00000,		/* negative,    -2		*/
   1213  1.1  ross     0xBFE00000,		/* negative,    -1		*/
   1214  1.1  ross     0xBFF00000,		/* negative,     0		*/
   1215  1.1  ross     0xC0000000,		/* negative,     1		*/
   1216  1.1  ross     0xC0100000,		/* negative,     2		*/
   1217  1.1  ross     0xC3400000,		/* negative,    53		*/
   1218  1.1  ross     0xFFE00000,		/* negative,  1023		*/
   1219  1.1  ross     0xFFF00000		/* negative, infinity or NaN	*/
   1220  1.1  ross };
   1221  1.1  ross 
   1222  1.1  ross static const uint32 float64QOut[ float64NumQOut ] = {
   1223  1.1  ross     0x00000000,		/* positive, subnormal		*/
   1224  1.1  ross     0x00100000,		/* positive, -1022		*/
   1225  1.1  ross     0x00200000,		/* positive, -1021		*/
   1226  1.1  ross     0x37E00000,		/* positive,  -129		*/
   1227  1.1  ross     0x37F00000,		/* positive,  -128		*/
   1228  1.1  ross     0x38000000,		/* positive,  -127		*/
   1229  1.1  ross     0x38100000,		/* positive,  -126		*/
   1230  1.1  ross     0x3CA00000,		/* positive,   -53		*/
   1231  1.1  ross     0x3FB00000,		/* positive,    -4		*/
   1232  1.1  ross     0x3FC00000,		/* positive,    -3		*/
   1233  1.1  ross     0x3FD00000,		/* positive,    -2		*/
   1234  1.1  ross     0x3FE00000,		/* positive,    -1		*/
   1235  1.1  ross     0x3FF00000,		/* positive,     0		*/
   1236  1.1  ross     0x40000000,		/* positive,     1		*/
   1237  1.1  ross     0x40100000,		/* positive,     2		*/
   1238  1.1  ross     0x40200000,		/* positive,     3		*/
   1239  1.1  ross     0x40300000,		/* positive,     4		*/
   1240  1.1  ross     0x41C00000,		/* positive,    29		*/
   1241  1.1  ross     0x41D00000,		/* positive,    30		*/
   1242  1.1  ross     0x41E00000,		/* positive,    31		*/
   1243  1.1  ross     0x41F00000,		/* positive,    32		*/
   1244  1.1  ross     0x43400000,		/* positive,    53		*/
   1245  1.1  ross     0x43C00000,		/* positive,    61		*/
   1246  1.1  ross     0x43D00000,		/* positive,    62		*/
   1247  1.1  ross     0x43E00000,		/* positive,    63		*/
   1248  1.1  ross     0x43F00000,		/* positive,    64		*/
   1249  1.1  ross     0x47E00000,		/* positive,   127		*/
   1250  1.1  ross     0x47F00000,		/* positive,   128		*/
   1251  1.1  ross     0x48000000,		/* positive,   129		*/
   1252  1.1  ross     0x7FD00000,		/* positive,  1022		*/
   1253  1.1  ross     0x7FE00000,		/* positive,  1023		*/
   1254  1.1  ross     0x7FF00000,		/* positive, infinity or NaN	*/
   1255  1.1  ross     0x80000000,		/* negative, subnormal		*/
   1256  1.1  ross     0x80100000,		/* negative, -1022		*/
   1257  1.1  ross     0x80200000,		/* negative, -1021		*/
   1258  1.1  ross     0xB7E00000,		/* negative,  -129		*/
   1259  1.1  ross     0xB7F00000,		/* negative,  -128		*/
   1260  1.1  ross     0xB8000000,		/* negative,  -127		*/
   1261  1.1  ross     0xB8100000,		/* negative,  -126		*/
   1262  1.1  ross     0xBCA00000,		/* negative,   -53		*/
   1263  1.1  ross     0xBFB00000,		/* negative,    -4		*/
   1264  1.1  ross     0xBFC00000,		/* negative,    -3		*/
   1265  1.1  ross     0xBFD00000,		/* negative,    -2		*/
   1266  1.1  ross     0xBFE00000,		/* negative,    -1		*/
   1267  1.1  ross     0xBFF00000,		/* negative,     0		*/
   1268  1.1  ross     0xC0000000,		/* negative,     1		*/
   1269  1.1  ross     0xC0100000,		/* negative,     2		*/
   1270  1.1  ross     0xC0200000,		/* negative,     3		*/
   1271  1.1  ross     0xC0300000,		/* negative,     4		*/
   1272  1.1  ross     0xC1C00000,		/* negative,    29		*/
   1273  1.1  ross     0xC1D00000,		/* negative,    30		*/
   1274  1.1  ross     0xC1E00000,		/* negative,    31		*/
   1275  1.1  ross     0xC1F00000,		/* negative,    32		*/
   1276  1.1  ross     0xC3400000,		/* negative,    53		*/
   1277  1.1  ross     0xC3C00000,		/* negative,    61		*/
   1278  1.1  ross     0xC3D00000,		/* negative,    62		*/
   1279  1.1  ross     0xC3E00000,		/* negative,    63		*/
   1280  1.1  ross     0xC3F00000,		/* negative,    64		*/
   1281  1.1  ross     0xC7E00000,		/* negative,   127		*/
   1282  1.1  ross     0xC7F00000,		/* negative,   128		*/
   1283  1.1  ross     0xC8000000,		/* negative,   129		*/
   1284  1.1  ross     0xFFD00000,		/* negative,  1022		*/
   1285  1.1  ross     0xFFE00000,		/* negative,  1023		*/
   1286  1.1  ross     0xFFF00000		/* negative, infinity or NaN	*/
   1287  1.1  ross };
   1288  1.1  ross 
   1289  1.1  ross static const struct { bits32 high, low; } float64P1[ float64NumP1 ] = {
   1290  1.1  ross     { 0x00000000, 0x00000000 },
   1291  1.1  ross     { 0x00000000, 0x00000001 },
   1292  1.1  ross     { 0x000FFFFF, 0xFFFFFFFF },
   1293  1.1  ross     { 0x000FFFFF, 0xFFFFFFFE }
   1294  1.1  ross };
   1295  1.1  ross 
   1296  1.1  ross static const struct { bits32 high, low; } float64P2[ float64NumP2 ] = {
   1297  1.1  ross     { 0x00000000, 0x00000000 },
   1298  1.1  ross     { 0x00000000, 0x00000001 },
   1299  1.1  ross     { 0x00000000, 0x00000002 },
   1300  1.1  ross     { 0x00000000, 0x00000004 },
   1301  1.1  ross     { 0x00000000, 0x00000008 },
   1302  1.1  ross     { 0x00000000, 0x00000010 },
   1303  1.1  ross     { 0x00000000, 0x00000020 },
   1304  1.1  ross     { 0x00000000, 0x00000040 },
   1305  1.1  ross     { 0x00000000, 0x00000080 },
   1306  1.1  ross     { 0x00000000, 0x00000100 },
   1307  1.1  ross     { 0x00000000, 0x00000200 },
   1308  1.1  ross     { 0x00000000, 0x00000400 },
   1309  1.1  ross     { 0x00000000, 0x00000800 },
   1310  1.1  ross     { 0x00000000, 0x00001000 },
   1311  1.1  ross     { 0x00000000, 0x00002000 },
   1312  1.1  ross     { 0x00000000, 0x00004000 },
   1313  1.1  ross     { 0x00000000, 0x00008000 },
   1314  1.1  ross     { 0x00000000, 0x00010000 },
   1315  1.1  ross     { 0x00000000, 0x00020000 },
   1316  1.1  ross     { 0x00000000, 0x00040000 },
   1317  1.1  ross     { 0x00000000, 0x00080000 },
   1318  1.1  ross     { 0x00000000, 0x00100000 },
   1319  1.1  ross     { 0x00000000, 0x00200000 },
   1320  1.1  ross     { 0x00000000, 0x00400000 },
   1321  1.1  ross     { 0x00000000, 0x00800000 },
   1322  1.1  ross     { 0x00000000, 0x01000000 },
   1323  1.1  ross     { 0x00000000, 0x02000000 },
   1324  1.1  ross     { 0x00000000, 0x04000000 },
   1325  1.1  ross     { 0x00000000, 0x08000000 },
   1326  1.1  ross     { 0x00000000, 0x10000000 },
   1327  1.1  ross     { 0x00000000, 0x20000000 },
   1328  1.1  ross     { 0x00000000, 0x40000000 },
   1329  1.1  ross     { 0x00000000, 0x80000000 },
   1330  1.1  ross     { 0x00000001, 0x00000000 },
   1331  1.1  ross     { 0x00000002, 0x00000000 },
   1332  1.1  ross     { 0x00000004, 0x00000000 },
   1333  1.1  ross     { 0x00000008, 0x00000000 },
   1334  1.1  ross     { 0x00000010, 0x00000000 },
   1335  1.1  ross     { 0x00000020, 0x00000000 },
   1336  1.1  ross     { 0x00000040, 0x00000000 },
   1337  1.1  ross     { 0x00000080, 0x00000000 },
   1338  1.1  ross     { 0x00000100, 0x00000000 },
   1339  1.1  ross     { 0x00000200, 0x00000000 },
   1340  1.1  ross     { 0x00000400, 0x00000000 },
   1341  1.1  ross     { 0x00000800, 0x00000000 },
   1342  1.1  ross     { 0x00001000, 0x00000000 },
   1343  1.1  ross     { 0x00002000, 0x00000000 },
   1344  1.1  ross     { 0x00004000, 0x00000000 },
   1345  1.1  ross     { 0x00008000, 0x00000000 },
   1346  1.1  ross     { 0x00010000, 0x00000000 },
   1347  1.1  ross     { 0x00020000, 0x00000000 },
   1348  1.1  ross     { 0x00040000, 0x00000000 },
   1349  1.1  ross     { 0x00080000, 0x00000000 },
   1350  1.1  ross     { 0x000C0000, 0x00000000 },
   1351  1.1  ross     { 0x000E0000, 0x00000000 },
   1352  1.1  ross     { 0x000F0000, 0x00000000 },
   1353  1.1  ross     { 0x000F8000, 0x00000000 },
   1354  1.1  ross     { 0x000FC000, 0x00000000 },
   1355  1.1  ross     { 0x000FE000, 0x00000000 },
   1356  1.1  ross     { 0x000FF000, 0x00000000 },
   1357  1.1  ross     { 0x000FF800, 0x00000000 },
   1358  1.1  ross     { 0x000FFC00, 0x00000000 },
   1359  1.1  ross     { 0x000FFE00, 0x00000000 },
   1360  1.1  ross     { 0x000FFF00, 0x00000000 },
   1361  1.1  ross     { 0x000FFF80, 0x00000000 },
   1362  1.1  ross     { 0x000FFFC0, 0x00000000 },
   1363  1.1  ross     { 0x000FFFE0, 0x00000000 },
   1364  1.1  ross     { 0x000FFFF0, 0x00000000 },
   1365  1.1  ross     { 0x000FFFF8, 0x00000000 },
   1366  1.1  ross     { 0x000FFFFC, 0x00000000 },
   1367  1.1  ross     { 0x000FFFFE, 0x00000000 },
   1368  1.1  ross     { 0x000FFFFF, 0x00000000 },
   1369  1.1  ross     { 0x000FFFFF, 0x80000000 },
   1370  1.1  ross     { 0x000FFFFF, 0xC0000000 },
   1371  1.1  ross     { 0x000FFFFF, 0xE0000000 },
   1372  1.1  ross     { 0x000FFFFF, 0xF0000000 },
   1373  1.1  ross     { 0x000FFFFF, 0xF8000000 },
   1374  1.1  ross     { 0x000FFFFF, 0xFC000000 },
   1375  1.1  ross     { 0x000FFFFF, 0xFE000000 },
   1376  1.1  ross     { 0x000FFFFF, 0xFF000000 },
   1377  1.1  ross     { 0x000FFFFF, 0xFF800000 },
   1378  1.1  ross     { 0x000FFFFF, 0xFFC00000 },
   1379  1.1  ross     { 0x000FFFFF, 0xFFE00000 },
   1380  1.1  ross     { 0x000FFFFF, 0xFFF00000 },
   1381  1.1  ross     { 0x000FFFFF, 0xFFF80000 },
   1382  1.1  ross     { 0x000FFFFF, 0xFFFC0000 },
   1383  1.1  ross     { 0x000FFFFF, 0xFFFE0000 },
   1384  1.1  ross     { 0x000FFFFF, 0xFFFF0000 },
   1385  1.1  ross     { 0x000FFFFF, 0xFFFF8000 },
   1386  1.1  ross     { 0x000FFFFF, 0xFFFFC000 },
   1387  1.1  ross     { 0x000FFFFF, 0xFFFFE000 },
   1388  1.1  ross     { 0x000FFFFF, 0xFFFFF000 },
   1389  1.1  ross     { 0x000FFFFF, 0xFFFFF800 },
   1390  1.1  ross     { 0x000FFFFF, 0xFFFFFC00 },
   1391  1.1  ross     { 0x000FFFFF, 0xFFFFFE00 },
   1392  1.1  ross     { 0x000FFFFF, 0xFFFFFF00 },
   1393  1.1  ross     { 0x000FFFFF, 0xFFFFFF80 },
   1394  1.1  ross     { 0x000FFFFF, 0xFFFFFFC0 },
   1395  1.1  ross     { 0x000FFFFF, 0xFFFFFFE0 },
   1396  1.1  ross     { 0x000FFFFF, 0xFFFFFFF0 },
   1397  1.1  ross     { 0x000FFFFF, 0xFFFFFFF8 },
   1398  1.1  ross     { 0x000FFFFF, 0xFFFFFFFC },
   1399  1.1  ross     { 0x000FFFFF, 0xFFFFFFFE },
   1400  1.1  ross     { 0x000FFFFF, 0xFFFFFFFF },
   1401  1.1  ross     { 0x000FFFFF, 0xFFFFFFFD },
   1402  1.1  ross     { 0x000FFFFF, 0xFFFFFFFB },
   1403  1.1  ross     { 0x000FFFFF, 0xFFFFFFF7 },
   1404  1.1  ross     { 0x000FFFFF, 0xFFFFFFEF },
   1405  1.1  ross     { 0x000FFFFF, 0xFFFFFFDF },
   1406  1.1  ross     { 0x000FFFFF, 0xFFFFFFBF },
   1407  1.1  ross     { 0x000FFFFF, 0xFFFFFF7F },
   1408  1.1  ross     { 0x000FFFFF, 0xFFFFFEFF },
   1409  1.1  ross     { 0x000FFFFF, 0xFFFFFDFF },
   1410  1.1  ross     { 0x000FFFFF, 0xFFFFFBFF },
   1411  1.1  ross     { 0x000FFFFF, 0xFFFFF7FF },
   1412  1.1  ross     { 0x000FFFFF, 0xFFFFEFFF },
   1413  1.1  ross     { 0x000FFFFF, 0xFFFFDFFF },
   1414  1.1  ross     { 0x000FFFFF, 0xFFFFBFFF },
   1415  1.1  ross     { 0x000FFFFF, 0xFFFF7FFF },
   1416  1.1  ross     { 0x000FFFFF, 0xFFFEFFFF },
   1417  1.1  ross     { 0x000FFFFF, 0xFFFDFFFF },
   1418  1.1  ross     { 0x000FFFFF, 0xFFFBFFFF },
   1419  1.1  ross     { 0x000FFFFF, 0xFFF7FFFF },
   1420  1.1  ross     { 0x000FFFFF, 0xFFEFFFFF },
   1421  1.1  ross     { 0x000FFFFF, 0xFFDFFFFF },
   1422  1.1  ross     { 0x000FFFFF, 0xFFBFFFFF },
   1423  1.1  ross     { 0x000FFFFF, 0xFF7FFFFF },
   1424  1.1  ross     { 0x000FFFFF, 0xFEFFFFFF },
   1425  1.1  ross     { 0x000FFFFF, 0xFDFFFFFF },
   1426  1.1  ross     { 0x000FFFFF, 0xFBFFFFFF },
   1427  1.1  ross     { 0x000FFFFF, 0xF7FFFFFF },
   1428  1.1  ross     { 0x000FFFFF, 0xEFFFFFFF },
   1429  1.1  ross     { 0x000FFFFF, 0xDFFFFFFF },
   1430  1.1  ross     { 0x000FFFFF, 0xBFFFFFFF },
   1431  1.1  ross     { 0x000FFFFF, 0x7FFFFFFF },
   1432  1.1  ross     { 0x000FFFFE, 0xFFFFFFFF },
   1433  1.1  ross     { 0x000FFFFD, 0xFFFFFFFF },
   1434  1.1  ross     { 0x000FFFFB, 0xFFFFFFFF },
   1435  1.1  ross     { 0x000FFFF7, 0xFFFFFFFF },
   1436  1.1  ross     { 0x000FFFEF, 0xFFFFFFFF },
   1437  1.1  ross     { 0x000FFFDF, 0xFFFFFFFF },
   1438  1.1  ross     { 0x000FFFBF, 0xFFFFFFFF },
   1439  1.1  ross     { 0x000FFF7F, 0xFFFFFFFF },
   1440  1.1  ross     { 0x000FFEFF, 0xFFFFFFFF },
   1441  1.1  ross     { 0x000FFDFF, 0xFFFFFFFF },
   1442  1.1  ross     { 0x000FFBFF, 0xFFFFFFFF },
   1443  1.1  ross     { 0x000FF7FF, 0xFFFFFFFF },
   1444  1.1  ross     { 0x000FEFFF, 0xFFFFFFFF },
   1445  1.1  ross     { 0x000FDFFF, 0xFFFFFFFF },
   1446  1.1  ross     { 0x000FBFFF, 0xFFFFFFFF },
   1447  1.1  ross     { 0x000F7FFF, 0xFFFFFFFF },
   1448  1.1  ross     { 0x000EFFFF, 0xFFFFFFFF },
   1449  1.1  ross     { 0x000DFFFF, 0xFFFFFFFF },
   1450  1.1  ross     { 0x000BFFFF, 0xFFFFFFFF },
   1451  1.1  ross     { 0x0007FFFF, 0xFFFFFFFF },
   1452  1.1  ross     { 0x0003FFFF, 0xFFFFFFFF },
   1453  1.1  ross     { 0x0001FFFF, 0xFFFFFFFF },
   1454  1.1  ross     { 0x0000FFFF, 0xFFFFFFFF },
   1455  1.1  ross     { 0x00007FFF, 0xFFFFFFFF },
   1456  1.1  ross     { 0x00003FFF, 0xFFFFFFFF },
   1457  1.1  ross     { 0x00001FFF, 0xFFFFFFFF },
   1458  1.1  ross     { 0x00000FFF, 0xFFFFFFFF },
   1459  1.1  ross     { 0x000007FF, 0xFFFFFFFF },
   1460  1.1  ross     { 0x000003FF, 0xFFFFFFFF },
   1461  1.1  ross     { 0x000001FF, 0xFFFFFFFF },
   1462  1.1  ross     { 0x000000FF, 0xFFFFFFFF },
   1463  1.1  ross     { 0x0000007F, 0xFFFFFFFF },
   1464  1.1  ross     { 0x0000003F, 0xFFFFFFFF },
   1465  1.1  ross     { 0x0000001F, 0xFFFFFFFF },
   1466  1.1  ross     { 0x0000000F, 0xFFFFFFFF },
   1467  1.1  ross     { 0x00000007, 0xFFFFFFFF },
   1468  1.1  ross     { 0x00000003, 0xFFFFFFFF },
   1469  1.1  ross     { 0x00000001, 0xFFFFFFFF },
   1470  1.1  ross     { 0x00000000, 0xFFFFFFFF },
   1471  1.1  ross     { 0x00000000, 0x7FFFFFFF },
   1472  1.1  ross     { 0x00000000, 0x3FFFFFFF },
   1473  1.1  ross     { 0x00000000, 0x1FFFFFFF },
   1474  1.1  ross     { 0x00000000, 0x0FFFFFFF },
   1475  1.1  ross     { 0x00000000, 0x07FFFFFF },
   1476  1.1  ross     { 0x00000000, 0x03FFFFFF },
   1477  1.1  ross     { 0x00000000, 0x01FFFFFF },
   1478  1.1  ross     { 0x00000000, 0x00FFFFFF },
   1479  1.1  ross     { 0x00000000, 0x007FFFFF },
   1480  1.1  ross     { 0x00000000, 0x003FFFFF },
   1481  1.1  ross     { 0x00000000, 0x001FFFFF },
   1482  1.1  ross     { 0x00000000, 0x000FFFFF },
   1483  1.1  ross     { 0x00000000, 0x0007FFFF },
   1484  1.1  ross     { 0x00000000, 0x0003FFFF },
   1485  1.1  ross     { 0x00000000, 0x0001FFFF },
   1486  1.1  ross     { 0x00000000, 0x0000FFFF },
   1487  1.1  ross     { 0x00000000, 0x00007FFF },
   1488  1.1  ross     { 0x00000000, 0x00003FFF },
   1489  1.1  ross     { 0x00000000, 0x00001FFF },
   1490  1.1  ross     { 0x00000000, 0x00000FFF },
   1491  1.1  ross     { 0x00000000, 0x000007FF },
   1492  1.1  ross     { 0x00000000, 0x000003FF },
   1493  1.1  ross     { 0x00000000, 0x000001FF },
   1494  1.1  ross     { 0x00000000, 0x000000FF },
   1495  1.1  ross     { 0x00000000, 0x0000007F },
   1496  1.1  ross     { 0x00000000, 0x0000003F },
   1497  1.1  ross     { 0x00000000, 0x0000001F },
   1498  1.1  ross     { 0x00000000, 0x0000000F },
   1499  1.1  ross     { 0x00000000, 0x00000007 },
   1500  1.1  ross     { 0x00000000, 0x00000003 }
   1501  1.1  ross };
   1502  1.1  ross 
   1503  1.1  ross static const uint32 float64NumQInP1 = float64NumQIn * float64NumP1;
   1504  1.1  ross static const uint32 float64NumQOutP1 = float64NumQOut * float64NumP1;
   1505  1.1  ross 
   1506  1.1  ross static float64 float64NextQInP1( sequenceT *sequencePtr )
   1507  1.1  ross {
   1508  1.1  ross     uint8 expNum, sigNum;
   1509  1.1  ross     float64 z;
   1510  1.1  ross 
   1511  1.1  ross     sigNum = sequencePtr->term1Num;
   1512  1.1  ross     expNum = sequencePtr->expNum;
   1513  1.1  ross     SETFLOAT64(
   1514  1.1  ross         z,
   1515  1.1  ross         float64QIn[ expNum ] | float64P1[ sigNum ].high,
   1516  1.1  ross         float64P1[ sigNum ].low
   1517  1.1  ross     );
   1518  1.1  ross     ++sigNum;
   1519  1.1  ross     if ( float64NumP1 <= sigNum ) {
   1520  1.1  ross         sigNum = 0;
   1521  1.1  ross         ++expNum;
   1522  1.1  ross         if ( float64NumQIn <= expNum ) {
   1523  1.1  ross             expNum = 0;
   1524  1.1  ross             sequencePtr->done = TRUE;
   1525  1.1  ross         }
   1526  1.1  ross         sequencePtr->expNum = expNum;
   1527  1.1  ross     }
   1528  1.1  ross     sequencePtr->term1Num = sigNum;
   1529  1.1  ross     return z;
   1530  1.1  ross 
   1531  1.1  ross }
   1532  1.1  ross 
   1533  1.1  ross static float64 float64NextQOutP1( sequenceT *sequencePtr )
   1534  1.1  ross {
   1535  1.1  ross     uint8 expNum, sigNum;
   1536  1.1  ross     float64 z;
   1537  1.1  ross 
   1538  1.1  ross     sigNum = sequencePtr->term1Num;
   1539  1.1  ross     expNum = sequencePtr->expNum;
   1540  1.1  ross     SETFLOAT64(
   1541  1.1  ross         z,
   1542  1.1  ross         float64QOut[ expNum ] | float64P1[ sigNum ].high,
   1543  1.1  ross         float64P1[ sigNum ].low
   1544  1.1  ross     );
   1545  1.1  ross     ++sigNum;
   1546  1.1  ross     if ( float64NumP1 <= sigNum ) {
   1547  1.1  ross         sigNum = 0;
   1548  1.1  ross         ++expNum;
   1549  1.1  ross         if ( float64NumQOut <= expNum ) {
   1550  1.1  ross             expNum = 0;
   1551  1.1  ross             sequencePtr->done = TRUE;
   1552  1.1  ross         }
   1553  1.1  ross         sequencePtr->expNum = expNum;
   1554  1.1  ross     }
   1555  1.1  ross     sequencePtr->term1Num = sigNum;
   1556  1.1  ross     return z;
   1557  1.1  ross 
   1558  1.1  ross }
   1559  1.1  ross 
   1560  1.1  ross static const uint32 float64NumQInP2 = float64NumQIn * float64NumP2;
   1561  1.1  ross static const uint32 float64NumQOutP2 = float64NumQOut * float64NumP2;
   1562  1.1  ross 
   1563  1.1  ross static float64 float64NextQInP2( sequenceT *sequencePtr )
   1564  1.1  ross {
   1565  1.1  ross     uint8 expNum, sigNum;
   1566  1.1  ross     float64 z;
   1567  1.1  ross 
   1568  1.1  ross     sigNum = sequencePtr->term1Num;
   1569  1.1  ross     expNum = sequencePtr->expNum;
   1570  1.1  ross     SETFLOAT64(
   1571  1.1  ross         z,
   1572  1.1  ross         float64QIn[ expNum ] | float64P2[ sigNum ].high,
   1573  1.1  ross         float64P2[ sigNum ].low
   1574  1.1  ross     );
   1575  1.1  ross     ++sigNum;
   1576  1.1  ross     if ( float64NumP2 <= sigNum ) {
   1577  1.1  ross         sigNum = 0;
   1578  1.1  ross         ++expNum;
   1579  1.1  ross         if ( float64NumQIn <= expNum ) {
   1580  1.1  ross             expNum = 0;
   1581  1.1  ross             sequencePtr->done = TRUE;
   1582  1.1  ross         }
   1583  1.1  ross         sequencePtr->expNum = expNum;
   1584  1.1  ross     }
   1585  1.1  ross     sequencePtr->term1Num = sigNum;
   1586  1.1  ross     return z;
   1587  1.1  ross 
   1588  1.1  ross }
   1589  1.1  ross 
   1590  1.1  ross static float64 float64NextQOutP2( sequenceT *sequencePtr )
   1591  1.1  ross {
   1592  1.1  ross     uint8 expNum, sigNum;
   1593  1.1  ross     float64 z;
   1594  1.1  ross 
   1595  1.1  ross     sigNum = sequencePtr->term1Num;
   1596  1.1  ross     expNum = sequencePtr->expNum;
   1597  1.1  ross     SETFLOAT64(
   1598  1.1  ross         z,
   1599  1.1  ross         float64QOut[ expNum ] | float64P2[ sigNum ].high,
   1600  1.1  ross         float64P2[ sigNum ].low
   1601  1.1  ross     );
   1602  1.1  ross     ++sigNum;
   1603  1.1  ross     if ( float64NumP2 <= sigNum ) {
   1604  1.1  ross         sigNum = 0;
   1605  1.1  ross         ++expNum;
   1606  1.1  ross         if ( float64NumQOut <= expNum ) {
   1607  1.1  ross             expNum = 0;
   1608  1.1  ross             sequencePtr->done = TRUE;
   1609  1.1  ross         }
   1610  1.1  ross         sequencePtr->expNum = expNum;
   1611  1.1  ross     }
   1612  1.1  ross     sequencePtr->term1Num = sigNum;
   1613  1.1  ross     return z;
   1614  1.1  ross 
   1615  1.1  ross }
   1616  1.1  ross 
   1617  1.1  ross static float64 float64RandomQOutP3( void )
   1618  1.1  ross {
   1619  1.1  ross     int8 sigNum1, sigNum2;
   1620  1.1  ross     uint32 sig1Low, sig2Low, zLow;
   1621  1.1  ross     float64 z;
   1622  1.1  ross 
   1623  1.1  ross     sigNum1 = randomUint8() % float64NumP2;
   1624  1.1  ross     sigNum2 = randomUint8() % float64NumP2;
   1625  1.1  ross     sig1Low = float64P2[ sigNum1 ].low;
   1626  1.1  ross     sig2Low = float64P2[ sigNum2 ].low;
   1627  1.1  ross     zLow = sig1Low + sig2Low;
   1628  1.1  ross     SETFLOAT64(
   1629  1.1  ross         z,
   1630  1.1  ross           float64QOut[ randomUint8() % float64NumQOut ]
   1631  1.1  ross         | (   (   float64P2[ sigNum1 ].high
   1632  1.1  ross                 + float64P2[ sigNum2 ].high
   1633  1.1  ross                 + ( zLow < sig1Low )
   1634  1.1  ross               )
   1635  1.1  ross             & 0x000FFFFF
   1636  1.1  ross           ),
   1637  1.1  ross         zLow
   1638  1.1  ross     );
   1639  1.1  ross     return z;
   1640  1.1  ross 
   1641  1.1  ross }
   1642  1.1  ross 
   1643  1.1  ross static float64 float64RandomQOutPInf( void )
   1644  1.1  ross {
   1645  1.1  ross     float64 z;
   1646  1.1  ross 
   1647  1.1  ross     SETFLOAT64(
   1648  1.1  ross         z,
   1649  1.1  ross           float64QOut[ randomUint8() % float64NumQOut ]
   1650  1.1  ross         | ( randomUint32() & 0x000FFFFF ),
   1651  1.1  ross         randomUint32()
   1652  1.1  ross     );
   1653  1.1  ross     return z;
   1654  1.1  ross 
   1655  1.1  ross }
   1656  1.1  ross 
   1657  1.1  ross enum {
   1658  1.1  ross     float64NumQInfWeightMasks = 10
   1659  1.1  ross };
   1660  1.1  ross 
   1661  1.1  ross static const uint32 float64QInfWeightMasks[ float64NumQInfWeightMasks ] = {
   1662  1.1  ross     0x7FF00000,
   1663  1.1  ross     0x7FF00000,
   1664  1.1  ross     0x3FF00000,
   1665  1.1  ross     0x1FF00000,
   1666  1.1  ross     0x0FF00000,
   1667  1.1  ross     0x07F00000,
   1668  1.1  ross     0x03F00000,
   1669  1.1  ross     0x01F00000,
   1670  1.1  ross     0x00F00000,
   1671  1.1  ross     0x00700000
   1672  1.1  ross };
   1673  1.1  ross 
   1674  1.1  ross static const uint32 float64QInfWeightOffsets[ float64NumQInfWeightMasks ] = {
   1675  1.1  ross     0x00000000,
   1676  1.1  ross     0x00000000,
   1677  1.1  ross     0x20000000,
   1678  1.1  ross     0x30000000,
   1679  1.1  ross     0x38000000,
   1680  1.1  ross     0x3C000000,
   1681  1.1  ross     0x3E000000,
   1682  1.1  ross     0x3F000000,
   1683  1.1  ross     0x3F800000,
   1684  1.1  ross     0x3FC00000
   1685  1.1  ross };
   1686  1.1  ross 
   1687  1.1  ross static float64 float64RandomQInfP3( void )
   1688  1.1  ross {
   1689  1.1  ross     int8 sigNum1, sigNum2;
   1690  1.1  ross     uint32 sig1Low, sig2Low, zLow;
   1691  1.1  ross     int8 weightMaskNum;
   1692  1.1  ross     float64 z;
   1693  1.1  ross 
   1694  1.1  ross     sigNum1 = randomUint8() % float64NumP2;
   1695  1.1  ross     sigNum2 = randomUint8() % float64NumP2;
   1696  1.1  ross     sig1Low = float64P2[ sigNum1 ].low;
   1697  1.1  ross     sig2Low = float64P2[ sigNum2 ].low;
   1698  1.1  ross     zLow = sig1Low + sig2Low;
   1699  1.1  ross     weightMaskNum = randomUint8() % float64NumQInfWeightMasks;
   1700  1.1  ross     SETFLOAT64(
   1701  1.1  ross         z,
   1702  1.1  ross           ( ( (uint32) ( randomUint8() & 1 ) )<<31 )
   1703  1.1  ross         | (   (   ( ( (uint32) ( randomUint16() & 0xFFF ) )<<20 )
   1704  1.1  ross                 & float64QInfWeightMasks[ weightMaskNum ] )
   1705  1.1  ross             + float64QInfWeightOffsets[ weightMaskNum ]
   1706  1.1  ross           )
   1707  1.1  ross         | (   (   float64P2[ sigNum1 ].high
   1708  1.1  ross                 + float64P2[ sigNum2 ].high
   1709  1.1  ross                 + ( zLow < sig1Low )
   1710  1.1  ross               )
   1711  1.1  ross             & 0x000FFFFF
   1712  1.1  ross           ),
   1713  1.1  ross         zLow
   1714  1.1  ross     );
   1715  1.1  ross     return z;
   1716  1.1  ross 
   1717  1.1  ross }
   1718  1.1  ross 
   1719  1.1  ross static float64 float64RandomQInfPInf( void )
   1720  1.1  ross {
   1721  1.1  ross     int8 weightMaskNum;
   1722  1.1  ross     float64 z;
   1723  1.1  ross 
   1724  1.1  ross     weightMaskNum = randomUint8() % float64NumQInfWeightMasks;
   1725  1.1  ross     SETFLOAT64(
   1726  1.1  ross         z,
   1727  1.1  ross           ( ( (uint32) ( randomUint8() & 1 ) )<<31 )
   1728  1.1  ross         | (   (   ( ( (uint32) ( randomUint16() & 0xFFF ) )<<20 )
   1729  1.1  ross                 & float64QInfWeightMasks[ weightMaskNum ] )
   1730  1.1  ross             + float64QInfWeightOffsets[ weightMaskNum ]
   1731  1.1  ross           )
   1732  1.1  ross         | ( randomUint32() & 0x000FFFFF ),
   1733  1.1  ross         randomUint32()
   1734  1.1  ross     );
   1735  1.1  ross     return z;
   1736  1.1  ross 
   1737  1.1  ross }
   1738  1.1  ross 
   1739  1.1  ross static float64 float64Random( void )
   1740  1.1  ross {
   1741  1.1  ross 
   1742  1.1  ross     switch ( randomUint8() & 7 ) {
   1743  1.1  ross      case 0:
   1744  1.1  ross      case 1:
   1745  1.1  ross      case 2:
   1746  1.1  ross         return float64RandomQOutP3();
   1747  1.1  ross      case 3:
   1748  1.1  ross         return float64RandomQOutPInf();
   1749  1.1  ross      case 4:
   1750  1.1  ross      case 5:
   1751  1.1  ross      case 6:
   1752  1.1  ross         return float64RandomQInfP3();
   1753  1.1  ross      case 7:
   1754  1.1  ross         return float64RandomQInfPInf();
   1755  1.1  ross     }
   1756  1.2  ross     abort();
   1757  1.2  ross     return 0;
   1758  1.1  ross }
   1759  1.1  ross 
   1760  1.1  ross #ifdef FLOATX80
   1761  1.1  ross 
   1762  1.1  ross enum {
   1763  1.1  ross     floatx80NumQIn  =  22,
   1764  1.1  ross     floatx80NumQOut =  76,
   1765  1.1  ross     floatx80NumP1   =   4,
   1766  1.1  ross     floatx80NumP2   = 248
   1767  1.1  ross };
   1768  1.1  ross 
   1769  1.1  ross static const uint16 floatx80QIn[ floatx80NumQIn ] = {
   1770  1.1  ross     0x0000,		/* positive, subnormal		*/
   1771  1.1  ross     0x0001,		/* positive, -16382		*/
   1772  1.1  ross     0x3FBF,		/* positive,    -64		*/
   1773  1.1  ross     0x3FFD,		/* positive,     -2		*/
   1774  1.1  ross     0x3FFE,		/* positive,     -1		*/
   1775  1.1  ross     0x3FFF,		/* positive,      0		*/
   1776  1.1  ross     0x4000,		/* positive,      1		*/
   1777  1.1  ross     0x4001,		/* positive,      2		*/
   1778  1.1  ross     0x403F,		/* positive,     64		*/
   1779  1.1  ross     0x7FFE,		/* positive,  16383		*/
   1780  1.1  ross     0x7FFF,		/* positive, infinity or NaN	*/
   1781  1.1  ross     0x8000,		/* negative, subnormal		*/
   1782  1.1  ross     0x8001,		/* negative, -16382		*/
   1783  1.1  ross     0xBFBF,		/* negative,    -64		*/
   1784  1.1  ross     0xBFFD,		/* negative,     -2		*/
   1785  1.1  ross     0xBFFE,		/* negative,     -1		*/
   1786  1.1  ross     0xBFFF,		/* negative,      0		*/
   1787  1.1  ross     0xC000,		/* negative,      1		*/
   1788  1.1  ross     0xC001,		/* negative,      2		*/
   1789  1.1  ross     0xC03F,		/* negative,     64		*/
   1790  1.1  ross     0xFFFE,		/* negative,  16383		*/
   1791  1.1  ross     0xFFFF		/* negative, infinity or NaN	*/
   1792  1.1  ross };
   1793  1.1  ross 
   1794  1.1  ross static const uint16 floatx80QOut[ floatx80NumQOut ] = {
   1795  1.1  ross     0x0000,		/* positive, subnormal		*/
   1796  1.1  ross     0x0001,		/* positive, -16382		*/
   1797  1.1  ross     0x0002,		/* positive, -16381		*/
   1798  1.1  ross     0x3BFE,		/* positive,  -1025		*/
   1799  1.1  ross     0x3BFF,		/* positive,  -1024		*/
   1800  1.1  ross     0x3C00,		/* positive,  -1023		*/
   1801  1.1  ross     0x3C01,		/* positive,  -1022		*/
   1802  1.1  ross     0x3F7E,		/* positive,   -129		*/
   1803  1.1  ross     0x3F7F,		/* positive,   -128		*/
   1804  1.1  ross     0x3F80,		/* positive,   -127		*/
   1805  1.1  ross     0x3F81,		/* positive,   -126		*/
   1806  1.1  ross     0x3FBF,		/* positive,    -64		*/
   1807  1.1  ross     0x3FFB,		/* positive,     -4		*/
   1808  1.1  ross     0x3FFC,		/* positive,     -3		*/
   1809  1.1  ross     0x3FFD,		/* positive,     -2		*/
   1810  1.1  ross     0x3FFE,		/* positive,     -1		*/
   1811  1.1  ross     0x3FFF,		/* positive,      0		*/
   1812  1.1  ross     0x4000,		/* positive,      1		*/
   1813  1.1  ross     0x4001,		/* positive,      2		*/
   1814  1.1  ross     0x4002,		/* positive,      3		*/
   1815  1.1  ross     0x4003,		/* positive,      4		*/
   1816  1.1  ross     0x401C,		/* positive,     29		*/
   1817  1.1  ross     0x401D,		/* positive,     30		*/
   1818  1.1  ross     0x401E,		/* positive,     31		*/
   1819  1.1  ross     0x401F,		/* positive,     32		*/
   1820  1.1  ross     0x403C,		/* positive,     61		*/
   1821  1.1  ross     0x403D,		/* positive,     62		*/
   1822  1.1  ross     0x403E,		/* positive,     63		*/
   1823  1.1  ross     0x403F,		/* positive,     64		*/
   1824  1.1  ross     0x407E,		/* positive,    127		*/
   1825  1.1  ross     0x407F,		/* positive,    128		*/
   1826  1.1  ross     0x4080,		/* positive,    129		*/
   1827  1.1  ross     0x43FE,		/* positive,   1023		*/
   1828  1.1  ross     0x43FF,		/* positive,   1024		*/
   1829  1.1  ross     0x4400,		/* positive,   1025		*/
   1830  1.1  ross     0x7FFD,		/* positive,  16382		*/
   1831  1.1  ross     0x7FFE,		/* positive,  16383		*/
   1832  1.1  ross     0x7FFF,		/* positive, infinity or NaN	*/
   1833  1.1  ross     0x8000,		/* negative, subnormal		*/
   1834  1.1  ross     0x8001,		/* negative, -16382		*/
   1835  1.1  ross     0x8002,		/* negative, -16381		*/
   1836  1.1  ross     0xBBFE,		/* negative,  -1025		*/
   1837  1.1  ross     0xBBFF,		/* negative,  -1024		*/
   1838  1.1  ross     0xBC00,		/* negative,  -1023		*/
   1839  1.1  ross     0xBC01,		/* negative,  -1022		*/
   1840  1.1  ross     0xBF7E,		/* negative,   -129		*/
   1841  1.1  ross     0xBF7F,		/* negative,   -128		*/
   1842  1.1  ross     0xBF80,		/* negative,   -127		*/
   1843  1.1  ross     0xBF81,		/* negative,   -126		*/
   1844  1.1  ross     0xBFBF,		/* negative,    -64		*/
   1845  1.1  ross     0xBFFB,		/* negative,     -4		*/
   1846  1.1  ross     0xBFFC,		/* negative,     -3		*/
   1847  1.1  ross     0xBFFD,		/* negative,     -2		*/
   1848  1.1  ross     0xBFFE,		/* negative,     -1		*/
   1849  1.1  ross     0xBFFF,		/* negative,      0		*/
   1850  1.1  ross     0xC000,		/* negative,      1		*/
   1851  1.1  ross     0xC001,		/* negative,      2		*/
   1852  1.1  ross     0xC002,		/* negative,      3		*/
   1853  1.1  ross     0xC003,		/* negative,      4		*/
   1854  1.1  ross     0xC01C,		/* negative,     29		*/
   1855  1.1  ross     0xC01D,		/* negative,     30		*/
   1856  1.1  ross     0xC01E,		/* negative,     31		*/
   1857  1.1  ross     0xC01F,		/* negative,     32		*/
   1858  1.1  ross     0xC03C,		/* negative,     61		*/
   1859  1.1  ross     0xC03D,		/* negative,     62		*/
   1860  1.1  ross     0xC03E,		/* negative,     63		*/
   1861  1.1  ross     0xC03F,		/* negative,     64		*/
   1862  1.1  ross     0xC07E,		/* negative,    127		*/
   1863  1.1  ross     0xC07F,		/* negative,    128		*/
   1864  1.1  ross     0xC080,		/* negative,    129		*/
   1865  1.1  ross     0xC3FE,		/* negative,   1023		*/
   1866  1.1  ross     0xC3FF,		/* negative,   1024		*/
   1867  1.1  ross     0xC400,		/* negative,   1025		*/
   1868  1.1  ross     0xFFFD,		/* negative,  16382		*/
   1869  1.1  ross     0xFFFE,		/* negative,  16383		*/
   1870  1.1  ross     0xFFFF		/* negative, infinity or NaN	*/
   1871  1.1  ross };
   1872  1.1  ross 
   1873  1.1  ross static const bits64 floatx80P1[ floatx80NumP1 ] = {
   1874  1.1  ross     LIT64( 0x0000000000000000 ),
   1875  1.1  ross     LIT64( 0x0000000000000001 ),
   1876  1.1  ross     LIT64( 0x7FFFFFFFFFFFFFFF ),
   1877  1.1  ross     LIT64( 0x7FFFFFFFFFFFFFFE )
   1878  1.1  ross };
   1879  1.1  ross 
   1880  1.1  ross static const bits64 floatx80P2[ floatx80NumP2 ] = {
   1881  1.1  ross     LIT64( 0x0000000000000000 ),
   1882  1.1  ross     LIT64( 0x0000000000000001 ),
   1883  1.1  ross     LIT64( 0x0000000000000002 ),
   1884  1.1  ross     LIT64( 0x0000000000000004 ),
   1885  1.1  ross     LIT64( 0x0000000000000008 ),
   1886  1.1  ross     LIT64( 0x0000000000000010 ),
   1887  1.1  ross     LIT64( 0x0000000000000020 ),
   1888  1.1  ross     LIT64( 0x0000000000000040 ),
   1889  1.1  ross     LIT64( 0x0000000000000080 ),
   1890  1.1  ross     LIT64( 0x0000000000000100 ),
   1891  1.1  ross     LIT64( 0x0000000000000200 ),
   1892  1.1  ross     LIT64( 0x0000000000000400 ),
   1893  1.1  ross     LIT64( 0x0000000000000800 ),
   1894  1.1  ross     LIT64( 0x0000000000001000 ),
   1895  1.1  ross     LIT64( 0x0000000000002000 ),
   1896  1.1  ross     LIT64( 0x0000000000004000 ),
   1897  1.1  ross     LIT64( 0x0000000000008000 ),
   1898  1.1  ross     LIT64( 0x0000000000010000 ),
   1899  1.1  ross     LIT64( 0x0000000000020000 ),
   1900  1.1  ross     LIT64( 0x0000000000040000 ),
   1901  1.1  ross     LIT64( 0x0000000000080000 ),
   1902  1.1  ross     LIT64( 0x0000000000100000 ),
   1903  1.1  ross     LIT64( 0x0000000000200000 ),
   1904  1.1  ross     LIT64( 0x0000000000400000 ),
   1905  1.1  ross     LIT64( 0x0000000000800000 ),
   1906  1.1  ross     LIT64( 0x0000000001000000 ),
   1907  1.1  ross     LIT64( 0x0000000002000000 ),
   1908  1.1  ross     LIT64( 0x0000000004000000 ),
   1909  1.1  ross     LIT64( 0x0000000008000000 ),
   1910  1.1  ross     LIT64( 0x0000000010000000 ),
   1911  1.1  ross     LIT64( 0x0000000020000000 ),
   1912  1.1  ross     LIT64( 0x0000000040000000 ),
   1913  1.1  ross     LIT64( 0x0000000080000000 ),
   1914  1.1  ross     LIT64( 0x0000000100000000 ),
   1915  1.1  ross     LIT64( 0x0000000200000000 ),
   1916  1.1  ross     LIT64( 0x0000000400000000 ),
   1917  1.1  ross     LIT64( 0x0000000800000000 ),
   1918  1.1  ross     LIT64( 0x0000001000000000 ),
   1919  1.1  ross     LIT64( 0x0000002000000000 ),
   1920  1.1  ross     LIT64( 0x0000004000000000 ),
   1921  1.1  ross     LIT64( 0x0000008000000000 ),
   1922  1.1  ross     LIT64( 0x0000010000000000 ),
   1923  1.1  ross     LIT64( 0x0000020000000000 ),
   1924  1.1  ross     LIT64( 0x0000040000000000 ),
   1925  1.1  ross     LIT64( 0x0000080000000000 ),
   1926  1.1  ross     LIT64( 0x0000100000000000 ),
   1927  1.1  ross     LIT64( 0x0000200000000000 ),
   1928  1.1  ross     LIT64( 0x0000400000000000 ),
   1929  1.1  ross     LIT64( 0x0000800000000000 ),
   1930  1.1  ross     LIT64( 0x0001000000000000 ),
   1931  1.1  ross     LIT64( 0x0002000000000000 ),
   1932  1.1  ross     LIT64( 0x0004000000000000 ),
   1933  1.1  ross     LIT64( 0x0008000000000000 ),
   1934  1.1  ross     LIT64( 0x0010000000000000 ),
   1935  1.1  ross     LIT64( 0x0020000000000000 ),
   1936  1.1  ross     LIT64( 0x0040000000000000 ),
   1937  1.1  ross     LIT64( 0x0080000000000000 ),
   1938  1.1  ross     LIT64( 0x0100000000000000 ),
   1939  1.1  ross     LIT64( 0x0200000000000000 ),
   1940  1.1  ross     LIT64( 0x0400000000000000 ),
   1941  1.1  ross     LIT64( 0x0800000000000000 ),
   1942  1.1  ross     LIT64( 0x1000000000000000 ),
   1943  1.1  ross     LIT64( 0x2000000000000000 ),
   1944  1.1  ross     LIT64( 0x4000000000000000 ),
   1945  1.1  ross     LIT64( 0x6000000000000000 ),
   1946  1.1  ross     LIT64( 0x7000000000000000 ),
   1947  1.1  ross     LIT64( 0x7800000000000000 ),
   1948  1.1  ross     LIT64( 0x7C00000000000000 ),
   1949  1.1  ross     LIT64( 0x7E00000000000000 ),
   1950  1.1  ross     LIT64( 0x7F00000000000000 ),
   1951  1.1  ross     LIT64( 0x7F80000000000000 ),
   1952  1.1  ross     LIT64( 0x7FC0000000000000 ),
   1953  1.1  ross     LIT64( 0x7FE0000000000000 ),
   1954  1.1  ross     LIT64( 0x7FF0000000000000 ),
   1955  1.1  ross     LIT64( 0x7FF8000000000000 ),
   1956  1.1  ross     LIT64( 0x7FFC000000000000 ),
   1957  1.1  ross     LIT64( 0x7FFE000000000000 ),
   1958  1.1  ross     LIT64( 0x7FFF000000000000 ),
   1959  1.1  ross     LIT64( 0x7FFF800000000000 ),
   1960  1.1  ross     LIT64( 0x7FFFC00000000000 ),
   1961  1.1  ross     LIT64( 0x7FFFE00000000000 ),
   1962  1.1  ross     LIT64( 0x7FFFF00000000000 ),
   1963  1.1  ross     LIT64( 0x7FFFF80000000000 ),
   1964  1.1  ross     LIT64( 0x7FFFFC0000000000 ),
   1965  1.1  ross     LIT64( 0x7FFFFE0000000000 ),
   1966  1.1  ross     LIT64( 0x7FFFFF0000000000 ),
   1967  1.1  ross     LIT64( 0x7FFFFF8000000000 ),
   1968  1.1  ross     LIT64( 0x7FFFFFC000000000 ),
   1969  1.1  ross     LIT64( 0x7FFFFFE000000000 ),
   1970  1.1  ross     LIT64( 0x7FFFFFF000000000 ),
   1971  1.1  ross     LIT64( 0x7FFFFFF800000000 ),
   1972  1.1  ross     LIT64( 0x7FFFFFFC00000000 ),
   1973  1.1  ross     LIT64( 0x7FFFFFFE00000000 ),
   1974  1.1  ross     LIT64( 0x7FFFFFFF00000000 ),
   1975  1.1  ross     LIT64( 0x7FFFFFFF80000000 ),
   1976  1.1  ross     LIT64( 0x7FFFFFFFC0000000 ),
   1977  1.1  ross     LIT64( 0x7FFFFFFFE0000000 ),
   1978  1.1  ross     LIT64( 0x7FFFFFFFF0000000 ),
   1979  1.1  ross     LIT64( 0x7FFFFFFFF8000000 ),
   1980  1.1  ross     LIT64( 0x7FFFFFFFFC000000 ),
   1981  1.1  ross     LIT64( 0x7FFFFFFFFE000000 ),
   1982  1.1  ross     LIT64( 0x7FFFFFFFFF000000 ),
   1983  1.1  ross     LIT64( 0x7FFFFFFFFF800000 ),
   1984  1.1  ross     LIT64( 0x7FFFFFFFFFC00000 ),
   1985  1.1  ross     LIT64( 0x7FFFFFFFFFE00000 ),
   1986  1.1  ross     LIT64( 0x7FFFFFFFFFF00000 ),
   1987  1.1  ross     LIT64( 0x7FFFFFFFFFF80000 ),
   1988  1.1  ross     LIT64( 0x7FFFFFFFFFFC0000 ),
   1989  1.1  ross     LIT64( 0x7FFFFFFFFFFE0000 ),
   1990  1.1  ross     LIT64( 0x7FFFFFFFFFFF0000 ),
   1991  1.1  ross     LIT64( 0x7FFFFFFFFFFF8000 ),
   1992  1.1  ross     LIT64( 0x7FFFFFFFFFFFC000 ),
   1993  1.1  ross     LIT64( 0x7FFFFFFFFFFFE000 ),
   1994  1.1  ross     LIT64( 0x7FFFFFFFFFFFF000 ),
   1995  1.1  ross     LIT64( 0x7FFFFFFFFFFFF800 ),
   1996  1.1  ross     LIT64( 0x7FFFFFFFFFFFFC00 ),
   1997  1.1  ross     LIT64( 0x7FFFFFFFFFFFFE00 ),
   1998  1.1  ross     LIT64( 0x7FFFFFFFFFFFFF00 ),
   1999  1.1  ross     LIT64( 0x7FFFFFFFFFFFFF80 ),
   2000  1.1  ross     LIT64( 0x7FFFFFFFFFFFFFC0 ),
   2001  1.1  ross     LIT64( 0x7FFFFFFFFFFFFFE0 ),
   2002  1.1  ross     LIT64( 0x7FFFFFFFFFFFFFF0 ),
   2003  1.1  ross     LIT64( 0x7FFFFFFFFFFFFFF8 ),
   2004  1.1  ross     LIT64( 0x7FFFFFFFFFFFFFFC ),
   2005  1.1  ross     LIT64( 0x7FFFFFFFFFFFFFFE ),
   2006  1.1  ross     LIT64( 0x7FFFFFFFFFFFFFFF ),
   2007  1.1  ross     LIT64( 0x7FFFFFFFFFFFFFFD ),
   2008  1.1  ross     LIT64( 0x7FFFFFFFFFFFFFFB ),
   2009  1.1  ross     LIT64( 0x7FFFFFFFFFFFFFF7 ),
   2010  1.1  ross     LIT64( 0x7FFFFFFFFFFFFFEF ),
   2011  1.1  ross     LIT64( 0x7FFFFFFFFFFFFFDF ),
   2012  1.1  ross     LIT64( 0x7FFFFFFFFFFFFFBF ),
   2013  1.1  ross     LIT64( 0x7FFFFFFFFFFFFF7F ),
   2014  1.1  ross     LIT64( 0x7FFFFFFFFFFFFEFF ),
   2015  1.1  ross     LIT64( 0x7FFFFFFFFFFFFDFF ),
   2016  1.1  ross     LIT64( 0x7FFFFFFFFFFFFBFF ),
   2017  1.1  ross     LIT64( 0x7FFFFFFFFFFFF7FF ),
   2018  1.1  ross     LIT64( 0x7FFFFFFFFFFFEFFF ),
   2019  1.1  ross     LIT64( 0x7FFFFFFFFFFFDFFF ),
   2020  1.1  ross     LIT64( 0x7FFFFFFFFFFFBFFF ),
   2021  1.1  ross     LIT64( 0x7FFFFFFFFFFF7FFF ),
   2022  1.1  ross     LIT64( 0x7FFFFFFFFFFEFFFF ),
   2023  1.1  ross     LIT64( 0x7FFFFFFFFFFDFFFF ),
   2024  1.1  ross     LIT64( 0x7FFFFFFFFFFBFFFF ),
   2025  1.1  ross     LIT64( 0x7FFFFFFFFFF7FFFF ),
   2026  1.1  ross     LIT64( 0x7FFFFFFFFFEFFFFF ),
   2027  1.1  ross     LIT64( 0x7FFFFFFFFFDFFFFF ),
   2028  1.1  ross     LIT64( 0x7FFFFFFFFFBFFFFF ),
   2029  1.1  ross     LIT64( 0x7FFFFFFFFF7FFFFF ),
   2030  1.1  ross     LIT64( 0x7FFFFFFFFEFFFFFF ),
   2031  1.1  ross     LIT64( 0x7FFFFFFFFDFFFFFF ),
   2032  1.1  ross     LIT64( 0x7FFFFFFFFBFFFFFF ),
   2033  1.1  ross     LIT64( 0x7FFFFFFFF7FFFFFF ),
   2034  1.1  ross     LIT64( 0x7FFFFFFFEFFFFFFF ),
   2035  1.1  ross     LIT64( 0x7FFFFFFFDFFFFFFF ),
   2036  1.1  ross     LIT64( 0x7FFFFFFFBFFFFFFF ),
   2037  1.1  ross     LIT64( 0x7FFFFFFF7FFFFFFF ),
   2038  1.1  ross     LIT64( 0x7FFFFFFEFFFFFFFF ),
   2039  1.1  ross     LIT64( 0x7FFFFFFDFFFFFFFF ),
   2040  1.1  ross     LIT64( 0x7FFFFFFBFFFFFFFF ),
   2041  1.1  ross     LIT64( 0x7FFFFFF7FFFFFFFF ),
   2042  1.1  ross     LIT64( 0x7FFFFFEFFFFFFFFF ),
   2043  1.1  ross     LIT64( 0x7FFFFFDFFFFFFFFF ),
   2044  1.1  ross     LIT64( 0x7FFFFFBFFFFFFFFF ),
   2045  1.1  ross     LIT64( 0x7FFFFF7FFFFFFFFF ),
   2046  1.1  ross     LIT64( 0x7FFFFEFFFFFFFFFF ),
   2047  1.1  ross     LIT64( 0x7FFFFDFFFFFFFFFF ),
   2048  1.1  ross     LIT64( 0x7FFFFBFFFFFFFFFF ),
   2049  1.1  ross     LIT64( 0x7FFFF7FFFFFFFFFF ),
   2050  1.1  ross     LIT64( 0x7FFFEFFFFFFFFFFF ),
   2051  1.1  ross     LIT64( 0x7FFFDFFFFFFFFFFF ),
   2052  1.1  ross     LIT64( 0x7FFFBFFFFFFFFFFF ),
   2053  1.1  ross     LIT64( 0x7FFF7FFFFFFFFFFF ),
   2054  1.1  ross     LIT64( 0x7FFEFFFFFFFFFFFF ),
   2055  1.1  ross     LIT64( 0x7FFDFFFFFFFFFFFF ),
   2056  1.1  ross     LIT64( 0x7FFBFFFFFFFFFFFF ),
   2057  1.1  ross     LIT64( 0x7FF7FFFFFFFFFFFF ),
   2058  1.1  ross     LIT64( 0x7FEFFFFFFFFFFFFF ),
   2059  1.1  ross     LIT64( 0x7FDFFFFFFFFFFFFF ),
   2060  1.1  ross     LIT64( 0x7FBFFFFFFFFFFFFF ),
   2061  1.1  ross     LIT64( 0x7F7FFFFFFFFFFFFF ),
   2062  1.1  ross     LIT64( 0x7EFFFFFFFFFFFFFF ),
   2063  1.1  ross     LIT64( 0x7DFFFFFFFFFFFFFF ),
   2064  1.1  ross     LIT64( 0x7BFFFFFFFFFFFFFF ),
   2065  1.1  ross     LIT64( 0x77FFFFFFFFFFFFFF ),
   2066  1.1  ross     LIT64( 0x6FFFFFFFFFFFFFFF ),
   2067  1.1  ross     LIT64( 0x5FFFFFFFFFFFFFFF ),
   2068  1.1  ross     LIT64( 0x3FFFFFFFFFFFFFFF ),
   2069  1.1  ross     LIT64( 0x1FFFFFFFFFFFFFFF ),
   2070  1.1  ross     LIT64( 0x0FFFFFFFFFFFFFFF ),
   2071  1.1  ross     LIT64( 0x07FFFFFFFFFFFFFF ),
   2072  1.1  ross     LIT64( 0x03FFFFFFFFFFFFFF ),
   2073  1.1  ross     LIT64( 0x01FFFFFFFFFFFFFF ),
   2074  1.1  ross     LIT64( 0x00FFFFFFFFFFFFFF ),
   2075  1.1  ross     LIT64( 0x007FFFFFFFFFFFFF ),
   2076  1.1  ross     LIT64( 0x003FFFFFFFFFFFFF ),
   2077  1.1  ross     LIT64( 0x001FFFFFFFFFFFFF ),
   2078  1.1  ross     LIT64( 0x000FFFFFFFFFFFFF ),
   2079  1.1  ross     LIT64( 0x0007FFFFFFFFFFFF ),
   2080  1.1  ross     LIT64( 0x0003FFFFFFFFFFFF ),
   2081  1.1  ross     LIT64( 0x0001FFFFFFFFFFFF ),
   2082  1.1  ross     LIT64( 0x0000FFFFFFFFFFFF ),
   2083  1.1  ross     LIT64( 0x00007FFFFFFFFFFF ),
   2084  1.1  ross     LIT64( 0x00003FFFFFFFFFFF ),
   2085  1.1  ross     LIT64( 0x00001FFFFFFFFFFF ),
   2086  1.1  ross     LIT64( 0x00000FFFFFFFFFFF ),
   2087  1.1  ross     LIT64( 0x000007FFFFFFFFFF ),
   2088  1.1  ross     LIT64( 0x000003FFFFFFFFFF ),
   2089  1.1  ross     LIT64( 0x000001FFFFFFFFFF ),
   2090  1.1  ross     LIT64( 0x000000FFFFFFFFFF ),
   2091  1.1  ross     LIT64( 0x0000007FFFFFFFFF ),
   2092  1.1  ross     LIT64( 0x0000003FFFFFFFFF ),
   2093  1.1  ross     LIT64( 0x0000001FFFFFFFFF ),
   2094  1.1  ross     LIT64( 0x0000000FFFFFFFFF ),
   2095  1.1  ross     LIT64( 0x00000007FFFFFFFF ),
   2096  1.1  ross     LIT64( 0x00000003FFFFFFFF ),
   2097  1.1  ross     LIT64( 0x00000001FFFFFFFF ),
   2098  1.1  ross     LIT64( 0x00000000FFFFFFFF ),
   2099  1.1  ross     LIT64( 0x000000007FFFFFFF ),
   2100  1.1  ross     LIT64( 0x000000003FFFFFFF ),
   2101  1.1  ross     LIT64( 0x000000001FFFFFFF ),
   2102  1.1  ross     LIT64( 0x000000000FFFFFFF ),
   2103  1.1  ross     LIT64( 0x0000000007FFFFFF ),
   2104  1.1  ross     LIT64( 0x0000000003FFFFFF ),
   2105  1.1  ross     LIT64( 0x0000000001FFFFFF ),
   2106  1.1  ross     LIT64( 0x0000000000FFFFFF ),
   2107  1.1  ross     LIT64( 0x00000000007FFFFF ),
   2108  1.1  ross     LIT64( 0x00000000003FFFFF ),
   2109  1.1  ross     LIT64( 0x00000000001FFFFF ),
   2110  1.1  ross     LIT64( 0x00000000000FFFFF ),
   2111  1.1  ross     LIT64( 0x000000000007FFFF ),
   2112  1.1  ross     LIT64( 0x000000000003FFFF ),
   2113  1.1  ross     LIT64( 0x000000000001FFFF ),
   2114  1.1  ross     LIT64( 0x000000000000FFFF ),
   2115  1.1  ross     LIT64( 0x0000000000007FFF ),
   2116  1.1  ross     LIT64( 0x0000000000003FFF ),
   2117  1.1  ross     LIT64( 0x0000000000001FFF ),
   2118  1.1  ross     LIT64( 0x0000000000000FFF ),
   2119  1.1  ross     LIT64( 0x00000000000007FF ),
   2120  1.1  ross     LIT64( 0x00000000000003FF ),
   2121  1.1  ross     LIT64( 0x00000000000001FF ),
   2122  1.1  ross     LIT64( 0x00000000000000FF ),
   2123  1.1  ross     LIT64( 0x000000000000007F ),
   2124  1.1  ross     LIT64( 0x000000000000003F ),
   2125  1.1  ross     LIT64( 0x000000000000001F ),
   2126  1.1  ross     LIT64( 0x000000000000000F ),
   2127  1.1  ross     LIT64( 0x0000000000000007 ),
   2128  1.1  ross     LIT64( 0x0000000000000003 )
   2129  1.1  ross };
   2130  1.1  ross 
   2131  1.1  ross static const uint32 floatx80NumQInP1 = floatx80NumQIn * floatx80NumP1;
   2132  1.1  ross static const uint32 floatx80NumQOutP1 = floatx80NumQOut * floatx80NumP1;
   2133  1.1  ross 
   2134  1.1  ross static floatx80 floatx80NextQInP1( sequenceT *sequencePtr )
   2135  1.1  ross {
   2136  1.1  ross     int16 expNum, sigNum;
   2137  1.1  ross     floatx80 z;
   2138  1.1  ross 
   2139  1.1  ross     sigNum = sequencePtr->term1Num;
   2140  1.1  ross     expNum = sequencePtr->expNum;
   2141  1.1  ross     z.low = floatx80P1[ sigNum ];
   2142  1.1  ross     z.high = floatx80QIn[ expNum ];
   2143  1.1  ross     if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 );
   2144  1.1  ross     ++sigNum;
   2145  1.1  ross     if ( floatx80NumP1 <= sigNum ) {
   2146  1.1  ross         sigNum = 0;
   2147  1.1  ross         ++expNum;
   2148  1.1  ross         if ( floatx80NumQIn <= expNum ) {
   2149  1.1  ross             expNum = 0;
   2150  1.1  ross             sequencePtr->done = TRUE;
   2151  1.1  ross         }
   2152  1.1  ross         sequencePtr->expNum = expNum;
   2153  1.1  ross     }
   2154  1.1  ross     sequencePtr->term1Num = sigNum;
   2155  1.1  ross     return z;
   2156  1.1  ross 
   2157  1.1  ross }
   2158  1.1  ross 
   2159  1.1  ross static floatx80 floatx80NextQOutP1( sequenceT *sequencePtr )
   2160  1.1  ross {
   2161  1.1  ross     int16 expNum, sigNum;
   2162  1.1  ross     floatx80 z;
   2163  1.1  ross 
   2164  1.1  ross     sigNum = sequencePtr->term1Num;
   2165  1.1  ross     expNum = sequencePtr->expNum;
   2166  1.1  ross     z.low = floatx80P1[ sigNum ];
   2167  1.1  ross     z.high = floatx80QOut[ expNum ];
   2168  1.1  ross     if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 );
   2169  1.1  ross     ++sigNum;
   2170  1.1  ross     if ( floatx80NumP1 <= sigNum ) {
   2171  1.1  ross         sigNum = 0;
   2172  1.1  ross         ++expNum;
   2173  1.1  ross         if ( floatx80NumQOut <= expNum ) {
   2174  1.1  ross             expNum = 0;
   2175  1.1  ross             sequencePtr->done = TRUE;
   2176  1.1  ross         }
   2177  1.1  ross         sequencePtr->expNum = expNum;
   2178  1.1  ross     }
   2179  1.1  ross     sequencePtr->term1Num = sigNum;
   2180  1.1  ross     return z;
   2181  1.1  ross 
   2182  1.1  ross }
   2183  1.1  ross 
   2184  1.1  ross static const uint32 floatx80NumQInP2 = floatx80NumQIn * floatx80NumP2;
   2185  1.1  ross static const uint32 floatx80NumQOutP2 = floatx80NumQOut * floatx80NumP2;
   2186  1.1  ross 
   2187  1.1  ross static floatx80 floatx80NextQInP2( sequenceT *sequencePtr )
   2188  1.1  ross {
   2189  1.1  ross     int16 expNum, sigNum;
   2190  1.1  ross     floatx80 z;
   2191  1.1  ross 
   2192  1.1  ross     sigNum = sequencePtr->term1Num;
   2193  1.1  ross     expNum = sequencePtr->expNum;
   2194  1.1  ross     z.low = floatx80P2[ sigNum ];
   2195  1.1  ross     z.high = floatx80QIn[ expNum ];
   2196  1.1  ross     if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 );
   2197  1.1  ross     ++sigNum;
   2198  1.1  ross     if ( floatx80NumP2 <= sigNum ) {
   2199  1.1  ross         sigNum = 0;
   2200  1.1  ross         ++expNum;
   2201  1.1  ross         if ( floatx80NumQIn <= expNum ) {
   2202  1.1  ross             expNum = 0;
   2203  1.1  ross             sequencePtr->done = TRUE;
   2204  1.1  ross         }
   2205  1.1  ross         sequencePtr->expNum = expNum;
   2206  1.1  ross     }
   2207  1.1  ross     sequencePtr->term1Num = sigNum;
   2208  1.1  ross     return z;
   2209  1.1  ross 
   2210  1.1  ross }
   2211  1.1  ross 
   2212  1.1  ross static floatx80 floatx80NextQOutP2( sequenceT *sequencePtr )
   2213  1.1  ross {
   2214  1.1  ross     int16 expNum, sigNum;
   2215  1.1  ross     floatx80 z;
   2216  1.1  ross 
   2217  1.1  ross     sigNum = sequencePtr->term1Num;
   2218  1.1  ross     expNum = sequencePtr->expNum;
   2219  1.1  ross     z.low = floatx80P2[ sigNum ];
   2220  1.1  ross     z.high = floatx80QOut[ expNum ];
   2221  1.1  ross     if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 );
   2222  1.1  ross     ++sigNum;
   2223  1.1  ross     if ( floatx80NumP2 <= sigNum ) {
   2224  1.1  ross         sigNum = 0;
   2225  1.1  ross         ++expNum;
   2226  1.1  ross         if ( floatx80NumQOut <= expNum ) {
   2227  1.1  ross             expNum = 0;
   2228  1.1  ross             sequencePtr->done = TRUE;
   2229  1.1  ross         }
   2230  1.1  ross         sequencePtr->expNum = expNum;
   2231  1.1  ross     }
   2232  1.1  ross     sequencePtr->term1Num = sigNum;
   2233  1.1  ross     return z;
   2234  1.1  ross 
   2235  1.1  ross }
   2236  1.1  ross 
   2237  1.1  ross static floatx80 floatx80RandomQOutP3( void )
   2238  1.1  ross {
   2239  1.1  ross     floatx80 z;
   2240  1.1  ross 
   2241  1.1  ross     z.low =
   2242  1.1  ross           (   floatx80P2[ randomUint8() % floatx80NumP2 ]
   2243  1.1  ross             + floatx80P2[ randomUint8() % floatx80NumP2 ] )
   2244  1.1  ross         & LIT64( 0x7FFFFFFFFFFFFFFF );
   2245  1.1  ross     z.high = floatx80QOut[ randomUint8() % floatx80NumQOut ];
   2246  1.1  ross     if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 );
   2247  1.1  ross     return z;
   2248  1.1  ross 
   2249  1.1  ross }
   2250  1.1  ross 
   2251  1.1  ross static floatx80 floatx80RandomQOutPInf( void )
   2252  1.1  ross {
   2253  1.1  ross     floatx80 z;
   2254  1.1  ross 
   2255  1.1  ross     z.low = randomUint64() & LIT64( 0x7FFFFFFFFFFFFFFF );
   2256  1.1  ross     z.high = floatx80QOut[ randomUint8() % floatx80NumQOut ];
   2257  1.1  ross     if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 );
   2258  1.1  ross     return z;
   2259  1.1  ross 
   2260  1.1  ross }
   2261  1.1  ross 
   2262  1.1  ross enum {
   2263  1.1  ross     floatx80NumQInfWeightMasks = 14
   2264  1.1  ross };
   2265  1.1  ross 
   2266  1.1  ross static const uint16 floatx80QInfWeightMasks[ floatx80NumQInfWeightMasks ] = {
   2267  1.1  ross     0x7FFF,
   2268  1.1  ross     0x7FFF,
   2269  1.1  ross     0x3FFF,
   2270  1.1  ross     0x1FFF,
   2271  1.1  ross     0x07FF,
   2272  1.1  ross     0x07FF,
   2273  1.1  ross     0x03FF,
   2274  1.1  ross     0x01FF,
   2275  1.1  ross     0x00FF,
   2276  1.1  ross     0x007F,
   2277  1.1  ross     0x003F,
   2278  1.1  ross     0x001F,
   2279  1.1  ross     0x000F,
   2280  1.1  ross     0x0007
   2281  1.1  ross };
   2282  1.1  ross 
   2283  1.1  ross static const uint16 floatx80QInfWeightOffsets[ floatx80NumQInfWeightMasks ] = {
   2284  1.1  ross     0x0000,
   2285  1.1  ross     0x0000,
   2286  1.1  ross     0x2000,
   2287  1.1  ross     0x3000,
   2288  1.1  ross     0x3800,
   2289  1.1  ross     0x3C00,
   2290  1.1  ross     0x3E00,
   2291  1.1  ross     0x3F00,
   2292  1.1  ross     0x3F80,
   2293  1.1  ross     0x3FC0,
   2294  1.1  ross     0x3FE0,
   2295  1.1  ross     0x3FF0,
   2296  1.1  ross     0x3FF8,
   2297  1.1  ross     0x3FFC
   2298  1.1  ross };
   2299  1.1  ross 
   2300  1.1  ross static floatx80 floatx80RandomQInfP3( void )
   2301  1.1  ross {
   2302  1.1  ross     int8 weightMaskNum;
   2303  1.1  ross     floatx80 z;
   2304  1.1  ross 
   2305  1.1  ross     z.low =
   2306  1.1  ross           (   floatx80P2[ randomUint8() % floatx80NumP2 ]
   2307  1.1  ross             + floatx80P2[ randomUint8() % floatx80NumP2 ] )
   2308  1.1  ross         & LIT64( 0x7FFFFFFFFFFFFFFF );
   2309  1.1  ross     weightMaskNum = randomUint8() % floatx80NumQInfWeightMasks;
   2310  1.1  ross     z.high =
   2311  1.2  ross           randomUint16() & (floatx80QInfWeightMasks[ weightMaskNum ]
   2312  1.2  ross         + floatx80QInfWeightOffsets[ weightMaskNum ]);
   2313  1.1  ross     if ( z.high ) z.low |= LIT64( 0x8000000000000000 );
   2314  1.1  ross     z.high |= ( (uint16) ( randomUint8() & 1 ) )<<15;
   2315  1.1  ross     return z;
   2316  1.1  ross 
   2317  1.1  ross }
   2318  1.1  ross 
   2319  1.1  ross static floatx80 floatx80RandomQInfPInf( void )
   2320  1.1  ross {
   2321  1.1  ross     int8 weightMaskNum;
   2322  1.1  ross     floatx80 z;
   2323  1.1  ross 
   2324  1.1  ross     z.low = randomUint64() & LIT64( 0x7FFFFFFFFFFFFFFF );
   2325  1.1  ross     weightMaskNum = randomUint8() % floatx80NumQInfWeightMasks;
   2326  1.1  ross     z.high =
   2327  1.2  ross           randomUint16() & (floatx80QInfWeightMasks[ weightMaskNum ]
   2328  1.2  ross         + floatx80QInfWeightOffsets[ weightMaskNum ]);
   2329  1.1  ross     if ( z.high ) z.low |= LIT64( 0x8000000000000000 );
   2330  1.1  ross     z.high |= ( (uint16) ( randomUint8() & 1 ) )<<15;
   2331  1.1  ross     return z;
   2332  1.1  ross 
   2333  1.1  ross }
   2334  1.1  ross 
   2335  1.1  ross static floatx80 floatx80Random( void )
   2336  1.1  ross {
   2337  1.1  ross 
   2338  1.1  ross     switch ( randomUint8() & 7 ) {
   2339  1.1  ross      case 0:
   2340  1.1  ross      case 1:
   2341  1.1  ross      case 2:
   2342  1.1  ross         return floatx80RandomQOutP3();
   2343  1.1  ross      case 3:
   2344  1.1  ross         return floatx80RandomQOutPInf();
   2345  1.1  ross      case 4:
   2346  1.1  ross      case 5:
   2347  1.1  ross      case 6:
   2348  1.1  ross         return floatx80RandomQInfP3();
   2349  1.1  ross      case 7:
   2350  1.2  ross 	break;
   2351  1.1  ross     }
   2352  1.2  ross     return floatx80RandomQInfPInf();
   2353  1.1  ross }
   2354  1.1  ross 
   2355  1.1  ross #endif
   2356  1.1  ross 
   2357  1.1  ross #ifdef FLOAT128
   2358  1.1  ross 
   2359  1.1  ross enum {
   2360  1.1  ross     float128NumQIn  =  22,
   2361  1.1  ross     float128NumQOut =  78,
   2362  1.1  ross     float128NumP1   =   4,
   2363  1.1  ross     float128NumP2   = 443
   2364  1.1  ross };
   2365  1.1  ross 
   2366  1.1  ross static const uint64 float128QIn[ float128NumQIn ] = {
   2367  1.1  ross     LIT64( 0x0000000000000000 ),	/* positive, subnormal		*/
   2368  1.1  ross     LIT64( 0x0001000000000000 ),	/* positive, -16382		*/
   2369  1.1  ross     LIT64( 0x3F8E000000000000 ),	/* positive,   -113		*/
   2370  1.1  ross     LIT64( 0x3FFD000000000000 ),	/* positive,     -2		*/
   2371  1.1  ross     LIT64( 0x3FFE000000000000 ),	/* positive,     -1		*/
   2372  1.1  ross     LIT64( 0x3FFF000000000000 ),	/* positive,      0		*/
   2373  1.1  ross     LIT64( 0x4000000000000000 ),	/* positive,      1		*/
   2374  1.1  ross     LIT64( 0x4001000000000000 ),	/* positive,      2		*/
   2375  1.1  ross     LIT64( 0x4070000000000000 ),	/* positive,    113		*/
   2376  1.1  ross     LIT64( 0x7FFE000000000000 ),	/* positive,  16383		*/
   2377  1.1  ross     LIT64( 0x7FFF000000000000 ),	/* positive, infinity or NaN	*/
   2378  1.1  ross     LIT64( 0x8000000000000000 ),	/* negative, subnormal		*/
   2379  1.1  ross     LIT64( 0x8001000000000000 ),	/* negative, -16382		*/
   2380  1.1  ross     LIT64( 0xBF8E000000000000 ),	/* negative,   -113		*/
   2381  1.1  ross     LIT64( 0xBFFD000000000000 ),	/* negative,     -2		*/
   2382  1.1  ross     LIT64( 0xBFFE000000000000 ),	/* negative,     -1		*/
   2383  1.1  ross     LIT64( 0xBFFF000000000000 ),	/* negative,      0		*/
   2384  1.1  ross     LIT64( 0xC000000000000000 ),	/* negative,      1		*/
   2385  1.1  ross     LIT64( 0xC001000000000000 ),	/* negative,      2		*/
   2386  1.1  ross     LIT64( 0xC070000000000000 ),	/* negative,    113		*/
   2387  1.1  ross     LIT64( 0xFFFE000000000000 ),	/* negative,  16383		*/
   2388  1.1  ross     LIT64( 0xFFFF000000000000 )		/* negative, infinity or NaN	*/
   2389  1.1  ross };
   2390  1.1  ross 
   2391  1.1  ross static const uint64 float128QOut[ float128NumQOut ] = {
   2392  1.1  ross     LIT64( 0x0000000000000000 ),	/* positive, subnormal		*/
   2393  1.1  ross     LIT64( 0x0001000000000000 ),	/* positive, -16382		*/
   2394  1.1  ross     LIT64( 0x0002000000000000 ),	/* positive, -16381		*/
   2395  1.1  ross     LIT64( 0x3BFE000000000000 ),	/* positive,  -1025		*/
   2396  1.1  ross     LIT64( 0x3BFF000000000000 ),	/* positive,  -1024		*/
   2397  1.1  ross     LIT64( 0x3C00000000000000 ),	/* positive,  -1023		*/
   2398  1.1  ross     LIT64( 0x3C01000000000000 ),	/* positive,  -1022		*/
   2399  1.1  ross     LIT64( 0x3F7E000000000000 ),	/* positive,   -129		*/
   2400  1.1  ross     LIT64( 0x3F7F000000000000 ),	/* positive,   -128		*/
   2401  1.1  ross     LIT64( 0x3F80000000000000 ),	/* positive,   -127		*/
   2402  1.1  ross     LIT64( 0x3F81000000000000 ),	/* positive,   -126		*/
   2403  1.1  ross     LIT64( 0x3F8E000000000000 ),	/* positive,   -113		*/
   2404  1.1  ross     LIT64( 0x3FFB000000000000 ),	/* positive,     -4		*/
   2405  1.1  ross     LIT64( 0x3FFC000000000000 ),	/* positive,     -3		*/
   2406  1.1  ross     LIT64( 0x3FFD000000000000 ),	/* positive,     -2		*/
   2407  1.1  ross     LIT64( 0x3FFE000000000000 ),	/* positive,     -1		*/
   2408  1.1  ross     LIT64( 0x3FFF000000000000 ),	/* positive,      0		*/
   2409  1.1  ross     LIT64( 0x4000000000000000 ),	/* positive,      1		*/
   2410  1.1  ross     LIT64( 0x4001000000000000 ),	/* positive,      2		*/
   2411  1.1  ross     LIT64( 0x4002000000000000 ),	/* positive,      3		*/
   2412  1.1  ross     LIT64( 0x4003000000000000 ),	/* positive,      4		*/
   2413  1.1  ross     LIT64( 0x401C000000000000 ),	/* positive,     29		*/
   2414  1.1  ross     LIT64( 0x401D000000000000 ),	/* positive,     30		*/
   2415  1.1  ross     LIT64( 0x401E000000000000 ),	/* positive,     31		*/
   2416  1.1  ross     LIT64( 0x401F000000000000 ),	/* positive,     32		*/
   2417  1.1  ross     LIT64( 0x403C000000000000 ),	/* positive,     61		*/
   2418  1.1  ross     LIT64( 0x403D000000000000 ),	/* positive,     62		*/
   2419  1.1  ross     LIT64( 0x403E000000000000 ),	/* positive,     63		*/
   2420  1.1  ross     LIT64( 0x403F000000000000 ),	/* positive,     64		*/
   2421  1.1  ross     LIT64( 0x4070000000000000 ),	/* positive,    113		*/
   2422  1.1  ross     LIT64( 0x407E000000000000 ),	/* positive,    127		*/
   2423  1.1  ross     LIT64( 0x407F000000000000 ),	/* positive,    128		*/
   2424  1.1  ross     LIT64( 0x4080000000000000 ),	/* positive,    129		*/
   2425  1.1  ross     LIT64( 0x43FE000000000000 ),	/* positive,   1023		*/
   2426  1.1  ross     LIT64( 0x43FF000000000000 ),	/* positive,   1024		*/
   2427  1.1  ross     LIT64( 0x4400000000000000 ),	/* positive,   1025		*/
   2428  1.1  ross     LIT64( 0x7FFD000000000000 ),	/* positive,  16382		*/
   2429  1.1  ross     LIT64( 0x7FFE000000000000 ),	/* positive,  16383		*/
   2430  1.1  ross     LIT64( 0x7FFF000000000000 ),	/* positive, infinity or NaN	*/
   2431  1.1  ross     LIT64( 0x8000000000000000 ),	/* negative, subnormal		*/
   2432  1.1  ross     LIT64( 0x8001000000000000 ),	/* negative, -16382		*/
   2433  1.1  ross     LIT64( 0x8002000000000000 ),	/* negative, -16381		*/
   2434  1.1  ross     LIT64( 0xBBFE000000000000 ),	/* negative,  -1025		*/
   2435  1.1  ross     LIT64( 0xBBFF000000000000 ),	/* negative,  -1024		*/
   2436  1.1  ross     LIT64( 0xBC00000000000000 ),	/* negative,  -1023		*/
   2437  1.1  ross     LIT64( 0xBC01000000000000 ),	/* negative,  -1022		*/
   2438  1.1  ross     LIT64( 0xBF7E000000000000 ),	/* negative,   -129		*/
   2439  1.1  ross     LIT64( 0xBF7F000000000000 ),	/* negative,   -128		*/
   2440  1.1  ross     LIT64( 0xBF80000000000000 ),	/* negative,   -127		*/
   2441  1.1  ross     LIT64( 0xBF81000000000000 ),	/* negative,   -126		*/
   2442  1.1  ross     LIT64( 0xBF8E000000000000 ),	/* negative,   -113		*/
   2443  1.1  ross     LIT64( 0xBFFB000000000000 ),	/* negative,     -4		*/
   2444  1.1  ross     LIT64( 0xBFFC000000000000 ),	/* negative,     -3		*/
   2445  1.1  ross     LIT64( 0xBFFD000000000000 ),	/* negative,     -2		*/
   2446  1.1  ross     LIT64( 0xBFFE000000000000 ),	/* negative,     -1		*/
   2447  1.1  ross     LIT64( 0xBFFF000000000000 ),	/* negative,      0		*/
   2448  1.1  ross     LIT64( 0xC000000000000000 ),	/* negative,      1		*/
   2449  1.1  ross     LIT64( 0xC001000000000000 ),	/* negative,      2		*/
   2450  1.1  ross     LIT64( 0xC002000000000000 ),	/* negative,      3		*/
   2451  1.1  ross     LIT64( 0xC003000000000000 ),	/* negative,      4		*/
   2452  1.1  ross     LIT64( 0xC01C000000000000 ),	/* negative,     29		*/
   2453  1.1  ross     LIT64( 0xC01D000000000000 ),	/* negative,     30		*/
   2454  1.1  ross     LIT64( 0xC01E000000000000 ),	/* negative,     31		*/
   2455  1.1  ross     LIT64( 0xC01F000000000000 ),	/* negative,     32		*/
   2456  1.1  ross     LIT64( 0xC03C000000000000 ),	/* negative,     61		*/
   2457  1.1  ross     LIT64( 0xC03D000000000000 ),	/* negative,     62		*/
   2458  1.1  ross     LIT64( 0xC03E000000000000 ),	/* negative,     63		*/
   2459  1.1  ross     LIT64( 0xC03F000000000000 ),	/* negative,     64		*/
   2460  1.1  ross     LIT64( 0xC070000000000000 ),	/* negative,    113		*/
   2461  1.1  ross     LIT64( 0xC07E000000000000 ),	/* negative,    127		*/
   2462  1.1  ross     LIT64( 0xC07F000000000000 ),	/* negative,    128		*/
   2463  1.1  ross     LIT64( 0xC080000000000000 ),	/* negative,    129		*/
   2464  1.1  ross     LIT64( 0xC3FE000000000000 ),	/* negative,   1023		*/
   2465  1.1  ross     LIT64( 0xC3FF000000000000 ),	/* negative,   1024		*/
   2466  1.1  ross     LIT64( 0xC400000000000000 ),	/* negative,   1025		*/
   2467  1.1  ross     LIT64( 0xFFFD000000000000 ),	/* negative,  16382		*/
   2468  1.1  ross     LIT64( 0xFFFE000000000000 ),	/* negative,  16383		*/
   2469  1.1  ross     LIT64( 0xFFFF000000000000 )		/* negative, infinity or NaN	*/
   2470  1.1  ross };
   2471  1.1  ross 
   2472  1.1  ross static const struct { bits64 high, low; } float128P1[ float128NumP1 ] = {
   2473  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000000 ) },
   2474  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000001 ) },
   2475  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2476  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFE ) }
   2477  1.1  ross };
   2478  1.1  ross 
   2479  1.1  ross static const struct { bits64 high, low; } float128P2[ float128NumP2 ] = {
   2480  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000000 ) },
   2481  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000001 ) },
   2482  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000002 ) },
   2483  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000004 ) },
   2484  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000008 ) },
   2485  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000010 ) },
   2486  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000020 ) },
   2487  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000040 ) },
   2488  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000080 ) },
   2489  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000100 ) },
   2490  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000200 ) },
   2491  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000400 ) },
   2492  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000800 ) },
   2493  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000001000 ) },
   2494  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000002000 ) },
   2495  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000004000 ) },
   2496  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000008000 ) },
   2497  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000010000 ) },
   2498  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000020000 ) },
   2499  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000040000 ) },
   2500  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000080000 ) },
   2501  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000100000 ) },
   2502  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000200000 ) },
   2503  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000400000 ) },
   2504  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000800000 ) },
   2505  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000001000000 ) },
   2506  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000002000000 ) },
   2507  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000004000000 ) },
   2508  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000008000000 ) },
   2509  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000010000000 ) },
   2510  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000020000000 ) },
   2511  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000040000000 ) },
   2512  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000080000000 ) },
   2513  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000100000000 ) },
   2514  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000200000000 ) },
   2515  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000400000000 ) },
   2516  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000800000000 ) },
   2517  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000001000000000 ) },
   2518  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000002000000000 ) },
   2519  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000004000000000 ) },
   2520  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000008000000000 ) },
   2521  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000010000000000 ) },
   2522  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000020000000000 ) },
   2523  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000040000000000 ) },
   2524  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000080000000000 ) },
   2525  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000100000000000 ) },
   2526  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000200000000000 ) },
   2527  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000400000000000 ) },
   2528  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000800000000000 ) },
   2529  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0001000000000000 ) },
   2530  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0002000000000000 ) },
   2531  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0004000000000000 ) },
   2532  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0008000000000000 ) },
   2533  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0010000000000000 ) },
   2534  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0020000000000000 ) },
   2535  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0040000000000000 ) },
   2536  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0080000000000000 ) },
   2537  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0100000000000000 ) },
   2538  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0200000000000000 ) },
   2539  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0400000000000000 ) },
   2540  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0800000000000000 ) },
   2541  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x1000000000000000 ) },
   2542  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x2000000000000000 ) },
   2543  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x4000000000000000 ) },
   2544  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x8000000000000000 ) },
   2545  1.1  ross     { LIT64( 0x0000000000000001 ), LIT64( 0x0000000000000000 ) },
   2546  1.1  ross     { LIT64( 0x0000000000000002 ), LIT64( 0x0000000000000000 ) },
   2547  1.1  ross     { LIT64( 0x0000000000000004 ), LIT64( 0x0000000000000000 ) },
   2548  1.1  ross     { LIT64( 0x0000000000000008 ), LIT64( 0x0000000000000000 ) },
   2549  1.1  ross     { LIT64( 0x0000000000000010 ), LIT64( 0x0000000000000000 ) },
   2550  1.1  ross     { LIT64( 0x0000000000000020 ), LIT64( 0x0000000000000000 ) },
   2551  1.1  ross     { LIT64( 0x0000000000000040 ), LIT64( 0x0000000000000000 ) },
   2552  1.1  ross     { LIT64( 0x0000000000000080 ), LIT64( 0x0000000000000000 ) },
   2553  1.1  ross     { LIT64( 0x0000000000000100 ), LIT64( 0x0000000000000000 ) },
   2554  1.1  ross     { LIT64( 0x0000000000000200 ), LIT64( 0x0000000000000000 ) },
   2555  1.1  ross     { LIT64( 0x0000000000000400 ), LIT64( 0x0000000000000000 ) },
   2556  1.1  ross     { LIT64( 0x0000000000000800 ), LIT64( 0x0000000000000000 ) },
   2557  1.1  ross     { LIT64( 0x0000000000001000 ), LIT64( 0x0000000000000000 ) },
   2558  1.1  ross     { LIT64( 0x0000000000002000 ), LIT64( 0x0000000000000000 ) },
   2559  1.1  ross     { LIT64( 0x0000000000004000 ), LIT64( 0x0000000000000000 ) },
   2560  1.1  ross     { LIT64( 0x0000000000008000 ), LIT64( 0x0000000000000000 ) },
   2561  1.1  ross     { LIT64( 0x0000000000010000 ), LIT64( 0x0000000000000000 ) },
   2562  1.1  ross     { LIT64( 0x0000000000020000 ), LIT64( 0x0000000000000000 ) },
   2563  1.1  ross     { LIT64( 0x0000000000040000 ), LIT64( 0x0000000000000000 ) },
   2564  1.1  ross     { LIT64( 0x0000000000080000 ), LIT64( 0x0000000000000000 ) },
   2565  1.1  ross     { LIT64( 0x0000000000100000 ), LIT64( 0x0000000000000000 ) },
   2566  1.1  ross     { LIT64( 0x0000000000200000 ), LIT64( 0x0000000000000000 ) },
   2567  1.1  ross     { LIT64( 0x0000000000400000 ), LIT64( 0x0000000000000000 ) },
   2568  1.1  ross     { LIT64( 0x0000000000800000 ), LIT64( 0x0000000000000000 ) },
   2569  1.1  ross     { LIT64( 0x0000000001000000 ), LIT64( 0x0000000000000000 ) },
   2570  1.1  ross     { LIT64( 0x0000000002000000 ), LIT64( 0x0000000000000000 ) },
   2571  1.1  ross     { LIT64( 0x0000000004000000 ), LIT64( 0x0000000000000000 ) },
   2572  1.1  ross     { LIT64( 0x0000000008000000 ), LIT64( 0x0000000000000000 ) },
   2573  1.1  ross     { LIT64( 0x0000000010000000 ), LIT64( 0x0000000000000000 ) },
   2574  1.1  ross     { LIT64( 0x0000000020000000 ), LIT64( 0x0000000000000000 ) },
   2575  1.1  ross     { LIT64( 0x0000000040000000 ), LIT64( 0x0000000000000000 ) },
   2576  1.1  ross     { LIT64( 0x0000000080000000 ), LIT64( 0x0000000000000000 ) },
   2577  1.1  ross     { LIT64( 0x0000000100000000 ), LIT64( 0x0000000000000000 ) },
   2578  1.1  ross     { LIT64( 0x0000000200000000 ), LIT64( 0x0000000000000000 ) },
   2579  1.1  ross     { LIT64( 0x0000000400000000 ), LIT64( 0x0000000000000000 ) },
   2580  1.1  ross     { LIT64( 0x0000000800000000 ), LIT64( 0x0000000000000000 ) },
   2581  1.1  ross     { LIT64( 0x0000001000000000 ), LIT64( 0x0000000000000000 ) },
   2582  1.1  ross     { LIT64( 0x0000002000000000 ), LIT64( 0x0000000000000000 ) },
   2583  1.1  ross     { LIT64( 0x0000004000000000 ), LIT64( 0x0000000000000000 ) },
   2584  1.1  ross     { LIT64( 0x0000008000000000 ), LIT64( 0x0000000000000000 ) },
   2585  1.1  ross     { LIT64( 0x0000010000000000 ), LIT64( 0x0000000000000000 ) },
   2586  1.1  ross     { LIT64( 0x0000020000000000 ), LIT64( 0x0000000000000000 ) },
   2587  1.1  ross     { LIT64( 0x0000040000000000 ), LIT64( 0x0000000000000000 ) },
   2588  1.1  ross     { LIT64( 0x0000080000000000 ), LIT64( 0x0000000000000000 ) },
   2589  1.1  ross     { LIT64( 0x0000100000000000 ), LIT64( 0x0000000000000000 ) },
   2590  1.1  ross     { LIT64( 0x0000200000000000 ), LIT64( 0x0000000000000000 ) },
   2591  1.1  ross     { LIT64( 0x0000400000000000 ), LIT64( 0x0000000000000000 ) },
   2592  1.1  ross     { LIT64( 0x0000800000000000 ), LIT64( 0x0000000000000000 ) },
   2593  1.1  ross     { LIT64( 0x0000C00000000000 ), LIT64( 0x0000000000000000 ) },
   2594  1.1  ross     { LIT64( 0x0000E00000000000 ), LIT64( 0x0000000000000000 ) },
   2595  1.1  ross     { LIT64( 0x0000F00000000000 ), LIT64( 0x0000000000000000 ) },
   2596  1.1  ross     { LIT64( 0x0000F80000000000 ), LIT64( 0x0000000000000000 ) },
   2597  1.1  ross     { LIT64( 0x0000FC0000000000 ), LIT64( 0x0000000000000000 ) },
   2598  1.1  ross     { LIT64( 0x0000FE0000000000 ), LIT64( 0x0000000000000000 ) },
   2599  1.1  ross     { LIT64( 0x0000FF0000000000 ), LIT64( 0x0000000000000000 ) },
   2600  1.1  ross     { LIT64( 0x0000FF8000000000 ), LIT64( 0x0000000000000000 ) },
   2601  1.1  ross     { LIT64( 0x0000FFC000000000 ), LIT64( 0x0000000000000000 ) },
   2602  1.1  ross     { LIT64( 0x0000FFE000000000 ), LIT64( 0x0000000000000000 ) },
   2603  1.1  ross     { LIT64( 0x0000FFF000000000 ), LIT64( 0x0000000000000000 ) },
   2604  1.1  ross     { LIT64( 0x0000FFF800000000 ), LIT64( 0x0000000000000000 ) },
   2605  1.1  ross     { LIT64( 0x0000FFFC00000000 ), LIT64( 0x0000000000000000 ) },
   2606  1.1  ross     { LIT64( 0x0000FFFE00000000 ), LIT64( 0x0000000000000000 ) },
   2607  1.1  ross     { LIT64( 0x0000FFFF00000000 ), LIT64( 0x0000000000000000 ) },
   2608  1.1  ross     { LIT64( 0x0000FFFF80000000 ), LIT64( 0x0000000000000000 ) },
   2609  1.1  ross     { LIT64( 0x0000FFFFC0000000 ), LIT64( 0x0000000000000000 ) },
   2610  1.1  ross     { LIT64( 0x0000FFFFE0000000 ), LIT64( 0x0000000000000000 ) },
   2611  1.1  ross     { LIT64( 0x0000FFFFF0000000 ), LIT64( 0x0000000000000000 ) },
   2612  1.1  ross     { LIT64( 0x0000FFFFF8000000 ), LIT64( 0x0000000000000000 ) },
   2613  1.1  ross     { LIT64( 0x0000FFFFFC000000 ), LIT64( 0x0000000000000000 ) },
   2614  1.1  ross     { LIT64( 0x0000FFFFFE000000 ), LIT64( 0x0000000000000000 ) },
   2615  1.1  ross     { LIT64( 0x0000FFFFFF000000 ), LIT64( 0x0000000000000000 ) },
   2616  1.1  ross     { LIT64( 0x0000FFFFFF800000 ), LIT64( 0x0000000000000000 ) },
   2617  1.1  ross     { LIT64( 0x0000FFFFFFC00000 ), LIT64( 0x0000000000000000 ) },
   2618  1.1  ross     { LIT64( 0x0000FFFFFFE00000 ), LIT64( 0x0000000000000000 ) },
   2619  1.1  ross     { LIT64( 0x0000FFFFFFF00000 ), LIT64( 0x0000000000000000 ) },
   2620  1.1  ross     { LIT64( 0x0000FFFFFFF80000 ), LIT64( 0x0000000000000000 ) },
   2621  1.1  ross     { LIT64( 0x0000FFFFFFFC0000 ), LIT64( 0x0000000000000000 ) },
   2622  1.1  ross     { LIT64( 0x0000FFFFFFFE0000 ), LIT64( 0x0000000000000000 ) },
   2623  1.1  ross     { LIT64( 0x0000FFFFFFFF0000 ), LIT64( 0x0000000000000000 ) },
   2624  1.1  ross     { LIT64( 0x0000FFFFFFFF8000 ), LIT64( 0x0000000000000000 ) },
   2625  1.1  ross     { LIT64( 0x0000FFFFFFFFC000 ), LIT64( 0x0000000000000000 ) },
   2626  1.1  ross     { LIT64( 0x0000FFFFFFFFE000 ), LIT64( 0x0000000000000000 ) },
   2627  1.1  ross     { LIT64( 0x0000FFFFFFFFF000 ), LIT64( 0x0000000000000000 ) },
   2628  1.1  ross     { LIT64( 0x0000FFFFFFFFF800 ), LIT64( 0x0000000000000000 ) },
   2629  1.1  ross     { LIT64( 0x0000FFFFFFFFFC00 ), LIT64( 0x0000000000000000 ) },
   2630  1.1  ross     { LIT64( 0x0000FFFFFFFFFE00 ), LIT64( 0x0000000000000000 ) },
   2631  1.1  ross     { LIT64( 0x0000FFFFFFFFFF00 ), LIT64( 0x0000000000000000 ) },
   2632  1.1  ross     { LIT64( 0x0000FFFFFFFFFF80 ), LIT64( 0x0000000000000000 ) },
   2633  1.1  ross     { LIT64( 0x0000FFFFFFFFFFC0 ), LIT64( 0x0000000000000000 ) },
   2634  1.1  ross     { LIT64( 0x0000FFFFFFFFFFE0 ), LIT64( 0x0000000000000000 ) },
   2635  1.1  ross     { LIT64( 0x0000FFFFFFFFFFF0 ), LIT64( 0x0000000000000000 ) },
   2636  1.1  ross     { LIT64( 0x0000FFFFFFFFFFF8 ), LIT64( 0x0000000000000000 ) },
   2637  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFC ), LIT64( 0x0000000000000000 ) },
   2638  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFE ), LIT64( 0x0000000000000000 ) },
   2639  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0x0000000000000000 ) },
   2640  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0x8000000000000000 ) },
   2641  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xC000000000000000 ) },
   2642  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xE000000000000000 ) },
   2643  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xF000000000000000 ) },
   2644  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xF800000000000000 ) },
   2645  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFC00000000000000 ) },
   2646  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFE00000000000000 ) },
   2647  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFF00000000000000 ) },
   2648  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFF80000000000000 ) },
   2649  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFC0000000000000 ) },
   2650  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFE0000000000000 ) },
   2651  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFF0000000000000 ) },
   2652  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFF8000000000000 ) },
   2653  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFC000000000000 ) },
   2654  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFE000000000000 ) },
   2655  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFF000000000000 ) },
   2656  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFF800000000000 ) },
   2657  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFC00000000000 ) },
   2658  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFE00000000000 ) },
   2659  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFF00000000000 ) },
   2660  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFF80000000000 ) },
   2661  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFC0000000000 ) },
   2662  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFE0000000000 ) },
   2663  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFF0000000000 ) },
   2664  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFF8000000000 ) },
   2665  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFC000000000 ) },
   2666  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFE000000000 ) },
   2667  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFF000000000 ) },
   2668  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFF800000000 ) },
   2669  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFC00000000 ) },
   2670  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFE00000000 ) },
   2671  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFF00000000 ) },
   2672  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFF80000000 ) },
   2673  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFC0000000 ) },
   2674  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFE0000000 ) },
   2675  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFF0000000 ) },
   2676  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFF8000000 ) },
   2677  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFC000000 ) },
   2678  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFE000000 ) },
   2679  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFF000000 ) },
   2680  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFF800000 ) },
   2681  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFC00000 ) },
   2682  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFE00000 ) },
   2683  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFF00000 ) },
   2684  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFF80000 ) },
   2685  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFC0000 ) },
   2686  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFE0000 ) },
   2687  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFF0000 ) },
   2688  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFF8000 ) },
   2689  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFC000 ) },
   2690  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFE000 ) },
   2691  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFF000 ) },
   2692  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFF800 ) },
   2693  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFC00 ) },
   2694  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFE00 ) },
   2695  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFF00 ) },
   2696  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFF80 ) },
   2697  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFC0 ) },
   2698  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFE0 ) },
   2699  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFF0 ) },
   2700  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFF8 ) },
   2701  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFC ) },
   2702  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFE ) },
   2703  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2704  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFD ) },
   2705  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFB ) },
   2706  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFF7 ) },
   2707  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFEF ) },
   2708  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFDF ) },
   2709  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFBF ) },
   2710  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFF7F ) },
   2711  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFEFF ) },
   2712  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFDFF ) },
   2713  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFBFF ) },
   2714  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFF7FF ) },
   2715  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFEFFF ) },
   2716  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFDFFF ) },
   2717  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFBFFF ) },
   2718  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFF7FFF ) },
   2719  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFEFFFF ) },
   2720  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFDFFFF ) },
   2721  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFBFFFF ) },
   2722  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFF7FFFF ) },
   2723  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFEFFFFF ) },
   2724  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFDFFFFF ) },
   2725  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFBFFFFF ) },
   2726  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFF7FFFFF ) },
   2727  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFEFFFFFF ) },
   2728  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFDFFFFFF ) },
   2729  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFBFFFFFF ) },
   2730  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFF7FFFFFF ) },
   2731  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFEFFFFFFF ) },
   2732  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFDFFFFFFF ) },
   2733  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFBFFFFFFF ) },
   2734  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFF7FFFFFFF ) },
   2735  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFEFFFFFFFF ) },
   2736  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFDFFFFFFFF ) },
   2737  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFBFFFFFFFF ) },
   2738  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFF7FFFFFFFF ) },
   2739  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFEFFFFFFFFF ) },
   2740  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFDFFFFFFFFF ) },
   2741  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFBFFFFFFFFF ) },
   2742  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFF7FFFFFFFFF ) },
   2743  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFEFFFFFFFFFF ) },
   2744  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFDFFFFFFFFFF ) },
   2745  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFBFFFFFFFFFF ) },
   2746  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFF7FFFFFFFFFF ) },
   2747  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFEFFFFFFFFFFF ) },
   2748  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFDFFFFFFFFFFF ) },
   2749  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFBFFFFFFFFFFF ) },
   2750  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFF7FFFFFFFFFFF ) },
   2751  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFEFFFFFFFFFFFF ) },
   2752  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFDFFFFFFFFFFFF ) },
   2753  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFBFFFFFFFFFFFF ) },
   2754  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFF7FFFFFFFFFFFF ) },
   2755  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFEFFFFFFFFFFFFF ) },
   2756  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFDFFFFFFFFFFFFF ) },
   2757  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFBFFFFFFFFFFFFF ) },
   2758  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFF7FFFFFFFFFFFFF ) },
   2759  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFEFFFFFFFFFFFFFF ) },
   2760  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFDFFFFFFFFFFFFFF ) },
   2761  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFBFFFFFFFFFFFFFF ) },
   2762  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xF7FFFFFFFFFFFFFF ) },
   2763  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xEFFFFFFFFFFFFFFF ) },
   2764  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xDFFFFFFFFFFFFFFF ) },
   2765  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xBFFFFFFFFFFFFFFF ) },
   2766  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0x7FFFFFFFFFFFFFFF ) },
   2767  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFD ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2768  1.1  ross     { LIT64( 0x0000FFFFFFFFFFFB ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2769  1.1  ross     { LIT64( 0x0000FFFFFFFFFFF7 ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2770  1.1  ross     { LIT64( 0x0000FFFFFFFFFFEF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2771  1.1  ross     { LIT64( 0x0000FFFFFFFFFFDF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2772  1.1  ross     { LIT64( 0x0000FFFFFFFFFFBF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2773  1.1  ross     { LIT64( 0x0000FFFFFFFFFF7F ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2774  1.1  ross     { LIT64( 0x0000FFFFFFFFFEFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2775  1.1  ross     { LIT64( 0x0000FFFFFFFFFDFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2776  1.1  ross     { LIT64( 0x0000FFFFFFFFFBFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2777  1.1  ross     { LIT64( 0x0000FFFFFFFFF7FF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2778  1.1  ross     { LIT64( 0x0000FFFFFFFFEFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2779  1.1  ross     { LIT64( 0x0000FFFFFFFFDFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2780  1.1  ross     { LIT64( 0x0000FFFFFFFFBFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2781  1.1  ross     { LIT64( 0x0000FFFFFFFF7FFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2782  1.1  ross     { LIT64( 0x0000FFFFFFFEFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2783  1.1  ross     { LIT64( 0x0000FFFFFFFDFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2784  1.1  ross     { LIT64( 0x0000FFFFFFFBFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2785  1.1  ross     { LIT64( 0x0000FFFFFFF7FFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2786  1.1  ross     { LIT64( 0x0000FFFFFFEFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2787  1.1  ross     { LIT64( 0x0000FFFFFFDFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2788  1.1  ross     { LIT64( 0x0000FFFFFFBFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2789  1.1  ross     { LIT64( 0x0000FFFFFF7FFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2790  1.1  ross     { LIT64( 0x0000FFFFFEFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2791  1.1  ross     { LIT64( 0x0000FFFFFDFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2792  1.1  ross     { LIT64( 0x0000FFFFFBFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2793  1.1  ross     { LIT64( 0x0000FFFFF7FFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2794  1.1  ross     { LIT64( 0x0000FFFFEFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2795  1.1  ross     { LIT64( 0x0000FFFFDFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2796  1.1  ross     { LIT64( 0x0000FFFFBFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2797  1.1  ross     { LIT64( 0x0000FFFF7FFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2798  1.1  ross     { LIT64( 0x0000FFFEFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2799  1.1  ross     { LIT64( 0x0000FFFDFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2800  1.1  ross     { LIT64( 0x0000FFFBFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2801  1.1  ross     { LIT64( 0x0000FFF7FFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2802  1.1  ross     { LIT64( 0x0000FFEFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2803  1.1  ross     { LIT64( 0x0000FFDFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2804  1.1  ross     { LIT64( 0x0000FFBFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2805  1.1  ross     { LIT64( 0x0000FF7FFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2806  1.1  ross     { LIT64( 0x0000FEFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2807  1.1  ross     { LIT64( 0x0000FDFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2808  1.1  ross     { LIT64( 0x0000FBFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2809  1.1  ross     { LIT64( 0x0000F7FFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2810  1.1  ross     { LIT64( 0x0000EFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2811  1.1  ross     { LIT64( 0x0000DFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2812  1.1  ross     { LIT64( 0x0000BFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2813  1.1  ross     { LIT64( 0x00007FFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2814  1.1  ross     { LIT64( 0x00003FFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2815  1.1  ross     { LIT64( 0x00001FFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2816  1.1  ross     { LIT64( 0x00000FFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2817  1.1  ross     { LIT64( 0x000007FFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2818  1.1  ross     { LIT64( 0x000003FFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2819  1.1  ross     { LIT64( 0x000001FFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2820  1.1  ross     { LIT64( 0x000000FFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2821  1.1  ross     { LIT64( 0x0000007FFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2822  1.1  ross     { LIT64( 0x0000003FFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2823  1.1  ross     { LIT64( 0x0000001FFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2824  1.1  ross     { LIT64( 0x0000000FFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2825  1.1  ross     { LIT64( 0x00000007FFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2826  1.1  ross     { LIT64( 0x00000003FFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2827  1.1  ross     { LIT64( 0x00000001FFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2828  1.1  ross     { LIT64( 0x00000000FFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2829  1.1  ross     { LIT64( 0x000000007FFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2830  1.1  ross     { LIT64( 0x000000003FFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2831  1.1  ross     { LIT64( 0x000000001FFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2832  1.1  ross     { LIT64( 0x000000000FFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2833  1.1  ross     { LIT64( 0x0000000007FFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2834  1.1  ross     { LIT64( 0x0000000003FFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2835  1.1  ross     { LIT64( 0x0000000001FFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2836  1.1  ross     { LIT64( 0x0000000000FFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2837  1.1  ross     { LIT64( 0x00000000007FFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2838  1.1  ross     { LIT64( 0x00000000003FFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2839  1.1  ross     { LIT64( 0x00000000001FFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2840  1.1  ross     { LIT64( 0x00000000000FFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2841  1.1  ross     { LIT64( 0x000000000007FFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2842  1.1  ross     { LIT64( 0x000000000003FFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2843  1.1  ross     { LIT64( 0x000000000001FFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2844  1.1  ross     { LIT64( 0x000000000000FFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2845  1.1  ross     { LIT64( 0x0000000000007FFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2846  1.1  ross     { LIT64( 0x0000000000003FFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2847  1.1  ross     { LIT64( 0x0000000000001FFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2848  1.1  ross     { LIT64( 0x0000000000000FFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2849  1.1  ross     { LIT64( 0x00000000000007FF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2850  1.1  ross     { LIT64( 0x00000000000003FF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2851  1.1  ross     { LIT64( 0x00000000000001FF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2852  1.1  ross     { LIT64( 0x00000000000000FF ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2853  1.1  ross     { LIT64( 0x000000000000007F ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2854  1.1  ross     { LIT64( 0x000000000000003F ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2855  1.1  ross     { LIT64( 0x000000000000001F ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2856  1.1  ross     { LIT64( 0x000000000000000F ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2857  1.1  ross     { LIT64( 0x0000000000000007 ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2858  1.1  ross     { LIT64( 0x0000000000000003 ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2859  1.1  ross     { LIT64( 0x0000000000000001 ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2860  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0xFFFFFFFFFFFFFFFF ) },
   2861  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x7FFFFFFFFFFFFFFF ) },
   2862  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x3FFFFFFFFFFFFFFF ) },
   2863  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x1FFFFFFFFFFFFFFF ) },
   2864  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0FFFFFFFFFFFFFFF ) },
   2865  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x07FFFFFFFFFFFFFF ) },
   2866  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x03FFFFFFFFFFFFFF ) },
   2867  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x01FFFFFFFFFFFFFF ) },
   2868  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x00FFFFFFFFFFFFFF ) },
   2869  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x007FFFFFFFFFFFFF ) },
   2870  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x003FFFFFFFFFFFFF ) },
   2871  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x001FFFFFFFFFFFFF ) },
   2872  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x000FFFFFFFFFFFFF ) },
   2873  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0007FFFFFFFFFFFF ) },
   2874  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0003FFFFFFFFFFFF ) },
   2875  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0001FFFFFFFFFFFF ) },
   2876  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000FFFFFFFFFFFF ) },
   2877  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x00007FFFFFFFFFFF ) },
   2878  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x00003FFFFFFFFFFF ) },
   2879  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x00001FFFFFFFFFFF ) },
   2880  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x00000FFFFFFFFFFF ) },
   2881  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x000007FFFFFFFFFF ) },
   2882  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x000003FFFFFFFFFF ) },
   2883  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x000001FFFFFFFFFF ) },
   2884  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x000000FFFFFFFFFF ) },
   2885  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000007FFFFFFFFF ) },
   2886  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000003FFFFFFFFF ) },
   2887  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000001FFFFFFFFF ) },
   2888  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000FFFFFFFFF ) },
   2889  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x00000007FFFFFFFF ) },
   2890  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x00000003FFFFFFFF ) },
   2891  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x00000001FFFFFFFF ) },
   2892  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x00000000FFFFFFFF ) },
   2893  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x000000007FFFFFFF ) },
   2894  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x000000003FFFFFFF ) },
   2895  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x000000001FFFFFFF ) },
   2896  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x000000000FFFFFFF ) },
   2897  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000007FFFFFF ) },
   2898  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000003FFFFFF ) },
   2899  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000001FFFFFF ) },
   2900  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000FFFFFF ) },
   2901  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x00000000007FFFFF ) },
   2902  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x00000000003FFFFF ) },
   2903  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x00000000001FFFFF ) },
   2904  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x00000000000FFFFF ) },
   2905  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x000000000007FFFF ) },
   2906  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x000000000003FFFF ) },
   2907  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x000000000001FFFF ) },
   2908  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x000000000000FFFF ) },
   2909  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000007FFF ) },
   2910  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000003FFF ) },
   2911  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000001FFF ) },
   2912  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000FFF ) },
   2913  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x00000000000007FF ) },
   2914  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x00000000000003FF ) },
   2915  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x00000000000001FF ) },
   2916  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x00000000000000FF ) },
   2917  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x000000000000007F ) },
   2918  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x000000000000003F ) },
   2919  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x000000000000001F ) },
   2920  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x000000000000000F ) },
   2921  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000007 ) },
   2922  1.1  ross     { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000003 ) }
   2923  1.1  ross };
   2924  1.1  ross 
   2925  1.1  ross static const uint32 float128NumQInP1 = float128NumQIn * float128NumP1;
   2926  1.1  ross static const uint32 float128NumQOutP1 = float128NumQOut * float128NumP1;
   2927  1.1  ross 
   2928  1.1  ross static float128 float128NextQInP1( sequenceT *sequencePtr )
   2929  1.1  ross {
   2930  1.1  ross     int16 expNum, sigNum;
   2931  1.1  ross     float128 z;
   2932  1.1  ross 
   2933  1.1  ross     sigNum = sequencePtr->term1Num;
   2934  1.1  ross     expNum = sequencePtr->expNum;
   2935  1.1  ross     z.low = float128P1[ sigNum ].low;
   2936  1.1  ross     z.high = float128QIn[ expNum ] | float128P1[ sigNum ].high;
   2937  1.1  ross     ++sigNum;
   2938  1.1  ross     if ( float128NumP1 <= sigNum ) {
   2939  1.1  ross         sigNum = 0;
   2940  1.1  ross         ++expNum;
   2941  1.1  ross         if ( float128NumQIn <= expNum ) {
   2942  1.1  ross             expNum = 0;
   2943  1.1  ross             sequencePtr->done = TRUE;
   2944  1.1  ross         }
   2945  1.1  ross         sequencePtr->expNum = expNum;
   2946  1.1  ross     }
   2947  1.1  ross     sequencePtr->term1Num = sigNum;
   2948  1.1  ross     return z;
   2949  1.1  ross 
   2950  1.1  ross }
   2951  1.1  ross 
   2952  1.1  ross static float128 float128NextQOutP1( sequenceT *sequencePtr )
   2953  1.1  ross {
   2954  1.1  ross     int16 expNum, sigNum;
   2955  1.1  ross     float128 z;
   2956  1.1  ross 
   2957  1.1  ross     sigNum = sequencePtr->term1Num;
   2958  1.1  ross     expNum = sequencePtr->expNum;
   2959  1.1  ross     z.low = float128P1[ sigNum ].low;
   2960  1.1  ross     z.high = float128QOut[ expNum ] | float128P1[ sigNum ].high;
   2961  1.1  ross     ++sigNum;
   2962  1.1  ross     if ( float128NumP1 <= sigNum ) {
   2963  1.1  ross         sigNum = 0;
   2964  1.1  ross         ++expNum;
   2965  1.1  ross         if ( float128NumQOut <= expNum ) {
   2966  1.1  ross             expNum = 0;
   2967  1.1  ross             sequencePtr->done = TRUE;
   2968  1.1  ross         }
   2969  1.1  ross         sequencePtr->expNum = expNum;
   2970  1.1  ross     }
   2971  1.1  ross     sequencePtr->term1Num = sigNum;
   2972  1.1  ross     return z;
   2973  1.1  ross 
   2974  1.1  ross }
   2975  1.1  ross 
   2976  1.1  ross static const uint32 float128NumQInP2 = float128NumQIn * float128NumP2;
   2977  1.1  ross static const uint32 float128NumQOutP2 = float128NumQOut * float128NumP2;
   2978  1.1  ross 
   2979  1.1  ross static float128 float128NextQInP2( sequenceT *sequencePtr )
   2980  1.1  ross {
   2981  1.1  ross     int16 expNum, sigNum;
   2982  1.1  ross     float128 z;
   2983  1.1  ross 
   2984  1.1  ross     sigNum = sequencePtr->term1Num;
   2985  1.1  ross     expNum = sequencePtr->expNum;
   2986  1.1  ross     z.low = float128P2[ sigNum ].low;
   2987  1.1  ross     z.high = float128QIn[ expNum ] | float128P2[ sigNum ].high;
   2988  1.1  ross     ++sigNum;
   2989  1.1  ross     if ( float128NumP2 <= sigNum ) {
   2990  1.1  ross         sigNum = 0;
   2991  1.1  ross         ++expNum;
   2992  1.1  ross         if ( float128NumQIn <= expNum ) {
   2993  1.1  ross             expNum = 0;
   2994  1.1  ross             sequencePtr->done = TRUE;
   2995  1.1  ross         }
   2996  1.1  ross         sequencePtr->expNum = expNum;
   2997  1.1  ross     }
   2998  1.1  ross     sequencePtr->term1Num = sigNum;
   2999  1.1  ross     return z;
   3000  1.1  ross 
   3001  1.1  ross }
   3002  1.1  ross 
   3003  1.1  ross static float128 float128NextQOutP2( sequenceT *sequencePtr )
   3004  1.1  ross {
   3005  1.1  ross     int16 expNum, sigNum;
   3006  1.1  ross     float128 z;
   3007  1.1  ross 
   3008  1.1  ross     sigNum = sequencePtr->term1Num;
   3009  1.1  ross     expNum = sequencePtr->expNum;
   3010  1.1  ross     z.low = float128P2[ sigNum ].low;
   3011  1.1  ross     z.high = float128QOut[ expNum ] | float128P2[ sigNum ].high;
   3012  1.1  ross     ++sigNum;
   3013  1.1  ross     if ( float128NumP2 <= sigNum ) {
   3014  1.1  ross         sigNum = 0;
   3015  1.1  ross         ++expNum;
   3016  1.1  ross         if ( float128NumQOut <= expNum ) {
   3017  1.1  ross             expNum = 0;
   3018  1.1  ross             sequencePtr->done = TRUE;
   3019  1.1  ross         }
   3020  1.1  ross         sequencePtr->expNum = expNum;
   3021  1.1  ross     }
   3022  1.1  ross     sequencePtr->term1Num = sigNum;
   3023  1.1  ross     return z;
   3024  1.1  ross 
   3025  1.1  ross }
   3026  1.1  ross 
   3027  1.1  ross static float128 float128RandomQOutP3( void )
   3028  1.1  ross {
   3029  1.1  ross     int16 sigNum1, sigNum2;
   3030  1.1  ross     uint64 sig1Low, sig2Low;
   3031  1.1  ross     float128 z;
   3032  1.1  ross 
   3033  1.1  ross     sigNum1 = randomUint8() % float128NumP2;
   3034  1.1  ross     sigNum2 = randomUint8() % float128NumP2;
   3035  1.1  ross     sig1Low = float128P2[ sigNum1 ].low;
   3036  1.1  ross     sig2Low = float128P2[ sigNum2 ].low;
   3037  1.1  ross     z.low = sig1Low + sig2Low;
   3038  1.1  ross     z.high =
   3039  1.1  ross           float128QOut[ randomUint8() % float128NumQOut ]
   3040  1.1  ross         | (   (   float128P2[ sigNum1 ].high
   3041  1.1  ross                 + float128P2[ sigNum2 ].high
   3042  1.1  ross                 + ( z.low < sig1Low )
   3043  1.1  ross               )
   3044  1.1  ross             & LIT64( 0x0000FFFFFFFFFFFF )
   3045  1.1  ross           );
   3046  1.1  ross     return z;
   3047  1.1  ross 
   3048  1.1  ross }
   3049  1.1  ross 
   3050  1.1  ross static float128 float128RandomQOutPInf( void )
   3051  1.1  ross {
   3052  1.1  ross     float128 z;
   3053  1.1  ross 
   3054  1.1  ross     z.low = randomUint64();
   3055  1.1  ross     z.high =
   3056  1.1  ross           float128QOut[ randomUint8() % float128NumQOut ]
   3057  1.1  ross         | ( randomUint64() & LIT64( 0x0000FFFFFFFFFFFF ) );
   3058  1.1  ross     return z;
   3059  1.1  ross 
   3060  1.1  ross }
   3061  1.1  ross 
   3062  1.1  ross enum {
   3063  1.1  ross     float128NumQInfWeightMasks = 14
   3064  1.1  ross };
   3065  1.1  ross 
   3066  1.1  ross static const uint64 float128QInfWeightMasks[ float128NumQInfWeightMasks ] = {
   3067  1.1  ross     LIT64( 0x7FFF000000000000 ),
   3068  1.1  ross     LIT64( 0x7FFF000000000000 ),
   3069  1.1  ross     LIT64( 0x3FFF000000000000 ),
   3070  1.1  ross     LIT64( 0x1FFF000000000000 ),
   3071  1.1  ross     LIT64( 0x07FF000000000000 ),
   3072  1.1  ross     LIT64( 0x07FF000000000000 ),
   3073  1.1  ross     LIT64( 0x03FF000000000000 ),
   3074  1.1  ross     LIT64( 0x01FF000000000000 ),
   3075  1.1  ross     LIT64( 0x00FF000000000000 ),
   3076  1.1  ross     LIT64( 0x007F000000000000 ),
   3077  1.1  ross     LIT64( 0x003F000000000000 ),
   3078  1.1  ross     LIT64( 0x001F000000000000 ),
   3079  1.1  ross     LIT64( 0x000F000000000000 ),
   3080  1.1  ross     LIT64( 0x0007000000000000 )
   3081  1.1  ross };
   3082  1.1  ross 
   3083  1.1  ross static const uint64 float128QInfWeightOffsets[ float128NumQInfWeightMasks ] = {
   3084  1.1  ross     LIT64( 0x0000000000000000 ),
   3085  1.1  ross     LIT64( 0x0000000000000000 ),
   3086  1.1  ross     LIT64( 0x2000000000000000 ),
   3087  1.1  ross     LIT64( 0x3000000000000000 ),
   3088  1.1  ross     LIT64( 0x3800000000000000 ),
   3089  1.1  ross     LIT64( 0x3C00000000000000 ),
   3090  1.1  ross     LIT64( 0x3E00000000000000 ),
   3091  1.1  ross     LIT64( 0x3F00000000000000 ),
   3092  1.1  ross     LIT64( 0x3F80000000000000 ),
   3093  1.1  ross     LIT64( 0x3FC0000000000000 ),
   3094  1.1  ross     LIT64( 0x3FE0000000000000 ),
   3095  1.1  ross     LIT64( 0x3FF0000000000000 ),
   3096  1.1  ross     LIT64( 0x3FF8000000000000 ),
   3097  1.1  ross     LIT64( 0x3FFC000000000000 )
   3098  1.1  ross };
   3099  1.1  ross 
   3100  1.1  ross static float128 float128RandomQInfP3( void )
   3101  1.1  ross {
   3102  1.1  ross     int16 sigNum1, sigNum2;
   3103  1.1  ross     uint64 sig1Low, sig2Low;
   3104  1.1  ross     int8 weightMaskNum;
   3105  1.1  ross     float128 z;
   3106  1.1  ross 
   3107  1.1  ross     sigNum1 = randomUint8() % float128NumP2;
   3108  1.1  ross     sigNum2 = randomUint8() % float128NumP2;
   3109  1.1  ross     sig1Low = float128P2[ sigNum1 ].low;
   3110  1.1  ross     sig2Low = float128P2[ sigNum2 ].low;
   3111  1.1  ross     z.low = sig1Low + sig2Low;
   3112  1.1  ross     weightMaskNum = randomUint8() % float128NumQInfWeightMasks;
   3113  1.1  ross     z.high =
   3114  1.1  ross           ( ( (uint64) ( randomUint8() & 1 ) )<<63 )
   3115  1.1  ross         | (   (   ( ( (uint64) randomUint16() )<<48 )
   3116  1.1  ross                 & float128QInfWeightMasks[ weightMaskNum ] )
   3117  1.1  ross             + float128QInfWeightOffsets[ weightMaskNum ]
   3118  1.1  ross           )
   3119  1.1  ross         | (   (   float128P2[ sigNum1 ].high
   3120  1.1  ross                 + float128P2[ sigNum2 ].high
   3121  1.1  ross                 + ( z.low < sig1Low )
   3122  1.1  ross               )
   3123  1.1  ross             & LIT64( 0x0000FFFFFFFFFFFF )
   3124  1.1  ross           );
   3125  1.1  ross     return z;
   3126  1.1  ross 
   3127  1.1  ross }
   3128  1.1  ross 
   3129  1.1  ross static float128 float128RandomQInfPInf( void )
   3130  1.1  ross {
   3131  1.1  ross     int8 weightMaskNum;
   3132  1.1  ross     float128 z;
   3133  1.1  ross 
   3134  1.1  ross     weightMaskNum = randomUint8() % float128NumQInfWeightMasks;
   3135  1.1  ross     z.low = randomUint64();
   3136  1.1  ross     z.high =
   3137  1.1  ross           ( ( (uint64) ( randomUint8() & 1 ) )<<63 )
   3138  1.1  ross         | (   (   ( ( (uint64) randomUint16() )<<48 )
   3139  1.1  ross                 & float128QInfWeightMasks[ weightMaskNum ] )
   3140  1.1  ross             + float128QInfWeightOffsets[ weightMaskNum ]
   3141  1.1  ross           )
   3142  1.1  ross         | ( randomUint64() & LIT64( 0x0000FFFFFFFFFFFF ) );
   3143  1.1  ross     return z;
   3144  1.1  ross 
   3145  1.1  ross }
   3146  1.1  ross 
   3147  1.1  ross static float128 float128Random( void )
   3148  1.1  ross {
   3149  1.1  ross 
   3150  1.1  ross     switch ( randomUint8() & 7 ) {
   3151  1.1  ross      case 0:
   3152  1.1  ross      case 1:
   3153  1.1  ross      case 2:
   3154  1.1  ross         return float128RandomQOutP3();
   3155  1.1  ross      case 3:
   3156  1.1  ross         return float128RandomQOutPInf();
   3157  1.1  ross      case 4:
   3158  1.1  ross      case 5:
   3159  1.1  ross      case 6:
   3160  1.1  ross         return float128RandomQInfP3();
   3161  1.1  ross      case 7:
   3162  1.1  ross         return float128RandomQInfPInf();
   3163  1.1  ross     }
   3164  1.1  ross 
   3165  1.1  ross }
   3166  1.1  ross 
   3167  1.1  ross #endif
   3168  1.1  ross 
   3169  1.1  ross static int8 level = 0;
   3170  1.1  ross 
   3171  1.1  ross void testCases_setLevel( int8 levelIn )
   3172  1.1  ross {
   3173  1.1  ross 
   3174  1.1  ross     if ( ( levelIn < 1 ) || ( 2 < levelIn ) ) {
   3175  1.1  ross         fail( "Invalid testing level: %d", levelIn );
   3176  1.1  ross     }
   3177  1.1  ross     level = levelIn;
   3178  1.1  ross 
   3179  1.1  ross }
   3180  1.1  ross 
   3181  1.1  ross static int8 sequenceType;
   3182  1.1  ross static sequenceT sequenceA, sequenceB;
   3183  1.1  ross static int8 subcase;
   3184  1.1  ross 
   3185  1.1  ross uint32 testCases_total;
   3186  1.1  ross flag testCases_done;
   3187  1.1  ross 
   3188  1.1  ross static float32 current_a_float32;
   3189  1.1  ross static float32 current_b_float32;
   3190  1.1  ross static float64 current_a_float64;
   3191  1.1  ross static float64 current_b_float64;
   3192  1.1  ross #ifdef FLOATX80
   3193  1.1  ross static floatx80 current_a_floatx80;
   3194  1.1  ross static floatx80 current_b_floatx80;
   3195  1.1  ross #endif
   3196  1.1  ross #ifdef FLOAT128
   3197  1.1  ross static float128 current_a_float128;
   3198  1.1  ross static float128 current_b_float128;
   3199  1.1  ross #endif
   3200  1.1  ross 
   3201  1.1  ross void testCases_initSequence( int8 sequenceTypeIn )
   3202  1.1  ross {
   3203  1.1  ross 
   3204  1.1  ross     sequenceType = sequenceTypeIn;
   3205  1.1  ross     sequenceA.term2Num = 0;
   3206  1.1  ross     sequenceA.term1Num = 0;
   3207  1.1  ross     sequenceA.expNum = 0;
   3208  1.1  ross     sequenceA.done = FALSE;
   3209  1.1  ross     sequenceB.term2Num = 0;
   3210  1.1  ross     sequenceB.term1Num = 0;
   3211  1.1  ross     sequenceB.expNum = 0;
   3212  1.1  ross     sequenceB.done = FALSE;
   3213  1.1  ross     subcase = 0;
   3214  1.1  ross     switch ( level ) {
   3215  1.1  ross      case 1:
   3216  1.1  ross         switch ( sequenceTypeIn ) {
   3217  1.1  ross          case testCases_sequence_a_int32:
   3218  1.1  ross             testCases_total = 3 * int32NumP1;
   3219  1.1  ross             break;
   3220  1.1  ross #ifdef BITS64
   3221  1.1  ross          case testCases_sequence_a_int64:
   3222  1.1  ross             testCases_total = 3 * int64NumP1;
   3223  1.1  ross             break;
   3224  1.1  ross #endif
   3225  1.1  ross          case testCases_sequence_a_float32:
   3226  1.1  ross             testCases_total = 3 * float32NumQOutP1;
   3227  1.1  ross             break;
   3228  1.1  ross          case testCases_sequence_ab_float32:
   3229  1.1  ross             testCases_total = 6 * float32NumQInP1 * float32NumQInP1;
   3230  1.1  ross             current_a_float32 = float32NextQInP1( &sequenceA );
   3231  1.1  ross             break;
   3232  1.1  ross          case testCases_sequence_a_float64:
   3233  1.1  ross             testCases_total = 3 * float64NumQOutP1;
   3234  1.1  ross             break;
   3235  1.1  ross          case testCases_sequence_ab_float64:
   3236  1.1  ross             testCases_total = 6 * float64NumQInP1 * float64NumQInP1;
   3237  1.1  ross             current_a_float64 = float64NextQInP1( &sequenceA );
   3238  1.1  ross             break;
   3239  1.1  ross #ifdef FLOATX80
   3240  1.1  ross          case testCases_sequence_a_floatx80:
   3241  1.1  ross             testCases_total = 3 * floatx80NumQOutP1;
   3242  1.1  ross             break;
   3243  1.1  ross          case testCases_sequence_ab_floatx80:
   3244  1.1  ross             testCases_total = 6 * floatx80NumQInP1 * floatx80NumQInP1;
   3245  1.1  ross             current_a_floatx80 = floatx80NextQInP1( &sequenceA );
   3246  1.1  ross             break;
   3247  1.1  ross #endif
   3248  1.1  ross #ifdef FLOAT128
   3249  1.1  ross          case testCases_sequence_a_float128:
   3250  1.1  ross             testCases_total = 3 * float128NumQOutP1;
   3251  1.1  ross             break;
   3252  1.1  ross          case testCases_sequence_ab_float128:
   3253  1.1  ross             testCases_total = 6 * float128NumQInP1 * float128NumQInP1;
   3254  1.1  ross             current_a_float128 = float128NextQInP1( &sequenceA );
   3255  1.1  ross             break;
   3256  1.1  ross #endif
   3257  1.1  ross         }
   3258  1.1  ross         break;
   3259  1.1  ross      case 2:
   3260  1.1  ross         switch ( sequenceTypeIn ) {
   3261  1.1  ross          case testCases_sequence_a_int32:
   3262  1.1  ross             testCases_total = 2 * int32NumP2;
   3263  1.1  ross             break;
   3264  1.1  ross #ifdef BITS64
   3265  1.1  ross          case testCases_sequence_a_int64:
   3266  1.1  ross             testCases_total = 2 * int64NumP2;
   3267  1.1  ross             break;
   3268  1.1  ross #endif
   3269  1.1  ross          case testCases_sequence_a_float32:
   3270  1.1  ross             testCases_total = 2 * float32NumQOutP2;
   3271  1.1  ross             break;
   3272  1.1  ross          case testCases_sequence_ab_float32:
   3273  1.1  ross             testCases_total = 2 * float32NumQInP2 * float32NumQInP2;
   3274  1.1  ross             current_a_float32 = float32NextQInP2( &sequenceA );
   3275  1.1  ross             break;
   3276  1.1  ross          case testCases_sequence_a_float64:
   3277  1.1  ross             testCases_total = 2 * float64NumQOutP2;
   3278  1.1  ross             break;
   3279  1.1  ross          case testCases_sequence_ab_float64:
   3280  1.1  ross             testCases_total = 2 * float64NumQInP2 * float64NumQInP2;
   3281  1.1  ross             current_a_float64 = float64NextQInP2( &sequenceA );
   3282  1.1  ross             break;
   3283  1.1  ross #ifdef FLOATX80
   3284  1.1  ross          case testCases_sequence_a_floatx80:
   3285  1.1  ross             testCases_total = 2 * floatx80NumQOutP2;
   3286  1.1  ross             break;
   3287  1.1  ross          case testCases_sequence_ab_floatx80:
   3288  1.1  ross             testCases_total = 2 * floatx80NumQInP2 * floatx80NumQInP2;
   3289  1.1  ross             current_a_floatx80 = floatx80NextQInP2( &sequenceA );
   3290  1.1  ross             break;
   3291  1.1  ross #endif
   3292  1.1  ross #ifdef FLOAT128
   3293  1.1  ross          case testCases_sequence_a_float128:
   3294  1.1  ross             testCases_total = 2 * float128NumQOutP2;
   3295  1.1  ross             break;
   3296  1.1  ross          case testCases_sequence_ab_float128:
   3297  1.1  ross             testCases_total = 2 * float128NumQInP2 * float128NumQInP2;
   3298  1.1  ross             current_a_float128 = float128NextQInP2( &sequenceA );
   3299  1.1  ross             break;
   3300  1.1  ross #endif
   3301  1.1  ross         }
   3302  1.1  ross         break;
   3303  1.1  ross     }
   3304  1.1  ross     testCases_done = FALSE;
   3305  1.1  ross 
   3306  1.1  ross }
   3307  1.1  ross 
   3308  1.1  ross int32 testCases_a_int32;
   3309  1.1  ross #ifdef BITS64
   3310  1.1  ross int64 testCases_a_int64;
   3311  1.1  ross #endif
   3312  1.1  ross float32 testCases_a_float32;
   3313  1.1  ross float32 testCases_b_float32;
   3314  1.1  ross float64 testCases_a_float64;
   3315  1.1  ross float64 testCases_b_float64;
   3316  1.1  ross #ifdef FLOATX80
   3317  1.1  ross floatx80 testCases_a_floatx80;
   3318  1.1  ross floatx80 testCases_b_floatx80;
   3319  1.1  ross #endif
   3320  1.1  ross #ifdef FLOAT128
   3321  1.1  ross float128 testCases_a_float128;
   3322  1.1  ross float128 testCases_b_float128;
   3323  1.1  ross #endif
   3324  1.1  ross 
   3325  1.1  ross void testCases_next( void )
   3326  1.1  ross {
   3327  1.1  ross 
   3328  1.1  ross     switch ( level ) {
   3329  1.1  ross      case 1:
   3330  1.1  ross         switch ( sequenceType ) {
   3331  1.1  ross          case testCases_sequence_a_int32:
   3332  1.1  ross             switch ( subcase ) {
   3333  1.1  ross              case 0:
   3334  1.1  ross                 testCases_a_int32 = int32RandomP3();
   3335  1.1  ross                 break;
   3336  1.1  ross              case 1:
   3337  1.1  ross                 testCases_a_int32 = int32RandomPInf();
   3338  1.1  ross                 break;
   3339  1.1  ross              case 2:
   3340  1.1  ross                 testCases_a_int32 = int32NextP1( &sequenceA );
   3341  1.1  ross                 testCases_done = sequenceA.done;
   3342  1.1  ross                 subcase = -1;
   3343  1.1  ross                 break;
   3344  1.1  ross             }
   3345  1.1  ross             ++subcase;
   3346  1.1  ross             break;
   3347  1.1  ross #ifdef BITS64
   3348  1.1  ross          case testCases_sequence_a_int64:
   3349  1.1  ross             switch ( subcase ) {
   3350  1.1  ross              case 0:
   3351  1.1  ross                 testCases_a_int64 = int64RandomP3();
   3352  1.1  ross                 break;
   3353  1.1  ross              case 1:
   3354  1.1  ross                 testCases_a_int64 = int64RandomPInf();
   3355  1.1  ross                 break;
   3356  1.1  ross              case 2:
   3357  1.1  ross                 testCases_a_int64 = int64NextP1( &sequenceA );
   3358  1.1  ross                 testCases_done = sequenceA.done;
   3359  1.1  ross                 subcase = -1;
   3360  1.1  ross                 break;
   3361  1.1  ross             }
   3362  1.1  ross             ++subcase;
   3363  1.1  ross             break;
   3364  1.1  ross #endif
   3365  1.1  ross          case testCases_sequence_a_float32:
   3366  1.1  ross             switch ( subcase ) {
   3367  1.1  ross              case 0:
   3368  1.1  ross              case 1:
   3369  1.1  ross                 testCases_a_float32 = float32Random();
   3370  1.1  ross                 break;
   3371  1.1  ross              case 2:
   3372  1.1  ross                 testCases_a_float32 = float32NextQOutP1( &sequenceA );
   3373  1.1  ross                 testCases_done = sequenceA.done;
   3374  1.1  ross                 subcase = -1;
   3375  1.1  ross                 break;
   3376  1.1  ross             }
   3377  1.1  ross             ++subcase;
   3378  1.1  ross             break;
   3379  1.1  ross          case testCases_sequence_ab_float32:
   3380  1.1  ross             switch ( subcase ) {
   3381  1.1  ross              case 0:
   3382  1.1  ross                 if ( sequenceB.done ) {
   3383  1.1  ross                     sequenceB.done = FALSE;
   3384  1.1  ross                     current_a_float32 = float32NextQInP1( &sequenceA );
   3385  1.1  ross                 }
   3386  1.1  ross                 current_b_float32 = float32NextQInP1( &sequenceB );
   3387  1.1  ross              case 2:
   3388  1.1  ross              case 4:
   3389  1.1  ross                 testCases_a_float32 = float32Random();
   3390  1.1  ross                 testCases_b_float32 = float32Random();
   3391  1.1  ross                 break;
   3392  1.1  ross              case 1:
   3393  1.1  ross                 testCases_a_float32 = current_a_float32;
   3394  1.1  ross                 testCases_b_float32 = float32Random();
   3395  1.1  ross                 break;
   3396  1.1  ross              case 3:
   3397  1.1  ross                 testCases_a_float32 = float32Random();
   3398  1.1  ross                 testCases_b_float32 = current_b_float32;
   3399  1.1  ross                 break;
   3400  1.1  ross              case 5:
   3401  1.1  ross                 testCases_a_float32 = current_a_float32;
   3402  1.1  ross                 testCases_b_float32 = current_b_float32;
   3403  1.1  ross                 testCases_done = sequenceA.done & sequenceB.done;
   3404  1.1  ross                 subcase = -1;
   3405  1.1  ross                 break;
   3406  1.1  ross             }
   3407  1.1  ross             ++subcase;
   3408  1.1  ross             break;
   3409  1.1  ross          case testCases_sequence_a_float64:
   3410  1.1  ross             switch ( subcase ) {
   3411  1.1  ross              case 0:
   3412  1.1  ross              case 1:
   3413  1.1  ross                 testCases_a_float64 = float64Random();
   3414  1.1  ross                 break;
   3415  1.1  ross              case 2:
   3416  1.1  ross                 testCases_a_float64 = float64NextQOutP1( &sequenceA );
   3417  1.1  ross                 testCases_done = sequenceA.done;
   3418  1.1  ross                 subcase = -1;
   3419  1.1  ross                 break;
   3420  1.1  ross             }
   3421  1.1  ross             ++subcase;
   3422  1.1  ross             break;
   3423  1.1  ross          case testCases_sequence_ab_float64:
   3424  1.1  ross             switch ( subcase ) {
   3425  1.1  ross              case 0:
   3426  1.1  ross                 if ( sequenceB.done ) {
   3427  1.1  ross                     sequenceB.done = FALSE;
   3428  1.1  ross                     current_a_float64 = float64NextQInP1( &sequenceA );
   3429  1.1  ross                 }
   3430  1.1  ross                 current_b_float64 = float64NextQInP1( &sequenceB );
   3431  1.1  ross              case 2:
   3432  1.1  ross              case 4:
   3433  1.1  ross                 testCases_a_float64 = float64Random();
   3434  1.1  ross                 testCases_b_float64 = float64Random();
   3435  1.1  ross                 break;
   3436  1.1  ross              case 1:
   3437  1.1  ross                 testCases_a_float64 = current_a_float64;
   3438  1.1  ross                 testCases_b_float64 = float64Random();
   3439  1.1  ross                 break;
   3440  1.1  ross              case 3:
   3441  1.1  ross                 testCases_a_float64 = float64Random();
   3442  1.1  ross                 testCases_b_float64 = current_b_float64;
   3443  1.1  ross                 break;
   3444  1.1  ross              case 5:
   3445  1.1  ross                 testCases_a_float64 = current_a_float64;
   3446  1.1  ross                 testCases_b_float64 = current_b_float64;
   3447  1.1  ross                 testCases_done = sequenceA.done & sequenceB.done;
   3448  1.1  ross                 subcase = -1;
   3449  1.1  ross                 break;
   3450  1.1  ross             }
   3451  1.1  ross             ++subcase;
   3452  1.1  ross             break;
   3453  1.1  ross #ifdef FLOATX80
   3454  1.1  ross          case testCases_sequence_a_floatx80:
   3455  1.1  ross             switch ( subcase ) {
   3456  1.1  ross              case 0:
   3457  1.1  ross              case 1:
   3458  1.1  ross                 testCases_a_floatx80 = floatx80Random();
   3459  1.1  ross                 break;
   3460  1.1  ross              case 2:
   3461  1.1  ross                 testCases_a_floatx80 = floatx80NextQOutP1( &sequenceA );
   3462  1.1  ross                 testCases_done = sequenceA.done;
   3463  1.1  ross                 subcase = -1;
   3464  1.1  ross                 break;
   3465  1.1  ross             }
   3466  1.1  ross             ++subcase;
   3467  1.1  ross             break;
   3468  1.1  ross          case testCases_sequence_ab_floatx80:
   3469  1.1  ross             switch ( subcase ) {
   3470  1.1  ross              case 0:
   3471  1.1  ross                 if ( sequenceB.done ) {
   3472  1.1  ross                     sequenceB.done = FALSE;
   3473  1.1  ross                     current_a_floatx80 = floatx80NextQInP1( &sequenceA );
   3474  1.1  ross                 }
   3475  1.1  ross                 current_b_floatx80 = floatx80NextQInP1( &sequenceB );
   3476  1.1  ross              case 2:
   3477  1.1  ross              case 4:
   3478  1.1  ross                 testCases_a_floatx80 = floatx80Random();
   3479  1.1  ross                 testCases_b_floatx80 = floatx80Random();
   3480  1.1  ross                 break;
   3481  1.1  ross              case 1:
   3482  1.1  ross                 testCases_a_floatx80 = current_a_floatx80;
   3483  1.1  ross                 testCases_b_floatx80 = floatx80Random();
   3484  1.1  ross                 break;
   3485  1.1  ross              case 3:
   3486  1.1  ross                 testCases_a_floatx80 = floatx80Random();
   3487  1.1  ross                 testCases_b_floatx80 = current_b_floatx80;
   3488  1.1  ross                 break;
   3489  1.1  ross              case 5:
   3490  1.1  ross                 testCases_a_floatx80 = current_a_floatx80;
   3491  1.1  ross                 testCases_b_floatx80 = current_b_floatx80;
   3492  1.1  ross                 testCases_done = sequenceA.done & sequenceB.done;
   3493  1.1  ross                 subcase = -1;
   3494  1.1  ross                 break;
   3495  1.1  ross             }
   3496  1.1  ross             ++subcase;
   3497  1.1  ross             break;
   3498  1.1  ross #endif
   3499  1.1  ross #ifdef FLOAT128
   3500  1.1  ross          case testCases_sequence_a_float128:
   3501  1.1  ross             switch ( subcase ) {
   3502  1.1  ross              case 0:
   3503  1.1  ross              case 1:
   3504  1.1  ross                 testCases_a_float128 = float128Random();
   3505  1.1  ross                 break;
   3506  1.1  ross              case 2:
   3507  1.1  ross                 testCases_a_float128 = float128NextQOutP1( &sequenceA );
   3508  1.1  ross                 testCases_done = sequenceA.done;
   3509  1.1  ross                 subcase = -1;
   3510  1.1  ross                 break;
   3511  1.1  ross             }
   3512  1.1  ross             ++subcase;
   3513  1.1  ross             break;
   3514  1.1  ross          case testCases_sequence_ab_float128:
   3515  1.1  ross             switch ( subcase ) {
   3516  1.1  ross              case 0:
   3517  1.1  ross                 if ( sequenceB.done ) {
   3518  1.1  ross                     sequenceB.done = FALSE;
   3519  1.1  ross                     current_a_float128 = float128NextQInP1( &sequenceA );
   3520  1.1  ross                 }
   3521  1.1  ross                 current_b_float128 = float128NextQInP1( &sequenceB );
   3522  1.1  ross              case 2:
   3523  1.1  ross              case 4:
   3524  1.1  ross                 testCases_a_float128 = float128Random();
   3525  1.1  ross                 testCases_b_float128 = float128Random();
   3526  1.1  ross                 break;
   3527  1.1  ross              case 1:
   3528  1.1  ross                 testCases_a_float128 = current_a_float128;
   3529  1.1  ross                 testCases_b_float128 = float128Random();
   3530  1.1  ross                 break;
   3531  1.1  ross              case 3:
   3532  1.1  ross                 testCases_a_float128 = float128Random();
   3533  1.1  ross                 testCases_b_float128 = current_b_float128;
   3534  1.1  ross                 break;
   3535  1.1  ross              case 5:
   3536  1.1  ross                 testCases_a_float128 = current_a_float128;
   3537  1.1  ross                 testCases_b_float128 = current_b_float128;
   3538  1.1  ross                 testCases_done = sequenceA.done & sequenceB.done;
   3539  1.1  ross                 subcase = -1;
   3540  1.1  ross                 break;
   3541  1.1  ross             }
   3542  1.1  ross             ++subcase;
   3543  1.1  ross             break;
   3544  1.1  ross #endif
   3545  1.1  ross         }
   3546  1.1  ross         break;
   3547  1.1  ross      case 2:
   3548  1.1  ross         switch ( sequenceType ) {
   3549  1.1  ross          case testCases_sequence_a_int32:
   3550  1.1  ross             switch ( subcase ) {
   3551  1.1  ross              case 0:
   3552  1.1  ross                 testCases_a_int32 = int32RandomP3();
   3553  1.1  ross                 break;
   3554  1.1  ross              case 2:
   3555  1.1  ross                 testCases_a_int32 = int32RandomPInf();
   3556  1.1  ross                 break;
   3557  1.1  ross              case 3:
   3558  1.1  ross                 subcase = -1;
   3559  1.1  ross              case 1:
   3560  1.1  ross                 testCases_a_int32 = int32NextP2( &sequenceA );
   3561  1.1  ross                 testCases_done = sequenceA.done;
   3562  1.1  ross                 break;
   3563  1.1  ross             }
   3564  1.1  ross             ++subcase;
   3565  1.1  ross             break;
   3566  1.1  ross #ifdef BITS64
   3567  1.1  ross          case testCases_sequence_a_int64:
   3568  1.1  ross             switch ( subcase ) {
   3569  1.1  ross              case 0:
   3570  1.1  ross                 testCases_a_int64 = int64RandomP3();
   3571  1.1  ross                 break;
   3572  1.1  ross              case 2:
   3573  1.1  ross                 testCases_a_int64 = int64RandomPInf();
   3574  1.1  ross                 break;
   3575  1.1  ross              case 3:
   3576  1.1  ross                 subcase = -1;
   3577  1.1  ross              case 1:
   3578  1.1  ross                 testCases_a_int64 = int64NextP2( &sequenceA );
   3579  1.1  ross                 testCases_done = sequenceA.done;
   3580  1.1  ross                 break;
   3581  1.1  ross             }
   3582  1.1  ross             ++subcase;
   3583  1.1  ross             break;
   3584  1.1  ross #endif
   3585  1.1  ross          case testCases_sequence_a_float32:
   3586  1.1  ross             switch ( subcase ) {
   3587  1.1  ross              case 0:
   3588  1.1  ross                 testCases_a_float32 = float32Random();
   3589  1.1  ross                 break;
   3590  1.1  ross              case 1:
   3591  1.1  ross                 testCases_a_float32 = float32NextQOutP2( &sequenceA );
   3592  1.1  ross                 testCases_done = sequenceA.done;
   3593  1.1  ross                 subcase = -1;
   3594  1.1  ross                 break;
   3595  1.1  ross             }
   3596  1.1  ross             ++subcase;
   3597  1.1  ross             break;
   3598  1.1  ross          case testCases_sequence_ab_float32:
   3599  1.1  ross             switch ( subcase ) {
   3600  1.1  ross              case 0:
   3601  1.1  ross                 testCases_a_float32 = float32Random();
   3602  1.1  ross                 testCases_b_float32 = float32Random();
   3603  1.1  ross                 break;
   3604  1.1  ross              case 1:
   3605  1.1  ross                 if ( sequenceB.done ) {
   3606  1.1  ross                     sequenceB.done = FALSE;
   3607  1.1  ross                     current_a_float32 = float32NextQInP2( &sequenceA );
   3608  1.1  ross                 }
   3609  1.1  ross                 testCases_a_float32 = current_a_float32;
   3610  1.1  ross                 testCases_b_float32 = float32NextQInP2( &sequenceB );
   3611  1.1  ross                 testCases_done = sequenceA.done & sequenceB.done;
   3612  1.1  ross                 subcase = -1;
   3613  1.1  ross                 break;
   3614  1.1  ross             }
   3615  1.1  ross             ++subcase;
   3616  1.1  ross             break;
   3617  1.1  ross          case testCases_sequence_a_float64:
   3618  1.1  ross             switch ( subcase ) {
   3619  1.1  ross              case 0:
   3620  1.1  ross                 testCases_a_float64 = float64Random();
   3621  1.1  ross                 break;
   3622  1.1  ross              case 1:
   3623  1.1  ross                 testCases_a_float64 = float64NextQOutP2( &sequenceA );
   3624  1.1  ross                 testCases_done = sequenceA.done;
   3625  1.1  ross                 subcase = -1;
   3626  1.1  ross                 break;
   3627  1.1  ross             }
   3628  1.1  ross             ++subcase;
   3629  1.1  ross             break;
   3630  1.1  ross          case testCases_sequence_ab_float64:
   3631  1.1  ross             switch ( subcase ) {
   3632  1.1  ross              case 0:
   3633  1.1  ross                 testCases_a_float64 = float64Random();
   3634  1.1  ross                 testCases_b_float64 = float64Random();
   3635  1.1  ross                 break;
   3636  1.1  ross              case 1:
   3637  1.1  ross                 if ( sequenceB.done ) {
   3638  1.1  ross                     sequenceB.done = FALSE;
   3639  1.1  ross                     current_a_float64 = float64NextQInP2( &sequenceA );
   3640  1.1  ross                 }
   3641  1.1  ross                 testCases_a_float64 = current_a_float64;
   3642  1.1  ross                 testCases_b_float64 = float64NextQInP2( &sequenceB );
   3643  1.1  ross                 testCases_done = sequenceA.done & sequenceB.done;
   3644  1.1  ross                 subcase = -1;
   3645  1.1  ross                 break;
   3646  1.1  ross             }
   3647  1.1  ross             ++subcase;
   3648  1.1  ross             break;
   3649  1.1  ross #ifdef FLOATX80
   3650  1.1  ross          case testCases_sequence_a_floatx80:
   3651  1.1  ross             switch ( subcase ) {
   3652  1.1  ross              case 0:
   3653  1.1  ross                 testCases_a_floatx80 = floatx80Random();
   3654  1.1  ross                 break;
   3655  1.1  ross              case 1:
   3656  1.1  ross                 testCases_a_floatx80 = floatx80NextQOutP2( &sequenceA );
   3657  1.1  ross                 testCases_done = sequenceA.done;
   3658  1.1  ross                 subcase = -1;
   3659  1.1  ross                 break;
   3660  1.1  ross             }
   3661  1.1  ross             ++subcase;
   3662  1.1  ross             break;
   3663  1.1  ross          case testCases_sequence_ab_floatx80:
   3664  1.1  ross             switch ( subcase ) {
   3665  1.1  ross              case 0:
   3666  1.1  ross                 testCases_a_floatx80 = floatx80Random();
   3667  1.1  ross                 testCases_b_floatx80 = floatx80Random();
   3668  1.1  ross                 break;
   3669  1.1  ross              case 1:
   3670  1.1  ross                 if ( sequenceB.done ) {
   3671  1.1  ross                     sequenceB.done = FALSE;
   3672  1.1  ross                     current_a_floatx80 = floatx80NextQInP2( &sequenceA );
   3673  1.1  ross                 }
   3674  1.1  ross                 testCases_a_floatx80 = current_a_floatx80;
   3675  1.1  ross                 testCases_b_floatx80 = floatx80NextQInP2( &sequenceB );
   3676  1.1  ross                 testCases_done = sequenceA.done & sequenceB.done;
   3677  1.1  ross                 subcase = -1;
   3678  1.1  ross                 break;
   3679  1.1  ross             }
   3680  1.1  ross             ++subcase;
   3681  1.1  ross             break;
   3682  1.1  ross #endif
   3683  1.1  ross #ifdef FLOAT128
   3684  1.1  ross          case testCases_sequence_a_float128:
   3685  1.1  ross             switch ( subcase ) {
   3686  1.1  ross              case 0:
   3687  1.1  ross                 testCases_a_float128 = float128Random();
   3688  1.1  ross                 break;
   3689  1.1  ross              case 1:
   3690  1.1  ross                 testCases_a_float128 = float128NextQOutP2( &sequenceA );
   3691  1.1  ross                 testCases_done = sequenceA.done;
   3692  1.1  ross                 subcase = -1;
   3693  1.1  ross                 break;
   3694  1.1  ross             }
   3695  1.1  ross             ++subcase;
   3696  1.1  ross             break;
   3697  1.1  ross          case testCases_sequence_ab_float128:
   3698  1.1  ross             switch ( subcase ) {
   3699  1.1  ross              case 0:
   3700  1.1  ross                 testCases_a_float128 = float128Random();
   3701  1.1  ross                 testCases_b_float128 = float128Random();
   3702  1.1  ross                 break;
   3703  1.1  ross              case 1:
   3704  1.1  ross                 if ( sequenceB.done ) {
   3705  1.1  ross                     sequenceB.done = FALSE;
   3706  1.1  ross                     current_a_float128 = float128NextQInP2( &sequenceA );
   3707  1.1  ross                 }
   3708  1.1  ross                 testCases_a_float128 = current_a_float128;
   3709  1.1  ross                 testCases_b_float128 = float128NextQInP2( &sequenceB );
   3710  1.1  ross                 testCases_done = sequenceA.done & sequenceB.done;
   3711  1.1  ross                 subcase = -1;
   3712  1.1  ross                 break;
   3713  1.1  ross             }
   3714  1.1  ross             ++subcase;
   3715  1.1  ross             break;
   3716  1.1  ross #endif
   3717  1.1  ross         }
   3718  1.1  ross         break;
   3719  1.1  ross     }
   3720  1.1  ross 
   3721  1.1  ross }
   3722  1.1  ross 
   3723