1 /* { dg-do compile { target { powerpc*-*-* } } } */
2 /* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
3 /* { dg-require-effective-target powerpc_p9vector_ok } */
4 /* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
5 /* { dg-options "-mcpu=power9 -O2" } */
6 
7 #include <altivec.h>
8 
9 vector signed char
count_trailing_zeros_v16qi_1s(vector signed char a)10 count_trailing_zeros_v16qi_1s (vector signed char a)
11 {
12   return vec_vctz (a);
13 }
14 
15 vector signed char
count_trailing_zeros_v16qi_2s(vector signed char a)16 count_trailing_zeros_v16qi_2s (vector signed char a)
17 {
18   return vec_vctzb (a);
19 }
20 
21 vector unsigned char
count_trailing_zeros_v16qi_1u(vector unsigned char a)22 count_trailing_zeros_v16qi_1u (vector unsigned char a)
23 {
24   return vec_vctz (a);
25 }
26 
27 vector unsigned char
count_trailing_zeros_v16qi_2u(vector unsigned char a)28 count_trailing_zeros_v16qi_2u (vector unsigned char a)
29 {
30   return vec_vctzb (a);
31 }
32 
33 vector short
count_trailing_zeros_v8hi_1s(vector short a)34 count_trailing_zeros_v8hi_1s (vector short a)
35 {
36   return vec_vctz (a);
37 }
38 
39 vector short
count_trailing_zeros_v8hi_2s(vector short a)40 count_trailing_zeros_v8hi_2s (vector short a)
41 {
42   return vec_vctzh (a);
43 }
44 
45 vector unsigned short
count_trailing_zeros_v8hi_1u(vector unsigned short a)46 count_trailing_zeros_v8hi_1u (vector unsigned short a)
47 {
48   return vec_vctz (a);
49 }
50 
51 vector unsigned short
count_trailing_zeros_v8hi_2u(vector unsigned short a)52 count_trailing_zeros_v8hi_2u (vector unsigned short a)
53 {
54   return vec_vctzh (a);
55 }
56 
57 vector int
count_trailing_zeros_v4si_1s(vector int a)58 count_trailing_zeros_v4si_1s (vector int a)
59 {
60   return vec_vctz (a);
61 }
62 
63 vector int
count_trailing_zeros_v4si_2s(vector int a)64 count_trailing_zeros_v4si_2s (vector int a)
65 {
66   return vec_vctzw (a);
67 }
68 
69 vector unsigned int
count_trailing_zeros_v4si_1u(vector unsigned int a)70 count_trailing_zeros_v4si_1u (vector unsigned int a)
71 {
72   return vec_vctz (a);
73 }
74 
75 vector unsigned int
count_trailing_zeros_v4si_2u(vector unsigned int a)76 count_trailing_zeros_v4si_2u (vector unsigned int a)
77 {
78   return vec_vctzw (a);
79 }
80 
81 vector long long
count_trailing_zeros_v2di_1s(vector long long a)82 count_trailing_zeros_v2di_1s (vector long long a)
83 {
84   return vec_vctz (a);
85 }
86 
87 vector long long
count_trailing_zeros_v2di_2s(vector long long a)88 count_trailing_zeros_v2di_2s (vector long long a)
89 {
90   return vec_vctzd (a);
91 }
92 
93 vector unsigned long long
count_trailing_zeros_v2di_1u(vector unsigned long long a)94 count_trailing_zeros_v2di_1u (vector unsigned long long a)
95 {
96   return vec_vctz (a);
97 }
98 
99 vector unsigned long long
count_trailing_zeros_v2di_2u(vector unsigned long long a)100 count_trailing_zeros_v2di_2u (vector unsigned long long a)
101 {
102   return vec_vctzd (a);
103 }
104 
105 /* { dg-final { scan-assembler "vctzb" } } */
106 /* { dg-final { scan-assembler "vctzd" } } */
107 /* { dg-final { scan-assembler "vctzh" } } */
108 /* { dg-final { scan-assembler "vctzw" } } */
109 /* { dg-final { scan-assembler-not "cnttzd" } } */
110 /* { dg-final { scan-assembler-not "cnttzw" } } */
111