1206917Smarius 2206917Smarius/* 3206917Smarius=============================================================================== 4206917Smarius 5206917SmariusThis C source file is part of TestFloat, Release 2a, a package of programs 6206917Smariusfor testing the correctness of floating-point arithmetic complying to the 7206917SmariusIEC/IEEE Standard for Floating-Point. 8206917Smarius 9206917SmariusWritten by John R. Hauser. More information is available through the Web 10206917Smariuspage `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'. 11206917Smarius 12206917SmariusTHIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort 13206917Smariushas been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT 14206917SmariusTIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO 15206917SmariusPERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY 16206917SmariusAND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE. 17206917Smarius 18206917SmariusDerivative works are acceptable, even for commercial purposes, so long as 19206917Smarius(1) they include prominent notice that the work is derivative, and (2) they 20206917Smariusinclude prominent notice akin to these four paragraphs for those parts of 21206917Smariusthis code that are retained. 22206917Smarius 23206917Smarius=============================================================================== 24206917Smarius*/ 25206917Smarius 26207151Smarius#include <sys/cdefs.h> 27207151Smarius__FBSDID("$FreeBSD$"); 28207151Smarius 29206917Smarius#include "milieu.h" 30206917Smarius#include "fail.h" 31206917Smarius#include "random.h" 32206917Smarius#include "softfloat.h" 33206917Smarius#include "testCases.h" 34206917Smarius 35206917Smariustypedef struct { 36206917Smarius int16 expNum, term1Num, term2Num; 37206917Smarius flag done; 38206917Smarius} sequenceT; 39206917Smarius 40206917Smariusenum { 41206917Smarius int32NumP1 = 124 42206917Smarius}; 43206917Smarius 44206917Smariusstatic const uint32 int32P1[ int32NumP1 ] = { 45206917Smarius 0x00000000, 46206917Smarius 0x00000001, 47206917Smarius 0x00000002, 48206917Smarius 0x00000004, 49206917Smarius 0x00000008, 50206917Smarius 0x00000010, 51206917Smarius 0x00000020, 52206917Smarius 0x00000040, 53206917Smarius 0x00000080, 54206917Smarius 0x00000100, 55206917Smarius 0x00000200, 56206917Smarius 0x00000400, 57206917Smarius 0x00000800, 58206917Smarius 0x00001000, 59206917Smarius 0x00002000, 60206917Smarius 0x00004000, 61206917Smarius 0x00008000, 62206917Smarius 0x00010000, 63206917Smarius 0x00020000, 64206917Smarius 0x00040000, 65206917Smarius 0x00080000, 66206917Smarius 0x00100000, 67206917Smarius 0x00200000, 68206917Smarius 0x00400000, 69206917Smarius 0x00800000, 70206917Smarius 0x01000000, 71206917Smarius 0x02000000, 72206917Smarius 0x04000000, 73206917Smarius 0x08000000, 74206917Smarius 0x10000000, 75206917Smarius 0x20000000, 76206917Smarius 0x40000000, 77206917Smarius 0x80000000, 78206917Smarius 0xC0000000, 79206917Smarius 0xE0000000, 80206917Smarius 0xF0000000, 81206917Smarius 0xF8000000, 82206917Smarius 0xFC000000, 83206917Smarius 0xFE000000, 84206917Smarius 0xFF000000, 85206917Smarius 0xFF800000, 86206917Smarius 0xFFC00000, 87206917Smarius 0xFFE00000, 88206917Smarius 0xFFF00000, 89206917Smarius 0xFFF80000, 90206917Smarius 0xFFFC0000, 91206917Smarius 0xFFFE0000, 92206917Smarius 0xFFFF0000, 93206917Smarius 0xFFFF8000, 94206917Smarius 0xFFFFC000, 95206917Smarius 0xFFFFE000, 96206917Smarius 0xFFFFF000, 97206917Smarius 0xFFFFF800, 98206917Smarius 0xFFFFFC00, 99206917Smarius 0xFFFFFE00, 100206917Smarius 0xFFFFFF00, 101206917Smarius 0xFFFFFF80, 102206917Smarius 0xFFFFFFC0, 103206917Smarius 0xFFFFFFE0, 104206917Smarius 0xFFFFFFF0, 105206917Smarius 0xFFFFFFF8, 106206917Smarius 0xFFFFFFFC, 107206917Smarius 0xFFFFFFFE, 108206917Smarius 0xFFFFFFFF, 109206917Smarius 0xFFFFFFFD, 110206917Smarius 0xFFFFFFFB, 111206917Smarius 0xFFFFFFF7, 112206917Smarius 0xFFFFFFEF, 113206917Smarius 0xFFFFFFDF, 114206917Smarius 0xFFFFFFBF, 115206917Smarius 0xFFFFFF7F, 116206917Smarius 0xFFFFFEFF, 117206917Smarius 0xFFFFFDFF, 118206917Smarius 0xFFFFFBFF, 119206917Smarius 0xFFFFF7FF, 120206917Smarius 0xFFFFEFFF, 121206917Smarius 0xFFFFDFFF, 122206917Smarius 0xFFFFBFFF, 123206917Smarius 0xFFFF7FFF, 124206917Smarius 0xFFFEFFFF, 125206917Smarius 0xFFFDFFFF, 126206917Smarius 0xFFFBFFFF, 127206917Smarius 0xFFF7FFFF, 128206917Smarius 0xFFEFFFFF, 129206917Smarius 0xFFDFFFFF, 130206917Smarius 0xFFBFFFFF, 131206917Smarius 0xFF7FFFFF, 132206917Smarius 0xFEFFFFFF, 133206917Smarius 0xFDFFFFFF, 134206917Smarius 0xFBFFFFFF, 135206917Smarius 0xF7FFFFFF, 136206917Smarius 0xEFFFFFFF, 137206917Smarius 0xDFFFFFFF, 138206917Smarius 0xBFFFFFFF, 139206917Smarius 0x7FFFFFFF, 140206917Smarius 0x3FFFFFFF, 141206917Smarius 0x1FFFFFFF, 142206917Smarius 0x0FFFFFFF, 143206917Smarius 0x07FFFFFF, 144206917Smarius 0x03FFFFFF, 145206917Smarius 0x01FFFFFF, 146206917Smarius 0x00FFFFFF, 147206917Smarius 0x007FFFFF, 148206917Smarius 0x003FFFFF, 149206917Smarius 0x001FFFFF, 150206917Smarius 0x000FFFFF, 151206917Smarius 0x0007FFFF, 152206917Smarius 0x0003FFFF, 153206917Smarius 0x0001FFFF, 154206917Smarius 0x0000FFFF, 155206917Smarius 0x00007FFF, 156206917Smarius 0x00003FFF, 157206917Smarius 0x00001FFF, 158206917Smarius 0x00000FFF, 159206917Smarius 0x000007FF, 160206917Smarius 0x000003FF, 161206917Smarius 0x000001FF, 162206917Smarius 0x000000FF, 163206917Smarius 0x0000007F, 164206917Smarius 0x0000003F, 165206917Smarius 0x0000001F, 166206917Smarius 0x0000000F, 167206917Smarius 0x00000007, 168206917Smarius 0x00000003 169206917Smarius}; 170206917Smarius 171206917Smariusstatic int32 int32NextP1( sequenceT *sequencePtr ) 172206917Smarius{ 173206917Smarius uint8 termNum; 174206917Smarius int32 z; 175206917Smarius 176206917Smarius termNum = sequencePtr->term1Num; 177206917Smarius z = int32P1[ termNum ]; 178206917Smarius ++termNum; 179206917Smarius if ( int32NumP1 <= termNum ) { 180206917Smarius termNum = 0; 181206917Smarius sequencePtr->done = TRUE; 182206917Smarius } 183206917Smarius sequencePtr->term1Num = termNum; 184206917Smarius return (sbits32) z; 185206917Smarius 186206917Smarius} 187206917Smarius 188206917Smariusstatic const int32 int32NumP2 = ( int32NumP1 * int32NumP1 + int32NumP1 ) / 2; 189206917Smarius 190206917Smariusstatic int32 int32NextP2( sequenceT *sequencePtr ) 191206917Smarius{ 192206917Smarius uint8 term1Num, term2Num; 193206917Smarius int32 z; 194206917Smarius 195206917Smarius term2Num = sequencePtr->term2Num; 196206917Smarius term1Num = sequencePtr->term1Num; 197206917Smarius z = int32P1[ term1Num ] + int32P1[ term2Num ]; 198206917Smarius ++term2Num; 199206917Smarius if ( int32NumP1 <= term2Num ) { 200206917Smarius ++term1Num; 201206917Smarius if ( int32NumP1 <= term1Num ) { 202206917Smarius term1Num = 0; 203206917Smarius sequencePtr->done = TRUE; 204206917Smarius } 205206917Smarius term2Num = term1Num; 206206917Smarius sequencePtr->term1Num = term1Num; 207206917Smarius } 208206917Smarius sequencePtr->term2Num = term2Num; 209206917Smarius return (sbits32) z; 210206917Smarius 211206917Smarius} 212206917Smarius 213206917Smariusstatic int32 int32RandomP3( void ) 214206917Smarius{ 215206917Smarius 216206917Smarius return 217206917Smarius (sbits32) ( 218206917Smarius int32P1[ randomUint8() % int32NumP1 ] 219206917Smarius + int32P1[ randomUint8() % int32NumP1 ] 220206917Smarius + int32P1[ randomUint8() % int32NumP1 ] 221206917Smarius ); 222206917Smarius 223206917Smarius} 224206917Smarius 225206917Smariusenum { 226206917Smarius int32NumPInfWeightMasks = 29 227206917Smarius}; 228206917Smarius 229206917Smariusstatic const uint32 int32PInfWeightMasks[ int32NumPInfWeightMasks ] = { 230206917Smarius 0xFFFFFFFF, 231206917Smarius 0x7FFFFFFF, 232206917Smarius 0x3FFFFFFF, 233206917Smarius 0x1FFFFFFF, 234206917Smarius 0x0FFFFFFF, 235206917Smarius 0x07FFFFFF, 236206917Smarius 0x03FFFFFF, 237206917Smarius 0x01FFFFFF, 238206917Smarius 0x00FFFFFF, 239206917Smarius 0x007FFFFF, 240206917Smarius 0x003FFFFF, 241206917Smarius 0x001FFFFF, 242206917Smarius 0x000FFFFF, 243206917Smarius 0x0007FFFF, 244206917Smarius 0x0003FFFF, 245206917Smarius 0x0001FFFF, 246206917Smarius 0x0000FFFF, 247206917Smarius 0x00007FFF, 248206917Smarius 0x00003FFF, 249206917Smarius 0x00001FFF, 250206917Smarius 0x00000FFF, 251206917Smarius 0x000007FF, 252206917Smarius 0x000003FF, 253206917Smarius 0x000001FF, 254206917Smarius 0x000000FF, 255206917Smarius 0x0000007F, 256206917Smarius 0x0000003F, 257206917Smarius 0x0000001F, 258206917Smarius 0x0000000F 259206917Smarius}; 260206917Smarius 261206917Smariusstatic const uint32 int32PInfWeightOffsets[ int32NumPInfWeightMasks ] = { 262206917Smarius 0x00000000, 263206917Smarius 0xC0000000, 264206917Smarius 0xE0000000, 265206917Smarius 0xF0000000, 266206917Smarius 0xF8000000, 267206917Smarius 0xFC000000, 268206917Smarius 0xFE000000, 269206917Smarius 0xFF000000, 270206917Smarius 0xFF800000, 271206917Smarius 0xFFC00000, 272206917Smarius 0xFFE00000, 273206917Smarius 0xFFF00000, 274206917Smarius 0xFFF80000, 275206917Smarius 0xFFFC0000, 276206917Smarius 0xFFFE0000, 277206917Smarius 0xFFFF0000, 278206917Smarius 0xFFFF8000, 279206917Smarius 0xFFFFC000, 280206917Smarius 0xFFFFE000, 281206917Smarius 0xFFFFF000, 282206917Smarius 0xFFFFF800, 283206917Smarius 0xFFFFFC00, 284206917Smarius 0xFFFFFE00, 285206917Smarius 0xFFFFFF00, 286206917Smarius 0xFFFFFF80, 287206917Smarius 0xFFFFFFC0, 288206917Smarius 0xFFFFFFE0, 289206917Smarius 0xFFFFFFF0, 290206917Smarius 0xFFFFFFF8 291206917Smarius}; 292206917Smarius 293206917Smariusstatic int32 int32RandomPInf( void ) 294206917Smarius{ 295206917Smarius int8 weightMaskNum; 296206917Smarius 297206917Smarius weightMaskNum = randomUint8() % int32NumPInfWeightMasks; 298206917Smarius return 299206917Smarius (sbits32) ( 300206917Smarius ( randomUint32() & int32PInfWeightMasks[ weightMaskNum ] ) 301206917Smarius + int32PInfWeightOffsets[ weightMaskNum ] 302206917Smarius ); 303206917Smarius 304206917Smarius} 305206917Smarius 306206917Smarius#ifdef BITS64 307206917Smarius 308206917Smariusenum { 309206917Smarius int64NumP1 = 252 310206917Smarius}; 311206917Smarius 312206917Smariusstatic const uint64 int64P1[ int64NumP1 ] = { 313206917Smarius LIT64( 0x0000000000000000 ), 314206917Smarius LIT64( 0x0000000000000001 ), 315206917Smarius LIT64( 0x0000000000000002 ), 316206917Smarius LIT64( 0x0000000000000004 ), 317206917Smarius LIT64( 0x0000000000000008 ), 318206917Smarius LIT64( 0x0000000000000010 ), 319206917Smarius LIT64( 0x0000000000000020 ), 320206917Smarius LIT64( 0x0000000000000040 ), 321206917Smarius LIT64( 0x0000000000000080 ), 322206917Smarius LIT64( 0x0000000000000100 ), 323206917Smarius LIT64( 0x0000000000000200 ), 324206917Smarius LIT64( 0x0000000000000400 ), 325206917Smarius LIT64( 0x0000000000000800 ), 326206917Smarius LIT64( 0x0000000000001000 ), 327206917Smarius LIT64( 0x0000000000002000 ), 328206917Smarius LIT64( 0x0000000000004000 ), 329206917Smarius LIT64( 0x0000000000008000 ), 330206917Smarius LIT64( 0x0000000000010000 ), 331206917Smarius LIT64( 0x0000000000020000 ), 332206917Smarius LIT64( 0x0000000000040000 ), 333206917Smarius LIT64( 0x0000000000080000 ), 334206917Smarius LIT64( 0x0000000000100000 ), 335206917Smarius LIT64( 0x0000000000200000 ), 336206917Smarius LIT64( 0x0000000000400000 ), 337206917Smarius LIT64( 0x0000000000800000 ), 338206917Smarius LIT64( 0x0000000001000000 ), 339206917Smarius LIT64( 0x0000000002000000 ), 340206917Smarius LIT64( 0x0000000004000000 ), 341206917Smarius LIT64( 0x0000000008000000 ), 342206917Smarius LIT64( 0x0000000010000000 ), 343206917Smarius LIT64( 0x0000000020000000 ), 344206917Smarius LIT64( 0x0000000040000000 ), 345206917Smarius LIT64( 0x0000000080000000 ), 346206917Smarius LIT64( 0x0000000100000000 ), 347206917Smarius LIT64( 0x0000000200000000 ), 348206917Smarius LIT64( 0x0000000400000000 ), 349206917Smarius LIT64( 0x0000000800000000 ), 350206917Smarius LIT64( 0x0000001000000000 ), 351206917Smarius LIT64( 0x0000002000000000 ), 352206917Smarius LIT64( 0x0000004000000000 ), 353206917Smarius LIT64( 0x0000008000000000 ), 354206917Smarius LIT64( 0x0000010000000000 ), 355206917Smarius LIT64( 0x0000020000000000 ), 356206917Smarius LIT64( 0x0000040000000000 ), 357206917Smarius LIT64( 0x0000080000000000 ), 358206917Smarius LIT64( 0x0000100000000000 ), 359206917Smarius LIT64( 0x0000200000000000 ), 360206917Smarius LIT64( 0x0000400000000000 ), 361206917Smarius LIT64( 0x0000800000000000 ), 362206917Smarius LIT64( 0x0001000000000000 ), 363206917Smarius LIT64( 0x0002000000000000 ), 364206917Smarius LIT64( 0x0004000000000000 ), 365206917Smarius LIT64( 0x0008000000000000 ), 366206917Smarius LIT64( 0x0010000000000000 ), 367206917Smarius LIT64( 0x0020000000000000 ), 368206917Smarius LIT64( 0x0040000000000000 ), 369206917Smarius LIT64( 0x0080000000000000 ), 370206917Smarius LIT64( 0x0100000000000000 ), 371206917Smarius LIT64( 0x0200000000000000 ), 372206917Smarius LIT64( 0x0400000000000000 ), 373206917Smarius LIT64( 0x0800000000000000 ), 374206917Smarius LIT64( 0x1000000000000000 ), 375206917Smarius LIT64( 0x2000000000000000 ), 376206917Smarius LIT64( 0x4000000000000000 ), 377206917Smarius LIT64( 0x8000000000000000 ), 378206917Smarius LIT64( 0xC000000000000000 ), 379206917Smarius LIT64( 0xE000000000000000 ), 380206917Smarius LIT64( 0xF000000000000000 ), 381206917Smarius LIT64( 0xF800000000000000 ), 382206917Smarius LIT64( 0xFC00000000000000 ), 383206917Smarius LIT64( 0xFE00000000000000 ), 384206917Smarius LIT64( 0xFF00000000000000 ), 385206917Smarius LIT64( 0xFF80000000000000 ), 386206917Smarius LIT64( 0xFFC0000000000000 ), 387206917Smarius LIT64( 0xFFE0000000000000 ), 388206917Smarius LIT64( 0xFFF0000000000000 ), 389206917Smarius LIT64( 0xFFF8000000000000 ), 390206917Smarius LIT64( 0xFFFC000000000000 ), 391206917Smarius LIT64( 0xFFFE000000000000 ), 392206917Smarius LIT64( 0xFFFF000000000000 ), 393206917Smarius LIT64( 0xFFFF800000000000 ), 394206917Smarius LIT64( 0xFFFFC00000000000 ), 395206917Smarius LIT64( 0xFFFFE00000000000 ), 396206917Smarius LIT64( 0xFFFFF00000000000 ), 397206917Smarius LIT64( 0xFFFFF80000000000 ), 398206917Smarius LIT64( 0xFFFFFC0000000000 ), 399206917Smarius LIT64( 0xFFFFFE0000000000 ), 400206917Smarius LIT64( 0xFFFFFF0000000000 ), 401206917Smarius LIT64( 0xFFFFFF8000000000 ), 402206917Smarius LIT64( 0xFFFFFFC000000000 ), 403206917Smarius LIT64( 0xFFFFFFE000000000 ), 404206917Smarius LIT64( 0xFFFFFFF000000000 ), 405206917Smarius LIT64( 0xFFFFFFF800000000 ), 406206917Smarius LIT64( 0xFFFFFFFC00000000 ), 407206917Smarius LIT64( 0xFFFFFFFE00000000 ), 408206917Smarius LIT64( 0xFFFFFFFF00000000 ), 409206917Smarius LIT64( 0xFFFFFFFF80000000 ), 410206917Smarius LIT64( 0xFFFFFFFFC0000000 ), 411206917Smarius LIT64( 0xFFFFFFFFE0000000 ), 412206917Smarius LIT64( 0xFFFFFFFFF0000000 ), 413206917Smarius LIT64( 0xFFFFFFFFF8000000 ), 414206917Smarius LIT64( 0xFFFFFFFFFC000000 ), 415206917Smarius LIT64( 0xFFFFFFFFFE000000 ), 416206917Smarius LIT64( 0xFFFFFFFFFF000000 ), 417206917Smarius LIT64( 0xFFFFFFFFFF800000 ), 418206917Smarius LIT64( 0xFFFFFFFFFFC00000 ), 419206917Smarius LIT64( 0xFFFFFFFFFFE00000 ), 420206917Smarius LIT64( 0xFFFFFFFFFFF00000 ), 421206917Smarius LIT64( 0xFFFFFFFFFFF80000 ), 422206917Smarius LIT64( 0xFFFFFFFFFFFC0000 ), 423206917Smarius LIT64( 0xFFFFFFFFFFFE0000 ), 424206917Smarius LIT64( 0xFFFFFFFFFFFF0000 ), 425206917Smarius LIT64( 0xFFFFFFFFFFFF8000 ), 426206917Smarius LIT64( 0xFFFFFFFFFFFFC000 ), 427206917Smarius LIT64( 0xFFFFFFFFFFFFE000 ), 428206917Smarius LIT64( 0xFFFFFFFFFFFFF000 ), 429206917Smarius LIT64( 0xFFFFFFFFFFFFF800 ), 430206917Smarius LIT64( 0xFFFFFFFFFFFFFC00 ), 431206917Smarius LIT64( 0xFFFFFFFFFFFFFE00 ), 432206917Smarius LIT64( 0xFFFFFFFFFFFFFF00 ), 433206917Smarius LIT64( 0xFFFFFFFFFFFFFF80 ), 434206917Smarius LIT64( 0xFFFFFFFFFFFFFFC0 ), 435206917Smarius LIT64( 0xFFFFFFFFFFFFFFE0 ), 436206917Smarius LIT64( 0xFFFFFFFFFFFFFFF0 ), 437206917Smarius LIT64( 0xFFFFFFFFFFFFFFF8 ), 438206917Smarius LIT64( 0xFFFFFFFFFFFFFFFC ), 439206917Smarius LIT64( 0xFFFFFFFFFFFFFFFE ), 440206917Smarius LIT64( 0xFFFFFFFFFFFFFFFF ), 441206917Smarius LIT64( 0xFFFFFFFFFFFFFFFD ), 442206917Smarius LIT64( 0xFFFFFFFFFFFFFFFB ), 443206917Smarius LIT64( 0xFFFFFFFFFFFFFFF7 ), 444206917Smarius LIT64( 0xFFFFFFFFFFFFFFEF ), 445206917Smarius LIT64( 0xFFFFFFFFFFFFFFDF ), 446206917Smarius LIT64( 0xFFFFFFFFFFFFFFBF ), 447206917Smarius LIT64( 0xFFFFFFFFFFFFFF7F ), 448206917Smarius LIT64( 0xFFFFFFFFFFFFFEFF ), 449206917Smarius LIT64( 0xFFFFFFFFFFFFFDFF ), 450206917Smarius LIT64( 0xFFFFFFFFFFFFFBFF ), 451206917Smarius LIT64( 0xFFFFFFFFFFFFF7FF ), 452206917Smarius LIT64( 0xFFFFFFFFFFFFEFFF ), 453206917Smarius LIT64( 0xFFFFFFFFFFFFDFFF ), 454206917Smarius LIT64( 0xFFFFFFFFFFFFBFFF ), 455206917Smarius LIT64( 0xFFFFFFFFFFFF7FFF ), 456206917Smarius LIT64( 0xFFFFFFFFFFFEFFFF ), 457206917Smarius LIT64( 0xFFFFFFFFFFFDFFFF ), 458206917Smarius LIT64( 0xFFFFFFFFFFFBFFFF ), 459206917Smarius LIT64( 0xFFFFFFFFFFF7FFFF ), 460206917Smarius LIT64( 0xFFFFFFFFFFEFFFFF ), 461206917Smarius LIT64( 0xFFFFFFFFFFDFFFFF ), 462206917Smarius LIT64( 0xFFFFFFFFFFBFFFFF ), 463206917Smarius LIT64( 0xFFFFFFFFFF7FFFFF ), 464206917Smarius LIT64( 0xFFFFFFFFFEFFFFFF ), 465206917Smarius LIT64( 0xFFFFFFFFFDFFFFFF ), 466206917Smarius LIT64( 0xFFFFFFFFFBFFFFFF ), 467206917Smarius LIT64( 0xFFFFFFFFF7FFFFFF ), 468206917Smarius LIT64( 0xFFFFFFFFEFFFFFFF ), 469206917Smarius LIT64( 0xFFFFFFFFDFFFFFFF ), 470206917Smarius LIT64( 0xFFFFFFFFBFFFFFFF ), 471206917Smarius LIT64( 0xFFFFFFFF7FFFFFFF ), 472206917Smarius LIT64( 0xFFFFFFFEFFFFFFFF ), 473206917Smarius LIT64( 0xFFFFFFFDFFFFFFFF ), 474206917Smarius LIT64( 0xFFFFFFFBFFFFFFFF ), 475206917Smarius LIT64( 0xFFFFFFF7FFFFFFFF ), 476206917Smarius LIT64( 0xFFFFFFEFFFFFFFFF ), 477206917Smarius LIT64( 0xFFFFFFDFFFFFFFFF ), 478206917Smarius LIT64( 0xFFFFFFBFFFFFFFFF ), 479206917Smarius LIT64( 0xFFFFFF7FFFFFFFFF ), 480206917Smarius LIT64( 0xFFFFFEFFFFFFFFFF ), 481206917Smarius LIT64( 0xFFFFFDFFFFFFFFFF ), 482206917Smarius LIT64( 0xFFFFFBFFFFFFFFFF ), 483206917Smarius LIT64( 0xFFFFF7FFFFFFFFFF ), 484206917Smarius LIT64( 0xFFFFEFFFFFFFFFFF ), 485206917Smarius LIT64( 0xFFFFDFFFFFFFFFFF ), 486206917Smarius LIT64( 0xFFFFBFFFFFFFFFFF ), 487206917Smarius LIT64( 0xFFFF7FFFFFFFFFFF ), 488206917Smarius LIT64( 0xFFFEFFFFFFFFFFFF ), 489206917Smarius LIT64( 0xFFFDFFFFFFFFFFFF ), 490206917Smarius LIT64( 0xFFFBFFFFFFFFFFFF ), 491206917Smarius LIT64( 0xFFF7FFFFFFFFFFFF ), 492206917Smarius LIT64( 0xFFEFFFFFFFFFFFFF ), 493206917Smarius LIT64( 0xFFDFFFFFFFFFFFFF ), 494206917Smarius LIT64( 0xFFBFFFFFFFFFFFFF ), 495206917Smarius LIT64( 0xFF7FFFFFFFFFFFFF ), 496206917Smarius LIT64( 0xFEFFFFFFFFFFFFFF ), 497206917Smarius LIT64( 0xFDFFFFFFFFFFFFFF ), 498206917Smarius LIT64( 0xFBFFFFFFFFFFFFFF ), 499206917Smarius LIT64( 0xF7FFFFFFFFFFFFFF ), 500206917Smarius LIT64( 0xEFFFFFFFFFFFFFFF ), 501206917Smarius LIT64( 0xDFFFFFFFFFFFFFFF ), 502206917Smarius LIT64( 0xBFFFFFFFFFFFFFFF ), 503206917Smarius LIT64( 0x7FFFFFFFFFFFFFFF ), 504206917Smarius LIT64( 0x3FFFFFFFFFFFFFFF ), 505206917Smarius LIT64( 0x1FFFFFFFFFFFFFFF ), 506206917Smarius LIT64( 0x0FFFFFFFFFFFFFFF ), 507206917Smarius LIT64( 0x07FFFFFFFFFFFFFF ), 508206917Smarius LIT64( 0x03FFFFFFFFFFFFFF ), 509206917Smarius LIT64( 0x01FFFFFFFFFFFFFF ), 510206917Smarius LIT64( 0x00FFFFFFFFFFFFFF ), 511206917Smarius LIT64( 0x007FFFFFFFFFFFFF ), 512206917Smarius LIT64( 0x003FFFFFFFFFFFFF ), 513206917Smarius LIT64( 0x001FFFFFFFFFFFFF ), 514206917Smarius LIT64( 0x000FFFFFFFFFFFFF ), 515206917Smarius LIT64( 0x0007FFFFFFFFFFFF ), 516206917Smarius LIT64( 0x0003FFFFFFFFFFFF ), 517206917Smarius LIT64( 0x0001FFFFFFFFFFFF ), 518206917Smarius LIT64( 0x0000FFFFFFFFFFFF ), 519206917Smarius LIT64( 0x00007FFFFFFFFFFF ), 520206917Smarius LIT64( 0x00003FFFFFFFFFFF ), 521206917Smarius LIT64( 0x00001FFFFFFFFFFF ), 522206917Smarius LIT64( 0x00000FFFFFFFFFFF ), 523206917Smarius LIT64( 0x000007FFFFFFFFFF ), 524206917Smarius LIT64( 0x000003FFFFFFFFFF ), 525206917Smarius LIT64( 0x000001FFFFFFFFFF ), 526206917Smarius LIT64( 0x000000FFFFFFFFFF ), 527206917Smarius LIT64( 0x0000007FFFFFFFFF ), 528206917Smarius LIT64( 0x0000003FFFFFFFFF ), 529206917Smarius LIT64( 0x0000001FFFFFFFFF ), 530206917Smarius LIT64( 0x0000000FFFFFFFFF ), 531206917Smarius LIT64( 0x00000007FFFFFFFF ), 532206917Smarius LIT64( 0x00000003FFFFFFFF ), 533206917Smarius LIT64( 0x00000001FFFFFFFF ), 534206917Smarius LIT64( 0x00000000FFFFFFFF ), 535206917Smarius LIT64( 0x000000007FFFFFFF ), 536206917Smarius LIT64( 0x000000003FFFFFFF ), 537206917Smarius LIT64( 0x000000001FFFFFFF ), 538206917Smarius LIT64( 0x000000000FFFFFFF ), 539206917Smarius LIT64( 0x0000000007FFFFFF ), 540206917Smarius LIT64( 0x0000000003FFFFFF ), 541206917Smarius LIT64( 0x0000000001FFFFFF ), 542206917Smarius LIT64( 0x0000000000FFFFFF ), 543206917Smarius LIT64( 0x00000000007FFFFF ), 544206917Smarius LIT64( 0x00000000003FFFFF ), 545206917Smarius LIT64( 0x00000000001FFFFF ), 546206917Smarius LIT64( 0x00000000000FFFFF ), 547206917Smarius LIT64( 0x000000000007FFFF ), 548206917Smarius LIT64( 0x000000000003FFFF ), 549206917Smarius LIT64( 0x000000000001FFFF ), 550206917Smarius LIT64( 0x000000000000FFFF ), 551206917Smarius LIT64( 0x0000000000007FFF ), 552206917Smarius LIT64( 0x0000000000003FFF ), 553206917Smarius LIT64( 0x0000000000001FFF ), 554206917Smarius LIT64( 0x0000000000000FFF ), 555206917Smarius LIT64( 0x00000000000007FF ), 556206917Smarius LIT64( 0x00000000000003FF ), 557206917Smarius LIT64( 0x00000000000001FF ), 558206917Smarius LIT64( 0x00000000000000FF ), 559206917Smarius LIT64( 0x000000000000007F ), 560206917Smarius LIT64( 0x000000000000003F ), 561206917Smarius LIT64( 0x000000000000001F ), 562206917Smarius LIT64( 0x000000000000000F ), 563206917Smarius LIT64( 0x0000000000000007 ), 564206917Smarius LIT64( 0x0000000000000003 ) 565206917Smarius}; 566206917Smarius 567206917Smariusstatic int64 int64NextP1( sequenceT *sequencePtr ) 568206917Smarius{ 569206917Smarius uint8 termNum; 570206917Smarius int64 z; 571206917Smarius 572206917Smarius termNum = sequencePtr->term1Num; 573206917Smarius z = int64P1[ termNum ]; 574206917Smarius ++termNum; 575206917Smarius if ( int64NumP1 <= termNum ) { 576206917Smarius termNum = 0; 577206917Smarius sequencePtr->done = TRUE; 578206917Smarius } 579206917Smarius sequencePtr->term1Num = termNum; 580206917Smarius return (sbits64) z; 581206917Smarius 582206917Smarius} 583206917Smarius 584206917Smariusstatic const int64 int64NumP2 = ( int64NumP1 * int64NumP1 + int64NumP1 ) / 2; 585206917Smarius 586206917Smariusstatic int64 int64NextP2( sequenceT *sequencePtr ) 587206917Smarius{ 588206917Smarius uint8 term1Num, term2Num; 589206917Smarius int64 z; 590206917Smarius 591206917Smarius term2Num = sequencePtr->term2Num; 592206917Smarius term1Num = sequencePtr->term1Num; 593206917Smarius z = int64P1[ term1Num ] + int64P1[ term2Num ]; 594206917Smarius ++term2Num; 595206917Smarius if ( int64NumP1 <= term2Num ) { 596206917Smarius ++term1Num; 597206917Smarius if ( int64NumP1 <= term1Num ) { 598206917Smarius term1Num = 0; 599206917Smarius sequencePtr->done = TRUE; 600206917Smarius } 601206917Smarius term2Num = term1Num; 602206917Smarius sequencePtr->term1Num = term1Num; 603206917Smarius } 604206917Smarius sequencePtr->term2Num = term2Num; 605206917Smarius return (sbits64) z; 606206917Smarius 607206917Smarius} 608206917Smarius 609206917Smariusstatic int64 int64RandomP3( void ) 610206917Smarius{ 611206917Smarius 612206917Smarius return 613206917Smarius (sbits64) ( 614206917Smarius int64P1[ randomUint8() % int64NumP1 ] 615206917Smarius + int64P1[ randomUint8() % int64NumP1 ] 616206917Smarius + int64P1[ randomUint8() % int64NumP1 ] 617206917Smarius ); 618206917Smarius 619206917Smarius} 620206917Smarius 621206917Smariusenum { 622206917Smarius int64NumPInfWeightMasks = 61 623206917Smarius}; 624206917Smarius 625206917Smariusstatic const uint64 int64PInfWeightMasks[ int64NumPInfWeightMasks ] = { 626206917Smarius LIT64( 0xFFFFFFFFFFFFFFFF ), 627206917Smarius LIT64( 0x7FFFFFFFFFFFFFFF ), 628206917Smarius LIT64( 0x3FFFFFFFFFFFFFFF ), 629206917Smarius LIT64( 0x1FFFFFFFFFFFFFFF ), 630206917Smarius LIT64( 0x0FFFFFFFFFFFFFFF ), 631206917Smarius LIT64( 0x07FFFFFFFFFFFFFF ), 632206917Smarius LIT64( 0x03FFFFFFFFFFFFFF ), 633206917Smarius LIT64( 0x01FFFFFFFFFFFFFF ), 634206917Smarius LIT64( 0x00FFFFFFFFFFFFFF ), 635206917Smarius LIT64( 0x007FFFFFFFFFFFFF ), 636206917Smarius LIT64( 0x003FFFFFFFFFFFFF ), 637206917Smarius LIT64( 0x001FFFFFFFFFFFFF ), 638206917Smarius LIT64( 0x000FFFFFFFFFFFFF ), 639206917Smarius LIT64( 0x0007FFFFFFFFFFFF ), 640206917Smarius LIT64( 0x0003FFFFFFFFFFFF ), 641206917Smarius LIT64( 0x0001FFFFFFFFFFFF ), 642206917Smarius LIT64( 0x0000FFFFFFFFFFFF ), 643206917Smarius LIT64( 0x00007FFFFFFFFFFF ), 644206917Smarius LIT64( 0x00003FFFFFFFFFFF ), 645206917Smarius LIT64( 0x00001FFFFFFFFFFF ), 646206917Smarius LIT64( 0x00000FFFFFFFFFFF ), 647206917Smarius LIT64( 0x000007FFFFFFFFFF ), 648206917Smarius LIT64( 0x000003FFFFFFFFFF ), 649206917Smarius LIT64( 0x000001FFFFFFFFFF ), 650206917Smarius LIT64( 0x000000FFFFFFFFFF ), 651206917Smarius LIT64( 0x0000007FFFFFFFFF ), 652206917Smarius LIT64( 0x0000003FFFFFFFFF ), 653206917Smarius LIT64( 0x0000001FFFFFFFFF ), 654206917Smarius LIT64( 0x0000000FFFFFFFFF ), 655206917Smarius LIT64( 0x00000007FFFFFFFF ), 656206917Smarius LIT64( 0x00000003FFFFFFFF ), 657206917Smarius LIT64( 0x00000001FFFFFFFF ), 658206917Smarius LIT64( 0x00000000FFFFFFFF ), 659206917Smarius LIT64( 0x000000007FFFFFFF ), 660206917Smarius LIT64( 0x000000003FFFFFFF ), 661206917Smarius LIT64( 0x000000001FFFFFFF ), 662206917Smarius LIT64( 0x000000000FFFFFFF ), 663206917Smarius LIT64( 0x0000000007FFFFFF ), 664206917Smarius LIT64( 0x0000000003FFFFFF ), 665206917Smarius LIT64( 0x0000000001FFFFFF ), 666206917Smarius LIT64( 0x0000000000FFFFFF ), 667206917Smarius LIT64( 0x00000000007FFFFF ), 668206917Smarius LIT64( 0x00000000003FFFFF ), 669206917Smarius LIT64( 0x00000000001FFFFF ), 670206917Smarius LIT64( 0x00000000000FFFFF ), 671206917Smarius LIT64( 0x000000000007FFFF ), 672206917Smarius LIT64( 0x000000000003FFFF ), 673206917Smarius LIT64( 0x000000000001FFFF ), 674206917Smarius LIT64( 0x000000000000FFFF ), 675206917Smarius LIT64( 0x0000000000007FFF ), 676206917Smarius LIT64( 0x0000000000003FFF ), 677206917Smarius LIT64( 0x0000000000001FFF ), 678206917Smarius LIT64( 0x0000000000000FFF ), 679206917Smarius LIT64( 0x00000000000007FF ), 680206917Smarius LIT64( 0x00000000000003FF ), 681206917Smarius LIT64( 0x00000000000001FF ), 682206917Smarius LIT64( 0x00000000000000FF ), 683206917Smarius LIT64( 0x000000000000007F ), 684206917Smarius LIT64( 0x000000000000003F ), 685206917Smarius LIT64( 0x000000000000001F ), 686206917Smarius LIT64( 0x000000000000000F ) 687206917Smarius}; 688206917Smarius 689206917Smariusstatic const uint64 int64PInfWeightOffsets[ int64NumPInfWeightMasks ] = { 690206917Smarius LIT64( 0x0000000000000000 ), 691206917Smarius LIT64( 0xC000000000000000 ), 692206917Smarius LIT64( 0xE000000000000000 ), 693206917Smarius LIT64( 0xF000000000000000 ), 694206917Smarius LIT64( 0xF800000000000000 ), 695206917Smarius LIT64( 0xFC00000000000000 ), 696206917Smarius LIT64( 0xFE00000000000000 ), 697206917Smarius LIT64( 0xFF00000000000000 ), 698206917Smarius LIT64( 0xFF80000000000000 ), 699206917Smarius LIT64( 0xFFC0000000000000 ), 700206917Smarius LIT64( 0xFFE0000000000000 ), 701206917Smarius LIT64( 0xFFF0000000000000 ), 702206917Smarius LIT64( 0xFFF8000000000000 ), 703206917Smarius LIT64( 0xFFFC000000000000 ), 704206917Smarius LIT64( 0xFFFE000000000000 ), 705206917Smarius LIT64( 0xFFFF000000000000 ), 706206917Smarius LIT64( 0xFFFF800000000000 ), 707206917Smarius LIT64( 0xFFFFC00000000000 ), 708206917Smarius LIT64( 0xFFFFE00000000000 ), 709206917Smarius LIT64( 0xFFFFF00000000000 ), 710206917Smarius LIT64( 0xFFFFF80000000000 ), 711206917Smarius LIT64( 0xFFFFFC0000000000 ), 712206917Smarius LIT64( 0xFFFFFE0000000000 ), 713206917Smarius LIT64( 0xFFFFFF0000000000 ), 714206917Smarius LIT64( 0xFFFFFF8000000000 ), 715206917Smarius LIT64( 0xFFFFFFC000000000 ), 716206917Smarius LIT64( 0xFFFFFFE000000000 ), 717206917Smarius LIT64( 0xFFFFFFF000000000 ), 718206917Smarius LIT64( 0xFFFFFFF800000000 ), 719206917Smarius LIT64( 0xFFFFFFFC00000000 ), 720206917Smarius LIT64( 0xFFFFFFFE00000000 ), 721206917Smarius LIT64( 0xFFFFFFFF00000000 ), 722206917Smarius LIT64( 0xFFFFFFFF80000000 ), 723206917Smarius LIT64( 0xFFFFFFFFC0000000 ), 724206917Smarius LIT64( 0xFFFFFFFFE0000000 ), 725206917Smarius LIT64( 0xFFFFFFFFF0000000 ), 726206917Smarius LIT64( 0xFFFFFFFFF8000000 ), 727206917Smarius LIT64( 0xFFFFFFFFFC000000 ), 728206917Smarius LIT64( 0xFFFFFFFFFE000000 ), 729206917Smarius LIT64( 0xFFFFFFFFFF000000 ), 730206917Smarius LIT64( 0xFFFFFFFFFF800000 ), 731206917Smarius LIT64( 0xFFFFFFFFFFC00000 ), 732206917Smarius LIT64( 0xFFFFFFFFFFE00000 ), 733206917Smarius LIT64( 0xFFFFFFFFFFF00000 ), 734206917Smarius LIT64( 0xFFFFFFFFFFF80000 ), 735206917Smarius LIT64( 0xFFFFFFFFFFFC0000 ), 736206917Smarius LIT64( 0xFFFFFFFFFFFE0000 ), 737206917Smarius LIT64( 0xFFFFFFFFFFFF0000 ), 738206917Smarius LIT64( 0xFFFFFFFFFFFF8000 ), 739206917Smarius LIT64( 0xFFFFFFFFFFFFC000 ), 740206917Smarius LIT64( 0xFFFFFFFFFFFFE000 ), 741206917Smarius LIT64( 0xFFFFFFFFFFFFF000 ), 742206917Smarius LIT64( 0xFFFFFFFFFFFFF800 ), 743206917Smarius LIT64( 0xFFFFFFFFFFFFFC00 ), 744206917Smarius LIT64( 0xFFFFFFFFFFFFFE00 ), 745206917Smarius LIT64( 0xFFFFFFFFFFFFFF00 ), 746206917Smarius LIT64( 0xFFFFFFFFFFFFFF80 ), 747206917Smarius LIT64( 0xFFFFFFFFFFFFFFC0 ), 748206917Smarius LIT64( 0xFFFFFFFFFFFFFFE0 ), 749206917Smarius LIT64( 0xFFFFFFFFFFFFFFF0 ), 750206917Smarius LIT64( 0xFFFFFFFFFFFFFFF8 ) 751206917Smarius}; 752206917Smarius 753206917Smariusstatic int64 int64RandomPInf( void ) 754206917Smarius{ 755206917Smarius int8 weightMaskNum; 756206917Smarius 757206917Smarius weightMaskNum = randomUint8() % int64NumPInfWeightMasks; 758206917Smarius return 759206917Smarius (sbits64) ( 760206917Smarius ( randomUint64() & int64PInfWeightMasks[ weightMaskNum ] ) 761206917Smarius + int64PInfWeightOffsets[ weightMaskNum ] 762206917Smarius ); 763206917Smarius 764206917Smarius} 765206917Smarius 766206917Smarius#endif 767206917Smarius 768206917Smariusenum { 769206917Smarius float32NumQIn = 22, 770206917Smarius float32NumQOut = 50, 771206917Smarius float32NumP1 = 4, 772206917Smarius float32NumP2 = 88 773206917Smarius}; 774206917Smarius 775206917Smariusstatic const uint32 float32QIn[ float32NumQIn ] = { 776206917Smarius 0x00000000, /* positive, subnormal */ 777206917Smarius 0x00800000, /* positive, -126 */ 778206917Smarius 0x33800000, /* positive, -24 */ 779206917Smarius 0x3E800000, /* positive, -2 */ 780206917Smarius 0x3F000000, /* positive, -1 */ 781206917Smarius 0x3F800000, /* positive, 0 */ 782206917Smarius 0x40000000, /* positive, 1 */ 783206917Smarius 0x40800000, /* positive, 2 */ 784206917Smarius 0x4B800000, /* positive, 24 */ 785206917Smarius 0x7F000000, /* positive, 127 */ 786206917Smarius 0x7F800000, /* positive, infinity or NaN */ 787206917Smarius 0x80000000, /* negative, subnormal */ 788206917Smarius 0x80800000, /* negative, -126 */ 789206917Smarius 0xB3800000, /* negative, -24 */ 790206917Smarius 0xBE800000, /* negative, -2 */ 791206917Smarius 0xBF000000, /* negative, -1 */ 792206917Smarius 0xBF800000, /* negative, 0 */ 793206917Smarius 0xC0000000, /* negative, 1 */ 794206917Smarius 0xC0800000, /* negative, 2 */ 795206917Smarius 0xCB800000, /* negative, 24 */ 796206917Smarius 0xFE800000, /* negative, 126 */ 797206917Smarius 0xFF800000 /* negative, infinity or NaN */ 798206917Smarius}; 799206917Smarius 800206917Smariusstatic const uint32 float32QOut[ float32NumQOut ] = { 801206917Smarius 0x00000000, /* positive, subnormal */ 802206917Smarius 0x00800000, /* positive, -126 */ 803206917Smarius 0x01000000, /* positive, -125 */ 804206917Smarius 0x33800000, /* positive, -24 */ 805206917Smarius 0x3D800000, /* positive, -4 */ 806206917Smarius 0x3E000000, /* positive, -3 */ 807206917Smarius 0x3E800000, /* positive, -2 */ 808206917Smarius 0x3F000000, /* positive, -1 */ 809206917Smarius 0x3F800000, /* positive, 0 */ 810206917Smarius 0x40000000, /* positive, 1 */ 811206917Smarius 0x40800000, /* positive, 2 */ 812206917Smarius 0x41000000, /* positive, 3 */ 813206917Smarius 0x41800000, /* positive, 4 */ 814206917Smarius 0x4B800000, /* positive, 24 */ 815206917Smarius 0x4E000000, /* positive, 29 */ 816206917Smarius 0x4E800000, /* positive, 30 */ 817206917Smarius 0x4F000000, /* positive, 31 */ 818206917Smarius 0x4F800000, /* positive, 32 */ 819206917Smarius 0x5E000000, /* positive, 61 */ 820206917Smarius 0x5E800000, /* positive, 62 */ 821206917Smarius 0x5F000000, /* positive, 63 */ 822206917Smarius 0x5F800000, /* positive, 64 */ 823206917Smarius 0x7E800000, /* positive, 126 */ 824206917Smarius 0x7F000000, /* positive, 127 */ 825206917Smarius 0x7F800000, /* positive, infinity or NaN */ 826206917Smarius 0x80000000, /* negative, subnormal */ 827206917Smarius 0x80800000, /* negative, -126 */ 828206917Smarius 0x81000000, /* negative, -125 */ 829206917Smarius 0xB3800000, /* negative, -24 */ 830206917Smarius 0xBD800000, /* negative, -4 */ 831206917Smarius 0xBE000000, /* negative, -3 */ 832206917Smarius 0xBE800000, /* negative, -2 */ 833206917Smarius 0xBF000000, /* negative, -1 */ 834206917Smarius 0xBF800000, /* negative, 0 */ 835206917Smarius 0xC0000000, /* negative, 1 */ 836206917Smarius 0xC0800000, /* negative, 2 */ 837206917Smarius 0xC1000000, /* negative, 3 */ 838206917Smarius 0xC1800000, /* negative, 4 */ 839206917Smarius 0xCB800000, /* negative, 24 */ 840206917Smarius 0xCE000000, /* negative, 29 */ 841206917Smarius 0xCE800000, /* negative, 30 */ 842206917Smarius 0xCF000000, /* negative, 31 */ 843206917Smarius 0xCF800000, /* negative, 32 */ 844206917Smarius 0xDE000000, /* negative, 61 */ 845206917Smarius 0xDE800000, /* negative, 62 */ 846206917Smarius 0xDF000000, /* negative, 63 */ 847206917Smarius 0xDF800000, /* negative, 64 */ 848206917Smarius 0xFE800000, /* negative, 126 */ 849206917Smarius 0xFF000000, /* negative, 127 */ 850206917Smarius 0xFF800000 /* negative, infinity or NaN */ 851206917Smarius}; 852206917Smarius 853206917Smariusstatic const uint32 float32P1[ float32NumP1 ] = { 854206917Smarius 0x00000000, 855206917Smarius 0x00000001, 856206917Smarius 0x007FFFFF, 857206917Smarius 0x007FFFFE 858206917Smarius}; 859206917Smarius 860206917Smariusstatic const uint32 float32P2[ float32NumP2 ] = { 861206917Smarius 0x00000000, 862206917Smarius 0x00000001, 863206917Smarius 0x00000002, 864206917Smarius 0x00000004, 865206917Smarius 0x00000008, 866206917Smarius 0x00000010, 867206917Smarius 0x00000020, 868206917Smarius 0x00000040, 869206917Smarius 0x00000080, 870206917Smarius 0x00000100, 871206917Smarius 0x00000200, 872206917Smarius 0x00000400, 873206917Smarius 0x00000800, 874206917Smarius 0x00001000, 875206917Smarius 0x00002000, 876206917Smarius 0x00004000, 877206917Smarius 0x00008000, 878206917Smarius 0x00010000, 879206917Smarius 0x00020000, 880206917Smarius 0x00040000, 881206917Smarius 0x00080000, 882206917Smarius 0x00100000, 883206917Smarius 0x00200000, 884206917Smarius 0x00400000, 885206917Smarius 0x00600000, 886206917Smarius 0x00700000, 887206917Smarius 0x00780000, 888206917Smarius 0x007C0000, 889206917Smarius 0x007E0000, 890206917Smarius 0x007F0000, 891206917Smarius 0x007F8000, 892206917Smarius 0x007FC000, 893206917Smarius 0x007FE000, 894206917Smarius 0x007FF000, 895206917Smarius 0x007FF800, 896206917Smarius 0x007FFC00, 897206917Smarius 0x007FFE00, 898206917Smarius 0x007FFF00, 899206917Smarius 0x007FFF80, 900206917Smarius 0x007FFFC0, 901206917Smarius 0x007FFFE0, 902206917Smarius 0x007FFFF0, 903206917Smarius 0x007FFFF8, 904206917Smarius 0x007FFFFC, 905206917Smarius 0x007FFFFE, 906206917Smarius 0x007FFFFF, 907206917Smarius 0x007FFFFD, 908206917Smarius 0x007FFFFB, 909206917Smarius 0x007FFFF7, 910206917Smarius 0x007FFFEF, 911206917Smarius 0x007FFFDF, 912206917Smarius 0x007FFFBF, 913206917Smarius 0x007FFF7F, 914206917Smarius 0x007FFEFF, 915206917Smarius 0x007FFDFF, 916206917Smarius 0x007FFBFF, 917206917Smarius 0x007FF7FF, 918206917Smarius 0x007FEFFF, 919206917Smarius 0x007FDFFF, 920206917Smarius 0x007FBFFF, 921206917Smarius 0x007F7FFF, 922206917Smarius 0x007EFFFF, 923206917Smarius 0x007DFFFF, 924206917Smarius 0x007BFFFF, 925206917Smarius 0x0077FFFF, 926206917Smarius 0x006FFFFF, 927206917Smarius 0x005FFFFF, 928206917Smarius 0x003FFFFF, 929206917Smarius 0x001FFFFF, 930206917Smarius 0x000FFFFF, 931206917Smarius 0x0007FFFF, 932206917Smarius 0x0003FFFF, 933206917Smarius 0x0001FFFF, 934206917Smarius 0x0000FFFF, 935206917Smarius 0x00007FFF, 936206917Smarius 0x00003FFF, 937206917Smarius 0x00001FFF, 938206917Smarius 0x00000FFF, 939206917Smarius 0x000007FF, 940206917Smarius 0x000003FF, 941206917Smarius 0x000001FF, 942206917Smarius 0x000000FF, 943206917Smarius 0x0000007F, 944206917Smarius 0x0000003F, 945206917Smarius 0x0000001F, 946206917Smarius 0x0000000F, 947206917Smarius 0x00000007, 948206917Smarius 0x00000003 949206917Smarius}; 950206917Smarius 951206917Smariusstatic const uint32 float32NumQInP1 = float32NumQIn * float32NumP1; 952206917Smariusstatic const uint32 float32NumQOutP1 = float32NumQOut * float32NumP1; 953206917Smarius 954206917Smariusstatic float32 float32NextQInP1( sequenceT *sequencePtr ) 955206917Smarius{ 956206917Smarius uint8 expNum, sigNum; 957206917Smarius float32 z; 958206917Smarius 959206917Smarius sigNum = sequencePtr->term1Num; 960206917Smarius expNum = sequencePtr->expNum; 961206917Smarius z = float32QIn[ expNum ] | float32P1[ sigNum ]; 962206917Smarius ++sigNum; 963206917Smarius if ( float32NumP1 <= sigNum ) { 964206917Smarius sigNum = 0; 965206917Smarius ++expNum; 966206917Smarius if ( float32NumQIn <= expNum ) { 967206917Smarius expNum = 0; 968206917Smarius sequencePtr->done = TRUE; 969206917Smarius } 970206917Smarius sequencePtr->expNum = expNum; 971206917Smarius } 972206917Smarius sequencePtr->term1Num = sigNum; 973206917Smarius return z; 974206917Smarius 975206917Smarius} 976206917Smarius 977206917Smariusstatic float32 float32NextQOutP1( sequenceT *sequencePtr ) 978206917Smarius{ 979206917Smarius uint8 expNum, sigNum; 980206917Smarius float32 z; 981206917Smarius 982206917Smarius sigNum = sequencePtr->term1Num; 983206917Smarius expNum = sequencePtr->expNum; 984206917Smarius z = float32QOut[ expNum ] | float32P1[ sigNum ]; 985206917Smarius ++sigNum; 986206917Smarius if ( float32NumP1 <= sigNum ) { 987206917Smarius sigNum = 0; 988206917Smarius ++expNum; 989206917Smarius if ( float32NumQOut <= expNum ) { 990206917Smarius expNum = 0; 991206917Smarius sequencePtr->done = TRUE; 992206917Smarius } 993206917Smarius sequencePtr->expNum = expNum; 994206917Smarius } 995206917Smarius sequencePtr->term1Num = sigNum; 996206917Smarius return z; 997206917Smarius 998206917Smarius} 999206917Smarius 1000206917Smariusstatic const uint32 float32NumQInP2 = float32NumQIn * float32NumP2; 1001206917Smariusstatic const uint32 float32NumQOutP2 = float32NumQOut * float32NumP2; 1002206917Smarius 1003206917Smariusstatic float32 float32NextQInP2( sequenceT *sequencePtr ) 1004206917Smarius{ 1005206917Smarius uint8 expNum, sigNum; 1006206917Smarius float32 z; 1007206917Smarius 1008206917Smarius sigNum = sequencePtr->term1Num; 1009206917Smarius expNum = sequencePtr->expNum; 1010206917Smarius z = float32QIn[ expNum ] | float32P2[ sigNum ]; 1011206917Smarius ++sigNum; 1012206917Smarius if ( float32NumP2 <= sigNum ) { 1013206917Smarius sigNum = 0; 1014206917Smarius ++expNum; 1015206917Smarius if ( float32NumQIn <= expNum ) { 1016206917Smarius expNum = 0; 1017206917Smarius sequencePtr->done = TRUE; 1018206917Smarius } 1019206917Smarius sequencePtr->expNum = expNum; 1020206917Smarius } 1021206917Smarius sequencePtr->term1Num = sigNum; 1022206917Smarius return z; 1023206917Smarius 1024206917Smarius} 1025206917Smarius 1026206917Smariusstatic float32 float32NextQOutP2( sequenceT *sequencePtr ) 1027206917Smarius{ 1028206917Smarius uint8 expNum, sigNum; 1029206917Smarius float32 z; 1030206917Smarius 1031206917Smarius sigNum = sequencePtr->term1Num; 1032206917Smarius expNum = sequencePtr->expNum; 1033206917Smarius z = float32QOut[ expNum ] | float32P2[ sigNum ]; 1034206917Smarius ++sigNum; 1035206917Smarius if ( float32NumP2 <= sigNum ) { 1036206917Smarius sigNum = 0; 1037206917Smarius ++expNum; 1038206917Smarius if ( float32NumQOut <= expNum ) { 1039206917Smarius expNum = 0; 1040206917Smarius sequencePtr->done = TRUE; 1041206917Smarius } 1042206917Smarius sequencePtr->expNum = expNum; 1043206917Smarius } 1044206917Smarius sequencePtr->term1Num = sigNum; 1045206917Smarius return z; 1046206917Smarius 1047206917Smarius} 1048206917Smarius 1049206917Smariusstatic float32 float32RandomQOutP3( void ) 1050206917Smarius{ 1051206917Smarius 1052206917Smarius return 1053206917Smarius float32QOut[ randomUint8() % float32NumQOut ] 1054206917Smarius | ( ( float32P2[ randomUint8() % float32NumP2 ] 1055206917Smarius + float32P2[ randomUint8() % float32NumP2 ] ) 1056206917Smarius & 0x007FFFFF ); 1057206917Smarius 1058206917Smarius} 1059206917Smarius 1060206917Smariusstatic float32 float32RandomQOutPInf( void ) 1061206917Smarius{ 1062206917Smarius 1063206917Smarius return 1064206917Smarius float32QOut[ randomUint8() % float32NumQOut ] 1065206917Smarius | ( randomUint32() & 0x007FFFFF ); 1066206917Smarius 1067206917Smarius} 1068206917Smarius 1069206917Smariusenum { 1070206917Smarius float32NumQInfWeightMasks = 7 1071206917Smarius}; 1072206917Smarius 1073206917Smariusstatic const uint32 float32QInfWeightMasks[ float32NumQInfWeightMasks ] = { 1074206917Smarius 0x7F800000, 1075206917Smarius 0x7F800000, 1076206917Smarius 0x3F800000, 1077206917Smarius 0x1F800000, 1078206917Smarius 0x0F800000, 1079206917Smarius 0x07800000, 1080206917Smarius 0x03800000 1081206917Smarius}; 1082206917Smarius 1083206917Smariusstatic const uint32 float32QInfWeightOffsets[ float32NumQInfWeightMasks ] = { 1084206917Smarius 0x00000000, 1085206917Smarius 0x00000000, 1086206917Smarius 0x20000000, 1087206917Smarius 0x30000000, 1088206917Smarius 0x38000000, 1089206917Smarius 0x3C000000, 1090206917Smarius 0x3E000000 1091206917Smarius}; 1092206917Smarius 1093206917Smariusstatic float32 float32RandomQInfP3( void ) 1094206917Smarius{ 1095206917Smarius int8 weightMaskNum; 1096206917Smarius 1097206917Smarius weightMaskNum = randomUint8() % float32NumQInfWeightMasks; 1098206917Smarius return 1099206917Smarius ( ( (uint32) ( randomUint8() & 1 ) )<<31 ) 1100206917Smarius | ( ( ( ( (uint32) ( randomUint16() & 0x1FF ) )<<23 ) 1101206917Smarius & float32QInfWeightMasks[ weightMaskNum ] ) 1102206917Smarius + float32QInfWeightOffsets[ weightMaskNum ] 1103206917Smarius ) 1104206917Smarius | ( ( float32P2[ randomUint8() % float32NumP2 ] 1105206917Smarius + float32P2[ randomUint8() % float32NumP2 ] ) 1106206917Smarius & 0x007FFFFF ); 1107206917Smarius 1108206917Smarius} 1109206917Smarius 1110206917Smariusstatic float32 float32RandomQInfPInf( void ) 1111206917Smarius{ 1112206917Smarius int8 weightMaskNum; 1113206917Smarius 1114206917Smarius weightMaskNum = randomUint8() % float32NumQInfWeightMasks; 1115206917Smarius return 1116206917Smarius ( ( (uint32) ( randomUint8() & 1 ) )<<31 ) 1117206917Smarius | ( ( ( ( (uint32) ( randomUint16() & 0x1FF ) )<<23 ) 1118206917Smarius & float32QInfWeightMasks[ weightMaskNum ] ) 1119206917Smarius + float32QInfWeightOffsets[ weightMaskNum ] 1120206917Smarius ) 1121206917Smarius | ( randomUint32() & 0x007FFFFF ); 1122206917Smarius 1123206917Smarius} 1124206917Smarius 1125206917Smariusstatic float32 float32Random( void ) 1126206917Smarius{ 1127206917Smarius 1128206917Smarius switch ( randomUint8() & 7 ) { 1129206917Smarius case 0: 1130206917Smarius case 1: 1131206917Smarius case 2: 1132206917Smarius return float32RandomQOutP3(); 1133206917Smarius case 3: 1134206917Smarius return float32RandomQOutPInf(); 1135206917Smarius case 4: 1136206917Smarius case 5: 1137206917Smarius case 6: 1138206917Smarius return float32RandomQInfP3(); 1139207151Smarius default: 1140206917Smarius return float32RandomQInfPInf(); 1141206917Smarius } 1142206917Smarius 1143206917Smarius} 1144206917Smarius 1145206917Smarius#ifdef BITS64 1146206917Smarius#define SETFLOAT64( z, zHigh, zLow ) z = ( ( (float64) zHigh )<<32 ) | zLow 1147206917Smarius#else 1148206917Smarius#define SETFLOAT64( z, zHigh, zLow ) z.low = zLow; z.high = zHigh 1149206917Smarius#endif 1150206917Smarius 1151206917Smariusenum { 1152206917Smarius float64NumQIn = 22, 1153206917Smarius float64NumQOut = 64, 1154206917Smarius float64NumP1 = 4, 1155206917Smarius float64NumP2 = 204 1156206917Smarius}; 1157206917Smarius 1158206917Smariusstatic const uint32 float64QIn[ float64NumQIn ] = { 1159206917Smarius 0x00000000, /* positive, subnormal */ 1160206917Smarius 0x00100000, /* positive, -1022 */ 1161206917Smarius 0x3CA00000, /* positive, -53 */ 1162206917Smarius 0x3FD00000, /* positive, -2 */ 1163206917Smarius 0x3FE00000, /* positive, -1 */ 1164206917Smarius 0x3FF00000, /* positive, 0 */ 1165206917Smarius 0x40000000, /* positive, 1 */ 1166206917Smarius 0x40100000, /* positive, 2 */ 1167206917Smarius 0x43400000, /* positive, 53 */ 1168206917Smarius 0x7FE00000, /* positive, 1023 */ 1169206917Smarius 0x7FF00000, /* positive, infinity or NaN */ 1170206917Smarius 0x80000000, /* negative, subnormal */ 1171206917Smarius 0x80100000, /* negative, -1022 */ 1172206917Smarius 0xBCA00000, /* negative, -53 */ 1173206917Smarius 0xBFD00000, /* negative, -2 */ 1174206917Smarius 0xBFE00000, /* negative, -1 */ 1175206917Smarius 0xBFF00000, /* negative, 0 */ 1176206917Smarius 0xC0000000, /* negative, 1 */ 1177206917Smarius 0xC0100000, /* negative, 2 */ 1178206917Smarius 0xC3400000, /* negative, 53 */ 1179206917Smarius 0xFFE00000, /* negative, 1023 */ 1180206917Smarius 0xFFF00000 /* negative, infinity or NaN */ 1181206917Smarius}; 1182206917Smarius 1183206917Smariusstatic const uint32 float64QOut[ float64NumQOut ] = { 1184206917Smarius 0x00000000, /* positive, subnormal */ 1185206917Smarius 0x00100000, /* positive, -1022 */ 1186206917Smarius 0x00200000, /* positive, -1021 */ 1187206917Smarius 0x37E00000, /* positive, -129 */ 1188206917Smarius 0x37F00000, /* positive, -128 */ 1189206917Smarius 0x38000000, /* positive, -127 */ 1190206917Smarius 0x38100000, /* positive, -126 */ 1191206917Smarius 0x3CA00000, /* positive, -53 */ 1192206917Smarius 0x3FB00000, /* positive, -4 */ 1193206917Smarius 0x3FC00000, /* positive, -3 */ 1194206917Smarius 0x3FD00000, /* positive, -2 */ 1195206917Smarius 0x3FE00000, /* positive, -1 */ 1196206917Smarius 0x3FF00000, /* positive, 0 */ 1197206917Smarius 0x40000000, /* positive, 1 */ 1198206917Smarius 0x40100000, /* positive, 2 */ 1199206917Smarius 0x40200000, /* positive, 3 */ 1200206917Smarius 0x40300000, /* positive, 4 */ 1201206917Smarius 0x41C00000, /* positive, 29 */ 1202206917Smarius 0x41D00000, /* positive, 30 */ 1203206917Smarius 0x41E00000, /* positive, 31 */ 1204206917Smarius 0x41F00000, /* positive, 32 */ 1205206917Smarius 0x43400000, /* positive, 53 */ 1206206917Smarius 0x43C00000, /* positive, 61 */ 1207206917Smarius 0x43D00000, /* positive, 62 */ 1208206917Smarius 0x43E00000, /* positive, 63 */ 1209206917Smarius 0x43F00000, /* positive, 64 */ 1210206917Smarius 0x47E00000, /* positive, 127 */ 1211206917Smarius 0x47F00000, /* positive, 128 */ 1212206917Smarius 0x48000000, /* positive, 129 */ 1213206917Smarius 0x7FD00000, /* positive, 1022 */ 1214206917Smarius 0x7FE00000, /* positive, 1023 */ 1215206917Smarius 0x7FF00000, /* positive, infinity or NaN */ 1216206917Smarius 0x80000000, /* negative, subnormal */ 1217206917Smarius 0x80100000, /* negative, -1022 */ 1218206917Smarius 0x80200000, /* negative, -1021 */ 1219206917Smarius 0xB7E00000, /* negative, -129 */ 1220206917Smarius 0xB7F00000, /* negative, -128 */ 1221206917Smarius 0xB8000000, /* negative, -127 */ 1222206917Smarius 0xB8100000, /* negative, -126 */ 1223206917Smarius 0xBCA00000, /* negative, -53 */ 1224206917Smarius 0xBFB00000, /* negative, -4 */ 1225206917Smarius 0xBFC00000, /* negative, -3 */ 1226206917Smarius 0xBFD00000, /* negative, -2 */ 1227206917Smarius 0xBFE00000, /* negative, -1 */ 1228206917Smarius 0xBFF00000, /* negative, 0 */ 1229206917Smarius 0xC0000000, /* negative, 1 */ 1230206917Smarius 0xC0100000, /* negative, 2 */ 1231206917Smarius 0xC0200000, /* negative, 3 */ 1232206917Smarius 0xC0300000, /* negative, 4 */ 1233206917Smarius 0xC1C00000, /* negative, 29 */ 1234206917Smarius 0xC1D00000, /* negative, 30 */ 1235206917Smarius 0xC1E00000, /* negative, 31 */ 1236206917Smarius 0xC1F00000, /* negative, 32 */ 1237206917Smarius 0xC3400000, /* negative, 53 */ 1238206917Smarius 0xC3C00000, /* negative, 61 */ 1239206917Smarius 0xC3D00000, /* negative, 62 */ 1240206917Smarius 0xC3E00000, /* negative, 63 */ 1241206917Smarius 0xC3F00000, /* negative, 64 */ 1242206917Smarius 0xC7E00000, /* negative, 127 */ 1243206917Smarius 0xC7F00000, /* negative, 128 */ 1244206917Smarius 0xC8000000, /* negative, 129 */ 1245206917Smarius 0xFFD00000, /* negative, 1022 */ 1246206917Smarius 0xFFE00000, /* negative, 1023 */ 1247206917Smarius 0xFFF00000 /* negative, infinity or NaN */ 1248206917Smarius}; 1249206917Smarius 1250206917Smariusstatic const struct { bits32 high, low; } float64P1[ float64NumP1 ] = { 1251206917Smarius { 0x00000000, 0x00000000 }, 1252206917Smarius { 0x00000000, 0x00000001 }, 1253206917Smarius { 0x000FFFFF, 0xFFFFFFFF }, 1254206917Smarius { 0x000FFFFF, 0xFFFFFFFE } 1255206917Smarius}; 1256206917Smarius 1257206917Smariusstatic const struct { bits32 high, low; } float64P2[ float64NumP2 ] = { 1258206917Smarius { 0x00000000, 0x00000000 }, 1259206917Smarius { 0x00000000, 0x00000001 }, 1260206917Smarius { 0x00000000, 0x00000002 }, 1261206917Smarius { 0x00000000, 0x00000004 }, 1262206917Smarius { 0x00000000, 0x00000008 }, 1263206917Smarius { 0x00000000, 0x00000010 }, 1264206917Smarius { 0x00000000, 0x00000020 }, 1265206917Smarius { 0x00000000, 0x00000040 }, 1266206917Smarius { 0x00000000, 0x00000080 }, 1267206917Smarius { 0x00000000, 0x00000100 }, 1268206917Smarius { 0x00000000, 0x00000200 }, 1269206917Smarius { 0x00000000, 0x00000400 }, 1270206917Smarius { 0x00000000, 0x00000800 }, 1271206917Smarius { 0x00000000, 0x00001000 }, 1272206917Smarius { 0x00000000, 0x00002000 }, 1273206917Smarius { 0x00000000, 0x00004000 }, 1274206917Smarius { 0x00000000, 0x00008000 }, 1275206917Smarius { 0x00000000, 0x00010000 }, 1276206917Smarius { 0x00000000, 0x00020000 }, 1277206917Smarius { 0x00000000, 0x00040000 }, 1278206917Smarius { 0x00000000, 0x00080000 }, 1279206917Smarius { 0x00000000, 0x00100000 }, 1280206917Smarius { 0x00000000, 0x00200000 }, 1281206917Smarius { 0x00000000, 0x00400000 }, 1282206917Smarius { 0x00000000, 0x00800000 }, 1283206917Smarius { 0x00000000, 0x01000000 }, 1284206917Smarius { 0x00000000, 0x02000000 }, 1285206917Smarius { 0x00000000, 0x04000000 }, 1286206917Smarius { 0x00000000, 0x08000000 }, 1287206917Smarius { 0x00000000, 0x10000000 }, 1288206917Smarius { 0x00000000, 0x20000000 }, 1289206917Smarius { 0x00000000, 0x40000000 }, 1290206917Smarius { 0x00000000, 0x80000000 }, 1291206917Smarius { 0x00000001, 0x00000000 }, 1292206917Smarius { 0x00000002, 0x00000000 }, 1293206917Smarius { 0x00000004, 0x00000000 }, 1294206917Smarius { 0x00000008, 0x00000000 }, 1295206917Smarius { 0x00000010, 0x00000000 }, 1296206917Smarius { 0x00000020, 0x00000000 }, 1297206917Smarius { 0x00000040, 0x00000000 }, 1298206917Smarius { 0x00000080, 0x00000000 }, 1299206917Smarius { 0x00000100, 0x00000000 }, 1300206917Smarius { 0x00000200, 0x00000000 }, 1301206917Smarius { 0x00000400, 0x00000000 }, 1302206917Smarius { 0x00000800, 0x00000000 }, 1303206917Smarius { 0x00001000, 0x00000000 }, 1304206917Smarius { 0x00002000, 0x00000000 }, 1305206917Smarius { 0x00004000, 0x00000000 }, 1306206917Smarius { 0x00008000, 0x00000000 }, 1307206917Smarius { 0x00010000, 0x00000000 }, 1308206917Smarius { 0x00020000, 0x00000000 }, 1309206917Smarius { 0x00040000, 0x00000000 }, 1310206917Smarius { 0x00080000, 0x00000000 }, 1311206917Smarius { 0x000C0000, 0x00000000 }, 1312206917Smarius { 0x000E0000, 0x00000000 }, 1313206917Smarius { 0x000F0000, 0x00000000 }, 1314206917Smarius { 0x000F8000, 0x00000000 }, 1315206917Smarius { 0x000FC000, 0x00000000 }, 1316206917Smarius { 0x000FE000, 0x00000000 }, 1317206917Smarius { 0x000FF000, 0x00000000 }, 1318206917Smarius { 0x000FF800, 0x00000000 }, 1319206917Smarius { 0x000FFC00, 0x00000000 }, 1320206917Smarius { 0x000FFE00, 0x00000000 }, 1321206917Smarius { 0x000FFF00, 0x00000000 }, 1322206917Smarius { 0x000FFF80, 0x00000000 }, 1323206917Smarius { 0x000FFFC0, 0x00000000 }, 1324206917Smarius { 0x000FFFE0, 0x00000000 }, 1325206917Smarius { 0x000FFFF0, 0x00000000 }, 1326206917Smarius { 0x000FFFF8, 0x00000000 }, 1327206917Smarius { 0x000FFFFC, 0x00000000 }, 1328206917Smarius { 0x000FFFFE, 0x00000000 }, 1329206917Smarius { 0x000FFFFF, 0x00000000 }, 1330206917Smarius { 0x000FFFFF, 0x80000000 }, 1331206917Smarius { 0x000FFFFF, 0xC0000000 }, 1332206917Smarius { 0x000FFFFF, 0xE0000000 }, 1333206917Smarius { 0x000FFFFF, 0xF0000000 }, 1334206917Smarius { 0x000FFFFF, 0xF8000000 }, 1335206917Smarius { 0x000FFFFF, 0xFC000000 }, 1336206917Smarius { 0x000FFFFF, 0xFE000000 }, 1337206917Smarius { 0x000FFFFF, 0xFF000000 }, 1338206917Smarius { 0x000FFFFF, 0xFF800000 }, 1339206917Smarius { 0x000FFFFF, 0xFFC00000 }, 1340206917Smarius { 0x000FFFFF, 0xFFE00000 }, 1341206917Smarius { 0x000FFFFF, 0xFFF00000 }, 1342206917Smarius { 0x000FFFFF, 0xFFF80000 }, 1343206917Smarius { 0x000FFFFF, 0xFFFC0000 }, 1344206917Smarius { 0x000FFFFF, 0xFFFE0000 }, 1345206917Smarius { 0x000FFFFF, 0xFFFF0000 }, 1346206917Smarius { 0x000FFFFF, 0xFFFF8000 }, 1347206917Smarius { 0x000FFFFF, 0xFFFFC000 }, 1348206917Smarius { 0x000FFFFF, 0xFFFFE000 }, 1349206917Smarius { 0x000FFFFF, 0xFFFFF000 }, 1350206917Smarius { 0x000FFFFF, 0xFFFFF800 }, 1351206917Smarius { 0x000FFFFF, 0xFFFFFC00 }, 1352206917Smarius { 0x000FFFFF, 0xFFFFFE00 }, 1353206917Smarius { 0x000FFFFF, 0xFFFFFF00 }, 1354206917Smarius { 0x000FFFFF, 0xFFFFFF80 }, 1355206917Smarius { 0x000FFFFF, 0xFFFFFFC0 }, 1356206917Smarius { 0x000FFFFF, 0xFFFFFFE0 }, 1357206917Smarius { 0x000FFFFF, 0xFFFFFFF0 }, 1358206917Smarius { 0x000FFFFF, 0xFFFFFFF8 }, 1359206917Smarius { 0x000FFFFF, 0xFFFFFFFC }, 1360206917Smarius { 0x000FFFFF, 0xFFFFFFFE }, 1361206917Smarius { 0x000FFFFF, 0xFFFFFFFF }, 1362206917Smarius { 0x000FFFFF, 0xFFFFFFFD }, 1363206917Smarius { 0x000FFFFF, 0xFFFFFFFB }, 1364206917Smarius { 0x000FFFFF, 0xFFFFFFF7 }, 1365206917Smarius { 0x000FFFFF, 0xFFFFFFEF }, 1366206917Smarius { 0x000FFFFF, 0xFFFFFFDF }, 1367206917Smarius { 0x000FFFFF, 0xFFFFFFBF }, 1368206917Smarius { 0x000FFFFF, 0xFFFFFF7F }, 1369206917Smarius { 0x000FFFFF, 0xFFFFFEFF }, 1370206917Smarius { 0x000FFFFF, 0xFFFFFDFF }, 1371206917Smarius { 0x000FFFFF, 0xFFFFFBFF }, 1372206917Smarius { 0x000FFFFF, 0xFFFFF7FF }, 1373206917Smarius { 0x000FFFFF, 0xFFFFEFFF }, 1374206917Smarius { 0x000FFFFF, 0xFFFFDFFF }, 1375206917Smarius { 0x000FFFFF, 0xFFFFBFFF }, 1376206917Smarius { 0x000FFFFF, 0xFFFF7FFF }, 1377206917Smarius { 0x000FFFFF, 0xFFFEFFFF }, 1378206917Smarius { 0x000FFFFF, 0xFFFDFFFF }, 1379206917Smarius { 0x000FFFFF, 0xFFFBFFFF }, 1380206917Smarius { 0x000FFFFF, 0xFFF7FFFF }, 1381206917Smarius { 0x000FFFFF, 0xFFEFFFFF }, 1382206917Smarius { 0x000FFFFF, 0xFFDFFFFF }, 1383206917Smarius { 0x000FFFFF, 0xFFBFFFFF }, 1384206917Smarius { 0x000FFFFF, 0xFF7FFFFF }, 1385206917Smarius { 0x000FFFFF, 0xFEFFFFFF }, 1386206917Smarius { 0x000FFFFF, 0xFDFFFFFF }, 1387206917Smarius { 0x000FFFFF, 0xFBFFFFFF }, 1388206917Smarius { 0x000FFFFF, 0xF7FFFFFF }, 1389206917Smarius { 0x000FFFFF, 0xEFFFFFFF }, 1390206917Smarius { 0x000FFFFF, 0xDFFFFFFF }, 1391206917Smarius { 0x000FFFFF, 0xBFFFFFFF }, 1392206917Smarius { 0x000FFFFF, 0x7FFFFFFF }, 1393206917Smarius { 0x000FFFFE, 0xFFFFFFFF }, 1394206917Smarius { 0x000FFFFD, 0xFFFFFFFF }, 1395206917Smarius { 0x000FFFFB, 0xFFFFFFFF }, 1396206917Smarius { 0x000FFFF7, 0xFFFFFFFF }, 1397206917Smarius { 0x000FFFEF, 0xFFFFFFFF }, 1398206917Smarius { 0x000FFFDF, 0xFFFFFFFF }, 1399206917Smarius { 0x000FFFBF, 0xFFFFFFFF }, 1400206917Smarius { 0x000FFF7F, 0xFFFFFFFF }, 1401206917Smarius { 0x000FFEFF, 0xFFFFFFFF }, 1402206917Smarius { 0x000FFDFF, 0xFFFFFFFF }, 1403206917Smarius { 0x000FFBFF, 0xFFFFFFFF }, 1404206917Smarius { 0x000FF7FF, 0xFFFFFFFF }, 1405206917Smarius { 0x000FEFFF, 0xFFFFFFFF }, 1406206917Smarius { 0x000FDFFF, 0xFFFFFFFF }, 1407206917Smarius { 0x000FBFFF, 0xFFFFFFFF }, 1408206917Smarius { 0x000F7FFF, 0xFFFFFFFF }, 1409206917Smarius { 0x000EFFFF, 0xFFFFFFFF }, 1410206917Smarius { 0x000DFFFF, 0xFFFFFFFF }, 1411206917Smarius { 0x000BFFFF, 0xFFFFFFFF }, 1412206917Smarius { 0x0007FFFF, 0xFFFFFFFF }, 1413206917Smarius { 0x0003FFFF, 0xFFFFFFFF }, 1414206917Smarius { 0x0001FFFF, 0xFFFFFFFF }, 1415206917Smarius { 0x0000FFFF, 0xFFFFFFFF }, 1416206917Smarius { 0x00007FFF, 0xFFFFFFFF }, 1417206917Smarius { 0x00003FFF, 0xFFFFFFFF }, 1418206917Smarius { 0x00001FFF, 0xFFFFFFFF }, 1419206917Smarius { 0x00000FFF, 0xFFFFFFFF }, 1420206917Smarius { 0x000007FF, 0xFFFFFFFF }, 1421206917Smarius { 0x000003FF, 0xFFFFFFFF }, 1422206917Smarius { 0x000001FF, 0xFFFFFFFF }, 1423206917Smarius { 0x000000FF, 0xFFFFFFFF }, 1424206917Smarius { 0x0000007F, 0xFFFFFFFF }, 1425206917Smarius { 0x0000003F, 0xFFFFFFFF }, 1426206917Smarius { 0x0000001F, 0xFFFFFFFF }, 1427206917Smarius { 0x0000000F, 0xFFFFFFFF }, 1428206917Smarius { 0x00000007, 0xFFFFFFFF }, 1429206917Smarius { 0x00000003, 0xFFFFFFFF }, 1430206917Smarius { 0x00000001, 0xFFFFFFFF }, 1431206917Smarius { 0x00000000, 0xFFFFFFFF }, 1432206917Smarius { 0x00000000, 0x7FFFFFFF }, 1433206917Smarius { 0x00000000, 0x3FFFFFFF }, 1434206917Smarius { 0x00000000, 0x1FFFFFFF }, 1435206917Smarius { 0x00000000, 0x0FFFFFFF }, 1436206917Smarius { 0x00000000, 0x07FFFFFF }, 1437206917Smarius { 0x00000000, 0x03FFFFFF }, 1438206917Smarius { 0x00000000, 0x01FFFFFF }, 1439206917Smarius { 0x00000000, 0x00FFFFFF }, 1440206917Smarius { 0x00000000, 0x007FFFFF }, 1441206917Smarius { 0x00000000, 0x003FFFFF }, 1442206917Smarius { 0x00000000, 0x001FFFFF }, 1443206917Smarius { 0x00000000, 0x000FFFFF }, 1444206917Smarius { 0x00000000, 0x0007FFFF }, 1445206917Smarius { 0x00000000, 0x0003FFFF }, 1446206917Smarius { 0x00000000, 0x0001FFFF }, 1447206917Smarius { 0x00000000, 0x0000FFFF }, 1448206917Smarius { 0x00000000, 0x00007FFF }, 1449206917Smarius { 0x00000000, 0x00003FFF }, 1450206917Smarius { 0x00000000, 0x00001FFF }, 1451206917Smarius { 0x00000000, 0x00000FFF }, 1452206917Smarius { 0x00000000, 0x000007FF }, 1453206917Smarius { 0x00000000, 0x000003FF }, 1454206917Smarius { 0x00000000, 0x000001FF }, 1455206917Smarius { 0x00000000, 0x000000FF }, 1456206917Smarius { 0x00000000, 0x0000007F }, 1457206917Smarius { 0x00000000, 0x0000003F }, 1458206917Smarius { 0x00000000, 0x0000001F }, 1459206917Smarius { 0x00000000, 0x0000000F }, 1460206917Smarius { 0x00000000, 0x00000007 }, 1461206917Smarius { 0x00000000, 0x00000003 } 1462206917Smarius}; 1463206917Smarius 1464206917Smariusstatic const uint32 float64NumQInP1 = float64NumQIn * float64NumP1; 1465206917Smariusstatic const uint32 float64NumQOutP1 = float64NumQOut * float64NumP1; 1466206917Smarius 1467206917Smariusstatic float64 float64NextQInP1( sequenceT *sequencePtr ) 1468206917Smarius{ 1469206917Smarius uint8 expNum, sigNum; 1470206917Smarius float64 z; 1471206917Smarius 1472206917Smarius sigNum = sequencePtr->term1Num; 1473206917Smarius expNum = sequencePtr->expNum; 1474206917Smarius SETFLOAT64( 1475206917Smarius z, 1476206917Smarius float64QIn[ expNum ] | float64P1[ sigNum ].high, 1477206917Smarius float64P1[ sigNum ].low 1478206917Smarius ); 1479206917Smarius ++sigNum; 1480206917Smarius if ( float64NumP1 <= sigNum ) { 1481206917Smarius sigNum = 0; 1482206917Smarius ++expNum; 1483206917Smarius if ( float64NumQIn <= expNum ) { 1484206917Smarius expNum = 0; 1485206917Smarius sequencePtr->done = TRUE; 1486206917Smarius } 1487206917Smarius sequencePtr->expNum = expNum; 1488206917Smarius } 1489206917Smarius sequencePtr->term1Num = sigNum; 1490206917Smarius return z; 1491206917Smarius 1492206917Smarius} 1493206917Smarius 1494206917Smariusstatic float64 float64NextQOutP1( sequenceT *sequencePtr ) 1495206917Smarius{ 1496206917Smarius uint8 expNum, sigNum; 1497206917Smarius float64 z; 1498206917Smarius 1499206917Smarius sigNum = sequencePtr->term1Num; 1500206917Smarius expNum = sequencePtr->expNum; 1501206917Smarius SETFLOAT64( 1502206917Smarius z, 1503206917Smarius float64QOut[ expNum ] | float64P1[ sigNum ].high, 1504206917Smarius float64P1[ sigNum ].low 1505206917Smarius ); 1506206917Smarius ++sigNum; 1507206917Smarius if ( float64NumP1 <= sigNum ) { 1508206917Smarius sigNum = 0; 1509206917Smarius ++expNum; 1510206917Smarius if ( float64NumQOut <= expNum ) { 1511206917Smarius expNum = 0; 1512206917Smarius sequencePtr->done = TRUE; 1513206917Smarius } 1514206917Smarius sequencePtr->expNum = expNum; 1515206917Smarius } 1516206917Smarius sequencePtr->term1Num = sigNum; 1517206917Smarius return z; 1518206917Smarius 1519206917Smarius} 1520206917Smarius 1521206917Smariusstatic const uint32 float64NumQInP2 = float64NumQIn * float64NumP2; 1522206917Smariusstatic const uint32 float64NumQOutP2 = float64NumQOut * float64NumP2; 1523206917Smarius 1524206917Smariusstatic float64 float64NextQInP2( sequenceT *sequencePtr ) 1525206917Smarius{ 1526206917Smarius uint8 expNum, sigNum; 1527206917Smarius float64 z; 1528206917Smarius 1529206917Smarius sigNum = sequencePtr->term1Num; 1530206917Smarius expNum = sequencePtr->expNum; 1531206917Smarius SETFLOAT64( 1532206917Smarius z, 1533206917Smarius float64QIn[ expNum ] | float64P2[ sigNum ].high, 1534206917Smarius float64P2[ sigNum ].low 1535206917Smarius ); 1536206917Smarius ++sigNum; 1537206917Smarius if ( float64NumP2 <= sigNum ) { 1538206917Smarius sigNum = 0; 1539206917Smarius ++expNum; 1540206917Smarius if ( float64NumQIn <= expNum ) { 1541206917Smarius expNum = 0; 1542206917Smarius sequencePtr->done = TRUE; 1543206917Smarius } 1544206917Smarius sequencePtr->expNum = expNum; 1545206917Smarius } 1546206917Smarius sequencePtr->term1Num = sigNum; 1547206917Smarius return z; 1548206917Smarius 1549206917Smarius} 1550206917Smarius 1551206917Smariusstatic float64 float64NextQOutP2( sequenceT *sequencePtr ) 1552206917Smarius{ 1553206917Smarius uint8 expNum, sigNum; 1554206917Smarius float64 z; 1555206917Smarius 1556206917Smarius sigNum = sequencePtr->term1Num; 1557206917Smarius expNum = sequencePtr->expNum; 1558206917Smarius SETFLOAT64( 1559206917Smarius z, 1560206917Smarius float64QOut[ expNum ] | float64P2[ sigNum ].high, 1561206917Smarius float64P2[ sigNum ].low 1562206917Smarius ); 1563206917Smarius ++sigNum; 1564206917Smarius if ( float64NumP2 <= sigNum ) { 1565206917Smarius sigNum = 0; 1566206917Smarius ++expNum; 1567206917Smarius if ( float64NumQOut <= expNum ) { 1568206917Smarius expNum = 0; 1569206917Smarius sequencePtr->done = TRUE; 1570206917Smarius } 1571206917Smarius sequencePtr->expNum = expNum; 1572206917Smarius } 1573206917Smarius sequencePtr->term1Num = sigNum; 1574206917Smarius return z; 1575206917Smarius 1576206917Smarius} 1577206917Smarius 1578206917Smariusstatic float64 float64RandomQOutP3( void ) 1579206917Smarius{ 1580206917Smarius int8 sigNum1, sigNum2; 1581206917Smarius uint32 sig1Low, sig2Low, zLow; 1582206917Smarius float64 z; 1583206917Smarius 1584206917Smarius sigNum1 = randomUint8() % float64NumP2; 1585206917Smarius sigNum2 = randomUint8() % float64NumP2; 1586206917Smarius sig1Low = float64P2[ sigNum1 ].low; 1587206917Smarius sig2Low = float64P2[ sigNum2 ].low; 1588206917Smarius zLow = sig1Low + sig2Low; 1589206917Smarius SETFLOAT64( 1590206917Smarius z, 1591206917Smarius float64QOut[ randomUint8() % float64NumQOut ] 1592206917Smarius | ( ( float64P2[ sigNum1 ].high 1593206917Smarius + float64P2[ sigNum2 ].high 1594206917Smarius + ( zLow < sig1Low ) 1595206917Smarius ) 1596206917Smarius & 0x000FFFFF 1597206917Smarius ), 1598206917Smarius zLow 1599206917Smarius ); 1600206917Smarius return z; 1601206917Smarius 1602206917Smarius} 1603206917Smarius 1604206917Smariusstatic float64 float64RandomQOutPInf( void ) 1605206917Smarius{ 1606206917Smarius float64 z; 1607206917Smarius 1608206917Smarius SETFLOAT64( 1609206917Smarius z, 1610206917Smarius float64QOut[ randomUint8() % float64NumQOut ] 1611206917Smarius | ( randomUint32() & 0x000FFFFF ), 1612206917Smarius randomUint32() 1613206917Smarius ); 1614206917Smarius return z; 1615206917Smarius 1616206917Smarius} 1617206917Smarius 1618206917Smariusenum { 1619206917Smarius float64NumQInfWeightMasks = 10 1620206917Smarius}; 1621206917Smarius 1622206917Smariusstatic const uint32 float64QInfWeightMasks[ float64NumQInfWeightMasks ] = { 1623206917Smarius 0x7FF00000, 1624206917Smarius 0x7FF00000, 1625206917Smarius 0x3FF00000, 1626206917Smarius 0x1FF00000, 1627206917Smarius 0x0FF00000, 1628206917Smarius 0x07F00000, 1629206917Smarius 0x03F00000, 1630206917Smarius 0x01F00000, 1631206917Smarius 0x00F00000, 1632206917Smarius 0x00700000 1633206917Smarius}; 1634206917Smarius 1635206917Smariusstatic const uint32 float64QInfWeightOffsets[ float64NumQInfWeightMasks ] = { 1636206917Smarius 0x00000000, 1637206917Smarius 0x00000000, 1638206917Smarius 0x20000000, 1639206917Smarius 0x30000000, 1640206917Smarius 0x38000000, 1641206917Smarius 0x3C000000, 1642206917Smarius 0x3E000000, 1643206917Smarius 0x3F000000, 1644206917Smarius 0x3F800000, 1645206917Smarius 0x3FC00000 1646206917Smarius}; 1647206917Smarius 1648206917Smariusstatic float64 float64RandomQInfP3( void ) 1649206917Smarius{ 1650206917Smarius int8 sigNum1, sigNum2; 1651206917Smarius uint32 sig1Low, sig2Low, zLow; 1652206917Smarius int8 weightMaskNum; 1653206917Smarius float64 z; 1654206917Smarius 1655206917Smarius sigNum1 = randomUint8() % float64NumP2; 1656206917Smarius sigNum2 = randomUint8() % float64NumP2; 1657206917Smarius sig1Low = float64P2[ sigNum1 ].low; 1658206917Smarius sig2Low = float64P2[ sigNum2 ].low; 1659206917Smarius zLow = sig1Low + sig2Low; 1660206917Smarius weightMaskNum = randomUint8() % float64NumQInfWeightMasks; 1661206917Smarius SETFLOAT64( 1662206917Smarius z, 1663206917Smarius ( ( (uint32) ( randomUint8() & 1 ) )<<31 ) 1664206917Smarius | ( ( ( ( (uint32) ( randomUint16() & 0xFFF ) )<<20 ) 1665206917Smarius & float64QInfWeightMasks[ weightMaskNum ] ) 1666206917Smarius + float64QInfWeightOffsets[ weightMaskNum ] 1667206917Smarius ) 1668206917Smarius | ( ( float64P2[ sigNum1 ].high 1669206917Smarius + float64P2[ sigNum2 ].high 1670206917Smarius + ( zLow < sig1Low ) 1671206917Smarius ) 1672206917Smarius & 0x000FFFFF 1673206917Smarius ), 1674206917Smarius zLow 1675206917Smarius ); 1676206917Smarius return z; 1677206917Smarius 1678206917Smarius} 1679206917Smarius 1680206917Smariusstatic float64 float64RandomQInfPInf( void ) 1681206917Smarius{ 1682206917Smarius int8 weightMaskNum; 1683206917Smarius float64 z; 1684206917Smarius 1685206917Smarius weightMaskNum = randomUint8() % float64NumQInfWeightMasks; 1686206917Smarius SETFLOAT64( 1687206917Smarius z, 1688206917Smarius ( ( (uint32) ( randomUint8() & 1 ) )<<31 ) 1689206917Smarius | ( ( ( ( (uint32) ( randomUint16() & 0xFFF ) )<<20 ) 1690206917Smarius & float64QInfWeightMasks[ weightMaskNum ] ) 1691206917Smarius + float64QInfWeightOffsets[ weightMaskNum ] 1692206917Smarius ) 1693206917Smarius | ( randomUint32() & 0x000FFFFF ), 1694206917Smarius randomUint32() 1695206917Smarius ); 1696206917Smarius return z; 1697206917Smarius 1698206917Smarius} 1699206917Smarius 1700206917Smariusstatic float64 float64Random( void ) 1701206917Smarius{ 1702206917Smarius 1703206917Smarius switch ( randomUint8() & 7 ) { 1704206917Smarius case 0: 1705206917Smarius case 1: 1706206917Smarius case 2: 1707206917Smarius return float64RandomQOutP3(); 1708206917Smarius case 3: 1709206917Smarius return float64RandomQOutPInf(); 1710206917Smarius case 4: 1711206917Smarius case 5: 1712206917Smarius case 6: 1713206917Smarius return float64RandomQInfP3(); 1714207151Smarius default: 1715206917Smarius return float64RandomQInfPInf(); 1716206917Smarius } 1717206917Smarius 1718206917Smarius} 1719206917Smarius 1720206917Smarius#ifdef FLOATX80 1721206917Smarius 1722206917Smariusenum { 1723206917Smarius floatx80NumQIn = 22, 1724206917Smarius floatx80NumQOut = 76, 1725206917Smarius floatx80NumP1 = 4, 1726206917Smarius floatx80NumP2 = 248 1727206917Smarius}; 1728206917Smarius 1729206917Smariusstatic const uint16 floatx80QIn[ floatx80NumQIn ] = { 1730206917Smarius 0x0000, /* positive, subnormal */ 1731206917Smarius 0x0001, /* positive, -16382 */ 1732206917Smarius 0x3FBF, /* positive, -64 */ 1733206917Smarius 0x3FFD, /* positive, -2 */ 1734206917Smarius 0x3FFE, /* positive, -1 */ 1735206917Smarius 0x3FFF, /* positive, 0 */ 1736206917Smarius 0x4000, /* positive, 1 */ 1737206917Smarius 0x4001, /* positive, 2 */ 1738206917Smarius 0x403F, /* positive, 64 */ 1739206917Smarius 0x7FFE, /* positive, 16383 */ 1740206917Smarius 0x7FFF, /* positive, infinity or NaN */ 1741206917Smarius 0x8000, /* negative, subnormal */ 1742206917Smarius 0x8001, /* negative, -16382 */ 1743206917Smarius 0xBFBF, /* negative, -64 */ 1744206917Smarius 0xBFFD, /* negative, -2 */ 1745206917Smarius 0xBFFE, /* negative, -1 */ 1746206917Smarius 0xBFFF, /* negative, 0 */ 1747206917Smarius 0xC000, /* negative, 1 */ 1748206917Smarius 0xC001, /* negative, 2 */ 1749206917Smarius 0xC03F, /* negative, 64 */ 1750206917Smarius 0xFFFE, /* negative, 16383 */ 1751206917Smarius 0xFFFF /* negative, infinity or NaN */ 1752206917Smarius}; 1753206917Smarius 1754206917Smariusstatic const uint16 floatx80QOut[ floatx80NumQOut ] = { 1755206917Smarius 0x0000, /* positive, subnormal */ 1756206917Smarius 0x0001, /* positive, -16382 */ 1757206917Smarius 0x0002, /* positive, -16381 */ 1758206917Smarius 0x3BFE, /* positive, -1025 */ 1759206917Smarius 0x3BFF, /* positive, -1024 */ 1760206917Smarius 0x3C00, /* positive, -1023 */ 1761206917Smarius 0x3C01, /* positive, -1022 */ 1762206917Smarius 0x3F7E, /* positive, -129 */ 1763206917Smarius 0x3F7F, /* positive, -128 */ 1764206917Smarius 0x3F80, /* positive, -127 */ 1765206917Smarius 0x3F81, /* positive, -126 */ 1766206917Smarius 0x3FBF, /* positive, -64 */ 1767206917Smarius 0x3FFB, /* positive, -4 */ 1768206917Smarius 0x3FFC, /* positive, -3 */ 1769206917Smarius 0x3FFD, /* positive, -2 */ 1770206917Smarius 0x3FFE, /* positive, -1 */ 1771206917Smarius 0x3FFF, /* positive, 0 */ 1772206917Smarius 0x4000, /* positive, 1 */ 1773206917Smarius 0x4001, /* positive, 2 */ 1774206917Smarius 0x4002, /* positive, 3 */ 1775206917Smarius 0x4003, /* positive, 4 */ 1776206917Smarius 0x401C, /* positive, 29 */ 1777206917Smarius 0x401D, /* positive, 30 */ 1778206917Smarius 0x401E, /* positive, 31 */ 1779206917Smarius 0x401F, /* positive, 32 */ 1780206917Smarius 0x403C, /* positive, 61 */ 1781206917Smarius 0x403D, /* positive, 62 */ 1782206917Smarius 0x403E, /* positive, 63 */ 1783206917Smarius 0x403F, /* positive, 64 */ 1784206917Smarius 0x407E, /* positive, 127 */ 1785206917Smarius 0x407F, /* positive, 128 */ 1786206917Smarius 0x4080, /* positive, 129 */ 1787206917Smarius 0x43FE, /* positive, 1023 */ 1788206917Smarius 0x43FF, /* positive, 1024 */ 1789206917Smarius 0x4400, /* positive, 1025 */ 1790206917Smarius 0x7FFD, /* positive, 16382 */ 1791206917Smarius 0x7FFE, /* positive, 16383 */ 1792206917Smarius 0x7FFF, /* positive, infinity or NaN */ 1793206917Smarius 0x8000, /* negative, subnormal */ 1794206917Smarius 0x8001, /* negative, -16382 */ 1795206917Smarius 0x8002, /* negative, -16381 */ 1796206917Smarius 0xBBFE, /* negative, -1025 */ 1797206917Smarius 0xBBFF, /* negative, -1024 */ 1798206917Smarius 0xBC00, /* negative, -1023 */ 1799206917Smarius 0xBC01, /* negative, -1022 */ 1800206917Smarius 0xBF7E, /* negative, -129 */ 1801206917Smarius 0xBF7F, /* negative, -128 */ 1802206917Smarius 0xBF80, /* negative, -127 */ 1803206917Smarius 0xBF81, /* negative, -126 */ 1804206917Smarius 0xBFBF, /* negative, -64 */ 1805206917Smarius 0xBFFB, /* negative, -4 */ 1806206917Smarius 0xBFFC, /* negative, -3 */ 1807206917Smarius 0xBFFD, /* negative, -2 */ 1808206917Smarius 0xBFFE, /* negative, -1 */ 1809206917Smarius 0xBFFF, /* negative, 0 */ 1810206917Smarius 0xC000, /* negative, 1 */ 1811206917Smarius 0xC001, /* negative, 2 */ 1812206917Smarius 0xC002, /* negative, 3 */ 1813206917Smarius 0xC003, /* negative, 4 */ 1814206917Smarius 0xC01C, /* negative, 29 */ 1815206917Smarius 0xC01D, /* negative, 30 */ 1816206917Smarius 0xC01E, /* negative, 31 */ 1817206917Smarius 0xC01F, /* negative, 32 */ 1818206917Smarius 0xC03C, /* negative, 61 */ 1819206917Smarius 0xC03D, /* negative, 62 */ 1820206917Smarius 0xC03E, /* negative, 63 */ 1821206917Smarius 0xC03F, /* negative, 64 */ 1822206917Smarius 0xC07E, /* negative, 127 */ 1823206917Smarius 0xC07F, /* negative, 128 */ 1824206917Smarius 0xC080, /* negative, 129 */ 1825206917Smarius 0xC3FE, /* negative, 1023 */ 1826206917Smarius 0xC3FF, /* negative, 1024 */ 1827206917Smarius 0xC400, /* negative, 1025 */ 1828206917Smarius 0xFFFD, /* negative, 16382 */ 1829206917Smarius 0xFFFE, /* negative, 16383 */ 1830206917Smarius 0xFFFF /* negative, infinity or NaN */ 1831206917Smarius}; 1832206917Smarius 1833206917Smariusstatic const bits64 floatx80P1[ floatx80NumP1 ] = { 1834206917Smarius LIT64( 0x0000000000000000 ), 1835206917Smarius LIT64( 0x0000000000000001 ), 1836206917Smarius LIT64( 0x7FFFFFFFFFFFFFFF ), 1837206917Smarius LIT64( 0x7FFFFFFFFFFFFFFE ) 1838206917Smarius}; 1839206917Smarius 1840206917Smariusstatic const bits64 floatx80P2[ floatx80NumP2 ] = { 1841206917Smarius LIT64( 0x0000000000000000 ), 1842206917Smarius LIT64( 0x0000000000000001 ), 1843206917Smarius LIT64( 0x0000000000000002 ), 1844206917Smarius LIT64( 0x0000000000000004 ), 1845206917Smarius LIT64( 0x0000000000000008 ), 1846206917Smarius LIT64( 0x0000000000000010 ), 1847206917Smarius LIT64( 0x0000000000000020 ), 1848206917Smarius LIT64( 0x0000000000000040 ), 1849206917Smarius LIT64( 0x0000000000000080 ), 1850206917Smarius LIT64( 0x0000000000000100 ), 1851206917Smarius LIT64( 0x0000000000000200 ), 1852206917Smarius LIT64( 0x0000000000000400 ), 1853206917Smarius LIT64( 0x0000000000000800 ), 1854206917Smarius LIT64( 0x0000000000001000 ), 1855206917Smarius LIT64( 0x0000000000002000 ), 1856206917Smarius LIT64( 0x0000000000004000 ), 1857206917Smarius LIT64( 0x0000000000008000 ), 1858206917Smarius LIT64( 0x0000000000010000 ), 1859206917Smarius LIT64( 0x0000000000020000 ), 1860206917Smarius LIT64( 0x0000000000040000 ), 1861206917Smarius LIT64( 0x0000000000080000 ), 1862206917Smarius LIT64( 0x0000000000100000 ), 1863206917Smarius LIT64( 0x0000000000200000 ), 1864206917Smarius LIT64( 0x0000000000400000 ), 1865206917Smarius LIT64( 0x0000000000800000 ), 1866206917Smarius LIT64( 0x0000000001000000 ), 1867206917Smarius LIT64( 0x0000000002000000 ), 1868206917Smarius LIT64( 0x0000000004000000 ), 1869206917Smarius LIT64( 0x0000000008000000 ), 1870206917Smarius LIT64( 0x0000000010000000 ), 1871206917Smarius LIT64( 0x0000000020000000 ), 1872206917Smarius LIT64( 0x0000000040000000 ), 1873206917Smarius LIT64( 0x0000000080000000 ), 1874206917Smarius LIT64( 0x0000000100000000 ), 1875206917Smarius LIT64( 0x0000000200000000 ), 1876206917Smarius LIT64( 0x0000000400000000 ), 1877206917Smarius LIT64( 0x0000000800000000 ), 1878206917Smarius LIT64( 0x0000001000000000 ), 1879206917Smarius LIT64( 0x0000002000000000 ), 1880206917Smarius LIT64( 0x0000004000000000 ), 1881206917Smarius LIT64( 0x0000008000000000 ), 1882206917Smarius LIT64( 0x0000010000000000 ), 1883206917Smarius LIT64( 0x0000020000000000 ), 1884206917Smarius LIT64( 0x0000040000000000 ), 1885206917Smarius LIT64( 0x0000080000000000 ), 1886206917Smarius LIT64( 0x0000100000000000 ), 1887206917Smarius LIT64( 0x0000200000000000 ), 1888206917Smarius LIT64( 0x0000400000000000 ), 1889206917Smarius LIT64( 0x0000800000000000 ), 1890206917Smarius LIT64( 0x0001000000000000 ), 1891206917Smarius LIT64( 0x0002000000000000 ), 1892206917Smarius LIT64( 0x0004000000000000 ), 1893206917Smarius LIT64( 0x0008000000000000 ), 1894206917Smarius LIT64( 0x0010000000000000 ), 1895206917Smarius LIT64( 0x0020000000000000 ), 1896206917Smarius LIT64( 0x0040000000000000 ), 1897206917Smarius LIT64( 0x0080000000000000 ), 1898206917Smarius LIT64( 0x0100000000000000 ), 1899206917Smarius LIT64( 0x0200000000000000 ), 1900206917Smarius LIT64( 0x0400000000000000 ), 1901206917Smarius LIT64( 0x0800000000000000 ), 1902206917Smarius LIT64( 0x1000000000000000 ), 1903206917Smarius LIT64( 0x2000000000000000 ), 1904206917Smarius LIT64( 0x4000000000000000 ), 1905206917Smarius LIT64( 0x6000000000000000 ), 1906206917Smarius LIT64( 0x7000000000000000 ), 1907206917Smarius LIT64( 0x7800000000000000 ), 1908206917Smarius LIT64( 0x7C00000000000000 ), 1909206917Smarius LIT64( 0x7E00000000000000 ), 1910206917Smarius LIT64( 0x7F00000000000000 ), 1911206917Smarius LIT64( 0x7F80000000000000 ), 1912206917Smarius LIT64( 0x7FC0000000000000 ), 1913206917Smarius LIT64( 0x7FE0000000000000 ), 1914206917Smarius LIT64( 0x7FF0000000000000 ), 1915206917Smarius LIT64( 0x7FF8000000000000 ), 1916206917Smarius LIT64( 0x7FFC000000000000 ), 1917206917Smarius LIT64( 0x7FFE000000000000 ), 1918206917Smarius LIT64( 0x7FFF000000000000 ), 1919206917Smarius LIT64( 0x7FFF800000000000 ), 1920206917Smarius LIT64( 0x7FFFC00000000000 ), 1921206917Smarius LIT64( 0x7FFFE00000000000 ), 1922206917Smarius LIT64( 0x7FFFF00000000000 ), 1923206917Smarius LIT64( 0x7FFFF80000000000 ), 1924206917Smarius LIT64( 0x7FFFFC0000000000 ), 1925206917Smarius LIT64( 0x7FFFFE0000000000 ), 1926206917Smarius LIT64( 0x7FFFFF0000000000 ), 1927206917Smarius LIT64( 0x7FFFFF8000000000 ), 1928206917Smarius LIT64( 0x7FFFFFC000000000 ), 1929206917Smarius LIT64( 0x7FFFFFE000000000 ), 1930206917Smarius LIT64( 0x7FFFFFF000000000 ), 1931206917Smarius LIT64( 0x7FFFFFF800000000 ), 1932206917Smarius LIT64( 0x7FFFFFFC00000000 ), 1933206917Smarius LIT64( 0x7FFFFFFE00000000 ), 1934206917Smarius LIT64( 0x7FFFFFFF00000000 ), 1935206917Smarius LIT64( 0x7FFFFFFF80000000 ), 1936206917Smarius LIT64( 0x7FFFFFFFC0000000 ), 1937206917Smarius LIT64( 0x7FFFFFFFE0000000 ), 1938206917Smarius LIT64( 0x7FFFFFFFF0000000 ), 1939206917Smarius LIT64( 0x7FFFFFFFF8000000 ), 1940206917Smarius LIT64( 0x7FFFFFFFFC000000 ), 1941206917Smarius LIT64( 0x7FFFFFFFFE000000 ), 1942206917Smarius LIT64( 0x7FFFFFFFFF000000 ), 1943206917Smarius LIT64( 0x7FFFFFFFFF800000 ), 1944206917Smarius LIT64( 0x7FFFFFFFFFC00000 ), 1945206917Smarius LIT64( 0x7FFFFFFFFFE00000 ), 1946206917Smarius LIT64( 0x7FFFFFFFFFF00000 ), 1947206917Smarius LIT64( 0x7FFFFFFFFFF80000 ), 1948206917Smarius LIT64( 0x7FFFFFFFFFFC0000 ), 1949206917Smarius LIT64( 0x7FFFFFFFFFFE0000 ), 1950206917Smarius LIT64( 0x7FFFFFFFFFFF0000 ), 1951206917Smarius LIT64( 0x7FFFFFFFFFFF8000 ), 1952206917Smarius LIT64( 0x7FFFFFFFFFFFC000 ), 1953206917Smarius LIT64( 0x7FFFFFFFFFFFE000 ), 1954206917Smarius LIT64( 0x7FFFFFFFFFFFF000 ), 1955206917Smarius LIT64( 0x7FFFFFFFFFFFF800 ), 1956206917Smarius LIT64( 0x7FFFFFFFFFFFFC00 ), 1957206917Smarius LIT64( 0x7FFFFFFFFFFFFE00 ), 1958206917Smarius LIT64( 0x7FFFFFFFFFFFFF00 ), 1959206917Smarius LIT64( 0x7FFFFFFFFFFFFF80 ), 1960206917Smarius LIT64( 0x7FFFFFFFFFFFFFC0 ), 1961206917Smarius LIT64( 0x7FFFFFFFFFFFFFE0 ), 1962206917Smarius LIT64( 0x7FFFFFFFFFFFFFF0 ), 1963206917Smarius LIT64( 0x7FFFFFFFFFFFFFF8 ), 1964206917Smarius LIT64( 0x7FFFFFFFFFFFFFFC ), 1965206917Smarius LIT64( 0x7FFFFFFFFFFFFFFE ), 1966206917Smarius LIT64( 0x7FFFFFFFFFFFFFFF ), 1967206917Smarius LIT64( 0x7FFFFFFFFFFFFFFD ), 1968206917Smarius LIT64( 0x7FFFFFFFFFFFFFFB ), 1969206917Smarius LIT64( 0x7FFFFFFFFFFFFFF7 ), 1970206917Smarius LIT64( 0x7FFFFFFFFFFFFFEF ), 1971206917Smarius LIT64( 0x7FFFFFFFFFFFFFDF ), 1972206917Smarius LIT64( 0x7FFFFFFFFFFFFFBF ), 1973206917Smarius LIT64( 0x7FFFFFFFFFFFFF7F ), 1974206917Smarius LIT64( 0x7FFFFFFFFFFFFEFF ), 1975206917Smarius LIT64( 0x7FFFFFFFFFFFFDFF ), 1976206917Smarius LIT64( 0x7FFFFFFFFFFFFBFF ), 1977206917Smarius LIT64( 0x7FFFFFFFFFFFF7FF ), 1978206917Smarius LIT64( 0x7FFFFFFFFFFFEFFF ), 1979206917Smarius LIT64( 0x7FFFFFFFFFFFDFFF ), 1980206917Smarius LIT64( 0x7FFFFFFFFFFFBFFF ), 1981206917Smarius LIT64( 0x7FFFFFFFFFFF7FFF ), 1982206917Smarius LIT64( 0x7FFFFFFFFFFEFFFF ), 1983206917Smarius LIT64( 0x7FFFFFFFFFFDFFFF ), 1984206917Smarius LIT64( 0x7FFFFFFFFFFBFFFF ), 1985206917Smarius LIT64( 0x7FFFFFFFFFF7FFFF ), 1986206917Smarius LIT64( 0x7FFFFFFFFFEFFFFF ), 1987206917Smarius LIT64( 0x7FFFFFFFFFDFFFFF ), 1988206917Smarius LIT64( 0x7FFFFFFFFFBFFFFF ), 1989206917Smarius LIT64( 0x7FFFFFFFFF7FFFFF ), 1990206917Smarius LIT64( 0x7FFFFFFFFEFFFFFF ), 1991206917Smarius LIT64( 0x7FFFFFFFFDFFFFFF ), 1992206917Smarius LIT64( 0x7FFFFFFFFBFFFFFF ), 1993206917Smarius LIT64( 0x7FFFFFFFF7FFFFFF ), 1994206917Smarius LIT64( 0x7FFFFFFFEFFFFFFF ), 1995206917Smarius LIT64( 0x7FFFFFFFDFFFFFFF ), 1996206917Smarius LIT64( 0x7FFFFFFFBFFFFFFF ), 1997206917Smarius LIT64( 0x7FFFFFFF7FFFFFFF ), 1998206917Smarius LIT64( 0x7FFFFFFEFFFFFFFF ), 1999206917Smarius LIT64( 0x7FFFFFFDFFFFFFFF ), 2000206917Smarius LIT64( 0x7FFFFFFBFFFFFFFF ), 2001206917Smarius LIT64( 0x7FFFFFF7FFFFFFFF ), 2002206917Smarius LIT64( 0x7FFFFFEFFFFFFFFF ), 2003206917Smarius LIT64( 0x7FFFFFDFFFFFFFFF ), 2004206917Smarius LIT64( 0x7FFFFFBFFFFFFFFF ), 2005206917Smarius LIT64( 0x7FFFFF7FFFFFFFFF ), 2006206917Smarius LIT64( 0x7FFFFEFFFFFFFFFF ), 2007206917Smarius LIT64( 0x7FFFFDFFFFFFFFFF ), 2008206917Smarius LIT64( 0x7FFFFBFFFFFFFFFF ), 2009206917Smarius LIT64( 0x7FFFF7FFFFFFFFFF ), 2010206917Smarius LIT64( 0x7FFFEFFFFFFFFFFF ), 2011206917Smarius LIT64( 0x7FFFDFFFFFFFFFFF ), 2012206917Smarius LIT64( 0x7FFFBFFFFFFFFFFF ), 2013206917Smarius LIT64( 0x7FFF7FFFFFFFFFFF ), 2014206917Smarius LIT64( 0x7FFEFFFFFFFFFFFF ), 2015206917Smarius LIT64( 0x7FFDFFFFFFFFFFFF ), 2016206917Smarius LIT64( 0x7FFBFFFFFFFFFFFF ), 2017206917Smarius LIT64( 0x7FF7FFFFFFFFFFFF ), 2018206917Smarius LIT64( 0x7FEFFFFFFFFFFFFF ), 2019206917Smarius LIT64( 0x7FDFFFFFFFFFFFFF ), 2020206917Smarius LIT64( 0x7FBFFFFFFFFFFFFF ), 2021206917Smarius LIT64( 0x7F7FFFFFFFFFFFFF ), 2022206917Smarius LIT64( 0x7EFFFFFFFFFFFFFF ), 2023206917Smarius LIT64( 0x7DFFFFFFFFFFFFFF ), 2024206917Smarius LIT64( 0x7BFFFFFFFFFFFFFF ), 2025206917Smarius LIT64( 0x77FFFFFFFFFFFFFF ), 2026206917Smarius LIT64( 0x6FFFFFFFFFFFFFFF ), 2027206917Smarius LIT64( 0x5FFFFFFFFFFFFFFF ), 2028206917Smarius LIT64( 0x3FFFFFFFFFFFFFFF ), 2029206917Smarius LIT64( 0x1FFFFFFFFFFFFFFF ), 2030206917Smarius LIT64( 0x0FFFFFFFFFFFFFFF ), 2031206917Smarius LIT64( 0x07FFFFFFFFFFFFFF ), 2032206917Smarius LIT64( 0x03FFFFFFFFFFFFFF ), 2033206917Smarius LIT64( 0x01FFFFFFFFFFFFFF ), 2034206917Smarius LIT64( 0x00FFFFFFFFFFFFFF ), 2035206917Smarius LIT64( 0x007FFFFFFFFFFFFF ), 2036206917Smarius LIT64( 0x003FFFFFFFFFFFFF ), 2037206917Smarius LIT64( 0x001FFFFFFFFFFFFF ), 2038206917Smarius LIT64( 0x000FFFFFFFFFFFFF ), 2039206917Smarius LIT64( 0x0007FFFFFFFFFFFF ), 2040206917Smarius LIT64( 0x0003FFFFFFFFFFFF ), 2041206917Smarius LIT64( 0x0001FFFFFFFFFFFF ), 2042206917Smarius LIT64( 0x0000FFFFFFFFFFFF ), 2043206917Smarius LIT64( 0x00007FFFFFFFFFFF ), 2044206917Smarius LIT64( 0x00003FFFFFFFFFFF ), 2045206917Smarius LIT64( 0x00001FFFFFFFFFFF ), 2046206917Smarius LIT64( 0x00000FFFFFFFFFFF ), 2047206917Smarius LIT64( 0x000007FFFFFFFFFF ), 2048206917Smarius LIT64( 0x000003FFFFFFFFFF ), 2049206917Smarius LIT64( 0x000001FFFFFFFFFF ), 2050206917Smarius LIT64( 0x000000FFFFFFFFFF ), 2051206917Smarius LIT64( 0x0000007FFFFFFFFF ), 2052206917Smarius LIT64( 0x0000003FFFFFFFFF ), 2053206917Smarius LIT64( 0x0000001FFFFFFFFF ), 2054206917Smarius LIT64( 0x0000000FFFFFFFFF ), 2055206917Smarius LIT64( 0x00000007FFFFFFFF ), 2056206917Smarius LIT64( 0x00000003FFFFFFFF ), 2057206917Smarius LIT64( 0x00000001FFFFFFFF ), 2058206917Smarius LIT64( 0x00000000FFFFFFFF ), 2059206917Smarius LIT64( 0x000000007FFFFFFF ), 2060206917Smarius LIT64( 0x000000003FFFFFFF ), 2061206917Smarius LIT64( 0x000000001FFFFFFF ), 2062206917Smarius LIT64( 0x000000000FFFFFFF ), 2063206917Smarius LIT64( 0x0000000007FFFFFF ), 2064206917Smarius LIT64( 0x0000000003FFFFFF ), 2065206917Smarius LIT64( 0x0000000001FFFFFF ), 2066206917Smarius LIT64( 0x0000000000FFFFFF ), 2067206917Smarius LIT64( 0x00000000007FFFFF ), 2068206917Smarius LIT64( 0x00000000003FFFFF ), 2069206917Smarius LIT64( 0x00000000001FFFFF ), 2070206917Smarius LIT64( 0x00000000000FFFFF ), 2071206917Smarius LIT64( 0x000000000007FFFF ), 2072206917Smarius LIT64( 0x000000000003FFFF ), 2073206917Smarius LIT64( 0x000000000001FFFF ), 2074206917Smarius LIT64( 0x000000000000FFFF ), 2075206917Smarius LIT64( 0x0000000000007FFF ), 2076206917Smarius LIT64( 0x0000000000003FFF ), 2077206917Smarius LIT64( 0x0000000000001FFF ), 2078206917Smarius LIT64( 0x0000000000000FFF ), 2079206917Smarius LIT64( 0x00000000000007FF ), 2080206917Smarius LIT64( 0x00000000000003FF ), 2081206917Smarius LIT64( 0x00000000000001FF ), 2082206917Smarius LIT64( 0x00000000000000FF ), 2083206917Smarius LIT64( 0x000000000000007F ), 2084206917Smarius LIT64( 0x000000000000003F ), 2085206917Smarius LIT64( 0x000000000000001F ), 2086206917Smarius LIT64( 0x000000000000000F ), 2087206917Smarius LIT64( 0x0000000000000007 ), 2088206917Smarius LIT64( 0x0000000000000003 ) 2089206917Smarius}; 2090206917Smarius 2091206917Smariusstatic const uint32 floatx80NumQInP1 = floatx80NumQIn * floatx80NumP1; 2092206917Smariusstatic const uint32 floatx80NumQOutP1 = floatx80NumQOut * floatx80NumP1; 2093206917Smarius 2094206917Smariusstatic floatx80 floatx80NextQInP1( sequenceT *sequencePtr ) 2095206917Smarius{ 2096206917Smarius int16 expNum, sigNum; 2097206917Smarius floatx80 z; 2098206917Smarius 2099206917Smarius sigNum = sequencePtr->term1Num; 2100206917Smarius expNum = sequencePtr->expNum; 2101206917Smarius z.low = floatx80P1[ sigNum ]; 2102206917Smarius z.high = floatx80QIn[ expNum ]; 2103206917Smarius if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 ); 2104206917Smarius ++sigNum; 2105206917Smarius if ( floatx80NumP1 <= sigNum ) { 2106206917Smarius sigNum = 0; 2107206917Smarius ++expNum; 2108206917Smarius if ( floatx80NumQIn <= expNum ) { 2109206917Smarius expNum = 0; 2110206917Smarius sequencePtr->done = TRUE; 2111206917Smarius } 2112206917Smarius sequencePtr->expNum = expNum; 2113206917Smarius } 2114206917Smarius sequencePtr->term1Num = sigNum; 2115206917Smarius return z; 2116206917Smarius 2117206917Smarius} 2118206917Smarius 2119206917Smariusstatic floatx80 floatx80NextQOutP1( sequenceT *sequencePtr ) 2120206917Smarius{ 2121206917Smarius int16 expNum, sigNum; 2122206917Smarius floatx80 z; 2123206917Smarius 2124206917Smarius sigNum = sequencePtr->term1Num; 2125206917Smarius expNum = sequencePtr->expNum; 2126206917Smarius z.low = floatx80P1[ sigNum ]; 2127206917Smarius z.high = floatx80QOut[ expNum ]; 2128206917Smarius if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 ); 2129206917Smarius ++sigNum; 2130206917Smarius if ( floatx80NumP1 <= sigNum ) { 2131206917Smarius sigNum = 0; 2132206917Smarius ++expNum; 2133206917Smarius if ( floatx80NumQOut <= expNum ) { 2134206917Smarius expNum = 0; 2135206917Smarius sequencePtr->done = TRUE; 2136206917Smarius } 2137206917Smarius sequencePtr->expNum = expNum; 2138206917Smarius } 2139206917Smarius sequencePtr->term1Num = sigNum; 2140206917Smarius return z; 2141206917Smarius 2142206917Smarius} 2143206917Smarius 2144206917Smariusstatic const uint32 floatx80NumQInP2 = floatx80NumQIn * floatx80NumP2; 2145206917Smariusstatic const uint32 floatx80NumQOutP2 = floatx80NumQOut * floatx80NumP2; 2146206917Smarius 2147206917Smariusstatic floatx80 floatx80NextQInP2( sequenceT *sequencePtr ) 2148206917Smarius{ 2149206917Smarius int16 expNum, sigNum; 2150206917Smarius floatx80 z; 2151206917Smarius 2152206917Smarius sigNum = sequencePtr->term1Num; 2153206917Smarius expNum = sequencePtr->expNum; 2154206917Smarius z.low = floatx80P2[ sigNum ]; 2155206917Smarius z.high = floatx80QIn[ expNum ]; 2156206917Smarius if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 ); 2157206917Smarius ++sigNum; 2158206917Smarius if ( floatx80NumP2 <= sigNum ) { 2159206917Smarius sigNum = 0; 2160206917Smarius ++expNum; 2161206917Smarius if ( floatx80NumQIn <= expNum ) { 2162206917Smarius expNum = 0; 2163206917Smarius sequencePtr->done = TRUE; 2164206917Smarius } 2165206917Smarius sequencePtr->expNum = expNum; 2166206917Smarius } 2167206917Smarius sequencePtr->term1Num = sigNum; 2168206917Smarius return z; 2169206917Smarius 2170206917Smarius} 2171206917Smarius 2172206917Smariusstatic floatx80 floatx80NextQOutP2( sequenceT *sequencePtr ) 2173206917Smarius{ 2174206917Smarius int16 expNum, sigNum; 2175206917Smarius floatx80 z; 2176206917Smarius 2177206917Smarius sigNum = sequencePtr->term1Num; 2178206917Smarius expNum = sequencePtr->expNum; 2179206917Smarius z.low = floatx80P2[ sigNum ]; 2180206917Smarius z.high = floatx80QOut[ expNum ]; 2181206917Smarius if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 ); 2182206917Smarius ++sigNum; 2183206917Smarius if ( floatx80NumP2 <= sigNum ) { 2184206917Smarius sigNum = 0; 2185206917Smarius ++expNum; 2186206917Smarius if ( floatx80NumQOut <= expNum ) { 2187206917Smarius expNum = 0; 2188206917Smarius sequencePtr->done = TRUE; 2189206917Smarius } 2190206917Smarius sequencePtr->expNum = expNum; 2191206917Smarius } 2192206917Smarius sequencePtr->term1Num = sigNum; 2193206917Smarius return z; 2194206917Smarius 2195206917Smarius} 2196206917Smarius 2197206917Smariusstatic floatx80 floatx80RandomQOutP3( void ) 2198206917Smarius{ 2199206917Smarius floatx80 z; 2200206917Smarius 2201206917Smarius z.low = 2202206917Smarius ( floatx80P2[ randomUint8() % floatx80NumP2 ] 2203206917Smarius + floatx80P2[ randomUint8() % floatx80NumP2 ] ) 2204206917Smarius & LIT64( 0x7FFFFFFFFFFFFFFF ); 2205206917Smarius z.high = floatx80QOut[ randomUint8() % floatx80NumQOut ]; 2206206917Smarius if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 ); 2207206917Smarius return z; 2208206917Smarius 2209206917Smarius} 2210206917Smarius 2211206917Smariusstatic floatx80 floatx80RandomQOutPInf( void ) 2212206917Smarius{ 2213206917Smarius floatx80 z; 2214206917Smarius 2215206917Smarius z.low = randomUint64() & LIT64( 0x7FFFFFFFFFFFFFFF ); 2216206917Smarius z.high = floatx80QOut[ randomUint8() % floatx80NumQOut ]; 2217206917Smarius if ( z.high & 0x7FFF ) z.low |= LIT64( 0x8000000000000000 ); 2218206917Smarius return z; 2219206917Smarius 2220206917Smarius} 2221206917Smarius 2222206917Smariusenum { 2223206917Smarius floatx80NumQInfWeightMasks = 14 2224206917Smarius}; 2225206917Smarius 2226206917Smariusstatic const uint16 floatx80QInfWeightMasks[ floatx80NumQInfWeightMasks ] = { 2227206917Smarius 0x7FFF, 2228206917Smarius 0x7FFF, 2229206917Smarius 0x3FFF, 2230206917Smarius 0x1FFF, 2231206917Smarius 0x07FF, 2232206917Smarius 0x07FF, 2233206917Smarius 0x03FF, 2234206917Smarius 0x01FF, 2235206917Smarius 0x00FF, 2236206917Smarius 0x007F, 2237206917Smarius 0x003F, 2238206917Smarius 0x001F, 2239206917Smarius 0x000F, 2240206917Smarius 0x0007 2241206917Smarius}; 2242206917Smarius 2243206917Smariusstatic const uint16 floatx80QInfWeightOffsets[ floatx80NumQInfWeightMasks ] = { 2244206917Smarius 0x0000, 2245206917Smarius 0x0000, 2246206917Smarius 0x2000, 2247206917Smarius 0x3000, 2248206917Smarius 0x3800, 2249206917Smarius 0x3C00, 2250206917Smarius 0x3E00, 2251206917Smarius 0x3F00, 2252206917Smarius 0x3F80, 2253206917Smarius 0x3FC0, 2254206917Smarius 0x3FE0, 2255206917Smarius 0x3FF0, 2256206917Smarius 0x3FF8, 2257206917Smarius 0x3FFC 2258206917Smarius}; 2259206917Smarius 2260206917Smariusstatic floatx80 floatx80RandomQInfP3( void ) 2261206917Smarius{ 2262206917Smarius int8 weightMaskNum; 2263206917Smarius floatx80 z; 2264206917Smarius 2265206917Smarius z.low = 2266206917Smarius ( floatx80P2[ randomUint8() % floatx80NumP2 ] 2267206917Smarius + floatx80P2[ randomUint8() % floatx80NumP2 ] ) 2268206917Smarius & LIT64( 0x7FFFFFFFFFFFFFFF ); 2269206917Smarius weightMaskNum = randomUint8() % floatx80NumQInfWeightMasks; 2270206917Smarius z.high = 2271207151Smarius ( randomUint16() & floatx80QInfWeightMasks[ weightMaskNum ] ) 2272206917Smarius + floatx80QInfWeightOffsets[ weightMaskNum ]; 2273206917Smarius if ( z.high ) z.low |= LIT64( 0x8000000000000000 ); 2274206917Smarius z.high |= ( (uint16) ( randomUint8() & 1 ) )<<15; 2275206917Smarius return z; 2276206917Smarius 2277206917Smarius} 2278206917Smarius 2279206917Smariusstatic floatx80 floatx80RandomQInfPInf( void ) 2280206917Smarius{ 2281206917Smarius int8 weightMaskNum; 2282206917Smarius floatx80 z; 2283206917Smarius 2284206917Smarius z.low = randomUint64() & LIT64( 0x7FFFFFFFFFFFFFFF ); 2285206917Smarius weightMaskNum = randomUint8() % floatx80NumQInfWeightMasks; 2286206917Smarius z.high = 2287207151Smarius ( randomUint16() & floatx80QInfWeightMasks[ weightMaskNum ] ) 2288206917Smarius + floatx80QInfWeightOffsets[ weightMaskNum ]; 2289206917Smarius if ( z.high ) z.low |= LIT64( 0x8000000000000000 ); 2290206917Smarius z.high |= ( (uint16) ( randomUint8() & 1 ) )<<15; 2291206917Smarius return z; 2292206917Smarius 2293206917Smarius} 2294206917Smarius 2295206917Smariusstatic floatx80 floatx80Random( void ) 2296206917Smarius{ 2297206917Smarius 2298206917Smarius switch ( randomUint8() & 7 ) { 2299206917Smarius case 0: 2300206917Smarius case 1: 2301206917Smarius case 2: 2302206917Smarius return floatx80RandomQOutP3(); 2303206917Smarius case 3: 2304206917Smarius return floatx80RandomQOutPInf(); 2305206917Smarius case 4: 2306206917Smarius case 5: 2307206917Smarius case 6: 2308206917Smarius return floatx80RandomQInfP3(); 2309207151Smarius default: 2310206917Smarius return floatx80RandomQInfPInf(); 2311206917Smarius } 2312206917Smarius 2313206917Smarius} 2314206917Smarius 2315206917Smarius#endif 2316206917Smarius 2317206917Smarius#ifdef FLOAT128 2318206917Smarius 2319206917Smariusenum { 2320206917Smarius float128NumQIn = 22, 2321206917Smarius float128NumQOut = 78, 2322206917Smarius float128NumP1 = 4, 2323206917Smarius float128NumP2 = 443 2324206917Smarius}; 2325206917Smarius 2326206917Smariusstatic const uint64 float128QIn[ float128NumQIn ] = { 2327206917Smarius LIT64( 0x0000000000000000 ), /* positive, subnormal */ 2328206917Smarius LIT64( 0x0001000000000000 ), /* positive, -16382 */ 2329206917Smarius LIT64( 0x3F8E000000000000 ), /* positive, -113 */ 2330206917Smarius LIT64( 0x3FFD000000000000 ), /* positive, -2 */ 2331206917Smarius LIT64( 0x3FFE000000000000 ), /* positive, -1 */ 2332206917Smarius LIT64( 0x3FFF000000000000 ), /* positive, 0 */ 2333206917Smarius LIT64( 0x4000000000000000 ), /* positive, 1 */ 2334206917Smarius LIT64( 0x4001000000000000 ), /* positive, 2 */ 2335206917Smarius LIT64( 0x4070000000000000 ), /* positive, 113 */ 2336206917Smarius LIT64( 0x7FFE000000000000 ), /* positive, 16383 */ 2337206917Smarius LIT64( 0x7FFF000000000000 ), /* positive, infinity or NaN */ 2338206917Smarius LIT64( 0x8000000000000000 ), /* negative, subnormal */ 2339206917Smarius LIT64( 0x8001000000000000 ), /* negative, -16382 */ 2340206917Smarius LIT64( 0xBF8E000000000000 ), /* negative, -113 */ 2341206917Smarius LIT64( 0xBFFD000000000000 ), /* negative, -2 */ 2342206917Smarius LIT64( 0xBFFE000000000000 ), /* negative, -1 */ 2343206917Smarius LIT64( 0xBFFF000000000000 ), /* negative, 0 */ 2344206917Smarius LIT64( 0xC000000000000000 ), /* negative, 1 */ 2345206917Smarius LIT64( 0xC001000000000000 ), /* negative, 2 */ 2346206917Smarius LIT64( 0xC070000000000000 ), /* negative, 113 */ 2347206917Smarius LIT64( 0xFFFE000000000000 ), /* negative, 16383 */ 2348206917Smarius LIT64( 0xFFFF000000000000 ) /* negative, infinity or NaN */ 2349206917Smarius}; 2350206917Smarius 2351206917Smariusstatic const uint64 float128QOut[ float128NumQOut ] = { 2352206917Smarius LIT64( 0x0000000000000000 ), /* positive, subnormal */ 2353206917Smarius LIT64( 0x0001000000000000 ), /* positive, -16382 */ 2354206917Smarius LIT64( 0x0002000000000000 ), /* positive, -16381 */ 2355206917Smarius LIT64( 0x3BFE000000000000 ), /* positive, -1025 */ 2356206917Smarius LIT64( 0x3BFF000000000000 ), /* positive, -1024 */ 2357206917Smarius LIT64( 0x3C00000000000000 ), /* positive, -1023 */ 2358206917Smarius LIT64( 0x3C01000000000000 ), /* positive, -1022 */ 2359206917Smarius LIT64( 0x3F7E000000000000 ), /* positive, -129 */ 2360206917Smarius LIT64( 0x3F7F000000000000 ), /* positive, -128 */ 2361206917Smarius LIT64( 0x3F80000000000000 ), /* positive, -127 */ 2362206917Smarius LIT64( 0x3F81000000000000 ), /* positive, -126 */ 2363206917Smarius LIT64( 0x3F8E000000000000 ), /* positive, -113 */ 2364206917Smarius LIT64( 0x3FFB000000000000 ), /* positive, -4 */ 2365206917Smarius LIT64( 0x3FFC000000000000 ), /* positive, -3 */ 2366206917Smarius LIT64( 0x3FFD000000000000 ), /* positive, -2 */ 2367206917Smarius LIT64( 0x3FFE000000000000 ), /* positive, -1 */ 2368206917Smarius LIT64( 0x3FFF000000000000 ), /* positive, 0 */ 2369206917Smarius LIT64( 0x4000000000000000 ), /* positive, 1 */ 2370206917Smarius LIT64( 0x4001000000000000 ), /* positive, 2 */ 2371206917Smarius LIT64( 0x4002000000000000 ), /* positive, 3 */ 2372206917Smarius LIT64( 0x4003000000000000 ), /* positive, 4 */ 2373206917Smarius LIT64( 0x401C000000000000 ), /* positive, 29 */ 2374206917Smarius LIT64( 0x401D000000000000 ), /* positive, 30 */ 2375206917Smarius LIT64( 0x401E000000000000 ), /* positive, 31 */ 2376206917Smarius LIT64( 0x401F000000000000 ), /* positive, 32 */ 2377206917Smarius LIT64( 0x403C000000000000 ), /* positive, 61 */ 2378206917Smarius LIT64( 0x403D000000000000 ), /* positive, 62 */ 2379206917Smarius LIT64( 0x403E000000000000 ), /* positive, 63 */ 2380206917Smarius LIT64( 0x403F000000000000 ), /* positive, 64 */ 2381206917Smarius LIT64( 0x4070000000000000 ), /* positive, 113 */ 2382206917Smarius LIT64( 0x407E000000000000 ), /* positive, 127 */ 2383206917Smarius LIT64( 0x407F000000000000 ), /* positive, 128 */ 2384206917Smarius LIT64( 0x4080000000000000 ), /* positive, 129 */ 2385206917Smarius LIT64( 0x43FE000000000000 ), /* positive, 1023 */ 2386206917Smarius LIT64( 0x43FF000000000000 ), /* positive, 1024 */ 2387206917Smarius LIT64( 0x4400000000000000 ), /* positive, 1025 */ 2388206917Smarius LIT64( 0x7FFD000000000000 ), /* positive, 16382 */ 2389206917Smarius LIT64( 0x7FFE000000000000 ), /* positive, 16383 */ 2390206917Smarius LIT64( 0x7FFF000000000000 ), /* positive, infinity or NaN */ 2391206917Smarius LIT64( 0x8000000000000000 ), /* negative, subnormal */ 2392206917Smarius LIT64( 0x8001000000000000 ), /* negative, -16382 */ 2393206917Smarius LIT64( 0x8002000000000000 ), /* negative, -16381 */ 2394206917Smarius LIT64( 0xBBFE000000000000 ), /* negative, -1025 */ 2395206917Smarius LIT64( 0xBBFF000000000000 ), /* negative, -1024 */ 2396206917Smarius LIT64( 0xBC00000000000000 ), /* negative, -1023 */ 2397206917Smarius LIT64( 0xBC01000000000000 ), /* negative, -1022 */ 2398206917Smarius LIT64( 0xBF7E000000000000 ), /* negative, -129 */ 2399206917Smarius LIT64( 0xBF7F000000000000 ), /* negative, -128 */ 2400206917Smarius LIT64( 0xBF80000000000000 ), /* negative, -127 */ 2401206917Smarius LIT64( 0xBF81000000000000 ), /* negative, -126 */ 2402206917Smarius LIT64( 0xBF8E000000000000 ), /* negative, -113 */ 2403206917Smarius LIT64( 0xBFFB000000000000 ), /* negative, -4 */ 2404206917Smarius LIT64( 0xBFFC000000000000 ), /* negative, -3 */ 2405206917Smarius LIT64( 0xBFFD000000000000 ), /* negative, -2 */ 2406206917Smarius LIT64( 0xBFFE000000000000 ), /* negative, -1 */ 2407206917Smarius LIT64( 0xBFFF000000000000 ), /* negative, 0 */ 2408206917Smarius LIT64( 0xC000000000000000 ), /* negative, 1 */ 2409206917Smarius LIT64( 0xC001000000000000 ), /* negative, 2 */ 2410206917Smarius LIT64( 0xC002000000000000 ), /* negative, 3 */ 2411206917Smarius LIT64( 0xC003000000000000 ), /* negative, 4 */ 2412206917Smarius LIT64( 0xC01C000000000000 ), /* negative, 29 */ 2413206917Smarius LIT64( 0xC01D000000000000 ), /* negative, 30 */ 2414206917Smarius LIT64( 0xC01E000000000000 ), /* negative, 31 */ 2415206917Smarius LIT64( 0xC01F000000000000 ), /* negative, 32 */ 2416206917Smarius LIT64( 0xC03C000000000000 ), /* negative, 61 */ 2417206917Smarius LIT64( 0xC03D000000000000 ), /* negative, 62 */ 2418206917Smarius LIT64( 0xC03E000000000000 ), /* negative, 63 */ 2419206917Smarius LIT64( 0xC03F000000000000 ), /* negative, 64 */ 2420206917Smarius LIT64( 0xC070000000000000 ), /* negative, 113 */ 2421206917Smarius LIT64( 0xC07E000000000000 ), /* negative, 127 */ 2422206917Smarius LIT64( 0xC07F000000000000 ), /* negative, 128 */ 2423206917Smarius LIT64( 0xC080000000000000 ), /* negative, 129 */ 2424206917Smarius LIT64( 0xC3FE000000000000 ), /* negative, 1023 */ 2425206917Smarius LIT64( 0xC3FF000000000000 ), /* negative, 1024 */ 2426206917Smarius LIT64( 0xC400000000000000 ), /* negative, 1025 */ 2427206917Smarius LIT64( 0xFFFD000000000000 ), /* negative, 16382 */ 2428206917Smarius LIT64( 0xFFFE000000000000 ), /* negative, 16383 */ 2429206917Smarius LIT64( 0xFFFF000000000000 ) /* negative, infinity or NaN */ 2430206917Smarius}; 2431206917Smarius 2432206917Smariusstatic const struct { bits64 high, low; } float128P1[ float128NumP1 ] = { 2433206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000000 ) }, 2434206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000001 ) }, 2435206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2436206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFE ) } 2437206917Smarius}; 2438206917Smarius 2439206917Smariusstatic const struct { bits64 high, low; } float128P2[ float128NumP2 ] = { 2440206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000000 ) }, 2441206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000001 ) }, 2442206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000002 ) }, 2443206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000004 ) }, 2444206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000008 ) }, 2445206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000010 ) }, 2446206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000020 ) }, 2447206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000040 ) }, 2448206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000080 ) }, 2449206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000100 ) }, 2450206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000200 ) }, 2451206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000400 ) }, 2452206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000800 ) }, 2453206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000001000 ) }, 2454206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000002000 ) }, 2455206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000004000 ) }, 2456206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000008000 ) }, 2457206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000010000 ) }, 2458206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000020000 ) }, 2459206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000040000 ) }, 2460206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000080000 ) }, 2461206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000100000 ) }, 2462206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000200000 ) }, 2463206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000400000 ) }, 2464206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000800000 ) }, 2465206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000001000000 ) }, 2466206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000002000000 ) }, 2467206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000004000000 ) }, 2468206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000008000000 ) }, 2469206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000010000000 ) }, 2470206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000020000000 ) }, 2471206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000040000000 ) }, 2472206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000080000000 ) }, 2473206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000100000000 ) }, 2474206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000200000000 ) }, 2475206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000400000000 ) }, 2476206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000800000000 ) }, 2477206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000001000000000 ) }, 2478206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000002000000000 ) }, 2479206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000004000000000 ) }, 2480206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000008000000000 ) }, 2481206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000010000000000 ) }, 2482206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000020000000000 ) }, 2483206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000040000000000 ) }, 2484206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000080000000000 ) }, 2485206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000100000000000 ) }, 2486206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000200000000000 ) }, 2487206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000400000000000 ) }, 2488206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000800000000000 ) }, 2489206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0001000000000000 ) }, 2490206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0002000000000000 ) }, 2491206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0004000000000000 ) }, 2492206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0008000000000000 ) }, 2493206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0010000000000000 ) }, 2494206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0020000000000000 ) }, 2495206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0040000000000000 ) }, 2496206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0080000000000000 ) }, 2497206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0100000000000000 ) }, 2498206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0200000000000000 ) }, 2499206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0400000000000000 ) }, 2500206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0800000000000000 ) }, 2501206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x1000000000000000 ) }, 2502206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x2000000000000000 ) }, 2503206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x4000000000000000 ) }, 2504206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x8000000000000000 ) }, 2505206917Smarius { LIT64( 0x0000000000000001 ), LIT64( 0x0000000000000000 ) }, 2506206917Smarius { LIT64( 0x0000000000000002 ), LIT64( 0x0000000000000000 ) }, 2507206917Smarius { LIT64( 0x0000000000000004 ), LIT64( 0x0000000000000000 ) }, 2508206917Smarius { LIT64( 0x0000000000000008 ), LIT64( 0x0000000000000000 ) }, 2509206917Smarius { LIT64( 0x0000000000000010 ), LIT64( 0x0000000000000000 ) }, 2510206917Smarius { LIT64( 0x0000000000000020 ), LIT64( 0x0000000000000000 ) }, 2511206917Smarius { LIT64( 0x0000000000000040 ), LIT64( 0x0000000000000000 ) }, 2512206917Smarius { LIT64( 0x0000000000000080 ), LIT64( 0x0000000000000000 ) }, 2513206917Smarius { LIT64( 0x0000000000000100 ), LIT64( 0x0000000000000000 ) }, 2514206917Smarius { LIT64( 0x0000000000000200 ), LIT64( 0x0000000000000000 ) }, 2515206917Smarius { LIT64( 0x0000000000000400 ), LIT64( 0x0000000000000000 ) }, 2516206917Smarius { LIT64( 0x0000000000000800 ), LIT64( 0x0000000000000000 ) }, 2517206917Smarius { LIT64( 0x0000000000001000 ), LIT64( 0x0000000000000000 ) }, 2518206917Smarius { LIT64( 0x0000000000002000 ), LIT64( 0x0000000000000000 ) }, 2519206917Smarius { LIT64( 0x0000000000004000 ), LIT64( 0x0000000000000000 ) }, 2520206917Smarius { LIT64( 0x0000000000008000 ), LIT64( 0x0000000000000000 ) }, 2521206917Smarius { LIT64( 0x0000000000010000 ), LIT64( 0x0000000000000000 ) }, 2522206917Smarius { LIT64( 0x0000000000020000 ), LIT64( 0x0000000000000000 ) }, 2523206917Smarius { LIT64( 0x0000000000040000 ), LIT64( 0x0000000000000000 ) }, 2524206917Smarius { LIT64( 0x0000000000080000 ), LIT64( 0x0000000000000000 ) }, 2525206917Smarius { LIT64( 0x0000000000100000 ), LIT64( 0x0000000000000000 ) }, 2526206917Smarius { LIT64( 0x0000000000200000 ), LIT64( 0x0000000000000000 ) }, 2527206917Smarius { LIT64( 0x0000000000400000 ), LIT64( 0x0000000000000000 ) }, 2528206917Smarius { LIT64( 0x0000000000800000 ), LIT64( 0x0000000000000000 ) }, 2529206917Smarius { LIT64( 0x0000000001000000 ), LIT64( 0x0000000000000000 ) }, 2530206917Smarius { LIT64( 0x0000000002000000 ), LIT64( 0x0000000000000000 ) }, 2531206917Smarius { LIT64( 0x0000000004000000 ), LIT64( 0x0000000000000000 ) }, 2532206917Smarius { LIT64( 0x0000000008000000 ), LIT64( 0x0000000000000000 ) }, 2533206917Smarius { LIT64( 0x0000000010000000 ), LIT64( 0x0000000000000000 ) }, 2534206917Smarius { LIT64( 0x0000000020000000 ), LIT64( 0x0000000000000000 ) }, 2535206917Smarius { LIT64( 0x0000000040000000 ), LIT64( 0x0000000000000000 ) }, 2536206917Smarius { LIT64( 0x0000000080000000 ), LIT64( 0x0000000000000000 ) }, 2537206917Smarius { LIT64( 0x0000000100000000 ), LIT64( 0x0000000000000000 ) }, 2538206917Smarius { LIT64( 0x0000000200000000 ), LIT64( 0x0000000000000000 ) }, 2539206917Smarius { LIT64( 0x0000000400000000 ), LIT64( 0x0000000000000000 ) }, 2540206917Smarius { LIT64( 0x0000000800000000 ), LIT64( 0x0000000000000000 ) }, 2541206917Smarius { LIT64( 0x0000001000000000 ), LIT64( 0x0000000000000000 ) }, 2542206917Smarius { LIT64( 0x0000002000000000 ), LIT64( 0x0000000000000000 ) }, 2543206917Smarius { LIT64( 0x0000004000000000 ), LIT64( 0x0000000000000000 ) }, 2544206917Smarius { LIT64( 0x0000008000000000 ), LIT64( 0x0000000000000000 ) }, 2545206917Smarius { LIT64( 0x0000010000000000 ), LIT64( 0x0000000000000000 ) }, 2546206917Smarius { LIT64( 0x0000020000000000 ), LIT64( 0x0000000000000000 ) }, 2547206917Smarius { LIT64( 0x0000040000000000 ), LIT64( 0x0000000000000000 ) }, 2548206917Smarius { LIT64( 0x0000080000000000 ), LIT64( 0x0000000000000000 ) }, 2549206917Smarius { LIT64( 0x0000100000000000 ), LIT64( 0x0000000000000000 ) }, 2550206917Smarius { LIT64( 0x0000200000000000 ), LIT64( 0x0000000000000000 ) }, 2551206917Smarius { LIT64( 0x0000400000000000 ), LIT64( 0x0000000000000000 ) }, 2552206917Smarius { LIT64( 0x0000800000000000 ), LIT64( 0x0000000000000000 ) }, 2553206917Smarius { LIT64( 0x0000C00000000000 ), LIT64( 0x0000000000000000 ) }, 2554206917Smarius { LIT64( 0x0000E00000000000 ), LIT64( 0x0000000000000000 ) }, 2555206917Smarius { LIT64( 0x0000F00000000000 ), LIT64( 0x0000000000000000 ) }, 2556206917Smarius { LIT64( 0x0000F80000000000 ), LIT64( 0x0000000000000000 ) }, 2557206917Smarius { LIT64( 0x0000FC0000000000 ), LIT64( 0x0000000000000000 ) }, 2558206917Smarius { LIT64( 0x0000FE0000000000 ), LIT64( 0x0000000000000000 ) }, 2559206917Smarius { LIT64( 0x0000FF0000000000 ), LIT64( 0x0000000000000000 ) }, 2560206917Smarius { LIT64( 0x0000FF8000000000 ), LIT64( 0x0000000000000000 ) }, 2561206917Smarius { LIT64( 0x0000FFC000000000 ), LIT64( 0x0000000000000000 ) }, 2562206917Smarius { LIT64( 0x0000FFE000000000 ), LIT64( 0x0000000000000000 ) }, 2563206917Smarius { LIT64( 0x0000FFF000000000 ), LIT64( 0x0000000000000000 ) }, 2564206917Smarius { LIT64( 0x0000FFF800000000 ), LIT64( 0x0000000000000000 ) }, 2565206917Smarius { LIT64( 0x0000FFFC00000000 ), LIT64( 0x0000000000000000 ) }, 2566206917Smarius { LIT64( 0x0000FFFE00000000 ), LIT64( 0x0000000000000000 ) }, 2567206917Smarius { LIT64( 0x0000FFFF00000000 ), LIT64( 0x0000000000000000 ) }, 2568206917Smarius { LIT64( 0x0000FFFF80000000 ), LIT64( 0x0000000000000000 ) }, 2569206917Smarius { LIT64( 0x0000FFFFC0000000 ), LIT64( 0x0000000000000000 ) }, 2570206917Smarius { LIT64( 0x0000FFFFE0000000 ), LIT64( 0x0000000000000000 ) }, 2571206917Smarius { LIT64( 0x0000FFFFF0000000 ), LIT64( 0x0000000000000000 ) }, 2572206917Smarius { LIT64( 0x0000FFFFF8000000 ), LIT64( 0x0000000000000000 ) }, 2573206917Smarius { LIT64( 0x0000FFFFFC000000 ), LIT64( 0x0000000000000000 ) }, 2574206917Smarius { LIT64( 0x0000FFFFFE000000 ), LIT64( 0x0000000000000000 ) }, 2575206917Smarius { LIT64( 0x0000FFFFFF000000 ), LIT64( 0x0000000000000000 ) }, 2576206917Smarius { LIT64( 0x0000FFFFFF800000 ), LIT64( 0x0000000000000000 ) }, 2577206917Smarius { LIT64( 0x0000FFFFFFC00000 ), LIT64( 0x0000000000000000 ) }, 2578206917Smarius { LIT64( 0x0000FFFFFFE00000 ), LIT64( 0x0000000000000000 ) }, 2579206917Smarius { LIT64( 0x0000FFFFFFF00000 ), LIT64( 0x0000000000000000 ) }, 2580206917Smarius { LIT64( 0x0000FFFFFFF80000 ), LIT64( 0x0000000000000000 ) }, 2581206917Smarius { LIT64( 0x0000FFFFFFFC0000 ), LIT64( 0x0000000000000000 ) }, 2582206917Smarius { LIT64( 0x0000FFFFFFFE0000 ), LIT64( 0x0000000000000000 ) }, 2583206917Smarius { LIT64( 0x0000FFFFFFFF0000 ), LIT64( 0x0000000000000000 ) }, 2584206917Smarius { LIT64( 0x0000FFFFFFFF8000 ), LIT64( 0x0000000000000000 ) }, 2585206917Smarius { LIT64( 0x0000FFFFFFFFC000 ), LIT64( 0x0000000000000000 ) }, 2586206917Smarius { LIT64( 0x0000FFFFFFFFE000 ), LIT64( 0x0000000000000000 ) }, 2587206917Smarius { LIT64( 0x0000FFFFFFFFF000 ), LIT64( 0x0000000000000000 ) }, 2588206917Smarius { LIT64( 0x0000FFFFFFFFF800 ), LIT64( 0x0000000000000000 ) }, 2589206917Smarius { LIT64( 0x0000FFFFFFFFFC00 ), LIT64( 0x0000000000000000 ) }, 2590206917Smarius { LIT64( 0x0000FFFFFFFFFE00 ), LIT64( 0x0000000000000000 ) }, 2591206917Smarius { LIT64( 0x0000FFFFFFFFFF00 ), LIT64( 0x0000000000000000 ) }, 2592206917Smarius { LIT64( 0x0000FFFFFFFFFF80 ), LIT64( 0x0000000000000000 ) }, 2593206917Smarius { LIT64( 0x0000FFFFFFFFFFC0 ), LIT64( 0x0000000000000000 ) }, 2594206917Smarius { LIT64( 0x0000FFFFFFFFFFE0 ), LIT64( 0x0000000000000000 ) }, 2595206917Smarius { LIT64( 0x0000FFFFFFFFFFF0 ), LIT64( 0x0000000000000000 ) }, 2596206917Smarius { LIT64( 0x0000FFFFFFFFFFF8 ), LIT64( 0x0000000000000000 ) }, 2597206917Smarius { LIT64( 0x0000FFFFFFFFFFFC ), LIT64( 0x0000000000000000 ) }, 2598206917Smarius { LIT64( 0x0000FFFFFFFFFFFE ), LIT64( 0x0000000000000000 ) }, 2599206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0x0000000000000000 ) }, 2600206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0x8000000000000000 ) }, 2601206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xC000000000000000 ) }, 2602206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xE000000000000000 ) }, 2603206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xF000000000000000 ) }, 2604206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xF800000000000000 ) }, 2605206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFC00000000000000 ) }, 2606206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFE00000000000000 ) }, 2607206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFF00000000000000 ) }, 2608206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFF80000000000000 ) }, 2609206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFC0000000000000 ) }, 2610206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFE0000000000000 ) }, 2611206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFF0000000000000 ) }, 2612206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFF8000000000000 ) }, 2613206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFC000000000000 ) }, 2614206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFE000000000000 ) }, 2615206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFF000000000000 ) }, 2616206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFF800000000000 ) }, 2617206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFC00000000000 ) }, 2618206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFE00000000000 ) }, 2619206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFF00000000000 ) }, 2620206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFF80000000000 ) }, 2621206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFC0000000000 ) }, 2622206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFE0000000000 ) }, 2623206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFF0000000000 ) }, 2624206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFF8000000000 ) }, 2625206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFC000000000 ) }, 2626206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFE000000000 ) }, 2627206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFF000000000 ) }, 2628206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFF800000000 ) }, 2629206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFC00000000 ) }, 2630206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFE00000000 ) }, 2631206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFF00000000 ) }, 2632206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFF80000000 ) }, 2633206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFC0000000 ) }, 2634206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFE0000000 ) }, 2635206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFF0000000 ) }, 2636206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFF8000000 ) }, 2637206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFC000000 ) }, 2638206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFE000000 ) }, 2639206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFF000000 ) }, 2640206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFF800000 ) }, 2641206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFC00000 ) }, 2642206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFE00000 ) }, 2643206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFF00000 ) }, 2644206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFF80000 ) }, 2645206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFC0000 ) }, 2646206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFE0000 ) }, 2647206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFF0000 ) }, 2648206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFF8000 ) }, 2649206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFC000 ) }, 2650206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFE000 ) }, 2651206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFF000 ) }, 2652206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFF800 ) }, 2653206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFC00 ) }, 2654206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFE00 ) }, 2655206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFF00 ) }, 2656206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFF80 ) }, 2657206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFC0 ) }, 2658206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFE0 ) }, 2659206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFF0 ) }, 2660206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFF8 ) }, 2661206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFC ) }, 2662206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFE ) }, 2663206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2664206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFD ) }, 2665206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFB ) }, 2666206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFF7 ) }, 2667206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFEF ) }, 2668206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFDF ) }, 2669206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFBF ) }, 2670206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFF7F ) }, 2671206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFEFF ) }, 2672206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFDFF ) }, 2673206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFBFF ) }, 2674206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFF7FF ) }, 2675206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFEFFF ) }, 2676206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFDFFF ) }, 2677206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFBFFF ) }, 2678206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFF7FFF ) }, 2679206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFEFFFF ) }, 2680206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFDFFFF ) }, 2681206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFBFFFF ) }, 2682206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFF7FFFF ) }, 2683206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFEFFFFF ) }, 2684206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFDFFFFF ) }, 2685206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFBFFFFF ) }, 2686206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFF7FFFFF ) }, 2687206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFEFFFFFF ) }, 2688206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFDFFFFFF ) }, 2689206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFBFFFFFF ) }, 2690206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFF7FFFFFF ) }, 2691206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFEFFFFFFF ) }, 2692206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFDFFFFFFF ) }, 2693206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFFBFFFFFFF ) }, 2694206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFF7FFFFFFF ) }, 2695206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFEFFFFFFFF ) }, 2696206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFDFFFFFFFF ) }, 2697206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFFBFFFFFFFF ) }, 2698206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFF7FFFFFFFF ) }, 2699206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFEFFFFFFFFF ) }, 2700206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFDFFFFFFFFF ) }, 2701206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFFBFFFFFFFFF ) }, 2702206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFF7FFFFFFFFF ) }, 2703206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFEFFFFFFFFFF ) }, 2704206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFDFFFFFFFFFF ) }, 2705206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFFBFFFFFFFFFF ) }, 2706206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFF7FFFFFFFFFF ) }, 2707206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFEFFFFFFFFFFF ) }, 2708206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFDFFFFFFFFFFF ) }, 2709206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFFBFFFFFFFFFFF ) }, 2710206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFF7FFFFFFFFFFF ) }, 2711206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFEFFFFFFFFFFFF ) }, 2712206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFDFFFFFFFFFFFF ) }, 2713206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFFBFFFFFFFFFFFF ) }, 2714206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFF7FFFFFFFFFFFF ) }, 2715206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFEFFFFFFFFFFFFF ) }, 2716206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFDFFFFFFFFFFFFF ) }, 2717206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFFBFFFFFFFFFFFFF ) }, 2718206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFF7FFFFFFFFFFFFF ) }, 2719206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFEFFFFFFFFFFFFFF ) }, 2720206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFDFFFFFFFFFFFFFF ) }, 2721206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xFBFFFFFFFFFFFFFF ) }, 2722206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xF7FFFFFFFFFFFFFF ) }, 2723206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xEFFFFFFFFFFFFFFF ) }, 2724206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xDFFFFFFFFFFFFFFF ) }, 2725206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0xBFFFFFFFFFFFFFFF ) }, 2726206917Smarius { LIT64( 0x0000FFFFFFFFFFFF ), LIT64( 0x7FFFFFFFFFFFFFFF ) }, 2727206917Smarius { LIT64( 0x0000FFFFFFFFFFFD ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2728206917Smarius { LIT64( 0x0000FFFFFFFFFFFB ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2729206917Smarius { LIT64( 0x0000FFFFFFFFFFF7 ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2730206917Smarius { LIT64( 0x0000FFFFFFFFFFEF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2731206917Smarius { LIT64( 0x0000FFFFFFFFFFDF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2732206917Smarius { LIT64( 0x0000FFFFFFFFFFBF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2733206917Smarius { LIT64( 0x0000FFFFFFFFFF7F ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2734206917Smarius { LIT64( 0x0000FFFFFFFFFEFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2735206917Smarius { LIT64( 0x0000FFFFFFFFFDFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2736206917Smarius { LIT64( 0x0000FFFFFFFFFBFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2737206917Smarius { LIT64( 0x0000FFFFFFFFF7FF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2738206917Smarius { LIT64( 0x0000FFFFFFFFEFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2739206917Smarius { LIT64( 0x0000FFFFFFFFDFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2740206917Smarius { LIT64( 0x0000FFFFFFFFBFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2741206917Smarius { LIT64( 0x0000FFFFFFFF7FFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2742206917Smarius { LIT64( 0x0000FFFFFFFEFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2743206917Smarius { LIT64( 0x0000FFFFFFFDFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2744206917Smarius { LIT64( 0x0000FFFFFFFBFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2745206917Smarius { LIT64( 0x0000FFFFFFF7FFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2746206917Smarius { LIT64( 0x0000FFFFFFEFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2747206917Smarius { LIT64( 0x0000FFFFFFDFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2748206917Smarius { LIT64( 0x0000FFFFFFBFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2749206917Smarius { LIT64( 0x0000FFFFFF7FFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2750206917Smarius { LIT64( 0x0000FFFFFEFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2751206917Smarius { LIT64( 0x0000FFFFFDFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2752206917Smarius { LIT64( 0x0000FFFFFBFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2753206917Smarius { LIT64( 0x0000FFFFF7FFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2754206917Smarius { LIT64( 0x0000FFFFEFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2755206917Smarius { LIT64( 0x0000FFFFDFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2756206917Smarius { LIT64( 0x0000FFFFBFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2757206917Smarius { LIT64( 0x0000FFFF7FFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2758206917Smarius { LIT64( 0x0000FFFEFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2759206917Smarius { LIT64( 0x0000FFFDFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2760206917Smarius { LIT64( 0x0000FFFBFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2761206917Smarius { LIT64( 0x0000FFF7FFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2762206917Smarius { LIT64( 0x0000FFEFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2763206917Smarius { LIT64( 0x0000FFDFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2764206917Smarius { LIT64( 0x0000FFBFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2765206917Smarius { LIT64( 0x0000FF7FFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2766206917Smarius { LIT64( 0x0000FEFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2767206917Smarius { LIT64( 0x0000FDFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2768206917Smarius { LIT64( 0x0000FBFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2769206917Smarius { LIT64( 0x0000F7FFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2770206917Smarius { LIT64( 0x0000EFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2771206917Smarius { LIT64( 0x0000DFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2772206917Smarius { LIT64( 0x0000BFFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2773206917Smarius { LIT64( 0x00007FFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2774206917Smarius { LIT64( 0x00003FFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2775206917Smarius { LIT64( 0x00001FFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2776206917Smarius { LIT64( 0x00000FFFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2777206917Smarius { LIT64( 0x000007FFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2778206917Smarius { LIT64( 0x000003FFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2779206917Smarius { LIT64( 0x000001FFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2780206917Smarius { LIT64( 0x000000FFFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2781206917Smarius { LIT64( 0x0000007FFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2782206917Smarius { LIT64( 0x0000003FFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2783206917Smarius { LIT64( 0x0000001FFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2784206917Smarius { LIT64( 0x0000000FFFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2785206917Smarius { LIT64( 0x00000007FFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2786206917Smarius { LIT64( 0x00000003FFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2787206917Smarius { LIT64( 0x00000001FFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2788206917Smarius { LIT64( 0x00000000FFFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2789206917Smarius { LIT64( 0x000000007FFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2790206917Smarius { LIT64( 0x000000003FFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2791206917Smarius { LIT64( 0x000000001FFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2792206917Smarius { LIT64( 0x000000000FFFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2793206917Smarius { LIT64( 0x0000000007FFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2794206917Smarius { LIT64( 0x0000000003FFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2795206917Smarius { LIT64( 0x0000000001FFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2796206917Smarius { LIT64( 0x0000000000FFFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2797206917Smarius { LIT64( 0x00000000007FFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2798206917Smarius { LIT64( 0x00000000003FFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2799206917Smarius { LIT64( 0x00000000001FFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2800206917Smarius { LIT64( 0x00000000000FFFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2801206917Smarius { LIT64( 0x000000000007FFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2802206917Smarius { LIT64( 0x000000000003FFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2803206917Smarius { LIT64( 0x000000000001FFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2804206917Smarius { LIT64( 0x000000000000FFFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2805206917Smarius { LIT64( 0x0000000000007FFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2806206917Smarius { LIT64( 0x0000000000003FFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2807206917Smarius { LIT64( 0x0000000000001FFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2808206917Smarius { LIT64( 0x0000000000000FFF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2809206917Smarius { LIT64( 0x00000000000007FF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2810206917Smarius { LIT64( 0x00000000000003FF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2811206917Smarius { LIT64( 0x00000000000001FF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2812206917Smarius { LIT64( 0x00000000000000FF ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2813206917Smarius { LIT64( 0x000000000000007F ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2814206917Smarius { LIT64( 0x000000000000003F ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2815206917Smarius { LIT64( 0x000000000000001F ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2816206917Smarius { LIT64( 0x000000000000000F ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2817206917Smarius { LIT64( 0x0000000000000007 ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2818206917Smarius { LIT64( 0x0000000000000003 ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2819206917Smarius { LIT64( 0x0000000000000001 ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2820206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0xFFFFFFFFFFFFFFFF ) }, 2821206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x7FFFFFFFFFFFFFFF ) }, 2822206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x3FFFFFFFFFFFFFFF ) }, 2823206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x1FFFFFFFFFFFFFFF ) }, 2824206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0FFFFFFFFFFFFFFF ) }, 2825206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x07FFFFFFFFFFFFFF ) }, 2826206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x03FFFFFFFFFFFFFF ) }, 2827206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x01FFFFFFFFFFFFFF ) }, 2828206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x00FFFFFFFFFFFFFF ) }, 2829206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x007FFFFFFFFFFFFF ) }, 2830206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x003FFFFFFFFFFFFF ) }, 2831206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x001FFFFFFFFFFFFF ) }, 2832206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x000FFFFFFFFFFFFF ) }, 2833206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0007FFFFFFFFFFFF ) }, 2834206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0003FFFFFFFFFFFF ) }, 2835206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0001FFFFFFFFFFFF ) }, 2836206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000FFFFFFFFFFFF ) }, 2837206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x00007FFFFFFFFFFF ) }, 2838206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x00003FFFFFFFFFFF ) }, 2839206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x00001FFFFFFFFFFF ) }, 2840206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x00000FFFFFFFFFFF ) }, 2841206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x000007FFFFFFFFFF ) }, 2842206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x000003FFFFFFFFFF ) }, 2843206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x000001FFFFFFFFFF ) }, 2844206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x000000FFFFFFFFFF ) }, 2845206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000007FFFFFFFFF ) }, 2846206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000003FFFFFFFFF ) }, 2847206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000001FFFFFFFFF ) }, 2848206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000FFFFFFFFF ) }, 2849206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x00000007FFFFFFFF ) }, 2850206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x00000003FFFFFFFF ) }, 2851206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x00000001FFFFFFFF ) }, 2852206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x00000000FFFFFFFF ) }, 2853206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x000000007FFFFFFF ) }, 2854206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x000000003FFFFFFF ) }, 2855206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x000000001FFFFFFF ) }, 2856206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x000000000FFFFFFF ) }, 2857206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000007FFFFFF ) }, 2858206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000003FFFFFF ) }, 2859206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000001FFFFFF ) }, 2860206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000FFFFFF ) }, 2861206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x00000000007FFFFF ) }, 2862206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x00000000003FFFFF ) }, 2863206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x00000000001FFFFF ) }, 2864206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x00000000000FFFFF ) }, 2865206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x000000000007FFFF ) }, 2866206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x000000000003FFFF ) }, 2867206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x000000000001FFFF ) }, 2868206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x000000000000FFFF ) }, 2869206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000007FFF ) }, 2870206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000003FFF ) }, 2871206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000001FFF ) }, 2872206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000FFF ) }, 2873206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x00000000000007FF ) }, 2874206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x00000000000003FF ) }, 2875206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x00000000000001FF ) }, 2876206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x00000000000000FF ) }, 2877206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x000000000000007F ) }, 2878206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x000000000000003F ) }, 2879206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x000000000000001F ) }, 2880206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x000000000000000F ) }, 2881206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000007 ) }, 2882206917Smarius { LIT64( 0x0000000000000000 ), LIT64( 0x0000000000000003 ) } 2883206917Smarius}; 2884206917Smarius 2885206917Smariusstatic const uint32 float128NumQInP1 = float128NumQIn * float128NumP1; 2886206917Smariusstatic const uint32 float128NumQOutP1 = float128NumQOut * float128NumP1; 2887206917Smarius 2888206917Smariusstatic float128 float128NextQInP1( sequenceT *sequencePtr ) 2889206917Smarius{ 2890206917Smarius int16 expNum, sigNum; 2891206917Smarius float128 z; 2892206917Smarius 2893206917Smarius sigNum = sequencePtr->term1Num; 2894206917Smarius expNum = sequencePtr->expNum; 2895206917Smarius z.low = float128P1[ sigNum ].low; 2896206917Smarius z.high = float128QIn[ expNum ] | float128P1[ sigNum ].high; 2897206917Smarius ++sigNum; 2898206917Smarius if ( float128NumP1 <= sigNum ) { 2899206917Smarius sigNum = 0; 2900206917Smarius ++expNum; 2901206917Smarius if ( float128NumQIn <= expNum ) { 2902206917Smarius expNum = 0; 2903206917Smarius sequencePtr->done = TRUE; 2904206917Smarius } 2905206917Smarius sequencePtr->expNum = expNum; 2906206917Smarius } 2907206917Smarius sequencePtr->term1Num = sigNum; 2908206917Smarius return z; 2909206917Smarius 2910206917Smarius} 2911206917Smarius 2912206917Smariusstatic float128 float128NextQOutP1( sequenceT *sequencePtr ) 2913206917Smarius{ 2914206917Smarius int16 expNum, sigNum; 2915206917Smarius float128 z; 2916206917Smarius 2917206917Smarius sigNum = sequencePtr->term1Num; 2918206917Smarius expNum = sequencePtr->expNum; 2919206917Smarius z.low = float128P1[ sigNum ].low; 2920206917Smarius z.high = float128QOut[ expNum ] | float128P1[ sigNum ].high; 2921206917Smarius ++sigNum; 2922206917Smarius if ( float128NumP1 <= sigNum ) { 2923206917Smarius sigNum = 0; 2924206917Smarius ++expNum; 2925206917Smarius if ( float128NumQOut <= expNum ) { 2926206917Smarius expNum = 0; 2927206917Smarius sequencePtr->done = TRUE; 2928206917Smarius } 2929206917Smarius sequencePtr->expNum = expNum; 2930206917Smarius } 2931206917Smarius sequencePtr->term1Num = sigNum; 2932206917Smarius return z; 2933206917Smarius 2934206917Smarius} 2935206917Smarius 2936206917Smariusstatic const uint32 float128NumQInP2 = float128NumQIn * float128NumP2; 2937206917Smariusstatic const uint32 float128NumQOutP2 = float128NumQOut * float128NumP2; 2938206917Smarius 2939206917Smariusstatic float128 float128NextQInP2( sequenceT *sequencePtr ) 2940206917Smarius{ 2941206917Smarius int16 expNum, sigNum; 2942206917Smarius float128 z; 2943206917Smarius 2944206917Smarius sigNum = sequencePtr->term1Num; 2945206917Smarius expNum = sequencePtr->expNum; 2946206917Smarius z.low = float128P2[ sigNum ].low; 2947206917Smarius z.high = float128QIn[ expNum ] | float128P2[ sigNum ].high; 2948206917Smarius ++sigNum; 2949206917Smarius if ( float128NumP2 <= sigNum ) { 2950206917Smarius sigNum = 0; 2951206917Smarius ++expNum; 2952206917Smarius if ( float128NumQIn <= expNum ) { 2953206917Smarius expNum = 0; 2954206917Smarius sequencePtr->done = TRUE; 2955206917Smarius } 2956206917Smarius sequencePtr->expNum = expNum; 2957206917Smarius } 2958206917Smarius sequencePtr->term1Num = sigNum; 2959206917Smarius return z; 2960206917Smarius 2961206917Smarius} 2962206917Smarius 2963206917Smariusstatic float128 float128NextQOutP2( sequenceT *sequencePtr ) 2964206917Smarius{ 2965206917Smarius int16 expNum, sigNum; 2966206917Smarius float128 z; 2967206917Smarius 2968206917Smarius sigNum = sequencePtr->term1Num; 2969206917Smarius expNum = sequencePtr->expNum; 2970206917Smarius z.low = float128P2[ sigNum ].low; 2971206917Smarius z.high = float128QOut[ expNum ] | float128P2[ sigNum ].high; 2972206917Smarius ++sigNum; 2973206917Smarius if ( float128NumP2 <= sigNum ) { 2974206917Smarius sigNum = 0; 2975206917Smarius ++expNum; 2976206917Smarius if ( float128NumQOut <= expNum ) { 2977206917Smarius expNum = 0; 2978206917Smarius sequencePtr->done = TRUE; 2979206917Smarius } 2980206917Smarius sequencePtr->expNum = expNum; 2981206917Smarius } 2982206917Smarius sequencePtr->term1Num = sigNum; 2983206917Smarius return z; 2984206917Smarius 2985206917Smarius} 2986206917Smarius 2987206917Smariusstatic float128 float128RandomQOutP3( void ) 2988206917Smarius{ 2989206917Smarius int16 sigNum1, sigNum2; 2990206917Smarius uint64 sig1Low, sig2Low; 2991206917Smarius float128 z; 2992206917Smarius 2993206917Smarius sigNum1 = randomUint8() % float128NumP2; 2994206917Smarius sigNum2 = randomUint8() % float128NumP2; 2995206917Smarius sig1Low = float128P2[ sigNum1 ].low; 2996206917Smarius sig2Low = float128P2[ sigNum2 ].low; 2997206917Smarius z.low = sig1Low + sig2Low; 2998206917Smarius z.high = 2999206917Smarius float128QOut[ randomUint8() % float128NumQOut ] 3000206917Smarius | ( ( float128P2[ sigNum1 ].high 3001206917Smarius + float128P2[ sigNum2 ].high 3002206917Smarius + ( z.low < sig1Low ) 3003206917Smarius ) 3004206917Smarius & LIT64( 0x0000FFFFFFFFFFFF ) 3005206917Smarius ); 3006206917Smarius return z; 3007206917Smarius 3008206917Smarius} 3009206917Smarius 3010206917Smariusstatic float128 float128RandomQOutPInf( void ) 3011206917Smarius{ 3012206917Smarius float128 z; 3013206917Smarius 3014206917Smarius z.low = randomUint64(); 3015206917Smarius z.high = 3016206917Smarius float128QOut[ randomUint8() % float128NumQOut ] 3017206917Smarius | ( randomUint64() & LIT64( 0x0000FFFFFFFFFFFF ) ); 3018206917Smarius return z; 3019206917Smarius 3020206917Smarius} 3021206917Smarius 3022206917Smariusenum { 3023206917Smarius float128NumQInfWeightMasks = 14 3024206917Smarius}; 3025206917Smarius 3026206917Smariusstatic const uint64 float128QInfWeightMasks[ float128NumQInfWeightMasks ] = { 3027206917Smarius LIT64( 0x7FFF000000000000 ), 3028206917Smarius LIT64( 0x7FFF000000000000 ), 3029206917Smarius LIT64( 0x3FFF000000000000 ), 3030206917Smarius LIT64( 0x1FFF000000000000 ), 3031206917Smarius LIT64( 0x07FF000000000000 ), 3032206917Smarius LIT64( 0x07FF000000000000 ), 3033206917Smarius LIT64( 0x03FF000000000000 ), 3034206917Smarius LIT64( 0x01FF000000000000 ), 3035206917Smarius LIT64( 0x00FF000000000000 ), 3036206917Smarius LIT64( 0x007F000000000000 ), 3037206917Smarius LIT64( 0x003F000000000000 ), 3038206917Smarius LIT64( 0x001F000000000000 ), 3039206917Smarius LIT64( 0x000F000000000000 ), 3040206917Smarius LIT64( 0x0007000000000000 ) 3041206917Smarius}; 3042206917Smarius 3043206917Smariusstatic const uint64 float128QInfWeightOffsets[ float128NumQInfWeightMasks ] = { 3044206917Smarius LIT64( 0x0000000000000000 ), 3045206917Smarius LIT64( 0x0000000000000000 ), 3046206917Smarius LIT64( 0x2000000000000000 ), 3047206917Smarius LIT64( 0x3000000000000000 ), 3048206917Smarius LIT64( 0x3800000000000000 ), 3049206917Smarius LIT64( 0x3C00000000000000 ), 3050206917Smarius LIT64( 0x3E00000000000000 ), 3051206917Smarius LIT64( 0x3F00000000000000 ), 3052206917Smarius LIT64( 0x3F80000000000000 ), 3053206917Smarius LIT64( 0x3FC0000000000000 ), 3054206917Smarius LIT64( 0x3FE0000000000000 ), 3055206917Smarius LIT64( 0x3FF0000000000000 ), 3056206917Smarius LIT64( 0x3FF8000000000000 ), 3057206917Smarius LIT64( 0x3FFC000000000000 ) 3058206917Smarius}; 3059206917Smarius 3060206917Smariusstatic float128 float128RandomQInfP3( void ) 3061206917Smarius{ 3062206917Smarius int16 sigNum1, sigNum2; 3063206917Smarius uint64 sig1Low, sig2Low; 3064206917Smarius int8 weightMaskNum; 3065206917Smarius float128 z; 3066206917Smarius 3067206917Smarius sigNum1 = randomUint8() % float128NumP2; 3068206917Smarius sigNum2 = randomUint8() % float128NumP2; 3069206917Smarius sig1Low = float128P2[ sigNum1 ].low; 3070206917Smarius sig2Low = float128P2[ sigNum2 ].low; 3071206917Smarius z.low = sig1Low + sig2Low; 3072206917Smarius weightMaskNum = randomUint8() % float128NumQInfWeightMasks; 3073206917Smarius z.high = 3074206917Smarius ( ( (uint64) ( randomUint8() & 1 ) )<<63 ) 3075206917Smarius | ( ( ( ( (uint64) randomUint16() )<<48 ) 3076206917Smarius & float128QInfWeightMasks[ weightMaskNum ] ) 3077206917Smarius + float128QInfWeightOffsets[ weightMaskNum ] 3078206917Smarius ) 3079206917Smarius | ( ( float128P2[ sigNum1 ].high 3080206917Smarius + float128P2[ sigNum2 ].high 3081206917Smarius + ( z.low < sig1Low ) 3082206917Smarius ) 3083206917Smarius & LIT64( 0x0000FFFFFFFFFFFF ) 3084206917Smarius ); 3085206917Smarius return z; 3086206917Smarius 3087206917Smarius} 3088206917Smarius 3089206917Smariusstatic float128 float128RandomQInfPInf( void ) 3090206917Smarius{ 3091206917Smarius int8 weightMaskNum; 3092206917Smarius float128 z; 3093206917Smarius 3094206917Smarius weightMaskNum = randomUint8() % float128NumQInfWeightMasks; 3095206917Smarius z.low = randomUint64(); 3096206917Smarius z.high = 3097206917Smarius ( ( (uint64) ( randomUint8() & 1 ) )<<63 ) 3098206917Smarius | ( ( ( ( (uint64) randomUint16() )<<48 ) 3099206917Smarius & float128QInfWeightMasks[ weightMaskNum ] ) 3100206917Smarius + float128QInfWeightOffsets[ weightMaskNum ] 3101206917Smarius ) 3102206917Smarius | ( randomUint64() & LIT64( 0x0000FFFFFFFFFFFF ) ); 3103206917Smarius return z; 3104206917Smarius 3105206917Smarius} 3106206917Smarius 3107206917Smariusstatic float128 float128Random( void ) 3108206917Smarius{ 3109206917Smarius 3110206917Smarius switch ( randomUint8() & 7 ) { 3111206917Smarius case 0: 3112206917Smarius case 1: 3113206917Smarius case 2: 3114206917Smarius return float128RandomQOutP3(); 3115206917Smarius case 3: 3116206917Smarius return float128RandomQOutPInf(); 3117206917Smarius case 4: 3118206917Smarius case 5: 3119206917Smarius case 6: 3120206917Smarius return float128RandomQInfP3(); 3121207151Smarius default: 3122206917Smarius return float128RandomQInfPInf(); 3123206917Smarius } 3124206917Smarius 3125206917Smarius} 3126206917Smarius 3127206917Smarius#endif 3128206917Smarius 3129206917Smariusstatic int8 level = 0; 3130206917Smarius 3131206917Smariusvoid testCases_setLevel( int8 levelIn ) 3132206917Smarius{ 3133206917Smarius 3134206917Smarius if ( ( levelIn < 1 ) || ( 2 < levelIn ) ) { 3135206917Smarius fail( "Invalid testing level: %d", levelIn ); 3136206917Smarius } 3137206917Smarius level = levelIn; 3138206917Smarius 3139206917Smarius} 3140206917Smarius 3141206917Smariusstatic int8 sequenceType; 3142206917Smariusstatic sequenceT sequenceA, sequenceB; 3143206917Smariusstatic int8 subcase; 3144206917Smarius 3145206917Smariusuint32 testCases_total; 3146206917Smariusflag testCases_done; 3147206917Smarius 3148206917Smariusstatic float32 current_a_float32; 3149206917Smariusstatic float32 current_b_float32; 3150206917Smariusstatic float64 current_a_float64; 3151206917Smariusstatic float64 current_b_float64; 3152206917Smarius#ifdef FLOATX80 3153206917Smariusstatic floatx80 current_a_floatx80; 3154206917Smariusstatic floatx80 current_b_floatx80; 3155206917Smarius#endif 3156206917Smarius#ifdef FLOAT128 3157206917Smariusstatic float128 current_a_float128; 3158206917Smariusstatic float128 current_b_float128; 3159206917Smarius#endif 3160206917Smarius 3161206917Smariusvoid testCases_initSequence( int8 sequenceTypeIn ) 3162206917Smarius{ 3163206917Smarius 3164206917Smarius sequenceType = sequenceTypeIn; 3165206917Smarius sequenceA.term2Num = 0; 3166206917Smarius sequenceA.term1Num = 0; 3167206917Smarius sequenceA.expNum = 0; 3168206917Smarius sequenceA.done = FALSE; 3169206917Smarius sequenceB.term2Num = 0; 3170206917Smarius sequenceB.term1Num = 0; 3171206917Smarius sequenceB.expNum = 0; 3172206917Smarius sequenceB.done = FALSE; 3173206917Smarius subcase = 0; 3174206917Smarius switch ( level ) { 3175206917Smarius case 1: 3176206917Smarius switch ( sequenceTypeIn ) { 3177206917Smarius case testCases_sequence_a_int32: 3178206917Smarius testCases_total = 3 * int32NumP1; 3179206917Smarius break; 3180206917Smarius#ifdef BITS64 3181206917Smarius case testCases_sequence_a_int64: 3182206917Smarius testCases_total = 3 * int64NumP1; 3183206917Smarius break; 3184206917Smarius#endif 3185206917Smarius case testCases_sequence_a_float32: 3186206917Smarius testCases_total = 3 * float32NumQOutP1; 3187206917Smarius break; 3188206917Smarius case testCases_sequence_ab_float32: 3189206917Smarius testCases_total = 6 * float32NumQInP1 * float32NumQInP1; 3190206917Smarius current_a_float32 = float32NextQInP1( &sequenceA ); 3191206917Smarius break; 3192206917Smarius case testCases_sequence_a_float64: 3193206917Smarius testCases_total = 3 * float64NumQOutP1; 3194206917Smarius break; 3195206917Smarius case testCases_sequence_ab_float64: 3196206917Smarius testCases_total = 6 * float64NumQInP1 * float64NumQInP1; 3197206917Smarius current_a_float64 = float64NextQInP1( &sequenceA ); 3198206917Smarius break; 3199206917Smarius#ifdef FLOATX80 3200206917Smarius case testCases_sequence_a_floatx80: 3201206917Smarius testCases_total = 3 * floatx80NumQOutP1; 3202206917Smarius break; 3203206917Smarius case testCases_sequence_ab_floatx80: 3204206917Smarius testCases_total = 6 * floatx80NumQInP1 * floatx80NumQInP1; 3205206917Smarius current_a_floatx80 = floatx80NextQInP1( &sequenceA ); 3206206917Smarius break; 3207206917Smarius#endif 3208206917Smarius#ifdef FLOAT128 3209206917Smarius case testCases_sequence_a_float128: 3210206917Smarius testCases_total = 3 * float128NumQOutP1; 3211206917Smarius break; 3212206917Smarius case testCases_sequence_ab_float128: 3213206917Smarius testCases_total = 6 * float128NumQInP1 * float128NumQInP1; 3214206917Smarius current_a_float128 = float128NextQInP1( &sequenceA ); 3215206917Smarius break; 3216206917Smarius#endif 3217206917Smarius } 3218206917Smarius break; 3219206917Smarius case 2: 3220206917Smarius switch ( sequenceTypeIn ) { 3221206917Smarius case testCases_sequence_a_int32: 3222206917Smarius testCases_total = 2 * int32NumP2; 3223206917Smarius break; 3224206917Smarius#ifdef BITS64 3225206917Smarius case testCases_sequence_a_int64: 3226206917Smarius testCases_total = 2 * int64NumP2; 3227206917Smarius break; 3228206917Smarius#endif 3229206917Smarius case testCases_sequence_a_float32: 3230206917Smarius testCases_total = 2 * float32NumQOutP2; 3231206917Smarius break; 3232206917Smarius case testCases_sequence_ab_float32: 3233206917Smarius testCases_total = 2 * float32NumQInP2 * float32NumQInP2; 3234206917Smarius current_a_float32 = float32NextQInP2( &sequenceA ); 3235206917Smarius break; 3236206917Smarius case testCases_sequence_a_float64: 3237206917Smarius testCases_total = 2 * float64NumQOutP2; 3238206917Smarius break; 3239206917Smarius case testCases_sequence_ab_float64: 3240206917Smarius testCases_total = 2 * float64NumQInP2 * float64NumQInP2; 3241206917Smarius current_a_float64 = float64NextQInP2( &sequenceA ); 3242206917Smarius break; 3243206917Smarius#ifdef FLOATX80 3244206917Smarius case testCases_sequence_a_floatx80: 3245206917Smarius testCases_total = 2 * floatx80NumQOutP2; 3246206917Smarius break; 3247206917Smarius case testCases_sequence_ab_floatx80: 3248206917Smarius testCases_total = 2 * floatx80NumQInP2 * floatx80NumQInP2; 3249206917Smarius current_a_floatx80 = floatx80NextQInP2( &sequenceA ); 3250206917Smarius break; 3251206917Smarius#endif 3252206917Smarius#ifdef FLOAT128 3253206917Smarius case testCases_sequence_a_float128: 3254206917Smarius testCases_total = 2 * float128NumQOutP2; 3255206917Smarius break; 3256206917Smarius case testCases_sequence_ab_float128: 3257206917Smarius testCases_total = 2 * float128NumQInP2 * float128NumQInP2; 3258206917Smarius current_a_float128 = float128NextQInP2( &sequenceA ); 3259206917Smarius break; 3260206917Smarius#endif 3261206917Smarius } 3262206917Smarius break; 3263206917Smarius } 3264206917Smarius testCases_done = FALSE; 3265206917Smarius 3266206917Smarius} 3267206917Smarius 3268206917Smariusint32 testCases_a_int32; 3269206917Smarius#ifdef BITS64 3270206917Smariusint64 testCases_a_int64; 3271206917Smarius#endif 3272206917Smariusfloat32 testCases_a_float32; 3273206917Smariusfloat32 testCases_b_float32; 3274206917Smariusfloat64 testCases_a_float64; 3275206917Smariusfloat64 testCases_b_float64; 3276206917Smarius#ifdef FLOATX80 3277206917Smariusfloatx80 testCases_a_floatx80; 3278206917Smariusfloatx80 testCases_b_floatx80; 3279206917Smarius#endif 3280206917Smarius#ifdef FLOAT128 3281206917Smariusfloat128 testCases_a_float128; 3282206917Smariusfloat128 testCases_b_float128; 3283206917Smarius#endif 3284206917Smarius 3285206917Smariusvoid testCases_next( void ) 3286206917Smarius{ 3287206917Smarius 3288206917Smarius switch ( level ) { 3289206917Smarius case 1: 3290206917Smarius switch ( sequenceType ) { 3291206917Smarius case testCases_sequence_a_int32: 3292206917Smarius switch ( subcase ) { 3293206917Smarius case 0: 3294206917Smarius testCases_a_int32 = int32RandomP3(); 3295206917Smarius break; 3296206917Smarius case 1: 3297206917Smarius testCases_a_int32 = int32RandomPInf(); 3298206917Smarius break; 3299206917Smarius case 2: 3300206917Smarius testCases_a_int32 = int32NextP1( &sequenceA ); 3301206917Smarius testCases_done = sequenceA.done; 3302206917Smarius subcase = -1; 3303206917Smarius break; 3304206917Smarius } 3305206917Smarius ++subcase; 3306206917Smarius break; 3307206917Smarius#ifdef BITS64 3308206917Smarius case testCases_sequence_a_int64: 3309206917Smarius switch ( subcase ) { 3310206917Smarius case 0: 3311206917Smarius testCases_a_int64 = int64RandomP3(); 3312206917Smarius break; 3313206917Smarius case 1: 3314206917Smarius testCases_a_int64 = int64RandomPInf(); 3315206917Smarius break; 3316206917Smarius case 2: 3317206917Smarius testCases_a_int64 = int64NextP1( &sequenceA ); 3318206917Smarius testCases_done = sequenceA.done; 3319206917Smarius subcase = -1; 3320206917Smarius break; 3321206917Smarius } 3322206917Smarius ++subcase; 3323206917Smarius break; 3324206917Smarius#endif 3325206917Smarius case testCases_sequence_a_float32: 3326206917Smarius switch ( subcase ) { 3327206917Smarius case 0: 3328206917Smarius case 1: 3329206917Smarius testCases_a_float32 = float32Random(); 3330206917Smarius break; 3331206917Smarius case 2: 3332206917Smarius testCases_a_float32 = float32NextQOutP1( &sequenceA ); 3333206917Smarius testCases_done = sequenceA.done; 3334206917Smarius subcase = -1; 3335206917Smarius break; 3336206917Smarius } 3337206917Smarius ++subcase; 3338206917Smarius break; 3339206917Smarius case testCases_sequence_ab_float32: 3340206917Smarius switch ( subcase ) { 3341206917Smarius case 0: 3342206917Smarius if ( sequenceB.done ) { 3343206917Smarius sequenceB.done = FALSE; 3344206917Smarius current_a_float32 = float32NextQInP1( &sequenceA ); 3345206917Smarius } 3346206917Smarius current_b_float32 = float32NextQInP1( &sequenceB ); 3347206917Smarius case 2: 3348206917Smarius case 4: 3349206917Smarius testCases_a_float32 = float32Random(); 3350206917Smarius testCases_b_float32 = float32Random(); 3351206917Smarius break; 3352206917Smarius case 1: 3353206917Smarius testCases_a_float32 = current_a_float32; 3354206917Smarius testCases_b_float32 = float32Random(); 3355206917Smarius break; 3356206917Smarius case 3: 3357206917Smarius testCases_a_float32 = float32Random(); 3358206917Smarius testCases_b_float32 = current_b_float32; 3359206917Smarius break; 3360206917Smarius case 5: 3361206917Smarius testCases_a_float32 = current_a_float32; 3362206917Smarius testCases_b_float32 = current_b_float32; 3363206917Smarius testCases_done = sequenceA.done & sequenceB.done; 3364206917Smarius subcase = -1; 3365206917Smarius break; 3366206917Smarius } 3367206917Smarius ++subcase; 3368206917Smarius break; 3369206917Smarius case testCases_sequence_a_float64: 3370206917Smarius switch ( subcase ) { 3371206917Smarius case 0: 3372206917Smarius case 1: 3373206917Smarius testCases_a_float64 = float64Random(); 3374206917Smarius break; 3375206917Smarius case 2: 3376206917Smarius testCases_a_float64 = float64NextQOutP1( &sequenceA ); 3377206917Smarius testCases_done = sequenceA.done; 3378206917Smarius subcase = -1; 3379206917Smarius break; 3380206917Smarius } 3381206917Smarius ++subcase; 3382206917Smarius break; 3383206917Smarius case testCases_sequence_ab_float64: 3384206917Smarius switch ( subcase ) { 3385206917Smarius case 0: 3386206917Smarius if ( sequenceB.done ) { 3387206917Smarius sequenceB.done = FALSE; 3388206917Smarius current_a_float64 = float64NextQInP1( &sequenceA ); 3389206917Smarius } 3390206917Smarius current_b_float64 = float64NextQInP1( &sequenceB ); 3391206917Smarius case 2: 3392206917Smarius case 4: 3393206917Smarius testCases_a_float64 = float64Random(); 3394206917Smarius testCases_b_float64 = float64Random(); 3395206917Smarius break; 3396206917Smarius case 1: 3397206917Smarius testCases_a_float64 = current_a_float64; 3398206917Smarius testCases_b_float64 = float64Random(); 3399206917Smarius break; 3400206917Smarius case 3: 3401206917Smarius testCases_a_float64 = float64Random(); 3402206917Smarius testCases_b_float64 = current_b_float64; 3403206917Smarius break; 3404206917Smarius case 5: 3405206917Smarius testCases_a_float64 = current_a_float64; 3406206917Smarius testCases_b_float64 = current_b_float64; 3407206917Smarius testCases_done = sequenceA.done & sequenceB.done; 3408206917Smarius subcase = -1; 3409206917Smarius break; 3410206917Smarius } 3411206917Smarius ++subcase; 3412206917Smarius break; 3413206917Smarius#ifdef FLOATX80 3414206917Smarius case testCases_sequence_a_floatx80: 3415206917Smarius switch ( subcase ) { 3416206917Smarius case 0: 3417206917Smarius case 1: 3418206917Smarius testCases_a_floatx80 = floatx80Random(); 3419206917Smarius break; 3420206917Smarius case 2: 3421206917Smarius testCases_a_floatx80 = floatx80NextQOutP1( &sequenceA ); 3422206917Smarius testCases_done = sequenceA.done; 3423206917Smarius subcase = -1; 3424206917Smarius break; 3425206917Smarius } 3426206917Smarius ++subcase; 3427206917Smarius break; 3428206917Smarius case testCases_sequence_ab_floatx80: 3429206917Smarius switch ( subcase ) { 3430206917Smarius case 0: 3431206917Smarius if ( sequenceB.done ) { 3432206917Smarius sequenceB.done = FALSE; 3433206917Smarius current_a_floatx80 = floatx80NextQInP1( &sequenceA ); 3434206917Smarius } 3435206917Smarius current_b_floatx80 = floatx80NextQInP1( &sequenceB ); 3436206917Smarius case 2: 3437206917Smarius case 4: 3438206917Smarius testCases_a_floatx80 = floatx80Random(); 3439206917Smarius testCases_b_floatx80 = floatx80Random(); 3440206917Smarius break; 3441206917Smarius case 1: 3442206917Smarius testCases_a_floatx80 = current_a_floatx80; 3443206917Smarius testCases_b_floatx80 = floatx80Random(); 3444206917Smarius break; 3445206917Smarius case 3: 3446206917Smarius testCases_a_floatx80 = floatx80Random(); 3447206917Smarius testCases_b_floatx80 = current_b_floatx80; 3448206917Smarius break; 3449206917Smarius case 5: 3450206917Smarius testCases_a_floatx80 = current_a_floatx80; 3451206917Smarius testCases_b_floatx80 = current_b_floatx80; 3452206917Smarius testCases_done = sequenceA.done & sequenceB.done; 3453206917Smarius subcase = -1; 3454206917Smarius break; 3455206917Smarius } 3456206917Smarius ++subcase; 3457206917Smarius break; 3458206917Smarius#endif 3459206917Smarius#ifdef FLOAT128 3460206917Smarius case testCases_sequence_a_float128: 3461206917Smarius switch ( subcase ) { 3462206917Smarius case 0: 3463206917Smarius case 1: 3464206917Smarius testCases_a_float128 = float128Random(); 3465206917Smarius break; 3466206917Smarius case 2: 3467206917Smarius testCases_a_float128 = float128NextQOutP1( &sequenceA ); 3468206917Smarius testCases_done = sequenceA.done; 3469206917Smarius subcase = -1; 3470206917Smarius break; 3471206917Smarius } 3472206917Smarius ++subcase; 3473206917Smarius break; 3474206917Smarius case testCases_sequence_ab_float128: 3475206917Smarius switch ( subcase ) { 3476206917Smarius case 0: 3477206917Smarius if ( sequenceB.done ) { 3478206917Smarius sequenceB.done = FALSE; 3479206917Smarius current_a_float128 = float128NextQInP1( &sequenceA ); 3480206917Smarius } 3481206917Smarius current_b_float128 = float128NextQInP1( &sequenceB ); 3482206917Smarius case 2: 3483206917Smarius case 4: 3484206917Smarius testCases_a_float128 = float128Random(); 3485206917Smarius testCases_b_float128 = float128Random(); 3486206917Smarius break; 3487206917Smarius case 1: 3488206917Smarius testCases_a_float128 = current_a_float128; 3489206917Smarius testCases_b_float128 = float128Random(); 3490206917Smarius break; 3491206917Smarius case 3: 3492206917Smarius testCases_a_float128 = float128Random(); 3493206917Smarius testCases_b_float128 = current_b_float128; 3494206917Smarius break; 3495206917Smarius case 5: 3496206917Smarius testCases_a_float128 = current_a_float128; 3497206917Smarius testCases_b_float128 = current_b_float128; 3498206917Smarius testCases_done = sequenceA.done & sequenceB.done; 3499206917Smarius subcase = -1; 3500206917Smarius break; 3501206917Smarius } 3502206917Smarius ++subcase; 3503206917Smarius break; 3504206917Smarius#endif 3505206917Smarius } 3506206917Smarius break; 3507206917Smarius case 2: 3508206917Smarius switch ( sequenceType ) { 3509206917Smarius case testCases_sequence_a_int32: 3510206917Smarius switch ( subcase ) { 3511206917Smarius case 0: 3512206917Smarius testCases_a_int32 = int32RandomP3(); 3513206917Smarius break; 3514206917Smarius case 2: 3515206917Smarius testCases_a_int32 = int32RandomPInf(); 3516206917Smarius break; 3517206917Smarius case 3: 3518206917Smarius subcase = -1; 3519206917Smarius case 1: 3520206917Smarius testCases_a_int32 = int32NextP2( &sequenceA ); 3521206917Smarius testCases_done = sequenceA.done; 3522206917Smarius break; 3523206917Smarius } 3524206917Smarius ++subcase; 3525206917Smarius break; 3526206917Smarius#ifdef BITS64 3527206917Smarius case testCases_sequence_a_int64: 3528206917Smarius switch ( subcase ) { 3529206917Smarius case 0: 3530206917Smarius testCases_a_int64 = int64RandomP3(); 3531206917Smarius break; 3532206917Smarius case 2: 3533206917Smarius testCases_a_int64 = int64RandomPInf(); 3534206917Smarius break; 3535206917Smarius case 3: 3536206917Smarius subcase = -1; 3537206917Smarius case 1: 3538206917Smarius testCases_a_int64 = int64NextP2( &sequenceA ); 3539206917Smarius testCases_done = sequenceA.done; 3540206917Smarius break; 3541206917Smarius } 3542206917Smarius ++subcase; 3543206917Smarius break; 3544206917Smarius#endif 3545206917Smarius case testCases_sequence_a_float32: 3546206917Smarius switch ( subcase ) { 3547206917Smarius case 0: 3548206917Smarius testCases_a_float32 = float32Random(); 3549206917Smarius break; 3550206917Smarius case 1: 3551206917Smarius testCases_a_float32 = float32NextQOutP2( &sequenceA ); 3552206917Smarius testCases_done = sequenceA.done; 3553206917Smarius subcase = -1; 3554206917Smarius break; 3555206917Smarius } 3556206917Smarius ++subcase; 3557206917Smarius break; 3558206917Smarius case testCases_sequence_ab_float32: 3559206917Smarius switch ( subcase ) { 3560206917Smarius case 0: 3561206917Smarius testCases_a_float32 = float32Random(); 3562206917Smarius testCases_b_float32 = float32Random(); 3563206917Smarius break; 3564206917Smarius case 1: 3565206917Smarius if ( sequenceB.done ) { 3566206917Smarius sequenceB.done = FALSE; 3567206917Smarius current_a_float32 = float32NextQInP2( &sequenceA ); 3568206917Smarius } 3569206917Smarius testCases_a_float32 = current_a_float32; 3570206917Smarius testCases_b_float32 = float32NextQInP2( &sequenceB ); 3571206917Smarius testCases_done = sequenceA.done & sequenceB.done; 3572206917Smarius subcase = -1; 3573206917Smarius break; 3574206917Smarius } 3575206917Smarius ++subcase; 3576206917Smarius break; 3577206917Smarius case testCases_sequence_a_float64: 3578206917Smarius switch ( subcase ) { 3579206917Smarius case 0: 3580206917Smarius testCases_a_float64 = float64Random(); 3581206917Smarius break; 3582206917Smarius case 1: 3583206917Smarius testCases_a_float64 = float64NextQOutP2( &sequenceA ); 3584206917Smarius testCases_done = sequenceA.done; 3585206917Smarius subcase = -1; 3586206917Smarius break; 3587206917Smarius } 3588206917Smarius ++subcase; 3589206917Smarius break; 3590206917Smarius case testCases_sequence_ab_float64: 3591206917Smarius switch ( subcase ) { 3592206917Smarius case 0: 3593206917Smarius testCases_a_float64 = float64Random(); 3594206917Smarius testCases_b_float64 = float64Random(); 3595206917Smarius break; 3596206917Smarius case 1: 3597206917Smarius if ( sequenceB.done ) { 3598206917Smarius sequenceB.done = FALSE; 3599206917Smarius current_a_float64 = float64NextQInP2( &sequenceA ); 3600206917Smarius } 3601206917Smarius testCases_a_float64 = current_a_float64; 3602206917Smarius testCases_b_float64 = float64NextQInP2( &sequenceB ); 3603206917Smarius testCases_done = sequenceA.done & sequenceB.done; 3604206917Smarius subcase = -1; 3605206917Smarius break; 3606206917Smarius } 3607206917Smarius ++subcase; 3608206917Smarius break; 3609206917Smarius#ifdef FLOATX80 3610206917Smarius case testCases_sequence_a_floatx80: 3611206917Smarius switch ( subcase ) { 3612206917Smarius case 0: 3613206917Smarius testCases_a_floatx80 = floatx80Random(); 3614206917Smarius break; 3615206917Smarius case 1: 3616206917Smarius testCases_a_floatx80 = floatx80NextQOutP2( &sequenceA ); 3617206917Smarius testCases_done = sequenceA.done; 3618206917Smarius subcase = -1; 3619206917Smarius break; 3620206917Smarius } 3621206917Smarius ++subcase; 3622206917Smarius break; 3623206917Smarius case testCases_sequence_ab_floatx80: 3624206917Smarius switch ( subcase ) { 3625206917Smarius case 0: 3626206917Smarius testCases_a_floatx80 = floatx80Random(); 3627206917Smarius testCases_b_floatx80 = floatx80Random(); 3628206917Smarius break; 3629206917Smarius case 1: 3630206917Smarius if ( sequenceB.done ) { 3631206917Smarius sequenceB.done = FALSE; 3632206917Smarius current_a_floatx80 = floatx80NextQInP2( &sequenceA ); 3633206917Smarius } 3634206917Smarius testCases_a_floatx80 = current_a_floatx80; 3635206917Smarius testCases_b_floatx80 = floatx80NextQInP2( &sequenceB ); 3636206917Smarius testCases_done = sequenceA.done & sequenceB.done; 3637206917Smarius subcase = -1; 3638206917Smarius break; 3639206917Smarius } 3640206917Smarius ++subcase; 3641206917Smarius break; 3642206917Smarius#endif 3643206917Smarius#ifdef FLOAT128 3644206917Smarius case testCases_sequence_a_float128: 3645206917Smarius switch ( subcase ) { 3646206917Smarius case 0: 3647206917Smarius testCases_a_float128 = float128Random(); 3648206917Smarius break; 3649206917Smarius case 1: 3650206917Smarius testCases_a_float128 = float128NextQOutP2( &sequenceA ); 3651206917Smarius testCases_done = sequenceA.done; 3652206917Smarius subcase = -1; 3653206917Smarius break; 3654206917Smarius } 3655206917Smarius ++subcase; 3656206917Smarius break; 3657206917Smarius case testCases_sequence_ab_float128: 3658206917Smarius switch ( subcase ) { 3659206917Smarius case 0: 3660206917Smarius testCases_a_float128 = float128Random(); 3661206917Smarius testCases_b_float128 = float128Random(); 3662206917Smarius break; 3663206917Smarius case 1: 3664206917Smarius if ( sequenceB.done ) { 3665206917Smarius sequenceB.done = FALSE; 3666206917Smarius current_a_float128 = float128NextQInP2( &sequenceA ); 3667206917Smarius } 3668206917Smarius testCases_a_float128 = current_a_float128; 3669206917Smarius testCases_b_float128 = float128NextQInP2( &sequenceB ); 3670206917Smarius testCases_done = sequenceA.done & sequenceB.done; 3671206917Smarius subcase = -1; 3672206917Smarius break; 3673206917Smarius } 3674206917Smarius ++subcase; 3675206917Smarius break; 3676206917Smarius#endif 3677206917Smarius } 3678206917Smarius break; 3679206917Smarius } 3680206917Smarius 3681206917Smarius} 3682206917Smarius 3683