annotate arm/dsputil_iwmmxt.c @ 12483:0159a19bfff7 libavcodec

aacdec: Rework channel mapping compatibility hacks. For a PCE based configuration map the channels solely based on tags. For an indexed configuration map the channels solely based on position. This works with all known exotic samples including al17, elem_id0, bad_concat, and lfe_is_sce.
author alexc
date Fri, 10 Sep 2010 18:01:48 +0000
parents a5ddb39627fd
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2734
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
1 /*
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
2 * iWMMXt optimized DSP utils
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
3 * Copyright (c) 2004 AGAWA Koji
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
4 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3036
diff changeset
5 * This file is part of FFmpeg.
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3036
diff changeset
6 *
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3036
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
2734
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
9 * 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: 3036
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
2734
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
11 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3036
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
2734
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
15 * Lesser General Public License for more details.
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
16 *
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
17 * 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: 3036
diff changeset
18 * 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
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
2734
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
20 */
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
21
12456
a5ddb39627fd Rename FF_MM_ symbols related to CPU features flags as AV_CPU_FLAG_
stefano
parents: 12414
diff changeset
22 #include "libavutil/cpu.h"
6763
f7cbb7733146 Use full path for #includes from another directory.
diego
parents: 6761
diff changeset
23 #include "libavcodec/dsputil.h"
2734
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
24
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
25 #define DEF(x, y) x ## _no_rnd_ ## y ##_iwmmxt
8031
eebc7209c47f Convert asm keyword into __asm__.
flameeyes
parents: 6763
diff changeset
26 #define SET_RND(regd) __asm__ volatile ("mov r12, #1 \n\t tbcsth " #regd ", r12":::"r12");
2734
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
27 #define WAVG2B "wavg2b"
8073
915bc657348f Rename template included sources from .h to _template.c.
flameeyes
parents: 8031
diff changeset
28 #include "dsputil_iwmmxt_rnd_template.c"
2734
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
29 #undef DEF
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
30 #undef SET_RND
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
31 #undef WAVG2B
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
32
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
33 #define DEF(x, y) x ## _ ## y ##_iwmmxt
8031
eebc7209c47f Convert asm keyword into __asm__.
flameeyes
parents: 6763
diff changeset
34 #define SET_RND(regd) __asm__ volatile ("mov r12, #2 \n\t tbcsth " #regd ", r12":::"r12");
2734
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
35 #define WAVG2B "wavg2br"
8073
915bc657348f Rename template included sources from .h to _template.c.
flameeyes
parents: 8031
diff changeset
36 #include "dsputil_iwmmxt_rnd_template.c"
2734
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
37 #undef DEF
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
38 #undef SET_RND
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
39 #undef WAVG2BR
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
40
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
41 // need scheduling
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
42 #define OP(AVG) \
8031
eebc7209c47f Convert asm keyword into __asm__.
flameeyes
parents: 6763
diff changeset
43 __asm__ volatile ( \
2734
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
44 /* alignment */ \
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
45 "and r12, %[pixels], #7 \n\t" \
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
46 "bic %[pixels], %[pixels], #7 \n\t" \
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
47 "tmcr wcgr1, r12 \n\t" \
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
48 \
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
49 "wldrd wr0, [%[pixels]] \n\t" \
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
50 "wldrd wr1, [%[pixels], #8] \n\t" \
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
51 "add %[pixels], %[pixels], %[line_size] \n\t" \
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
52 "walignr1 wr4, wr0, wr1 \n\t" \
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
53 \
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
54 "1: \n\t" \
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
55 \
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
56 "wldrd wr2, [%[pixels]] \n\t" \
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
57 "wldrd wr3, [%[pixels], #8] \n\t" \
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
58 "add %[pixels], %[pixels], %[line_size] \n\t" \
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
59 "pld [%[pixels]] \n\t" \
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
60 "walignr1 wr5, wr2, wr3 \n\t" \
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
61 AVG " wr6, wr4, wr5 \n\t" \
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
62 "wstrd wr6, [%[block]] \n\t" \
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
63 "add %[block], %[block], %[line_size] \n\t" \
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
64 \
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
65 "wldrd wr0, [%[pixels]] \n\t" \
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
66 "wldrd wr1, [%[pixels], #8] \n\t" \
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
67 "add %[pixels], %[pixels], %[line_size] \n\t" \
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
68 "walignr1 wr4, wr0, wr1 \n\t" \
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
69 "pld [%[pixels]] \n\t" \
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
70 AVG " wr6, wr4, wr5 \n\t" \
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
71 "wstrd wr6, [%[block]] \n\t" \
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
72 "add %[block], %[block], %[line_size] \n\t" \
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
73 \
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
74 "subs %[h], %[h], #2 \n\t" \
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
75 "bne 1b \n\t" \
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
76 : [block]"+r"(block), [pixels]"+r"(pixels), [h]"+r"(h) \
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
77 : [line_size]"r"(line_size) \
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
78 : "memory", "r12");
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
79 void put_pixels8_y2_iwmmxt(uint8_t *block, const uint8_t *pixels, const int line_size, int h)
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
80 {
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
81 OP("wavg2br");
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
82 }
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
83 void put_no_rnd_pixels8_y2_iwmmxt(uint8_t *block, const uint8_t *pixels, const int line_size, int h)
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
84 {
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
85 OP("wavg2b");
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
86 }
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
87 #undef OP
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
88
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
89 void add_pixels_clamped_iwmmxt(const DCTELEM *block, uint8_t *pixels, int line_size)
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
90 {
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
91 uint8_t *pixels2 = pixels + line_size;
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
92
8031
eebc7209c47f Convert asm keyword into __asm__.
flameeyes
parents: 6763
diff changeset
93 __asm__ volatile (
2734
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
94 "mov r12, #4 \n\t"
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
95 "1: \n\t"
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
96 "pld [%[pixels], %[line_size2]] \n\t"
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
97 "pld [%[pixels2], %[line_size2]] \n\t"
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
98 "wldrd wr4, [%[pixels]] \n\t"
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
99 "wldrd wr5, [%[pixels2]] \n\t"
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
100 "pld [%[block], #32] \n\t"
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
101 "wunpckelub wr6, wr4 \n\t"
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
102 "wldrd wr0, [%[block]] \n\t"
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
103 "wunpckehub wr7, wr4 \n\t"
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
104 "wldrd wr1, [%[block], #8] \n\t"
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
105 "wunpckelub wr8, wr5 \n\t"
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
106 "wldrd wr2, [%[block], #16] \n\t"
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
107 "wunpckehub wr9, wr5 \n\t"
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
108 "wldrd wr3, [%[block], #24] \n\t"
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
109 "add %[block], %[block], #32 \n\t"
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
110 "waddhss wr10, wr0, wr6 \n\t"
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
111 "waddhss wr11, wr1, wr7 \n\t"
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
112 "waddhss wr12, wr2, wr8 \n\t"
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
113 "waddhss wr13, wr3, wr9 \n\t"
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
114 "wpackhus wr14, wr10, wr11 \n\t"
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
115 "wpackhus wr15, wr12, wr13 \n\t"
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
116 "wstrd wr14, [%[pixels]] \n\t"
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
117 "add %[pixels], %[pixels], %[line_size2] \n\t"
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
118 "subs r12, r12, #1 \n\t"
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
119 "wstrd wr15, [%[pixels2]] \n\t"
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
120 "add %[pixels2], %[pixels2], %[line_size2] \n\t"
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
121 "bne 1b \n\t"
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
122 : [block]"+r"(block), [pixels]"+r"(pixels), [pixels2]"+r"(pixels2)
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
123 : [line_size2]"r"(line_size << 1)
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
124 : "cc", "memory", "r12");
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
125 }
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
126
4788
ded34b64b01a IWMMXT-specific dsputils clear_blocks function.
diego
parents: 4698
diff changeset
127 static void clear_blocks_iwmmxt(DCTELEM *blocks)
ded34b64b01a IWMMXT-specific dsputils clear_blocks function.
diego
parents: 4698
diff changeset
128 {
8031
eebc7209c47f Convert asm keyword into __asm__.
flameeyes
parents: 6763
diff changeset
129 __asm__ volatile(
4788
ded34b64b01a IWMMXT-specific dsputils clear_blocks function.
diego
parents: 4698
diff changeset
130 "wzero wr0 \n\t"
ded34b64b01a IWMMXT-specific dsputils clear_blocks function.
diego
parents: 4698
diff changeset
131 "mov r1, #(128 * 6 / 32) \n\t"
ded34b64b01a IWMMXT-specific dsputils clear_blocks function.
diego
parents: 4698
diff changeset
132 "1: \n\t"
ded34b64b01a IWMMXT-specific dsputils clear_blocks function.
diego
parents: 4698
diff changeset
133 "wstrd wr0, [%0] \n\t"
ded34b64b01a IWMMXT-specific dsputils clear_blocks function.
diego
parents: 4698
diff changeset
134 "wstrd wr0, [%0, #8] \n\t"
ded34b64b01a IWMMXT-specific dsputils clear_blocks function.
diego
parents: 4698
diff changeset
135 "wstrd wr0, [%0, #16] \n\t"
ded34b64b01a IWMMXT-specific dsputils clear_blocks function.
diego
parents: 4698
diff changeset
136 "wstrd wr0, [%0, #24] \n\t"
ded34b64b01a IWMMXT-specific dsputils clear_blocks function.
diego
parents: 4698
diff changeset
137 "subs r1, r1, #1 \n\t"
ded34b64b01a IWMMXT-specific dsputils clear_blocks function.
diego
parents: 4698
diff changeset
138 "add %0, %0, #32 \n\t"
ded34b64b01a IWMMXT-specific dsputils clear_blocks function.
diego
parents: 4698
diff changeset
139 "bne 1b \n\t"
ded34b64b01a IWMMXT-specific dsputils clear_blocks function.
diego
parents: 4698
diff changeset
140 : "+r"(blocks)
ded34b64b01a IWMMXT-specific dsputils clear_blocks function.
diego
parents: 4698
diff changeset
141 :
ded34b64b01a IWMMXT-specific dsputils clear_blocks function.
diego
parents: 4698
diff changeset
142 : "r1"
ded34b64b01a IWMMXT-specific dsputils clear_blocks function.
diego
parents: 4698
diff changeset
143 );
ded34b64b01a IWMMXT-specific dsputils clear_blocks function.
diego
parents: 4698
diff changeset
144 }
ded34b64b01a IWMMXT-specific dsputils clear_blocks function.
diego
parents: 4698
diff changeset
145
2734
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
146 static void nop(uint8_t *block, const uint8_t *pixels, int line_size, int h)
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
147 {
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
148 return;
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
149 }
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
150
4698
9fad30d1230b enable iwmmxt support, removing mm_support() stub
mru
parents: 4197
diff changeset
151 /* A run time test is not simple. If this file is compiled in
9fad30d1230b enable iwmmxt support, removing mm_support() stub
mru
parents: 4197
diff changeset
152 * then we should install the functions
9fad30d1230b enable iwmmxt support, removing mm_support() stub
mru
parents: 4197
diff changeset
153 */
2776
930e56f92c57 IWMMXT configure support + runtime selection patch by (Gildas Bazin, gbazin : altern org)
michael
parents: 2734
diff changeset
154
10363
08573f5f587d ARM: add ff_ prefix to lots of functions
mru
parents: 8359
diff changeset
155 void ff_dsputil_init_iwmmxt(DSPContext* c, AVCodecContext *avctx)
2734
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
156 {
12456
a5ddb39627fd Rename FF_MM_ symbols related to CPU features flags as AV_CPU_FLAG_
stefano
parents: 12414
diff changeset
157 int mm_flags = AV_CPU_FLAG_IWMMXT; /* multimedia extension flags */
12414
3fc4c625b6f3 Remove global mm_flags variable
mru
parents: 10363
diff changeset
158
2776
930e56f92c57 IWMMXT configure support + runtime selection patch by (Gildas Bazin, gbazin : altern org)
michael
parents: 2734
diff changeset
159 if (avctx->dsp_mask) {
12456
a5ddb39627fd Rename FF_MM_ symbols related to CPU features flags as AV_CPU_FLAG_
stefano
parents: 12414
diff changeset
160 if (avctx->dsp_mask & AV_CPU_FLAG_FORCE)
4197
bbe0bc387a19 revert bad checkin
mru
parents: 4196
diff changeset
161 mm_flags |= (avctx->dsp_mask & 0xffff);
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2776
diff changeset
162 else
4197
bbe0bc387a19 revert bad checkin
mru
parents: 4196
diff changeset
163 mm_flags &= ~(avctx->dsp_mask & 0xffff);
2776
930e56f92c57 IWMMXT configure support + runtime selection patch by (Gildas Bazin, gbazin : altern org)
michael
parents: 2734
diff changeset
164 }
930e56f92c57 IWMMXT configure support + runtime selection patch by (Gildas Bazin, gbazin : altern org)
michael
parents: 2734
diff changeset
165
12456
a5ddb39627fd Rename FF_MM_ symbols related to CPU features flags as AV_CPU_FLAG_
stefano
parents: 12414
diff changeset
166 if (!(mm_flags & AV_CPU_FLAG_IWMMXT)) return;
2776
930e56f92c57 IWMMXT configure support + runtime selection patch by (Gildas Bazin, gbazin : altern org)
michael
parents: 2734
diff changeset
167
2734
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
168 c->add_pixels_clamped = add_pixels_clamped_iwmmxt;
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
169
4788
ded34b64b01a IWMMXT-specific dsputils clear_blocks function.
diego
parents: 4698
diff changeset
170 c->clear_blocks = clear_blocks_iwmmxt;
ded34b64b01a IWMMXT-specific dsputils clear_blocks function.
diego
parents: 4698
diff changeset
171
2734
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
172 c->put_pixels_tab[0][0] = put_pixels16_iwmmxt;
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
173 c->put_pixels_tab[0][1] = put_pixels16_x2_iwmmxt;
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
174 c->put_pixels_tab[0][2] = put_pixels16_y2_iwmmxt;
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
175 c->put_pixels_tab[0][3] = put_pixels16_xy2_iwmmxt;
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
176 c->put_no_rnd_pixels_tab[0][0] = put_pixels16_iwmmxt;
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
177 c->put_no_rnd_pixels_tab[0][1] = put_no_rnd_pixels16_x2_iwmmxt;
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
178 c->put_no_rnd_pixels_tab[0][2] = put_no_rnd_pixels16_y2_iwmmxt;
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
179 c->put_no_rnd_pixels_tab[0][3] = put_no_rnd_pixels16_xy2_iwmmxt;
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
180
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
181 c->put_pixels_tab[1][0] = put_pixels8_iwmmxt;
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
182 c->put_pixels_tab[1][1] = put_pixels8_x2_iwmmxt;
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
183 c->put_pixels_tab[1][2] = put_pixels8_y2_iwmmxt;
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
184 c->put_pixels_tab[1][3] = put_pixels8_xy2_iwmmxt;
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
185 c->put_no_rnd_pixels_tab[1][0] = put_pixels8_iwmmxt;
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
186 c->put_no_rnd_pixels_tab[1][1] = put_no_rnd_pixels8_x2_iwmmxt;
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
187 c->put_no_rnd_pixels_tab[1][2] = put_no_rnd_pixels8_y2_iwmmxt;
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
188 c->put_no_rnd_pixels_tab[1][3] = put_no_rnd_pixels8_xy2_iwmmxt;
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
189
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
190 c->avg_pixels_tab[0][0] = avg_pixels16_iwmmxt;
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
191 c->avg_pixels_tab[0][1] = avg_pixels16_x2_iwmmxt;
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
192 c->avg_pixels_tab[0][2] = avg_pixels16_y2_iwmmxt;
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
193 c->avg_pixels_tab[0][3] = avg_pixels16_xy2_iwmmxt;
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
194 c->avg_no_rnd_pixels_tab[0][0] = avg_pixels16_iwmmxt;
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
195 c->avg_no_rnd_pixels_tab[0][1] = avg_no_rnd_pixels16_x2_iwmmxt;
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
196 c->avg_no_rnd_pixels_tab[0][2] = avg_no_rnd_pixels16_y2_iwmmxt;
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
197 c->avg_no_rnd_pixels_tab[0][3] = avg_no_rnd_pixels16_xy2_iwmmxt;
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
198
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
199 c->avg_pixels_tab[1][0] = avg_pixels8_iwmmxt;
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
200 c->avg_pixels_tab[1][1] = avg_pixels8_x2_iwmmxt;
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
201 c->avg_pixels_tab[1][2] = avg_pixels8_y2_iwmmxt;
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
202 c->avg_pixels_tab[1][3] = avg_pixels8_xy2_iwmmxt;
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
203 c->avg_no_rnd_pixels_tab[1][0] = avg_no_rnd_pixels8_iwmmxt;
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
204 c->avg_no_rnd_pixels_tab[1][1] = avg_no_rnd_pixels8_x2_iwmmxt;
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
205 c->avg_no_rnd_pixels_tab[1][2] = avg_no_rnd_pixels8_y2_iwmmxt;
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
206 c->avg_no_rnd_pixels_tab[1][3] = avg_no_rnd_pixels8_xy2_iwmmxt;
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
diff changeset
207 }