1 
2 /*============================================================================
3 
4 This C source file is part of TestFloat, Release 3e, a package of programs for
5 testing the correctness of floating-point arithmetic complying with the IEEE
6 Standard for Floating-Point, by John R. Hauser.
7 
8 Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
9 All rights reserved.
10 
11 Redistribution and use in source and binary forms, with or without
12 modification, are permitted provided that the following conditions are met:
13 
14  1. Redistributions of source code must retain the above copyright notice,
15     this list of conditions, and the following disclaimer.
16 
17  2. Redistributions in binary form must reproduce the above copyright notice,
18     this list of conditions, and the following disclaimer in the documentation
19     and/or other materials provided with the distribution.
20 
21  3. Neither the name of the University nor the names of its contributors may
22     be used to endorse or promote products derived from this software without
23     specific prior written permission.
24 
25 THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
26 EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
27 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
28 DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
29 DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
30 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
32 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
33 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
34 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35 
36 =============================================================================*/
37 
38 #include <stdbool.h>
39 #include <stdint.h>
40 #include "platform.h"
41 #include "uint128.h"
42 #include "random.h"
43 #include "softfloat.h"
44 #include "genCases.h"
45 
46 #ifdef FLOAT128
47 
48 struct sequence {
49     int expNum, term1Num, term2Num;
50     bool done;
51 };
52 
53 enum {
54     f128NumQIn  =  22,
55     f128NumQOut =  78,
56     f128NumP1   =   4,
57     f128NumP2   = 443
58 };
59 static const uint64_t f128QIn[f128NumQIn] = {
60     UINT64_C( 0x0000000000000000 ),    /* positive, subnormal       */
61     UINT64_C( 0x0001000000000000 ),    /* positive, -16382          */
62     UINT64_C( 0x3F8E000000000000 ),    /* positive,   -113          */
63     UINT64_C( 0x3FFD000000000000 ),    /* positive,     -2          */
64     UINT64_C( 0x3FFE000000000000 ),    /* positive,     -1          */
65     UINT64_C( 0x3FFF000000000000 ),    /* positive,      0          */
66     UINT64_C( 0x4000000000000000 ),    /* positive,      1          */
67     UINT64_C( 0x4001000000000000 ),    /* positive,      2          */
68     UINT64_C( 0x4070000000000000 ),    /* positive,    113          */
69     UINT64_C( 0x7FFE000000000000 ),    /* positive,  16383          */
70     UINT64_C( 0x7FFF000000000000 ),    /* positive, infinity or NaN */
71     UINT64_C( 0x8000000000000000 ),    /* negative, subnormal       */
72     UINT64_C( 0x8001000000000000 ),    /* negative, -16382          */
73     UINT64_C( 0xBF8E000000000000 ),    /* negative,   -113          */
74     UINT64_C( 0xBFFD000000000000 ),    /* negative,     -2          */
75     UINT64_C( 0xBFFE000000000000 ),    /* negative,     -1          */
76     UINT64_C( 0xBFFF000000000000 ),    /* negative,      0          */
77     UINT64_C( 0xC000000000000000 ),    /* negative,      1          */
78     UINT64_C( 0xC001000000000000 ),    /* negative,      2          */
79     UINT64_C( 0xC070000000000000 ),    /* negative,    113          */
80     UINT64_C( 0xFFFE000000000000 ),    /* negative,  16383          */
81     UINT64_C( 0xFFFF000000000000 )     /* negative, infinity or NaN */
82 };
83 static const uint64_t f128QOut[f128NumQOut] = {
84     UINT64_C( 0x0000000000000000 ),    /* positive, subnormal       */
85     UINT64_C( 0x0001000000000000 ),    /* positive, -16382          */
86     UINT64_C( 0x0002000000000000 ),    /* positive, -16381          */
87     UINT64_C( 0x3BFE000000000000 ),    /* positive,  -1025          */
88     UINT64_C( 0x3BFF000000000000 ),    /* positive,  -1024          */
89     UINT64_C( 0x3C00000000000000 ),    /* positive,  -1023          */
90     UINT64_C( 0x3C01000000000000 ),    /* positive,  -1022          */
91     UINT64_C( 0x3F7E000000000000 ),    /* positive,   -129          */
92     UINT64_C( 0x3F7F000000000000 ),    /* positive,   -128          */
93     UINT64_C( 0x3F80000000000000 ),    /* positive,   -127          */
94     UINT64_C( 0x3F81000000000000 ),    /* positive,   -126          */
95     UINT64_C( 0x3F8E000000000000 ),    /* positive,   -113          */
96     UINT64_C( 0x3FFB000000000000 ),    /* positive,     -4          */
97     UINT64_C( 0x3FFC000000000000 ),    /* positive,     -3          */
98     UINT64_C( 0x3FFD000000000000 ),    /* positive,     -2          */
99     UINT64_C( 0x3FFE000000000000 ),    /* positive,     -1          */
100     UINT64_C( 0x3FFF000000000000 ),    /* positive,      0          */
101     UINT64_C( 0x4000000000000000 ),    /* positive,      1          */
102     UINT64_C( 0x4001000000000000 ),    /* positive,      2          */
103     UINT64_C( 0x4002000000000000 ),    /* positive,      3          */
104     UINT64_C( 0x4003000000000000 ),    /* positive,      4          */
105     UINT64_C( 0x401C000000000000 ),    /* positive,     29          */
106     UINT64_C( 0x401D000000000000 ),    /* positive,     30          */
107     UINT64_C( 0x401E000000000000 ),    /* positive,     31          */
108     UINT64_C( 0x401F000000000000 ),    /* positive,     32          */
109     UINT64_C( 0x403C000000000000 ),    /* positive,     61          */
110     UINT64_C( 0x403D000000000000 ),    /* positive,     62          */
111     UINT64_C( 0x403E000000000000 ),    /* positive,     63          */
112     UINT64_C( 0x403F000000000000 ),    /* positive,     64          */
113     UINT64_C( 0x4070000000000000 ),    /* positive,    113          */
114     UINT64_C( 0x407E000000000000 ),    /* positive,    127          */
115     UINT64_C( 0x407F000000000000 ),    /* positive,    128          */
116     UINT64_C( 0x4080000000000000 ),    /* positive,    129          */
117     UINT64_C( 0x43FE000000000000 ),    /* positive,   1023          */
118     UINT64_C( 0x43FF000000000000 ),    /* positive,   1024          */
119     UINT64_C( 0x4400000000000000 ),    /* positive,   1025          */
120     UINT64_C( 0x7FFD000000000000 ),    /* positive,  16382          */
121     UINT64_C( 0x7FFE000000000000 ),    /* positive,  16383          */
122     UINT64_C( 0x7FFF000000000000 ),    /* positive, infinity or NaN */
123     UINT64_C( 0x8000000000000000 ),    /* negative, subnormal       */
124     UINT64_C( 0x8001000000000000 ),    /* negative, -16382          */
125     UINT64_C( 0x8002000000000000 ),    /* negative, -16381          */
126     UINT64_C( 0xBBFE000000000000 ),    /* negative,  -1025          */
127     UINT64_C( 0xBBFF000000000000 ),    /* negative,  -1024          */
128     UINT64_C( 0xBC00000000000000 ),    /* negative,  -1023          */
129     UINT64_C( 0xBC01000000000000 ),    /* negative,  -1022          */
130     UINT64_C( 0xBF7E000000000000 ),    /* negative,   -129          */
131     UINT64_C( 0xBF7F000000000000 ),    /* negative,   -128          */
132     UINT64_C( 0xBF80000000000000 ),    /* negative,   -127          */
133     UINT64_C( 0xBF81000000000000 ),    /* negative,   -126          */
134     UINT64_C( 0xBF8E000000000000 ),    /* negative,   -113          */
135     UINT64_C( 0xBFFB000000000000 ),    /* negative,     -4          */
136     UINT64_C( 0xBFFC000000000000 ),    /* negative,     -3          */
137     UINT64_C( 0xBFFD000000000000 ),    /* negative,     -2          */
138     UINT64_C( 0xBFFE000000000000 ),    /* negative,     -1          */
139     UINT64_C( 0xBFFF000000000000 ),    /* negative,      0          */
140     UINT64_C( 0xC000000000000000 ),    /* negative,      1          */
141     UINT64_C( 0xC001000000000000 ),    /* negative,      2          */
142     UINT64_C( 0xC002000000000000 ),    /* negative,      3          */
143     UINT64_C( 0xC003000000000000 ),    /* negative,      4          */
144     UINT64_C( 0xC01C000000000000 ),    /* negative,     29          */
145     UINT64_C( 0xC01D000000000000 ),    /* negative,     30          */
146     UINT64_C( 0xC01E000000000000 ),    /* negative,     31          */
147     UINT64_C( 0xC01F000000000000 ),    /* negative,     32          */
148     UINT64_C( 0xC03C000000000000 ),    /* negative,     61          */
149     UINT64_C( 0xC03D000000000000 ),    /* negative,     62          */
150     UINT64_C( 0xC03E000000000000 ),    /* negative,     63          */
151     UINT64_C( 0xC03F000000000000 ),    /* negative,     64          */
152     UINT64_C( 0xC070000000000000 ),    /* negative,    113          */
153     UINT64_C( 0xC07E000000000000 ),    /* negative,    127          */
154     UINT64_C( 0xC07F000000000000 ),    /* negative,    128          */
155     UINT64_C( 0xC080000000000000 ),    /* negative,    129          */
156     UINT64_C( 0xC3FE000000000000 ),    /* negative,   1023          */
157     UINT64_C( 0xC3FF000000000000 ),    /* negative,   1024          */
158     UINT64_C( 0xC400000000000000 ),    /* negative,   1025          */
159     UINT64_C( 0xFFFD000000000000 ),    /* negative,  16382          */
160     UINT64_C( 0xFFFE000000000000 ),    /* negative,  16383          */
161     UINT64_C( 0xFFFF000000000000 )     /* negative, infinity or NaN */
162 };
163 static const struct { uint64_t v64, v0; } f128P1[f128NumP1] = {
164     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000000 ) },
165     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000001 ) },
166     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
167     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFE ) }
168 };
169 static const struct { uint64_t v64, v0; } f128P2[f128NumP2] = {
170     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000000 ) },
171     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000001 ) },
172     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000002 ) },
173     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000004 ) },
174     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000008 ) },
175     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000010 ) },
176     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000020 ) },
177     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000040 ) },
178     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000080 ) },
179     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000100 ) },
180     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000200 ) },
181     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000400 ) },
182     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000800 ) },
183     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000001000 ) },
184     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000002000 ) },
185     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000004000 ) },
186     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000008000 ) },
187     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000010000 ) },
188     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000020000 ) },
189     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000040000 ) },
190     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000080000 ) },
191     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000100000 ) },
192     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000200000 ) },
193     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000400000 ) },
194     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000800000 ) },
195     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000001000000 ) },
196     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000002000000 ) },
197     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000004000000 ) },
198     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000008000000 ) },
199     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000010000000 ) },
200     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000020000000 ) },
201     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000040000000 ) },
202     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000080000000 ) },
203     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000100000000 ) },
204     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000200000000 ) },
205     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000400000000 ) },
206     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000800000000 ) },
207     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000001000000000 ) },
208     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000002000000000 ) },
209     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000004000000000 ) },
210     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000008000000000 ) },
211     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000010000000000 ) },
212     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000020000000000 ) },
213     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000040000000000 ) },
214     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000080000000000 ) },
215     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000100000000000 ) },
216     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000200000000000 ) },
217     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000400000000000 ) },
218     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000800000000000 ) },
219     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0001000000000000 ) },
220     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0002000000000000 ) },
221     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0004000000000000 ) },
222     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0008000000000000 ) },
223     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0010000000000000 ) },
224     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0020000000000000 ) },
225     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0040000000000000 ) },
226     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0080000000000000 ) },
227     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0100000000000000 ) },
228     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0200000000000000 ) },
229     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0400000000000000 ) },
230     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0800000000000000 ) },
231     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x1000000000000000 ) },
232     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x2000000000000000 ) },
233     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x4000000000000000 ) },
234     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x8000000000000000 ) },
235     { UINT64_C( 0x0000000000000001 ), UINT64_C( 0x0000000000000000 ) },
236     { UINT64_C( 0x0000000000000002 ), UINT64_C( 0x0000000000000000 ) },
237     { UINT64_C( 0x0000000000000004 ), UINT64_C( 0x0000000000000000 ) },
238     { UINT64_C( 0x0000000000000008 ), UINT64_C( 0x0000000000000000 ) },
239     { UINT64_C( 0x0000000000000010 ), UINT64_C( 0x0000000000000000 ) },
240     { UINT64_C( 0x0000000000000020 ), UINT64_C( 0x0000000000000000 ) },
241     { UINT64_C( 0x0000000000000040 ), UINT64_C( 0x0000000000000000 ) },
242     { UINT64_C( 0x0000000000000080 ), UINT64_C( 0x0000000000000000 ) },
243     { UINT64_C( 0x0000000000000100 ), UINT64_C( 0x0000000000000000 ) },
244     { UINT64_C( 0x0000000000000200 ), UINT64_C( 0x0000000000000000 ) },
245     { UINT64_C( 0x0000000000000400 ), UINT64_C( 0x0000000000000000 ) },
246     { UINT64_C( 0x0000000000000800 ), UINT64_C( 0x0000000000000000 ) },
247     { UINT64_C( 0x0000000000001000 ), UINT64_C( 0x0000000000000000 ) },
248     { UINT64_C( 0x0000000000002000 ), UINT64_C( 0x0000000000000000 ) },
249     { UINT64_C( 0x0000000000004000 ), UINT64_C( 0x0000000000000000 ) },
250     { UINT64_C( 0x0000000000008000 ), UINT64_C( 0x0000000000000000 ) },
251     { UINT64_C( 0x0000000000010000 ), UINT64_C( 0x0000000000000000 ) },
252     { UINT64_C( 0x0000000000020000 ), UINT64_C( 0x0000000000000000 ) },
253     { UINT64_C( 0x0000000000040000 ), UINT64_C( 0x0000000000000000 ) },
254     { UINT64_C( 0x0000000000080000 ), UINT64_C( 0x0000000000000000 ) },
255     { UINT64_C( 0x0000000000100000 ), UINT64_C( 0x0000000000000000 ) },
256     { UINT64_C( 0x0000000000200000 ), UINT64_C( 0x0000000000000000 ) },
257     { UINT64_C( 0x0000000000400000 ), UINT64_C( 0x0000000000000000 ) },
258     { UINT64_C( 0x0000000000800000 ), UINT64_C( 0x0000000000000000 ) },
259     { UINT64_C( 0x0000000001000000 ), UINT64_C( 0x0000000000000000 ) },
260     { UINT64_C( 0x0000000002000000 ), UINT64_C( 0x0000000000000000 ) },
261     { UINT64_C( 0x0000000004000000 ), UINT64_C( 0x0000000000000000 ) },
262     { UINT64_C( 0x0000000008000000 ), UINT64_C( 0x0000000000000000 ) },
263     { UINT64_C( 0x0000000010000000 ), UINT64_C( 0x0000000000000000 ) },
264     { UINT64_C( 0x0000000020000000 ), UINT64_C( 0x0000000000000000 ) },
265     { UINT64_C( 0x0000000040000000 ), UINT64_C( 0x0000000000000000 ) },
266     { UINT64_C( 0x0000000080000000 ), UINT64_C( 0x0000000000000000 ) },
267     { UINT64_C( 0x0000000100000000 ), UINT64_C( 0x0000000000000000 ) },
268     { UINT64_C( 0x0000000200000000 ), UINT64_C( 0x0000000000000000 ) },
269     { UINT64_C( 0x0000000400000000 ), UINT64_C( 0x0000000000000000 ) },
270     { UINT64_C( 0x0000000800000000 ), UINT64_C( 0x0000000000000000 ) },
271     { UINT64_C( 0x0000001000000000 ), UINT64_C( 0x0000000000000000 ) },
272     { UINT64_C( 0x0000002000000000 ), UINT64_C( 0x0000000000000000 ) },
273     { UINT64_C( 0x0000004000000000 ), UINT64_C( 0x0000000000000000 ) },
274     { UINT64_C( 0x0000008000000000 ), UINT64_C( 0x0000000000000000 ) },
275     { UINT64_C( 0x0000010000000000 ), UINT64_C( 0x0000000000000000 ) },
276     { UINT64_C( 0x0000020000000000 ), UINT64_C( 0x0000000000000000 ) },
277     { UINT64_C( 0x0000040000000000 ), UINT64_C( 0x0000000000000000 ) },
278     { UINT64_C( 0x0000080000000000 ), UINT64_C( 0x0000000000000000 ) },
279     { UINT64_C( 0x0000100000000000 ), UINT64_C( 0x0000000000000000 ) },
280     { UINT64_C( 0x0000200000000000 ), UINT64_C( 0x0000000000000000 ) },
281     { UINT64_C( 0x0000400000000000 ), UINT64_C( 0x0000000000000000 ) },
282     { UINT64_C( 0x0000800000000000 ), UINT64_C( 0x0000000000000000 ) },
283     { UINT64_C( 0x0000C00000000000 ), UINT64_C( 0x0000000000000000 ) },
284     { UINT64_C( 0x0000E00000000000 ), UINT64_C( 0x0000000000000000 ) },
285     { UINT64_C( 0x0000F00000000000 ), UINT64_C( 0x0000000000000000 ) },
286     { UINT64_C( 0x0000F80000000000 ), UINT64_C( 0x0000000000000000 ) },
287     { UINT64_C( 0x0000FC0000000000 ), UINT64_C( 0x0000000000000000 ) },
288     { UINT64_C( 0x0000FE0000000000 ), UINT64_C( 0x0000000000000000 ) },
289     { UINT64_C( 0x0000FF0000000000 ), UINT64_C( 0x0000000000000000 ) },
290     { UINT64_C( 0x0000FF8000000000 ), UINT64_C( 0x0000000000000000 ) },
291     { UINT64_C( 0x0000FFC000000000 ), UINT64_C( 0x0000000000000000 ) },
292     { UINT64_C( 0x0000FFE000000000 ), UINT64_C( 0x0000000000000000 ) },
293     { UINT64_C( 0x0000FFF000000000 ), UINT64_C( 0x0000000000000000 ) },
294     { UINT64_C( 0x0000FFF800000000 ), UINT64_C( 0x0000000000000000 ) },
295     { UINT64_C( 0x0000FFFC00000000 ), UINT64_C( 0x0000000000000000 ) },
296     { UINT64_C( 0x0000FFFE00000000 ), UINT64_C( 0x0000000000000000 ) },
297     { UINT64_C( 0x0000FFFF00000000 ), UINT64_C( 0x0000000000000000 ) },
298     { UINT64_C( 0x0000FFFF80000000 ), UINT64_C( 0x0000000000000000 ) },
299     { UINT64_C( 0x0000FFFFC0000000 ), UINT64_C( 0x0000000000000000 ) },
300     { UINT64_C( 0x0000FFFFE0000000 ), UINT64_C( 0x0000000000000000 ) },
301     { UINT64_C( 0x0000FFFFF0000000 ), UINT64_C( 0x0000000000000000 ) },
302     { UINT64_C( 0x0000FFFFF8000000 ), UINT64_C( 0x0000000000000000 ) },
303     { UINT64_C( 0x0000FFFFFC000000 ), UINT64_C( 0x0000000000000000 ) },
304     { UINT64_C( 0x0000FFFFFE000000 ), UINT64_C( 0x0000000000000000 ) },
305     { UINT64_C( 0x0000FFFFFF000000 ), UINT64_C( 0x0000000000000000 ) },
306     { UINT64_C( 0x0000FFFFFF800000 ), UINT64_C( 0x0000000000000000 ) },
307     { UINT64_C( 0x0000FFFFFFC00000 ), UINT64_C( 0x0000000000000000 ) },
308     { UINT64_C( 0x0000FFFFFFE00000 ), UINT64_C( 0x0000000000000000 ) },
309     { UINT64_C( 0x0000FFFFFFF00000 ), UINT64_C( 0x0000000000000000 ) },
310     { UINT64_C( 0x0000FFFFFFF80000 ), UINT64_C( 0x0000000000000000 ) },
311     { UINT64_C( 0x0000FFFFFFFC0000 ), UINT64_C( 0x0000000000000000 ) },
312     { UINT64_C( 0x0000FFFFFFFE0000 ), UINT64_C( 0x0000000000000000 ) },
313     { UINT64_C( 0x0000FFFFFFFF0000 ), UINT64_C( 0x0000000000000000 ) },
314     { UINT64_C( 0x0000FFFFFFFF8000 ), UINT64_C( 0x0000000000000000 ) },
315     { UINT64_C( 0x0000FFFFFFFFC000 ), UINT64_C( 0x0000000000000000 ) },
316     { UINT64_C( 0x0000FFFFFFFFE000 ), UINT64_C( 0x0000000000000000 ) },
317     { UINT64_C( 0x0000FFFFFFFFF000 ), UINT64_C( 0x0000000000000000 ) },
318     { UINT64_C( 0x0000FFFFFFFFF800 ), UINT64_C( 0x0000000000000000 ) },
319     { UINT64_C( 0x0000FFFFFFFFFC00 ), UINT64_C( 0x0000000000000000 ) },
320     { UINT64_C( 0x0000FFFFFFFFFE00 ), UINT64_C( 0x0000000000000000 ) },
321     { UINT64_C( 0x0000FFFFFFFFFF00 ), UINT64_C( 0x0000000000000000 ) },
322     { UINT64_C( 0x0000FFFFFFFFFF80 ), UINT64_C( 0x0000000000000000 ) },
323     { UINT64_C( 0x0000FFFFFFFFFFC0 ), UINT64_C( 0x0000000000000000 ) },
324     { UINT64_C( 0x0000FFFFFFFFFFE0 ), UINT64_C( 0x0000000000000000 ) },
325     { UINT64_C( 0x0000FFFFFFFFFFF0 ), UINT64_C( 0x0000000000000000 ) },
326     { UINT64_C( 0x0000FFFFFFFFFFF8 ), UINT64_C( 0x0000000000000000 ) },
327     { UINT64_C( 0x0000FFFFFFFFFFFC ), UINT64_C( 0x0000000000000000 ) },
328     { UINT64_C( 0x0000FFFFFFFFFFFE ), UINT64_C( 0x0000000000000000 ) },
329     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0x0000000000000000 ) },
330     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0x8000000000000000 ) },
331     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xC000000000000000 ) },
332     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xE000000000000000 ) },
333     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xF000000000000000 ) },
334     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xF800000000000000 ) },
335     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFC00000000000000 ) },
336     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFE00000000000000 ) },
337     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFF00000000000000 ) },
338     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFF80000000000000 ) },
339     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFC0000000000000 ) },
340     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFE0000000000000 ) },
341     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFF0000000000000 ) },
342     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFF8000000000000 ) },
343     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFC000000000000 ) },
344     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFE000000000000 ) },
345     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFF000000000000 ) },
346     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFF800000000000 ) },
347     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFC00000000000 ) },
348     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFE00000000000 ) },
349     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFF00000000000 ) },
350     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFF80000000000 ) },
351     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFC0000000000 ) },
352     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFE0000000000 ) },
353     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFF0000000000 ) },
354     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFF8000000000 ) },
355     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFC000000000 ) },
356     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFE000000000 ) },
357     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFF000000000 ) },
358     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFF800000000 ) },
359     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFC00000000 ) },
360     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFE00000000 ) },
361     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFF00000000 ) },
362     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFF80000000 ) },
363     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFC0000000 ) },
364     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFE0000000 ) },
365     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFF0000000 ) },
366     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFF8000000 ) },
367     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFC000000 ) },
368     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFE000000 ) },
369     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFF000000 ) },
370     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFF800000 ) },
371     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFC00000 ) },
372     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFE00000 ) },
373     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFF00000 ) },
374     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFF80000 ) },
375     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFC0000 ) },
376     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFE0000 ) },
377     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFF0000 ) },
378     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFF8000 ) },
379     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFC000 ) },
380     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFE000 ) },
381     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFF000 ) },
382     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFF800 ) },
383     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFC00 ) },
384     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFE00 ) },
385     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFF00 ) },
386     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFF80 ) },
387     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFC0 ) },
388     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFE0 ) },
389     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFF0 ) },
390     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFF8 ) },
391     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFC ) },
392     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFE ) },
393     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
394     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFD ) },
395     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFB ) },
396     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFF7 ) },
397     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFEF ) },
398     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFDF ) },
399     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFBF ) },
400     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFF7F ) },
401     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFEFF ) },
402     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFDFF ) },
403     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFBFF ) },
404     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFF7FF ) },
405     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFEFFF ) },
406     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFDFFF ) },
407     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFBFFF ) },
408     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFF7FFF ) },
409     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFEFFFF ) },
410     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFDFFFF ) },
411     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFBFFFF ) },
412     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFF7FFFF ) },
413     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFEFFFFF ) },
414     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFDFFFFF ) },
415     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFBFFFFF ) },
416     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFF7FFFFF ) },
417     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFEFFFFFF ) },
418     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFDFFFFFF ) },
419     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFBFFFFFF ) },
420     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFF7FFFFFF ) },
421     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFEFFFFFFF ) },
422     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFDFFFFFFF ) },
423     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFBFFFFFFF ) },
424     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFF7FFFFFFF ) },
425     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFEFFFFFFFF ) },
426     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFDFFFFFFFF ) },
427     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFBFFFFFFFF ) },
428     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFF7FFFFFFFF ) },
429     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFEFFFFFFFFF ) },
430     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFDFFFFFFFFF ) },
431     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFBFFFFFFFFF ) },
432     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFF7FFFFFFFFF ) },
433     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFEFFFFFFFFFF ) },
434     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFDFFFFFFFFFF ) },
435     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFBFFFFFFFFFF ) },
436     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFF7FFFFFFFFFF ) },
437     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFEFFFFFFFFFFF ) },
438     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFDFFFFFFFFFFF ) },
439     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFBFFFFFFFFFFF ) },
440     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFF7FFFFFFFFFFF ) },
441     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFEFFFFFFFFFFFF ) },
442     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFDFFFFFFFFFFFF ) },
443     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFBFFFFFFFFFFFF ) },
444     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFF7FFFFFFFFFFFF ) },
445     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFEFFFFFFFFFFFFF ) },
446     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFDFFFFFFFFFFFFF ) },
447     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFBFFFFFFFFFFFFF ) },
448     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFF7FFFFFFFFFFFFF ) },
449     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFEFFFFFFFFFFFFFF ) },
450     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFDFFFFFFFFFFFFFF ) },
451     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFBFFFFFFFFFFFFFF ) },
452     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xF7FFFFFFFFFFFFFF ) },
453     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xEFFFFFFFFFFFFFFF ) },
454     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xDFFFFFFFFFFFFFFF ) },
455     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xBFFFFFFFFFFFFFFF ) },
456     { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0x7FFFFFFFFFFFFFFF ) },
457     { UINT64_C( 0x0000FFFFFFFFFFFD ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
458     { UINT64_C( 0x0000FFFFFFFFFFFB ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
459     { UINT64_C( 0x0000FFFFFFFFFFF7 ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
460     { UINT64_C( 0x0000FFFFFFFFFFEF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
461     { UINT64_C( 0x0000FFFFFFFFFFDF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
462     { UINT64_C( 0x0000FFFFFFFFFFBF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
463     { UINT64_C( 0x0000FFFFFFFFFF7F ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
464     { UINT64_C( 0x0000FFFFFFFFFEFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
465     { UINT64_C( 0x0000FFFFFFFFFDFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
466     { UINT64_C( 0x0000FFFFFFFFFBFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
467     { UINT64_C( 0x0000FFFFFFFFF7FF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
468     { UINT64_C( 0x0000FFFFFFFFEFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
469     { UINT64_C( 0x0000FFFFFFFFDFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
470     { UINT64_C( 0x0000FFFFFFFFBFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
471     { UINT64_C( 0x0000FFFFFFFF7FFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
472     { UINT64_C( 0x0000FFFFFFFEFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
473     { UINT64_C( 0x0000FFFFFFFDFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
474     { UINT64_C( 0x0000FFFFFFFBFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
475     { UINT64_C( 0x0000FFFFFFF7FFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
476     { UINT64_C( 0x0000FFFFFFEFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
477     { UINT64_C( 0x0000FFFFFFDFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
478     { UINT64_C( 0x0000FFFFFFBFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
479     { UINT64_C( 0x0000FFFFFF7FFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
480     { UINT64_C( 0x0000FFFFFEFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
481     { UINT64_C( 0x0000FFFFFDFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
482     { UINT64_C( 0x0000FFFFFBFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
483     { UINT64_C( 0x0000FFFFF7FFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
484     { UINT64_C( 0x0000FFFFEFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
485     { UINT64_C( 0x0000FFFFDFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
486     { UINT64_C( 0x0000FFFFBFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
487     { UINT64_C( 0x0000FFFF7FFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
488     { UINT64_C( 0x0000FFFEFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
489     { UINT64_C( 0x0000FFFDFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
490     { UINT64_C( 0x0000FFFBFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
491     { UINT64_C( 0x0000FFF7FFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
492     { UINT64_C( 0x0000FFEFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
493     { UINT64_C( 0x0000FFDFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
494     { UINT64_C( 0x0000FFBFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
495     { UINT64_C( 0x0000FF7FFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
496     { UINT64_C( 0x0000FEFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
497     { UINT64_C( 0x0000FDFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
498     { UINT64_C( 0x0000FBFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
499     { UINT64_C( 0x0000F7FFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
500     { UINT64_C( 0x0000EFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
501     { UINT64_C( 0x0000DFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
502     { UINT64_C( 0x0000BFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
503     { UINT64_C( 0x00007FFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
504     { UINT64_C( 0x00003FFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
505     { UINT64_C( 0x00001FFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
506     { UINT64_C( 0x00000FFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
507     { UINT64_C( 0x000007FFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
508     { UINT64_C( 0x000003FFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
509     { UINT64_C( 0x000001FFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
510     { UINT64_C( 0x000000FFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
511     { UINT64_C( 0x0000007FFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
512     { UINT64_C( 0x0000003FFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
513     { UINT64_C( 0x0000001FFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
514     { UINT64_C( 0x0000000FFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
515     { UINT64_C( 0x00000007FFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
516     { UINT64_C( 0x00000003FFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
517     { UINT64_C( 0x00000001FFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
518     { UINT64_C( 0x00000000FFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
519     { UINT64_C( 0x000000007FFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
520     { UINT64_C( 0x000000003FFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
521     { UINT64_C( 0x000000001FFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
522     { UINT64_C( 0x000000000FFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
523     { UINT64_C( 0x0000000007FFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
524     { UINT64_C( 0x0000000003FFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
525     { UINT64_C( 0x0000000001FFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
526     { UINT64_C( 0x0000000000FFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
527     { UINT64_C( 0x00000000007FFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
528     { UINT64_C( 0x00000000003FFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
529     { UINT64_C( 0x00000000001FFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
530     { UINT64_C( 0x00000000000FFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
531     { UINT64_C( 0x000000000007FFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
532     { UINT64_C( 0x000000000003FFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
533     { UINT64_C( 0x000000000001FFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
534     { UINT64_C( 0x000000000000FFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
535     { UINT64_C( 0x0000000000007FFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
536     { UINT64_C( 0x0000000000003FFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
537     { UINT64_C( 0x0000000000001FFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
538     { UINT64_C( 0x0000000000000FFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
539     { UINT64_C( 0x00000000000007FF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
540     { UINT64_C( 0x00000000000003FF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
541     { UINT64_C( 0x00000000000001FF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
542     { UINT64_C( 0x00000000000000FF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
543     { UINT64_C( 0x000000000000007F ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
544     { UINT64_C( 0x000000000000003F ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
545     { UINT64_C( 0x000000000000001F ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
546     { UINT64_C( 0x000000000000000F ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
547     { UINT64_C( 0x0000000000000007 ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
548     { UINT64_C( 0x0000000000000003 ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
549     { UINT64_C( 0x0000000000000001 ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
550     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) },
551     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x7FFFFFFFFFFFFFFF ) },
552     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x3FFFFFFFFFFFFFFF ) },
553     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x1FFFFFFFFFFFFFFF ) },
554     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0FFFFFFFFFFFFFFF ) },
555     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x07FFFFFFFFFFFFFF ) },
556     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x03FFFFFFFFFFFFFF ) },
557     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x01FFFFFFFFFFFFFF ) },
558     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00FFFFFFFFFFFFFF ) },
559     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x007FFFFFFFFFFFFF ) },
560     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x003FFFFFFFFFFFFF ) },
561     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x001FFFFFFFFFFFFF ) },
562     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000FFFFFFFFFFFFF ) },
563     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0007FFFFFFFFFFFF ) },
564     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0003FFFFFFFFFFFF ) },
565     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0001FFFFFFFFFFFF ) },
566     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000FFFFFFFFFFFF ) },
567     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00007FFFFFFFFFFF ) },
568     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00003FFFFFFFFFFF ) },
569     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00001FFFFFFFFFFF ) },
570     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000FFFFFFFFFFF ) },
571     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000007FFFFFFFFFF ) },
572     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000003FFFFFFFFFF ) },
573     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000001FFFFFFFFFF ) },
574     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000FFFFFFFFFF ) },
575     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000007FFFFFFFFF ) },
576     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000003FFFFFFFFF ) },
577     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000001FFFFFFFFF ) },
578     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000FFFFFFFFF ) },
579     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000007FFFFFFFF ) },
580     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000003FFFFFFFF ) },
581     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000001FFFFFFFF ) },
582     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000000FFFFFFFF ) },
583     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000007FFFFFFF ) },
584     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000003FFFFFFF ) },
585     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000001FFFFFFF ) },
586     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000000FFFFFFF ) },
587     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000007FFFFFF ) },
588     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000003FFFFFF ) },
589     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000001FFFFFF ) },
590     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000FFFFFF ) },
591     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000000007FFFFF ) },
592     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000000003FFFFF ) },
593     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000000001FFFFF ) },
594     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000000000FFFFF ) },
595     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000000007FFFF ) },
596     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000000003FFFF ) },
597     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000000001FFFF ) },
598     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000000000FFFF ) },
599     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000007FFF ) },
600     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000003FFF ) },
601     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000001FFF ) },
602     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000FFF ) },
603     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000000000007FF ) },
604     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000000000003FF ) },
605     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000000000001FF ) },
606     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000000000000FF ) },
607     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000000000007F ) },
608     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000000000003F ) },
609     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000000000001F ) },
610     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000000000000F ) },
611     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000007 ) },
612     { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000003 ) }
613 };
614 
615 static const uint_fast64_t f128NumQInP1 = f128NumQIn * f128NumP1;
616 static const uint_fast64_t f128NumQOutP1 = f128NumQOut * f128NumP1;
617 
f128NextQInP1(struct sequence * sequencePtr,float128_t * zPtr)618 static void f128NextQInP1( struct sequence *sequencePtr, float128_t *zPtr )
619 {
620     struct uint128 *uiZPtr;
621     int expNum, sigNum;
622 
623     uiZPtr = (struct uint128 *) zPtr;
624     expNum = sequencePtr->expNum;
625     sigNum = sequencePtr->term1Num;
626     uiZPtr->v64 = f128QIn[expNum] | f128P1[sigNum].v64;
627     uiZPtr->v0  = f128P1[sigNum].v0;
628     ++sigNum;
629     if ( f128NumP1 <= sigNum ) {
630         sigNum = 0;
631         ++expNum;
632         if ( f128NumQIn <= expNum ) {
633             expNum = 0;
634             sequencePtr->done = true;
635         }
636         sequencePtr->expNum = expNum;
637     }
638     sequencePtr->term1Num = sigNum;
639 
640 }
641 
f128NextQOutP1(struct sequence * sequencePtr,float128_t * zPtr)642 static void f128NextQOutP1( struct sequence *sequencePtr, float128_t *zPtr )
643 {
644     struct uint128 *uiZPtr;
645     int expNum, sigNum;
646 
647     uiZPtr = (struct uint128 *) zPtr;
648     expNum = sequencePtr->expNum;
649     sigNum = sequencePtr->term1Num;
650     uiZPtr->v64 = f128QOut[expNum] | f128P1[sigNum].v64;
651     uiZPtr->v0 = f128P1[sigNum].v0;
652     ++sigNum;
653     if ( f128NumP1 <= sigNum ) {
654         sigNum = 0;
655         ++expNum;
656         if ( f128NumQOut <= expNum ) {
657             expNum = 0;
658             sequencePtr->done = true;
659         }
660         sequencePtr->expNum = expNum;
661     }
662     sequencePtr->term1Num = sigNum;
663 
664 }
665 
666 static const uint_fast64_t f128NumQInP2 = f128NumQIn * f128NumP2;
667 static const uint_fast64_t f128NumQOutP2 = f128NumQOut * f128NumP2;
668 
f128NextQInP2(struct sequence * sequencePtr,float128_t * zPtr)669 static void f128NextQInP2( struct sequence *sequencePtr, float128_t *zPtr )
670 {
671     struct uint128 *uiZPtr;
672     int expNum, sigNum;
673 
674     uiZPtr = (struct uint128 *) zPtr;
675     expNum = sequencePtr->expNum;
676     sigNum = sequencePtr->term1Num;
677     uiZPtr->v64 = f128QIn[expNum] | f128P2[sigNum].v64;
678     uiZPtr->v0 = f128P2[sigNum].v0;
679     ++sigNum;
680     if ( f128NumP2 <= sigNum ) {
681         sigNum = 0;
682         ++expNum;
683         if ( f128NumQIn <= expNum ) {
684             expNum = 0;
685             sequencePtr->done = true;
686         }
687         sequencePtr->expNum = expNum;
688     }
689     sequencePtr->term1Num = sigNum;
690 
691 }
692 
f128NextQOutP2(struct sequence * sequencePtr,float128_t * zPtr)693 static void f128NextQOutP2( struct sequence *sequencePtr, float128_t *zPtr )
694 {
695     struct uint128 *uiZPtr;
696     int expNum, sigNum;
697 
698     uiZPtr = (struct uint128 *) zPtr;
699     expNum = sequencePtr->expNum;
700     sigNum = sequencePtr->term1Num;
701     uiZPtr->v64 = f128QOut[expNum] | f128P2[sigNum].v64;
702     uiZPtr->v0 = f128P2[sigNum].v0;
703     ++sigNum;
704     if ( f128NumP2 <= sigNum ) {
705         sigNum = 0;
706         ++expNum;
707         if ( f128NumQOut <= expNum ) {
708             expNum = 0;
709             sequencePtr->done = true;
710         }
711         sequencePtr->expNum = expNum;
712     }
713     sequencePtr->term1Num = sigNum;
714 
715 }
716 
f128RandomQOutP3(float128_t * zPtr)717 static void f128RandomQOutP3( float128_t *zPtr )
718 {
719     struct uint128 *uiZPtr;
720     int sigNum1, sigNum2;
721     uint_fast64_t sig1_0;
722 
723     uiZPtr = (struct uint128 *) zPtr;
724     sigNum1 = randomN_ui16( f128NumP2 );
725     sigNum2 = randomN_ui16( f128NumP2 );
726     sig1_0 = f128P2[sigNum1].v0;
727     uiZPtr->v0 = sig1_0 + f128P2[sigNum2].v0;
728     uiZPtr->v64 =
729           f128QOut[randomN_ui8( f128NumQOut )]
730         | ((f128P2[sigNum1].v64 + f128P2[sigNum2].v64 + (uiZPtr->v0 < sig1_0))
731                & UINT64_C( 0x0000FFFFFFFFFFFF ));
732 
733 }
734 
f128RandomQOutPInf(float128_t * zPtr)735 static void f128RandomQOutPInf( float128_t *zPtr )
736 {
737     struct uint128 *uiZPtr;
738 
739     uiZPtr = (struct uint128 *) zPtr;
740     uiZPtr->v64 =
741           f128QOut[randomN_ui8( f128NumQOut )]
742         | (random_ui64() & UINT64_C( 0x0000FFFFFFFFFFFF ));
743     uiZPtr->v0 = random_ui64();
744 
745 }
746 
747 enum { f128NumQInfWeightMasks = 14 };
748 static const uint64_t f128QInfWeightMasks[f128NumQInfWeightMasks] = {
749     UINT64_C( 0xFFFF000000000000 ),
750     UINT64_C( 0xFFFF000000000000 ),
751     UINT64_C( 0xBFFF000000000000 ),
752     UINT64_C( 0x9FFF000000000000 ),
753     UINT64_C( 0x87FF000000000000 ),
754     UINT64_C( 0x87FF000000000000 ),
755     UINT64_C( 0x83FF000000000000 ),
756     UINT64_C( 0x81FF000000000000 ),
757     UINT64_C( 0x80FF000000000000 ),
758     UINT64_C( 0x807F000000000000 ),
759     UINT64_C( 0x803F000000000000 ),
760     UINT64_C( 0x801F000000000000 ),
761     UINT64_C( 0x800F000000000000 ),
762     UINT64_C( 0x8007000000000000 )
763 };
764 static const uint64_t f128QInfWeightOffsets[f128NumQInfWeightMasks] = {
765     UINT64_C( 0x0000000000000000 ),
766     UINT64_C( 0x0000000000000000 ),
767     UINT64_C( 0x2000000000000000 ),
768     UINT64_C( 0x3000000000000000 ),
769     UINT64_C( 0x3800000000000000 ),
770     UINT64_C( 0x3C00000000000000 ),
771     UINT64_C( 0x3E00000000000000 ),
772     UINT64_C( 0x3F00000000000000 ),
773     UINT64_C( 0x3F80000000000000 ),
774     UINT64_C( 0x3FC0000000000000 ),
775     UINT64_C( 0x3FE0000000000000 ),
776     UINT64_C( 0x3FF0000000000000 ),
777     UINT64_C( 0x3FF8000000000000 ),
778     UINT64_C( 0x3FFC000000000000 )
779 };
780 
f128RandomQInfP3(float128_t * zPtr)781 static void f128RandomQInfP3( float128_t *zPtr )
782 {
783     struct uint128 *uiZPtr;
784     int sigNum1, sigNum2;
785     uint_fast64_t sig1_0;
786     int weightMaskNum;
787 
788     uiZPtr = (struct uint128 *) zPtr;
789     sigNum1 = randomN_ui16( f128NumP2 );
790     sigNum2 = randomN_ui16( f128NumP2 );
791     sig1_0 = f128P2[sigNum1].v0;
792     uiZPtr->v0 = sig1_0 + f128P2[sigNum2].v0;
793     weightMaskNum = randomN_ui8( f128NumQInfWeightMasks );
794     uiZPtr->v64 =
795           (((uint_fast64_t) random_ui16()<<48
796                 & f128QInfWeightMasks[weightMaskNum])
797                + f128QInfWeightOffsets[weightMaskNum])
798         | ((f128P2[sigNum1].v64 + f128P2[sigNum2].v64 + (uiZPtr->v0 < sig1_0))
799                & UINT64_C( 0x0000FFFFFFFFFFFF ));
800 
801 }
802 
f128RandomQInfPInf(float128_t * zPtr)803 static void f128RandomQInfPInf( float128_t *zPtr )
804 {
805     struct uint128 *uiZPtr;
806     int weightMaskNum;
807 
808     uiZPtr = (struct uint128 *) zPtr;
809     weightMaskNum = randomN_ui8( f128NumQInfWeightMasks );
810     uiZPtr->v64 =
811         (random_ui64()
812              & (f128QInfWeightMasks[weightMaskNum]
813                     | UINT64_C( 0x0000FFFFFFFFFFFF )))
814             + f128QInfWeightOffsets[weightMaskNum];
815     uiZPtr->v0 = random_ui64();
816 
817 }
818 
f128Random(float128_t * zPtr)819 static void f128Random( float128_t *zPtr )
820 {
821 
822     switch ( random_ui8() & 7 ) {
823      case 0:
824      case 1:
825      case 2:
826         f128RandomQOutP3( zPtr );
827         break;
828      case 3:
829         f128RandomQOutPInf( zPtr );
830         break;
831      case 4:
832      case 5:
833      case 6:
834         f128RandomQInfP3( zPtr );
835         break;
836      case 7:
837         f128RandomQInfPInf( zPtr );
838         break;
839     }
840 
841 }
842 
843 static struct sequence sequenceA, sequenceB, sequenceC;
844 static float128_t currentA, currentB, currentC;
845 static int subcase;
846 
847 float128_t genCases_f128_a, genCases_f128_b, genCases_f128_c;
848 
genCases_f128_a_init(void)849 void genCases_f128_a_init( void )
850 {
851 
852     sequenceA.expNum = 0;
853     sequenceA.term1Num = 0;
854     sequenceA.term2Num = 0;
855     sequenceA.done = false;
856     subcase = 0;
857     genCases_total =
858         (genCases_level == 1) ? 3 * f128NumQOutP1 : 2 * f128NumQOutP2;
859     genCases_done = false;
860 
861 }
862 
genCases_f128_a_next(void)863 void genCases_f128_a_next( void )
864 {
865 
866     if ( genCases_level == 1 ) {
867         switch ( subcase ) {
868          case 0:
869          case 1:
870             f128Random( &genCases_f128_a );
871             break;
872          case 2:
873             f128NextQOutP1( &sequenceA, &genCases_f128_a );
874             genCases_done = sequenceA.done;
875             subcase = -1;
876             break;
877         }
878      } else {
879         switch ( subcase ) {
880          case 0:
881             f128Random( &genCases_f128_a );
882             break;
883          case 1:
884             f128NextQOutP2( &sequenceA, &genCases_f128_a );
885             genCases_done = sequenceA.done;
886             subcase = -1;
887             break;
888         }
889     }
890     ++subcase;
891 
892 }
893 
genCases_f128_ab_init(void)894 void genCases_f128_ab_init( void )
895 {
896 
897     sequenceA.expNum = 0;
898     sequenceA.term1Num = 0;
899     sequenceA.term2Num = 0;
900     sequenceA.done = false;
901     sequenceB.expNum = 0;
902     sequenceB.term1Num = 0;
903     sequenceB.term2Num = 0;
904     sequenceB.done = false;
905     subcase = 0;
906     if ( genCases_level == 1 ) {
907         genCases_total = 6 * f128NumQInP1 * f128NumQInP1;
908         f128NextQInP1( &sequenceA, &currentA );
909     } else {
910         genCases_total = 2 * f128NumQInP2 * f128NumQInP2;
911         f128NextQInP2( &sequenceA, &currentA );
912     }
913     genCases_done = false;
914 
915 }
916 
genCases_f128_ab_next(void)917 void genCases_f128_ab_next( void )
918 {
919 
920     if ( genCases_level == 1 ) {
921         switch ( subcase ) {
922          case 0:
923             if ( sequenceB.done ) {
924                 sequenceB.done = false;
925                 f128NextQInP1( &sequenceA, &currentA );
926             }
927             f128NextQInP1( &sequenceB, &currentB );
928          case 2:
929          case 4:
930             f128Random( &genCases_f128_a );
931             f128Random( &genCases_f128_b );
932             break;
933          case 1:
934             genCases_f128_a = currentA;
935             f128Random( &genCases_f128_b );
936             break;
937          case 3:
938             f128Random( &genCases_f128_a );
939             genCases_f128_b = currentB;
940             break;
941          case 5:
942             genCases_f128_a = currentA;
943             genCases_f128_b = currentB;
944             genCases_done = sequenceA.done & sequenceB.done;
945             subcase = -1;
946             break;
947         }
948     } else {
949         switch ( subcase ) {
950          case 0:
951             f128Random( &genCases_f128_a );
952             f128Random( &genCases_f128_b );
953             break;
954          case 1:
955             if ( sequenceB.done ) {
956                 sequenceB.done = false;
957                 f128NextQInP2( &sequenceA, &currentA );
958             }
959             genCases_f128_a = currentA;
960             f128NextQInP2( &sequenceB, &genCases_f128_b );
961             genCases_done = sequenceA.done & sequenceB.done;
962             subcase = -1;
963             break;
964         }
965     }
966     ++subcase;
967 
968 }
969 
genCases_f128_abc_init(void)970 void genCases_f128_abc_init( void )
971 {
972 
973     sequenceA.expNum = 0;
974     sequenceA.term1Num = 0;
975     sequenceA.term2Num = 0;
976     sequenceA.done = false;
977     sequenceB.expNum = 0;
978     sequenceB.term1Num = 0;
979     sequenceB.term2Num = 0;
980     sequenceB.done = false;
981     sequenceC.expNum = 0;
982     sequenceC.term1Num = 0;
983     sequenceC.term2Num = 0;
984     sequenceC.done = false;
985     subcase = 0;
986     if ( genCases_level == 1 ) {
987         genCases_total = 9 * f128NumQInP1 * f128NumQInP1 * f128NumQInP1;
988         f128NextQInP1( &sequenceA, &currentA );
989         f128NextQInP1( &sequenceB, &currentB );
990     } else {
991         genCases_total = 2 * f128NumQInP2 * f128NumQInP2 * f128NumQInP2;
992         f128NextQInP2( &sequenceA, &currentA );
993         f128NextQInP2( &sequenceB, &currentB );
994     }
995     genCases_done = false;
996 
997 }
998 
genCases_f128_abc_next(void)999 void genCases_f128_abc_next( void )
1000 {
1001 
1002     if ( genCases_level == 1 ) {
1003         switch ( subcase ) {
1004          case 0:
1005             if ( sequenceC.done ) {
1006                 sequenceC.done = false;
1007                 if ( sequenceB.done ) {
1008                     sequenceB.done = false;
1009                     f128NextQInP1( &sequenceA, &currentA );
1010                 }
1011                 f128NextQInP1( &sequenceB, &currentB );
1012             }
1013             f128NextQInP1( &sequenceC, &currentC );
1014             f128Random( &genCases_f128_a );
1015             f128Random( &genCases_f128_b );
1016             genCases_f128_c = currentC;
1017             break;
1018          case 1:
1019             genCases_f128_a = currentA;
1020             genCases_f128_b = currentB;
1021             f128Random( &genCases_f128_c );
1022             break;
1023          case 2:
1024             f128Random( &genCases_f128_a );
1025             f128Random( &genCases_f128_b );
1026             f128Random( &genCases_f128_c );
1027             break;
1028          case 3:
1029             f128Random( &genCases_f128_a );
1030             genCases_f128_b = currentB;
1031             genCases_f128_c = currentC;
1032             break;
1033          case 4:
1034             genCases_f128_a = currentA;
1035             f128Random( &genCases_f128_b );
1036             f128Random( &genCases_f128_c );
1037             break;
1038          case 5:
1039             f128Random( &genCases_f128_a );
1040             genCases_f128_b = currentB;
1041             f128Random( &genCases_f128_c );
1042             break;
1043          case 6:
1044             genCases_f128_a = currentA;
1045             f128Random( &genCases_f128_b );
1046             genCases_f128_c = currentC;
1047             break;
1048          case 7:
1049             f128Random( &genCases_f128_a );
1050             f128Random( &genCases_f128_b );
1051             f128Random( &genCases_f128_c );
1052             break;
1053          case 8:
1054             genCases_f128_a = currentA;
1055             genCases_f128_b = currentB;
1056             genCases_f128_c = currentC;
1057             genCases_done = sequenceA.done & sequenceB.done & sequenceC.done;
1058             subcase = -1;
1059             break;
1060         }
1061     } else {
1062         switch ( subcase ) {
1063          case 0:
1064             f128Random( &genCases_f128_a );
1065             f128Random( &genCases_f128_b );
1066             f128Random( &genCases_f128_c );
1067             break;
1068          case 1:
1069             if ( sequenceC.done ) {
1070                 sequenceC.done = false;
1071                 if ( sequenceB.done ) {
1072                     sequenceB.done = false;
1073                     f128NextQInP2( &sequenceA, &currentA );
1074                 }
1075                 f128NextQInP2( &sequenceB, &currentB );
1076             }
1077             genCases_f128_a = currentA;
1078             genCases_f128_b = currentB;
1079             f128NextQInP2( &sequenceC, &genCases_f128_c );
1080             genCases_done = sequenceA.done & sequenceB.done & sequenceC.done;
1081             subcase = -1;
1082             break;
1083         }
1084     }
1085     ++subcase;
1086 
1087 }
1088 
1089 #endif
1090 
1091