1 /* { dg-do compile { target { powerpc*-*-* } } } */
2 /* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
3 /* { dg-require-effective-target powerpc_p8vector_ok } */
4 /* { dg-options "-mcpu=power8 -O3 -ftree-vectorize -fvect-cost-model" } */
5
6 #include <altivec.h>
7
8 typedef vector long long vll_sign;
9 typedef vector unsigned long long vll_uns;
10 typedef vector bool long long vll_bool;
11
12 typedef vector int vi_sign;
13 typedef vector unsigned int vi_uns;
14 typedef vector bool int vi_bool;
15
16 typedef vector short vs_sign;
17 typedef vector unsigned short vs_uns;
18 typedef vector bool short vs_bool;
19
20 typedef vector signed char vc_sign;
21 typedef vector unsigned char vc_uns;
22 typedef vector bool char vc_bool;
23
24
vi_pack_1(vll_sign a,vll_sign b)25 vi_sign vi_pack_1 (vll_sign a, vll_sign b)
26 {
27 return __builtin_altivec_vpkudum (a, b);
28 }
29
vi_pack_2(vll_sign a,vll_sign b)30 vi_sign vi_pack_2 (vll_sign a, vll_sign b)
31 {
32 return vec_pack (a, b);
33 }
34
vi_pack_3(vll_sign a,vll_sign b)35 vi_sign vi_pack_3 (vll_sign a, vll_sign b)
36 {
37 return vec_vpkudum (a, b);
38 }
39
vs_pack_1(vi_sign a,vi_sign b)40 vs_sign vs_pack_1 (vi_sign a, vi_sign b)
41 {
42 return __builtin_altivec_vpkuwum (a, b);
43 }
44
vs_pack_2(vi_sign a,vi_sign b)45 vs_sign vs_pack_2 (vi_sign a, vi_sign b)
46 {
47 return vec_pack (a, b);
48 }
49
vs_pack_3(vi_sign a,vi_sign b)50 vs_sign vs_pack_3 (vi_sign a, vi_sign b)
51 {
52 return vec_vpkuwum (a, b);
53 }
54
vc_pack_1(vs_sign a,vs_sign b)55 vc_sign vc_pack_1 (vs_sign a, vs_sign b)
56 {
57 return __builtin_altivec_vpkuhum (a, b);
58 }
59
vc_pack_2(vs_sign a,vs_sign b)60 vc_sign vc_pack_2 (vs_sign a, vs_sign b)
61 {
62 return vec_pack (a, b);
63 }
64
vc_pack_3(vs_sign a,vs_sign b)65 vc_sign vc_pack_3 (vs_sign a, vs_sign b)
66 {
67 return vec_vpkuhum (a, b);
68 }
69
vll_unpack_hi_1(vi_sign a)70 vll_sign vll_unpack_hi_1 (vi_sign a)
71 {
72 return __builtin_altivec_vupkhsw (a);
73 }
74
vll_unpack_hi_2(vi_sign a)75 vll_sign vll_unpack_hi_2 (vi_sign a)
76 {
77 return vec_unpackh (a);
78 }
79
vll_unpack_hi_3(vi_sign a)80 vll_sign vll_unpack_hi_3 (vi_sign a)
81 {
82 return __builtin_vec_vupkhsw (a);
83 }
84
vll_unpack_lo_1(vi_sign a)85 vll_sign vll_unpack_lo_1 (vi_sign a)
86 {
87 return vec_vupklsw (a);
88 }
89
vll_unpack_lo_2(vi_sign a)90 vll_sign vll_unpack_lo_2 (vi_sign a)
91 {
92 return vec_unpackl (a);
93 }
94
vll_unpack_lo_3(vi_sign a)95 vll_sign vll_unpack_lo_3 (vi_sign a)
96 {
97 return vec_vupklsw (a);
98 }
99
100 /* { dg-final { scan-assembler-times "vpkudum" 3 } } */
101 /* { dg-final { scan-assembler-times "vpkuwum" 3 } } */
102 /* { dg-final { scan-assembler-times "vpkuhum" 3 } } */
103 /* { dg-final { scan-assembler-times "vupklsw" 3 } } */
104 /* { dg-final { scan-assembler-times "vupkhsw" 3 } } */
105