comparison postprocess_altivec_template.c @ 102:eeb4558c950a libpostproc

Remove declarations after statements from doVertDefFilter_altivec
author lu_zero
date Sun, 23 Mar 2008 15:39:39 +0000
parents db57626d7d76
children 53295ae2d45e
comparison
equal deleted inserted replaced
101:db57626d7d76 102:eeb4558c950a
415 vector by assuming (stride % 16) == 0, unfortunately 415 vector by assuming (stride % 16) == 0, unfortunately
416 this is not always true. Quite a lot of load/stores 416 this is not always true. Quite a lot of load/stores
417 can be removed by assuming proper alignment of 417 can be removed by assuming proper alignment of
418 src & stride :-( 418 src & stride :-(
419 */ 419 */
420 uint8_t *src2 = src; 420 uint8_t *src2 = src + stride*3;
421 const vector signed int zero = vec_splat_s32(0); 421 const vector signed int zero = vec_splat_s32(0);
422 DECLARE_ALIGNED(16, short, qp[8]); 422 DECLARE_ALIGNED(16, short, qp[8]) = {8*c->QP};
423 qp[0] = 8*c->QP; 423 vector signed short vqp = vec_splat(
424 vector signed short vqp = vec_ld(0, qp); 424 (vector signed short)vec_ld(0, qp), 0);
425 vqp = vec_splat(vqp, 0);
426 425
427 #define LOAD_LINE(i) \ 426 #define LOAD_LINE(i) \
428 const vector unsigned char perm##i = \ 427 const vector unsigned char perm##i = \
429 vec_lvsl(i * stride, src2); \ 428 vec_lvsl(i * stride, src2); \
430 const vector unsigned char vbA##i = \ 429 const vector unsigned char vbA##i = \
434 const vector unsigned char vbT##i = \ 433 const vector unsigned char vbT##i = \
435 vec_perm(vbA##i, vbB##i, perm##i); \ 434 vec_perm(vbA##i, vbB##i, perm##i); \
436 const vector signed short vb##i = \ 435 const vector signed short vb##i = \
437 (vector signed short)vec_mergeh((vector unsigned char)zero, \ 436 (vector signed short)vec_mergeh((vector unsigned char)zero, \
438 (vector unsigned char)vbT##i) 437 (vector unsigned char)vbT##i)
439
440 src2 += stride*3;
441 438
442 LOAD_LINE(1); 439 LOAD_LINE(1);
443 LOAD_LINE(2); 440 LOAD_LINE(2);
444 LOAD_LINE(3); 441 LOAD_LINE(3);
445 LOAD_LINE(4); 442 LOAD_LINE(4);
511 const vector signed char neg1 = vec_splat_s8(-1); 508 const vector signed char neg1 = vec_splat_s8(-1);
512 const vector unsigned char permHH = (const vector unsigned char)AVV(0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 509 const vector unsigned char permHH = (const vector unsigned char)AVV(0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
513 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F); 510 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F);
514 511
515 #define STORE(i) \ 512 #define STORE(i) \
516 const vector unsigned char perms##i = \ 513 { const vector unsigned char perms##i = \
517 vec_lvsr(i * stride, src2); \ 514 vec_lvsr(i * stride, src2); \
518 const vector unsigned char vg##i = \ 515 const vector unsigned char vg##i = \
519 vec_perm(st##i, vbT##i, permHH); \ 516 vec_perm(st##i, vbT##i, permHH); \
520 const vector unsigned char mask##i = \ 517 const vector unsigned char mask##i = \
521 vec_perm((vector unsigned char)zero, (vector unsigned char)neg1, perms##i); \ 518 vec_perm((vector unsigned char)zero, (vector unsigned char)neg1, perms##i); \
524 const vector unsigned char svA##i = \ 521 const vector unsigned char svA##i = \
525 vec_sel(vbA##i, vg2##i, mask##i); \ 522 vec_sel(vbA##i, vg2##i, mask##i); \
526 const vector unsigned char svB##i = \ 523 const vector unsigned char svB##i = \
527 vec_sel(vg2##i, vbB##i, mask##i); \ 524 vec_sel(vg2##i, vbB##i, mask##i); \
528 vec_st(svA##i, i * stride, src2); \ 525 vec_st(svA##i, i * stride, src2); \
529 vec_st(svB##i, i * stride + 16, src2) 526 vec_st(svB##i, i * stride + 16, src2);}
530 527
531 STORE(4); 528 STORE(4)
532 STORE(5); 529 STORE(5)
533 } 530 }
534 531
535 static inline void dering_altivec(uint8_t src[], int stride, PPContext *c) { 532 static inline void dering_altivec(uint8_t src[], int stride, PPContext *c) {
536 /* 533 /*
537 this code makes no assumption on src or stride. 534 this code makes no assumption on src or stride.