View | Details | Raw Unified | Return to bug 247375
Collapse All | Expand All

(-)files/patch-libswscale_ppc_yuv2rgb__altivec.c (+43 lines)
Line 0 Link Here
1
--- libswscale/ppc/yuv2rgb_altivec.c.orig	2020-06-15 18:54:24 UTC
2
+++ libswscale/ppc/yuv2rgb_altivec.c
3
@@ -305,6 +305,9 @@ static int altivec_ ## name(SwsContext *c, const unsig
4
     vector signed short R1, G1, B1;                                           \
5
     vector unsigned char R, G, B;                                             \
6
                                                                               \
7
+    const vector unsigned char *y1ivP, *y2ivP, *uivP, *vivP;                  \
8
+    vector unsigned char align_perm;                                          \
9
+                                                                              \
10
     vector signed short lCY       = c->CY;                                    \
11
     vector signed short lOY       = c->OY;                                    \
12
     vector signed short lCRV      = c->CRV;                                   \
13
@@ -335,13 +338,26 @@ static int altivec_ ## name(SwsContext *c, const unsig
14
         vec_dstst(oute, (0x02000002 | (((w * 3 + 32) / 32) << 16)), 1);       \
15
                                                                               \
16
         for (j = 0; j < w / 16; j++) {                                        \
17
-            y0 = vec_xl(0, y1i);                                              \
18
+            y1ivP = (const vector unsigned char *) y1i;                       \
19
+            y2ivP = (const vector unsigned char *) y2i;                       \
20
+            uivP  = (const vector unsigned char *) ui;                        \
21
+            vivP  = (const vector unsigned char *) vi;                        \
22
                                                                               \
23
-            y1 = vec_xl(0, y2i);                                              \
24
+            align_perm = vec_lvsl(0, y1i);                                    \
25
+            y0 = (vector unsigned char)                                       \
26
+                     vec_perm(y1ivP[0], y1ivP[1], align_perm);                \
27
                                                                               \
28
-            u = (vector signed char) vec_xl(0, ui);                           \
29
+            align_perm = vec_lvsl(0, y2i);                                    \
30
+            y1 = (vector unsigned char)                                       \
31
+                     vec_perm(y2ivP[0], y2ivP[1], align_perm);                \
32
                                                                               \
33
-            v = (vector signed char) vec_xl(0, vi);                           \
34
+            align_perm = vec_lvsl(0, ui);                                     \
35
+            u = (vector signed char)                                          \
36
+                    vec_perm(uivP[0], uivP[1], align_perm);                   \
37
+                                                                              \
38
+            align_perm = vec_lvsl(0, vi);                                     \
39
+            v = (vector signed char)                                          \
40
+                    vec_perm(vivP[0], vivP[1], align_perm);                   \
41
                                                                               \
42
             u = (vector signed char)                                          \
43
                     vec_sub(u,                                                \

Return to bug 247375