1 /* { dg-do compile { target powerpc*-*-* } } */
2 /* { dg-require-effective-target powerpc_altivec_ok } */
3 /* { dg-options "-maltivec" } */
4 
5 /* Author: Ziemowit Laski  <zlaski@apple.com>  */
6 
7 /* This test case exercises intrinsic/argument combinations that,
8    while not in the Motorola AltiVec PIM, have nevertheless crept
9    into the AltiVec vernacular over the years.  */
10 
11 /* Tests requiring VSX support (vector long long and vector double) have
12    been moved over to vsx-13.c.  */
13 
14 #include <altivec.h>
15 
foo(void)16 void foo (void)
17 {
18   vector bool int boolVec1 = (vector bool int) vec_splat_u32(3);
19   vector bool short boolVec2 = (vector bool short) vec_splat_u16(3);
20   vector bool char boolVec3 = (vector bool char) vec_splat_u8(3);
21   vector signed char vsc1, vsc2, vscz;
22   vector unsigned char vuc1, vuc2, vucz;
23   vector signed short int vssi1, vssi2, vssiz;
24   vector signed int vsi1, vsi2, vsiz;
25   vector unsigned int vui1, vui2, vuiz;
26   vector unsigned short int vusi1, vusi2, vusiz;
27   vector pixel vp1, vp2, vpz;
28   vector float vf1, vf2, vfz;
29 
30   boolVec1 = vec_sld( boolVec1, boolVec1, 4 );
31   boolVec2 = vec_sld( boolVec2, boolVec2, 2 );
32   boolVec3 = vec_sld( boolVec3, boolVec3, 1 );
33 
34   vscz = vec_sld( vsc1, vsc2, 1 );
35   vucz = vec_sld( vuc1, vuc2, 1 );
36   vsiz = vec_sld( vsi1, vsi2, 1 );
37   vuiz = vec_sld( vui1, vui2, 1 );
38   vssiz = vec_sld( vssi1, vssi2, 1 );
39   vusiz = vec_sld( vusi1, vusi2, 1 );
40 
41   vfz = vec_sld( vf1, vf2, 1 );
42 
43   vpz = vec_sld( vp1, vp2, 1 );
44 
45   vucz = vec_srl(vuc1, vuc2);
46   vsiz = vec_srl(vsi1, vuc2);
47   vuiz = vec_srl(vui1, vuc2);
48   vpz = vec_srl(vp1, vuc2);
49   vssiz = vec_srl(vssi1, vuc2);
50   vusiz = vec_srl(vusi1, vuc2);
51 
52   vscz = vec_sro(vsc1, vsc2);
53   vscz = vec_sro(vsc1, vuc2);
54   vucz = vec_sro(vuc1, vsc2);
55   vucz = vec_sro(vuc1, vuc2);
56   vsiz = vec_sro(vsi1, vsc2);
57   vsiz = vec_sro(vsi1, vuc2);
58   vuiz = vec_sro(vui1, vsc2);
59   vuiz = vec_sro(vui1, vuc2);
60   vpz = vec_sro(vp1, vsc2);
61   vpz = vec_sro(vp1, vuc2);
62   vssiz = vec_sro(vssi1, vsc2);
63   vssiz = vec_sro(vssi1, vuc2);
64   vusiz = vec_sro(vusi1, vsc2);
65   vusiz = vec_sro(vusi1, vuc2);
66   vfz = vec_sro(vf1, vsc2);
67   vfz = vec_sro(vf1, vuc2);
68 }
69 
70 /* Expected results:
71    vec_sld          vsldoi
72    vec_srl          vsr
73    vec_sro          vsro  */
74 
75 /* { dg-final { scan-assembler-times "vsldoi" 11 } } */
76 /* { dg-final { scan-assembler-times "vsr " 6 } } */
77 /* { dg-final { scan-assembler-times "vsro" 16 } } */
78