annotate i386/cavsdsp_mmx.c @ 6693:6f13852a9161 libavcodec

Skip blocks in B-frames reuse motion vectors from next reference frame. So if referenced blocks is 16x8, 8x16 or 8x8 partitions, skip block will have them too.
author kostya
date Sat, 26 Apr 2008 13:09:36 +0000
parents 1c67967d893b
children 33896780c612
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3524
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
1 /*
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
2 * Chinese AVS video (AVS1-P2, JiZhun profile) decoder.
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
3 * Copyright (c) 2006 Stefan Gehrer <stefan.gehrer@gmx.de>
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
4 *
5967
15ed47af1838 Misc spelling fixes, prefer American over British English.
diego
parents: 5963
diff changeset
5 * MMX-optimized DSP functions, based on H.264 optimizations by
3524
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
6 * Michael Niedermayer and Loren Merritt
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
7 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3524
diff changeset
8 * This file is part of FFmpeg.
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3524
diff changeset
9 *
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3524
diff changeset
10 * FFmpeg is free software; you can redistribute it and/or
3524
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
11 * modify it under the terms of the GNU Lesser General Public
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
12 * 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: 3524
diff changeset
13 * version 2.1 of the License, or (at your option) any later version.
3524
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
14 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3524
diff changeset
15 * FFmpeg is distributed in the hope that it will be useful,
3524
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
18 * Lesser General Public License for more details.
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
19 *
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
20 * 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: 3524
diff changeset
21 * License along with FFmpeg; if not, write to the Free Software
5215
2b72f9bc4f06 license header consistency cosmetics
diego
parents: 5010
diff changeset
22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
3524
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
23 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
24
5010
d5ba514e3f4a Add libavcodec to compiler include flags in order to simplify header
diego
parents: 3947
diff changeset
25 #include "dsputil.h"
5946
55251379b5b1 make ff_p* vars extern so that they can be used in various *_mmx.c files
aurel
parents: 5215
diff changeset
26 #include "dsputil_mmx.h"
3524
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
27 #include "common.h"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
28
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
29 /*****************************************************************************
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
30 *
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
31 * inverse transform
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
32 *
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
33 ****************************************************************************/
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
34
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
35 static inline void cavs_idct8_1d(int16_t *block, uint64_t bias)
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
36 {
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
37 asm volatile(
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
38 "movq 112(%0), %%mm4 \n\t" /* mm4 = src7 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
39 "movq 16(%0), %%mm5 \n\t" /* mm5 = src1 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
40 "movq 80(%0), %%mm2 \n\t" /* mm2 = src5 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
41 "movq 48(%0), %%mm7 \n\t" /* mm7 = src3 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
42 "movq %%mm4, %%mm0 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
43 "movq %%mm5, %%mm3 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
44 "movq %%mm2, %%mm6 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
45 "movq %%mm7, %%mm1 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
46
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
47 "paddw %%mm4, %%mm4 \n\t" /* mm4 = 2*src7 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
48 "paddw %%mm3, %%mm3 \n\t" /* mm3 = 2*src1 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
49 "paddw %%mm6, %%mm6 \n\t" /* mm6 = 2*src5 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
50 "paddw %%mm1, %%mm1 \n\t" /* mm1 = 2*src3 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
51 "paddw %%mm4, %%mm0 \n\t" /* mm0 = 3*src7 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
52 "paddw %%mm3, %%mm5 \n\t" /* mm5 = 3*src1 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
53 "paddw %%mm6, %%mm2 \n\t" /* mm2 = 3*src5 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
54 "paddw %%mm1, %%mm7 \n\t" /* mm7 = 3*src3 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
55 "psubw %%mm4, %%mm5 \n\t" /* mm5 = 3*src1 - 2*src7 = a0 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
56 "paddw %%mm6, %%mm7 \n\t" /* mm7 = 3*src3 + 2*src5 = a1 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
57 "psubw %%mm2, %%mm1 \n\t" /* mm1 = 2*src3 - 3*src5 = a2 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
58 "paddw %%mm0, %%mm3 \n\t" /* mm3 = 2*src1 + 3*src7 = a3 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
59
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
60 "movq %%mm5, %%mm4 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
61 "movq %%mm7, %%mm6 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
62 "movq %%mm3, %%mm0 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
63 "movq %%mm1, %%mm2 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
64 SUMSUB_BA( %%mm7, %%mm5 ) /* mm7 = a0 + a1 mm5 = a0 - a1 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
65 "paddw %%mm3, %%mm7 \n\t" /* mm7 = a0 + a1 + a3 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
66 "paddw %%mm1, %%mm5 \n\t" /* mm5 = a0 - a1 + a2 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
67 "paddw %%mm7, %%mm7 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
68 "paddw %%mm5, %%mm5 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
69 "paddw %%mm6, %%mm7 \n\t" /* mm7 = b4 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
70 "paddw %%mm4, %%mm5 \n\t" /* mm5 = b5 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
71
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
72 SUMSUB_BA( %%mm1, %%mm3 ) /* mm1 = a3 + a2 mm3 = a3 - a2 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
73 "psubw %%mm1, %%mm4 \n\t" /* mm4 = a0 - a2 - a3 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
74 "movq %%mm4, %%mm1 \n\t" /* mm1 = a0 - a2 - a3 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
75 "psubw %%mm6, %%mm3 \n\t" /* mm3 = a3 - a2 - a1 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
76 "paddw %%mm1, %%mm1 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
77 "paddw %%mm3, %%mm3 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
78 "psubw %%mm2, %%mm1 \n\t" /* mm1 = b7 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
79 "paddw %%mm0, %%mm3 \n\t" /* mm3 = b6 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
80
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
81 "movq 32(%0), %%mm2 \n\t" /* mm2 = src2 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
82 "movq 96(%0), %%mm6 \n\t" /* mm6 = src6 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
83 "movq %%mm2, %%mm4 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
84 "movq %%mm6, %%mm0 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
85 "psllw $2, %%mm4 \n\t" /* mm4 = 4*src2 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
86 "psllw $2, %%mm6 \n\t" /* mm6 = 4*src6 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
87 "paddw %%mm4, %%mm2 \n\t" /* mm2 = 5*src2 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
88 "paddw %%mm6, %%mm0 \n\t" /* mm0 = 5*src6 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
89 "paddw %%mm2, %%mm2 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
90 "paddw %%mm0, %%mm0 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
91 "psubw %%mm0, %%mm4 \n\t" /* mm4 = 4*src2 - 10*src6 = a7 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
92 "paddw %%mm2, %%mm6 \n\t" /* mm6 = 4*src6 + 10*src2 = a6 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
93
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
94 "movq (%0), %%mm2 \n\t" /* mm2 = src0 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
95 "movq 64(%0), %%mm0 \n\t" /* mm0 = src4 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
96 SUMSUB_BA( %%mm0, %%mm2 ) /* mm0 = src0+src4 mm2 = src0-src4 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
97 "psllw $3, %%mm0 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
98 "psllw $3, %%mm2 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
99 "paddw %1, %%mm0 \n\t" /* add rounding bias */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
100 "paddw %1, %%mm2 \n\t" /* add rounding bias */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
101
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
102 SUMSUB_BA( %%mm6, %%mm0 ) /* mm6 = a4 + a6 mm0 = a4 - a6 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
103 SUMSUB_BA( %%mm4, %%mm2 ) /* mm4 = a5 + a7 mm2 = a5 - a7 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
104 SUMSUB_BA( %%mm7, %%mm6 ) /* mm7 = dst0 mm6 = dst7 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
105 SUMSUB_BA( %%mm5, %%mm4 ) /* mm5 = dst1 mm4 = dst6 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
106 SUMSUB_BA( %%mm3, %%mm2 ) /* mm3 = dst2 mm2 = dst5 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
107 SUMSUB_BA( %%mm1, %%mm0 ) /* mm1 = dst3 mm0 = dst4 */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
108 :: "r"(block), "m"(bias)
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
109 );
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
110 }
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
111
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
112 static void cavs_idct8_add_mmx(uint8_t *dst, int16_t *block, int stride)
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
113 {
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
114 int i;
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
115 DECLARE_ALIGNED_8(int16_t, b2[64]);
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
116
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
117 for(i=0; i<2; i++){
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
118 DECLARE_ALIGNED_8(uint64_t, tmp);
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
119
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
120 cavs_idct8_1d(block+4*i, ff_pw_4);
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
121
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
122 asm volatile(
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
123 "psraw $3, %%mm7 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
124 "psraw $3, %%mm6 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
125 "psraw $3, %%mm5 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
126 "psraw $3, %%mm4 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
127 "psraw $3, %%mm3 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
128 "psraw $3, %%mm2 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
129 "psraw $3, %%mm1 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
130 "psraw $3, %%mm0 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
131 "movq %%mm7, %0 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
132 TRANSPOSE4( %%mm0, %%mm2, %%mm4, %%mm6, %%mm7 )
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
133 "movq %%mm0, 8(%1) \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
134 "movq %%mm6, 24(%1) \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
135 "movq %%mm7, 40(%1) \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
136 "movq %%mm4, 56(%1) \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
137 "movq %0, %%mm7 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
138 TRANSPOSE4( %%mm7, %%mm5, %%mm3, %%mm1, %%mm0 )
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
139 "movq %%mm7, (%1) \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
140 "movq %%mm1, 16(%1) \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
141 "movq %%mm0, 32(%1) \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
142 "movq %%mm3, 48(%1) \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
143 : "=m"(tmp)
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
144 : "r"(b2+32*i)
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
145 : "memory"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
146 );
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
147 }
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
148
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
149 for(i=0; i<2; i++){
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
150 cavs_idct8_1d(b2+4*i, ff_pw_64);
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
151
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
152 asm volatile(
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
153 "psraw $7, %%mm7 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
154 "psraw $7, %%mm6 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
155 "psraw $7, %%mm5 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
156 "psraw $7, %%mm4 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
157 "psraw $7, %%mm3 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
158 "psraw $7, %%mm2 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
159 "psraw $7, %%mm1 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
160 "psraw $7, %%mm0 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
161 "movq %%mm7, (%0) \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
162 "movq %%mm5, 16(%0) \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
163 "movq %%mm3, 32(%0) \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
164 "movq %%mm1, 48(%0) \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
165 "movq %%mm0, 64(%0) \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
166 "movq %%mm2, 80(%0) \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
167 "movq %%mm4, 96(%0) \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
168 "movq %%mm6, 112(%0) \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
169 :: "r"(b2+4*i)
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
170 : "memory"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
171 );
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
172 }
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
173
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
174 add_pixels_clamped_mmx(b2, dst, stride);
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
175
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
176 /* clear block */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
177 asm volatile(
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
178 "pxor %%mm7, %%mm7 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
179 "movq %%mm7, (%0) \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
180 "movq %%mm7, 8(%0) \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
181 "movq %%mm7, 16(%0) \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
182 "movq %%mm7, 24(%0) \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
183 "movq %%mm7, 32(%0) \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
184 "movq %%mm7, 40(%0) \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
185 "movq %%mm7, 48(%0) \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
186 "movq %%mm7, 56(%0) \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
187 "movq %%mm7, 64(%0) \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
188 "movq %%mm7, 72(%0) \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
189 "movq %%mm7, 80(%0) \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
190 "movq %%mm7, 88(%0) \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
191 "movq %%mm7, 96(%0) \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
192 "movq %%mm7, 104(%0) \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
193 "movq %%mm7, 112(%0) \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
194 "movq %%mm7, 120(%0) \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
195 :: "r" (block)
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
196 );
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
197 }
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
198
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
199 /*****************************************************************************
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
200 *
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
201 * motion compensation
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
202 *
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
203 ****************************************************************************/
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
204
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
205 /* vertical filter [-1 -2 96 42 -7 0] */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
206 #define QPEL_CAVSV1(A,B,C,D,E,F,OP) \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
207 "movd (%0), "#F" \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
208 "movq "#C", %%mm6 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
209 "pmullw %5, %%mm6 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
210 "movq "#D", %%mm7 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
211 "pmullw %6, %%mm7 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
212 "psllw $3, "#E" \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
213 "psubw "#E", %%mm6 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
214 "psraw $3, "#E" \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
215 "paddw %%mm7, %%mm6 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
216 "paddw "#E", %%mm6 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
217 "paddw "#B", "#B" \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
218 "pxor %%mm7, %%mm7 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
219 "add %2, %0 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
220 "punpcklbw %%mm7, "#F" \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
221 "psubw "#B", %%mm6 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
222 "psraw $1, "#B" \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
223 "psubw "#A", %%mm6 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
224 "paddw %4, %%mm6 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
225 "psraw $7, %%mm6 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
226 "packuswb %%mm6, %%mm6 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
227 OP(%%mm6, (%1), A, d) \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
228 "add %3, %1 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
229
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
230 /* vertical filter [ 0 -1 5 5 -1 0] */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
231 #define QPEL_CAVSV2(A,B,C,D,E,F,OP) \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
232 "movd (%0), "#F" \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
233 "movq "#C", %%mm6 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
234 "paddw "#D", %%mm6 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
235 "pmullw %5, %%mm6 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
236 "add %2, %0 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
237 "punpcklbw %%mm7, "#F" \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
238 "psubw "#B", %%mm6 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
239 "psubw "#E", %%mm6 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
240 "paddw %4, %%mm6 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
241 "psraw $3, %%mm6 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
242 "packuswb %%mm6, %%mm6 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
243 OP(%%mm6, (%1), A, d) \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
244 "add %3, %1 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
245
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
246 /* vertical filter [ 0 -7 42 96 -2 -1] */
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
247 #define QPEL_CAVSV3(A,B,C,D,E,F,OP) \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
248 "movd (%0), "#F" \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
249 "movq "#C", %%mm6 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
250 "pmullw %6, %%mm6 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
251 "movq "#D", %%mm7 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
252 "pmullw %5, %%mm7 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
253 "psllw $3, "#B" \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
254 "psubw "#B", %%mm6 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
255 "psraw $3, "#B" \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
256 "paddw %%mm7, %%mm6 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
257 "paddw "#B", %%mm6 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
258 "paddw "#E", "#E" \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
259 "pxor %%mm7, %%mm7 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
260 "add %2, %0 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
261 "punpcklbw %%mm7, "#F" \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
262 "psubw "#E", %%mm6 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
263 "psraw $1, "#E" \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
264 "psubw "#F", %%mm6 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
265 "paddw %4, %%mm6 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
266 "psraw $7, %%mm6 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
267 "packuswb %%mm6, %%mm6 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
268 OP(%%mm6, (%1), A, d) \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
269 "add %3, %1 \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
270
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
271
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
272 #define QPEL_CAVSVNUM(VOP,OP,ADD,MUL1,MUL2)\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
273 int w= 2;\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
274 src -= 2*srcStride;\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
275 \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
276 while(w--){\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
277 asm volatile(\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
278 "pxor %%mm7, %%mm7 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
279 "movd (%0), %%mm0 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
280 "add %2, %0 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
281 "movd (%0), %%mm1 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
282 "add %2, %0 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
283 "movd (%0), %%mm2 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
284 "add %2, %0 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
285 "movd (%0), %%mm3 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
286 "add %2, %0 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
287 "movd (%0), %%mm4 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
288 "add %2, %0 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
289 "punpcklbw %%mm7, %%mm0 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
290 "punpcklbw %%mm7, %%mm1 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
291 "punpcklbw %%mm7, %%mm2 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
292 "punpcklbw %%mm7, %%mm3 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
293 "punpcklbw %%mm7, %%mm4 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
294 VOP(%%mm0, %%mm1, %%mm2, %%mm3, %%mm4, %%mm5, OP)\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
295 VOP(%%mm1, %%mm2, %%mm3, %%mm4, %%mm5, %%mm0, OP)\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
296 VOP(%%mm2, %%mm3, %%mm4, %%mm5, %%mm0, %%mm1, OP)\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
297 VOP(%%mm3, %%mm4, %%mm5, %%mm0, %%mm1, %%mm2, OP)\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
298 VOP(%%mm4, %%mm5, %%mm0, %%mm1, %%mm2, %%mm3, OP)\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
299 VOP(%%mm5, %%mm0, %%mm1, %%mm2, %%mm3, %%mm4, OP)\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
300 VOP(%%mm0, %%mm1, %%mm2, %%mm3, %%mm4, %%mm5, OP)\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
301 VOP(%%mm1, %%mm2, %%mm3, %%mm4, %%mm5, %%mm0, OP)\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
302 \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
303 : "+a"(src), "+c"(dst)\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
304 : "S"((long)srcStride), "D"((long)dstStride), "m"(ADD), "m"(MUL1), "m"(MUL2)\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
305 : "memory"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
306 );\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
307 if(h==16){\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
308 asm volatile(\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
309 VOP(%%mm2, %%mm3, %%mm4, %%mm5, %%mm0, %%mm1, OP)\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
310 VOP(%%mm3, %%mm4, %%mm5, %%mm0, %%mm1, %%mm2, OP)\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
311 VOP(%%mm4, %%mm5, %%mm0, %%mm1, %%mm2, %%mm3, OP)\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
312 VOP(%%mm5, %%mm0, %%mm1, %%mm2, %%mm3, %%mm4, OP)\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
313 VOP(%%mm0, %%mm1, %%mm2, %%mm3, %%mm4, %%mm5, OP)\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
314 VOP(%%mm1, %%mm2, %%mm3, %%mm4, %%mm5, %%mm0, OP)\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
315 VOP(%%mm2, %%mm3, %%mm4, %%mm5, %%mm0, %%mm1, OP)\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
316 VOP(%%mm3, %%mm4, %%mm5, %%mm0, %%mm1, %%mm2, OP)\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
317 \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
318 : "+a"(src), "+c"(dst)\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
319 : "S"((long)srcStride), "D"((long)dstStride), "m"(ADD), "m"(MUL1), "m"(MUL2)\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
320 : "memory"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
321 );\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
322 }\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
323 src += 4-(h+5)*srcStride;\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
324 dst += 4-h*dstStride;\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
325 }
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
326
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
327 #define QPEL_CAVS(OPNAME, OP, MMX)\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
328 static void OPNAME ## cavs_qpel8_h_ ## MMX(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
329 int h=8;\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
330 asm volatile(\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
331 "pxor %%mm7, %%mm7 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
332 "movq %5, %%mm6 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
333 "1: \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
334 "movq (%0), %%mm0 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
335 "movq 1(%0), %%mm2 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
336 "movq %%mm0, %%mm1 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
337 "movq %%mm2, %%mm3 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
338 "punpcklbw %%mm7, %%mm0 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
339 "punpckhbw %%mm7, %%mm1 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
340 "punpcklbw %%mm7, %%mm2 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
341 "punpckhbw %%mm7, %%mm3 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
342 "paddw %%mm2, %%mm0 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
343 "paddw %%mm3, %%mm1 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
344 "pmullw %%mm6, %%mm0 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
345 "pmullw %%mm6, %%mm1 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
346 "movq -1(%0), %%mm2 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
347 "movq 2(%0), %%mm4 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
348 "movq %%mm2, %%mm3 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
349 "movq %%mm4, %%mm5 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
350 "punpcklbw %%mm7, %%mm2 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
351 "punpckhbw %%mm7, %%mm3 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
352 "punpcklbw %%mm7, %%mm4 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
353 "punpckhbw %%mm7, %%mm5 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
354 "paddw %%mm4, %%mm2 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
355 "paddw %%mm3, %%mm5 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
356 "psubw %%mm2, %%mm0 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
357 "psubw %%mm5, %%mm1 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
358 "movq %6, %%mm5 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
359 "paddw %%mm5, %%mm0 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
360 "paddw %%mm5, %%mm1 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
361 "psraw $3, %%mm0 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
362 "psraw $3, %%mm1 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
363 "packuswb %%mm1, %%mm0 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
364 OP(%%mm0, (%1),%%mm5, q) \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
365 "add %3, %0 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
366 "add %4, %1 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
367 "decl %2 \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
368 " jnz 1b \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
369 : "+a"(src), "+c"(dst), "+m"(h)\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
370 : "d"((long)srcStride), "S"((long)dstStride), "m"(ff_pw_5), "m"(ff_pw_4)\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
371 : "memory"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
372 );\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
373 }\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
374 \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
375 static inline void OPNAME ## cavs_qpel8or16_v1_ ## MMX(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, int h){\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
376 QPEL_CAVSVNUM(QPEL_CAVSV1,OP,ff_pw_64,ff_pw_96,ff_pw_42) \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
377 }\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
378 \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
379 static inline void OPNAME ## cavs_qpel8or16_v2_ ## MMX(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, int h){\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
380 QPEL_CAVSVNUM(QPEL_CAVSV2,OP,ff_pw_4,ff_pw_5,ff_pw_5) \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
381 }\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
382 \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
383 static inline void OPNAME ## cavs_qpel8or16_v3_ ## MMX(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, int h){\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
384 QPEL_CAVSVNUM(QPEL_CAVSV3,OP,ff_pw_64,ff_pw_96,ff_pw_42) \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
385 }\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
386 \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
387 static void OPNAME ## cavs_qpel8_v1_ ## MMX(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
388 OPNAME ## cavs_qpel8or16_v1_ ## MMX(dst , src , dstStride, srcStride, 8);\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
389 }\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
390 static void OPNAME ## cavs_qpel16_v1_ ## MMX(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
391 OPNAME ## cavs_qpel8or16_v1_ ## MMX(dst , src , dstStride, srcStride, 16);\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
392 OPNAME ## cavs_qpel8or16_v1_ ## MMX(dst+8, src+8, dstStride, srcStride, 16);\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
393 }\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
394 \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
395 static void OPNAME ## cavs_qpel8_v2_ ## MMX(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
396 OPNAME ## cavs_qpel8or16_v2_ ## MMX(dst , src , dstStride, srcStride, 8);\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
397 }\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
398 static void OPNAME ## cavs_qpel16_v2_ ## MMX(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
399 OPNAME ## cavs_qpel8or16_v2_ ## MMX(dst , src , dstStride, srcStride, 16);\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
400 OPNAME ## cavs_qpel8or16_v2_ ## MMX(dst+8, src+8, dstStride, srcStride, 16);\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
401 }\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
402 \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
403 static void OPNAME ## cavs_qpel8_v3_ ## MMX(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
404 OPNAME ## cavs_qpel8or16_v3_ ## MMX(dst , src , dstStride, srcStride, 8);\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
405 }\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
406 static void OPNAME ## cavs_qpel16_v3_ ## MMX(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
407 OPNAME ## cavs_qpel8or16_v3_ ## MMX(dst , src , dstStride, srcStride, 16);\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
408 OPNAME ## cavs_qpel8or16_v3_ ## MMX(dst+8, src+8, dstStride, srcStride, 16);\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
409 }\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
410 \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
411 static void OPNAME ## cavs_qpel16_h_ ## MMX(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
412 OPNAME ## cavs_qpel8_h_ ## MMX(dst , src , dstStride, srcStride);\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
413 OPNAME ## cavs_qpel8_h_ ## MMX(dst+8, src+8, dstStride, srcStride);\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
414 src += 8*srcStride;\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
415 dst += 8*dstStride;\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
416 OPNAME ## cavs_qpel8_h_ ## MMX(dst , src , dstStride, srcStride);\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
417 OPNAME ## cavs_qpel8_h_ ## MMX(dst+8, src+8, dstStride, srcStride);\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
418 }\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
419
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
420 #define CAVS_MC(OPNAME, SIZE, MMX) \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
421 static void ff_ ## OPNAME ## cavs_qpel ## SIZE ## _mc20_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
422 OPNAME ## cavs_qpel ## SIZE ## _h_ ## MMX(dst, src, stride, stride);\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
423 }\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
424 \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
425 static void ff_ ## OPNAME ## cavs_qpel ## SIZE ## _mc01_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
426 OPNAME ## cavs_qpel ## SIZE ## _v1_ ## MMX(dst, src, stride, stride);\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
427 }\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
428 \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
429 static void ff_ ## OPNAME ## cavs_qpel ## SIZE ## _mc02_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
430 OPNAME ## cavs_qpel ## SIZE ## _v2_ ## MMX(dst, src, stride, stride);\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
431 }\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
432 \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
433 static void ff_ ## OPNAME ## cavs_qpel ## SIZE ## _mc03_ ## MMX(uint8_t *dst, uint8_t *src, int stride){\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
434 OPNAME ## cavs_qpel ## SIZE ## _v3_ ## MMX(dst, src, stride, stride);\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
435 }\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
436
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
437 #define PUT_OP(a,b,temp, size) "mov" #size " " #a ", " #b " \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
438 #define AVG_3DNOW_OP(a,b,temp, size) \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
439 "mov" #size " " #b ", " #temp " \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
440 "pavgusb " #temp ", " #a " \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
441 "mov" #size " " #a ", " #b " \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
442 #define AVG_MMX2_OP(a,b,temp, size) \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
443 "mov" #size " " #b ", " #temp " \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
444 "pavgb " #temp ", " #a " \n\t"\
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
445 "mov" #size " " #a ", " #b " \n\t"
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
446
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
447 QPEL_CAVS(put_, PUT_OP, 3dnow)
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
448 QPEL_CAVS(avg_, AVG_3DNOW_OP, 3dnow)
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
449 QPEL_CAVS(put_, PUT_OP, mmx2)
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
450 QPEL_CAVS(avg_, AVG_MMX2_OP, mmx2)
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
451
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
452 CAVS_MC(put_, 8, 3dnow)
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
453 CAVS_MC(put_, 16,3dnow)
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
454 CAVS_MC(avg_, 8, 3dnow)
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
455 CAVS_MC(avg_, 16,3dnow)
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
456 CAVS_MC(put_, 8, mmx2)
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
457 CAVS_MC(put_, 16,mmx2)
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
458 CAVS_MC(avg_, 8, mmx2)
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
459 CAVS_MC(avg_, 16,mmx2)
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
460
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
461 void ff_put_cavs_qpel8_mc00_mmx2(uint8_t *dst, uint8_t *src, int stride);
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
462 void ff_avg_cavs_qpel8_mc00_mmx2(uint8_t *dst, uint8_t *src, int stride);
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
463 void ff_put_cavs_qpel16_mc00_mmx2(uint8_t *dst, uint8_t *src, int stride);
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
464 void ff_avg_cavs_qpel16_mc00_mmx2(uint8_t *dst, uint8_t *src, int stride);
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
465
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
466 void ff_cavsdsp_init_mmx2(DSPContext* c, AVCodecContext *avctx) {
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
467 #define dspfunc(PFX, IDX, NUM) \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
468 c->PFX ## _pixels_tab[IDX][ 0] = ff_ ## PFX ## NUM ## _mc00_mmx2; \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
469 c->PFX ## _pixels_tab[IDX][ 2] = ff_ ## PFX ## NUM ## _mc20_mmx2; \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
470 c->PFX ## _pixels_tab[IDX][ 4] = ff_ ## PFX ## NUM ## _mc01_mmx2; \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
471 c->PFX ## _pixels_tab[IDX][ 8] = ff_ ## PFX ## NUM ## _mc02_mmx2; \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
472 c->PFX ## _pixels_tab[IDX][12] = ff_ ## PFX ## NUM ## _mc03_mmx2; \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
473
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
474 dspfunc(put_cavs_qpel, 0, 16);
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
475 dspfunc(put_cavs_qpel, 1, 8);
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
476 dspfunc(avg_cavs_qpel, 0, 16);
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
477 dspfunc(avg_cavs_qpel, 1, 8);
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
478 #undef dspfunc
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
479 c->cavs_idct8_add = cavs_idct8_add_mmx;
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
480 }
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
481
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
482 void ff_cavsdsp_init_3dnow(DSPContext* c, AVCodecContext *avctx) {
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
483 #define dspfunc(PFX, IDX, NUM) \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
484 c->PFX ## _pixels_tab[IDX][ 0] = ff_ ## PFX ## NUM ## _mc00_mmx2; \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
485 c->PFX ## _pixels_tab[IDX][ 2] = ff_ ## PFX ## NUM ## _mc20_3dnow; \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
486 c->PFX ## _pixels_tab[IDX][ 4] = ff_ ## PFX ## NUM ## _mc01_3dnow; \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
487 c->PFX ## _pixels_tab[IDX][ 8] = ff_ ## PFX ## NUM ## _mc02_3dnow; \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
488 c->PFX ## _pixels_tab[IDX][12] = ff_ ## PFX ## NUM ## _mc03_3dnow; \
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
489
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
490 dspfunc(put_cavs_qpel, 0, 16);
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
491 dspfunc(put_cavs_qpel, 1, 8);
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
492 dspfunc(avg_cavs_qpel, 0, 16);
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
493 dspfunc(avg_cavs_qpel, 1, 8);
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
494 #undef dspfunc
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
495 c->cavs_idct8_add = cavs_idct8_add_mmx;
419409926166 some MMX optimizations for the CAVS decoder
stefang
parents:
diff changeset
496 }