| 371 | if result.is_nan() && !a.is_nan() && !b.is_nan() { |
| 372 | flags |= NV; |
| 373 | } |
| 374 | if result.is_infinite() && !a.is_infinite() && !b.is_infinite() { |
| 375 | flags |= OF | NX; |
| 376 | } else if result.is_subnormal() { |
| 377 | // Subnormal result implies underflow; NX is almost certain for subnormals. |
| 378 | flags |= UF | NX; |
| 379 | } |
| 380 | flags |
| 381 | } |
| 382 | |
| 383 | // --- F extension, single-precision arithmetic (exact via f64 promotion) --- |
| 384 | |
| 385 | pub fn fp_add_s(a: f32, b: f32, rm: u8) -> (u64, u8) { |
| 386 | if a.is_nan() || b.is_nan() { |
| 387 | return (canon_nan_s(), 0); |
| 388 | } |