| /* { dg-do run { target sse2_runtime } } */ |
| /* { dg-options "-O2 -msse2" } */ |
| |
| #include "pr88828-9a.c" |
| #include "pr88828-9b.c" |
| |
| extern void abort (); |
| |
| void |
| do_check (__v4sf y, float f[4], float z) |
| { |
| int i; |
| |
| for (i = 0; i < 4; i++) |
| if (i == 0) |
| { |
| if (y[i] != z) |
| abort (); |
| } |
| else |
| { |
| if (y[i] != f[i]) |
| abort (); |
| } |
| } |
| |
| int |
| main (void) |
| { |
| float f[4] = { -11, 2, 55553, -4 }; |
| float z = 11.4; |
| __m128 x = (__m128) (__v4sf) { f[0], f[1], f[2], f[3] }; |
| __m128 y; |
| int i; |
| |
| for (i = 0; i < 4; i++) |
| if (x[i] != f[i]) |
| abort (); |
| |
| y = foo1 (x); |
| do_check (y, f, z); |
| y = foo2 (x); |
| do_check (y, f, z); |
| |
| return 0; |
| } |