void-packages/srcpkgs/ffmpeg/files/altivec.patch
2020-07-24 20:59:46 +02:00

60 lines
3.9 KiB
Diff

revert some altivec specific change on all ppc* except ppc64le*
q66: "We should also throw in a revert of FFmpeg/FFmpeg@3a557c5 but only
conditionally, for ppc* but not ppc64le* (the new code is valid for
POWER8 VSX which LE targets as a baseline but not BE)"
This reverts commit 3a557c5d88b7b15b5954ba2743febb055549b536.
---
libswscale/ppc/yuv2rgb_altivec.c | 24 ++++++++++++++++++++----
1 file changed, 20 insertions(+), 4 deletions(-)
diff --git a/libswscale/ppc/yuv2rgb_altivec.c b/libswscale/ppc/yuv2rgb_altivec.c
index 536545293d..c1e2852adb 100644
--- a/libswscale/ppc/yuv2rgb_altivec.c
+++ b/libswscale/ppc/yuv2rgb_altivec.c
@@ -305,6 +305,9 @@ static int altivec_ ## name(SwsContext *c, const unsigned char **in, \
vector signed short R1, G1, B1; \
vector unsigned char R, G, B; \
\
+ const vector unsigned char *y1ivP, *y2ivP, *uivP, *vivP; \
+ vector unsigned char align_perm; \
+ \
vector signed short lCY = c->CY; \
vector signed short lOY = c->OY; \
vector signed short lCRV = c->CRV; \
@@ -335,13 +338,26 @@ static int altivec_ ## name(SwsContext *c, const unsigned char **in, \
vec_dstst(oute, (0x02000002 | (((w * 3 + 32) / 32) << 16)), 1); \
\
for (j = 0; j < w / 16; j++) { \
- y0 = vec_xl(0, y1i); \
+ y1ivP = (const vector unsigned char *) y1i; \
+ y2ivP = (const vector unsigned char *) y2i; \
+ uivP = (const vector unsigned char *) ui; \
+ vivP = (const vector unsigned char *) vi; \
+ \
+ align_perm = vec_lvsl(0, y1i); \
+ y0 = (vector unsigned char) \
+ vec_perm(y1ivP[0], y1ivP[1], align_perm); \
\
- y1 = vec_xl(0, y2i); \
+ align_perm = vec_lvsl(0, y2i); \
+ y1 = (vector unsigned char) \
+ vec_perm(y2ivP[0], y2ivP[1], align_perm); \
\
- u = (vector signed char) vec_xl(0, ui); \
+ align_perm = vec_lvsl(0, ui); \
+ u = (vector signed char) \
+ vec_perm(uivP[0], uivP[1], align_perm); \
\
- v = (vector signed char) vec_xl(0, vi); \
+ align_perm = vec_lvsl(0, vi); \
+ v = (vector signed char) \
+ vec_perm(vivP[0], vivP[1], align_perm); \
\
u = (vector signed char) \
vec_sub(u, \
--
2.27.0