1 /* { dg-do run } */
2 /* { dg-options "-O2 -w" } */
3 
4 extern void abort (void);
5 
6 #if(__SIZEOF_INT__ >= 4)
7 # define TYPE      int
8 # define TYPED(a)  a
9 
10 #elif(__SIZEOF_INT__ > 2)
11 # define TYPE      long
12 # define TYPED(a)  a##L
13 
14 #else
15 # define TYPE      long long
16 # define TYPED(a)  a##LL
17 #endif
18 
19 
20 typedef TYPE __m128i __attribute__ ((__vector_size__ (16)));
21 
22 __m128i
foo(void)23 foo (void)
24 {
25   __m128i x = { 0x11111111, 0x22222222, 0x44444444 };
26   return x;
27 }
28 
29 __m128i
bar(void)30 bar (void)
31 {
32   __m128i x = { 0x11111111, 0x22222222, 0x44444444 };
33   return ~x;
34 }
35 
36 int
main(void)37 main (void)
38 {
39   union { __m128i v; TYPE i[sizeof (__m128i) / sizeof (TYPE)]; } u, v;
40   int i;
41 
42   u.v = foo ();
43   v.v = bar ();
44   for (i = 0; i < sizeof (u.i) / sizeof (u.i[0]); i++)
45     {
46       if (u.i[i] != ~v.i[i])
47 	abort ();
48 
49       if (i < 3)
50 	{
51 	  if (u.i[i] != (TYPED (0x11111111) << i))
52 	    abort ();
53 	}
54       else if (u.i[i])
55 	abort ();
56     }
57   return 0;
58 }
59