1/* { dg-do run { target { powerpc*-*-* && vmx_hw } } } */
2/* { dg-do compile { target { powerpc*-*-* && { ! vmx_hw } } } } */
3/* { dg-require-effective-target powerpc_altivec_ok } */
4/* { dg-options "-maltivec -O2" } */
5
6#include <altivec.h>
7
8int printf(const char * , ...);
9extern void abort();
10
11void 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)));
14
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);
23
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);
32
33  intra[0] = 1;
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);
40
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);
50
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);
56
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);
62
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);
65
66  intra[0]  =0;
67  intra[1]  =1;
68  intra[2]  =2;
69  intra[3]  =3;
70  intra[4]  =4;
71  intra[5]  = 5;
72  intra[6]  =6;
73  intra[7]  =7;
74  intra[8]  =8;
75  intra[9]  =9;
76  intra[10] =9;
77  intra[11] =9;
78  intra[12] = 0xff;
79
80  idx0   = vec_ld (0, (signed short *) intra);
81
82  v_c1   = (vector unsigned char)  {'1','2','3','4','5','6','7','8','1','2','3','4','5','6','7','8'};
83
84  if (field_MBAFF){
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);
87
88    v1   = vec_sld (v0, v0, 15);
89    v1   = (vector signed short) vec_pack (v1, v0);
90
91    v2   = vec_sld (v1, v1, 2);
92    v3   = vec_sld (v1, v1, 10);
93
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);
97  }
98  else  {
99    v4 = v5 = v6 = (vector signed short) vec_nor (v_zero, v_zero);
100  }
101
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);
105
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);
109
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});
114
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);
119
120  tmp2   = vec_sld (tmp1, tmp1, 15);
121  tmp1   = (vector signed short) vec_pack (tmp2, tmp1);
122
123  tmp2   = vec_sld (tmp1, tmp1, 2);
124  tmp3   = vec_sld (tmp1, tmp1, 10);
125
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);
142
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);
149
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);
174
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);
182
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);
194
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);
206
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);
214
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);
219
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);
231
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);
243
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);
251
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);
263
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);
275
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);
283
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);
292
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);
301
302  intra[0]  = 1;
303  intra[1]  = 1;
304  intra[2]  = 2;
305  intra[3]  = 3;
306  intra[4]  = 2;
307  intra[5]  = 2;
308  intra[6]  = 2;
309  intra[7]  = 1;
310  intra[8]  = 1;
311  intra[9]  = 5;
312  intra[10] = 5;
313  intra[11] = 5;
314
315  intra[13] = 0;
316  intra[14] = 0;
317  intra[15] = 0;
318
319  idx0   = vec_ld (0, (signed short *) intra);
320
321  v_c1   = (vector unsigned char)  {'1','2','3','4','5','6','7','8','1','2','3','4','5','6','7','8'};
322
323  if (field_MBAFF){
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);
326
327    v9   = vec_sld (v8, v8, 15);
328    v9   = (vector signed short) vec_pack (v9, v8);
329
330    v10  = vec_sld (v9, v9, 2);
331    v11  = vec_sld (v9, v9, 10);
332
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);
336  }
337  else  {
338    v8 = v9 = v10 = (vector signed short) vec_nor (v_zero, v_zero);
339  }
340
341  tmp1   = (vector signed short) vec_sl ((vector unsigned char) idx0, v_c1);
342
343if (1){
344	int m;
345	unsigned char toto2[16] __attribute__((aligned(16)));
346
347	printf("vc1\n");
348	vec_st(v_c1, 0, (unsigned char *) toto2);
349	for (m=0; m<16;m++) {printf("%c ", toto2[m]);}
350
351	printf("\nv_zero\n");
352
353	vec_st (v_zero, 0, (unsigned char *) toto2);
354	for (m=0; m< 16; m++) {printf("%c ", toto2[m]);}
355	printf("\n");
356}
357
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);
360
361if (1){
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)));
365	int m;
366
367	printf("vc1\n");
368	vec_st(v_c1, 0, (unsigned char *) toto2);
369	for (m=0; m<16;m++) {printf("%c ", toto2[m]);}
370	printf("\n");
371	if (!vec_all_eq (vres, v_c1))
372	  abort();
373}
374
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);
378
379  v_pocl = vec_ld (0,  (vector unsigned char *) mv_const);
380  v_poch = vec_ld (16, (vector unsigned char *) mv_const);
381
382  tmp1   = (vector signed short) vec_perm (v_pocl, v_poch, (vector unsigned char) tmp1);
383
384  tmp1   = vec_sel (tmp1, tmp2, (vector unsigned short) {0xffff,0xffff,0,0,0,0,0,0});
385
386
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);
391
392  tmp2   = vec_sld (tmp1, tmp1, 15);
393  tmp1   = (vector signed short) vec_pack (tmp2, tmp1);
394
395
396  tmp2   = vec_sld (tmp1, tmp1, 2);
397  tmp3   = vec_sld (tmp1, tmp1, 10);
398
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);
415
416
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);
429
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);
439
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);
447
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);
457
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);
467
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);
475
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);
485
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);
495
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);
503
504
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);
514
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);
524
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);
532
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);
541
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);
550
551
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);
556
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);
563
564  tmp9        = vec_splat_u8(2);
565  tmp8        = vec_splat_u8(1);
566  v_bS        = vec_ld (0, (vector unsigned char *) mv_const);
567
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);
573
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);
580
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);
585
586  vec_st (v_bSv, 0, (unsigned char *) mv_const);
587  vec_st (v_bSh, 0, (unsigned char *) mv_const);
588
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);
593
594  vec_st (v_bSv, 0, (vector unsigned char *) mv_const);
595  vec_st (v_bSh, 0,(vector unsigned char *) mv_const);
596}
597
598
599int main(int argc, char **argv)
600{
601    char toto[32] __attribute__((aligned(16)));
602
603    foo(toto, toto, 0, 0);
604    return 0;
605}
606