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