| 3308 | *----------------------------------------------------------------------------*/ |
| 3309 | |
| 3310 | floatx80 floatx80_neg(floatx80 a, float_status *status) |
| 3311 | { |
| 3312 | flag aSign; |
| 3313 | int32_t aExp; |
| 3314 | uint64_t aSig; |
| 3315 | |
| 3316 | aSig = extractFloatx80Frac(a); |
| 3317 | aExp = extractFloatx80Exp(a); |
| 3318 | aSign = extractFloatx80Sign(a); |
| 3319 | |
| 3320 | if ( aExp == 0x7FFF ) { |
| 3321 | if ( (uint64_t) ( aSig<<1 ) ) |
| 3322 | return propagateFloatx80NaNOneArg( a, status ); |
| 3323 | if (inf_clear_intbit(status)) aSig = 0; |
| 3324 | return packFloatx80(!aSign, aExp, aSig); |
| 3325 | } |
| 3326 | |
| 3327 | aSign = !aSign; |
| 3328 | |
| 3329 | if ( aExp == 0 ) { |
| 3330 | if ( aSig == 0 ) return packFloatx80( aSign, 0, 0 ); |
| 3331 | normalizeFloatx80Subnormal( aSig, &aExp, &aSig ); |
| 3332 | } |
| 3333 | |
| 3334 | return roundAndPackFloatx80( |
| 3335 | status->floatx80_rounding_precision, aSign, aExp, aSig, 0, status ); |
| 3336 | |
| 3337 | } |
| 3338 | |
| 3339 | /*---------------------------------------------------------------------------- |
| 3340 | | Returns the result of comparing the extended double-precision floating- |
no test coverage detected