(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
avx512f-scatter-2.c
       1  /* { dg-do run } */
       2  /* { dg-require-effective-target avx512f } */
       3  /* { dg-options "-O3 -mavx512f" } */
       4  
       5  #define AVX512F
       6  
       7  #include "avx512f-check.h"
       8  
       9  #define N 1024
      10  float vf1[N], vf2[2*N+16];
      11  double vd1[N], vd2[2*N+16];
      12  int k[N];
      13  long l[N];
      14  short n[2*N+16];
      15  
      16  __attribute__((noinline, noclone)) void
      17  f1 (void)
      18  {
      19    int i;
      20    for (i = 0; i < N; i++)
      21      vf2[k[i]] = vf1[i];
      22  }
      23  
      24  __attribute__((noinline, noclone)) void
      25  f2 (void)
      26  {
      27    int i;
      28    for (i = 0; i < N; i++)
      29      n[k[i]] = (int) vf1[i];
      30  }
      31  
      32  __attribute__((noinline, noclone)) void
      33  f3 (int x)
      34  {
      35    int i;
      36    for (i = 0; i < N; i++)
      37      vf2[k[i] + x] = vf1[i];
      38  }
      39  
      40  __attribute__((noinline, noclone)) void
      41  f4 (int x)
      42  {
      43    int i;
      44    for (i = 0; i < N; i++)
      45      n[k[i] + x] = (int) vf1[i];
      46  }
      47  
      48  __attribute__((noinline, noclone)) void
      49  f5 (void)
      50  {
      51    int i;
      52    for (i = 0; i < N; i++)
      53      vd2[k[i]] = vd1[i];
      54  }
      55  
      56  __attribute__((noinline, noclone)) void
      57  f6 (void)
      58  {
      59    int i;
      60    for (i = 0; i < N; i++)
      61      n[k[i]] = (int) vd1[i];
      62  }
      63  
      64  __attribute__((noinline, noclone)) void
      65  f7 (int x)
      66  {
      67    int i;
      68    for (i = 0; i < N; i++)
      69      vd2[k[i] + x] = vd1[i];
      70  }
      71  
      72  __attribute__((noinline, noclone)) void
      73  f8 (int x)
      74  {
      75    int i;
      76    for (i = 0; i < N; i++)
      77      n[k[i] + x] = vd1[i];
      78  }
      79  
      80  __attribute__((noinline, noclone)) void
      81  f9 (void)
      82  {
      83    int i;
      84    for (i = 0; i < N; i++)
      85      vf2[l[i]] = vf1[i];
      86  }
      87  
      88  __attribute__((noinline, noclone)) void
      89  f10 (void)
      90  {
      91    int i;
      92    for (i = 0; i < N; i++)
      93      n[l[i]] = (int) vf1[i];
      94  }
      95  
      96  __attribute__((noinline, noclone)) void
      97  f11 (long x)
      98  {
      99    int i;
     100    for (i = 0; i < N; i++)
     101      vf2[l[i] + x] = vf1[i];
     102  }
     103  
     104  __attribute__((noinline, noclone)) void
     105  f12 (long x)
     106  {
     107    int i;
     108    for (i = 0; i < N; i++)
     109      n[l[i] + x] = (int) vf1[i];
     110  }
     111  
     112  __attribute__((noinline, noclone)) void
     113  f13 (void)
     114  {
     115    int i;
     116    for (i = 0; i < N; i++)
     117      vd2[l[i]] = vd1[i];
     118  }
     119  
     120  __attribute__((noinline, noclone)) void
     121  f14 (void)
     122  {
     123    int i;
     124    for (i = 0; i < N; i++)
     125      n[l[i]] = (int) vd1[i];
     126  }
     127  
     128  __attribute__((noinline, noclone)) void
     129  f15 (long x)
     130  {
     131    int i;
     132    for (i = 0; i < N; i++)
     133      vd2[l[i] + x] = vd1[i];
     134  }
     135  
     136  __attribute__((noinline, noclone)) void
     137  f16 (long x)
     138  {
     139    int i;
     140    for (i = 0; i < N; i++)
     141      n[l[i] + x] = (int) vd1[i];
     142  }
     143  
     144  static void
     145  avx512f_test (void)
     146  {
     147    int i;
     148  
     149    for (i = 0; i < N; i++)
     150      {
     151        asm ("");
     152        vf1[i] = 17.0f + i;
     153        vd1[i] = 19.0 + i;
     154      }
     155    for (i = 0; i < N; i++)
     156      {
     157        asm ("");
     158        k[i] = (i % 2) ? (N / 2 + i) : (N / 2 - i / 2);
     159        l[i] = 2 * i + i % 2;
     160      }
     161  
     162    f1 ();
     163    f2 ();
     164    for (i = 0; i < N; i++)
     165      if (vf2[(i % 2) ? (N / 2 + i) : (N / 2 - i / 2)] != i + 17
     166  	|| n[(i % 2) ? (N / 2 + i) : (N / 2 - i / 2)] != i + 17)
     167        abort ();
     168  
     169    f3 (12);
     170    f4 (14);
     171    for (i = 0; i < N; i++)
     172      if (vf2[((i % 2) ? (N / 2 + i) : (N / 2 - i / 2)) + 12] != i + 17
     173  	|| n[((i % 2) ? (N / 2 + i) : (N / 2 - i / 2)) + 14] != i + 17)
     174        abort ();
     175  
     176    f5 ();
     177    f6 ();
     178    for (i = 0; i < N; i++)
     179      if (vd2[(i % 2) ? (N / 2 + i) : (N / 2 - i / 2)] != i + 19
     180  	|| n[(i % 2) ? (N / 2 + i) : (N / 2 - i / 2)] != i + 19)
     181        abort ();
     182  
     183    f7 (7);
     184    f8 (9);
     185    for (i = 0; i < N; i++)
     186      if (vd2[((i % 2) ? (N / 2 + i) : (N / 2 - i / 2)) + 7] != i + 19
     187  	|| n[((i % 2) ? (N / 2 + i) : (N / 2 - i / 2)) + 9] != i + 19)
     188        abort ();
     189  
     190    f9 ();
     191    f10 ();
     192    for (i = 0; i < N; i++)
     193      if (vf2[2 * i + i % 2] != i + 17
     194  	|| n[2 * i + i % 2] != i + 17)
     195        abort ();
     196  
     197    f11 (2);
     198    f12 (4);
     199    for (i = 0; i < N; i++)
     200      if (vf2[2 * i + i % 2 + 2] != i + 17
     201  	|| n[2 * i + i % 2 + 4] != i + 17)
     202        abort ();
     203  
     204    f13 ();
     205    f14 ();
     206    for (i = 0; i < N; i++)
     207      if (vd2[2 * i + i % 2] != i + 19
     208  	|| n[2 * i + i % 2] != i + 19)
     209        abort ();
     210  
     211    f15 (13);
     212    f16 (15);
     213    for (i = 0; i < N; i++)
     214      if (vd2[2 * i + i % 2 + 13] != i + 19
     215  	|| n[2 * i + i % 2 + 15] != i + 19)
     216        abort ();
     217  }