| /* PR57245 */ |
| /* { dg-do run } */ |
| /* { dg-require-effective-target fenv } */ |
| /* { dg-require-effective-target hard_float } */ |
| /* { dg-additional-options "-frounding-math" } */ |
| |
| #include <fenv.h> |
| #include <stdlib.h> |
| |
| int |
| main () |
| { |
| #if __DBL_MANT_DIG__ == 53 && __FLT_MANT_DIG__ == 24 |
| #ifdef FE_UPWARD |
| fesetround (FE_UPWARD); |
| float f = 1.3; |
| if (f != 0x1.4ccccep+0f) |
| __builtin_abort (); |
| #endif |
| #ifdef FE_TONEAREST |
| fesetround (FE_TONEAREST); |
| /* Use different actual values so the bogus CSE we perform does not |
| break things. */ |
| f = 1.33; |
| if (f != 0x1.547ae2p+0f) |
| abort (); |
| #endif |
| #ifdef FE_DOWNWARD |
| fesetround (FE_DOWNWARD); |
| f = 1.333; |
| if (f != 0x1.553f7cp+0f) |
| abort (); |
| #endif |
| #ifdef FE_TOWARDZERO |
| fesetround (FE_TOWARDZERO); |
| f = 1.3333; |
| if (f != 0x1.555326p+0f) |
| abort (); |
| #endif |
| #endif |
| return 0; |
| } |