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, \ |