VirtualBox

source: vbox/trunk/src/libs/softfloat-3e/testfloat/source/genCases_i64.c@ 105786

最後變更 在這個檔案從105786是 94551,由 vboxsync 提交於 3 年 前

libs/softfloat: Copied TestFloat-3e from vendor branch and to testfloat subdir. bugref:9898

  • 屬性 svn:eol-style 設為 native
檔案大小: 18.0 KB
 
1
2/*============================================================================
3
4This C source file is part of TestFloat, Release 3e, a package of programs for
5testing the correctness of floating-point arithmetic complying with the IEEE
6Standard for Floating-Point, by John R. Hauser.
7
8Copyright 2011, 2012, 2013, 2014 The Regents of the University of California.
9All rights reserved.
10
11Redistribution and use in source and binary forms, with or without
12modification, are permitted provided that the following conditions are met:
13
14 1. Redistributions of source code must retain the above copyright notice,
15 this list of conditions, and the following disclaimer.
16
17 2. Redistributions in binary form must reproduce the above copyright notice,
18 this list of conditions, and the following disclaimer in the documentation
19 and/or other materials provided with the distribution.
20
21 3. Neither the name of the University nor the names of its contributors may
22 be used to endorse or promote products derived from this software without
23 specific prior written permission.
24
25THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY
26EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
27WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE
28DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
29DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
30(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
32ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
33(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
34SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35
36=============================================================================*/
37
38#include <stdbool.h>
39#include <stdint.h>
40#include "platform.h"
41#include "random.h"
42#include "genCases.h"
43
44struct sequence {
45 int term1Num, term2Num;
46 bool done;
47};
48
49union ui64_i64 { uint64_t ui; int64_t i; };
50
51enum { i64NumP1 = 252 };
52static const uint64_t i64P1[i64NumP1] = {
53 UINT64_C( 0x0000000000000000 ),
54 UINT64_C( 0x0000000000000001 ),
55 UINT64_C( 0x0000000000000002 ),
56 UINT64_C( 0x0000000000000004 ),
57 UINT64_C( 0x0000000000000008 ),
58 UINT64_C( 0x0000000000000010 ),
59 UINT64_C( 0x0000000000000020 ),
60 UINT64_C( 0x0000000000000040 ),
61 UINT64_C( 0x0000000000000080 ),
62 UINT64_C( 0x0000000000000100 ),
63 UINT64_C( 0x0000000000000200 ),
64 UINT64_C( 0x0000000000000400 ),
65 UINT64_C( 0x0000000000000800 ),
66 UINT64_C( 0x0000000000001000 ),
67 UINT64_C( 0x0000000000002000 ),
68 UINT64_C( 0x0000000000004000 ),
69 UINT64_C( 0x0000000000008000 ),
70 UINT64_C( 0x0000000000010000 ),
71 UINT64_C( 0x0000000000020000 ),
72 UINT64_C( 0x0000000000040000 ),
73 UINT64_C( 0x0000000000080000 ),
74 UINT64_C( 0x0000000000100000 ),
75 UINT64_C( 0x0000000000200000 ),
76 UINT64_C( 0x0000000000400000 ),
77 UINT64_C( 0x0000000000800000 ),
78 UINT64_C( 0x0000000001000000 ),
79 UINT64_C( 0x0000000002000000 ),
80 UINT64_C( 0x0000000004000000 ),
81 UINT64_C( 0x0000000008000000 ),
82 UINT64_C( 0x0000000010000000 ),
83 UINT64_C( 0x0000000020000000 ),
84 UINT64_C( 0x0000000040000000 ),
85 UINT64_C( 0x0000000080000000 ),
86 UINT64_C( 0x0000000100000000 ),
87 UINT64_C( 0x0000000200000000 ),
88 UINT64_C( 0x0000000400000000 ),
89 UINT64_C( 0x0000000800000000 ),
90 UINT64_C( 0x0000001000000000 ),
91 UINT64_C( 0x0000002000000000 ),
92 UINT64_C( 0x0000004000000000 ),
93 UINT64_C( 0x0000008000000000 ),
94 UINT64_C( 0x0000010000000000 ),
95 UINT64_C( 0x0000020000000000 ),
96 UINT64_C( 0x0000040000000000 ),
97 UINT64_C( 0x0000080000000000 ),
98 UINT64_C( 0x0000100000000000 ),
99 UINT64_C( 0x0000200000000000 ),
100 UINT64_C( 0x0000400000000000 ),
101 UINT64_C( 0x0000800000000000 ),
102 UINT64_C( 0x0001000000000000 ),
103 UINT64_C( 0x0002000000000000 ),
104 UINT64_C( 0x0004000000000000 ),
105 UINT64_C( 0x0008000000000000 ),
106 UINT64_C( 0x0010000000000000 ),
107 UINT64_C( 0x0020000000000000 ),
108 UINT64_C( 0x0040000000000000 ),
109 UINT64_C( 0x0080000000000000 ),
110 UINT64_C( 0x0100000000000000 ),
111 UINT64_C( 0x0200000000000000 ),
112 UINT64_C( 0x0400000000000000 ),
113 UINT64_C( 0x0800000000000000 ),
114 UINT64_C( 0x1000000000000000 ),
115 UINT64_C( 0x2000000000000000 ),
116 UINT64_C( 0x4000000000000000 ),
117 UINT64_C( 0x8000000000000000 ),
118 UINT64_C( 0xC000000000000000 ),
119 UINT64_C( 0xE000000000000000 ),
120 UINT64_C( 0xF000000000000000 ),
121 UINT64_C( 0xF800000000000000 ),
122 UINT64_C( 0xFC00000000000000 ),
123 UINT64_C( 0xFE00000000000000 ),
124 UINT64_C( 0xFF00000000000000 ),
125 UINT64_C( 0xFF80000000000000 ),
126 UINT64_C( 0xFFC0000000000000 ),
127 UINT64_C( 0xFFE0000000000000 ),
128 UINT64_C( 0xFFF0000000000000 ),
129 UINT64_C( 0xFFF8000000000000 ),
130 UINT64_C( 0xFFFC000000000000 ),
131 UINT64_C( 0xFFFE000000000000 ),
132 UINT64_C( 0xFFFF000000000000 ),
133 UINT64_C( 0xFFFF800000000000 ),
134 UINT64_C( 0xFFFFC00000000000 ),
135 UINT64_C( 0xFFFFE00000000000 ),
136 UINT64_C( 0xFFFFF00000000000 ),
137 UINT64_C( 0xFFFFF80000000000 ),
138 UINT64_C( 0xFFFFFC0000000000 ),
139 UINT64_C( 0xFFFFFE0000000000 ),
140 UINT64_C( 0xFFFFFF0000000000 ),
141 UINT64_C( 0xFFFFFF8000000000 ),
142 UINT64_C( 0xFFFFFFC000000000 ),
143 UINT64_C( 0xFFFFFFE000000000 ),
144 UINT64_C( 0xFFFFFFF000000000 ),
145 UINT64_C( 0xFFFFFFF800000000 ),
146 UINT64_C( 0xFFFFFFFC00000000 ),
147 UINT64_C( 0xFFFFFFFE00000000 ),
148 UINT64_C( 0xFFFFFFFF00000000 ),
149 UINT64_C( 0xFFFFFFFF80000000 ),
150 UINT64_C( 0xFFFFFFFFC0000000 ),
151 UINT64_C( 0xFFFFFFFFE0000000 ),
152 UINT64_C( 0xFFFFFFFFF0000000 ),
153 UINT64_C( 0xFFFFFFFFF8000000 ),
154 UINT64_C( 0xFFFFFFFFFC000000 ),
155 UINT64_C( 0xFFFFFFFFFE000000 ),
156 UINT64_C( 0xFFFFFFFFFF000000 ),
157 UINT64_C( 0xFFFFFFFFFF800000 ),
158 UINT64_C( 0xFFFFFFFFFFC00000 ),
159 UINT64_C( 0xFFFFFFFFFFE00000 ),
160 UINT64_C( 0xFFFFFFFFFFF00000 ),
161 UINT64_C( 0xFFFFFFFFFFF80000 ),
162 UINT64_C( 0xFFFFFFFFFFFC0000 ),
163 UINT64_C( 0xFFFFFFFFFFFE0000 ),
164 UINT64_C( 0xFFFFFFFFFFFF0000 ),
165 UINT64_C( 0xFFFFFFFFFFFF8000 ),
166 UINT64_C( 0xFFFFFFFFFFFFC000 ),
167 UINT64_C( 0xFFFFFFFFFFFFE000 ),
168 UINT64_C( 0xFFFFFFFFFFFFF000 ),
169 UINT64_C( 0xFFFFFFFFFFFFF800 ),
170 UINT64_C( 0xFFFFFFFFFFFFFC00 ),
171 UINT64_C( 0xFFFFFFFFFFFFFE00 ),
172 UINT64_C( 0xFFFFFFFFFFFFFF00 ),
173 UINT64_C( 0xFFFFFFFFFFFFFF80 ),
174 UINT64_C( 0xFFFFFFFFFFFFFFC0 ),
175 UINT64_C( 0xFFFFFFFFFFFFFFE0 ),
176 UINT64_C( 0xFFFFFFFFFFFFFFF0 ),
177 UINT64_C( 0xFFFFFFFFFFFFFFF8 ),
178 UINT64_C( 0xFFFFFFFFFFFFFFFC ),
179 UINT64_C( 0xFFFFFFFFFFFFFFFE ),
180 UINT64_C( 0xFFFFFFFFFFFFFFFF ),
181 UINT64_C( 0xFFFFFFFFFFFFFFFD ),
182 UINT64_C( 0xFFFFFFFFFFFFFFFB ),
183 UINT64_C( 0xFFFFFFFFFFFFFFF7 ),
184 UINT64_C( 0xFFFFFFFFFFFFFFEF ),
185 UINT64_C( 0xFFFFFFFFFFFFFFDF ),
186 UINT64_C( 0xFFFFFFFFFFFFFFBF ),
187 UINT64_C( 0xFFFFFFFFFFFFFF7F ),
188 UINT64_C( 0xFFFFFFFFFFFFFEFF ),
189 UINT64_C( 0xFFFFFFFFFFFFFDFF ),
190 UINT64_C( 0xFFFFFFFFFFFFFBFF ),
191 UINT64_C( 0xFFFFFFFFFFFFF7FF ),
192 UINT64_C( 0xFFFFFFFFFFFFEFFF ),
193 UINT64_C( 0xFFFFFFFFFFFFDFFF ),
194 UINT64_C( 0xFFFFFFFFFFFFBFFF ),
195 UINT64_C( 0xFFFFFFFFFFFF7FFF ),
196 UINT64_C( 0xFFFFFFFFFFFEFFFF ),
197 UINT64_C( 0xFFFFFFFFFFFDFFFF ),
198 UINT64_C( 0xFFFFFFFFFFFBFFFF ),
199 UINT64_C( 0xFFFFFFFFFFF7FFFF ),
200 UINT64_C( 0xFFFFFFFFFFEFFFFF ),
201 UINT64_C( 0xFFFFFFFFFFDFFFFF ),
202 UINT64_C( 0xFFFFFFFFFFBFFFFF ),
203 UINT64_C( 0xFFFFFFFFFF7FFFFF ),
204 UINT64_C( 0xFFFFFFFFFEFFFFFF ),
205 UINT64_C( 0xFFFFFFFFFDFFFFFF ),
206 UINT64_C( 0xFFFFFFFFFBFFFFFF ),
207 UINT64_C( 0xFFFFFFFFF7FFFFFF ),
208 UINT64_C( 0xFFFFFFFFEFFFFFFF ),
209 UINT64_C( 0xFFFFFFFFDFFFFFFF ),
210 UINT64_C( 0xFFFFFFFFBFFFFFFF ),
211 UINT64_C( 0xFFFFFFFF7FFFFFFF ),
212 UINT64_C( 0xFFFFFFFEFFFFFFFF ),
213 UINT64_C( 0xFFFFFFFDFFFFFFFF ),
214 UINT64_C( 0xFFFFFFFBFFFFFFFF ),
215 UINT64_C( 0xFFFFFFF7FFFFFFFF ),
216 UINT64_C( 0xFFFFFFEFFFFFFFFF ),
217 UINT64_C( 0xFFFFFFDFFFFFFFFF ),
218 UINT64_C( 0xFFFFFFBFFFFFFFFF ),
219 UINT64_C( 0xFFFFFF7FFFFFFFFF ),
220 UINT64_C( 0xFFFFFEFFFFFFFFFF ),
221 UINT64_C( 0xFFFFFDFFFFFFFFFF ),
222 UINT64_C( 0xFFFFFBFFFFFFFFFF ),
223 UINT64_C( 0xFFFFF7FFFFFFFFFF ),
224 UINT64_C( 0xFFFFEFFFFFFFFFFF ),
225 UINT64_C( 0xFFFFDFFFFFFFFFFF ),
226 UINT64_C( 0xFFFFBFFFFFFFFFFF ),
227 UINT64_C( 0xFFFF7FFFFFFFFFFF ),
228 UINT64_C( 0xFFFEFFFFFFFFFFFF ),
229 UINT64_C( 0xFFFDFFFFFFFFFFFF ),
230 UINT64_C( 0xFFFBFFFFFFFFFFFF ),
231 UINT64_C( 0xFFF7FFFFFFFFFFFF ),
232 UINT64_C( 0xFFEFFFFFFFFFFFFF ),
233 UINT64_C( 0xFFDFFFFFFFFFFFFF ),
234 UINT64_C( 0xFFBFFFFFFFFFFFFF ),
235 UINT64_C( 0xFF7FFFFFFFFFFFFF ),
236 UINT64_C( 0xFEFFFFFFFFFFFFFF ),
237 UINT64_C( 0xFDFFFFFFFFFFFFFF ),
238 UINT64_C( 0xFBFFFFFFFFFFFFFF ),
239 UINT64_C( 0xF7FFFFFFFFFFFFFF ),
240 UINT64_C( 0xEFFFFFFFFFFFFFFF ),
241 UINT64_C( 0xDFFFFFFFFFFFFFFF ),
242 UINT64_C( 0xBFFFFFFFFFFFFFFF ),
243 UINT64_C( 0x7FFFFFFFFFFFFFFF ),
244 UINT64_C( 0x3FFFFFFFFFFFFFFF ),
245 UINT64_C( 0x1FFFFFFFFFFFFFFF ),
246 UINT64_C( 0x0FFFFFFFFFFFFFFF ),
247 UINT64_C( 0x07FFFFFFFFFFFFFF ),
248 UINT64_C( 0x03FFFFFFFFFFFFFF ),
249 UINT64_C( 0x01FFFFFFFFFFFFFF ),
250 UINT64_C( 0x00FFFFFFFFFFFFFF ),
251 UINT64_C( 0x007FFFFFFFFFFFFF ),
252 UINT64_C( 0x003FFFFFFFFFFFFF ),
253 UINT64_C( 0x001FFFFFFFFFFFFF ),
254 UINT64_C( 0x000FFFFFFFFFFFFF ),
255 UINT64_C( 0x0007FFFFFFFFFFFF ),
256 UINT64_C( 0x0003FFFFFFFFFFFF ),
257 UINT64_C( 0x0001FFFFFFFFFFFF ),
258 UINT64_C( 0x0000FFFFFFFFFFFF ),
259 UINT64_C( 0x00007FFFFFFFFFFF ),
260 UINT64_C( 0x00003FFFFFFFFFFF ),
261 UINT64_C( 0x00001FFFFFFFFFFF ),
262 UINT64_C( 0x00000FFFFFFFFFFF ),
263 UINT64_C( 0x000007FFFFFFFFFF ),
264 UINT64_C( 0x000003FFFFFFFFFF ),
265 UINT64_C( 0x000001FFFFFFFFFF ),
266 UINT64_C( 0x000000FFFFFFFFFF ),
267 UINT64_C( 0x0000007FFFFFFFFF ),
268 UINT64_C( 0x0000003FFFFFFFFF ),
269 UINT64_C( 0x0000001FFFFFFFFF ),
270 UINT64_C( 0x0000000FFFFFFFFF ),
271 UINT64_C( 0x00000007FFFFFFFF ),
272 UINT64_C( 0x00000003FFFFFFFF ),
273 UINT64_C( 0x00000001FFFFFFFF ),
274 UINT64_C( 0x00000000FFFFFFFF ),
275 UINT64_C( 0x000000007FFFFFFF ),
276 UINT64_C( 0x000000003FFFFFFF ),
277 UINT64_C( 0x000000001FFFFFFF ),
278 UINT64_C( 0x000000000FFFFFFF ),
279 UINT64_C( 0x0000000007FFFFFF ),
280 UINT64_C( 0x0000000003FFFFFF ),
281 UINT64_C( 0x0000000001FFFFFF ),
282 UINT64_C( 0x0000000000FFFFFF ),
283 UINT64_C( 0x00000000007FFFFF ),
284 UINT64_C( 0x00000000003FFFFF ),
285 UINT64_C( 0x00000000001FFFFF ),
286 UINT64_C( 0x00000000000FFFFF ),
287 UINT64_C( 0x000000000007FFFF ),
288 UINT64_C( 0x000000000003FFFF ),
289 UINT64_C( 0x000000000001FFFF ),
290 UINT64_C( 0x000000000000FFFF ),
291 UINT64_C( 0x0000000000007FFF ),
292 UINT64_C( 0x0000000000003FFF ),
293 UINT64_C( 0x0000000000001FFF ),
294 UINT64_C( 0x0000000000000FFF ),
295 UINT64_C( 0x00000000000007FF ),
296 UINT64_C( 0x00000000000003FF ),
297 UINT64_C( 0x00000000000001FF ),
298 UINT64_C( 0x00000000000000FF ),
299 UINT64_C( 0x000000000000007F ),
300 UINT64_C( 0x000000000000003F ),
301 UINT64_C( 0x000000000000001F ),
302 UINT64_C( 0x000000000000000F ),
303 UINT64_C( 0x0000000000000007 ),
304 UINT64_C( 0x0000000000000003 )
305};
306
307static int64_t i64NextP1( struct sequence *sequencePtr )
308{
309 int termNum;
310 union ui64_i64 uZ;
311
312 termNum = sequencePtr->term1Num;
313 uZ.ui = i64P1[termNum];
314 ++termNum;
315 if ( i64NumP1 <= termNum ) {
316 termNum = 0;
317 sequencePtr->done = true;
318 }
319 sequencePtr->term1Num = termNum;
320 return uZ.i;
321
322}
323
324static const int_fast64_t i64NumP2 = (i64NumP1 * i64NumP1 + i64NumP1) / 2;
325
326static int64_t i64NextP2( struct sequence *sequencePtr )
327{
328 int term1Num, term2Num;
329 union ui64_i64 uZ;
330
331 term2Num = sequencePtr->term2Num;
332 term1Num = sequencePtr->term1Num;
333 uZ.ui = i64P1[term1Num] + i64P1[term2Num];
334 ++term2Num;
335 if ( i64NumP1 <= term2Num ) {
336 ++term1Num;
337 if ( i64NumP1 <= term1Num ) {
338 term1Num = 0;
339 sequencePtr->done = true;
340 }
341 term2Num = term1Num;
342 sequencePtr->term1Num = term1Num;
343 }
344 sequencePtr->term2Num = term2Num;
345 return uZ.i;
346
347}
348
349static int64_t i64RandomP3( void )
350{
351 union ui64_i64 uZ;
352
353 uZ.ui =
354 i64P1[randomN_ui8( i64NumP1 )] + i64P1[randomN_ui8( i64NumP1 )]
355 + i64P1[randomN_ui8( i64NumP1 )];
356 return uZ.i;
357
358}
359
360enum { i64NumPInfWeightMasks = 61 };
361static const uint64_t i64PInfWeightMasks[i64NumPInfWeightMasks] = {
362 UINT64_C( 0xFFFFFFFFFFFFFFFF ),
363 UINT64_C( 0x7FFFFFFFFFFFFFFF ),
364 UINT64_C( 0x3FFFFFFFFFFFFFFF ),
365 UINT64_C( 0x1FFFFFFFFFFFFFFF ),
366 UINT64_C( 0x0FFFFFFFFFFFFFFF ),
367 UINT64_C( 0x07FFFFFFFFFFFFFF ),
368 UINT64_C( 0x03FFFFFFFFFFFFFF ),
369 UINT64_C( 0x01FFFFFFFFFFFFFF ),
370 UINT64_C( 0x00FFFFFFFFFFFFFF ),
371 UINT64_C( 0x007FFFFFFFFFFFFF ),
372 UINT64_C( 0x003FFFFFFFFFFFFF ),
373 UINT64_C( 0x001FFFFFFFFFFFFF ),
374 UINT64_C( 0x000FFFFFFFFFFFFF ),
375 UINT64_C( 0x0007FFFFFFFFFFFF ),
376 UINT64_C( 0x0003FFFFFFFFFFFF ),
377 UINT64_C( 0x0001FFFFFFFFFFFF ),
378 UINT64_C( 0x0000FFFFFFFFFFFF ),
379 UINT64_C( 0x00007FFFFFFFFFFF ),
380 UINT64_C( 0x00003FFFFFFFFFFF ),
381 UINT64_C( 0x00001FFFFFFFFFFF ),
382 UINT64_C( 0x00000FFFFFFFFFFF ),
383 UINT64_C( 0x000007FFFFFFFFFF ),
384 UINT64_C( 0x000003FFFFFFFFFF ),
385 UINT64_C( 0x000001FFFFFFFFFF ),
386 UINT64_C( 0x000000FFFFFFFFFF ),
387 UINT64_C( 0x0000007FFFFFFFFF ),
388 UINT64_C( 0x0000003FFFFFFFFF ),
389 UINT64_C( 0x0000001FFFFFFFFF ),
390 UINT64_C( 0x0000000FFFFFFFFF ),
391 UINT64_C( 0x00000007FFFFFFFF ),
392 UINT64_C( 0x00000003FFFFFFFF ),
393 UINT64_C( 0x00000001FFFFFFFF ),
394 UINT64_C( 0x00000000FFFFFFFF ),
395 UINT64_C( 0x000000007FFFFFFF ),
396 UINT64_C( 0x000000003FFFFFFF ),
397 UINT64_C( 0x000000001FFFFFFF ),
398 UINT64_C( 0x000000000FFFFFFF ),
399 UINT64_C( 0x0000000007FFFFFF ),
400 UINT64_C( 0x0000000003FFFFFF ),
401 UINT64_C( 0x0000000001FFFFFF ),
402 UINT64_C( 0x0000000000FFFFFF ),
403 UINT64_C( 0x00000000007FFFFF ),
404 UINT64_C( 0x00000000003FFFFF ),
405 UINT64_C( 0x00000000001FFFFF ),
406 UINT64_C( 0x00000000000FFFFF ),
407 UINT64_C( 0x000000000007FFFF ),
408 UINT64_C( 0x000000000003FFFF ),
409 UINT64_C( 0x000000000001FFFF ),
410 UINT64_C( 0x000000000000FFFF ),
411 UINT64_C( 0x0000000000007FFF ),
412 UINT64_C( 0x0000000000003FFF ),
413 UINT64_C( 0x0000000000001FFF ),
414 UINT64_C( 0x0000000000000FFF ),
415 UINT64_C( 0x00000000000007FF ),
416 UINT64_C( 0x00000000000003FF ),
417 UINT64_C( 0x00000000000001FF ),
418 UINT64_C( 0x00000000000000FF ),
419 UINT64_C( 0x000000000000007F ),
420 UINT64_C( 0x000000000000003F ),
421 UINT64_C( 0x000000000000001F ),
422 UINT64_C( 0x000000000000000F )
423};
424static const uint64_t i64PInfWeightOffsets[i64NumPInfWeightMasks] = {
425 UINT64_C( 0x0000000000000000 ),
426 UINT64_C( 0xC000000000000000 ),
427 UINT64_C( 0xE000000000000000 ),
428 UINT64_C( 0xF000000000000000 ),
429 UINT64_C( 0xF800000000000000 ),
430 UINT64_C( 0xFC00000000000000 ),
431 UINT64_C( 0xFE00000000000000 ),
432 UINT64_C( 0xFF00000000000000 ),
433 UINT64_C( 0xFF80000000000000 ),
434 UINT64_C( 0xFFC0000000000000 ),
435 UINT64_C( 0xFFE0000000000000 ),
436 UINT64_C( 0xFFF0000000000000 ),
437 UINT64_C( 0xFFF8000000000000 ),
438 UINT64_C( 0xFFFC000000000000 ),
439 UINT64_C( 0xFFFE000000000000 ),
440 UINT64_C( 0xFFFF000000000000 ),
441 UINT64_C( 0xFFFF800000000000 ),
442 UINT64_C( 0xFFFFC00000000000 ),
443 UINT64_C( 0xFFFFE00000000000 ),
444 UINT64_C( 0xFFFFF00000000000 ),
445 UINT64_C( 0xFFFFF80000000000 ),
446 UINT64_C( 0xFFFFFC0000000000 ),
447 UINT64_C( 0xFFFFFE0000000000 ),
448 UINT64_C( 0xFFFFFF0000000000 ),
449 UINT64_C( 0xFFFFFF8000000000 ),
450 UINT64_C( 0xFFFFFFC000000000 ),
451 UINT64_C( 0xFFFFFFE000000000 ),
452 UINT64_C( 0xFFFFFFF000000000 ),
453 UINT64_C( 0xFFFFFFF800000000 ),
454 UINT64_C( 0xFFFFFFFC00000000 ),
455 UINT64_C( 0xFFFFFFFE00000000 ),
456 UINT64_C( 0xFFFFFFFF00000000 ),
457 UINT64_C( 0xFFFFFFFF80000000 ),
458 UINT64_C( 0xFFFFFFFFC0000000 ),
459 UINT64_C( 0xFFFFFFFFE0000000 ),
460 UINT64_C( 0xFFFFFFFFF0000000 ),
461 UINT64_C( 0xFFFFFFFFF8000000 ),
462 UINT64_C( 0xFFFFFFFFFC000000 ),
463 UINT64_C( 0xFFFFFFFFFE000000 ),
464 UINT64_C( 0xFFFFFFFFFF000000 ),
465 UINT64_C( 0xFFFFFFFFFF800000 ),
466 UINT64_C( 0xFFFFFFFFFFC00000 ),
467 UINT64_C( 0xFFFFFFFFFFE00000 ),
468 UINT64_C( 0xFFFFFFFFFFF00000 ),
469 UINT64_C( 0xFFFFFFFFFFF80000 ),
470 UINT64_C( 0xFFFFFFFFFFFC0000 ),
471 UINT64_C( 0xFFFFFFFFFFFE0000 ),
472 UINT64_C( 0xFFFFFFFFFFFF0000 ),
473 UINT64_C( 0xFFFFFFFFFFFF8000 ),
474 UINT64_C( 0xFFFFFFFFFFFFC000 ),
475 UINT64_C( 0xFFFFFFFFFFFFE000 ),
476 UINT64_C( 0xFFFFFFFFFFFFF000 ),
477 UINT64_C( 0xFFFFFFFFFFFFF800 ),
478 UINT64_C( 0xFFFFFFFFFFFFFC00 ),
479 UINT64_C( 0xFFFFFFFFFFFFFE00 ),
480 UINT64_C( 0xFFFFFFFFFFFFFF00 ),
481 UINT64_C( 0xFFFFFFFFFFFFFF80 ),
482 UINT64_C( 0xFFFFFFFFFFFFFFC0 ),
483 UINT64_C( 0xFFFFFFFFFFFFFFE0 ),
484 UINT64_C( 0xFFFFFFFFFFFFFFF0 ),
485 UINT64_C( 0xFFFFFFFFFFFFFFF8 )
486};
487
488static int64_t i64RandomPInf( void )
489{
490 int weightMaskNum;
491 union ui64_i64 uZ;
492
493 weightMaskNum = randomN_ui8( i64NumPInfWeightMasks );
494 uZ.ui =
495 (random_ui64() & i64PInfWeightMasks[weightMaskNum])
496 + i64PInfWeightOffsets[weightMaskNum];
497 return uZ.i;
498
499}
500
501static struct sequence sequenceA;
502static int subcase;
503
504int64_t genCases_i64_a;
505
506void genCases_i64_a_init( void )
507{
508
509 sequenceA.term2Num = 0;
510 sequenceA.term1Num = 0;
511 sequenceA.done = false;
512 subcase = 0;
513 genCases_total = (genCases_level == 1) ? 3 * i64NumP1 : 2 * i64NumP2;
514 genCases_done = false;
515
516}
517
518void genCases_i64_a_next( void )
519{
520
521 if ( genCases_level == 1 ) {
522 switch ( subcase ) {
523 case 0:
524 genCases_i64_a = i64RandomP3();
525 break;
526 case 1:
527 genCases_i64_a = i64RandomPInf();
528 break;
529 case 2:
530 genCases_i64_a = i64NextP1( &sequenceA );
531 genCases_done = sequenceA.done;
532 subcase = -1;
533 break;
534 }
535 } else {
536 switch ( subcase ) {
537 case 0:
538 genCases_i64_a = i64RandomP3();
539 break;
540 case 2:
541 genCases_i64_a = i64RandomPInf();
542 break;
543 case 3:
544 subcase = -1;
545 case 1:
546 genCases_i64_a = i64NextP2( &sequenceA );
547 genCases_done = sequenceA.done;
548 break;
549 }
550 }
551 ++subcase;
552
553}
554
注意: 瀏覽 TracBrowser 來幫助您使用儲存庫瀏覽器

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette