Revision e6afc87f fpu/softfloat.c
b/fpu/softfloat.c | ||
---|---|---|
341 | 341 |
return packFloat32( zSign, 0xFF, - ( roundIncrement == 0 )); |
342 | 342 |
} |
343 | 343 |
if ( zExp < 0 ) { |
344 |
if ( STATUS(flush_to_zero) ) return packFloat32( zSign, 0, 0 ); |
|
344 |
if (STATUS(flush_to_zero)) { |
|
345 |
float_raise(float_flag_output_denormal STATUS_VAR); |
|
346 |
return packFloat32(zSign, 0, 0); |
|
347 |
} |
|
345 | 348 |
isTiny = |
346 | 349 |
( STATUS(float_detect_tininess) == float_tininess_before_rounding ) |
347 | 350 |
|| ( zExp < -1 ) |
... | ... | |
520 | 523 |
return packFloat64( zSign, 0x7FF, - ( roundIncrement == 0 )); |
521 | 524 |
} |
522 | 525 |
if ( zExp < 0 ) { |
523 |
if ( STATUS(flush_to_zero) ) return packFloat64( zSign, 0, 0 ); |
|
526 |
if (STATUS(flush_to_zero)) { |
|
527 |
float_raise(float_flag_output_denormal STATUS_VAR); |
|
528 |
return packFloat64(zSign, 0, 0); |
|
529 |
} |
|
524 | 530 |
isTiny = |
525 | 531 |
( STATUS(float_detect_tininess) == float_tininess_before_rounding ) |
526 | 532 |
|| ( zExp < -1 ) |
... | ... | |
699 | 705 |
goto overflow; |
700 | 706 |
} |
701 | 707 |
if ( zExp <= 0 ) { |
702 |
if ( STATUS(flush_to_zero) ) return packFloatx80( zSign, 0, 0 ); |
|
708 |
if (STATUS(flush_to_zero)) { |
|
709 |
float_raise(float_flag_output_denormal STATUS_VAR); |
|
710 |
return packFloatx80(zSign, 0, 0); |
|
711 |
} |
|
703 | 712 |
isTiny = |
704 | 713 |
( STATUS(float_detect_tininess) == float_tininess_before_rounding ) |
705 | 714 |
|| ( zExp < 0 ) |
... | ... | |
1030 | 1039 |
return packFloat128( zSign, 0x7FFF, 0, 0 ); |
1031 | 1040 |
} |
1032 | 1041 |
if ( zExp < 0 ) { |
1033 |
if ( STATUS(flush_to_zero) ) return packFloat128( zSign, 0, 0, 0 ); |
|
1042 |
if (STATUS(flush_to_zero)) { |
|
1043 |
float_raise(float_flag_output_denormal STATUS_VAR); |
|
1044 |
return packFloat128(zSign, 0, 0, 0); |
|
1045 |
} |
|
1034 | 1046 |
isTiny = |
1035 | 1047 |
( STATUS(float_detect_tininess) == float_tininess_before_rounding ) |
1036 | 1048 |
|| ( zExp < -1 ) |
... | ... | |
1761 | 1773 |
return a; |
1762 | 1774 |
} |
1763 | 1775 |
if ( aExp == 0 ) { |
1764 |
if ( STATUS(flush_to_zero) ) return packFloat32( zSign, 0, 0 ); |
|
1776 |
if (STATUS(flush_to_zero)) { |
|
1777 |
if (aSig | bSig) { |
|
1778 |
float_raise(float_flag_output_denormal STATUS_VAR); |
|
1779 |
} |
|
1780 |
return packFloat32(zSign, 0, 0); |
|
1781 |
} |
|
1765 | 1782 |
return packFloat32( zSign, 0, ( aSig + bSig )>>6 ); |
1766 | 1783 |
} |
1767 | 1784 |
zSig = 0x40000000 + aSig + bSig; |
... | ... | |
3120 | 3137 |
return a; |
3121 | 3138 |
} |
3122 | 3139 |
if ( aExp == 0 ) { |
3123 |
if ( STATUS(flush_to_zero) ) return packFloat64( zSign, 0, 0 ); |
|
3140 |
if (STATUS(flush_to_zero)) { |
|
3141 |
if (aSig | bSig) { |
|
3142 |
float_raise(float_flag_output_denormal STATUS_VAR); |
|
3143 |
} |
|
3144 |
return packFloat64(zSign, 0, 0); |
|
3145 |
} |
|
3124 | 3146 |
return packFloat64( zSign, 0, ( aSig + bSig )>>9 ); |
3125 | 3147 |
} |
3126 | 3148 |
zSig = LIT64( 0x4000000000000000 ) + aSig + bSig; |
... | ... | |
5282 | 5304 |
} |
5283 | 5305 |
add128( aSig0, aSig1, bSig0, bSig1, &zSig0, &zSig1 ); |
5284 | 5306 |
if ( aExp == 0 ) { |
5285 |
if ( STATUS(flush_to_zero) ) return packFloat128( zSign, 0, 0, 0 ); |
|
5307 |
if (STATUS(flush_to_zero)) { |
|
5308 |
if (zSig0 | zSig1) { |
|
5309 |
float_raise(float_flag_output_denormal STATUS_VAR); |
|
5310 |
} |
|
5311 |
return packFloat128(zSign, 0, 0, 0); |
|
5312 |
} |
|
5286 | 5313 |
return packFloat128( zSign, 0, zSig0, zSig1 ); |
5287 | 5314 |
} |
5288 | 5315 |
zSig2 = 0; |
Also available in: Unified diff