Revision d735d695 fpu/softfloat-specialize.h
b/fpu/softfloat-specialize.h | ||
---|---|---|
227 | 227 |
|
228 | 228 |
static float32 propagateFloat32NaN( float32 a, float32 b STATUS_PARAM) |
229 | 229 |
{ |
230 |
flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN, aIsLargerSignificand; |
|
230 |
flag aIsQuietNaN, aIsSignalingNaN, bIsQuietNaN, bIsSignalingNaN; |
|
231 |
flag aIsLargerSignificand; |
|
231 | 232 |
bits32 av, bv, res; |
232 | 233 |
|
233 | 234 |
if ( STATUS(default_nan_mode) ) |
234 | 235 |
return float32_default_nan; |
235 | 236 |
|
236 |
aIsNaN = float32_is_quiet_nan( a ); |
|
237 |
aIsQuietNaN = float32_is_quiet_nan( a );
|
|
237 | 238 |
aIsSignalingNaN = float32_is_signaling_nan( a ); |
238 |
bIsNaN = float32_is_quiet_nan( b ); |
|
239 |
bIsQuietNaN = float32_is_quiet_nan( b );
|
|
239 | 240 |
bIsSignalingNaN = float32_is_signaling_nan( b ); |
240 | 241 |
av = float32_val(a); |
241 | 242 |
bv = float32_val(b); |
... | ... | |
256 | 257 |
aIsLargerSignificand = (av < bv) ? 1 : 0; |
257 | 258 |
} |
258 | 259 |
|
259 |
if (pickNaN(aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN,
|
|
260 |
if (pickNaN(aIsQuietNaN, aIsSignalingNaN, bIsQuietNaN, bIsSignalingNaN,
|
|
260 | 261 |
aIsLargerSignificand)) { |
261 | 262 |
res = bv; |
262 | 263 |
} else { |
... | ... | |
375 | 376 |
|
376 | 377 |
static float64 propagateFloat64NaN( float64 a, float64 b STATUS_PARAM) |
377 | 378 |
{ |
378 |
flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN, aIsLargerSignificand; |
|
379 |
flag aIsQuietNaN, aIsSignalingNaN, bIsQuietNaN, bIsSignalingNaN; |
|
380 |
flag aIsLargerSignificand; |
|
379 | 381 |
bits64 av, bv, res; |
380 | 382 |
|
381 | 383 |
if ( STATUS(default_nan_mode) ) |
382 | 384 |
return float64_default_nan; |
383 | 385 |
|
384 |
aIsNaN = float64_is_quiet_nan( a ); |
|
386 |
aIsQuietNaN = float64_is_quiet_nan( a );
|
|
385 | 387 |
aIsSignalingNaN = float64_is_signaling_nan( a ); |
386 |
bIsNaN = float64_is_quiet_nan( b ); |
|
388 |
bIsQuietNaN = float64_is_quiet_nan( b );
|
|
387 | 389 |
bIsSignalingNaN = float64_is_signaling_nan( b ); |
388 | 390 |
av = float64_val(a); |
389 | 391 |
bv = float64_val(b); |
... | ... | |
404 | 406 |
aIsLargerSignificand = (av < bv) ? 1 : 0; |
405 | 407 |
} |
406 | 408 |
|
407 |
if (pickNaN(aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN,
|
|
409 |
if (pickNaN(aIsQuietNaN, aIsSignalingNaN, bIsQuietNaN, bIsSignalingNaN,
|
|
408 | 410 |
aIsLargerSignificand)) { |
409 | 411 |
res = bv; |
410 | 412 |
} else { |
... | ... | |
511 | 513 |
|
512 | 514 |
static floatx80 propagateFloatx80NaN( floatx80 a, floatx80 b STATUS_PARAM) |
513 | 515 |
{ |
514 |
flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN, aIsLargerSignificand; |
|
516 |
flag aIsQuietNaN, aIsSignalingNaN, bIsQuietNaN, bIsSignalingNaN; |
|
517 |
flag aIsLargerSignificand; |
|
515 | 518 |
|
516 | 519 |
if ( STATUS(default_nan_mode) ) { |
517 | 520 |
a.low = floatx80_default_nan_low; |
... | ... | |
519 | 522 |
return a; |
520 | 523 |
} |
521 | 524 |
|
522 |
aIsNaN = floatx80_is_quiet_nan( a ); |
|
525 |
aIsQuietNaN = floatx80_is_quiet_nan( a );
|
|
523 | 526 |
aIsSignalingNaN = floatx80_is_signaling_nan( a ); |
524 |
bIsNaN = floatx80_is_quiet_nan( b ); |
|
527 |
bIsQuietNaN = floatx80_is_quiet_nan( b );
|
|
525 | 528 |
bIsSignalingNaN = floatx80_is_signaling_nan( b ); |
526 | 529 |
#if SNAN_BIT_IS_ONE |
527 | 530 |
a.low &= ~LIT64( 0xC000000000000000 ); |
... | ... | |
540 | 543 |
aIsLargerSignificand = (a.high < b.high) ? 1 : 0; |
541 | 544 |
} |
542 | 545 |
|
543 |
if (pickNaN(aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN,
|
|
546 |
if (pickNaN(aIsQuietNaN, aIsSignalingNaN, bIsQuietNaN, bIsSignalingNaN,
|
|
544 | 547 |
aIsLargerSignificand)) { |
545 | 548 |
return b; |
546 | 549 |
} else { |
... | ... | |
638 | 641 |
|
639 | 642 |
static float128 propagateFloat128NaN( float128 a, float128 b STATUS_PARAM) |
640 | 643 |
{ |
641 |
flag aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN, aIsLargerSignificand; |
|
644 |
flag aIsQuietNaN, aIsSignalingNaN, bIsQuietNaN, bIsSignalingNaN; |
|
645 |
flag aIsLargerSignificand; |
|
642 | 646 |
|
643 | 647 |
if ( STATUS(default_nan_mode) ) { |
644 | 648 |
a.low = float128_default_nan_low; |
... | ... | |
646 | 650 |
return a; |
647 | 651 |
} |
648 | 652 |
|
649 |
aIsNaN = float128_is_quiet_nan( a ); |
|
653 |
aIsQuietNaN = float128_is_quiet_nan( a );
|
|
650 | 654 |
aIsSignalingNaN = float128_is_signaling_nan( a ); |
651 |
bIsNaN = float128_is_quiet_nan( b ); |
|
655 |
bIsQuietNaN = float128_is_quiet_nan( b );
|
|
652 | 656 |
bIsSignalingNaN = float128_is_signaling_nan( b ); |
653 | 657 |
#if SNAN_BIT_IS_ONE |
654 | 658 |
a.high &= ~LIT64( 0x0000800000000000 ); |
... | ... | |
667 | 671 |
aIsLargerSignificand = (a.high < b.high) ? 1 : 0; |
668 | 672 |
} |
669 | 673 |
|
670 |
if (pickNaN(aIsNaN, aIsSignalingNaN, bIsNaN, bIsSignalingNaN,
|
|
674 |
if (pickNaN(aIsQuietNaN, aIsSignalingNaN, bIsQuietNaN, bIsSignalingNaN,
|
|
671 | 675 |
aIsLargerSignificand)) { |
672 | 676 |
return b; |
673 | 677 |
} else { |
Also available in: Unified diff