Fix warning with -Wsign-compare -Wsystem-headers
[official-gcc.git] / gcc / testsuite / gcc.target / powerpc / swaps-p8-12.c
blob529d03e64c0cfb0eb4a24634eda943a349351a48
1 /* { dg-do compile { target { powerpc64le-*-* } } } */
2 /* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
3 /* { dg-options "-mcpu=power8 -O3" } */
4 /* { dg-final { scan-assembler "lxvd2x" } } */
5 /* { dg-final { scan-assembler "stxvd2x" } } */
6 /* { dg-final { scan-assembler-not "xxpermdi" } } */
8 #include "altivec.h"
9 void abort ();
11 #define N 4096
12 int ca[N] __attribute__((aligned(16)));
13 int cb[N] __attribute__((aligned(16)));
14 int cc[N] __attribute__((aligned(16)));
15 int cd[N] __attribute__((aligned(16)));
16 int hey;
18 __attribute__((noinline)) void foo ()
20 int i;
21 vector int va, vb, vc, vd, tmp;
22 vector unsigned int threes = vec_splat_u32(3);
23 for (i = 0; i < N; i+=4) {
24 vb = vec_vsx_ld (0, &cb[i]);
25 vc = vec_vsx_ld (0, &cc[i]);
26 vd = vec_vsx_ld (0, &cd[i]);
27 tmp = vec_add (vb, vc);
28 tmp = vec_sub (tmp, vd);
29 tmp = vec_sra (tmp, threes);
30 hey = tmp[3];
31 vec_vsx_st (tmp, 0, &ca[i]);
35 __attribute__((noinline)) void init ()
37 int i;
38 for (i = 0; i < N; ++i) {
39 cb[i] = 3 * i - 2048;
40 cc[i] = -5 * i + 93;
41 cd[i] = i + 14;
45 int main ()
47 int i;
48 init ();
49 foo ();
50 for (i = 0; i < N; ++i)
51 if (ca[i] != (-3 * i - 1969) >> 3)
52 abort ();
53 if (hey != ca[N-1])
54 abort ();
55 return 0;