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