1  /* { dg-do run } */
       2  /* { dg-options "-O2 -msse2 -mno-ssse3" } */
       3  /* { dg-require-effective-target sse2 } */
       4  
       5  #include "sse2-check.h"
       6  
       7  #include "pr105354-1.c"
       8  void
       9  sse2_test (void)
      10  {
      11    union128i_b a, b, res_ab, exp_ab;
      12    union128i_w c, d, res_cd, exp_cd;
      13  
      14    for (int i = 0; i != 16;i++)
      15      {
      16        a.a[i] = i;
      17        b.a[i] = i + 16;
      18        res_ab.a[i] = 0;
      19        exp_ab.a[i] = -1;
      20        if (i <= 8)
      21  	{
      22  	  c.a[i] = i;
      23  	  d.a[i] = i + 8;
      24  	  res_cd.a[i] = 0;
      25  	  exp_cd.a[i] = -1;
      26  	}
      27      }
      28  
      29    res_ab.x = (__m128i)foo ((v16qi)a.x, (v16qi)b.x);
      30    exp_ab.x = __extension__(__m128i) (v16qi) { 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
      31    if (check_union128i_b (exp_ab, res_ab.a))
      32      abort ();
      33  
      34    exp_ab.x = __extension__(__m128i) (v16qi) { 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 18, 19, 20, 21, 22 };
      35    res_ab.x = (__m128i)foo1 ((v16qi)a.x, (v16qi)b.x);
      36    if (check_union128i_b (exp_ab, res_ab.a))
      37      abort();
      38  
      39    exp_ab.x = __extension__(__m128i) (v16qi) { 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21 };
      40    res_ab.x = (__m128i)foo2 ((v16qi)a.x, (v16qi)b.x);
      41    if (check_union128i_b (exp_ab, res_ab.a))
      42      abort();
      43  
      44    exp_ab.x = __extension__(__m128i) (v16qi) { 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 17, 18, 19, 20, 21, 22 };
      45    res_ab.x = (__m128i)foo3 ((v16qi)a.x, (v16qi)b.x);
      46    if (check_union128i_b (exp_ab, res_ab.a))
      47      abort();
      48  
      49    res_ab.x = (__m128i)foo8 ((v16qi)a.x);
      50    exp_ab.x = __extension__(__m128i) (v16qi) { 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4 };
      51    if (check_union128i_b (exp_ab, res_ab.a))
      52      abort ();
      53  
      54    exp_ab.x = __extension__(__m128i) (v16qi) { 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2, 3, 4, 5, 6 };
      55    res_ab.x = (__m128i)foo9 ((v16qi)a.x);
      56    if (check_union128i_b (exp_ab, res_ab.a))
      57      abort();
      58  
      59    exp_ab.x = __extension__(__m128i) (v16qi) { 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 1, 2, 3, 4, 5 };
      60    res_ab.x = (__m128i)foo10 ((v16qi)a.x);
      61    if (check_union128i_b (exp_ab, res_ab.a))
      62      abort();
      63  
      64    exp_ab.x = __extension__(__m128i) (v16qi) { 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 1, 2, 3, 4, 5, 6 };
      65    res_ab.x = (__m128i)foo11 ((v16qi)a.x);
      66    if (check_union128i_b (exp_ab, res_ab.a))
      67      abort();
      68  
      69    res_cd.x = (__m128i)foo4 ((v8hi)c.x, (v8hi)d.x);
      70    exp_cd.x = __extension__(__m128i) (v8hi) { 5, 6, 7, 8, 9, 10, 11, 12 };
      71    if (check_union128i_w (exp_cd, res_cd.a))
      72      abort ();
      73  
      74    exp_cd.x = __extension__(__m128i) (v8hi) { 5, 6, 7, 9, 10, 11, 12, 13 };
      75    res_cd.x = (__m128i)foo5 ((v8hi)c.x, (v8hi)d.x);
      76    if (check_union128i_w (exp_cd, res_cd.a))
      77      abort();
      78  
      79    exp_cd.x = __extension__(__m128i) (v8hi) { 5, 6, 8, 9, 10, 11, 12, 13 };
      80    res_cd.x = (__m128i)foo6 ((v8hi)c.x, (v8hi)d.x);
      81    if (check_union128i_w (exp_cd, res_cd.a))
      82      abort();
      83  
      84    res_cd.x = (__m128i)foo7 ((v8hi)c.x, (v8hi)d.x);
      85    exp_cd.x = __extension__(__m128i) (v8hi) { 5, 6, 9, 10, 11, 12, 13, 14 };
      86    if (check_union128i_w (exp_cd, res_cd.a))
      87      abort ();
      88  
      89    exp_cd.x = __extension__(__m128i) (v8hi) { 5, 6, 7, 0, 1, 2, 3, 4 };
      90    res_cd.x = (__m128i)foo12 ((v8hi)c.x);
      91    if (check_union128i_w (exp_cd, res_cd.a))
      92      abort();
      93  
      94    exp_cd.x = __extension__(__m128i) (v8hi) { 5, 6, 7, 1, 2, 3, 4, 5 };
      95    res_cd.x = (__m128i)foo13 ((v8hi)c.x);
      96    if (check_union128i_w (exp_cd, res_cd.a))
      97      abort();
      98  
      99    exp_cd.x = __extension__(__m128i) (v8hi) { 5, 6, 0, 1, 2, 3, 4, 5 };
     100    res_cd.x = (__m128i)foo14 ((v8hi)c.x);
     101    if (check_union128i_w (exp_cd, res_cd.a))
     102      abort();
     103  
     104    exp_cd.x = __extension__(__m128i) (v8hi) { 5, 6, 1, 2, 3, 4, 5, 6 };
     105    res_cd.x = (__m128i)foo15 ((v8hi)c.x);
     106    if (check_union128i_w (exp_cd, res_cd.a))
     107      abort();
     108  
     109  }
     110