summaryrefslogtreecommitdiff
path: root/src/libmpeg2/idct_altivec.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libmpeg2/idct_altivec.c')
-rw-r--r--src/libmpeg2/idct_altivec.c35
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__ */
+
+