Mercurial > libavcodec.hg
annotate ppc/dsputil_altivec.c @ 11837:bba34e33081d libavcodec
Cleanup apply_window_and_mdct().
author | alexc |
---|---|
date | Sat, 05 Jun 2010 19:41:52 +0000 |
parents | 50415a8f1451 |
children | 3cd4cd0509cd |
rev | line source |
---|---|
828
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
1 /* |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
2 * Copyright (c) 2002 Brian Foley |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
3 * Copyright (c) 2002 Dieter Shirley |
1949
66215baae7b9
hadamard8_diff8x8 in AltiVec, the 16bits edition by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1839
diff
changeset
|
4 * Copyright (c) 2003-2004 Romain Dolbeau <romain@dolbeau.org> |
828
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
5 * |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3572
diff
changeset
|
6 * This file is part of FFmpeg. |
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3572
diff
changeset
|
7 * |
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3572
diff
changeset
|
8 * FFmpeg is free software; you can redistribute it and/or |
828
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
9 * modify it under the terms of the GNU Lesser General Public |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
10 * License as published by the Free Software Foundation; either |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3572
diff
changeset
|
11 * version 2.1 of the License, or (at your option) any later version. |
828
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
12 * |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3572
diff
changeset
|
13 * FFmpeg is distributed in the hope that it will be useful, |
828
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
16 * Lesser General Public License for more details. |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
17 * |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
18 * You should have received a copy of the GNU Lesser General Public |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3572
diff
changeset
|
19 * License along with FFmpeg; if not, write to the Free Software |
3036
0b546eab515d
Update licensing information: The FSF changed postal address.
diego
parents:
2979
diff
changeset
|
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
828
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
21 */ |
2967 | 22 |
9421
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
23 #include "config.h" |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
24 #if HAVE_ALTIVEC_H |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
25 #include <altivec.h> |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
26 #endif |
6763 | 27 #include "libavcodec/dsputil.h" |
6105
33674fb857b5
Change some files to only include the necessary headers.
diego
parents:
5964
diff
changeset
|
28 #include "dsputil_ppc.h" |
5750
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
5749
diff
changeset
|
29 #include "util_altivec.h" |
8307 | 30 #include "types_altivec.h" |
11382
50415a8f1451
PPC: move prototypes to headers and make some functions static
mru
parents:
10082
diff
changeset
|
31 #include "dsputil_altivec.h" |
623
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
32 |
11382
50415a8f1451
PPC: move prototypes to headers and make some functions static
mru
parents:
10082
diff
changeset
|
33 static int sad16_x2_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h) |
878
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
34 { |
981 | 35 int i; |
10082 | 36 int s; |
5746
55ed6dc5d476
Remove const vector macro indirection that is useless and obfuscating
diego
parents:
5609
diff
changeset
|
37 const vector unsigned char zero = (const vector unsigned char)vec_splat_u8(0); |
981 | 38 vector unsigned char *tv; |
878
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
39 vector unsigned char pix1v, pix2v, pix2iv, avgv, t5; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
40 vector unsigned int sad; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
41 vector signed int sumdiffs; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
42 |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
43 s = 0; |
1033
b4172ff70d27
Altivec on non darwin systems patch by Romain Dolbeau
bellard
parents:
1024
diff
changeset
|
44 sad = (vector unsigned int)vec_splat_u32(0); |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
45 for (i = 0; i < h; i++) { |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
46 /* Read unaligned pixels into our vectors. The vectors are as follows: |
878
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
47 pix1v: pix1[0]-pix1[15] |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
48 pix2v: pix2[0]-pix2[15] pix2iv: pix2[1]-pix2[16] */ |
878
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
49 tv = (vector unsigned char *) pix1; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
50 pix1v = vec_perm(tv[0], tv[1], vec_lvsl(0, pix1)); |
2967 | 51 |
878
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
52 tv = (vector unsigned char *) &pix2[0]; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
53 pix2v = vec_perm(tv[0], tv[1], vec_lvsl(0, &pix2[0])); |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
54 |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
55 tv = (vector unsigned char *) &pix2[1]; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
56 pix2iv = vec_perm(tv[0], tv[1], vec_lvsl(0, &pix2[1])); |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
57 |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
58 /* Calculate the average vector */ |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
59 avgv = vec_avg(pix2v, pix2iv); |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
60 |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
61 /* Calculate a sum of abs differences vector */ |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
62 t5 = vec_sub(vec_max(pix1v, avgv), vec_min(pix1v, avgv)); |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
63 |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
64 /* Add each 4 pixel group together and put 4 results into sad */ |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
65 sad = vec_sum4s(t5, sad); |
2967 | 66 |
878
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
67 pix1 += line_size; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
68 pix2 += line_size; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
69 } |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
70 /* Sum up the four partial sums, and put the result into s */ |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
71 sumdiffs = vec_sums((vector signed int) sad, (vector signed int) zero); |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
72 sumdiffs = vec_splat(sumdiffs, 3); |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
73 vec_ste(sumdiffs, 0, &s); |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
74 |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
75 return s; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
76 } |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
77 |
11382
50415a8f1451
PPC: move prototypes to headers and make some functions static
mru
parents:
10082
diff
changeset
|
78 static int sad16_y2_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h) |
878
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
79 { |
981 | 80 int i; |
10082 | 81 int s; |
5746
55ed6dc5d476
Remove const vector macro indirection that is useless and obfuscating
diego
parents:
5609
diff
changeset
|
82 const vector unsigned char zero = (const vector unsigned char)vec_splat_u8(0); |
981 | 83 vector unsigned char *tv; |
878
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
84 vector unsigned char pix1v, pix2v, pix3v, avgv, t5; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
85 vector unsigned int sad; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
86 vector signed int sumdiffs; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
87 uint8_t *pix3 = pix2 + line_size; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
88 |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
89 s = 0; |
1033
b4172ff70d27
Altivec on non darwin systems patch by Romain Dolbeau
bellard
parents:
1024
diff
changeset
|
90 sad = (vector unsigned int)vec_splat_u32(0); |
878
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
91 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
92 /* Due to the fact that pix3 = pix2 + line_size, the pix3 of one |
878
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
93 iteration becomes pix2 in the next iteration. We can use this |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
94 fact to avoid a potentially expensive unaligned read, each |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
95 time around the loop. |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
96 Read unaligned pixels into our vectors. The vectors are as follows: |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
97 pix2v: pix2[0]-pix2[15] |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
98 Split the pixel vectors into shorts */ |
878
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
99 tv = (vector unsigned char *) &pix2[0]; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
100 pix2v = vec_perm(tv[0], tv[1], vec_lvsl(0, &pix2[0])); |
2967 | 101 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
102 for (i = 0; i < h; i++) { |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
103 /* Read unaligned pixels into our vectors. The vectors are as follows: |
878
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
104 pix1v: pix1[0]-pix1[15] |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
105 pix3v: pix3[0]-pix3[15] */ |
878
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
106 tv = (vector unsigned char *) pix1; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
107 pix1v = vec_perm(tv[0], tv[1], vec_lvsl(0, pix1)); |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
108 |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
109 tv = (vector unsigned char *) &pix3[0]; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
110 pix3v = vec_perm(tv[0], tv[1], vec_lvsl(0, &pix3[0])); |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
111 |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
112 /* Calculate the average vector */ |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
113 avgv = vec_avg(pix2v, pix3v); |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
114 |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
115 /* Calculate a sum of abs differences vector */ |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
116 t5 = vec_sub(vec_max(pix1v, avgv), vec_min(pix1v, avgv)); |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
117 |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
118 /* Add each 4 pixel group together and put 4 results into sad */ |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
119 sad = vec_sum4s(t5, sad); |
2967 | 120 |
878
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
121 pix1 += line_size; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
122 pix2v = pix3v; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
123 pix3 += line_size; |
2967 | 124 |
878
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
125 } |
2967 | 126 |
878
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
127 /* Sum up the four partial sums, and put the result into s */ |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
128 sumdiffs = vec_sums((vector signed int) sad, (vector signed int) zero); |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
129 sumdiffs = vec_splat(sumdiffs, 3); |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
130 vec_ste(sumdiffs, 0, &s); |
2967 | 131 return s; |
878
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
132 } |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
133 |
11382
50415a8f1451
PPC: move prototypes to headers and make some functions static
mru
parents:
10082
diff
changeset
|
134 static int sad16_xy2_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h) |
878
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
135 { |
981 | 136 int i; |
10082 | 137 int s; |
878
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
138 uint8_t *pix3 = pix2 + line_size; |
5746
55ed6dc5d476
Remove const vector macro indirection that is useless and obfuscating
diego
parents:
5609
diff
changeset
|
139 const vector unsigned char zero = (const vector unsigned char)vec_splat_u8(0); |
55ed6dc5d476
Remove const vector macro indirection that is useless and obfuscating
diego
parents:
5609
diff
changeset
|
140 const vector unsigned short two = (const vector unsigned short)vec_splat_u16(2); |
981 | 141 vector unsigned char *tv, avgv, t5; |
878
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
142 vector unsigned char pix1v, pix2v, pix3v, pix2iv, pix3iv; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
143 vector unsigned short pix2lv, pix2hv, pix2ilv, pix2ihv; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
144 vector unsigned short pix3lv, pix3hv, pix3ilv, pix3ihv; |
981 | 145 vector unsigned short avghv, avglv; |
878
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
146 vector unsigned short t1, t2, t3, t4; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
147 vector unsigned int sad; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
148 vector signed int sumdiffs; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
149 |
1033
b4172ff70d27
Altivec on non darwin systems patch by Romain Dolbeau
bellard
parents:
1024
diff
changeset
|
150 sad = (vector unsigned int)vec_splat_u32(0); |
2967 | 151 |
878
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
152 s = 0; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
153 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
154 /* Due to the fact that pix3 = pix2 + line_size, the pix3 of one |
878
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
155 iteration becomes pix2 in the next iteration. We can use this |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
156 fact to avoid a potentially expensive unaligned read, as well |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
157 as some splitting, and vector addition each time around the loop. |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
158 Read unaligned pixels into our vectors. The vectors are as follows: |
2979 | 159 pix2v: pix2[0]-pix2[15] pix2iv: pix2[1]-pix2[16] |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
160 Split the pixel vectors into shorts */ |
878
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
161 tv = (vector unsigned char *) &pix2[0]; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
162 pix2v = vec_perm(tv[0], tv[1], vec_lvsl(0, &pix2[0])); |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
163 |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
164 tv = (vector unsigned char *) &pix2[1]; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
165 pix2iv = vec_perm(tv[0], tv[1], vec_lvsl(0, &pix2[1])); |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
166 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
167 pix2hv = (vector unsigned short) vec_mergeh(zero, pix2v); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
168 pix2lv = (vector unsigned short) vec_mergel(zero, pix2v); |
878
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
169 pix2ihv = (vector unsigned short) vec_mergeh(zero, pix2iv); |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
170 pix2ilv = (vector unsigned short) vec_mergel(zero, pix2iv); |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
171 t1 = vec_add(pix2hv, pix2ihv); |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
172 t2 = vec_add(pix2lv, pix2ilv); |
2967 | 173 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
174 for (i = 0; i < h; i++) { |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
175 /* Read unaligned pixels into our vectors. The vectors are as follows: |
878
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
176 pix1v: pix1[0]-pix1[15] |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
177 pix3v: pix3[0]-pix3[15] pix3iv: pix3[1]-pix3[16] */ |
878
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
178 tv = (vector unsigned char *) pix1; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
179 pix1v = vec_perm(tv[0], tv[1], vec_lvsl(0, pix1)); |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
180 |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
181 tv = (vector unsigned char *) &pix3[0]; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
182 pix3v = vec_perm(tv[0], tv[1], vec_lvsl(0, &pix3[0])); |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
183 |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
184 tv = (vector unsigned char *) &pix3[1]; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
185 pix3iv = vec_perm(tv[0], tv[1], vec_lvsl(0, &pix3[1])); |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
186 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
187 /* Note that AltiVec does have vec_avg, but this works on vector pairs |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
188 and rounds up. We could do avg(avg(a,b),avg(c,d)), but the rounding |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
189 would mean that, for example, avg(3,0,0,1) = 2, when it should be 1. |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
190 Instead, we have to split the pixel vectors into vectors of shorts, |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
191 and do the averaging by hand. */ |
878
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
192 |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
193 /* Split the pixel vectors into shorts */ |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
194 pix3hv = (vector unsigned short) vec_mergeh(zero, pix3v); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
195 pix3lv = (vector unsigned short) vec_mergel(zero, pix3v); |
878
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
196 pix3ihv = (vector unsigned short) vec_mergeh(zero, pix3iv); |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
197 pix3ilv = (vector unsigned short) vec_mergel(zero, pix3iv); |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
198 |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
199 /* Do the averaging on them */ |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
200 t3 = vec_add(pix3hv, pix3ihv); |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
201 t4 = vec_add(pix3lv, pix3ilv); |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
202 |
884 | 203 avghv = vec_sr(vec_add(vec_add(t1, t3), two), two); |
204 avglv = vec_sr(vec_add(vec_add(t2, t4), two), two); | |
878
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
205 |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
206 /* Pack the shorts back into a result */ |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
207 avgv = vec_pack(avghv, avglv); |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
208 |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
209 /* Calculate a sum of abs differences vector */ |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
210 t5 = vec_sub(vec_max(pix1v, avgv), vec_min(pix1v, avgv)); |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
211 |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
212 /* Add each 4 pixel group together and put 4 results into sad */ |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
213 sad = vec_sum4s(t5, sad); |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
214 |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
215 pix1 += line_size; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
216 pix3 += line_size; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
217 /* Transfer the calculated values for pix3 into pix2 */ |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
218 t1 = t3; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
219 t2 = t4; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
220 } |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
221 /* Sum up the four partial sums, and put the result into s */ |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
222 sumdiffs = vec_sums((vector signed int) sad, (vector signed int) zero); |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
223 sumdiffs = vec_splat(sumdiffs, 3); |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
224 vec_ste(sumdiffs, 0, &s); |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
225 |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
226 return s; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
227 } |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
228 |
11382
50415a8f1451
PPC: move prototypes to headers and make some functions static
mru
parents:
10082
diff
changeset
|
229 static int sad16_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h) |
623
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
230 { |
981 | 231 int i; |
10082 | 232 int s; |
5746
55ed6dc5d476
Remove const vector macro indirection that is useless and obfuscating
diego
parents:
5609
diff
changeset
|
233 const vector unsigned int zero = (const vector unsigned int)vec_splat_u32(0); |
623
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
234 vector unsigned char perm1, perm2, *pix1v, *pix2v; |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
235 vector unsigned char t1, t2, t3,t4, t5; |
981 | 236 vector unsigned int sad; |
623
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
237 vector signed int sumdiffs; |
2967 | 238 |
1033
b4172ff70d27
Altivec on non darwin systems patch by Romain Dolbeau
bellard
parents:
1024
diff
changeset
|
239 sad = (vector unsigned int)vec_splat_u32(0); |
623
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
240 |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
241 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
242 for (i = 0; i < h; i++) { |
2979 | 243 /* Read potentially unaligned pixels into t1 and t2 */ |
623
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
244 perm1 = vec_lvsl(0, pix1); |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
245 pix1v = (vector unsigned char *) pix1; |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
246 perm2 = vec_lvsl(0, pix2); |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
247 pix2v = (vector unsigned char *) pix2; |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
248 t1 = vec_perm(pix1v[0], pix1v[1], perm1); |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
249 t2 = vec_perm(pix2v[0], pix2v[1], perm2); |
2967 | 250 |
2979 | 251 /* Calculate a sum of abs differences vector */ |
623
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
252 t3 = vec_max(t1, t2); |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
253 t4 = vec_min(t1, t2); |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
254 t5 = vec_sub(t3, t4); |
2967 | 255 |
2979 | 256 /* Add each 4 pixel group together and put 4 results into sad */ |
623
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
257 sad = vec_sum4s(t5, sad); |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
258 |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
259 pix1 += line_size; |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
260 pix2 += line_size; |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
261 } |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
262 |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
263 /* Sum up the four partial sums, and put the result into s */ |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
264 sumdiffs = vec_sums((vector signed int) sad, (vector signed int) zero); |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
265 sumdiffs = vec_splat(sumdiffs, 3); |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
266 vec_ste(sumdiffs, 0, &s); |
2967 | 267 |
623
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
268 return s; |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
269 } |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
270 |
11382
50415a8f1451
PPC: move prototypes to headers and make some functions static
mru
parents:
10082
diff
changeset
|
271 static int sad8_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h) |
623
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
272 { |
981 | 273 int i; |
10082 | 274 int s; |
5746
55ed6dc5d476
Remove const vector macro indirection that is useless and obfuscating
diego
parents:
5609
diff
changeset
|
275 const vector unsigned int zero = (const vector unsigned int)vec_splat_u32(0); |
623
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
276 vector unsigned char perm1, perm2, permclear, *pix1v, *pix2v; |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
277 vector unsigned char t1, t2, t3,t4, t5; |
981 | 278 vector unsigned int sad; |
623
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
279 vector signed int sumdiffs; |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
280 |
1033
b4172ff70d27
Altivec on non darwin systems patch by Romain Dolbeau
bellard
parents:
1024
diff
changeset
|
281 sad = (vector unsigned int)vec_splat_u32(0); |
1277
f3152eb76f1a
altivec gcc-3 fixes by (Magnus Damm <damm at opensource dot se>)
michaelni
parents:
1064
diff
changeset
|
282 |
7373
266d4949aa15
Remove AltiVec vector declaration compiler compatibility macros.
diego
parents:
7335
diff
changeset
|
283 permclear = (vector unsigned char){255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0}; |
623
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
284 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
285 for (i = 0; i < h; i++) { |
2979 | 286 /* Read potentially unaligned pixels into t1 and t2 |
287 Since we're reading 16 pixels, and actually only want 8, | |
288 mask out the last 8 pixels. The 0s don't change the sum. */ | |
623
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
289 perm1 = vec_lvsl(0, pix1); |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
290 pix1v = (vector unsigned char *) pix1; |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
291 perm2 = vec_lvsl(0, pix2); |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
292 pix2v = (vector unsigned char *) pix2; |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
293 t1 = vec_and(vec_perm(pix1v[0], pix1v[1], perm1), permclear); |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
294 t2 = vec_and(vec_perm(pix2v[0], pix2v[1], perm2), permclear); |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
295 |
2979 | 296 /* Calculate a sum of abs differences vector */ |
623
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
297 t3 = vec_max(t1, t2); |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
298 t4 = vec_min(t1, t2); |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
299 t5 = vec_sub(t3, t4); |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
300 |
2979 | 301 /* Add each 4 pixel group together and put 4 results into sad */ |
623
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
302 sad = vec_sum4s(t5, sad); |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
303 |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
304 pix1 += line_size; |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
305 pix2 += line_size; |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
306 } |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
307 |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
308 /* Sum up the four partial sums, and put the result into s */ |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
309 sumdiffs = vec_sums((vector signed int) sad, (vector signed int) zero); |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
310 sumdiffs = vec_splat(sumdiffs, 3); |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
311 vec_ste(sumdiffs, 0, &s); |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
312 |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
313 return s; |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
314 } |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
315 |
11382
50415a8f1451
PPC: move prototypes to headers and make some functions static
mru
parents:
10082
diff
changeset
|
316 static int pix_norm1_altivec(uint8_t *pix, int line_size) |
878
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
317 { |
981 | 318 int i; |
10082 | 319 int s; |
5746
55ed6dc5d476
Remove const vector macro indirection that is useless and obfuscating
diego
parents:
5609
diff
changeset
|
320 const vector unsigned int zero = (const vector unsigned int)vec_splat_u32(0); |
981 | 321 vector unsigned char *tv; |
878
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
322 vector unsigned char pixv; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
323 vector unsigned int sv; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
324 vector signed int sum; |
2967 | 325 |
1033
b4172ff70d27
Altivec on non darwin systems patch by Romain Dolbeau
bellard
parents:
1024
diff
changeset
|
326 sv = (vector unsigned int)vec_splat_u32(0); |
2967 | 327 |
878
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
328 s = 0; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
329 for (i = 0; i < 16; i++) { |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
330 /* Read in the potentially unaligned pixels */ |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
331 tv = (vector unsigned char *) pix; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
332 pixv = vec_perm(tv[0], tv[1], vec_lvsl(0, pix)); |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
333 |
884 | 334 /* Square the values, and add them to our sum */ |
335 sv = vec_msum(pixv, pixv, sv); | |
878
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
336 |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
337 pix += line_size; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
338 } |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
339 /* Sum up the four partial sums, and put the result into s */ |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
340 sum = vec_sums((vector signed int) sv, (vector signed int) zero); |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
341 sum = vec_splat(sum, 3); |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
342 vec_ste(sum, 0, &s); |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
343 |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
344 return s; |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
345 } |
6ea69518e5f7
altivec optimizations patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
828
diff
changeset
|
346 |
981 | 347 /** |
348 * Sum of Squared Errors for a 8x8 block. | |
349 * AltiVec-enhanced. | |
1708 | 350 * It's the sad8_altivec code above w/ squaring added. |
981 | 351 */ |
11382
50415a8f1451
PPC: move prototypes to headers and make some functions static
mru
parents:
10082
diff
changeset
|
352 static int sse8_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h) |
981 | 353 { |
354 int i; | |
10082 | 355 int s; |
5746
55ed6dc5d476
Remove const vector macro indirection that is useless and obfuscating
diego
parents:
5609
diff
changeset
|
356 const vector unsigned int zero = (const vector unsigned int)vec_splat_u32(0); |
981 | 357 vector unsigned char perm1, perm2, permclear, *pix1v, *pix2v; |
358 vector unsigned char t1, t2, t3,t4, t5; | |
359 vector unsigned int sum; | |
360 vector signed int sumsqr; | |
2967 | 361 |
1033
b4172ff70d27
Altivec on non darwin systems patch by Romain Dolbeau
bellard
parents:
1024
diff
changeset
|
362 sum = (vector unsigned int)vec_splat_u32(0); |
1277
f3152eb76f1a
altivec gcc-3 fixes by (Magnus Damm <damm at opensource dot se>)
michaelni
parents:
1064
diff
changeset
|
363 |
7373
266d4949aa15
Remove AltiVec vector declaration compiler compatibility macros.
diego
parents:
7335
diff
changeset
|
364 permclear = (vector unsigned char){255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0}; |
1277
f3152eb76f1a
altivec gcc-3 fixes by (Magnus Damm <damm at opensource dot se>)
michaelni
parents:
1064
diff
changeset
|
365 |
2967 | 366 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
367 for (i = 0; i < h; i++) { |
2979 | 368 /* Read potentially unaligned pixels into t1 and t2 |
369 Since we're reading 16 pixels, and actually only want 8, | |
370 mask out the last 8 pixels. The 0s don't change the sum. */ | |
981 | 371 perm1 = vec_lvsl(0, pix1); |
372 pix1v = (vector unsigned char *) pix1; | |
373 perm2 = vec_lvsl(0, pix2); | |
374 pix2v = (vector unsigned char *) pix2; | |
375 t1 = vec_and(vec_perm(pix1v[0], pix1v[1], perm1), permclear); | |
376 t2 = vec_and(vec_perm(pix2v[0], pix2v[1], perm2), permclear); | |
377 | |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
378 /* Since we want to use unsigned chars, we can take advantage |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
379 of the fact that abs(a-b)^2 = (a-b)^2. */ |
2967 | 380 |
2979 | 381 /* Calculate abs differences vector */ |
981 | 382 t3 = vec_max(t1, t2); |
383 t4 = vec_min(t1, t2); | |
384 t5 = vec_sub(t3, t4); | |
2967 | 385 |
981 | 386 /* Square the values and add them to our sum */ |
387 sum = vec_msum(t5, t5, sum); | |
2967 | 388 |
981 | 389 pix1 += line_size; |
390 pix2 += line_size; | |
391 } | |
2967 | 392 |
981 | 393 /* Sum up the four partial sums, and put the result into s */ |
394 sumsqr = vec_sums((vector signed int) sum, (vector signed int) zero); | |
395 sumsqr = vec_splat(sumsqr, 3); | |
396 vec_ste(sumsqr, 0, &s); | |
2967 | 397 |
981 | 398 return s; |
399 } | |
400 | |
401 /** | |
402 * Sum of Squared Errors for a 16x16 block. | |
403 * AltiVec-enhanced. | |
1708 | 404 * It's the sad16_altivec code above w/ squaring added. |
981 | 405 */ |
11382
50415a8f1451
PPC: move prototypes to headers and make some functions static
mru
parents:
10082
diff
changeset
|
406 static int sse16_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h) |
981 | 407 { |
408 int i; | |
10082 | 409 int s; |
5746
55ed6dc5d476
Remove const vector macro indirection that is useless and obfuscating
diego
parents:
5609
diff
changeset
|
410 const vector unsigned int zero = (const vector unsigned int)vec_splat_u32(0); |
981 | 411 vector unsigned char perm1, perm2, *pix1v, *pix2v; |
412 vector unsigned char t1, t2, t3,t4, t5; | |
413 vector unsigned int sum; | |
414 vector signed int sumsqr; | |
2967 | 415 |
1033
b4172ff70d27
Altivec on non darwin systems patch by Romain Dolbeau
bellard
parents:
1024
diff
changeset
|
416 sum = (vector unsigned int)vec_splat_u32(0); |
2967 | 417 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
418 for (i = 0; i < h; i++) { |
2979 | 419 /* Read potentially unaligned pixels into t1 and t2 */ |
981 | 420 perm1 = vec_lvsl(0, pix1); |
421 pix1v = (vector unsigned char *) pix1; | |
422 perm2 = vec_lvsl(0, pix2); | |
423 pix2v = (vector unsigned char *) pix2; | |
424 t1 = vec_perm(pix1v[0], pix1v[1], perm1); | |
425 t2 = vec_perm(pix2v[0], pix2v[1], perm2); | |
426 | |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
427 /* Since we want to use unsigned chars, we can take advantage |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
428 of the fact that abs(a-b)^2 = (a-b)^2. */ |
2967 | 429 |
2979 | 430 /* Calculate abs differences vector */ |
981 | 431 t3 = vec_max(t1, t2); |
432 t4 = vec_min(t1, t2); | |
433 t5 = vec_sub(t3, t4); | |
2967 | 434 |
981 | 435 /* Square the values and add them to our sum */ |
436 sum = vec_msum(t5, t5, sum); | |
2967 | 437 |
981 | 438 pix1 += line_size; |
439 pix2 += line_size; | |
440 } | |
2967 | 441 |
981 | 442 /* Sum up the four partial sums, and put the result into s */ |
443 sumsqr = vec_sums((vector signed int) sum, (vector signed int) zero); | |
444 sumsqr = vec_splat(sumsqr, 3); | |
445 vec_ste(sumsqr, 0, &s); | |
2967 | 446 |
981 | 447 return s; |
448 } | |
449 | |
11382
50415a8f1451
PPC: move prototypes to headers and make some functions static
mru
parents:
10082
diff
changeset
|
450 static int pix_sum_altivec(uint8_t * pix, int line_size) |
623
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
451 { |
5746
55ed6dc5d476
Remove const vector macro indirection that is useless and obfuscating
diego
parents:
5609
diff
changeset
|
452 const vector unsigned int zero = (const vector unsigned int)vec_splat_u32(0); |
623
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
453 vector unsigned char perm, *pixv; |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
454 vector unsigned char t1; |
981 | 455 vector unsigned int sad; |
623
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
456 vector signed int sumdiffs; |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
457 |
981 | 458 int i; |
10082 | 459 int s; |
2967 | 460 |
1033
b4172ff70d27
Altivec on non darwin systems patch by Romain Dolbeau
bellard
parents:
1024
diff
changeset
|
461 sad = (vector unsigned int)vec_splat_u32(0); |
2967 | 462 |
623
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
463 for (i = 0; i < 16; i++) { |
2979 | 464 /* Read the potentially unaligned 16 pixels into t1 */ |
623
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
465 perm = vec_lvsl(0, pix); |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
466 pixv = (vector unsigned char *) pix; |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
467 t1 = vec_perm(pixv[0], pixv[1], perm); |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
468 |
2979 | 469 /* Add each 4 pixel group together and put 4 results into sad */ |
623
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
470 sad = vec_sum4s(t1, sad); |
2967 | 471 |
623
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
472 pix += line_size; |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
473 } |
2967 | 474 |
623
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
475 /* Sum up the four partial sums, and put the result into s */ |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
476 sumdiffs = vec_sums((vector signed int) sad, (vector signed int) zero); |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
477 sumdiffs = vec_splat(sumdiffs, 3); |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
478 vec_ste(sumdiffs, 0, &s); |
2967 | 479 |
623
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
480 return s; |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
481 } |
92e99e506920
first cut at altivec support on darwin patch by (Brian Foley <bfoley at compsoc dot nuigalway dot ie>)
michaelni
parents:
diff
changeset
|
482 |
11382
50415a8f1451
PPC: move prototypes to headers and make some functions static
mru
parents:
10082
diff
changeset
|
483 static void get_pixels_altivec(DCTELEM *restrict block, const uint8_t *pixels, int line_size) |
828
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
484 { |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
485 int i; |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
486 vector unsigned char perm, bytes, *pixv; |
5746
55ed6dc5d476
Remove const vector macro indirection that is useless and obfuscating
diego
parents:
5609
diff
changeset
|
487 const vector unsigned char zero = (const vector unsigned char)vec_splat_u8(0); |
828
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
488 vector signed short shorts; |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
489 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
490 for (i = 0; i < 8; i++) { |
828
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
491 // Read potentially unaligned pixels. |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
492 // We're reading 16 pixels, and actually only want 8, |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
493 // but we simply ignore the extras. |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
494 perm = vec_lvsl(0, pixels); |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
495 pixv = (vector unsigned char *) pixels; |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
496 bytes = vec_perm(pixv[0], pixv[1], perm); |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
497 |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
498 // convert the bytes into shorts |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
499 shorts = (vector signed short)vec_mergeh(zero, bytes); |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
500 |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
501 // save the data to the block, we assume the block is 16-byte aligned |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
502 vec_st(shorts, i*16, (vector signed short*)block); |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
503 |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
504 pixels += line_size; |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
505 } |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
506 } |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
507 |
11382
50415a8f1451
PPC: move prototypes to headers and make some functions static
mru
parents:
10082
diff
changeset
|
508 static void diff_pixels_altivec(DCTELEM *restrict block, const uint8_t *s1, |
1064 | 509 const uint8_t *s2, int stride) |
828
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
510 { |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
511 int i; |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
512 vector unsigned char perm, bytes, *pixv; |
5746
55ed6dc5d476
Remove const vector macro indirection that is useless and obfuscating
diego
parents:
5609
diff
changeset
|
513 const vector unsigned char zero = (const vector unsigned char)vec_splat_u8(0); |
828
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
514 vector signed short shorts1, shorts2; |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
515 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
516 for (i = 0; i < 4; i++) { |
828
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
517 // Read potentially unaligned pixels |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
518 // We're reading 16 pixels, and actually only want 8, |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
519 // but we simply ignore the extras. |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
520 perm = vec_lvsl(0, s1); |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
521 pixv = (vector unsigned char *) s1; |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
522 bytes = vec_perm(pixv[0], pixv[1], perm); |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
523 |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
524 // convert the bytes into shorts |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
525 shorts1 = (vector signed short)vec_mergeh(zero, bytes); |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
526 |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
527 // Do the same for the second block of pixels |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
528 perm = vec_lvsl(0, s2); |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
529 pixv = (vector unsigned char *) s2; |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
530 bytes = vec_perm(pixv[0], pixv[1], perm); |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
531 |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
532 // convert the bytes into shorts |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
533 shorts2 = (vector signed short)vec_mergeh(zero, bytes); |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
534 |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
535 // Do the subtraction |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
536 shorts1 = vec_sub(shorts1, shorts2); |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
537 |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
538 // save the data to the block, we assume the block is 16-byte aligned |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
539 vec_st(shorts1, 0, (vector signed short*)block); |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
540 |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
541 s1 += stride; |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
542 s2 += stride; |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
543 block += 8; |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
544 |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
545 |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
546 // The code below is a copy of the code above... This is a manual |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
547 // unroll. |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
548 |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
549 // Read potentially unaligned pixels |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
550 // We're reading 16 pixels, and actually only want 8, |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
551 // but we simply ignore the extras. |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
552 perm = vec_lvsl(0, s1); |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
553 pixv = (vector unsigned char *) s1; |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
554 bytes = vec_perm(pixv[0], pixv[1], perm); |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
555 |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
556 // convert the bytes into shorts |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
557 shorts1 = (vector signed short)vec_mergeh(zero, bytes); |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
558 |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
559 // Do the same for the second block of pixels |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
560 perm = vec_lvsl(0, s2); |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
561 pixv = (vector unsigned char *) s2; |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
562 bytes = vec_perm(pixv[0], pixv[1], perm); |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
563 |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
564 // convert the bytes into shorts |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
565 shorts2 = (vector signed short)vec_mergeh(zero, bytes); |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
566 |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
567 // Do the subtraction |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
568 shorts1 = vec_sub(shorts1, shorts2); |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
569 |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
570 // save the data to the block, we assume the block is 16-byte aligned |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
571 vec_st(shorts1, 0, (vector signed short*)block); |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
572 |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
573 s1 += stride; |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
574 s2 += stride; |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
575 block += 8; |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
576 } |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
577 } |
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
578 |
8307 | 579 |
580 static void clear_block_altivec(DCTELEM *block) { | |
581 LOAD_ZERO; | |
582 vec_st(zero_s16v, 0, block); | |
583 vec_st(zero_s16v, 16, block); | |
584 vec_st(zero_s16v, 32, block); | |
585 vec_st(zero_s16v, 48, block); | |
586 vec_st(zero_s16v, 64, block); | |
587 vec_st(zero_s16v, 80, block); | |
588 vec_st(zero_s16v, 96, block); | |
589 vec_st(zero_s16v, 112, block); | |
590 } | |
591 | |
592 | |
11382
50415a8f1451
PPC: move prototypes to headers and make some functions static
mru
parents:
10082
diff
changeset
|
593 static void add_bytes_altivec(uint8_t *dst, uint8_t *src, int w) { |
995
edc10966b081
altivec jumbo patch by (Romain Dolbeau <dolbeaur at club-internet dot fr>)
michaelni
parents:
981
diff
changeset
|
594 register int i; |
1009
3b7cc8e4b83f
AltiVec perf (take 2), plus a couple AltiVec functions by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
995
diff
changeset
|
595 register vector unsigned char vdst, vsrc; |
2967 | 596 |
1009
3b7cc8e4b83f
AltiVec perf (take 2), plus a couple AltiVec functions by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
995
diff
changeset
|
597 /* dst and src are 16 bytes-aligned (guaranteed) */ |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
598 for (i = 0 ; (i + 15) < w ; i+=16) { |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
599 vdst = vec_ld(i, (unsigned char*)dst); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
600 vsrc = vec_ld(i, (unsigned char*)src); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
601 vdst = vec_add(vsrc, vdst); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
602 vec_st(vdst, i, (unsigned char*)dst); |
995
edc10966b081
altivec jumbo patch by (Romain Dolbeau <dolbeaur at club-internet dot fr>)
michaelni
parents:
981
diff
changeset
|
603 } |
1009
3b7cc8e4b83f
AltiVec perf (take 2), plus a couple AltiVec functions by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
995
diff
changeset
|
604 /* if w is not a multiple of 16 */ |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
605 for (; (i < w) ; i++) { |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
606 dst[i] = src[i]; |
995
edc10966b081
altivec jumbo patch by (Romain Dolbeau <dolbeaur at club-internet dot fr>)
michaelni
parents:
981
diff
changeset
|
607 } |
1009
3b7cc8e4b83f
AltiVec perf (take 2), plus a couple AltiVec functions by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
995
diff
changeset
|
608 } |
3b7cc8e4b83f
AltiVec perf (take 2), plus a couple AltiVec functions by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
995
diff
changeset
|
609 |
1024
9cc1031e1864
More AltiVec MC functions patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1015
diff
changeset
|
610 /* next one assumes that ((line_size % 16) == 0) */ |
1009
3b7cc8e4b83f
AltiVec perf (take 2), plus a couple AltiVec functions by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
995
diff
changeset
|
611 void put_pixels16_altivec(uint8_t *block, const uint8_t *pixels, int line_size, int h) |
3b7cc8e4b83f
AltiVec perf (take 2), plus a couple AltiVec functions by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
995
diff
changeset
|
612 { |
1352
e8ff4783f188
1) remove TBL support in PPC performance. It's much more useful to use the
michaelni
parents:
1340
diff
changeset
|
613 POWERPC_PERF_DECLARE(altivec_put_pixels16_num, 1); |
1009
3b7cc8e4b83f
AltiVec perf (take 2), plus a couple AltiVec functions by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
995
diff
changeset
|
614 register vector unsigned char pixelsv1, pixelsv2; |
1352
e8ff4783f188
1) remove TBL support in PPC performance. It's much more useful to use the
michaelni
parents:
1340
diff
changeset
|
615 register vector unsigned char pixelsv1B, pixelsv2B; |
e8ff4783f188
1) remove TBL support in PPC performance. It's much more useful to use the
michaelni
parents:
1340
diff
changeset
|
616 register vector unsigned char pixelsv1C, pixelsv2C; |
e8ff4783f188
1) remove TBL support in PPC performance. It's much more useful to use the
michaelni
parents:
1340
diff
changeset
|
617 register vector unsigned char pixelsv1D, pixelsv2D; |
e8ff4783f188
1) remove TBL support in PPC performance. It's much more useful to use the
michaelni
parents:
1340
diff
changeset
|
618 |
1024
9cc1031e1864
More AltiVec MC functions patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1015
diff
changeset
|
619 register vector unsigned char perm = vec_lvsl(0, pixels); |
1009
3b7cc8e4b83f
AltiVec perf (take 2), plus a couple AltiVec functions by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
995
diff
changeset
|
620 int i; |
1352
e8ff4783f188
1) remove TBL support in PPC performance. It's much more useful to use the
michaelni
parents:
1340
diff
changeset
|
621 register int line_size_2 = line_size << 1; |
e8ff4783f188
1) remove TBL support in PPC performance. It's much more useful to use the
michaelni
parents:
1340
diff
changeset
|
622 register int line_size_3 = line_size + line_size_2; |
e8ff4783f188
1) remove TBL support in PPC performance. It's much more useful to use the
michaelni
parents:
1340
diff
changeset
|
623 register int line_size_4 = line_size << 2; |
1009
3b7cc8e4b83f
AltiVec perf (take 2), plus a couple AltiVec functions by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
995
diff
changeset
|
624 |
1352
e8ff4783f188
1) remove TBL support in PPC performance. It's much more useful to use the
michaelni
parents:
1340
diff
changeset
|
625 POWERPC_PERF_START_COUNT(altivec_put_pixels16_num, 1); |
e8ff4783f188
1) remove TBL support in PPC performance. It's much more useful to use the
michaelni
parents:
1340
diff
changeset
|
626 // hand-unrolling the loop by 4 gains about 15% |
e8ff4783f188
1) remove TBL support in PPC performance. It's much more useful to use the
michaelni
parents:
1340
diff
changeset
|
627 // mininum execution time goes from 74 to 60 cycles |
e8ff4783f188
1) remove TBL support in PPC performance. It's much more useful to use the
michaelni
parents:
1340
diff
changeset
|
628 // it's faster than -funroll-loops, but using |
e8ff4783f188
1) remove TBL support in PPC performance. It's much more useful to use the
michaelni
parents:
1340
diff
changeset
|
629 // -funroll-loops w/ this is bad - 74 cycles again. |
e8ff4783f188
1) remove TBL support in PPC performance. It's much more useful to use the
michaelni
parents:
1340
diff
changeset
|
630 // all this is on a 7450, tuning for the 7450 |
e8ff4783f188
1) remove TBL support in PPC performance. It's much more useful to use the
michaelni
parents:
1340
diff
changeset
|
631 #if 0 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
632 for (i = 0; i < h; i++) { |
9668 | 633 pixelsv1 = vec_ld(0, pixels); |
634 pixelsv2 = vec_ld(16, pixels); | |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
635 vec_st(vec_perm(pixelsv1, pixelsv2, perm), |
9668 | 636 0, block); |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
637 pixels+=line_size; |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
638 block +=line_size; |
1009
3b7cc8e4b83f
AltiVec perf (take 2), plus a couple AltiVec functions by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
995
diff
changeset
|
639 } |
1352
e8ff4783f188
1) remove TBL support in PPC performance. It's much more useful to use the
michaelni
parents:
1340
diff
changeset
|
640 #else |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
641 for (i = 0; i < h; i += 4) { |
9668 | 642 pixelsv1 = vec_ld( 0, pixels); |
643 pixelsv2 = vec_ld(15, pixels); | |
644 pixelsv1B = vec_ld(line_size, pixels); | |
645 pixelsv2B = vec_ld(15 + line_size, pixels); | |
646 pixelsv1C = vec_ld(line_size_2, pixels); | |
647 pixelsv2C = vec_ld(15 + line_size_2, pixels); | |
648 pixelsv1D = vec_ld(line_size_3, pixels); | |
649 pixelsv2D = vec_ld(15 + line_size_3, pixels); | |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
650 vec_st(vec_perm(pixelsv1, pixelsv2, perm), |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
651 0, (unsigned char*)block); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
652 vec_st(vec_perm(pixelsv1B, pixelsv2B, perm), |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
653 line_size, (unsigned char*)block); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
654 vec_st(vec_perm(pixelsv1C, pixelsv2C, perm), |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
655 line_size_2, (unsigned char*)block); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
656 vec_st(vec_perm(pixelsv1D, pixelsv2D, perm), |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
657 line_size_3, (unsigned char*)block); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
658 pixels+=line_size_4; |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
659 block +=line_size_4; |
1352
e8ff4783f188
1) remove TBL support in PPC performance. It's much more useful to use the
michaelni
parents:
1340
diff
changeset
|
660 } |
e8ff4783f188
1) remove TBL support in PPC performance. It's much more useful to use the
michaelni
parents:
1340
diff
changeset
|
661 #endif |
e8ff4783f188
1) remove TBL support in PPC performance. It's much more useful to use the
michaelni
parents:
1340
diff
changeset
|
662 POWERPC_PERF_STOP_COUNT(altivec_put_pixels16_num, 1); |
1009
3b7cc8e4b83f
AltiVec perf (take 2), plus a couple AltiVec functions by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
995
diff
changeset
|
663 } |
3b7cc8e4b83f
AltiVec perf (take 2), plus a couple AltiVec functions by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
995
diff
changeset
|
664 |
1024
9cc1031e1864
More AltiVec MC functions patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1015
diff
changeset
|
665 /* next one assumes that ((line_size % 16) == 0) */ |
1009
3b7cc8e4b83f
AltiVec perf (take 2), plus a couple AltiVec functions by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
995
diff
changeset
|
666 #define op_avg(a,b) a = ( ((a)|(b)) - ((((a)^(b))&0xFEFEFEFEUL)>>1) ) |
3b7cc8e4b83f
AltiVec perf (take 2), plus a couple AltiVec functions by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
995
diff
changeset
|
667 void avg_pixels16_altivec(uint8_t *block, const uint8_t *pixels, int line_size, int h) |
3b7cc8e4b83f
AltiVec perf (take 2), plus a couple AltiVec functions by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
995
diff
changeset
|
668 { |
1352
e8ff4783f188
1) remove TBL support in PPC performance. It's much more useful to use the
michaelni
parents:
1340
diff
changeset
|
669 POWERPC_PERF_DECLARE(altivec_avg_pixels16_num, 1); |
1009
3b7cc8e4b83f
AltiVec perf (take 2), plus a couple AltiVec functions by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
995
diff
changeset
|
670 register vector unsigned char pixelsv1, pixelsv2, pixelsv, blockv; |
1024
9cc1031e1864
More AltiVec MC functions patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1015
diff
changeset
|
671 register vector unsigned char perm = vec_lvsl(0, pixels); |
1009
3b7cc8e4b83f
AltiVec perf (take 2), plus a couple AltiVec functions by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
995
diff
changeset
|
672 int i; |
3b7cc8e4b83f
AltiVec perf (take 2), plus a couple AltiVec functions by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
995
diff
changeset
|
673 |
1352
e8ff4783f188
1) remove TBL support in PPC performance. It's much more useful to use the
michaelni
parents:
1340
diff
changeset
|
674 POWERPC_PERF_START_COUNT(altivec_avg_pixels16_num, 1); |
1009
3b7cc8e4b83f
AltiVec perf (take 2), plus a couple AltiVec functions by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
995
diff
changeset
|
675 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
676 for (i = 0; i < h; i++) { |
9668 | 677 pixelsv1 = vec_ld( 0, pixels); |
678 pixelsv2 = vec_ld(16,pixels); | |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
679 blockv = vec_ld(0, block); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
680 pixelsv = vec_perm(pixelsv1, pixelsv2, perm); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
681 blockv = vec_avg(blockv,pixelsv); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
682 vec_st(blockv, 0, (unsigned char*)block); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
683 pixels+=line_size; |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
684 block +=line_size; |
1009
3b7cc8e4b83f
AltiVec perf (take 2), plus a couple AltiVec functions by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
995
diff
changeset
|
685 } |
3b7cc8e4b83f
AltiVec perf (take 2), plus a couple AltiVec functions by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
995
diff
changeset
|
686 |
1352
e8ff4783f188
1) remove TBL support in PPC performance. It's much more useful to use the
michaelni
parents:
1340
diff
changeset
|
687 POWERPC_PERF_STOP_COUNT(altivec_avg_pixels16_num, 1); |
1015
35cf2f4a0f8c
PPC perf, PPC clear_block, AltiVec put_pixels8_xy2 patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1009
diff
changeset
|
688 } |
35cf2f4a0f8c
PPC perf, PPC clear_block, AltiVec put_pixels8_xy2 patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1009
diff
changeset
|
689 |
1024
9cc1031e1864
More AltiVec MC functions patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1015
diff
changeset
|
690 /* next one assumes that ((line_size % 8) == 0) */ |
11382
50415a8f1451
PPC: move prototypes to headers and make some functions static
mru
parents:
10082
diff
changeset
|
691 static void avg_pixels8_altivec(uint8_t * block, const uint8_t * pixels, int line_size, int h) |
1015
35cf2f4a0f8c
PPC perf, PPC clear_block, AltiVec put_pixels8_xy2 patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1009
diff
changeset
|
692 { |
1352
e8ff4783f188
1) remove TBL support in PPC performance. It's much more useful to use the
michaelni
parents:
1340
diff
changeset
|
693 POWERPC_PERF_DECLARE(altivec_avg_pixels8_num, 1); |
1015
35cf2f4a0f8c
PPC perf, PPC clear_block, AltiVec put_pixels8_xy2 patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1009
diff
changeset
|
694 register vector unsigned char pixelsv1, pixelsv2, pixelsv, blockv; |
35cf2f4a0f8c
PPC perf, PPC clear_block, AltiVec put_pixels8_xy2 patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1009
diff
changeset
|
695 int i; |
35cf2f4a0f8c
PPC perf, PPC clear_block, AltiVec put_pixels8_xy2 patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1009
diff
changeset
|
696 |
1352
e8ff4783f188
1) remove TBL support in PPC performance. It's much more useful to use the
michaelni
parents:
1340
diff
changeset
|
697 POWERPC_PERF_START_COUNT(altivec_avg_pixels8_num, 1); |
2967 | 698 |
1015
35cf2f4a0f8c
PPC perf, PPC clear_block, AltiVec put_pixels8_xy2 patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1009
diff
changeset
|
699 for (i = 0; i < h; i++) { |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
700 /* block is 8 bytes-aligned, so we're either in the |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
701 left block (16 bytes-aligned) or in the right block (not) */ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
702 int rightside = ((unsigned long)block & 0x0000000F); |
2967 | 703 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
704 blockv = vec_ld(0, block); |
9668 | 705 pixelsv1 = vec_ld( 0, pixels); |
706 pixelsv2 = vec_ld(16, pixels); | |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
707 pixelsv = vec_perm(pixelsv1, pixelsv2, vec_lvsl(0, pixels)); |
2967 | 708 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
709 if (rightside) { |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
710 pixelsv = vec_perm(blockv, pixelsv, vcprm(0,1,s0,s1)); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
711 } else { |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
712 pixelsv = vec_perm(blockv, pixelsv, vcprm(s0,s1,2,3)); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
713 } |
2967 | 714 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
715 blockv = vec_avg(blockv, pixelsv); |
1015
35cf2f4a0f8c
PPC perf, PPC clear_block, AltiVec put_pixels8_xy2 patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1009
diff
changeset
|
716 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
717 vec_st(blockv, 0, block); |
2967 | 718 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
719 pixels += line_size; |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
720 block += line_size; |
1015
35cf2f4a0f8c
PPC perf, PPC clear_block, AltiVec put_pixels8_xy2 patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1009
diff
changeset
|
721 } |
2967 | 722 |
1352
e8ff4783f188
1) remove TBL support in PPC performance. It's much more useful to use the
michaelni
parents:
1340
diff
changeset
|
723 POWERPC_PERF_STOP_COUNT(altivec_avg_pixels8_num, 1); |
1015
35cf2f4a0f8c
PPC perf, PPC clear_block, AltiVec put_pixels8_xy2 patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1009
diff
changeset
|
724 } |
1009
3b7cc8e4b83f
AltiVec perf (take 2), plus a couple AltiVec functions by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
995
diff
changeset
|
725 |
1024
9cc1031e1864
More AltiVec MC functions patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1015
diff
changeset
|
726 /* next one assumes that ((line_size % 8) == 0) */ |
11382
50415a8f1451
PPC: move prototypes to headers and make some functions static
mru
parents:
10082
diff
changeset
|
727 static void put_pixels8_xy2_altivec(uint8_t *block, const uint8_t *pixels, int line_size, int h) |
1015
35cf2f4a0f8c
PPC perf, PPC clear_block, AltiVec put_pixels8_xy2 patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1009
diff
changeset
|
728 { |
1352
e8ff4783f188
1) remove TBL support in PPC performance. It's much more useful to use the
michaelni
parents:
1340
diff
changeset
|
729 POWERPC_PERF_DECLARE(altivec_put_pixels8_xy2_num, 1); |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
730 register int i; |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
731 register vector unsigned char pixelsv1, pixelsv2, pixelsavg; |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
732 register vector unsigned char blockv, temp1, temp2; |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
733 register vector unsigned short pixelssum1, pixelssum2, temp3; |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
734 register const vector unsigned char vczero = (const vector unsigned char)vec_splat_u8(0); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
735 register const vector unsigned short vctwo = (const vector unsigned short)vec_splat_u16(2); |
2967 | 736 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
737 temp1 = vec_ld(0, pixels); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
738 temp2 = vec_ld(16, pixels); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
739 pixelsv1 = vec_perm(temp1, temp2, vec_lvsl(0, pixels)); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
740 if ((((unsigned long)pixels) & 0x0000000F) == 0x0000000F) { |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
741 pixelsv2 = temp2; |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
742 } else { |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
743 pixelsv2 = vec_perm(temp1, temp2, vec_lvsl(1, pixels)); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
744 } |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
745 pixelsv1 = vec_mergeh(vczero, pixelsv1); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
746 pixelsv2 = vec_mergeh(vczero, pixelsv2); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
747 pixelssum1 = vec_add((vector unsigned short)pixelsv1, |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
748 (vector unsigned short)pixelsv2); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
749 pixelssum1 = vec_add(pixelssum1, vctwo); |
2967 | 750 |
751 POWERPC_PERF_START_COUNT(altivec_put_pixels8_xy2_num, 1); | |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
752 for (i = 0; i < h ; i++) { |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
753 int rightside = ((unsigned long)block & 0x0000000F); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
754 blockv = vec_ld(0, block); |
1015
35cf2f4a0f8c
PPC perf, PPC clear_block, AltiVec put_pixels8_xy2 patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1009
diff
changeset
|
755 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
756 temp1 = vec_ld(line_size, pixels); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
757 temp2 = vec_ld(line_size + 16, pixels); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
758 pixelsv1 = vec_perm(temp1, temp2, vec_lvsl(line_size, pixels)); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
759 if (((((unsigned long)pixels) + line_size) & 0x0000000F) == 0x0000000F) { |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
760 pixelsv2 = temp2; |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
761 } else { |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
762 pixelsv2 = vec_perm(temp1, temp2, vec_lvsl(line_size + 1, pixels)); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
763 } |
1015
35cf2f4a0f8c
PPC perf, PPC clear_block, AltiVec put_pixels8_xy2 patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1009
diff
changeset
|
764 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
765 pixelsv1 = vec_mergeh(vczero, pixelsv1); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
766 pixelsv2 = vec_mergeh(vczero, pixelsv2); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
767 pixelssum2 = vec_add((vector unsigned short)pixelsv1, |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
768 (vector unsigned short)pixelsv2); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
769 temp3 = vec_add(pixelssum1, pixelssum2); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
770 temp3 = vec_sra(temp3, vctwo); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
771 pixelssum1 = vec_add(pixelssum2, vctwo); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
772 pixelsavg = vec_packsu(temp3, (vector unsigned short) vczero); |
2967 | 773 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
774 if (rightside) { |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
775 blockv = vec_perm(blockv, pixelsavg, vcprm(0, 1, s0, s1)); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
776 } else { |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
777 blockv = vec_perm(blockv, pixelsavg, vcprm(s0, s1, 2, 3)); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
778 } |
2967 | 779 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
780 vec_st(blockv, 0, block); |
2967 | 781 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
782 block += line_size; |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
783 pixels += line_size; |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
784 } |
2967 | 785 |
1352
e8ff4783f188
1) remove TBL support in PPC performance. It's much more useful to use the
michaelni
parents:
1340
diff
changeset
|
786 POWERPC_PERF_STOP_COUNT(altivec_put_pixels8_xy2_num, 1); |
995
edc10966b081
altivec jumbo patch by (Romain Dolbeau <dolbeaur at club-internet dot fr>)
michaelni
parents:
981
diff
changeset
|
787 } |
828
ace3ccd18dd2
Altivec Patch (Mark III) by (Dieter Shirley <dieters at schemasoft dot com>)
michaelni
parents:
638
diff
changeset
|
788 |
1024
9cc1031e1864
More AltiVec MC functions patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1015
diff
changeset
|
789 /* next one assumes that ((line_size % 8) == 0) */ |
11382
50415a8f1451
PPC: move prototypes to headers and make some functions static
mru
parents:
10082
diff
changeset
|
790 static void put_no_rnd_pixels8_xy2_altivec(uint8_t *block, const uint8_t *pixels, int line_size, int h) |
1024
9cc1031e1864
More AltiVec MC functions patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1015
diff
changeset
|
791 { |
1352
e8ff4783f188
1) remove TBL support in PPC performance. It's much more useful to use the
michaelni
parents:
1340
diff
changeset
|
792 POWERPC_PERF_DECLARE(altivec_put_no_rnd_pixels8_xy2_num, 1); |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
793 register int i; |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
794 register vector unsigned char pixelsv1, pixelsv2, pixelsavg; |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
795 register vector unsigned char blockv, temp1, temp2; |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
796 register vector unsigned short pixelssum1, pixelssum2, temp3; |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
797 register const vector unsigned char vczero = (const vector unsigned char)vec_splat_u8(0); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
798 register const vector unsigned short vcone = (const vector unsigned short)vec_splat_u16(1); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
799 register const vector unsigned short vctwo = (const vector unsigned short)vec_splat_u16(2); |
2967 | 800 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
801 temp1 = vec_ld(0, pixels); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
802 temp2 = vec_ld(16, pixels); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
803 pixelsv1 = vec_perm(temp1, temp2, vec_lvsl(0, pixels)); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
804 if ((((unsigned long)pixels) & 0x0000000F) == 0x0000000F) { |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
805 pixelsv2 = temp2; |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
806 } else { |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
807 pixelsv2 = vec_perm(temp1, temp2, vec_lvsl(1, pixels)); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
808 } |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
809 pixelsv1 = vec_mergeh(vczero, pixelsv1); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
810 pixelsv2 = vec_mergeh(vczero, pixelsv2); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
811 pixelssum1 = vec_add((vector unsigned short)pixelsv1, |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
812 (vector unsigned short)pixelsv2); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
813 pixelssum1 = vec_add(pixelssum1, vcone); |
2967 | 814 |
815 POWERPC_PERF_START_COUNT(altivec_put_no_rnd_pixels8_xy2_num, 1); | |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
816 for (i = 0; i < h ; i++) { |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
817 int rightside = ((unsigned long)block & 0x0000000F); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
818 blockv = vec_ld(0, block); |
1024
9cc1031e1864
More AltiVec MC functions patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1015
diff
changeset
|
819 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
820 temp1 = vec_ld(line_size, pixels); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
821 temp2 = vec_ld(line_size + 16, pixels); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
822 pixelsv1 = vec_perm(temp1, temp2, vec_lvsl(line_size, pixels)); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
823 if (((((unsigned long)pixels) + line_size) & 0x0000000F) == 0x0000000F) { |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
824 pixelsv2 = temp2; |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
825 } else { |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
826 pixelsv2 = vec_perm(temp1, temp2, vec_lvsl(line_size + 1, pixels)); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
827 } |
1024
9cc1031e1864
More AltiVec MC functions patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1015
diff
changeset
|
828 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
829 pixelsv1 = vec_mergeh(vczero, pixelsv1); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
830 pixelsv2 = vec_mergeh(vczero, pixelsv2); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
831 pixelssum2 = vec_add((vector unsigned short)pixelsv1, |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
832 (vector unsigned short)pixelsv2); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
833 temp3 = vec_add(pixelssum1, pixelssum2); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
834 temp3 = vec_sra(temp3, vctwo); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
835 pixelssum1 = vec_add(pixelssum2, vcone); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
836 pixelsavg = vec_packsu(temp3, (vector unsigned short) vczero); |
2967 | 837 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
838 if (rightside) { |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
839 blockv = vec_perm(blockv, pixelsavg, vcprm(0, 1, s0, s1)); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
840 } else { |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
841 blockv = vec_perm(blockv, pixelsavg, vcprm(s0, s1, 2, 3)); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
842 } |
2967 | 843 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
844 vec_st(blockv, 0, block); |
2967 | 845 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
846 block += line_size; |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
847 pixels += line_size; |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
848 } |
2967 | 849 |
1352
e8ff4783f188
1) remove TBL support in PPC performance. It's much more useful to use the
michaelni
parents:
1340
diff
changeset
|
850 POWERPC_PERF_STOP_COUNT(altivec_put_no_rnd_pixels8_xy2_num, 1); |
1024
9cc1031e1864
More AltiVec MC functions patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1015
diff
changeset
|
851 } |
9cc1031e1864
More AltiVec MC functions patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1015
diff
changeset
|
852 |
9cc1031e1864
More AltiVec MC functions patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1015
diff
changeset
|
853 /* next one assumes that ((line_size % 16) == 0) */ |
11382
50415a8f1451
PPC: move prototypes to headers and make some functions static
mru
parents:
10082
diff
changeset
|
854 static void put_pixels16_xy2_altivec(uint8_t * block, const uint8_t * pixels, int line_size, int h) |
1024
9cc1031e1864
More AltiVec MC functions patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1015
diff
changeset
|
855 { |
1352
e8ff4783f188
1) remove TBL support in PPC performance. It's much more useful to use the
michaelni
parents:
1340
diff
changeset
|
856 POWERPC_PERF_DECLARE(altivec_put_pixels16_xy2_num, 1); |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
857 register int i; |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
858 register vector unsigned char pixelsv1, pixelsv2, pixelsv3, pixelsv4; |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
859 register vector unsigned char blockv, temp1, temp2; |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
860 register vector unsigned short temp3, temp4, |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
861 pixelssum1, pixelssum2, pixelssum3, pixelssum4; |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
862 register const vector unsigned char vczero = (const vector unsigned char)vec_splat_u8(0); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
863 register const vector unsigned short vctwo = (const vector unsigned short)vec_splat_u16(2); |
1340
09b8fe0f0139
PPC fixes & clean-up patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1277
diff
changeset
|
864 |
1352
e8ff4783f188
1) remove TBL support in PPC performance. It's much more useful to use the
michaelni
parents:
1340
diff
changeset
|
865 POWERPC_PERF_START_COUNT(altivec_put_pixels16_xy2_num, 1); |
2967 | 866 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
867 temp1 = vec_ld(0, pixels); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
868 temp2 = vec_ld(16, pixels); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
869 pixelsv1 = vec_perm(temp1, temp2, vec_lvsl(0, pixels)); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
870 if ((((unsigned long)pixels) & 0x0000000F) == 0x0000000F) { |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
871 pixelsv2 = temp2; |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
872 } else { |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
873 pixelsv2 = vec_perm(temp1, temp2, vec_lvsl(1, pixels)); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
874 } |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
875 pixelsv3 = vec_mergel(vczero, pixelsv1); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
876 pixelsv4 = vec_mergel(vczero, pixelsv2); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
877 pixelsv1 = vec_mergeh(vczero, pixelsv1); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
878 pixelsv2 = vec_mergeh(vczero, pixelsv2); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
879 pixelssum3 = vec_add((vector unsigned short)pixelsv3, |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
880 (vector unsigned short)pixelsv4); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
881 pixelssum3 = vec_add(pixelssum3, vctwo); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
882 pixelssum1 = vec_add((vector unsigned short)pixelsv1, |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
883 (vector unsigned short)pixelsv2); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
884 pixelssum1 = vec_add(pixelssum1, vctwo); |
2967 | 885 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
886 for (i = 0; i < h ; i++) { |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
887 blockv = vec_ld(0, block); |
1024
9cc1031e1864
More AltiVec MC functions patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1015
diff
changeset
|
888 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
889 temp1 = vec_ld(line_size, pixels); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
890 temp2 = vec_ld(line_size + 16, pixels); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
891 pixelsv1 = vec_perm(temp1, temp2, vec_lvsl(line_size, pixels)); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
892 if (((((unsigned long)pixels) + line_size) & 0x0000000F) == 0x0000000F) { |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
893 pixelsv2 = temp2; |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
894 } else { |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
895 pixelsv2 = vec_perm(temp1, temp2, vec_lvsl(line_size + 1, pixels)); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
896 } |
1024
9cc1031e1864
More AltiVec MC functions patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1015
diff
changeset
|
897 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
898 pixelsv3 = vec_mergel(vczero, pixelsv1); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
899 pixelsv4 = vec_mergel(vczero, pixelsv2); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
900 pixelsv1 = vec_mergeh(vczero, pixelsv1); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
901 pixelsv2 = vec_mergeh(vczero, pixelsv2); |
2967 | 902 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
903 pixelssum4 = vec_add((vector unsigned short)pixelsv3, |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
904 (vector unsigned short)pixelsv4); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
905 pixelssum2 = vec_add((vector unsigned short)pixelsv1, |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
906 (vector unsigned short)pixelsv2); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
907 temp4 = vec_add(pixelssum3, pixelssum4); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
908 temp4 = vec_sra(temp4, vctwo); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
909 temp3 = vec_add(pixelssum1, pixelssum2); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
910 temp3 = vec_sra(temp3, vctwo); |
1024
9cc1031e1864
More AltiVec MC functions patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1015
diff
changeset
|
911 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
912 pixelssum3 = vec_add(pixelssum4, vctwo); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
913 pixelssum1 = vec_add(pixelssum2, vctwo); |
1024
9cc1031e1864
More AltiVec MC functions patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1015
diff
changeset
|
914 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
915 blockv = vec_packsu(temp3, temp4); |
2967 | 916 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
917 vec_st(blockv, 0, block); |
2967 | 918 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
919 block += line_size; |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
920 pixels += line_size; |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
921 } |
2967 | 922 |
1352
e8ff4783f188
1) remove TBL support in PPC performance. It's much more useful to use the
michaelni
parents:
1340
diff
changeset
|
923 POWERPC_PERF_STOP_COUNT(altivec_put_pixels16_xy2_num, 1); |
1024
9cc1031e1864
More AltiVec MC functions patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1015
diff
changeset
|
924 } |
9cc1031e1864
More AltiVec MC functions patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1015
diff
changeset
|
925 |
9cc1031e1864
More AltiVec MC functions patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1015
diff
changeset
|
926 /* next one assumes that ((line_size % 16) == 0) */ |
11382
50415a8f1451
PPC: move prototypes to headers and make some functions static
mru
parents:
10082
diff
changeset
|
927 static void put_no_rnd_pixels16_xy2_altivec(uint8_t * block, const uint8_t * pixels, int line_size, int h) |
1024
9cc1031e1864
More AltiVec MC functions patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1015
diff
changeset
|
928 { |
1352
e8ff4783f188
1) remove TBL support in PPC performance. It's much more useful to use the
michaelni
parents:
1340
diff
changeset
|
929 POWERPC_PERF_DECLARE(altivec_put_no_rnd_pixels16_xy2_num, 1); |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
930 register int i; |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
931 register vector unsigned char pixelsv1, pixelsv2, pixelsv3, pixelsv4; |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
932 register vector unsigned char blockv, temp1, temp2; |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
933 register vector unsigned short temp3, temp4, |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
934 pixelssum1, pixelssum2, pixelssum3, pixelssum4; |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
935 register const vector unsigned char vczero = (const vector unsigned char)vec_splat_u8(0); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
936 register const vector unsigned short vcone = (const vector unsigned short)vec_splat_u16(1); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
937 register const vector unsigned short vctwo = (const vector unsigned short)vec_splat_u16(2); |
1340
09b8fe0f0139
PPC fixes & clean-up patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1277
diff
changeset
|
938 |
1352
e8ff4783f188
1) remove TBL support in PPC performance. It's much more useful to use the
michaelni
parents:
1340
diff
changeset
|
939 POWERPC_PERF_START_COUNT(altivec_put_no_rnd_pixels16_xy2_num, 1); |
2967 | 940 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
941 temp1 = vec_ld(0, pixels); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
942 temp2 = vec_ld(16, pixels); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
943 pixelsv1 = vec_perm(temp1, temp2, vec_lvsl(0, pixels)); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
944 if ((((unsigned long)pixels) & 0x0000000F) == 0x0000000F) { |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
945 pixelsv2 = temp2; |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
946 } else { |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
947 pixelsv2 = vec_perm(temp1, temp2, vec_lvsl(1, pixels)); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
948 } |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
949 pixelsv3 = vec_mergel(vczero, pixelsv1); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
950 pixelsv4 = vec_mergel(vczero, pixelsv2); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
951 pixelsv1 = vec_mergeh(vczero, pixelsv1); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
952 pixelsv2 = vec_mergeh(vczero, pixelsv2); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
953 pixelssum3 = vec_add((vector unsigned short)pixelsv3, |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
954 (vector unsigned short)pixelsv4); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
955 pixelssum3 = vec_add(pixelssum3, vcone); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
956 pixelssum1 = vec_add((vector unsigned short)pixelsv1, |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
957 (vector unsigned short)pixelsv2); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
958 pixelssum1 = vec_add(pixelssum1, vcone); |
2967 | 959 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
960 for (i = 0; i < h ; i++) { |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
961 blockv = vec_ld(0, block); |
1024
9cc1031e1864
More AltiVec MC functions patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1015
diff
changeset
|
962 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
963 temp1 = vec_ld(line_size, pixels); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
964 temp2 = vec_ld(line_size + 16, pixels); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
965 pixelsv1 = vec_perm(temp1, temp2, vec_lvsl(line_size, pixels)); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
966 if (((((unsigned long)pixels) + line_size) & 0x0000000F) == 0x0000000F) { |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
967 pixelsv2 = temp2; |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
968 } else { |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
969 pixelsv2 = vec_perm(temp1, temp2, vec_lvsl(line_size + 1, pixels)); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
970 } |
1024
9cc1031e1864
More AltiVec MC functions patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1015
diff
changeset
|
971 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
972 pixelsv3 = vec_mergel(vczero, pixelsv1); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
973 pixelsv4 = vec_mergel(vczero, pixelsv2); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
974 pixelsv1 = vec_mergeh(vczero, pixelsv1); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
975 pixelsv2 = vec_mergeh(vczero, pixelsv2); |
2967 | 976 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
977 pixelssum4 = vec_add((vector unsigned short)pixelsv3, |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
978 (vector unsigned short)pixelsv4); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
979 pixelssum2 = vec_add((vector unsigned short)pixelsv1, |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
980 (vector unsigned short)pixelsv2); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
981 temp4 = vec_add(pixelssum3, pixelssum4); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
982 temp4 = vec_sra(temp4, vctwo); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
983 temp3 = vec_add(pixelssum1, pixelssum2); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
984 temp3 = vec_sra(temp3, vctwo); |
1024
9cc1031e1864
More AltiVec MC functions patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1015
diff
changeset
|
985 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
986 pixelssum3 = vec_add(pixelssum4, vcone); |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
987 pixelssum1 = vec_add(pixelssum2, vcone); |
1024
9cc1031e1864
More AltiVec MC functions patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1015
diff
changeset
|
988 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
989 blockv = vec_packsu(temp3, temp4); |
2967 | 990 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
991 vec_st(blockv, 0, block); |
2967 | 992 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
993 block += line_size; |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
994 pixels += line_size; |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
995 } |
2967 | 996 |
1352
e8ff4783f188
1) remove TBL support in PPC performance. It's much more useful to use the
michaelni
parents:
1340
diff
changeset
|
997 POWERPC_PERF_STOP_COUNT(altivec_put_no_rnd_pixels16_xy2_num, 1); |
1024
9cc1031e1864
More AltiVec MC functions patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1015
diff
changeset
|
998 } |
9cc1031e1864
More AltiVec MC functions patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michaelni
parents:
1015
diff
changeset
|
999 |
11382
50415a8f1451
PPC: move prototypes to headers and make some functions static
mru
parents:
10082
diff
changeset
|
1000 static int hadamard8_diff8x8_altivec(/*MpegEncContext*/ void *s, uint8_t *dst, uint8_t *src, int stride, int h){ |
1949
66215baae7b9
hadamard8_diff8x8 in AltiVec, the 16bits edition by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1839
diff
changeset
|
1001 POWERPC_PERF_DECLARE(altivec_hadamard8_diff8x8_num, 1); |
3554 | 1002 int sum; |
5746
55ed6dc5d476
Remove const vector macro indirection that is useless and obfuscating
diego
parents:
5609
diff
changeset
|
1003 register const vector unsigned char vzero = |
55ed6dc5d476
Remove const vector macro indirection that is useless and obfuscating
diego
parents:
5609
diff
changeset
|
1004 (const vector unsigned char)vec_splat_u8(0); |
3554 | 1005 register vector signed short temp0, temp1, temp2, temp3, temp4, |
1006 temp5, temp6, temp7; | |
3346
052765f11f1c
Cosmetics: should not hurt performance, scream if are
lu_zero
parents:
3252
diff
changeset
|
1007 POWERPC_PERF_START_COUNT(altivec_hadamard8_diff8x8_num, 1); |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1008 { |
5746
55ed6dc5d476
Remove const vector macro indirection that is useless and obfuscating
diego
parents:
5609
diff
changeset
|
1009 register const vector signed short vprod1 =(const vector signed short) |
7373
266d4949aa15
Remove AltiVec vector declaration compiler compatibility macros.
diego
parents:
7335
diff
changeset
|
1010 { 1,-1, 1,-1, 1,-1, 1,-1 }; |
5746
55ed6dc5d476
Remove const vector macro indirection that is useless and obfuscating
diego
parents:
5609
diff
changeset
|
1011 register const vector signed short vprod2 =(const vector signed short) |
7373
266d4949aa15
Remove AltiVec vector declaration compiler compatibility macros.
diego
parents:
7335
diff
changeset
|
1012 { 1, 1,-1,-1, 1, 1,-1,-1 }; |
5746
55ed6dc5d476
Remove const vector macro indirection that is useless and obfuscating
diego
parents:
5609
diff
changeset
|
1013 register const vector signed short vprod3 =(const vector signed short) |
7373
266d4949aa15
Remove AltiVec vector declaration compiler compatibility macros.
diego
parents:
7335
diff
changeset
|
1014 { 1, 1, 1, 1,-1,-1,-1,-1 }; |
5746
55ed6dc5d476
Remove const vector macro indirection that is useless and obfuscating
diego
parents:
5609
diff
changeset
|
1015 register const vector unsigned char perm1 = (const vector unsigned char) |
7373
266d4949aa15
Remove AltiVec vector declaration compiler compatibility macros.
diego
parents:
7335
diff
changeset
|
1016 {0x02, 0x03, 0x00, 0x01, 0x06, 0x07, 0x04, 0x05, |
266d4949aa15
Remove AltiVec vector declaration compiler compatibility macros.
diego
parents:
7335
diff
changeset
|
1017 0x0A, 0x0B, 0x08, 0x09, 0x0E, 0x0F, 0x0C, 0x0D}; |
5746
55ed6dc5d476
Remove const vector macro indirection that is useless and obfuscating
diego
parents:
5609
diff
changeset
|
1018 register const vector unsigned char perm2 = (const vector unsigned char) |
7373
266d4949aa15
Remove AltiVec vector declaration compiler compatibility macros.
diego
parents:
7335
diff
changeset
|
1019 {0x04, 0x05, 0x06, 0x07, 0x00, 0x01, 0x02, 0x03, |
266d4949aa15
Remove AltiVec vector declaration compiler compatibility macros.
diego
parents:
7335
diff
changeset
|
1020 0x0C, 0x0D, 0x0E, 0x0F, 0x08, 0x09, 0x0A, 0x0B}; |
5746
55ed6dc5d476
Remove const vector macro indirection that is useless and obfuscating
diego
parents:
5609
diff
changeset
|
1021 register const vector unsigned char perm3 = (const vector unsigned char) |
7373
266d4949aa15
Remove AltiVec vector declaration compiler compatibility macros.
diego
parents:
7335
diff
changeset
|
1022 {0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, |
266d4949aa15
Remove AltiVec vector declaration compiler compatibility macros.
diego
parents:
7335
diff
changeset
|
1023 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}; |
1949
66215baae7b9
hadamard8_diff8x8 in AltiVec, the 16bits edition by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1839
diff
changeset
|
1024 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1025 #define ONEITERBUTTERFLY(i, res) \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1026 { \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1027 register vector unsigned char src1, src2, srcO; \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1028 register vector unsigned char dst1, dst2, dstO; \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1029 register vector signed short srcV, dstV; \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1030 register vector signed short but0, but1, but2, op1, op2, op3; \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1031 src1 = vec_ld(stride * i, src); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1032 src2 = vec_ld((stride * i) + 15, src); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1033 srcO = vec_perm(src1, src2, vec_lvsl(stride * i, src)); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1034 dst1 = vec_ld(stride * i, dst); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1035 dst2 = vec_ld((stride * i) + 15, dst); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1036 dstO = vec_perm(dst1, dst2, vec_lvsl(stride * i, dst)); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1037 /* promote the unsigned chars to signed shorts */ \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1038 /* we're in the 8x8 function, we only care for the first 8 */ \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1039 srcV = (vector signed short)vec_mergeh((vector signed char)vzero, \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1040 (vector signed char)srcO); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1041 dstV = (vector signed short)vec_mergeh((vector signed char)vzero, \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1042 (vector signed char)dstO); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1043 /* subtractions inside the first butterfly */ \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1044 but0 = vec_sub(srcV, dstV); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1045 op1 = vec_perm(but0, but0, perm1); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1046 but1 = vec_mladd(but0, vprod1, op1); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1047 op2 = vec_perm(but1, but1, perm2); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1048 but2 = vec_mladd(but1, vprod2, op2); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1049 op3 = vec_perm(but2, but2, perm3); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1050 res = vec_mladd(but2, vprod3, op3); \ |
1949
66215baae7b9
hadamard8_diff8x8 in AltiVec, the 16bits edition by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1839
diff
changeset
|
1051 } |
66215baae7b9
hadamard8_diff8x8 in AltiVec, the 16bits edition by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1839
diff
changeset
|
1052 ONEITERBUTTERFLY(0, temp0); |
66215baae7b9
hadamard8_diff8x8 in AltiVec, the 16bits edition by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1839
diff
changeset
|
1053 ONEITERBUTTERFLY(1, temp1); |
66215baae7b9
hadamard8_diff8x8 in AltiVec, the 16bits edition by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1839
diff
changeset
|
1054 ONEITERBUTTERFLY(2, temp2); |
66215baae7b9
hadamard8_diff8x8 in AltiVec, the 16bits edition by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1839
diff
changeset
|
1055 ONEITERBUTTERFLY(3, temp3); |
66215baae7b9
hadamard8_diff8x8 in AltiVec, the 16bits edition by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1839
diff
changeset
|
1056 ONEITERBUTTERFLY(4, temp4); |
66215baae7b9
hadamard8_diff8x8 in AltiVec, the 16bits edition by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1839
diff
changeset
|
1057 ONEITERBUTTERFLY(5, temp5); |
66215baae7b9
hadamard8_diff8x8 in AltiVec, the 16bits edition by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1839
diff
changeset
|
1058 ONEITERBUTTERFLY(6, temp6); |
66215baae7b9
hadamard8_diff8x8 in AltiVec, the 16bits edition by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1839
diff
changeset
|
1059 ONEITERBUTTERFLY(7, temp7); |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1060 } |
1949
66215baae7b9
hadamard8_diff8x8 in AltiVec, the 16bits edition by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1839
diff
changeset
|
1061 #undef ONEITERBUTTERFLY |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1062 { |
1951
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1063 register vector signed int vsum; |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1064 register vector signed short line0 = vec_add(temp0, temp1); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1065 register vector signed short line1 = vec_sub(temp0, temp1); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1066 register vector signed short line2 = vec_add(temp2, temp3); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1067 register vector signed short line3 = vec_sub(temp2, temp3); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1068 register vector signed short line4 = vec_add(temp4, temp5); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1069 register vector signed short line5 = vec_sub(temp4, temp5); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1070 register vector signed short line6 = vec_add(temp6, temp7); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1071 register vector signed short line7 = vec_sub(temp6, temp7); |
2967 | 1072 |
1951
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1073 register vector signed short line0B = vec_add(line0, line2); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1074 register vector signed short line2B = vec_sub(line0, line2); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1075 register vector signed short line1B = vec_add(line1, line3); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1076 register vector signed short line3B = vec_sub(line1, line3); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1077 register vector signed short line4B = vec_add(line4, line6); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1078 register vector signed short line6B = vec_sub(line4, line6); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1079 register vector signed short line5B = vec_add(line5, line7); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1080 register vector signed short line7B = vec_sub(line5, line7); |
2967 | 1081 |
1951
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1082 register vector signed short line0C = vec_add(line0B, line4B); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1083 register vector signed short line4C = vec_sub(line0B, line4B); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1084 register vector signed short line1C = vec_add(line1B, line5B); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1085 register vector signed short line5C = vec_sub(line1B, line5B); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1086 register vector signed short line2C = vec_add(line2B, line6B); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1087 register vector signed short line6C = vec_sub(line2B, line6B); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1088 register vector signed short line3C = vec_add(line3B, line7B); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1089 register vector signed short line7C = vec_sub(line3B, line7B); |
2967 | 1090 |
1951
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1091 vsum = vec_sum4s(vec_abs(line0C), vec_splat_s32(0)); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1092 vsum = vec_sum4s(vec_abs(line1C), vsum); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1093 vsum = vec_sum4s(vec_abs(line2C), vsum); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1094 vsum = vec_sum4s(vec_abs(line3C), vsum); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1095 vsum = vec_sum4s(vec_abs(line4C), vsum); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1096 vsum = vec_sum4s(vec_abs(line5C), vsum); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1097 vsum = vec_sum4s(vec_abs(line6C), vsum); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1098 vsum = vec_sum4s(vec_abs(line7C), vsum); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1099 vsum = vec_sums(vsum, (vector signed int)vzero); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1100 vsum = vec_splat(vsum, 3); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1101 vec_ste(vsum, 0, &sum); |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1102 } |
1949
66215baae7b9
hadamard8_diff8x8 in AltiVec, the 16bits edition by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1839
diff
changeset
|
1103 POWERPC_PERF_STOP_COUNT(altivec_hadamard8_diff8x8_num, 1); |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1104 return sum; |
1949
66215baae7b9
hadamard8_diff8x8 in AltiVec, the 16bits edition by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1839
diff
changeset
|
1105 } |
66215baae7b9
hadamard8_diff8x8 in AltiVec, the 16bits edition by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1839
diff
changeset
|
1106 |
1951
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1107 /* |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1108 16x8 works with 16 elements; it allows to avoid replicating loads, and |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1109 give the compiler more rooms for scheduling. It's only used from |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1110 inside hadamard8_diff16_altivec. |
2967 | 1111 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1112 Unfortunately, it seems gcc-3.3 is a bit dumb, and the compiled code has a LOT |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1113 of spill code, it seems gcc (unlike xlc) cannot keep everything in registers |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1114 by itself. The following code include hand-made registers allocation. It's not |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1115 clean, but on a 7450 the resulting code is much faster (best case fall from |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1116 700+ cycles to 550). |
2967 | 1117 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1118 xlc doesn't add spill code, but it doesn't know how to schedule for the 7450, |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1119 and its code isn't much faster than gcc-3.3 on the 7450 (but uses 25% less |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1120 instructions...) |
2967 | 1121 |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1122 On the 970, the hand-made RA is still a win (around 690 vs. around 780), but |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1123 xlc goes to around 660 on the regular C code... |
1951
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1124 */ |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1125 |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1126 static int hadamard8_diff16x8_altivec(/*MpegEncContext*/ void *s, uint8_t *dst, uint8_t *src, int stride, int h) { |
3554 | 1127 int sum; |
1128 register vector signed short | |
9421
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1129 temp0 __asm__ ("v0"), |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1130 temp1 __asm__ ("v1"), |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1131 temp2 __asm__ ("v2"), |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1132 temp3 __asm__ ("v3"), |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1133 temp4 __asm__ ("v4"), |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1134 temp5 __asm__ ("v5"), |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1135 temp6 __asm__ ("v6"), |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1136 temp7 __asm__ ("v7"); |
3554 | 1137 register vector signed short |
9421
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1138 temp0S __asm__ ("v8"), |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1139 temp1S __asm__ ("v9"), |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1140 temp2S __asm__ ("v10"), |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1141 temp3S __asm__ ("v11"), |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1142 temp4S __asm__ ("v12"), |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1143 temp5S __asm__ ("v13"), |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1144 temp6S __asm__ ("v14"), |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1145 temp7S __asm__ ("v15"); |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1146 register const vector unsigned char vzero __asm__ ("v31") = |
5746
55ed6dc5d476
Remove const vector macro indirection that is useless and obfuscating
diego
parents:
5609
diff
changeset
|
1147 (const vector unsigned char)vec_splat_u8(0); |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1148 { |
9421
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1149 register const vector signed short vprod1 __asm__ ("v16") = |
7373
266d4949aa15
Remove AltiVec vector declaration compiler compatibility macros.
diego
parents:
7335
diff
changeset
|
1150 (const vector signed short){ 1,-1, 1,-1, 1,-1, 1,-1 }; |
9421
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1151 register const vector signed short vprod2 __asm__ ("v17") = |
7373
266d4949aa15
Remove AltiVec vector declaration compiler compatibility macros.
diego
parents:
7335
diff
changeset
|
1152 (const vector signed short){ 1, 1,-1,-1, 1, 1,-1,-1 }; |
9421
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1153 register const vector signed short vprod3 __asm__ ("v18") = |
7373
266d4949aa15
Remove AltiVec vector declaration compiler compatibility macros.
diego
parents:
7335
diff
changeset
|
1154 (const vector signed short){ 1, 1, 1, 1,-1,-1,-1,-1 }; |
9421
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1155 register const vector unsigned char perm1 __asm__ ("v19") = |
5746
55ed6dc5d476
Remove const vector macro indirection that is useless and obfuscating
diego
parents:
5609
diff
changeset
|
1156 (const vector unsigned char) |
7373
266d4949aa15
Remove AltiVec vector declaration compiler compatibility macros.
diego
parents:
7335
diff
changeset
|
1157 {0x02, 0x03, 0x00, 0x01, 0x06, 0x07, 0x04, 0x05, |
266d4949aa15
Remove AltiVec vector declaration compiler compatibility macros.
diego
parents:
7335
diff
changeset
|
1158 0x0A, 0x0B, 0x08, 0x09, 0x0E, 0x0F, 0x0C, 0x0D}; |
9421
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1159 register const vector unsigned char perm2 __asm__ ("v20") = |
5746
55ed6dc5d476
Remove const vector macro indirection that is useless and obfuscating
diego
parents:
5609
diff
changeset
|
1160 (const vector unsigned char) |
7373
266d4949aa15
Remove AltiVec vector declaration compiler compatibility macros.
diego
parents:
7335
diff
changeset
|
1161 {0x04, 0x05, 0x06, 0x07, 0x00, 0x01, 0x02, 0x03, |
266d4949aa15
Remove AltiVec vector declaration compiler compatibility macros.
diego
parents:
7335
diff
changeset
|
1162 0x0C, 0x0D, 0x0E, 0x0F, 0x08, 0x09, 0x0A, 0x0B}; |
9421
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1163 register const vector unsigned char perm3 __asm__ ("v21") = |
5746
55ed6dc5d476
Remove const vector macro indirection that is useless and obfuscating
diego
parents:
5609
diff
changeset
|
1164 (const vector unsigned char) |
7373
266d4949aa15
Remove AltiVec vector declaration compiler compatibility macros.
diego
parents:
7335
diff
changeset
|
1165 {0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, |
266d4949aa15
Remove AltiVec vector declaration compiler compatibility macros.
diego
parents:
7335
diff
changeset
|
1166 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}; |
1980 | 1167 |
9421
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1168 #define ONEITERBUTTERFLY(i, res1, res2) \ |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1169 { \ |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1170 register vector unsigned char src1 __asm__ ("v22"), \ |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1171 src2 __asm__ ("v23"), \ |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1172 dst1 __asm__ ("v24"), \ |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1173 dst2 __asm__ ("v25"), \ |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1174 srcO __asm__ ("v22"), \ |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1175 dstO __asm__ ("v23"); \ |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1176 \ |
9421
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1177 register vector signed short srcV __asm__ ("v24"), \ |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1178 dstV __asm__ ("v25"), \ |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1179 srcW __asm__ ("v26"), \ |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1180 dstW __asm__ ("v27"), \ |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1181 but0 __asm__ ("v28"), \ |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1182 but0S __asm__ ("v29"), \ |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1183 op1 __asm__ ("v30"), \ |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1184 but1 __asm__ ("v22"), \ |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1185 op1S __asm__ ("v23"), \ |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1186 but1S __asm__ ("v24"), \ |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1187 op2 __asm__ ("v25"), \ |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1188 but2 __asm__ ("v26"), \ |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1189 op2S __asm__ ("v27"), \ |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1190 but2S __asm__ ("v28"), \ |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1191 op3 __asm__ ("v29"), \ |
dd2b5e52336a
Remove gcc_fixes.h. It only contains workarounds for unsupported gcc versions.
diego
parents:
8596
diff
changeset
|
1192 op3S __asm__ ("v30"); \ |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1193 \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1194 src1 = vec_ld(stride * i, src); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1195 src2 = vec_ld((stride * i) + 16, src); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1196 srcO = vec_perm(src1, src2, vec_lvsl(stride * i, src)); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1197 dst1 = vec_ld(stride * i, dst); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1198 dst2 = vec_ld((stride * i) + 16, dst); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1199 dstO = vec_perm(dst1, dst2, vec_lvsl(stride * i, dst)); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1200 /* promote the unsigned chars to signed shorts */ \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1201 srcV = (vector signed short)vec_mergeh((vector signed char)vzero, \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1202 (vector signed char)srcO); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1203 dstV = (vector signed short)vec_mergeh((vector signed char)vzero, \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1204 (vector signed char)dstO); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1205 srcW = (vector signed short)vec_mergel((vector signed char)vzero, \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1206 (vector signed char)srcO); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1207 dstW = (vector signed short)vec_mergel((vector signed char)vzero, \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1208 (vector signed char)dstO); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1209 /* subtractions inside the first butterfly */ \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1210 but0 = vec_sub(srcV, dstV); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1211 but0S = vec_sub(srcW, dstW); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1212 op1 = vec_perm(but0, but0, perm1); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1213 but1 = vec_mladd(but0, vprod1, op1); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1214 op1S = vec_perm(but0S, but0S, perm1); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1215 but1S = vec_mladd(but0S, vprod1, op1S); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1216 op2 = vec_perm(but1, but1, perm2); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1217 but2 = vec_mladd(but1, vprod2, op2); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1218 op2S = vec_perm(but1S, but1S, perm2); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1219 but2S = vec_mladd(but1S, vprod2, op2S); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1220 op3 = vec_perm(but2, but2, perm3); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1221 res1 = vec_mladd(but2, vprod3, op3); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1222 op3S = vec_perm(but2S, but2S, perm3); \ |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1223 res2 = vec_mladd(but2S, vprod3, op3S); \ |
1951
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1224 } |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1225 ONEITERBUTTERFLY(0, temp0, temp0S); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1226 ONEITERBUTTERFLY(1, temp1, temp1S); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1227 ONEITERBUTTERFLY(2, temp2, temp2S); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1228 ONEITERBUTTERFLY(3, temp3, temp3S); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1229 ONEITERBUTTERFLY(4, temp4, temp4S); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1230 ONEITERBUTTERFLY(5, temp5, temp5S); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1231 ONEITERBUTTERFLY(6, temp6, temp6S); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1232 ONEITERBUTTERFLY(7, temp7, temp7S); |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1233 } |
1951
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1234 #undef ONEITERBUTTERFLY |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1235 { |
1951
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1236 register vector signed int vsum; |
3346
052765f11f1c
Cosmetics: should not hurt performance, scream if are
lu_zero
parents:
3252
diff
changeset
|
1237 register vector signed short line0S, line1S, line2S, line3S, line4S, |
052765f11f1c
Cosmetics: should not hurt performance, scream if are
lu_zero
parents:
3252
diff
changeset
|
1238 line5S, line6S, line7S, line0BS,line2BS, |
052765f11f1c
Cosmetics: should not hurt performance, scream if are
lu_zero
parents:
3252
diff
changeset
|
1239 line1BS,line3BS,line4BS,line6BS,line5BS, |
052765f11f1c
Cosmetics: should not hurt performance, scream if are
lu_zero
parents:
3252
diff
changeset
|
1240 line7BS,line0CS,line4CS,line1CS,line5CS, |
052765f11f1c
Cosmetics: should not hurt performance, scream if are
lu_zero
parents:
3252
diff
changeset
|
1241 line2CS,line6CS,line3CS,line7CS; |
052765f11f1c
Cosmetics: should not hurt performance, scream if are
lu_zero
parents:
3252
diff
changeset
|
1242 |
1951
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1243 register vector signed short line0 = vec_add(temp0, temp1); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1244 register vector signed short line1 = vec_sub(temp0, temp1); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1245 register vector signed short line2 = vec_add(temp2, temp3); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1246 register vector signed short line3 = vec_sub(temp2, temp3); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1247 register vector signed short line4 = vec_add(temp4, temp5); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1248 register vector signed short line5 = vec_sub(temp4, temp5); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1249 register vector signed short line6 = vec_add(temp6, temp7); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1250 register vector signed short line7 = vec_sub(temp6, temp7); |
2967 | 1251 |
1951
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1252 register vector signed short line0B = vec_add(line0, line2); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1253 register vector signed short line2B = vec_sub(line0, line2); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1254 register vector signed short line1B = vec_add(line1, line3); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1255 register vector signed short line3B = vec_sub(line1, line3); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1256 register vector signed short line4B = vec_add(line4, line6); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1257 register vector signed short line6B = vec_sub(line4, line6); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1258 register vector signed short line5B = vec_add(line5, line7); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1259 register vector signed short line7B = vec_sub(line5, line7); |
2967 | 1260 |
1951
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1261 register vector signed short line0C = vec_add(line0B, line4B); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1262 register vector signed short line4C = vec_sub(line0B, line4B); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1263 register vector signed short line1C = vec_add(line1B, line5B); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1264 register vector signed short line5C = vec_sub(line1B, line5B); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1265 register vector signed short line2C = vec_add(line2B, line6B); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1266 register vector signed short line6C = vec_sub(line2B, line6B); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1267 register vector signed short line3C = vec_add(line3B, line7B); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1268 register vector signed short line7C = vec_sub(line3B, line7B); |
2967 | 1269 |
1951
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1270 vsum = vec_sum4s(vec_abs(line0C), vec_splat_s32(0)); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1271 vsum = vec_sum4s(vec_abs(line1C), vsum); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1272 vsum = vec_sum4s(vec_abs(line2C), vsum); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1273 vsum = vec_sum4s(vec_abs(line3C), vsum); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1274 vsum = vec_sum4s(vec_abs(line4C), vsum); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1275 vsum = vec_sum4s(vec_abs(line5C), vsum); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1276 vsum = vec_sum4s(vec_abs(line6C), vsum); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1277 vsum = vec_sum4s(vec_abs(line7C), vsum); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1278 |
3346
052765f11f1c
Cosmetics: should not hurt performance, scream if are
lu_zero
parents:
3252
diff
changeset
|
1279 line0S = vec_add(temp0S, temp1S); |
052765f11f1c
Cosmetics: should not hurt performance, scream if are
lu_zero
parents:
3252
diff
changeset
|
1280 line1S = vec_sub(temp0S, temp1S); |
052765f11f1c
Cosmetics: should not hurt performance, scream if are
lu_zero
parents:
3252
diff
changeset
|
1281 line2S = vec_add(temp2S, temp3S); |
052765f11f1c
Cosmetics: should not hurt performance, scream if are
lu_zero
parents:
3252
diff
changeset
|
1282 line3S = vec_sub(temp2S, temp3S); |
052765f11f1c
Cosmetics: should not hurt performance, scream if are
lu_zero
parents:
3252
diff
changeset
|
1283 line4S = vec_add(temp4S, temp5S); |
052765f11f1c
Cosmetics: should not hurt performance, scream if are
lu_zero
parents:
3252
diff
changeset
|
1284 line5S = vec_sub(temp4S, temp5S); |
052765f11f1c
Cosmetics: should not hurt performance, scream if are
lu_zero
parents:
3252
diff
changeset
|
1285 line6S = vec_add(temp6S, temp7S); |
052765f11f1c
Cosmetics: should not hurt performance, scream if are
lu_zero
parents:
3252
diff
changeset
|
1286 line7S = vec_sub(temp6S, temp7S); |
1951
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1287 |
3346
052765f11f1c
Cosmetics: should not hurt performance, scream if are
lu_zero
parents:
3252
diff
changeset
|
1288 line0BS = vec_add(line0S, line2S); |
052765f11f1c
Cosmetics: should not hurt performance, scream if are
lu_zero
parents:
3252
diff
changeset
|
1289 line2BS = vec_sub(line0S, line2S); |
052765f11f1c
Cosmetics: should not hurt performance, scream if are
lu_zero
parents:
3252
diff
changeset
|
1290 line1BS = vec_add(line1S, line3S); |
052765f11f1c
Cosmetics: should not hurt performance, scream if are
lu_zero
parents:
3252
diff
changeset
|
1291 line3BS = vec_sub(line1S, line3S); |
052765f11f1c
Cosmetics: should not hurt performance, scream if are
lu_zero
parents:
3252
diff
changeset
|
1292 line4BS = vec_add(line4S, line6S); |
052765f11f1c
Cosmetics: should not hurt performance, scream if are
lu_zero
parents:
3252
diff
changeset
|
1293 line6BS = vec_sub(line4S, line6S); |
052765f11f1c
Cosmetics: should not hurt performance, scream if are
lu_zero
parents:
3252
diff
changeset
|
1294 line5BS = vec_add(line5S, line7S); |
052765f11f1c
Cosmetics: should not hurt performance, scream if are
lu_zero
parents:
3252
diff
changeset
|
1295 line7BS = vec_sub(line5S, line7S); |
1951
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1296 |
3346
052765f11f1c
Cosmetics: should not hurt performance, scream if are
lu_zero
parents:
3252
diff
changeset
|
1297 line0CS = vec_add(line0BS, line4BS); |
052765f11f1c
Cosmetics: should not hurt performance, scream if are
lu_zero
parents:
3252
diff
changeset
|
1298 line4CS = vec_sub(line0BS, line4BS); |
052765f11f1c
Cosmetics: should not hurt performance, scream if are
lu_zero
parents:
3252
diff
changeset
|
1299 line1CS = vec_add(line1BS, line5BS); |
052765f11f1c
Cosmetics: should not hurt performance, scream if are
lu_zero
parents:
3252
diff
changeset
|
1300 line5CS = vec_sub(line1BS, line5BS); |
052765f11f1c
Cosmetics: should not hurt performance, scream if are
lu_zero
parents:
3252
diff
changeset
|
1301 line2CS = vec_add(line2BS, line6BS); |
052765f11f1c
Cosmetics: should not hurt performance, scream if are
lu_zero
parents:
3252
diff
changeset
|
1302 line6CS = vec_sub(line2BS, line6BS); |
052765f11f1c
Cosmetics: should not hurt performance, scream if are
lu_zero
parents:
3252
diff
changeset
|
1303 line3CS = vec_add(line3BS, line7BS); |
052765f11f1c
Cosmetics: should not hurt performance, scream if are
lu_zero
parents:
3252
diff
changeset
|
1304 line7CS = vec_sub(line3BS, line7BS); |
1951
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1305 |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1306 vsum = vec_sum4s(vec_abs(line0CS), vsum); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1307 vsum = vec_sum4s(vec_abs(line1CS), vsum); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1308 vsum = vec_sum4s(vec_abs(line2CS), vsum); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1309 vsum = vec_sum4s(vec_abs(line3CS), vsum); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1310 vsum = vec_sum4s(vec_abs(line4CS), vsum); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1311 vsum = vec_sum4s(vec_abs(line5CS), vsum); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1312 vsum = vec_sum4s(vec_abs(line6CS), vsum); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1313 vsum = vec_sum4s(vec_abs(line7CS), vsum); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1314 vsum = vec_sums(vsum, (vector signed int)vzero); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1315 vsum = vec_splat(vsum, 3); |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1316 vec_ste(vsum, 0, &sum); |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1317 } |
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1318 return sum; |
1951
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1319 } |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1320 |
11382
50415a8f1451
PPC: move prototypes to headers and make some functions static
mru
parents:
10082
diff
changeset
|
1321 static int hadamard8_diff16_altivec(/*MpegEncContext*/ void *s, uint8_t *dst, uint8_t *src, int stride, int h){ |
1951
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1322 POWERPC_PERF_DECLARE(altivec_hadamard8_diff16_num, 1); |
3554 | 1323 int score; |
1951
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1324 POWERPC_PERF_START_COUNT(altivec_hadamard8_diff16_num, 1); |
3554 | 1325 score = hadamard8_diff16x8_altivec(s, dst, src, stride, 8); |
1326 if (h==16) { | |
1327 dst += 8*stride; | |
1328 src += 8*stride; | |
1329 score += hadamard8_diff16x8_altivec(s, dst, src, stride, 8); | |
1330 } | |
1951
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1331 POWERPC_PERF_STOP_COUNT(altivec_hadamard8_diff16_num, 1); |
3554 | 1332 return score; |
1951
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1333 } |
2599b8444831
better hadamard8_diff16 in AltiVec, and more patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
1949
diff
changeset
|
1334 |
3543 | 1335 static void vorbis_inverse_coupling_altivec(float *mag, float *ang, |
1336 int blocksize) | |
1337 { | |
1338 int i; | |
3546
5f97ba9a4eaa
Almost cosmetic changes in dsputil_init_ppc and vorbis_inverse_coupling_altivec:
lu_zero
parents:
3545
diff
changeset
|
1339 vector float m, a; |
3543 | 1340 vector bool int t0, t1; |
1341 const vector unsigned int v_31 = //XXX | |
1342 vec_add(vec_add(vec_splat_u32(15),vec_splat_u32(15)),vec_splat_u32(1)); | |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1343 for (i = 0; i < blocksize; i += 4) { |
3543 | 1344 m = vec_ld(0, mag+i); |
1345 a = vec_ld(0, ang+i); | |
1346 t0 = vec_cmple(m, (vector float)vec_splat_u32(0)); | |
1347 t1 = vec_cmple(a, (vector float)vec_splat_u32(0)); | |
3545 | 1348 a = vec_xor(a, (vector float) vec_sl((vector unsigned int)t0, v_31)); |
3546
5f97ba9a4eaa
Almost cosmetic changes in dsputil_init_ppc and vorbis_inverse_coupling_altivec:
lu_zero
parents:
3545
diff
changeset
|
1349 t0 = (vector bool int)vec_and(a, t1); |
5f97ba9a4eaa
Almost cosmetic changes in dsputil_init_ppc and vorbis_inverse_coupling_altivec:
lu_zero
parents:
3545
diff
changeset
|
1350 t1 = (vector bool int)vec_andc(a, t1); |
3550 | 1351 a = vec_sub(m, (vector float)t1); |
1352 m = vec_add(m, (vector float)t0); | |
3549
7b4e34f1ff1f
Fix a stupid typo and another error, thanks to Emanuele Giaquinta <exg@gentoo.org> for pointing out the issue and the patch
lu_zero
parents:
3546
diff
changeset
|
1353 vec_stl(a, 0, ang+i); |
7b4e34f1ff1f
Fix a stupid typo and another error, thanks to Emanuele Giaquinta <exg@gentoo.org> for pointing out the issue and the patch
lu_zero
parents:
3546
diff
changeset
|
1354 vec_stl(m, 0, mag+i); |
3543 | 1355 } |
1356 } | |
1357 | |
2057
4c663228e020
avg_pixels8_xy2_altivec in AltiVec, enabling avg_pixels8_altivec, hadamard fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
2056
diff
changeset
|
1358 /* next one assumes that ((line_size % 8) == 0) */ |
11382
50415a8f1451
PPC: move prototypes to headers and make some functions static
mru
parents:
10082
diff
changeset
|
1359 static void avg_pixels8_xy2_altivec(uint8_t *block, const uint8_t *pixels, int line_size, int h) |
2057
4c663228e020
avg_pixels8_xy2_altivec in AltiVec, enabling avg_pixels8_altivec, hadamard fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
2056
diff
changeset
|
1360 { |
4c663228e020
avg_pixels8_xy2_altivec in AltiVec, enabling avg_pixels8_altivec, hadamard fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
2056
diff
changeset
|
1361 POWERPC_PERF_DECLARE(altivec_avg_pixels8_xy2_num, 1); |
3554 | 1362 register int i; |
1363 register vector unsigned char pixelsv1, pixelsv2, pixelsavg; | |
1364 register vector unsigned char blockv, temp1, temp2, blocktemp; | |
1365 register vector unsigned short pixelssum1, pixelssum2, temp3; | |
1366 | |
5746
55ed6dc5d476
Remove const vector macro indirection that is useless and obfuscating
diego
parents:
5609
diff
changeset
|
1367 register const vector unsigned char vczero = (const vector unsigned char) |
3554 | 1368 vec_splat_u8(0); |
5746
55ed6dc5d476
Remove const vector macro indirection that is useless and obfuscating
diego
parents:
5609
diff
changeset
|
1369 register const vector unsigned short vctwo = (const vector unsigned short) |
3554 | 1370 vec_splat_u16(2); |
2967 | 1371 |
3554 | 1372 temp1 = vec_ld(0, pixels); |
1373 temp2 = vec_ld(16, pixels); | |
1374 pixelsv1 = vec_perm(temp1, temp2, vec_lvsl(0, pixels)); | |
1375 if ((((unsigned long)pixels) & 0x0000000F) == 0x0000000F) { | |
1376 pixelsv2 = temp2; | |
1377 } else { | |
1378 pixelsv2 = vec_perm(temp1, temp2, vec_lvsl(1, pixels)); | |
1379 } | |
1380 pixelsv1 = vec_mergeh(vczero, pixelsv1); | |
1381 pixelsv2 = vec_mergeh(vczero, pixelsv2); | |
1382 pixelssum1 = vec_add((vector unsigned short)pixelsv1, | |
1383 (vector unsigned short)pixelsv2); | |
1384 pixelssum1 = vec_add(pixelssum1, vctwo); | |
2967 | 1385 |
1386 POWERPC_PERF_START_COUNT(altivec_avg_pixels8_xy2_num, 1); | |
3554 | 1387 for (i = 0; i < h ; i++) { |
1388 int rightside = ((unsigned long)block & 0x0000000F); | |
1389 blockv = vec_ld(0, block); | |
2057
4c663228e020
avg_pixels8_xy2_altivec in AltiVec, enabling avg_pixels8_altivec, hadamard fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
2056
diff
changeset
|
1390 |
3554 | 1391 temp1 = vec_ld(line_size, pixels); |
1392 temp2 = vec_ld(line_size + 16, pixels); | |
1393 pixelsv1 = vec_perm(temp1, temp2, vec_lvsl(line_size, pixels)); | |
7335
d463d8ee7755
cosmetics: Make libavcodec/ppc/dsputil_altivec.c conform to style guidelines.
diego
parents:
6763
diff
changeset
|
1394 if (((((unsigned long)pixels) + line_size) & 0x0000000F) == 0x0000000F) { |
3554 | 1395 pixelsv2 = temp2; |
1396 } else { | |
1397 pixelsv2 = vec_perm(temp1, temp2, vec_lvsl(line_size + 1, pixels)); | |
1398 } | |
2057
4c663228e020
avg_pixels8_xy2_altivec in AltiVec, enabling avg_pixels8_altivec, hadamard fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
2056
diff
changeset
|
1399 |
3554 | 1400 pixelsv1 = vec_mergeh(vczero, pixelsv1); |
1401 pixelsv2 = vec_mergeh(vczero, pixelsv2); | |
1402 pixelssum2 = vec_add((vector unsigned short)pixelsv1, | |
1403 (vector unsigned short)pixelsv2); | |
1404 temp3 = vec_add(pixelssum1, pixelssum2); | |
1405 temp3 = vec_sra(temp3, vctwo); | |
1406 pixelssum1 = vec_add(pixelssum2, vctwo); | |
1407 pixelsavg = vec_packsu(temp3, (vector unsigned short) vczero); | |
2967 | 1408 |
3554 | 1409 if (rightside) { |
1410 blocktemp = vec_perm(blockv, pixelsavg, vcprm(0, 1, s0, s1)); | |
1411 } else { | |
1412 blocktemp = vec_perm(blockv, pixelsavg, vcprm(s0, s1, 2, 3)); | |
1413 } | |
2967 | 1414 |
3554 | 1415 blockv = vec_avg(blocktemp, blockv); |
1416 vec_st(blockv, 0, block); | |
2967 | 1417 |
3554 | 1418 block += line_size; |
1419 pixels += line_size; | |
1420 } | |
2967 | 1421 |
2057
4c663228e020
avg_pixels8_xy2_altivec in AltiVec, enabling avg_pixels8_altivec, hadamard fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
2056
diff
changeset
|
1422 POWERPC_PERF_STOP_COUNT(altivec_avg_pixels8_xy2_num, 1); |
4c663228e020
avg_pixels8_xy2_altivec in AltiVec, enabling avg_pixels8_altivec, hadamard fix by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents:
2056
diff
changeset
|
1423 } |
3546
5f97ba9a4eaa
Almost cosmetic changes in dsputil_init_ppc and vorbis_inverse_coupling_altivec:
lu_zero
parents:
3545
diff
changeset
|
1424 |
5f97ba9a4eaa
Almost cosmetic changes in dsputil_init_ppc and vorbis_inverse_coupling_altivec:
lu_zero
parents:
3545
diff
changeset
|
1425 void dsputil_init_altivec(DSPContext* c, AVCodecContext *avctx) |
5f97ba9a4eaa
Almost cosmetic changes in dsputil_init_ppc and vorbis_inverse_coupling_altivec:
lu_zero
parents:
3545
diff
changeset
|
1426 { |
5f97ba9a4eaa
Almost cosmetic changes in dsputil_init_ppc and vorbis_inverse_coupling_altivec:
lu_zero
parents:
3545
diff
changeset
|
1427 c->pix_abs[0][1] = sad16_x2_altivec; |
5f97ba9a4eaa
Almost cosmetic changes in dsputil_init_ppc and vorbis_inverse_coupling_altivec:
lu_zero
parents:
3545
diff
changeset
|
1428 c->pix_abs[0][2] = sad16_y2_altivec; |
5f97ba9a4eaa
Almost cosmetic changes in dsputil_init_ppc and vorbis_inverse_coupling_altivec:
lu_zero
parents:
3545
diff
changeset
|
1429 c->pix_abs[0][3] = sad16_xy2_altivec; |
5f97ba9a4eaa
Almost cosmetic changes in dsputil_init_ppc and vorbis_inverse_coupling_altivec:
lu_zero
parents:
3545
diff
changeset
|
1430 c->pix_abs[0][0] = sad16_altivec; |
5f97ba9a4eaa
Almost cosmetic changes in dsputil_init_ppc and vorbis_inverse_coupling_altivec:
lu_zero
parents:
3545
diff
changeset
|
1431 c->pix_abs[1][0] = sad8_altivec; |
5f97ba9a4eaa
Almost cosmetic changes in dsputil_init_ppc and vorbis_inverse_coupling_altivec:
lu_zero
parents:
3545
diff
changeset
|
1432 c->sad[0]= sad16_altivec; |
5f97ba9a4eaa
Almost cosmetic changes in dsputil_init_ppc and vorbis_inverse_coupling_altivec:
lu_zero
parents:
3545
diff
changeset
|
1433 c->sad[1]= sad8_altivec; |
5f97ba9a4eaa
Almost cosmetic changes in dsputil_init_ppc and vorbis_inverse_coupling_altivec:
lu_zero
parents:
3545
diff
changeset
|
1434 c->pix_norm1 = pix_norm1_altivec; |
5f97ba9a4eaa
Almost cosmetic changes in dsputil_init_ppc and vorbis_inverse_coupling_altivec:
lu_zero
parents:
3545
diff
changeset
|
1435 c->sse[1]= sse8_altivec; |
5f97ba9a4eaa
Almost cosmetic changes in dsputil_init_ppc and vorbis_inverse_coupling_altivec:
lu_zero
parents:
3545
diff
changeset
|
1436 c->sse[0]= sse16_altivec; |
5f97ba9a4eaa
Almost cosmetic changes in dsputil_init_ppc and vorbis_inverse_coupling_altivec:
lu_zero
parents:
3545
diff
changeset
|
1437 c->pix_sum = pix_sum_altivec; |
5f97ba9a4eaa
Almost cosmetic changes in dsputil_init_ppc and vorbis_inverse_coupling_altivec:
lu_zero
parents:
3545
diff
changeset
|
1438 c->diff_pixels = diff_pixels_altivec; |
5f97ba9a4eaa
Almost cosmetic changes in dsputil_init_ppc and vorbis_inverse_coupling_altivec:
lu_zero
parents:
3545
diff
changeset
|
1439 c->get_pixels = get_pixels_altivec; |
8307 | 1440 c->clear_block = clear_block_altivec; |
3546
5f97ba9a4eaa
Almost cosmetic changes in dsputil_init_ppc and vorbis_inverse_coupling_altivec:
lu_zero
parents:
3545
diff
changeset
|
1441 c->add_bytes= add_bytes_altivec; |
5f97ba9a4eaa
Almost cosmetic changes in dsputil_init_ppc and vorbis_inverse_coupling_altivec:
lu_zero
parents:
3545
diff
changeset
|
1442 c->put_pixels_tab[0][0] = put_pixels16_altivec; |
5f97ba9a4eaa
Almost cosmetic changes in dsputil_init_ppc and vorbis_inverse_coupling_altivec:
lu_zero
parents:
3545
diff
changeset
|
1443 /* the two functions do the same thing, so use the same code */ |
5f97ba9a4eaa
Almost cosmetic changes in dsputil_init_ppc and vorbis_inverse_coupling_altivec:
lu_zero
parents:
3545
diff
changeset
|
1444 c->put_no_rnd_pixels_tab[0][0] = put_pixels16_altivec; |
5f97ba9a4eaa
Almost cosmetic changes in dsputil_init_ppc and vorbis_inverse_coupling_altivec:
lu_zero
parents:
3545
diff
changeset
|
1445 c->avg_pixels_tab[0][0] = avg_pixels16_altivec; |
5f97ba9a4eaa
Almost cosmetic changes in dsputil_init_ppc and vorbis_inverse_coupling_altivec:
lu_zero
parents:
3545
diff
changeset
|
1446 c->avg_pixels_tab[1][0] = avg_pixels8_altivec; |
5f97ba9a4eaa
Almost cosmetic changes in dsputil_init_ppc and vorbis_inverse_coupling_altivec:
lu_zero
parents:
3545
diff
changeset
|
1447 c->avg_pixels_tab[1][3] = avg_pixels8_xy2_altivec; |
5f97ba9a4eaa
Almost cosmetic changes in dsputil_init_ppc and vorbis_inverse_coupling_altivec:
lu_zero
parents:
3545
diff
changeset
|
1448 c->put_pixels_tab[1][3] = put_pixels8_xy2_altivec; |
5f97ba9a4eaa
Almost cosmetic changes in dsputil_init_ppc and vorbis_inverse_coupling_altivec:
lu_zero
parents:
3545
diff
changeset
|
1449 c->put_no_rnd_pixels_tab[1][3] = put_no_rnd_pixels8_xy2_altivec; |
5f97ba9a4eaa
Almost cosmetic changes in dsputil_init_ppc and vorbis_inverse_coupling_altivec:
lu_zero
parents:
3545
diff
changeset
|
1450 c->put_pixels_tab[0][3] = put_pixels16_xy2_altivec; |
5f97ba9a4eaa
Almost cosmetic changes in dsputil_init_ppc and vorbis_inverse_coupling_altivec:
lu_zero
parents:
3545
diff
changeset
|
1451 c->put_no_rnd_pixels_tab[0][3] = put_no_rnd_pixels16_xy2_altivec; |
5f97ba9a4eaa
Almost cosmetic changes in dsputil_init_ppc and vorbis_inverse_coupling_altivec:
lu_zero
parents:
3545
diff
changeset
|
1452 |
5f97ba9a4eaa
Almost cosmetic changes in dsputil_init_ppc and vorbis_inverse_coupling_altivec:
lu_zero
parents:
3545
diff
changeset
|
1453 c->hadamard8_diff[0] = hadamard8_diff16_altivec; |
5f97ba9a4eaa
Almost cosmetic changes in dsputil_init_ppc and vorbis_inverse_coupling_altivec:
lu_zero
parents:
3545
diff
changeset
|
1454 c->hadamard8_diff[1] = hadamard8_diff8x8_altivec; |
8596
68e959302527
replace all occurrence of ENABLE_ by the corresponding CONFIG_, HAVE_ or ARCH_
aurel
parents:
8307
diff
changeset
|
1455 if (CONFIG_VORBIS_DECODER) |
5753 | 1456 c->vorbis_inverse_coupling = vorbis_inverse_coupling_altivec; |
3546
5f97ba9a4eaa
Almost cosmetic changes in dsputil_init_ppc and vorbis_inverse_coupling_altivec:
lu_zero
parents:
3545
diff
changeset
|
1457 } |