| /* { dg-do run } */ |
| /* { dg-additional-options "-O3 --save-temps" } */ |
| |
| extern void abort (); |
| |
| #define N 1024 |
| float in[N] = {1.0, -1.0, -2.0, 3.0, -5.0, -8.0, 13.0, 21.0}; |
| int out[N]; |
| |
| void |
| foo () |
| { |
| int i; |
| for (i = 0; i < N; i++) |
| out[i] = __builtin_signbit (in[i]); |
| } |
| |
| /* { dg-final { scan-assembler-not {-2147483648} } } */ |
| /* { dg-final { scan-assembler {\tushr\tv[0-9]+.4s, v[0-9]+.4s, 31} } } */ |
| |
| int |
| main () |
| { |
| int i; |
| |
| foo (); |
| |
| for (i = 0; i < N; i++) |
| { |
| if (in[i] >= 0.0 && out[i]) |
| abort (); |
| if (in[i] < 0.0 && !out[i]) |
| abort (); |
| } |
| |
| return 0; |
| } |
| |