blob: 4302c26647888cf4a8ef6e5b42e5e0c318e3b284 [file] [log] [blame]
/* { dg-do run { target sse2_runtime } } */
/* { dg-options "-O2 -msse2 -fexcess-precision=standard" } */
#include "pr88828-7a.c"
#include "pr88828-7b.c"
extern void abort ();
float
bar (float x, float y)
{
return x / y - y * x;
}
void
do_check (__v4sf x, float f1[4], float f2[4])
{
int i;
for (i = 0; i < 4; i++)
if (i == 0)
{
if (x[i] != bar (f1[i], f2[i]))
abort ();
}
else
{
if (x[i] != f1[i])
abort ();
}
}
int
main (void)
{
float f1[4] = { -11, 2, 55553, -4 };
float f2[4] = { 111, 3.3, -55.553, 4.8 };
__v4sf x = { f1[0], f1[1], f1[2], f1[3] };
__v4sf y = { f2[0], f2[1], f2[2], f2[3] };
__v4sf z;
int i;
for (i = 0; i < 4; i++)
if (x[i] != f1[i] || y[i] != f2[i] )
abort ();
z = foo1 (x, y);
do_check (z, f1, f2);
x = foo2 (x, y);
do_check (z, f1, f2);
return 0;
}