comparison ppc/dsputil_altivec.c @ 8307:bf5bc1f4cba0 libavcodec

add Altivec implementation of clear_block
author gpoirier
date Fri, 12 Dec 2008 09:59:00 +0000
parents 266d4949aa15
children 68e959302527
comparison
equal deleted inserted replaced
8306:ddecbc18fe94 8307:bf5bc1f4cba0
24 24
25 #include "gcc_fixes.h" 25 #include "gcc_fixes.h"
26 26
27 #include "dsputil_ppc.h" 27 #include "dsputil_ppc.h"
28 #include "util_altivec.h" 28 #include "util_altivec.h"
29 #include "types_altivec.h"
29 30
30 int sad16_x2_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h) 31 int sad16_x2_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h)
31 { 32 {
32 int i; 33 int i;
33 DECLARE_ALIGNED_16(int, s); 34 DECLARE_ALIGNED_16(int, s);
570 s1 += stride; 571 s1 += stride;
571 s2 += stride; 572 s2 += stride;
572 block += 8; 573 block += 8;
573 } 574 }
574 } 575 }
576
577
578 static void clear_block_altivec(DCTELEM *block) {
579 LOAD_ZERO;
580 vec_st(zero_s16v, 0, block);
581 vec_st(zero_s16v, 16, block);
582 vec_st(zero_s16v, 32, block);
583 vec_st(zero_s16v, 48, block);
584 vec_st(zero_s16v, 64, block);
585 vec_st(zero_s16v, 80, block);
586 vec_st(zero_s16v, 96, block);
587 vec_st(zero_s16v, 112, block);
588 }
589
575 590
576 void add_bytes_altivec(uint8_t *dst, uint8_t *src, int w) { 591 void add_bytes_altivec(uint8_t *dst, uint8_t *src, int w) {
577 register int i; 592 register int i;
578 register vector unsigned char vdst, vsrc; 593 register vector unsigned char vdst, vsrc;
579 594
1418 c->sse[1]= sse8_altivec; 1433 c->sse[1]= sse8_altivec;
1419 c->sse[0]= sse16_altivec; 1434 c->sse[0]= sse16_altivec;
1420 c->pix_sum = pix_sum_altivec; 1435 c->pix_sum = pix_sum_altivec;
1421 c->diff_pixels = diff_pixels_altivec; 1436 c->diff_pixels = diff_pixels_altivec;
1422 c->get_pixels = get_pixels_altivec; 1437 c->get_pixels = get_pixels_altivec;
1438 c->clear_block = clear_block_altivec;
1423 c->add_bytes= add_bytes_altivec; 1439 c->add_bytes= add_bytes_altivec;
1424 c->put_pixels_tab[0][0] = put_pixels16_altivec; 1440 c->put_pixels_tab[0][0] = put_pixels16_altivec;
1425 /* the two functions do the same thing, so use the same code */ 1441 /* the two functions do the same thing, so use the same code */
1426 c->put_no_rnd_pixels_tab[0][0] = put_pixels16_altivec; 1442 c->put_no_rnd_pixels_tab[0][0] = put_pixels16_altivec;
1427 c->avg_pixels_tab[0][0] = avg_pixels16_altivec; 1443 c->avg_pixels_tab[0][0] = avg_pixels16_altivec;