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