Update concepts branch to revision 131834
[official-gcc.git] / gcc / testsuite / gcc.target / powerpc / altivec-vec-merge.c
blobe6027bdeff845a7f26e945bb85fa5e202f92e2a5
1 /* { dg-do run { target powerpc*-*-* } } */
2 /* { dg-require-effective-target powerpc_altivec_ok } */
3 /* { dg-options "-maltivec -O2" } */
5 #include <altivec.h>
6 #include "altivec_check.h"
8 int printf(const char * , ...);
9 extern void abort();
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);
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);
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);
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;
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'};
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);
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);
98 else {
99 v4 = v5 = v6 = (vector signed short) 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);
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;
315 intra[13] = 0;
316 intra[14] = 0;
317 intra[15] = 0;
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'};
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);
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);
337 else {
338 v8 = v9 = v10 = (vector signed short) vec_nor (v_zero, v_zero);
341 tmp1 = (vector signed short) vec_sl ((vector unsigned char) idx0, v_c1);
343 if (1){
344 int m;
345 unsigned char toto2[16] __attribute__((aligned(16)));
347 printf("vc1\n");
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]);}
355 printf("\n");
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);
361 if (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;
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();
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);
605 return 0;