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