1 /* { dg-do run { target powerpc*-*-* } } */
2 /* { dg-xfail-if "" { "powerpc-*-eabispe*" "powerpc-ibm-aix*" } { "*" } { "" } } */
3 /* { dg-options "-maltivec -O2" } */
6 #include "altivec_check.h"
8 int printf(const char * , ...);
11 void foo(char *bS
, char *bS_edge
, int field_MBAFF
, int top
){
12 char intra
[16] __attribute__ ((aligned(16)));
13 signed short mv_const
[8] __attribute__((aligned(16)));
15 vector
signed short v_three
, v_ref_mask00
, v_ref_mask01
, v_vec_maskv
, v_vec_maskh
;
16 vector
unsigned char v_permv
, v_permh
, v_bS
, v_bSh
, v_bSv
, v_cbp_maskv
, v_cbp_maskvn
, v_cbp_maskh
, v_cbp_maskhn
, v_intra_maskh
, v_intra_maskv
, v_intra_maskhn
, v_intra_maskvn
;
17 vector
unsigned char tmp7
, tmp8
, tmp9
, tmp10
, v_c1
, v_cbp1
, v_cbp2
, v_pocl
, v_poch
;
18 vector
signed short v0
, v1
, v2
, v3
, v4
, v5
, v6
, v7
, v8
, v9
, v10
, v11
, tmp0
, tmp1
, tmp2
, tmp3
, tmp4
, tmp5
, tmp6
;
19 vector
signed short idx0
;
20 vector
signed short tmp00
, tmp01
, tmp02
, tmp03
;
21 vector
unsigned char v_zero
= (vector
unsigned char) {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p'};
22 v_three
= (vector
signed short) vec_ld (0, (vector
signed short *) mv_const
);
24 vector
unsigned char v_coef_mask
= vec_ld(0, (vector
unsigned char *)mv_const
);
25 vector
unsigned char v_coef_mask_hi
= vec_splat(v_coef_mask
, 0);
26 vector
unsigned char v_coef_mask_lo
= vec_splat(v_coef_mask
, 1);
27 v_coef_mask
= vec_sld(v_coef_mask_hi
, v_coef_mask_lo
, 8);
28 vector
unsigned char v_bit_mask
= vec_sub(vec_splat_u8(7), vec_lvsl(0, (unsigned char *)0));
29 v_bit_mask
= vec_sld(vec_sld(v_bit_mask
, v_bit_mask
, 8), v_bit_mask
, 8);
30 v_bit_mask
= vec_sl(vec_splat_u8(1), v_bit_mask
);
31 tmp5
= (vector
signed short) vec_and(v_coef_mask
, v_bit_mask
);
34 tmp8
= vec_ld (0, (vector
unsigned char *) intra
);
35 tmp9
= vec_ld (0, (vector
unsigned char *) mv_const
);
36 tmp10
= vec_ld (0, (vector
unsigned char *) mv_const
);
37 v_permv
= vec_ld (0, (vector
unsigned char *) mv_const
);
38 v_permh
= vec_ld (0, (vector
unsigned char *) mv_const
);
39 tmp6
= vec_ld (0, (vector
signed short *) mv_const
);
41 tmp8
= vec_splat((vector
unsigned char) tmp8
, 0);
42 tmp9
= vec_splat((vector
unsigned char) tmp9
, 12);
43 tmp10
= vec_splat((vector
unsigned char) tmp10
, 12);
44 tmp9
= vec_sld ((vector
unsigned char) tmp9
,(vector
unsigned char) tmp8
, 12);
45 tmp10
= vec_sld ((vector
unsigned char) tmp10
, (vector
unsigned char) tmp8
, 12);
46 v_intra_maskv
= vec_or (tmp9
, tmp8
);
47 v_intra_maskh
= vec_or (tmp10
, tmp8
);
48 v_intra_maskv
= (vector
unsigned char) vec_cmpgt ((vector
unsigned char) v_intra_maskv
, (vector
unsigned char) v_zero
);
49 v_intra_maskh
= (vector
unsigned char) vec_cmpgt ((vector
unsigned char) v_intra_maskh
, (vector
unsigned char) v_zero
);
51 tmp9
= vec_lvsl (4 + (top
<<2), (unsigned char *) 0x0);
52 v_cbp1
= vec_perm ((vector
unsigned char) tmp6
, (vector
unsigned char) tmp6
, tmp9
);
53 v_cbp2
= (vector
unsigned char) vec_perm ((vector
unsigned char) tmp5
, (vector
unsigned char) tmp5
, (vector
unsigned char) v_permv
);
54 v_cbp1
= (vector
unsigned char) vec_sld ((vector
unsigned char) v_cbp1
,(vector
unsigned char) v_cbp2
, 12);
55 v_cbp_maskv
= vec_or (v_cbp1
, v_cbp2
);
57 tmp9
= vec_lvsl (12 + (top
<<2), (unsigned char *) 0x0);
58 v_cbp1
= vec_perm ((vector
unsigned char) tmp6
, (vector
unsigned char) tmp6
, tmp9
);
59 v_cbp2
= (vector
unsigned char) vec_perm ((vector
unsigned char) tmp5
, (vector
unsigned char) tmp5
, (vector
unsigned char) v_permh
);
60 v_cbp1
= (vector
unsigned char) vec_sld ((vector
unsigned char) v_cbp1
,(vector
unsigned char) v_cbp2
, 12);
61 v_cbp_maskh
= vec_or (v_cbp1
, v_cbp2
);
63 v_cbp_maskv
= (vector
unsigned char) vec_cmpgt ((vector
unsigned char) v_cbp_maskv
, (vector
unsigned char) v_zero
);
64 v_cbp_maskh
= (vector
unsigned char) vec_cmpgt ((vector
unsigned char) v_cbp_maskh
, (vector
unsigned char) v_zero
);
80 idx0
= vec_ld (0, (signed short *) intra
);
82 v_c1
= (vector
unsigned char) {'1','2','3','4','5','6','7','8','1','2','3','4','5','6','7','8'};
85 v0
= (vector
signed short) vec_and ((vector
unsigned char) idx0
, v_c1
);
86 idx0
= (vector
signed short) vec_sra ((vector
unsigned char) idx0
, v_c1
);
88 v1
= vec_sld (v0
, v0
, 15);
89 v1
= (vector
signed short) vec_pack (v1
, v0
);
91 v2
= vec_sld (v1
, v1
, 2);
92 v3
= vec_sld (v1
, v1
, 10);
94 v4
= (vector
signed short) vec_cmpeq ((vector
signed char) v1
, (vector
signed char) v2
);
95 v5
= (vector
signed short) vec_cmpeq ((vector
signed char) v1
, (vector
signed char) v3
);
96 v6
= (vector
signed short) vec_cmpeq ((vector
signed char) v2
, (vector
signed char) v3
);
99 v4
= v5
= v6
= vec_nor (v_zero
, v_zero
);
102 tmp1
= (vector
signed short) vec_sl ((vector
unsigned char) idx0
, v_c1
);
103 v_c1
= vec_mergeh ((vector
unsigned char) v_zero
, v_c1
);
104 tmp1
= (vector
signed short) vec_add (tmp1
, (vector
signed short) v_c1
);
106 v_pocl
= vec_ld (0, (vector
unsigned char *) mv_const
);
107 v_poch
= vec_ld (0, (vector
unsigned char *) mv_const
);
108 tmp2
= (vector
signed short) vec_perm (v_pocl
, v_poch
, (vector
unsigned char) tmp1
);
110 v_pocl
= vec_ld (0, (vector
unsigned char *) mv_const
);
111 v_poch
= vec_ld (16, (vector
unsigned char *) mv_const
);
112 tmp1
= (vector
signed short) vec_perm (v_pocl
, v_poch
, (vector
unsigned char) tmp1
);
113 tmp1
= vec_sel (tmp1
, tmp2
, (vector
unsigned short) {0xffff,0xffff,0,0,0,0,0,0});
115 tmp3
= (vector
signed short) vec_splat ((vector
unsigned char) idx0
, 12);
116 v_c1
= (vector
unsigned char) vec_nor (v_zero
, v_zero
);
117 tmp0
= (vector
signed short) vec_cmpeq ((vector
signed char) idx0
, (vector
signed char) v_c1
);
118 tmp1
= vec_sel (tmp1
, (vector
signed short) tmp3
, (vector
unsigned short) tmp0
);
120 tmp2
= vec_sld (tmp1
, tmp1
, 15);
121 tmp1
= (vector
signed short) vec_pack (tmp2
, tmp1
);
123 tmp2
= vec_sld (tmp1
, tmp1
, 2);
124 tmp3
= vec_sld (tmp1
, tmp1
, 10);
126 tmp0
= (vector
signed short) vec_cmpeq ((vector
signed char) tmp1
, (vector
signed char) tmp2
);
127 tmp4
= (vector
signed short) vec_cmpeq ((vector
signed char) tmp1
, (vector
signed char) tmp3
);
128 tmp1
= (vector
signed short) vec_cmpeq ((vector
signed char) tmp2
, (vector
signed char) tmp3
);
129 tmp0
= vec_and (tmp0
, v4
);
130 tmp4
= vec_and (tmp4
, v5
);
131 tmp1
= vec_and (tmp1
, v6
);
132 tmp2
= vec_sld ((vector
signed short) tmp0
, (vector
signed short) tmp0
, 8);
133 tmp3
= vec_sld ((vector
signed short) tmp4
, (vector
signed short) tmp4
, 8);
134 tmp5
= vec_sld ((vector
signed short) tmp1
, (vector
signed short) tmp1
, 8);
135 tmp0
= vec_and (tmp0
, tmp2
);
136 tmp4
= vec_and (tmp4
, tmp3
);
137 tmp1
= vec_and (tmp1
, tmp5
);
138 v_ref_mask00
= vec_mergeh ((vector
signed short) tmp0
, (vector
signed short) v_c1
);
139 v_ref_mask01
= vec_mergeh ((vector
signed short) tmp4
, (vector
signed short) tmp1
);
140 v_ref_mask00
= (vector
signed short) vec_mergeh ((vector
unsigned char) v_ref_mask00
, (vector
unsigned char) v_ref_mask00
);
141 v_ref_mask01
= (vector
signed short) vec_mergeh ((vector
unsigned char) v_ref_mask01
, (vector
unsigned char) v_ref_mask01
);
143 v0
= vec_ld (0, (vector
signed short *) mv_const
);
144 v1
= vec_ld (16, (vector
signed short *) mv_const
);
145 v4
= vec_ld (64, (vector
signed short *) mv_const
);
146 v5
= vec_ld (80, (vector
signed short *) mv_const
);
147 v8
= vec_ld (0, (vector
signed short *) mv_const
);
148 v9
= vec_ld (16, (vector
signed short *) mv_const
);
150 tmp0
= (vector
signed short) vec_perm ((vector
unsigned char) v8
,
151 (vector
unsigned char) v8
, (vector
unsigned char) {0,1,2,3,8,9,10,11,4,5,6,7,12,13,14,15});
152 tmp1
= (vector
signed short) vec_mergeh ((vector
signed int) v0
, (vector
signed int) v1
);
153 tmp2
= vec_sld (tmp1
, tmp1
, 8);
154 tmp3
= vec_sub (vec_max (tmp0
, tmp1
), vec_min (tmp0
, tmp1
));
155 tmp4
= vec_sub (vec_max (tmp0
, tmp2
), vec_min (tmp0
, tmp2
));
156 tmp3
= (vector
signed short) vec_cmpgt (tmp3
, v_three
);
157 tmp4
= (vector
signed short) vec_cmpgt (tmp4
, v_three
);
158 tmp5
= vec_sld (tmp3
, tmp3
, 14);
159 tmp6
= vec_sld (tmp4
, tmp4
, 14);
160 tmp3
= vec_or (tmp3
, tmp5
);
161 tmp4
= vec_or (tmp4
, tmp6
);
162 tmp0
= (vector
signed short) vec_perm ((vector
unsigned char) v9
, (vector
unsigned char) v9
,
163 (vector
unsigned char) {0,1,2,3,8,9,10,11,4,5,6,7,12,13,14,15});
164 tmp1
= (vector
signed short) vec_mergeh ((vector
signed int) v4
, (vector
signed int) v5
);
165 tmp2
= vec_sld (tmp1
, tmp1
, 8);
166 tmp5
= vec_sub (vec_max (tmp0
, tmp1
), vec_min (tmp0
, tmp1
));
167 tmp6
= vec_sub (vec_max (tmp0
, tmp2
), vec_min (tmp0
, tmp2
));
168 tmp5
= (vector
signed short) vec_cmpgt (tmp5
, v_three
);
169 tmp6
= (vector
signed short) vec_cmpgt (tmp6
, v_three
);
170 tmp0
= vec_sld (tmp5
, tmp5
, 14);
171 tmp1
= vec_sld (tmp6
, tmp6
, 14);
172 tmp5
= vec_or (tmp0
, tmp5
);
173 tmp6
= vec_or (tmp1
, tmp6
);
175 tmp3
= (vector
signed short) vec_pack ((vector
unsigned int) tmp3
, (vector
unsigned int) tmp5
);
176 tmp4
= (vector
signed short) vec_pack ((vector
unsigned int) tmp4
, (vector
unsigned int) tmp6
);
177 tmp5
= vec_sld (tmp3
, tmp3
, 12);
178 tmp6
= vec_sld (tmp4
, tmp4
, 12);
179 tmp3
= vec_or (tmp3
, tmp5
);
180 tmp4
= vec_or (tmp4
, tmp6
);
181 tmp00
= (vector
signed short) vec_pack ((vector
unsigned short) tmp3
, (vector
unsigned short) tmp4
);
183 tmp0
= (vector
signed short) vec_mergeh ((vector
signed int) v0
, (vector
signed int) v1
);
184 tmp1
= (vector
signed short) vec_mergel ((vector
signed int) v0
, (vector
signed int) v1
);
185 tmp2
= vec_sld (tmp1
, tmp1
, 8);
186 tmp3
= vec_sub (vec_max (tmp0
, tmp1
), vec_min (tmp0
, tmp1
));
187 tmp4
= vec_sub (vec_max (tmp0
, tmp2
), vec_min (tmp0
, tmp2
));
188 tmp3
= (vector
signed short) vec_cmpgt (tmp3
, v_three
);
189 tmp4
= (vector
signed short) vec_cmpgt (tmp4
, v_three
);
190 tmp5
= vec_sld (tmp3
, tmp3
, 14);
191 tmp6
= vec_sld (tmp4
, tmp4
, 14);
192 tmp3
= vec_or (tmp3
, tmp5
);
193 tmp4
= vec_or (tmp4
, tmp6
);
195 tmp0
= (vector
signed short) vec_mergeh ((vector
signed int) v4
, (vector
signed int) v5
);
196 tmp1
= (vector
signed short) vec_mergel ((vector
signed int) v4
, (vector
signed int) v5
);
197 tmp2
= vec_sld (tmp1
, tmp1
, 8);
198 tmp5
= vec_sub (vec_max (tmp0
, tmp1
), vec_min (tmp0
, tmp1
));
199 tmp6
= vec_sub (vec_max (tmp0
, tmp2
), vec_min (tmp0
, tmp2
));
200 tmp5
= (vector
signed short) vec_cmpgt (tmp5
, v_three
);
201 tmp6
= (vector
signed short) vec_cmpgt (tmp6
, v_three
);
202 tmp0
= vec_sld (tmp5
, tmp5
, 14);
203 tmp1
= vec_sld (tmp6
, tmp6
, 14);
204 tmp5
= vec_or (tmp0
, tmp5
);
205 tmp6
= vec_or (tmp1
, tmp6
);
207 tmp3
= (vector
signed short) vec_pack ((vector
unsigned int) tmp3
, (vector
unsigned int) tmp5
);
208 tmp4
= (vector
signed short) vec_pack ((vector
unsigned int) tmp4
, (vector
unsigned int) tmp6
);
209 tmp5
= vec_sld (tmp3
, tmp3
, 12);
210 tmp6
= vec_sld (tmp4
, tmp4
, 12);
211 tmp3
= vec_or (tmp3
, tmp5
);
212 tmp4
= vec_or (tmp4
, tmp6
);
213 tmp01
= (vector
signed short) vec_pack ((vector
unsigned short) tmp3
, (vector
unsigned short) tmp4
);
215 v2
= vec_ld (32, (vector
signed short *) mv_const
);
216 v3
= vec_ld (48, (vector
signed short *) mv_const
);
217 v6
= vec_ld (96, (vector
signed short *) mv_const
);
218 v7
= vec_ld (112,(vector
signed short *) mv_const
);
220 tmp0
= (vector
signed short) vec_mergel ((vector
signed int) v0
, (vector
signed int) v1
);
221 tmp1
= (vector
signed short) vec_mergeh ((vector
signed int) v2
, (vector
signed int) v3
);
222 tmp2
= vec_sld (tmp1
, tmp1
, 8);
223 tmp3
= vec_sub (vec_max (tmp0
, tmp1
), vec_min (tmp0
, tmp1
));
224 tmp4
= vec_sub (vec_max (tmp0
, tmp2
), vec_min (tmp0
, tmp2
));
225 tmp3
= (vector
signed short) vec_cmpgt (tmp3
, v_three
);
226 tmp4
= (vector
signed short) vec_cmpgt (tmp4
, v_three
);
227 tmp5
= vec_sld (tmp3
, tmp3
, 14);
228 tmp6
= vec_sld (tmp4
, tmp4
, 14);
229 tmp3
= vec_or (tmp3
, tmp5
);
230 tmp4
= vec_or (tmp4
, tmp6
);
232 tmp0
= (vector
signed short) vec_mergel ((vector
signed int) v4
, (vector
signed int) v5
);
233 tmp1
= (vector
signed short) vec_mergeh ((vector
signed int) v6
, (vector
signed int) v7
);
234 tmp2
= vec_sld (tmp1
, tmp1
, 8);
235 tmp5
= vec_sub (vec_max (tmp0
, tmp1
), vec_min (tmp0
, tmp1
));
236 tmp6
= vec_sub (vec_max (tmp0
, tmp2
), vec_min (tmp0
, tmp2
));
237 tmp5
= (vector
signed short) vec_cmpgt (tmp5
, v_three
);
238 tmp6
= (vector
signed short) vec_cmpgt (tmp6
, v_three
);
239 tmp0
= vec_sld (tmp5
, tmp5
, 14);
240 tmp1
= vec_sld (tmp6
, tmp6
, 14);
241 tmp5
= vec_or (tmp0
, tmp5
);
242 tmp6
= vec_or (tmp1
, tmp6
);
244 tmp3
= (vector
signed short) vec_pack ((vector
unsigned int) tmp3
, (vector
unsigned int) tmp5
);
245 tmp4
= (vector
signed short) vec_pack ((vector
unsigned int) tmp4
, (vector
unsigned int) tmp6
);
246 tmp5
= vec_sld (tmp3
, tmp3
, 12);
247 tmp6
= vec_sld (tmp4
, tmp4
, 12);
248 tmp3
= vec_or (tmp3
, tmp5
);
249 tmp4
= vec_or (tmp4
, tmp6
);
250 tmp02
= (vector
signed short) vec_pack ((vector
unsigned short) tmp3
, (vector
unsigned short) tmp4
);
252 tmp0
= (vector
signed short) vec_mergeh ((vector
signed int) v2
, (vector
signed int) v3
);
253 tmp1
= (vector
signed short) vec_mergel ((vector
signed int) v2
, (vector
signed int) v3
);
254 tmp2
= vec_sld (tmp1
, tmp1
, 8);
255 tmp3
= vec_sub (vec_max (tmp0
, tmp1
), vec_min (tmp0
, tmp1
));
256 tmp4
= vec_sub (vec_max (tmp0
, tmp2
), vec_min (tmp0
, tmp2
));
257 tmp3
= (vector
signed short) vec_cmpgt (tmp3
, v_three
);
258 tmp4
= (vector
signed short) vec_cmpgt (tmp4
, v_three
);
259 tmp5
= vec_sld (tmp3
, tmp3
, 14);
260 tmp6
= vec_sld (tmp4
, tmp4
, 14);
261 tmp3
= vec_or (tmp3
, tmp5
);
262 tmp4
= vec_or (tmp4
, tmp6
);
264 tmp0
= (vector
signed short) vec_mergeh ((vector
signed int) v6
, (vector
signed int) v7
);
265 tmp1
= (vector
signed short) vec_mergel ((vector
signed int) v6
, (vector
signed int) v7
);
266 tmp2
= vec_sld (tmp1
, tmp1
, 8);
267 tmp5
= vec_sub (vec_max (tmp0
, tmp1
), vec_min (tmp0
, tmp1
));
268 tmp6
= vec_sub (vec_max (tmp0
, tmp2
), vec_min (tmp0
, tmp2
));
269 tmp5
= (vector
signed short) vec_cmpgt (tmp5
, v_three
);
270 tmp6
= (vector
signed short) vec_cmpgt (tmp6
, v_three
);
271 tmp0
= vec_sld (tmp5
, tmp5
, 14);
272 tmp1
= vec_sld (tmp6
, tmp6
, 14);
273 tmp5
= vec_or (tmp0
, tmp5
);
274 tmp6
= vec_or (tmp1
, tmp6
);
276 tmp3
= (vector
signed short) vec_pack ((vector
unsigned int) tmp3
, (vector
unsigned int) tmp5
);
277 tmp4
= (vector
signed short) vec_pack ((vector
unsigned int) tmp4
, (vector
unsigned int) tmp6
);
278 tmp5
= vec_sld (tmp3
, tmp3
, 12);
279 tmp6
= vec_sld (tmp4
, tmp4
, 12);
280 tmp3
= vec_or (tmp3
, tmp5
);
281 tmp4
= vec_or (tmp4
, tmp6
);
282 tmp03
= (vector
signed short) vec_pack ((vector
unsigned short) tmp3
, (vector
unsigned short) tmp4
);
284 tmp0
= (vector
signed short) vec_pack ((vector
unsigned int) tmp00
, (vector
unsigned int) tmp01
);
285 tmp1
= (vector
signed short) vec_pack ((vector
unsigned int) tmp02
, (vector
unsigned int) tmp03
);
286 tmp2
= (vector
signed short) vec_mergeh ((vector
signed int) tmp0
, (vector
signed int) tmp1
);
287 tmp3
= (vector
signed short) vec_mergel ((vector
signed int) tmp0
, (vector
signed int) tmp1
);
288 tmp4
= (vector
signed short) vec_mergeh ((vector
signed int) tmp2
, (vector
signed int) tmp3
);
289 tmp5
= (vector
signed short) vec_mergel ((vector
signed int) tmp2
, (vector
signed int) tmp3
);
290 tmp4
= vec_and (v_ref_mask00
, tmp4
);
291 tmp5
= vec_and (v_ref_mask01
, tmp5
);
293 tmp0
= vec_nor (v_ref_mask00
, v_ref_mask01
);
294 tmp1
= vec_and (v_ref_mask00
, v_ref_mask01
);
295 tmp2
= vec_and (tmp4
, tmp5
);
296 tmp2
= vec_and (tmp2
, tmp1
);
297 tmp3
= vec_nor (tmp4
, tmp5
);
298 tmp3
= vec_nor (tmp3
, tmp1
);
299 v_vec_maskv
= vec_or (tmp0
, tmp2
);
300 v_vec_maskv
= vec_or (v_vec_maskv
, tmp3
);
319 idx0
= vec_ld (0, (signed short *) intra
);
321 v_c1
= (vector
unsigned char) {'1','2','3','4','5','6','7','8','1','2','3','4','5','6','7','8'};
324 v8
= (vector
signed short) vec_and ((vector
unsigned char) idx0
, v_c1
);
325 idx0
= (vector
signed short) vec_sra ((vector
unsigned char) idx0
, v_c1
);
327 v9
= vec_sld (v8
, v8
, 15);
328 v9
= (vector
signed short) vec_pack (v9
, v8
);
330 v10
= vec_sld (v9
, v9
, 2);
331 v11
= vec_sld (v9
, v9
, 10);
333 v8
= (vector
signed short) vec_cmpeq ((vector
signed char) v9
, (vector
signed char) v10
);
334 v9
= (vector
signed short) vec_cmpeq ((vector
signed char) v9
, (vector
signed char) v11
);
335 v10
= (vector
signed short) vec_cmpeq ((vector
signed char) v10
, (vector
signed char) v11
);
338 v8
= v9
= v10
= vec_nor (v_zero
, v_zero
);
341 tmp1
= (vector
signed short) vec_sl ((vector
unsigned char) idx0
, v_c1
);
345 unsigned char toto2
[16] __attribute__((aligned(16)));
348 vec_st(v_c1
, 0, (unsigned char *) toto2
);
349 for (m
=0; m
<16;m
++) {printf("%c ", toto2
[m
]);}
351 printf("\nv_zero\n");
353 vec_st (v_zero
, 0, (unsigned char *) toto2
);
354 for (m
=0; m
< 16; m
++) {printf("%c ", toto2
[m
]);}
358 v_c1
= vec_mergeh ((vector
unsigned char) v_zero
, v_c1
);
359 tmp1
= (vector
signed short) vec_add (tmp1
, (vector
signed short) v_c1
);
362 vector
unsigned char vres
=
363 (vector
unsigned char){'a','1','b','2','c','3','d','4','e','5','f','6','g','7','h','8'};
364 unsigned char toto2
[16] __attribute__((aligned(16)));
368 vec_st(v_c1
, 0, (unsigned char *) toto2
);
369 for (m
=0; m
<16;m
++) {printf("%c ", toto2
[m
]);}
371 if (!vec_all_eq (vres
, v_c1
))
375 v_pocl
= vec_ld (32, (vector
unsigned char *) mv_const
);
376 v_poch
= vec_ld (48, (vector
unsigned char *) mv_const
);
377 tmp2
= (vector
signed short) vec_perm (v_pocl
, v_poch
, (vector
unsigned char) tmp1
);
379 v_pocl
= vec_ld (0, (vector
unsigned char *) mv_const
);
380 v_poch
= vec_ld (16, (vector
unsigned char *) mv_const
);
382 tmp1
= (vector
signed short) vec_perm (v_pocl
, v_poch
, (vector
unsigned char) tmp1
);
384 tmp1
= vec_sel (tmp1
, tmp2
, (vector
unsigned short) {0xffff,0xffff,0,0,0,0,0,0});
387 tmp3
= (vector
signed short) vec_splat ((vector
unsigned char) idx0
, 12);
388 v_c1
= (vector
unsigned char) vec_nor (v_zero
, v_zero
);
389 tmp0
= (vector
signed short) vec_cmpeq ((vector
signed char) idx0
, (vector
signed char) v_c1
);
390 tmp1
= vec_sel (tmp1
, (vector
signed short) tmp3
, (vector
unsigned short) tmp0
);
392 tmp2
= vec_sld (tmp1
, tmp1
, 15);
393 tmp1
= (vector
signed short) vec_pack (tmp2
, tmp1
);
396 tmp2
= vec_sld (tmp1
, tmp1
, 2);
397 tmp3
= vec_sld (tmp1
, tmp1
, 10);
399 tmp0
= (vector
signed short) vec_cmpeq ((vector
signed char) tmp1
, (vector
signed char) tmp2
);
400 tmp4
= (vector
signed short) vec_cmpeq ((vector
signed char) tmp1
, (vector
signed char) tmp3
);
401 tmp1
= (vector
signed short) vec_cmpeq ((vector
signed char) tmp2
, (vector
signed char) tmp3
);
402 tmp0
= vec_and (tmp0
, v8
);
403 tmp4
= vec_and (tmp4
, v9
);
404 tmp1
= vec_and (tmp1
, v10
);
405 tmp2
= vec_sld ((vector
signed short) tmp0
, (vector
signed short) tmp0
, 8);
406 tmp3
= vec_sld ((vector
signed short) tmp4
, (vector
signed short) tmp4
, 8);
407 tmp5
= vec_sld ((vector
signed short) tmp1
, (vector
signed short) tmp1
, 8);
408 tmp0
= vec_and (tmp0
, tmp2
);
409 tmp4
= vec_and (tmp4
, tmp3
);
410 tmp1
= vec_and (tmp1
, tmp5
);
411 v_ref_mask00
= vec_mergeh ((vector
signed short) tmp0
, (vector
signed short) v_c1
);
412 v_ref_mask01
= vec_mergeh ((vector
signed short) tmp4
, (vector
signed short) tmp1
);
413 v_ref_mask00
= (vector
signed short) vec_mergeh ((vector
unsigned char) v_ref_mask00
, (vector
unsigned char) v_ref_mask00
);
414 v_ref_mask01
= (vector
signed short) vec_mergeh ((vector
unsigned char) v_ref_mask01
, (vector
unsigned char) v_ref_mask01
);
417 v_permv
= vec_ld (0, (vector
unsigned char *) mv_const
);
418 v8
= vec_ld (0, (vector
signed short *) mv_const
);
419 v9
= vec_ld (16, (vector
signed short *) mv_const
);
420 tmp2
= vec_perm (v0
, v0
, v_permv
);
421 tmp3
= vec_sub (vec_max (v8
, v0
), vec_min (v8
, v0
));
422 tmp4
= vec_sub (vec_max (v8
, tmp2
), vec_min (v8
, tmp2
));
423 tmp3
= (vector
signed short) vec_cmpgt (tmp3
, v_three
);
424 tmp4
= (vector
signed short) vec_cmpgt (tmp4
, v_three
);
425 tmp5
= vec_sld (tmp3
, tmp3
, 14);
426 tmp6
= vec_sld (tmp4
, tmp4
, 14);
427 tmp3
= vec_or (tmp3
, tmp5
);
428 tmp4
= vec_or (tmp4
, tmp6
);
430 tmp2
= vec_perm (v2
, v2
, v_permv
);
431 tmp5
= vec_sub (vec_max (v9
, v2
), vec_min (v9
, v2
));
432 tmp6
= vec_sub (vec_max (v9
, tmp2
), vec_min (v9
, tmp2
));
433 tmp5
= (vector
signed short) vec_cmpgt (tmp5
, v_three
);
434 tmp6
= (vector
signed short) vec_cmpgt (tmp6
, v_three
);
435 tmp0
= vec_sld (tmp5
, tmp5
, 14);
436 tmp1
= vec_sld (tmp6
, tmp6
, 14);
437 tmp5
= vec_or (tmp0
, tmp5
);
438 tmp6
= vec_or (tmp1
, tmp6
);
440 tmp3
= (vector
signed short) vec_pack ((vector
unsigned int) tmp3
, (vector
unsigned int) tmp5
);
441 tmp4
= (vector
signed short) vec_pack ((vector
unsigned int) tmp4
, (vector
unsigned int) tmp6
);
442 tmp5
= vec_sld (tmp3
, tmp3
, 14);
443 tmp6
= vec_sld (tmp4
, tmp4
, 14);
444 tmp3
= vec_or (tmp3
, tmp5
);
445 tmp4
= vec_or (tmp4
, tmp6
);
446 tmp00
= (vector
signed short) vec_pack ((vector
unsigned int) tmp3
, (vector
unsigned int) tmp4
);
448 tmp2
= vec_perm (v1
, v1
, v_permv
);
449 tmp3
= vec_sub (vec_max (v0
, v1
), vec_min (v0
, v1
));
450 tmp4
= vec_sub (vec_max (v0
, tmp2
), vec_min (v0
, tmp2
));
451 tmp3
= (vector
signed short) vec_cmpgt (tmp3
, v_three
);
452 tmp4
= (vector
signed short) vec_cmpgt (tmp4
, v_three
);
453 tmp5
= vec_sld (tmp3
, tmp3
, 14);
454 tmp6
= vec_sld (tmp4
, tmp4
, 14);
455 tmp3
= vec_or (tmp3
, tmp5
);
456 tmp4
= vec_or (tmp4
, tmp6
);
458 tmp2
= vec_perm (v3
, v3
, v_permv
);
459 tmp5
= vec_sub (vec_max (v2
, v3
), vec_min (v2
, v3
));
460 tmp6
= vec_sub (vec_max (v2
, tmp2
), vec_min (v2
, tmp2
));
461 tmp5
= (vector
signed short) vec_cmpgt (tmp5
, v_three
);
462 tmp6
= (vector
signed short) vec_cmpgt (tmp6
, v_three
);
463 tmp0
= vec_sld (tmp5
, tmp5
, 14);
464 tmp1
= vec_sld (tmp6
, tmp6
, 14);
465 tmp5
= vec_or (tmp0
, tmp5
);
466 tmp6
= vec_or (tmp1
, tmp6
);
468 tmp3
= (vector
signed short) vec_pack ((vector
unsigned int) tmp3
, (vector
unsigned int) tmp5
);
469 tmp4
= (vector
signed short) vec_pack ((vector
unsigned int) tmp4
, (vector
unsigned int) tmp6
);
470 tmp5
= vec_sld (tmp3
, tmp3
, 14);
471 tmp6
= vec_sld (tmp4
, tmp4
, 14);
472 tmp3
= vec_or (tmp3
, tmp5
);
473 tmp4
= vec_or (tmp4
, tmp6
);
474 tmp01
= (vector
signed short) vec_pack ((vector
unsigned int) tmp3
, (vector
unsigned int) tmp4
);
476 tmp2
= vec_perm (v4
, v4
, v_permv
);
477 tmp3
= vec_sub (vec_max (v1
, v4
), vec_min (v1
, v4
));
478 tmp4
= vec_sub (vec_max (v1
, tmp2
), vec_min (v1
, tmp2
));
479 tmp3
= (vector
signed short) vec_cmpgt (tmp3
, v_three
);
480 tmp4
= (vector
signed short) vec_cmpgt (tmp4
, v_three
);
481 tmp5
= vec_sld (tmp3
, tmp3
, 14);
482 tmp6
= vec_sld (tmp4
, tmp4
, 14);
483 tmp3
= vec_or (tmp3
, tmp5
);
484 tmp4
= vec_or (tmp4
, tmp6
);
486 tmp2
= vec_perm (v6
, v6
, v_permv
);
487 tmp5
= vec_sub (vec_max (v3
, v6
), vec_min (v3
, v6
));
488 tmp6
= vec_sub (vec_max (v3
, tmp2
), vec_min (v3
, tmp2
));
489 tmp5
= (vector
signed short) vec_cmpgt (tmp5
, v_three
);
490 tmp6
= (vector
signed short) vec_cmpgt (tmp6
, v_three
);
491 tmp0
= vec_sld (tmp5
, tmp5
, 14);
492 tmp1
= vec_sld (tmp6
, tmp6
, 14);
493 tmp5
= vec_or (tmp0
, tmp5
);
494 tmp6
= vec_or (tmp1
, tmp6
);
496 tmp3
= (vector
signed short) vec_pack ((vector
unsigned int) tmp3
, (vector
unsigned int) tmp5
);
497 tmp4
= (vector
signed short) vec_pack ((vector
unsigned int) tmp4
, (vector
unsigned int) tmp6
);
498 tmp5
= vec_sld (tmp3
, tmp3
, 14);
499 tmp6
= vec_sld (tmp4
, tmp4
, 14);
500 tmp3
= vec_or (tmp3
, tmp5
);
501 tmp4
= vec_or (tmp4
, tmp6
);
502 tmp02
= (vector
signed short) vec_pack ((vector
unsigned int) tmp3
, (vector
unsigned int) tmp4
);
505 tmp2
= vec_perm (v5
, v5
, v_permv
);
506 tmp3
= vec_sub (vec_max (v4
, v5
), vec_min (v4
, v5
));
507 tmp4
= vec_sub (vec_max (v4
, tmp2
), vec_min (v4
, tmp2
));
508 tmp3
= (vector
signed short) vec_cmpgt (tmp3
, v_three
);
509 tmp4
= (vector
signed short) vec_cmpgt (tmp4
, v_three
);
510 tmp5
= vec_sld (tmp3
, tmp3
, 14);
511 tmp6
= vec_sld (tmp4
, tmp4
, 14);
512 tmp3
= vec_or (tmp3
, tmp5
);
513 tmp4
= vec_or (tmp4
, tmp6
);
515 tmp2
= vec_perm (v7
, v7
, v_permv
);
516 tmp5
= vec_sub (vec_max (v6
, v7
), vec_min (v6
, v7
));
517 tmp6
= vec_sub (vec_max (v6
, tmp2
), vec_min (v6
, tmp2
));
518 tmp5
= (vector
signed short) vec_cmpgt (tmp5
, v_three
);
519 tmp6
= (vector
signed short) vec_cmpgt (tmp6
, v_three
);
520 tmp0
= vec_sld (tmp5
, tmp5
, 14);
521 tmp1
= vec_sld (tmp6
, tmp6
, 14);
522 tmp5
= vec_or (tmp0
, tmp5
);
523 tmp6
= vec_or (tmp1
, tmp6
);
525 tmp3
= (vector
signed short) vec_pack ((vector
unsigned int) tmp3
, (vector
unsigned int) tmp5
);
526 tmp4
= (vector
signed short) vec_pack ((vector
unsigned int) tmp4
, (vector
unsigned int) tmp6
);
527 tmp5
= vec_sld (tmp3
, tmp3
, 14);
528 tmp6
= vec_sld (tmp4
, tmp4
, 14);
529 tmp3
= vec_or (tmp3
, tmp5
);
530 tmp4
= vec_or (tmp4
, tmp6
);
531 tmp03
= (vector
signed short) vec_pack ((vector
unsigned int) tmp3
, (vector
unsigned int) tmp4
);
533 tmp0
= (vector
signed short) vec_pack ((vector
unsigned short) tmp00
, (vector
unsigned short) tmp01
);
534 tmp1
= (vector
signed short) vec_pack ((vector
unsigned short) tmp02
, (vector
unsigned short) tmp03
);
535 tmp2
= (vector
signed short) vec_mergeh ((vector
signed int) tmp0
, (vector
signed int) tmp1
);
536 tmp3
= (vector
signed short) vec_mergel ((vector
signed int) tmp0
, (vector
signed int) tmp1
);
537 tmp4
= (vector
signed short) vec_mergeh ((vector
signed int) tmp2
, (vector
signed int) tmp3
);
538 tmp5
= (vector
signed short) vec_mergel ((vector
signed int) tmp2
, (vector
signed int) tmp3
);
539 tmp4
= vec_and (v_ref_mask00
, tmp4
);
540 tmp5
= vec_and (v_ref_mask01
, tmp5
);
542 tmp0
= vec_nor (v_ref_mask00
, v_ref_mask01
);
543 tmp1
= vec_and (v_ref_mask00
, v_ref_mask01
);
544 tmp2
= vec_and (tmp4
, tmp5
);
545 tmp2
= vec_and (tmp2
, tmp1
);
546 tmp3
= vec_nor (tmp4
, tmp5
);
547 tmp3
= vec_nor (tmp3
, tmp1
);
548 v_vec_maskh
= vec_or (tmp0
, tmp2
);
549 v_vec_maskh
= vec_or (v_vec_maskh
, tmp3
);
552 v_intra_maskvn
= vec_nor (v_intra_maskv
, v_intra_maskv
);
553 v_intra_maskhn
= vec_nor (v_intra_maskh
, v_intra_maskh
);
554 v_cbp_maskvn
= (vector
unsigned char) vec_cmpeq ((vector
unsigned char) v_cbp_maskv
, (vector
unsigned char) v_zero
);
555 v_cbp_maskhn
= (vector
unsigned char) vec_cmpeq ((vector
unsigned char) v_cbp_maskh
, (vector
unsigned char) v_zero
);
557 v_cbp_maskv
= vec_and (v_cbp_maskv
, v_intra_maskvn
);
558 v_cbp_maskh
= vec_and (v_cbp_maskh
, v_intra_maskhn
);
559 v_vec_maskv
= vec_and (v_vec_maskv
, (vector
signed short) v_intra_maskvn
);
560 v_vec_maskv
= vec_and (v_vec_maskv
, (vector
signed short) v_cbp_maskvn
);
561 v_vec_maskh
= vec_and (v_vec_maskh
, (vector
signed short) v_intra_maskhn
);
562 v_vec_maskh
= vec_and (v_vec_maskh
, (vector
signed short) v_cbp_maskhn
);
564 tmp9
= vec_splat_u8(2);
565 tmp8
= vec_splat_u8(1);
566 v_bS
= vec_ld (0, (vector
unsigned char *) mv_const
);
568 v_bSv
= vec_and ((vector
unsigned char) v_bS
, (vector
unsigned char)v_intra_maskv
);
569 tmp7
= vec_and ((vector
unsigned char)tmp9
, (vector
unsigned char)v_cbp_maskv
);
570 tmp6
= (vector
signed short) vec_and ((vector
unsigned char)tmp8
, (vector
unsigned char)v_vec_maskv
);
571 tmp7
= vec_or ((vector
unsigned char)tmp7
, (vector
unsigned char)tmp6
);
572 v_bSv
= vec_or ((vector
unsigned char)tmp7
, (vector
unsigned char)v_bSv
);
574 v_bS
= vec_ld (0, (vector
unsigned char *) mv_const
);
575 v_bSh
= vec_and ((vector
unsigned char) v_bS
, (vector
unsigned char)v_intra_maskh
);
576 tmp7
= vec_and ((vector
unsigned char)tmp9
, (vector
unsigned char)v_cbp_maskh
);
577 tmp6
= (vector
signed short) vec_and ((vector
unsigned char)tmp8
, (vector
unsigned char)v_vec_maskh
);
578 tmp7
= vec_or ((vector
unsigned char)tmp7
, (vector
unsigned char)tmp6
);
579 v_bSh
= vec_or ((vector
unsigned char)tmp7
, (vector
unsigned char)v_bSh
);
581 v_permh
= (vector
unsigned char) vec_ld (0 , (vector
unsigned char *) mv_const
);
582 v_permv
= (vector
unsigned char) vec_ld (0, (vector
unsigned char *) mv_const
);
583 v_bSv
= vec_and (v_bSv
, v_permv
);
584 v_bSh
= vec_and (v_bSh
, v_permh
);
586 vec_st (v_bSv
, 0, (unsigned char *) mv_const
);
587 vec_st (v_bSh
, 0, (unsigned char *) mv_const
);
589 v_bSv
= vec_mergeh (v_bSv
, v_bSv
);
590 v_bSv
= vec_mergeh (v_bSv
, v_bSv
);
591 v_bSh
= vec_mergeh (v_bSh
, v_bSh
);
592 v_bSh
= vec_mergeh (v_bSh
, v_bSh
);
594 vec_st (v_bSv
, 0, (vector
unsigned char *) mv_const
);
595 vec_st (v_bSh
, 0,(vector
unsigned char *) mv_const
);
599 int main(int argc
, char **argv
)
601 char toto
[32] __attribute__((aligned(16)));
603 altivec_check (); /* Exit if hardware doesn't support AltiVec. */
604 foo(toto
, toto
, 0, 0);