/* { 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; }