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