diff options
Diffstat (limited to 'src/libmpeg2/idct_altivec.c')
-rw-r--r-- | src/libmpeg2/idct_altivec.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/libmpeg2/idct_altivec.c b/src/libmpeg2/idct_altivec.c index 1d20f56b4..b982238e7 100644 --- a/src/libmpeg2/idct_altivec.c +++ b/src/libmpeg2/idct_altivec.c @@ -243,6 +243,22 @@ void mpeg2_idct_copy_altivec (int16_t * block, uint8_t * dest, int stride) "# lwz %r0, 132(%r1) \n" "# mtlr %r0 \n" "# la %r1, 128(%r1) \n" + " vxor %v1, %v1, %v1 \n" + " addi %r9, %r3, 16 \n" + " stvx %v1, 0, %r3 \n" + " stvx %v1, 0, %r9 \n" + " addi %r11, %r3, 32 \n" + " stvx %v1, 0, %r11 \n" + " addi %r9, %r3, 48 \n" + " stvx %v1, 0, %r9 \n" + " addi %r11, %r3, -64 \n" + " stvx %v1, 0, %r11 \n" + " addi %r9, %r3, -48 \n" + " stvx %v1, 0, %r9 \n" + " addi %r11, %r3, -32 \n" + " stvx %v1, 0, %r11 \n" + " addi %r3, %r3, -16 \n" + " stvx %v1, 0, %r3 \n" ); } @@ -463,6 +479,21 @@ void mpeg2_idct_add_altivec (int16_t * block, uint8_t * dest, int stride) "# lwz %r0, 196(%r1) \n" "# mtlr %r0 \n" "# la %r1, 192(%r1) \n" + " addi %r9, %r3, 16 \n" + " stvx %v1, 0, %r3 \n" + " stvx %v1, 0, %r9 \n" + " addi %r11, %r3, 32 \n" + " stvx %v1, 0, %r11 \n" + " addi %r9, %r3, 48 \n" + " stvx %v1, 0, %r9 \n" + " addi %r11, %r3, -64 \n" + " stvx %v1, 0, %r11 \n" + " addi %r9, %r3, -48 \n" + " stvx %v1, 0, %r9 \n" + " addi %r11, %r3, -32 \n" + " stvx %v1, 0, %r11 \n" + " addi %r3, %r3, -16 \n" + " stvx %v1, 0, %r3 \n" ); } @@ -625,6 +656,7 @@ void mpeg2_idct_copy_altivec (vector_s16_t * block, unsigned char * dest, COPY (dest, vx5) dest += stride; COPY (dest, vx6) dest += stride; COPY (dest, vx7) + memset (block, 0, 64 * sizeof (signed short)); } void mpeg2_idct_add_altivec (vector_s16_t * block, unsigned char * dest, @@ -661,6 +693,9 @@ void mpeg2_idct_add_altivec (vector_s16_t * block, unsigned char * dest, ADD (dest, vx5, perm1) dest += stride; ADD (dest, vx6, perm0) dest += stride; ADD (dest, vx7, perm1) + memset (block, 0, 64 * sizeof (signed short)); } #endif /* __ALTIVEC__ */ + + |