OSDN Git Service

* gcc.dg/altivec-vec-merge.c: Make test usable on GNU/Linux targets
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / altivec-vec-merge.c
1 /* { dg-do run { target powerpc*-*-* } } */
2 /* { dg-options "-maltivec -O2" } */
3
4 #include <altivec.h>
5 #include "altivec_check.h"
6
7 int printf(const char * , ...);
8 extern void abort();
9
10 void foo(char *bS, char *bS_edge, int field_MBAFF, int top){
11   char intra[16]       __attribute__ ((aligned(16)));
12   signed short mv_const[8] __attribute__((aligned(16)));
13   
14   vector signed short v_three, v_ref_mask00, v_ref_mask01, v_vec_maskv, v_vec_maskh;
15   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;
16   vector unsigned char tmp7, tmp8, tmp9, tmp10, v_c1, v_cbp1, v_cbp2, v_pocl, v_poch;
17   vector signed short v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6;
18   vector signed short idx0;
19   vector signed short tmp00, tmp01, tmp02, tmp03;
20   vector unsigned char v_zero   = (vector unsigned char) {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p'};
21   v_three  = (vector signed short) vec_ld (0, (vector signed short *) mv_const);
22
23   vector unsigned char v_coef_mask = vec_ld(0, (vector unsigned char *)mv_const);
24   vector unsigned char v_coef_mask_hi = vec_splat(v_coef_mask, 0);
25   vector unsigned char v_coef_mask_lo = vec_splat(v_coef_mask, 1);
26   v_coef_mask = vec_sld(v_coef_mask_hi, v_coef_mask_lo, 8);
27   vector unsigned char v_bit_mask = vec_sub(vec_splat_u8(7), vec_lvsl(0, (unsigned char *)0));
28   v_bit_mask  = vec_sld(vec_sld(v_bit_mask, v_bit_mask, 8), v_bit_mask, 8);
29   v_bit_mask  = vec_sl(vec_splat_u8(1), v_bit_mask);
30   tmp5        = (vector signed short) vec_and(v_coef_mask, v_bit_mask);
31
32   intra[0] = 1;
33   tmp8     = vec_ld (0, (vector unsigned char *) intra);
34   tmp9     = vec_ld (0, (vector unsigned char *) mv_const);
35   tmp10    = vec_ld (0, (vector unsigned char *) mv_const);
36   v_permv  = vec_ld (0, (vector unsigned char *) mv_const);
37   v_permh  = vec_ld (0, (vector unsigned char *) mv_const);
38   tmp6     = vec_ld (0, (vector signed short *) mv_const);
39
40   tmp8     = vec_splat((vector unsigned char) tmp8, 0);
41   tmp9     = vec_splat((vector unsigned char) tmp9, 12);
42   tmp10    = vec_splat((vector unsigned char) tmp10, 12);
43   tmp9     = vec_sld ((vector unsigned char) tmp9,(vector unsigned char) tmp8, 12);
44   tmp10    = vec_sld ((vector unsigned char) tmp10, (vector unsigned char) tmp8, 12);
45   v_intra_maskv  = vec_or (tmp9, tmp8);
46   v_intra_maskh  = vec_or (tmp10, tmp8);
47   v_intra_maskv  = (vector unsigned char) vec_cmpgt ((vector unsigned char) v_intra_maskv, (vector unsigned char) v_zero);
48   v_intra_maskh  = (vector unsigned char) vec_cmpgt ((vector unsigned char) v_intra_maskh, (vector unsigned char) v_zero);
49
50   tmp9   = vec_lvsl (4 + (top<<2), (unsigned char *) 0x0);
51   v_cbp1 = vec_perm ((vector unsigned char) tmp6, (vector unsigned char) tmp6, tmp9);
52   v_cbp2 = (vector unsigned char) vec_perm ((vector unsigned char) tmp5, (vector unsigned char) tmp5, (vector unsigned char) v_permv);
53   v_cbp1 = (vector unsigned char) vec_sld  ((vector unsigned char) v_cbp1,(vector unsigned char) v_cbp2, 12);
54   v_cbp_maskv = vec_or (v_cbp1, v_cbp2);
55
56   tmp9   = vec_lvsl (12 + (top<<2), (unsigned char *) 0x0);
57   v_cbp1 = vec_perm ((vector unsigned char) tmp6, (vector unsigned char) tmp6, tmp9);
58   v_cbp2 = (vector unsigned char) vec_perm ((vector unsigned char) tmp5, (vector unsigned char) tmp5, (vector unsigned char) v_permh);
59   v_cbp1 = (vector unsigned char) vec_sld  ((vector unsigned char) v_cbp1,(vector unsigned char) v_cbp2, 12);
60   v_cbp_maskh = vec_or (v_cbp1, v_cbp2);
61
62   v_cbp_maskv = (vector unsigned char) vec_cmpgt ((vector unsigned char) v_cbp_maskv, (vector unsigned char) v_zero);
63   v_cbp_maskh = (vector unsigned char) vec_cmpgt ((vector unsigned char) v_cbp_maskh, (vector unsigned char) v_zero);
64
65   intra[0]  =0; 
66   intra[1]  =1;
67   intra[2]  =2;
68   intra[3]  =3;
69   intra[4]  =4;
70   intra[5]  = 5;
71   intra[6]  =6;
72   intra[7]  =7;
73   intra[8]  =8;
74   intra[9]  =9;
75   intra[10] =9;
76   intra[11] =9;
77   intra[12] = 0xff;
78
79   idx0   = vec_ld (0, (signed short *) intra);
80   
81   v_c1   = (vector unsigned char)  {'1','2','3','4','5','6','7','8','1','2','3','4','5','6','7','8'};
82
83   if (field_MBAFF){
84     v0   = (vector signed short) vec_and ((vector unsigned char) idx0, v_c1);
85     idx0 = (vector signed short) vec_sra ((vector unsigned char) idx0, v_c1);
86
87     v1   = vec_sld (v0, v0, 15);
88     v1   = (vector signed short) vec_pack (v1, v0);
89     
90     v2   = vec_sld (v1, v1, 2);
91     v3   = vec_sld (v1, v1, 10);
92     
93     v4   = (vector signed short) vec_cmpeq ((vector signed char) v1, (vector signed char) v2);
94     v5   = (vector signed short) vec_cmpeq ((vector signed char) v1, (vector signed char) v3);
95     v6   = (vector signed short) vec_cmpeq ((vector signed char) v2, (vector signed char) v3);
96   }
97   else  {
98     v4 = v5 = v6 = vec_nor (v_zero, v_zero);
99   }
100
101   tmp1   = (vector signed short) vec_sl ((vector unsigned char) idx0, v_c1);
102   v_c1   = vec_mergeh ((vector unsigned char) v_zero, v_c1);
103   tmp1   = (vector signed short) vec_add (tmp1, (vector signed short) v_c1); 
104
105   v_pocl = vec_ld (0, (vector unsigned char *) mv_const);
106   v_poch = vec_ld (0, (vector unsigned char *) mv_const);
107   tmp2   = (vector signed short) vec_perm (v_pocl, v_poch, (vector unsigned char) tmp1);      
108
109   v_pocl = vec_ld (0,  (vector unsigned char *) mv_const);
110   v_poch = vec_ld (16, (vector unsigned char *) mv_const);
111   tmp1   = (vector signed short) vec_perm (v_pocl, v_poch, (vector unsigned char) tmp1);
112   tmp1   = vec_sel (tmp1, tmp2, (vector unsigned short) {0xffff,0xffff,0,0,0,0,0,0});
113
114   tmp3   = (vector signed short) vec_splat ((vector unsigned char) idx0, 12);
115   v_c1   = (vector unsigned char) vec_nor (v_zero, v_zero);
116   tmp0   = (vector signed short) vec_cmpeq ((vector signed char) idx0, (vector signed char) v_c1);
117   tmp1   = vec_sel (tmp1, (vector signed short) tmp3, (vector unsigned short) tmp0);
118
119   tmp2   = vec_sld (tmp1, tmp1, 15);
120   tmp1   = (vector signed short) vec_pack (tmp2, tmp1);
121   
122   tmp2   = vec_sld (tmp1, tmp1, 2);
123   tmp3   = vec_sld (tmp1, tmp1, 10);
124
125   tmp0   = (vector signed short) vec_cmpeq ((vector signed char) tmp1, (vector signed char) tmp2);
126   tmp4   = (vector signed short) vec_cmpeq ((vector signed char) tmp1, (vector signed char) tmp3);
127   tmp1   = (vector signed short) vec_cmpeq ((vector signed char) tmp2, (vector signed char) tmp3);
128   tmp0   = vec_and (tmp0, v4);
129   tmp4   = vec_and (tmp4, v5);
130   tmp1   = vec_and (tmp1, v6);
131   tmp2   = vec_sld ((vector signed short) tmp0, (vector signed short) tmp0, 8);
132   tmp3   = vec_sld ((vector signed short) tmp4, (vector signed short) tmp4, 8);
133   tmp5   = vec_sld ((vector signed short) tmp1, (vector signed short) tmp1, 8);
134   tmp0   = vec_and (tmp0, tmp2);
135   tmp4   = vec_and (tmp4, tmp3);
136   tmp1   = vec_and (tmp1, tmp5);
137   v_ref_mask00 = vec_mergeh ((vector signed short) tmp0, (vector signed short) v_c1);
138   v_ref_mask01 = vec_mergeh ((vector signed short) tmp4, (vector signed short) tmp1);
139   v_ref_mask00 = (vector signed short) vec_mergeh ((vector unsigned char) v_ref_mask00, (vector unsigned char) v_ref_mask00);
140   v_ref_mask01 = (vector signed short) vec_mergeh ((vector unsigned char) v_ref_mask01, (vector unsigned char) v_ref_mask01);
141   
142   v0     = vec_ld (0,  (vector signed short *) mv_const);
143   v1     = vec_ld (16, (vector signed short *) mv_const);
144   v4     = vec_ld (64, (vector signed short *) mv_const);
145   v5     = vec_ld (80, (vector signed short *) mv_const);
146   v8     = vec_ld (0,  (vector signed short *) mv_const);
147   v9     = vec_ld (16, (vector signed short *) mv_const);
148
149   tmp0   = (vector signed short) vec_perm ((vector unsigned char) v8, 
150                 (vector unsigned char) v8, (vector unsigned char) {0,1,2,3,8,9,10,11,4,5,6,7,12,13,14,15});
151   tmp1   = (vector signed short) vec_mergeh ((vector signed int) v0, (vector signed int) v1);
152   tmp2   = vec_sld (tmp1, tmp1, 8);
153   tmp3   = vec_sub (vec_max (tmp0, tmp1), vec_min (tmp0, tmp1));
154   tmp4   = vec_sub (vec_max (tmp0, tmp2), vec_min (tmp0, tmp2));
155   tmp3   = (vector signed short) vec_cmpgt (tmp3, v_three); 
156   tmp4   = (vector signed short) vec_cmpgt (tmp4, v_three);
157   tmp5   = vec_sld (tmp3, tmp3, 14);
158   tmp6   = vec_sld (tmp4, tmp4, 14);
159   tmp3   = vec_or (tmp3, tmp5);
160   tmp4   = vec_or (tmp4, tmp6);
161   tmp0   = (vector signed short) vec_perm ((vector unsigned char) v9, (vector unsigned char) v9, 
162                         (vector unsigned char) {0,1,2,3,8,9,10,11,4,5,6,7,12,13,14,15});
163   tmp1   = (vector signed short) vec_mergeh ((vector signed int) v4, (vector signed int) v5);
164   tmp2   = vec_sld (tmp1, tmp1, 8);
165   tmp5   = vec_sub (vec_max (tmp0, tmp1), vec_min (tmp0, tmp1));
166   tmp6   = vec_sub (vec_max (tmp0, tmp2), vec_min (tmp0, tmp2));
167   tmp5   = (vector signed short) vec_cmpgt (tmp5, v_three); 
168   tmp6   = (vector signed short) vec_cmpgt (tmp6, v_three);
169   tmp0   = vec_sld (tmp5, tmp5, 14);
170   tmp1   = vec_sld (tmp6, tmp6, 14);
171   tmp5   = vec_or (tmp0, tmp5);
172   tmp6   = vec_or (tmp1, tmp6);
173   
174   tmp3   = (vector signed short) vec_pack ((vector unsigned int) tmp3, (vector unsigned int) tmp5);
175   tmp4   = (vector signed short) vec_pack ((vector unsigned int) tmp4, (vector unsigned int) tmp6);
176   tmp5   = vec_sld (tmp3, tmp3, 12);
177   tmp6   = vec_sld (tmp4, tmp4, 12);
178   tmp3   = vec_or (tmp3, tmp5);
179   tmp4   = vec_or (tmp4, tmp6);
180   tmp00  = (vector signed short) vec_pack ((vector unsigned short) tmp3, (vector unsigned short) tmp4);
181
182   tmp0   = (vector signed short) vec_mergeh ((vector signed int) v0, (vector signed int) v1);
183   tmp1   = (vector signed short) vec_mergel ((vector signed int) v0, (vector signed int) v1);
184   tmp2   = vec_sld (tmp1, tmp1, 8);
185   tmp3   = vec_sub (vec_max (tmp0, tmp1), vec_min (tmp0, tmp1));
186   tmp4   = vec_sub (vec_max (tmp0, tmp2), vec_min (tmp0, tmp2));
187   tmp3   = (vector signed short) vec_cmpgt (tmp3, v_three); 
188   tmp4   = (vector signed short) vec_cmpgt (tmp4, v_three);
189   tmp5   = vec_sld (tmp3, tmp3, 14);
190   tmp6   = vec_sld (tmp4, tmp4, 14);
191   tmp3   = vec_or (tmp3, tmp5);
192   tmp4   = vec_or (tmp4, tmp6);
193   
194   tmp0   = (vector signed short) vec_mergeh ((vector signed int) v4, (vector signed int) v5);
195   tmp1   = (vector signed short) vec_mergel ((vector signed int) v4, (vector signed int) v5);
196   tmp2   = vec_sld (tmp1, tmp1, 8);
197   tmp5   = vec_sub (vec_max (tmp0, tmp1), vec_min (tmp0, tmp1));
198   tmp6   = vec_sub (vec_max (tmp0, tmp2), vec_min (tmp0, tmp2));
199   tmp5   = (vector signed short) vec_cmpgt (tmp5, v_three); 
200   tmp6   = (vector signed short) vec_cmpgt (tmp6, v_three);
201   tmp0   = vec_sld (tmp5, tmp5, 14);
202   tmp1   = vec_sld (tmp6, tmp6, 14);
203   tmp5   = vec_or (tmp0, tmp5);
204   tmp6   = vec_or (tmp1, tmp6);
205   
206   tmp3   = (vector signed short) vec_pack ((vector unsigned int) tmp3, (vector unsigned int) tmp5);
207   tmp4   = (vector signed short) vec_pack ((vector unsigned int) tmp4, (vector unsigned int) tmp6);
208   tmp5   = vec_sld (tmp3, tmp3, 12);
209   tmp6   = vec_sld (tmp4, tmp4, 12);
210   tmp3   = vec_or (tmp3, tmp5);
211   tmp4   = vec_or (tmp4, tmp6);
212   tmp01  = (vector signed short) vec_pack ((vector unsigned short) tmp3, (vector unsigned short) tmp4);
213
214   v2     = vec_ld (32, (vector signed short *) mv_const);
215   v3     = vec_ld (48, (vector signed short *) mv_const);
216   v6     = vec_ld (96, (vector signed short *) mv_const);
217   v7     = vec_ld (112,(vector signed short *) mv_const);
218
219   tmp0   = (vector signed short) vec_mergel ((vector signed int) v0, (vector signed int) v1);
220   tmp1   = (vector signed short) vec_mergeh ((vector signed int) v2, (vector signed int) v3);
221   tmp2   = vec_sld (tmp1, tmp1, 8);
222   tmp3   = vec_sub (vec_max (tmp0, tmp1), vec_min (tmp0, tmp1));
223   tmp4   = vec_sub (vec_max (tmp0, tmp2), vec_min (tmp0, tmp2));
224   tmp3   = (vector signed short) vec_cmpgt (tmp3, v_three); 
225   tmp4   = (vector signed short) vec_cmpgt (tmp4, v_three);
226   tmp5   = vec_sld (tmp3, tmp3, 14);
227   tmp6   = vec_sld (tmp4, tmp4, 14);
228   tmp3   = vec_or (tmp3, tmp5);
229   tmp4   = vec_or (tmp4, tmp6);
230   
231   tmp0   = (vector signed short) vec_mergel ((vector signed int) v4, (vector signed int) v5);
232   tmp1   = (vector signed short) vec_mergeh ((vector signed int) v6, (vector signed int) v7);
233   tmp2   = vec_sld (tmp1, tmp1, 8);
234   tmp5   = vec_sub (vec_max (tmp0, tmp1), vec_min (tmp0, tmp1));
235   tmp6   = vec_sub (vec_max (tmp0, tmp2), vec_min (tmp0, tmp2));
236   tmp5   = (vector signed short) vec_cmpgt (tmp5, v_three); 
237   tmp6   = (vector signed short) vec_cmpgt (tmp6, v_three);
238   tmp0   = vec_sld (tmp5, tmp5, 14);
239   tmp1   = vec_sld (tmp6, tmp6, 14);
240   tmp5   = vec_or (tmp0, tmp5);
241   tmp6   = vec_or (tmp1, tmp6);
242   
243   tmp3   = (vector signed short) vec_pack ((vector unsigned int) tmp3, (vector unsigned int) tmp5);
244   tmp4   = (vector signed short) vec_pack ((vector unsigned int) tmp4, (vector unsigned int) tmp6);
245   tmp5   = vec_sld (tmp3, tmp3, 12);
246   tmp6   = vec_sld (tmp4, tmp4, 12);
247   tmp3   = vec_or (tmp3, tmp5);
248   tmp4   = vec_or (tmp4, tmp6);
249   tmp02  = (vector signed short) vec_pack ((vector unsigned short) tmp3, (vector unsigned short) tmp4);
250
251   tmp0   = (vector signed short) vec_mergeh ((vector signed int) v2, (vector signed int) v3);
252   tmp1   = (vector signed short) vec_mergel ((vector signed int) v2, (vector signed int) v3);
253   tmp2   = vec_sld (tmp1, tmp1, 8);
254   tmp3   = vec_sub (vec_max (tmp0, tmp1), vec_min (tmp0, tmp1));
255   tmp4   = vec_sub (vec_max (tmp0, tmp2), vec_min (tmp0, tmp2));
256   tmp3   = (vector signed short) vec_cmpgt (tmp3, v_three); 
257   tmp4   = (vector signed short) vec_cmpgt (tmp4, v_three);
258   tmp5   = vec_sld (tmp3, tmp3, 14);
259   tmp6   = vec_sld (tmp4, tmp4, 14);
260   tmp3   = vec_or (tmp3, tmp5);
261   tmp4   = vec_or (tmp4, tmp6);
262   
263   tmp0   = (vector signed short) vec_mergeh ((vector signed int) v6, (vector signed int) v7);
264   tmp1   = (vector signed short) vec_mergel ((vector signed int) v6, (vector signed int) v7);
265   tmp2   = vec_sld (tmp1, tmp1, 8);
266   tmp5   = vec_sub (vec_max (tmp0, tmp1), vec_min (tmp0, tmp1));
267   tmp6   = vec_sub (vec_max (tmp0, tmp2), vec_min (tmp0, tmp2));
268   tmp5   = (vector signed short) vec_cmpgt (tmp5, v_three); 
269   tmp6   = (vector signed short) vec_cmpgt (tmp6, v_three);
270   tmp0   = vec_sld (tmp5, tmp5, 14);
271   tmp1   = vec_sld (tmp6, tmp6, 14);
272   tmp5   = vec_or (tmp0, tmp5);
273   tmp6   = vec_or (tmp1, tmp6);
274   
275   tmp3   = (vector signed short) vec_pack ((vector unsigned int) tmp3, (vector unsigned int) tmp5);
276   tmp4   = (vector signed short) vec_pack ((vector unsigned int) tmp4, (vector unsigned int) tmp6);
277   tmp5   = vec_sld (tmp3, tmp3, 12);
278   tmp6   = vec_sld (tmp4, tmp4, 12);
279   tmp3   = vec_or (tmp3, tmp5);
280   tmp4   = vec_or (tmp4, tmp6);
281   tmp03  = (vector signed short) vec_pack ((vector unsigned short) tmp3, (vector unsigned short) tmp4);
282
283   tmp0   = (vector signed short) vec_pack ((vector unsigned int) tmp00, (vector unsigned int) tmp01);
284   tmp1   = (vector signed short) vec_pack ((vector unsigned int) tmp02, (vector unsigned int) tmp03);
285   tmp2   = (vector signed short) vec_mergeh ((vector signed int) tmp0, (vector signed int) tmp1);
286   tmp3   = (vector signed short) vec_mergel ((vector signed int) tmp0, (vector signed int) tmp1);
287   tmp4   = (vector signed short) vec_mergeh ((vector signed int) tmp2, (vector signed int) tmp3);
288   tmp5   = (vector signed short) vec_mergel ((vector signed int) tmp2, (vector signed int) tmp3);
289   tmp4   = vec_and (v_ref_mask00, tmp4);
290   tmp5   = vec_and (v_ref_mask01, tmp5);
291
292   tmp0   = vec_nor (v_ref_mask00, v_ref_mask01);
293   tmp1   = vec_and (v_ref_mask00, v_ref_mask01);
294   tmp2   = vec_and (tmp4, tmp5);
295   tmp2   = vec_and (tmp2, tmp1);
296   tmp3   = vec_nor (tmp4, tmp5);
297   tmp3   = vec_nor (tmp3, tmp1);
298   v_vec_maskv = vec_or (tmp0, tmp2);
299   v_vec_maskv = vec_or (v_vec_maskv, tmp3);
300
301   intra[0]  = 1; 
302   intra[1]  = 1;
303   intra[2]  = 2;
304   intra[3]  = 3;
305   intra[4]  = 2;
306   intra[5]  = 2;
307   intra[6]  = 2;
308   intra[7]  = 1;
309   intra[8]  = 1;
310   intra[9]  = 5;
311   intra[10] = 5;
312   intra[11] = 5;
313   
314   intra[13] = 0;
315   intra[14] = 0;
316   intra[15] = 0;
317
318   idx0   = vec_ld (0, (signed short *) intra);
319   
320   v_c1   = (vector unsigned char)  {'1','2','3','4','5','6','7','8','1','2','3','4','5','6','7','8'};
321
322   if (field_MBAFF){
323     v8   = (vector signed short) vec_and ((vector unsigned char) idx0, v_c1);
324     idx0 = (vector signed short) vec_sra ((vector unsigned char) idx0, v_c1);
325
326     v9   = vec_sld (v8, v8, 15);
327     v9   = (vector signed short) vec_pack (v9, v8);
328     
329     v10  = vec_sld (v9, v9, 2);
330     v11  = vec_sld (v9, v9, 10);
331     
332     v8   = (vector signed short) vec_cmpeq ((vector signed char) v9, (vector signed char) v10);
333     v9   = (vector signed short) vec_cmpeq ((vector signed char) v9, (vector signed char) v11);
334     v10  = (vector signed short) vec_cmpeq ((vector signed char) v10, (vector signed char) v11);
335   }
336   else  {
337     v8 = v9 = v10 = vec_nor (v_zero, v_zero);
338   }
339
340   tmp1   = (vector signed short) vec_sl ((vector unsigned char) idx0, v_c1);
341   
342 if (1){
343         int m;
344         unsigned char toto2[16] __attribute__((aligned(16)));
345         
346         printf("vc1\n");
347         vec_st(v_c1, 0, (unsigned char *) toto2);
348         for (m=0; m<16;m++) {printf("%c ", toto2[m]);}
349         
350         printf("\nv_zero\n");
351         
352         vec_st (v_zero, 0, (unsigned char *) toto2);
353         for (m=0; m< 16; m++) {printf("%c ", toto2[m]);}
354         printf("\n");
355 }
356
357   v_c1   = vec_mergeh ((vector unsigned char) v_zero, v_c1);
358   tmp1   = (vector signed short) vec_add (tmp1, (vector signed short) v_c1); 
359
360 if (1){
361         vector unsigned char vres = 
362         (vector unsigned char){'a','1','b','2','c','3','d','4','e','5','f','6','g','7','h','8'};
363         unsigned char toto2[16] __attribute__((aligned(16)));
364         int m;
365         
366         printf("vc1\n");
367         vec_st(v_c1, 0, (unsigned char *) toto2);
368         for (m=0; m<16;m++) {printf("%c ", toto2[m]);}
369         printf("\n");
370         if (!vec_all_eq (vres, v_c1))
371           abort();
372 }
373
374   v_pocl = vec_ld (32, (vector unsigned char *) mv_const);
375   v_poch = vec_ld (48, (vector unsigned char *) mv_const);
376   tmp2   = (vector signed short) vec_perm (v_pocl, v_poch, (vector unsigned char) tmp1);      
377
378   v_pocl = vec_ld (0,  (vector unsigned char *) mv_const);
379   v_poch = vec_ld (16, (vector unsigned char *) mv_const);
380
381   tmp1   = (vector signed short) vec_perm (v_pocl, v_poch, (vector unsigned char) tmp1);
382  
383   tmp1   = vec_sel (tmp1, tmp2, (vector unsigned short) {0xffff,0xffff,0,0,0,0,0,0});
384
385
386   tmp3   = (vector signed short) vec_splat ((vector unsigned char) idx0, 12);
387   v_c1   = (vector unsigned char) vec_nor (v_zero, v_zero);
388   tmp0   = (vector signed short) vec_cmpeq ((vector signed char) idx0, (vector signed char) v_c1);
389   tmp1   = vec_sel (tmp1, (vector signed short) tmp3, (vector unsigned short) tmp0);
390
391   tmp2   = vec_sld (tmp1, tmp1, 15);
392   tmp1   = (vector signed short) vec_pack (tmp2, tmp1);
393   
394
395   tmp2   = vec_sld (tmp1, tmp1, 2);
396   tmp3   = vec_sld (tmp1, tmp1, 10);
397
398   tmp0   = (vector signed short) vec_cmpeq ((vector signed char) tmp1, (vector signed char) tmp2);
399   tmp4   = (vector signed short) vec_cmpeq ((vector signed char) tmp1, (vector signed char) tmp3);
400   tmp1   = (vector signed short) vec_cmpeq ((vector signed char) tmp2, (vector signed char) tmp3);
401   tmp0   = vec_and (tmp0, v8);
402   tmp4   = vec_and (tmp4, v9);
403   tmp1   = vec_and (tmp1, v10);
404   tmp2   = vec_sld ((vector signed short) tmp0, (vector signed short) tmp0, 8);
405   tmp3   = vec_sld ((vector signed short) tmp4, (vector signed short) tmp4, 8);
406   tmp5   = vec_sld ((vector signed short) tmp1, (vector signed short) tmp1, 8);
407   tmp0   = vec_and (tmp0, tmp2);
408   tmp4   = vec_and (tmp4, tmp3);
409   tmp1   = vec_and (tmp1, tmp5);
410   v_ref_mask00 = vec_mergeh ((vector signed short) tmp0, (vector signed short) v_c1);
411   v_ref_mask01 = vec_mergeh ((vector signed short) tmp4, (vector signed short) tmp1);
412   v_ref_mask00 = (vector signed short) vec_mergeh ((vector unsigned char) v_ref_mask00, (vector unsigned char) v_ref_mask00);
413   v_ref_mask01 = (vector signed short) vec_mergeh ((vector unsigned char) v_ref_mask01, (vector unsigned char) v_ref_mask01);
414   
415
416   v_permv= vec_ld (0, (vector unsigned char *) mv_const);
417   v8     = vec_ld (0,  (vector signed short *) mv_const);
418   v9     = vec_ld (16, (vector signed short *) mv_const);
419   tmp2   = vec_perm (v0, v0, v_permv);
420   tmp3   = vec_sub (vec_max (v8, v0), vec_min (v8, v0));
421   tmp4   = vec_sub (vec_max (v8, tmp2), vec_min (v8, tmp2));
422   tmp3   = (vector signed short) vec_cmpgt (tmp3, v_three); 
423   tmp4   = (vector signed short) vec_cmpgt (tmp4, v_three);
424   tmp5   = vec_sld (tmp3, tmp3, 14);
425   tmp6   = vec_sld (tmp4, tmp4, 14);
426   tmp3   = vec_or (tmp3, tmp5);
427   tmp4   = vec_or (tmp4, tmp6);
428   
429   tmp2   = vec_perm (v2, v2, v_permv);
430   tmp5   = vec_sub (vec_max (v9, v2), vec_min (v9, v2));
431   tmp6   = vec_sub (vec_max (v9, tmp2), vec_min (v9, tmp2));
432   tmp5   = (vector signed short) vec_cmpgt (tmp5, v_three); 
433   tmp6   = (vector signed short) vec_cmpgt (tmp6, v_three);
434   tmp0   = vec_sld (tmp5, tmp5, 14);
435   tmp1   = vec_sld (tmp6, tmp6, 14);
436   tmp5   = vec_or (tmp0, tmp5);
437   tmp6   = vec_or (tmp1, tmp6);
438   
439   tmp3   = (vector signed short) vec_pack ((vector unsigned int) tmp3, (vector unsigned int) tmp5);
440   tmp4   = (vector signed short) vec_pack ((vector unsigned int) tmp4, (vector unsigned int) tmp6);
441   tmp5   = vec_sld (tmp3, tmp3, 14);
442   tmp6   = vec_sld (tmp4, tmp4, 14);
443   tmp3   = vec_or (tmp3, tmp5);
444   tmp4   = vec_or (tmp4, tmp6);
445   tmp00  = (vector signed short) vec_pack ((vector unsigned int) tmp3, (vector unsigned int) tmp4);
446
447   tmp2   = vec_perm (v1, v1, v_permv);
448   tmp3   = vec_sub (vec_max (v0, v1), vec_min (v0, v1));
449   tmp4   = vec_sub (vec_max (v0, tmp2), vec_min (v0, tmp2));
450   tmp3   = (vector signed short) vec_cmpgt (tmp3, v_three); 
451   tmp4   = (vector signed short) vec_cmpgt (tmp4, v_three);
452   tmp5   = vec_sld (tmp3, tmp3, 14);
453   tmp6   = vec_sld (tmp4, tmp4, 14);
454   tmp3   = vec_or (tmp3, tmp5);
455   tmp4   = vec_or (tmp4, tmp6);
456   
457   tmp2   = vec_perm (v3, v3, v_permv);
458   tmp5   = vec_sub (vec_max (v2, v3), vec_min (v2, v3));
459   tmp6   = vec_sub (vec_max (v2, tmp2), vec_min (v2, tmp2));
460   tmp5   = (vector signed short) vec_cmpgt (tmp5, v_three); 
461   tmp6   = (vector signed short) vec_cmpgt (tmp6, v_three);
462   tmp0   = vec_sld (tmp5, tmp5, 14);
463   tmp1   = vec_sld (tmp6, tmp6, 14);
464   tmp5   = vec_or (tmp0, tmp5);
465   tmp6   = vec_or (tmp1, tmp6);
466   
467   tmp3   = (vector signed short) vec_pack ((vector unsigned int) tmp3, (vector unsigned int) tmp5);
468   tmp4   = (vector signed short) vec_pack ((vector unsigned int) tmp4, (vector unsigned int) tmp6);
469   tmp5   = vec_sld (tmp3, tmp3, 14);
470   tmp6   = vec_sld (tmp4, tmp4, 14);
471   tmp3   = vec_or (tmp3, tmp5);
472   tmp4   = vec_or (tmp4, tmp6);
473   tmp01  = (vector signed short) vec_pack ((vector unsigned int) tmp3, (vector unsigned int) tmp4);
474
475   tmp2   = vec_perm (v4, v4, v_permv);
476   tmp3   = vec_sub (vec_max (v1, v4), vec_min (v1, v4));
477   tmp4   = vec_sub (vec_max (v1, tmp2), vec_min (v1, tmp2));
478   tmp3   = (vector signed short) vec_cmpgt (tmp3, v_three); 
479   tmp4   = (vector signed short) vec_cmpgt (tmp4, v_three);
480   tmp5   = vec_sld (tmp3, tmp3, 14);
481   tmp6   = vec_sld (tmp4, tmp4, 14);
482   tmp3   = vec_or (tmp3, tmp5);
483   tmp4   = vec_or (tmp4, tmp6);
484   
485   tmp2   = vec_perm (v6, v6, v_permv);
486   tmp5   = vec_sub (vec_max (v3, v6), vec_min (v3, v6));
487   tmp6   = vec_sub (vec_max (v3, tmp2), vec_min (v3, tmp2));
488   tmp5   = (vector signed short) vec_cmpgt (tmp5, v_three); 
489   tmp6   = (vector signed short) vec_cmpgt (tmp6, v_three);
490   tmp0   = vec_sld (tmp5, tmp5, 14);
491   tmp1   = vec_sld (tmp6, tmp6, 14);
492   tmp5   = vec_or (tmp0, tmp5);
493   tmp6   = vec_or (tmp1, tmp6);
494   
495   tmp3   = (vector signed short) vec_pack ((vector unsigned int) tmp3, (vector unsigned int) tmp5);
496   tmp4   = (vector signed short) vec_pack ((vector unsigned int) tmp4, (vector unsigned int) tmp6);
497   tmp5   = vec_sld (tmp3, tmp3, 14);
498   tmp6   = vec_sld (tmp4, tmp4, 14);
499   tmp3   = vec_or (tmp3, tmp5);
500   tmp4   = vec_or (tmp4, tmp6);
501   tmp02  = (vector signed short) vec_pack ((vector unsigned int) tmp3, (vector unsigned int) tmp4);
502
503
504   tmp2   = vec_perm (v5, v5, v_permv);
505   tmp3   = vec_sub (vec_max (v4, v5), vec_min (v4, v5));
506   tmp4   = vec_sub (vec_max (v4, tmp2), vec_min (v4, tmp2));
507   tmp3   = (vector signed short) vec_cmpgt (tmp3, v_three); 
508   tmp4   = (vector signed short) vec_cmpgt (tmp4, v_three);
509   tmp5   = vec_sld (tmp3, tmp3, 14);
510   tmp6   = vec_sld (tmp4, tmp4, 14);
511   tmp3   = vec_or (tmp3, tmp5);
512   tmp4   = vec_or (tmp4, tmp6);
513   
514   tmp2   = vec_perm (v7, v7, v_permv);
515   tmp5   = vec_sub (vec_max (v6, v7), vec_min (v6, v7));
516   tmp6   = vec_sub (vec_max (v6, tmp2), vec_min (v6, tmp2));
517   tmp5   = (vector signed short) vec_cmpgt (tmp5, v_three); 
518   tmp6   = (vector signed short) vec_cmpgt (tmp6, v_three);
519   tmp0   = vec_sld (tmp5, tmp5, 14);
520   tmp1   = vec_sld (tmp6, tmp6, 14);
521   tmp5   = vec_or (tmp0, tmp5);
522   tmp6   = vec_or (tmp1, tmp6);
523   
524   tmp3   = (vector signed short) vec_pack ((vector unsigned int) tmp3, (vector unsigned int) tmp5);
525   tmp4   = (vector signed short) vec_pack ((vector unsigned int) tmp4, (vector unsigned int) tmp6);
526   tmp5   = vec_sld (tmp3, tmp3, 14);
527   tmp6   = vec_sld (tmp4, tmp4, 14);
528   tmp3   = vec_or (tmp3, tmp5);
529   tmp4   = vec_or (tmp4, tmp6);
530   tmp03  = (vector signed short) vec_pack ((vector unsigned int) tmp3, (vector unsigned int) tmp4);
531
532   tmp0   = (vector signed short) vec_pack ((vector unsigned short) tmp00, (vector unsigned short) tmp01);
533   tmp1   = (vector signed short) vec_pack ((vector unsigned short) tmp02, (vector unsigned short) tmp03);
534   tmp2   = (vector signed short) vec_mergeh ((vector signed int) tmp0, (vector signed int) tmp1);
535   tmp3   = (vector signed short) vec_mergel ((vector signed int) tmp0, (vector signed int) tmp1);
536   tmp4   = (vector signed short) vec_mergeh ((vector signed int) tmp2, (vector signed int) tmp3);
537   tmp5   = (vector signed short) vec_mergel ((vector signed int) tmp2, (vector signed int) tmp3);
538   tmp4   = vec_and (v_ref_mask00, tmp4);
539   tmp5   = vec_and (v_ref_mask01, tmp5);
540
541   tmp0   = vec_nor (v_ref_mask00, v_ref_mask01);
542   tmp1   = vec_and (v_ref_mask00, v_ref_mask01);
543   tmp2   = vec_and (tmp4, tmp5);
544   tmp2   = vec_and (tmp2, tmp1);
545   tmp3   = vec_nor (tmp4, tmp5);
546   tmp3   = vec_nor (tmp3, tmp1);
547   v_vec_maskh = vec_or (tmp0, tmp2);
548   v_vec_maskh = vec_or (v_vec_maskh, tmp3);
549
550
551   v_intra_maskvn = vec_nor (v_intra_maskv, v_intra_maskv);
552   v_intra_maskhn = vec_nor (v_intra_maskh, v_intra_maskh);
553   v_cbp_maskvn = (vector unsigned char) vec_cmpeq ((vector unsigned char) v_cbp_maskv, (vector unsigned char) v_zero);
554   v_cbp_maskhn = (vector unsigned char) vec_cmpeq ((vector unsigned char) v_cbp_maskh, (vector unsigned char) v_zero);
555
556   v_cbp_maskv  = vec_and (v_cbp_maskv, v_intra_maskvn);
557   v_cbp_maskh  = vec_and (v_cbp_maskh, v_intra_maskhn);
558   v_vec_maskv  = vec_and (v_vec_maskv, (vector signed short) v_intra_maskvn);
559   v_vec_maskv  = vec_and (v_vec_maskv, (vector signed short) v_cbp_maskvn);
560   v_vec_maskh  = vec_and (v_vec_maskh, (vector signed short) v_intra_maskhn);
561   v_vec_maskh  = vec_and (v_vec_maskh, (vector signed short) v_cbp_maskhn);
562
563   tmp9        = vec_splat_u8(2);
564   tmp8        = vec_splat_u8(1);
565   v_bS        = vec_ld (0, (vector unsigned char *) mv_const);
566   
567   v_bSv       = vec_and ((vector unsigned char) v_bS, (vector unsigned char)v_intra_maskv);
568   tmp7        = vec_and ((vector unsigned char)tmp9, (vector unsigned char)v_cbp_maskv);
569   tmp6        = (vector signed short) vec_and ((vector unsigned char)tmp8, (vector unsigned char)v_vec_maskv);
570   tmp7        = vec_or  ((vector unsigned char)tmp7, (vector unsigned char)tmp6);
571   v_bSv       = vec_or  ((vector unsigned char)tmp7, (vector unsigned char)v_bSv);
572
573   v_bS        = vec_ld (0, (vector unsigned char *) mv_const);
574   v_bSh       = vec_and ((vector unsigned char) v_bS, (vector unsigned char)v_intra_maskh);
575   tmp7        = vec_and ((vector unsigned char)tmp9, (vector unsigned char)v_cbp_maskh);
576   tmp6        = (vector signed short) vec_and ((vector unsigned char)tmp8, (vector unsigned char)v_vec_maskh);
577   tmp7        = vec_or  ((vector unsigned char)tmp7, (vector unsigned char)tmp6);
578   v_bSh       = vec_or  ((vector unsigned char)tmp7, (vector unsigned char)v_bSh);
579
580   v_permh     = (vector unsigned char) vec_ld (0 , (vector unsigned char *) mv_const);
581   v_permv     = (vector unsigned char) vec_ld (0, (vector unsigned char *) mv_const);
582   v_bSv       = vec_and (v_bSv, v_permv);
583   v_bSh       = vec_and (v_bSh, v_permh);
584
585   vec_st (v_bSv, 0, (unsigned char *) mv_const);
586   vec_st (v_bSh, 0, (unsigned char *) mv_const);
587
588   v_bSv = vec_mergeh (v_bSv, v_bSv);
589   v_bSv = vec_mergeh (v_bSv, v_bSv);
590   v_bSh = vec_mergeh (v_bSh, v_bSh);
591   v_bSh = vec_mergeh (v_bSh, v_bSh);
592     
593   vec_st (v_bSv, 0, (vector unsigned char *) mv_const);
594   vec_st (v_bSh, 0,(vector unsigned char *) mv_const);
595 }
596
597
598 int main(int argc, char **argv)
599 {
600     char toto[32] __attribute__((aligned(16)));
601
602     altivec_check ();   /* Exit if hardware doesn't support AltiVec.  */
603     foo(toto, toto, 0, 0);
604     return 0;
605 }