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