blob: 2587bfedd538f30a018cf827ea57cd583b2fa084 [file] [log] [blame]
/* { dg-do run } */
/* { dg-additional-options "-O3 --save-temps" } */
extern void abort ();
#define N 8
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, float *f)
{
i[0] = __builtin_signbit (f[0]);
i[1] = __builtin_signbit (f[1]);
}
/* { dg-final { scan-assembler-not {-2147483648} } } */
/* { dg-final { scan-assembler {\tushr\tv[0-9]+.2s, v[0-9]+.2s, 31} } } */
int
main ()
{
int i;
foo (out, in);
foo (out + 2, in + 2);
foo (out + 4, in + 4);
foo (out + 6, in + 6);
for (i = 0; i < N; i++)
{
if (in[i] >= 0.0 && out[i])
abort ();
if (in[i] < 0.0 && !out[i])
abort ();
}
return 0;
}