1/* { dg-do run } */ 2/* { dg-require-effective-target ultrasparc_hw } */ 3/* { dg-options "-O2 -mcpu=ultrasparc -mvis" } */ 4 5extern void abort (void); 6extern void exit (int); 7 8int l; 9 10int baz (double x) 11{ 12 return l == 0; 13} 14 15double bar (double x) 16{ 17 return 1.0; 18} 19 20double foo (double x) 21{ 22 if (l == -1 || baz (x)) return x; 23 if (x < 0.0) 24 return bar (x); 25 else 26 return 0.0; 27} 28 29union { 30 double d; 31 long long l; 32} x = { l: 0x7ff8000000000000LL }, y; 33 34int main () 35{ 36 unsigned int fsr = 0; 37 __asm __volatile ("ld %0, %%fsr" : : "m" (fsr)); 38 y.d = foo (x.d); 39 __asm __volatile ("st %%fsr, %0" : "=m" (fsr)); 40 if (x.l != y.l || (fsr & 0x3ff)) 41 abort (); 42 exit (0); 43} 44