1 /* { dg-do run { target { powerpc*-*-* } } } */
2 /* { dg-skip-if "" { powerpc*-*-darwin* } } */
3 /* { dg-require-effective-target vsx_hw } */
4 /* { dg-options "-O3 -mdejagnu-cpu=power7" } */
6 /* PR 47755: Make sure compiler generates correct code for various
12 static int num_errors
;
13 #define FAIL_LL(A, B) \
14 (num_errors++, printf ("Fail (%i, %i)\n", (int)(A), (int)(B)))
15 #define FAIL_I(A, B, C, D) \
17 printf ("Fail (%i, %i, %i, %i)\n", (int)(A), (int)(B), (int)(C), (int)(D)))
20 extern void abort (void) __attribute__((__noreturn__
));
21 #define FAIL_LL(A, B) abort ()
22 #define FAIL_I(A, B, C, D) abort ()
25 static void test_ll (vector
long long, long long, long long) __attribute__((__noinline__
));
28 test_ll (vector
long long v
, long long a
, long long b
)
36 if (u
.ll
[0] != a
&& u
.ll
[1] != b
)
40 #define TEST_LL(A,B) test_ll ((vector long long){ (A), (B) }, (A), (B))
42 static void test_i (vector
int, int, int, int, int) __attribute__((__noinline__
));
45 test_i (vector
int v
, int a
, int b
, int c
, int d
)
53 if (u
.i
[0] != a
&& u
.i
[1] != b
&& u
.i
[2] != c
&& u
.i
[3] != d
)
57 #define TEST_I(A,B,C,D) \
58 test_i ((vector int){ (A), (B), (C), (D) }, (A), (B), (C), (D))
93 /* We could use VSPLTI instructions for these tests. */
94 TEST_LL (0x0101010101010101LL
, 0x0101010101010101LL
);
95 TEST_LL (0x0001000100010001LL
, 0x0001000100010001LL
);
96 TEST_LL (0x0000000100000001LL
, 0x0000000100000001LL
);
98 TEST_LL (0x0404040404040404LL
, 0x0404040404040404LL
);
99 TEST_LL (0x0004000400040004LL
, 0x0004000400040004LL
);
100 TEST_LL (0x0000000400000004LL
, 0x0000000400000004LL
);
102 TEST_LL (0xf8f8f8f8f8f8f8f8LL
, 0xf8f8f8f8f8f8f8f8LL
);
103 TEST_LL (0xfff8fff8fff8fff8LL
, 0xfff8fff8fff8fff8LL
);
104 TEST_LL (0xfffffff8fffffff8LL
, 0xfffffff8fffffff8LL
);
106 /* We could use VSPLTI instructions for these tests. */
107 TEST_I (-2, -2, -2, -2);
108 TEST_I (-1, -1, -1, -1);
109 TEST_I ( 0, 0, 0, 0);
110 TEST_I ( 1, 1, 1, 1);
111 TEST_I ( 2, 2, 2, 2);
113 TEST_I (0x01010101, 0x01010101, 0x01010101, 0x01010101);
114 TEST_I (0x00010001, 0x00010001, 0x00010001, 0x00010001);
116 TEST_I (0x02020202, 0x02020202, 0x02020202, 0x02020202);
117 TEST_I (0x00020002, 0x00020002, 0x00020002, 0x00020002);
119 TEST_I (0xf8f8f8f8, 0xf8f8f8f8, 0xf8f8f8f8, 0xf8f8f8f8);
120 TEST_I (0xfff8fff8, 0xfff8fff8, 0xfff8fff8, 0xfff8fff8);
122 /* non-easy constants. */
123 TEST_I (-2, -1, 0, 1);
124 TEST_I ( 1, 0, -1, -2);
126 TEST_I (-1, -1, 0, 0);
127 TEST_I ( 0, 0, -1, -1);
130 printf ("%d error%s\n", num_errors
, (num_errors
== 1) ? "" : "s");