/* { dg-do run } */ /* { dg-options "-O3 -msse2 -mno-avx" } */ /* { dg-require-effective-target sse2 } */ #ifndef CHECK_H #define CHECK_H "sse2-check.h" #endif #ifndef TEST #define TEST sse2_test #endif #include CHECK_H #define N 16 float f[N]; double d[N]; int n[N]; __attribute__((noinline)) void f1 (void) { int i; for (i = 0; i < N; i++) n[i] = d[i]; } __attribute__((noinline)) void f2 (void) { int i; for (i = 0; i < N; i++) f[i] = n[i]; } __attribute__((noinline)) void f3 (void) { int i; for (i = 0; i < N; i++) d[i] = f[i]; } __attribute__((noinline)) void f4 (void) { int i; for (i = 0; i < N; i++) n[i] = f[i]; } __attribute__((noinline)) void f5 (void) { int i; for (i = 0; i < N; i++) d[i] = n[i]; } __attribute__((noinline)) void f6 (void) { int i; for (i = 0; i < N; i++) f[i] = d[i]; } static void TEST () { int i; for (i = 0; i < N; i++) { asm (""); d[i] = i + 2.5; } f1 (); for (i = 0; i < N; i++) if (n[i] != i + 2) abort (); else n[i] = i + 7; f2 (); for (i = 0; i < N; i++) if (f[i] != i + 7) abort (); else f[i] = i - 2.25f; f3 (); for (i = 0; i < N; i++) if (d[i] != i - 2.25) abort (); else f[i] = i + 3.5; f4 (); for (i = 0; i < N; i++) if (n[i] != i + 3) abort (); else n[i] = i + 9; f5 (); for (i = 0; i < N; i++) if (d[i] != i + 9) abort (); else d[i] = i - 7.25; f6 (); for (i = 0; i < N; i++) if (f[i] != i - 7.25) abort (); }