1  /* { dg-do run } */
       2  /* { dg-options "-mavx2 -O2" } */
       3  /* { dg-require-effective-target avx2 } */
       4  
       5  #include "avx2-check.h"
       6  
       7  static short
       8  int_to_short (int iVal)
       9  {
      10    short sVal;
      11  
      12    if (iVal < -32768)
      13      sVal = -32768;
      14    else if (iVal > 32767)
      15      sVal = 32767;
      16    else
      17      sVal = iVal;
      18  
      19    return sVal;
      20  }
      21  
      22  void static
      23  avx2_test (void)
      24  {
      25    union256i_d s1, s2;
      26    union256i_w u;
      27    short e[16];
      28    int i;
      29  
      30    s1.x = _mm256_set_epi32 (1, 2, 3, 4, 65000, 20, 30, 90);
      31  
      32    s2.x = _mm256_set_epi32 (88, 44, 33, 22, 11, 98, 76, -65000);
      33  
      34    u.x = _mm256_packs_epi32 (s1.x, s2.x);
      35  
      36    for (i = 0; i < 4; i++)
      37      {
      38        e[i] = int_to_short (s1.a[i]);
      39        e[i + 4] = int_to_short (s2.a[i]);
      40        e[i + 8] = int_to_short (s1.a[i + 4]);
      41        e[i + 12] = int_to_short (s2.a[i + 4]);
      42      }
      43  
      44    if (check_union256i_w (u, e))
      45      abort ();
      46  }