annotate libmpeg2/libmpeg-0.4.1.diff @ 26625:5b89b42f6d50

Only compile and use libmpeg2 AltiVec code when AltiVec is available. The AltiVec code needs -maltivec to compile, but then AltiVec instructions appear in other places of the code causing MPlayer to sigill. Somehow upstream libmpeg2 manages not to sigill under what appear to be the same circumstances. Enlightenment welcome.
author diego
date Sat, 03 May 2008 15:23:22 +0000
parents 4bc81fcf14bb
children 4559d4a7c3cb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
19024
4733c3e4f353 Update with latest changes and make diff apply cleanly.
diego
parents: 18783
diff changeset
1 --- libmpeg2/cpu_accel.c 2006-06-16 20:12:26.000000000 +0200
18730
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
2 +++ libmpeg2/cpu_accel.c 2006-06-16 20:12:50.000000000 +0200
19026
de3edca9a962 Remove copyright notice changes from local diff.
diego
parents: 19024
diff changeset
3 @@ -22,6 +26,7 @@
18730
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
4 */
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
5
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
6 #include "config.h"
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
7 +#include "cpudetect.h"
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
8
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
9 #include <inttypes.h>
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
10
19024
4733c3e4f353 Update with latest changes and make diff apply cleanly.
diego
parents: 18783
diff changeset
11 @@ -30,9 +35,17 @@
13864
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
12 #include "mpeg2_internal.h"
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
13
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
14 #ifdef ACCEL_DETECT
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
15 -#ifdef ARCH_X86
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
16 +#if defined(ARCH_X86) || defined(ARCH_X86_64)
18730
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
17 +
26283
62abac0c8637 cosmetics: Fix some typos and trailing whitespace in local changes.
diego
parents: 26282
diff changeset
18 +/* MPlayer imports libmpeg2 as decoder, which detects MMX / 3DNow!
62abac0c8637 cosmetics: Fix some typos and trailing whitespace in local changes.
diego
parents: 26282
diff changeset
19 + * instructions via assembly. However, it is regarded as duplicated work
62abac0c8637 cosmetics: Fix some typos and trailing whitespace in local changes.
diego
parents: 26282
diff changeset
20 + * in MPlayer, so that we enforce using MPlayer's implementation.
18730
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
21 + */
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
22 +#define USE_MPLAYER_CPUDETECT
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
23 +
13864
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
24 static inline uint32_t arch_accel (void)
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
25 {
18730
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
26 +#if !defined(USE_MPLAYER_CPUDETECT)
13864
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
27 uint32_t eax, ebx, ecx, edx;
18730
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
28 int AMD;
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
29 uint32_t caps;
26282
79ab4ecba54a Revert local changes that pointlessly add #ifdefs all over libmpeg2 to disable
diego
parents: 26047
diff changeset
30 @@ -105,7 +120,21 @@
18730
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
31 caps |= MPEG2_ACCEL_X86_MMXEXT;
13864
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
32
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
33 return caps;
26283
62abac0c8637 cosmetics: Fix some typos and trailing whitespace in local changes.
diego
parents: 26282
diff changeset
34 +#else /* USE_MPLAYER_CPUDETECT: Use MPlayer's CPU capability property. */
18730
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
35 + caps = 0;
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
36 + if (gCpuCaps.hasMMX)
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
37 + caps |= MPEG2_ACCEL_X86_MMX;
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
38 + if (gCpuCaps.hasSSE2)
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
39 + caps |= MPEG2_ACCEL_X86_SSE2;
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
40 + if (gCpuCaps.hasMMX2)
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
41 + caps |= MPEG2_ACCEL_X86_MMXEXT;
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
42 + if (gCpuCaps.has3DNow)
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
43 + caps |= MPEG2_ACCEL_X86_3DNOW;
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
44 +
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
45 + return caps;
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
46 +
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
47 +#endif /* USE_MPLAYER_CPUDETECT */
13020
3380d4a65b15 Patch updated for latest changes to libmpeg2.
diego
parents: 13019
diff changeset
48 }
13864
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
49 -#endif /* ARCH_X86 */
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
50 +#endif /* ARCH_X86 || ARCH_X86_64 */
13020
3380d4a65b15 Patch updated for latest changes to libmpeg2.
diego
parents: 13019
diff changeset
51
26282
79ab4ecba54a Revert local changes that pointlessly add #ifdefs all over libmpeg2 to disable
diego
parents: 26047
diff changeset
52 #if defined(ARCH_PPC) || defined(ARCH_SPARC)
79ab4ecba54a Revert local changes that pointlessly add #ifdefs all over libmpeg2 to disable
diego
parents: 26047
diff changeset
53 @@ -166,10 +168,10 @@
21377
6053051bdc75 add missing r15484
henry
parents: 20640
diff changeset
54
6053051bdc75 add missing r15484
henry
parents: 20640
diff changeset
55 canjump = 1;
6053051bdc75 add missing r15484
henry
parents: 20640
diff changeset
56
6053051bdc75 add missing r15484
henry
parents: 20640
diff changeset
57 -#ifdef HAVE_ALTIVEC_H /* gnu */
6053051bdc75 add missing r15484
henry
parents: 20640
diff changeset
58 -#define VAND(a,b,c) "vand " #a "," #b "," #c "\n\t"
6053051bdc75 add missing r15484
henry
parents: 20640
diff changeset
59 -#else /* apple */
25980
11181df06389 Do not check for __APPLE_ALTIVEC__, just check for __APPLE_CC__.
diego
parents: 24720
diff changeset
60 +#if defined(__APPLE_CC__) /* apple */
21377
6053051bdc75 add missing r15484
henry
parents: 20640
diff changeset
61 #define VAND(a,b,c) "vand v" #a ",v" #b ",v" #c "\n\t"
6053051bdc75 add missing r15484
henry
parents: 20640
diff changeset
62 +#else /* gnu */
6053051bdc75 add missing r15484
henry
parents: 20640
diff changeset
63 +#define VAND(a,b,c) "vand " #a "," #b "," #c "\n\t"
6053051bdc75 add missing r15484
henry
parents: 20640
diff changeset
64 #endif
6053051bdc75 add missing r15484
henry
parents: 20640
diff changeset
65 asm volatile ("mtspr 256, %0\n\t"
6053051bdc75 add missing r15484
henry
parents: 20640
diff changeset
66 VAND (0, 0, 0)
26282
79ab4ecba54a Revert local changes that pointlessly add #ifdefs all over libmpeg2 to disable
diego
parents: 26047
diff changeset
67 @@ -212,7 +241,7 @@
13864
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
68
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
69 accel = 0;
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
70 #ifdef ACCEL_DETECT
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
71 -#if defined (ARCH_X86) || defined (ARCH_PPC) || defined (ARCH_ALPHA) || defined (ARCH_SPARC)
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
72 +#if defined (ARCH_X86) || defined (ARCH_X86_64) || defined (ARCH_PPC) || defined (ARCH_ALPHA) || defined (ARCH_SPARC)
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
73 accel = arch_accel ();
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
74 #endif
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
75 #endif
19024
4733c3e4f353 Update with latest changes and make diff apply cleanly.
diego
parents: 18783
diff changeset
76 --- libmpeg2/cpu_state.c 2006-06-16 20:12:26.000000000 +0200
18730
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
77 +++ libmpeg2/cpu_state.c 2006-06-16 20:12:50.000000000 +0200
19024
4733c3e4f353 Update with latest changes and make diff apply cleanly.
diego
parents: 18783
diff changeset
78 @@ -29,14 +33,14 @@
13864
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
79 #include "mpeg2.h"
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
80 #include "attributes.h"
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
81 #include "mpeg2_internal.h"
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
82 -#ifdef ARCH_X86
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
83 +#if defined(ARCH_X86) || defined(ARCH_X86_64)
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
84 #include "mmx.h"
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
85 #endif
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
86
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
87 void (* mpeg2_cpu_state_save) (cpu_state_t * state) = NULL;
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
88 void (* mpeg2_cpu_state_restore) (cpu_state_t * state) = NULL;
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
89
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
90 -#ifdef ARCH_X86
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
91 +#if defined(ARCH_X86) || defined(ARCH_X86_64)
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
92 static void state_restore_mmx (cpu_state_t * state)
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
93 {
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
94 emms ();
21571
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
95 @@ -48,18 +48,18 @@
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
96 #endif
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
97
26595
4bc81fcf14bb Fix compilation on PPC without AltiVec.
diego
parents: 26284
diff changeset
98 #ifdef ARCH_PPC
21571
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
99 -#ifdef HAVE_ALTIVEC_H /* gnu */
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
100 -#define LI(a,b) "li " #a "," #b "\n\t"
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
101 -#define STVX0(a,b,c) "stvx " #a ",0," #c "\n\t"
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
102 -#define STVX(a,b,c) "stvx " #a "," #b "," #c "\n\t"
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
103 -#define LVX0(a,b,c) "lvx " #a ",0," #c "\n\t"
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
104 -#define LVX(a,b,c) "lvx " #a "," #b "," #c "\n\t"
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
105 -#else /* apple */
25980
11181df06389 Do not check for __APPLE_ALTIVEC__, just check for __APPLE_CC__.
diego
parents: 24720
diff changeset
106 +#if defined(__APPLE_CC__) /* apple */
21571
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
107 #define LI(a,b) "li r" #a "," #b "\n\t"
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
108 #define STVX0(a,b,c) "stvx v" #a ",0,r" #c "\n\t"
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
109 #define STVX(a,b,c) "stvx v" #a ",r" #b ",r" #c "\n\t"
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
110 #define LVX0(a,b,c) "lvx v" #a ",0,r" #c "\n\t"
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
111 #define LVX(a,b,c) "lvx v" #a ",r" #b ",r" #c "\n\t"
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
112 +#else /* gnu */
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
113 +#define LI(a,b) "li " #a "," #b "\n\t"
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
114 +#define STVX0(a,b,c) "stvx " #a ",0," #c "\n\t"
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
115 +#define STVX(a,b,c) "stvx " #a "," #b "," #c "\n\t"
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
116 +#define LVX0(a,b,c) "lvx " #a ",0," #c "\n\t"
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
117 +#define LVX(a,b,c) "lvx " #a "," #b "," #c "\n\t"
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
118 #endif
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
119
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
120 static void state_save_altivec (cpu_state_t * state)
26282
79ab4ecba54a Revert local changes that pointlessly add #ifdefs all over libmpeg2 to disable
diego
parents: 26047
diff changeset
121 @@ -115,9 +119,9 @@
13864
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
122
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
123 void mpeg2_cpu_state_init (uint32_t accel)
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
124 {
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
125 -#ifdef ARCH_X86
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
126 +#if defined(ARCH_X86) || defined(ARCH_X86_64)
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
127 if (accel & MPEG2_ACCEL_X86_MMX) {
12937
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
128 mpeg2_cpu_state_restore = state_restore_mmx;
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
129 }
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
130 #endif
26282
79ab4ecba54a Revert local changes that pointlessly add #ifdefs all over libmpeg2 to disable
diego
parents: 26047
diff changeset
131 #ifdef ARCH_PPC
19024
4733c3e4f353 Update with latest changes and make diff apply cleanly.
diego
parents: 18783
diff changeset
132 --- libmpeg2/decode.c 2006-06-16 20:12:26.000000000 +0200
18730
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
133 +++ libmpeg2/decode.c 2006-06-16 20:12:50.000000000 +0200
19024
4733c3e4f353 Update with latest changes and make diff apply cleanly.
diego
parents: 18783
diff changeset
134 @@ -351,6 +355,15 @@
12937
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
135 fbuf->buf[1] = buf[1];
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
136 fbuf->buf[2] = buf[2];
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
137 fbuf->id = id;
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
138 + // HACK! FIXME! At first I frame, copy pointers to prediction frame too!
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
139 + if (mpeg2dec->custom_fbuf && !mpeg2dec->fbuf[1]->buf[0]){
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
140 + mpeg2dec->fbuf[1]->buf[0]=buf[0];
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
141 + mpeg2dec->fbuf[1]->buf[1]=buf[1];
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
142 + mpeg2dec->fbuf[1]->buf[2]=buf[2];
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
143 + mpeg2dec->fbuf[1]->id=NULL;
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
144 + }
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
145 +// printf("libmpeg2: FBUF 0:%p 1:%p 2:%p\n",
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
146 +// mpeg2dec->fbuf[0]->buf[0],mpeg2dec->fbuf[1]->buf[0],mpeg2dec->fbuf[2]->buf[0]);
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
147 }
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
148
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
149 void mpeg2_custom_fbuf (mpeg2dec_t * mpeg2dec, int custom_fbuf)
19024
4733c3e4f353 Update with latest changes and make diff apply cleanly.
diego
parents: 18783
diff changeset
150 --- libmpeg2/header.c 2006-06-16 20:12:26.000000000 +0200
18730
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
151 +++ libmpeg2/header.c 2006-06-16 20:12:50.000000000 +0200
19024
4733c3e4f353 Update with latest changes and make diff apply cleanly.
diego
parents: 18783
diff changeset
152 @@ -100,6 +104,9 @@
12937
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
153 mpeg2dec->decoder.convert = NULL;
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
154 mpeg2dec->decoder.convert_id = NULL;
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
155 mpeg2dec->picture = mpeg2dec->pictures;
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
156 + memset(&mpeg2dec->fbuf_alloc[0].fbuf, 0, sizeof(mpeg2_fbuf_t));
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
157 + memset(&mpeg2dec->fbuf_alloc[1].fbuf, 0, sizeof(mpeg2_fbuf_t));
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
158 + memset(&mpeg2dec->fbuf_alloc[2].fbuf, 0, sizeof(mpeg2_fbuf_t));
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
159 mpeg2dec->fbuf[0] = &mpeg2dec->fbuf_alloc[0].fbuf;
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
160 mpeg2dec->fbuf[1] = &mpeg2dec->fbuf_alloc[1].fbuf;
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
161 mpeg2dec->fbuf[2] = &mpeg2dec->fbuf_alloc[2].fbuf;
19024
4733c3e4f353 Update with latest changes and make diff apply cleanly.
diego
parents: 18783
diff changeset
162 @@ -551,6 +558,7 @@
12937
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
163 if (!(mpeg2dec->sequence.flags & SEQ_FLAG_PROGRESSIVE_SEQUENCE)) {
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
164 picture->nb_fields = (buffer[3] & 2) ? 3 : 2;
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
165 flags |= (buffer[3] & 128) ? PIC_FLAG_TOP_FIELD_FIRST : 0;
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
166 + flags |= (buffer[3] & 2) ? PIC_FLAG_REPEAT_FIRST_FIELD : 0;
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
167 } else
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
168 picture->nb_fields = (buffer[3]&2) ? ((buffer[3]&128) ? 6 : 4) : 2;
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
169 break;
19024
4733c3e4f353 Update with latest changes and make diff apply cleanly.
diego
parents: 18783
diff changeset
170 @@ -799,6 +807,7 @@
12937
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
171 mpeg2dec->scaled[index] = mpeg2dec->q_scale_type;
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
172 for (i = 0; i < 32; i++) {
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
173 k = mpeg2dec->q_scale_type ? non_linear_scale[i] : (i << 1);
13147
henry
parents: 13020
diff changeset
174 + decoder->quantizer_scales[i] = k;
12937
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
175 for (j = 0; j < 64; j++)
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
176 decoder->quantizer_prescale[index][i][j] =
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
177 k * mpeg2dec->quantizer_matrix[index][j];
26625
5b89b42f6d50 Only compile and use libmpeg2 AltiVec code when AltiVec is available. The
diego
parents: 26595
diff changeset
178 --- libmpeg2/idct.c (revision 26652)
5b89b42f6d50 Only compile and use libmpeg2 AltiVec code when AltiVec is available. The
diego
parents: 26595
diff changeset
179 +++ libmpeg2/idct.c (working copy)
5b89b42f6d50 Only compile and use libmpeg2 AltiVec code when AltiVec is available. The
diego
parents: 26595
diff changeset
180 @@ -250,7 +254,7 @@
5b89b42f6d50 Only compile and use libmpeg2 AltiVec code when AltiVec is available. The
diego
parents: 26595
diff changeset
181 mpeg2_idct_mmx_init ();
5b89b42f6d50 Only compile and use libmpeg2 AltiVec code when AltiVec is available. The
diego
parents: 26595
diff changeset
182 } else
5b89b42f6d50 Only compile and use libmpeg2 AltiVec code when AltiVec is available. The
diego
parents: 26595
diff changeset
183 #endif
5b89b42f6d50 Only compile and use libmpeg2 AltiVec code when AltiVec is available. The
diego
parents: 26595
diff changeset
184 -#ifdef ARCH_PPC
5b89b42f6d50 Only compile and use libmpeg2 AltiVec code when AltiVec is available. The
diego
parents: 26595
diff changeset
185 +#ifdef HAVE_ALTIVEC
5b89b42f6d50 Only compile and use libmpeg2 AltiVec code when AltiVec is available. The
diego
parents: 26595
diff changeset
186 if (accel & MPEG2_ACCEL_PPC_ALTIVEC) {
5b89b42f6d50 Only compile and use libmpeg2 AltiVec code when AltiVec is available. The
diego
parents: 26595
diff changeset
187 mpeg2_idct_copy = mpeg2_idct_copy_altivec;
5b89b42f6d50 Only compile and use libmpeg2 AltiVec code when AltiVec is available. The
diego
parents: 26595
diff changeset
188 mpeg2_idct_add = mpeg2_idct_add_altivec;
19024
4733c3e4f353 Update with latest changes and make diff apply cleanly.
diego
parents: 18783
diff changeset
189 --- libmpeg2/idct_mmx.c 2006-06-16 20:12:26.000000000 +0200
18730
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
190 +++ libmpeg2/idct_mmx.c 2006-06-16 20:12:50.000000000 +0200
19024
4733c3e4f353 Update with latest changes and make diff apply cleanly.
diego
parents: 18783
diff changeset
191 @@ -23,7 +27,7 @@
13864
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
192
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
193 #include "config.h"
12937
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
194
13864
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
195 -#ifdef ARCH_X86
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
196 +#if defined(ARCH_X86) || defined(ARCH_X86_64)
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
197
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
198 #include <inttypes.h>
12937
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
199
19024
4733c3e4f353 Update with latest changes and make diff apply cleanly.
diego
parents: 18783
diff changeset
200 --- libmpeg2/motion_comp.c 2006-06-16 20:12:26.000000000 +0200
18730
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
201 +++ libmpeg2/motion_comp.c 2006-06-16 20:12:50.000000000 +0200
26625
5b89b42f6d50 Only compile and use libmpeg2 AltiVec code when AltiVec is available. The
diego
parents: 26595
diff changeset
202 @@ -46,7 +46,7 @@
5b89b42f6d50 Only compile and use libmpeg2 AltiVec code when AltiVec is available. The
diego
parents: 26595
diff changeset
203 mpeg2_mc = mpeg2_mc_mmx;
5b89b42f6d50 Only compile and use libmpeg2 AltiVec code when AltiVec is available. The
diego
parents: 26595
diff changeset
204 else
5b89b42f6d50 Only compile and use libmpeg2 AltiVec code when AltiVec is available. The
diego
parents: 26595
diff changeset
205 #endif
5b89b42f6d50 Only compile and use libmpeg2 AltiVec code when AltiVec is available. The
diego
parents: 26595
diff changeset
206 -#ifdef ARCH_PPC
5b89b42f6d50 Only compile and use libmpeg2 AltiVec code when AltiVec is available. The
diego
parents: 26595
diff changeset
207 +#ifdef HAVE_ALTIVEC
5b89b42f6d50 Only compile and use libmpeg2 AltiVec code when AltiVec is available. The
diego
parents: 26595
diff changeset
208 if (accel & MPEG2_ACCEL_PPC_ALTIVEC)
5b89b42f6d50 Only compile and use libmpeg2 AltiVec code when AltiVec is available. The
diego
parents: 26595
diff changeset
209 mpeg2_mc = mpeg2_mc_altivec;
5b89b42f6d50 Only compile and use libmpeg2 AltiVec code when AltiVec is available. The
diego
parents: 26595
diff changeset
210 else
26282
79ab4ecba54a Revert local changes that pointlessly add #ifdefs all over libmpeg2 to disable
diego
parents: 26047
diff changeset
211 @@ -67,6 +61,13 @@
23236
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
212 mpeg2_mc = mpeg2_mc_vis;
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
213 else
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
214 #endif
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
215 +#ifdef ARCH_ARM
26282
79ab4ecba54a Revert local changes that pointlessly add #ifdefs all over libmpeg2 to disable
diego
parents: 26047
diff changeset
216 + if (accel & MPEG2_ACCEL_ARM_IWMMXT)
79ab4ecba54a Revert local changes that pointlessly add #ifdefs all over libmpeg2 to disable
diego
parents: 26047
diff changeset
217 + mpeg2_mc = mpeg2_mc_iwmmxt;
79ab4ecba54a Revert local changes that pointlessly add #ifdefs all over libmpeg2 to disable
diego
parents: 26047
diff changeset
218 + else if (accel & MPEG2_ACCEL_ARM)
79ab4ecba54a Revert local changes that pointlessly add #ifdefs all over libmpeg2 to disable
diego
parents: 26047
diff changeset
219 + mpeg2_mc = mpeg2_mc_arm;
79ab4ecba54a Revert local changes that pointlessly add #ifdefs all over libmpeg2 to disable
diego
parents: 26047
diff changeset
220 + else
23236
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
221 +#endif
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
222 mpeg2_mc = mpeg2_mc_c;
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
223 }
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
224
19024
4733c3e4f353 Update with latest changes and make diff apply cleanly.
diego
parents: 18783
diff changeset
225 --- libmpeg2/motion_comp_mmx.c 2006-06-16 20:12:26.000000000 +0200
18730
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
226 +++ libmpeg2/motion_comp_mmx.c 2006-06-16 20:12:50.000000000 +0200
19024
4733c3e4f353 Update with latest changes and make diff apply cleanly.
diego
parents: 18783
diff changeset
227 @@ -23,7 +27,7 @@
13864
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
228
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
229 #include "config.h"
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
230
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
231 -#ifdef ARCH_X86
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
232 +#if defined(ARCH_X86) || defined(ARCH_X86_64)
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
233
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
234 #include <inttypes.h>
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13147
diff changeset
235
19024
4733c3e4f353 Update with latest changes and make diff apply cleanly.
diego
parents: 18783
diff changeset
236 --- include/mpeg2.h 2006-06-16 20:12:26.000000000 +0200
18730
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
237 +++ libmpeg2/mpeg2.h 2006-06-16 20:12:50.000000000 +0200
19024
4733c3e4f353 Update with latest changes and make diff apply cleanly.
diego
parents: 18783
diff changeset
238 @@ -82,6 +86,7 @@
13147
henry
parents: 13020
diff changeset
239 #define PIC_FLAG_COMPOSITE_DISPLAY 32
henry
parents: 13020
diff changeset
240 #define PIC_FLAG_SKIP 64
henry
parents: 13020
diff changeset
241 #define PIC_FLAG_TAGS 128
henry
parents: 13020
diff changeset
242 +#define PIC_FLAG_REPEAT_FIRST_FIELD 256
henry
parents: 13020
diff changeset
243 #define PIC_MASK_COMPOSITE_DISPLAY 0xfffff000
henry
parents: 13020
diff changeset
244
henry
parents: 13020
diff changeset
245 typedef struct mpeg2_picture_s {
26047
9153b0e6ab23 Remove mistakenly committed hunk.
diego
parents: 26046
diff changeset
246 @@ -156,10 +160,13 @@
18730
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
247 #define MPEG2_ACCEL_X86_3DNOW 2
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
248 #define MPEG2_ACCEL_X86_MMXEXT 4
26047
9153b0e6ab23 Remove mistakenly committed hunk.
diego
parents: 26046
diff changeset
249 +#define MPEG2_ACCEL_X86_SSE2 8
18730
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
250 #define MPEG2_ACCEL_PPC_ALTIVEC 1
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
251 #define MPEG2_ACCEL_ALPHA 1
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
252 #define MPEG2_ACCEL_ALPHA_MVI 2
26046
b65b71ba0e16 Properly detect ARM mc acceleration.
diego
parents: 26044
diff changeset
253 #define MPEG2_ACCEL_SPARC_VIS 1
b65b71ba0e16 Properly detect ARM mc acceleration.
diego
parents: 26044
diff changeset
254 #define MPEG2_ACCEL_SPARC_VIS2 2
b65b71ba0e16 Properly detect ARM mc acceleration.
diego
parents: 26044
diff changeset
255 +#define MPEG2_ACCEL_ARM 1
b65b71ba0e16 Properly detect ARM mc acceleration.
diego
parents: 26044
diff changeset
256 +#define MPEG2_ACCEL_ARM_IWMMXT 2
b65b71ba0e16 Properly detect ARM mc acceleration.
diego
parents: 26044
diff changeset
257 #define MPEG2_ACCEL_DETECT 0x80000000
b65b71ba0e16 Properly detect ARM mc acceleration.
diego
parents: 26044
diff changeset
258
b65b71ba0e16 Properly detect ARM mc acceleration.
diego
parents: 26044
diff changeset
259 uint32_t mpeg2_accel (uint32_t accel);
19024
4733c3e4f353 Update with latest changes and make diff apply cleanly.
diego
parents: 18783
diff changeset
260 --- libmpeg2/mpeg2_internal.h 2006-06-16 20:12:26.000000000 +0200
18730
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
261 +++ libmpeg2/mpeg2_internal.h 2006-06-16 20:12:50.000000000 +0200
26284
c5cd2eedc579 Remove pointless comments from local diff.
diego
parents: 26283
diff changeset
262 @@ -144,6 +148,11 @@
12937
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
263 int second_field;
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
264
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
265 int mpeg1;
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
266 +
13147
henry
parents: 13020
diff changeset
267 + int quantizer_scales[32];
12937
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
268 + int quantizer_scale;
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
269 + char* quant_store;
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
270 + int quant_stride;
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
271 };
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
272
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
273 typedef struct {
26284
c5cd2eedc579 Remove pointless comments from local diff.
diego
parents: 26283
diff changeset
274 @@ -214,6 +224,9 @@
13147
henry
parents: 13020
diff changeset
275 int8_t q_scale_type, scaled[4];
henry
parents: 13020
diff changeset
276 uint8_t quantizer_matrix[4][64];
henry
parents: 13020
diff changeset
277 uint8_t new_quantizer_matrix[4][64];
henry
parents: 13020
diff changeset
278 +
henry
parents: 13020
diff changeset
279 + unsigned char *pending_buffer;
henry
parents: 13020
diff changeset
280 + int pending_length;
henry
parents: 13020
diff changeset
281 };
henry
parents: 13020
diff changeset
282
henry
parents: 13020
diff changeset
283 typedef struct {
23236
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
284 @@ -312,3 +312,5 @@
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
285 extern mpeg2_mc_t mpeg2_mc_altivec;
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
286 extern mpeg2_mc_t mpeg2_mc_alpha;
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
287 extern mpeg2_mc_t mpeg2_mc_vis;
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
288 +extern mpeg2_mc_t mpeg2_mc_arm;
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
289 +extern mpeg2_mc_t mpeg2_mc_iwmmxt;
19024
4733c3e4f353 Update with latest changes and make diff apply cleanly.
diego
parents: 18783
diff changeset
290 --- libmpeg2/slice.c 2006-06-16 20:12:26.000000000 +0200
18730
93241711b635 sync with 18730 (Use MPlayer's CPU detection module instead of libmpeg2's)
gpoirier
parents: 14730
diff changeset
291 +++ libmpeg2/slice.c 2006-06-16 20:12:50.000000000 +0200
19024
4733c3e4f353 Update with latest changes and make diff apply cleanly.
diego
parents: 18783
diff changeset
292 @@ -142,6 +146,7 @@
13147
henry
parents: 13020
diff changeset
293
henry
parents: 13020
diff changeset
294 quantizer_scale_code = UBITS (bit_buf, 5);
henry
parents: 13020
diff changeset
295 DUMPBITS (bit_buf, bits, 5);
henry
parents: 13020
diff changeset
296 + decoder->quantizer_scale = decoder->quantizer_scales[quantizer_scale_code];
henry
parents: 13020
diff changeset
297
henry
parents: 13020
diff changeset
298 decoder->quantizer_matrix[0] =
henry
parents: 13020
diff changeset
299 decoder->quantizer_prescale[0][quantizer_scale_code];
20640
c52bb8d6edea update for r20654
henry
parents: 19259
diff changeset
300 @@ -1568,6 +1569,18 @@
12937
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
301
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
302 #define NEXT_MACROBLOCK \
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
303 do { \
20640
c52bb8d6edea update for r20654
henry
parents: 19259
diff changeset
304 + if(decoder->quant_store) { \
c52bb8d6edea update for r20654
henry
parents: 19259
diff changeset
305 + if (decoder->picture_structure == TOP_FIELD) \
c52bb8d6edea update for r20654
henry
parents: 19259
diff changeset
306 + decoder->quant_store[2*decoder->quant_stride*(decoder->v_offset>>4) \
c52bb8d6edea update for r20654
henry
parents: 19259
diff changeset
307 + +(decoder->offset>>4)] = decoder->quantizer_scale; \
c52bb8d6edea update for r20654
henry
parents: 19259
diff changeset
308 + else if (decoder->picture_structure == BOTTOM_FIELD) \
c52bb8d6edea update for r20654
henry
parents: 19259
diff changeset
309 + decoder->quant_store[2*decoder->quant_stride*(decoder->v_offset>>4) \
c52bb8d6edea update for r20654
henry
parents: 19259
diff changeset
310 + + decoder->quant_stride \
c52bb8d6edea update for r20654
henry
parents: 19259
diff changeset
311 + +(decoder->offset>>4)] = decoder->quantizer_scale; \
c52bb8d6edea update for r20654
henry
parents: 19259
diff changeset
312 + else \
12937
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
313 + decoder->quant_store[decoder->quant_stride*(decoder->v_offset>>4) \
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
314 + +(decoder->offset>>4)] = decoder->quantizer_scale; \
20640
c52bb8d6edea update for r20654
henry
parents: 19259
diff changeset
315 + } \
12937
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
316 decoder->offset += 16; \
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
317 if (decoder->offset == decoder->width) { \
b61f21a54546 summary of the MPlayer specific libmpeg2 changes
henry
parents:
diff changeset
318 do { /* just so we can use the break statement */ \
21923
1658f7d97b27 fix crash with http://sam.zoy.org/zzuf/lol-mplayer.m2v
henry
parents: 21571
diff changeset
319 @@ -1604,6 +1604,12 @@
1658f7d97b27 fix crash with http://sam.zoy.org/zzuf/lol-mplayer.m2v
henry
parents: 21571
diff changeset
320 } \
1658f7d97b27 fix crash with http://sam.zoy.org/zzuf/lol-mplayer.m2v
henry
parents: 21571
diff changeset
321 } while (0)
1658f7d97b27 fix crash with http://sam.zoy.org/zzuf/lol-mplayer.m2v
henry
parents: 21571
diff changeset
322
1658f7d97b27 fix crash with http://sam.zoy.org/zzuf/lol-mplayer.m2v
henry
parents: 21571
diff changeset
323 +static void motion_dummy (mpeg2_decoder_t * const decoder,
1658f7d97b27 fix crash with http://sam.zoy.org/zzuf/lol-mplayer.m2v
henry
parents: 21571
diff changeset
324 + motion_t * const motion,
1658f7d97b27 fix crash with http://sam.zoy.org/zzuf/lol-mplayer.m2v
henry
parents: 21571
diff changeset
325 + mpeg2_mc_fct * const * const table)
1658f7d97b27 fix crash with http://sam.zoy.org/zzuf/lol-mplayer.m2v
henry
parents: 21571
diff changeset
326 +{
1658f7d97b27 fix crash with http://sam.zoy.org/zzuf/lol-mplayer.m2v
henry
parents: 21571
diff changeset
327 +}
1658f7d97b27 fix crash with http://sam.zoy.org/zzuf/lol-mplayer.m2v
henry
parents: 21571
diff changeset
328 +
1658f7d97b27 fix crash with http://sam.zoy.org/zzuf/lol-mplayer.m2v
henry
parents: 21571
diff changeset
329 void mpeg2_init_fbuf (mpeg2_decoder_t * decoder, uint8_t * current_fbuf[3],
1658f7d97b27 fix crash with http://sam.zoy.org/zzuf/lol-mplayer.m2v
henry
parents: 21571
diff changeset
330 uint8_t * forward_fbuf[3], uint8_t * backward_fbuf[3])
1658f7d97b27 fix crash with http://sam.zoy.org/zzuf/lol-mplayer.m2v
henry
parents: 21571
diff changeset
331 {
1658f7d97b27 fix crash with http://sam.zoy.org/zzuf/lol-mplayer.m2v
henry
parents: 21571
diff changeset
332 @@ -1661,7 +1667,9 @@
1658f7d97b27 fix crash with http://sam.zoy.org/zzuf/lol-mplayer.m2v
henry
parents: 21571
diff changeset
333
1658f7d97b27 fix crash with http://sam.zoy.org/zzuf/lol-mplayer.m2v
henry
parents: 21571
diff changeset
334 if (decoder->mpeg1) {
1658f7d97b27 fix crash with http://sam.zoy.org/zzuf/lol-mplayer.m2v
henry
parents: 21571
diff changeset
335 decoder->motion_parser[0] = motion_zero_420;
1658f7d97b27 fix crash with http://sam.zoy.org/zzuf/lol-mplayer.m2v
henry
parents: 21571
diff changeset
336 + decoder->motion_parser[MC_FIELD] = motion_dummy;
1658f7d97b27 fix crash with http://sam.zoy.org/zzuf/lol-mplayer.m2v
henry
parents: 21571
diff changeset
337 decoder->motion_parser[MC_FRAME] = motion_mp1;
1658f7d97b27 fix crash with http://sam.zoy.org/zzuf/lol-mplayer.m2v
henry
parents: 21571
diff changeset
338 + decoder->motion_parser[MC_DMV] = motion_dummy;
1658f7d97b27 fix crash with http://sam.zoy.org/zzuf/lol-mplayer.m2v
henry
parents: 21571
diff changeset
339 decoder->motion_parser[4] = motion_reuse_420;
1658f7d97b27 fix crash with http://sam.zoy.org/zzuf/lol-mplayer.m2v
henry
parents: 21571
diff changeset
340 } else if (decoder->picture_structure == FRAME_PICTURE) {
1658f7d97b27 fix crash with http://sam.zoy.org/zzuf/lol-mplayer.m2v
henry
parents: 21571
diff changeset
341 if (decoder->chroma_format == 0) {
21571
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
342 --- libmpeg2/idct_altivec.c 2004/08/02 11:26:43 12933
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
343 +++ libmpeg2/idct_altivec.c 2005/05/15 20:11:34 15484
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
344 @@ -41,7 +41,7 @@
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
345 typedef vector signed int vector_s32_t;
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
346 typedef vector unsigned int vector_u32_t;
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
347
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
348 -#if defined(HAVE_ALTIVEC_H) && (__GNUC__ * 100 + __GNUC_MINOR__ < 303)
25980
11181df06389 Do not check for __APPLE_ALTIVEC__, just check for __APPLE_CC__.
diego
parents: 24720
diff changeset
349 +#if defined(HAVE_ALTIVEC_H) && !defined(__APPLE_CC__) && (__GNUC__ * 100 + __GNUC_MINOR__ < 303)
21571
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
350 /* work around gcc <3.3 vec_mergel bug */
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
351 static inline vector_s16_t my_vec_mergel (vector_s16_t const A,
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
352 vector_s16_t const B)
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
353 @@ -56,10 +56,10 @@
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
354 #define vec_mergel my_vec_mergel
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
355 #endif
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
356
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
357 -#ifdef HAVE_ALTIVEC_H /* gnu */
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
358 -#define VEC_S16(a,b,c,d,e,f,g,h) {a, b, c, d, e, f, g, h}
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
359 -#else /* apple */
25980
11181df06389 Do not check for __APPLE_ALTIVEC__, just check for __APPLE_CC__.
diego
parents: 24720
diff changeset
360 +#if defined(__APPLE_CC__) /* apple */
21571
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
361 #define VEC_S16(a,b,c,d,e,f,g,h) (vector_s16_t) (a, b, c, d, e, f, g, h)
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
362 +#else /* gnu */
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
363 +#define VEC_S16(a,b,c,d,e,f,g,h) {a, b, c, d, e, f, g, h}
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
364 #endif
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
365
f6881c789312 (hopefully) the rest of PPC modifications
henry
parents: 21534
diff changeset
366 static const vector_s16_t constants ATTR_ALIGN(16) =
23236
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
367 Index: libmpeg2/motion_comp_arm.c
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
368 ===================================================================
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
369 --- libmpeg2/motion_comp_arm.c (revision 0)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
370 +++ libmpeg2/motion_comp_arm.c (revision 0)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
371 @@ -0,0 +1,187 @@
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
372 +/*
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
373 + * motion_comp_arm.c
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
374 + * Copyright (C) 2004 AGAWA Koji <i (AT) atty (DOT) jp>
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
375 + *
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
376 + * This file is part of mpeg2dec, a free MPEG-2 video stream decoder.
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
377 + * See http://libmpeg2.sourceforge.net/ for updates.
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
378 + *
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
379 + * mpeg2dec is free software; you can redistribute it and/or modify
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
380 + * it under the terms of the GNU General Public License as published by
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
381 + * the Free Software Foundation; either version 2 of the License, or
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
382 + * (at your option) any later version.
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
383 + *
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
384 + * mpeg2dec is distributed in the hope that it will be useful,
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
385 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
386 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
387 + * GNU General Public License for more details.
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
388 + *
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
389 + * You should have received a copy of the GNU General Public License
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
390 + * along with this program; if not, write to the Free Software
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
391 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
392 + */
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
393 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
394 +#include "config.h"
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
395 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
396 +#ifdef ARCH_ARM
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
397 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
398 +#include <inttypes.h>
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
399 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
400 +#include "mpeg2.h"
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
401 +#include "attributes.h"
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
402 +#include "mpeg2_internal.h"
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
403 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
404 +#define avg2(a,b) ((a+b+1)>>1)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
405 +#define avg4(a,b,c,d) ((a+b+c+d+2)>>2)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
406 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
407 +#define predict_o(i) (ref[i])
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
408 +#define predict_x(i) (avg2 (ref[i], ref[i+1]))
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
409 +#define predict_y(i) (avg2 (ref[i], (ref+stride)[i]))
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
410 +#define predict_xy(i) (avg4 (ref[i], ref[i+1], \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
411 + (ref+stride)[i], (ref+stride)[i+1]))
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
412 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
413 +#define put(predictor,i) dest[i] = predictor (i)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
414 +#define avg(predictor,i) dest[i] = avg2 (predictor (i), dest[i])
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
415 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
416 +/* mc function template */
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
417 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
418 +#define MC_FUNC(op,xy) \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
419 +static void inline MC_##op##_##xy##_16_c (uint8_t * dest, const uint8_t * ref, \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
420 + const int stride, int height) \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
421 +{ \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
422 + do { \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
423 + op (predict_##xy, 0); \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
424 + op (predict_##xy, 1); \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
425 + op (predict_##xy, 2); \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
426 + op (predict_##xy, 3); \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
427 + op (predict_##xy, 4); \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
428 + op (predict_##xy, 5); \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
429 + op (predict_##xy, 6); \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
430 + op (predict_##xy, 7); \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
431 + op (predict_##xy, 8); \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
432 + op (predict_##xy, 9); \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
433 + op (predict_##xy, 10); \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
434 + op (predict_##xy, 11); \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
435 + op (predict_##xy, 12); \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
436 + op (predict_##xy, 13); \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
437 + op (predict_##xy, 14); \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
438 + op (predict_##xy, 15); \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
439 + ref += stride; \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
440 + dest += stride; \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
441 + } while (--height); \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
442 +} \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
443 +static void MC_##op##_##xy##_8_c (uint8_t * dest, const uint8_t * ref, \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
444 + const int stride, int height) \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
445 +{ \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
446 + do { \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
447 + op (predict_##xy, 0); \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
448 + op (predict_##xy, 1); \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
449 + op (predict_##xy, 2); \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
450 + op (predict_##xy, 3); \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
451 + op (predict_##xy, 4); \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
452 + op (predict_##xy, 5); \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
453 + op (predict_##xy, 6); \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
454 + op (predict_##xy, 7); \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
455 + ref += stride; \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
456 + dest += stride; \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
457 + } while (--height); \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
458 +} \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
459 +/* definitions of the actual mc functions */
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
460 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
461 +MC_FUNC (put,o)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
462 +MC_FUNC (avg,o)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
463 +MC_FUNC (put,x)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
464 +MC_FUNC (avg,x)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
465 +MC_FUNC (put,y)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
466 +MC_FUNC (avg,y)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
467 +MC_FUNC (put,xy)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
468 +MC_FUNC (avg,xy)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
469 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
470 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
471 +extern void MC_put_o_16_arm (uint8_t * dest, const uint8_t * ref,
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
472 + int stride, int height);
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
473 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
474 +extern void MC_put_x_16_arm (uint8_t * dest, const uint8_t * ref,
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
475 + int stride, int height);
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
476 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
477 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
478 +static void MC_put_y_16_arm (uint8_t * dest, const uint8_t * ref,
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
479 + int stride, int height)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
480 +{
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
481 + MC_put_y_16_c(dest, ref, stride, height);
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
482 +}
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
483 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
484 +static void MC_put_xy_16_arm (uint8_t * dest, const uint8_t * ref,
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
485 + int stride, int height)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
486 +{
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
487 + MC_put_xy_16_c(dest, ref, stride, height);
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
488 +}
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
489 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
490 +extern void MC_put_o_8_arm (uint8_t * dest, const uint8_t * ref,
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
491 + int stride, int height);
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
492 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
493 +extern void MC_put_x_8_arm (uint8_t * dest, const uint8_t * ref,
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
494 + int stride, int height);
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
495 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
496 +static void MC_put_y_8_arm (uint8_t * dest, const uint8_t * ref,
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
497 + int stride, int height)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
498 +{
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
499 + MC_put_y_8_c(dest, ref, stride, height);
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
500 +}
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
501 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
502 +static void MC_put_xy_8_arm (uint8_t * dest, const uint8_t * ref,
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
503 + int stride, int height)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
504 +{
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
505 + MC_put_xy_8_c(dest, ref, stride, height);
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
506 +}
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
507 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
508 +static void MC_avg_o_16_arm (uint8_t * dest, const uint8_t * ref,
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
509 + int stride, int height)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
510 +{
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
511 + MC_avg_o_16_c(dest, ref, stride, height);
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
512 +}
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
513 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
514 +static void MC_avg_x_16_arm (uint8_t * dest, const uint8_t * ref,
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
515 + int stride, int height)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
516 +{
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
517 + MC_avg_x_16_c(dest, ref, stride, height);
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
518 +}
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
519 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
520 +static void MC_avg_y_16_arm (uint8_t * dest, const uint8_t * ref,
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
521 + int stride, int height)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
522 +{
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
523 + MC_avg_y_16_c(dest, ref, stride, height);
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
524 +}
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
525 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
526 +static void MC_avg_xy_16_arm (uint8_t * dest, const uint8_t * ref,
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
527 + int stride, int height)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
528 +{
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
529 + MC_avg_xy_16_c(dest, ref, stride, height);
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
530 +}
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
531 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
532 +static void MC_avg_o_8_arm (uint8_t * dest, const uint8_t * ref,
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
533 + int stride, int height)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
534 +{
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
535 + MC_avg_o_8_c(dest, ref, stride, height);
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
536 +}
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
537 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
538 +static void MC_avg_x_8_arm (uint8_t * dest, const uint8_t * ref,
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
539 + int stride, int height)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
540 +{
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
541 + MC_avg_x_8_c(dest, ref, stride, height);
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
542 +}
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
543 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
544 +static void MC_avg_y_8_arm (uint8_t * dest, const uint8_t * ref,
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
545 + int stride, int height)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
546 +{
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
547 + MC_avg_y_8_c(dest, ref, stride, height);
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
548 +}
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
549 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
550 +static void MC_avg_xy_8_arm (uint8_t * dest, const uint8_t * ref,
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
551 + int stride, int height)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
552 +{
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
553 + MC_avg_xy_8_c(dest, ref, stride, height);
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
554 +}
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
555 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
556 +MPEG2_MC_EXTERN (arm)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
557 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
558 +#endif
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
559 Index: libmpeg2/motion_comp_arm_s.S
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
560 ===================================================================
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
561 --- libmpeg2/motion_comp_arm_s.S (revision 0)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
562 +++ libmpeg2/motion_comp_arm_s.S (revision 0)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
563 @@ -0,0 +1,322 @@
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
564 +@ motion_comp_arm_s.S
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
565 +@ Copyright (C) 2004 AGAWA Koji <i (AT) atty (DOT) jp>
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
566 +@
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
567 +@ This file is part of mpeg2dec, a free MPEG-2 video stream decoder.
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
568 +@ See http://libmpeg2.sourceforge.net/ for updates.
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
569 +@
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
570 +@ mpeg2dec is free software; you can redistribute it and/or modify
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
571 +@ it under the terms of the GNU General Public License as published by
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
572 +@ the Free Software Foundation; either version 2 of the License, or
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
573 +@ (at your option) any later version.
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
574 +@
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
575 +@ mpeg2dec is distributed in the hope that it will be useful,
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
576 +@ but WITHOUT ANY WARRANTY; without even the implied warranty of
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
577 +@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
578 +@ GNU General Public License for more details.
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
579 +@
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
580 +@ You should have received a copy of the GNU General Public License
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
581 +@ along with this program; if not, write to the Free Software
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
582 +@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
583 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
584 + .text
26283
62abac0c8637 cosmetics: Fix some typos and trailing whitespace in local changes.
diego
parents: 26282
diff changeset
585 +
23236
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
586 +@ ----------------------------------------------------------------
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
587 + .align
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
588 + .global MC_put_o_16_arm
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
589 +MC_put_o_16_arm:
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
590 + @@ void func(uint8_t * dest, const uint8_t * ref, int stride, int height)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
591 + pld [r1]
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
592 + stmfd sp!, {r4-r11, lr} @ R14 is also called LR
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
593 + and r4, r1, #3
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
594 + adr r5, MC_put_o_16_arm_align_jt
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
595 + add r5, r5, r4, lsl #2
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
596 + ldr pc, [r5]
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
597 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
598 +MC_put_o_16_arm_align0:
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
599 + ldmia r1, {r4-r7}
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
600 + add r1, r1, r2
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
601 + pld [r1]
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
602 + stmia r0, {r4-r7}
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
603 + subs r3, r3, #1
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
604 + add r0, r0, r2
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
605 + bne MC_put_o_16_arm_align0
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
606 + ldmfd sp!, {r4-r11, pc} @@ update PC with LR content.
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
607 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
608 +.macro PROC shift
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
609 + ldmia r1, {r4-r8}
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
610 + add r1, r1, r2
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
611 + mov r9, r4, lsr #(\shift)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
612 + pld [r1]
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
613 + mov r10, r5, lsr #(\shift)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
614 + orr r9, r9, r5, lsl #(32-\shift)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
615 + mov r11, r6, lsr #(\shift)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
616 + orr r10, r10, r6, lsl #(32-\shift)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
617 + mov r12, r7, lsr #(\shift)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
618 + orr r11, r11, r7, lsl #(32-\shift)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
619 + orr r12, r12, r8, lsl #(32-\shift)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
620 + stmia r0, {r9-r12}
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
621 + subs r3, r3, #1
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
622 + add r0, r0, r2
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
623 +.endm
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
624 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
625 +MC_put_o_16_arm_align1:
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
626 + and r1, r1, #0xFFFFFFFC
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
627 +1: PROC(8)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
628 + bne 1b
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
629 + ldmfd sp!, {r4-r11, pc} @@ update PC with LR content.
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
630 +MC_put_o_16_arm_align2:
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
631 + and r1, r1, #0xFFFFFFFC
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
632 +1: PROC(16)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
633 + bne 1b
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
634 + ldmfd sp!, {r4-r11, pc} @@ update PC with LR content.
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
635 +MC_put_o_16_arm_align3:
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
636 + and r1, r1, #0xFFFFFFFC
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
637 +1: PROC(24)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
638 + bne 1b
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
639 + ldmfd sp!, {r4-r11, pc} @@ update PC with LR content.
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
640 +MC_put_o_16_arm_align_jt:
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
641 + .word MC_put_o_16_arm_align0
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
642 + .word MC_put_o_16_arm_align1
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
643 + .word MC_put_o_16_arm_align2
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
644 + .word MC_put_o_16_arm_align3
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
645 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
646 +@ ----------------------------------------------------------------
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
647 + .align
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
648 + .global MC_put_o_8_arm
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
649 +MC_put_o_8_arm:
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
650 + @@ void func(uint8_t * dest, const uint8_t * ref, int stride, int height)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
651 + pld [r1]
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
652 + stmfd sp!, {r4-r10, lr} @ R14 is also called LR
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
653 + and r4, r1, #3
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
654 + adr r5, MC_put_o_8_arm_align_jt
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
655 + add r5, r5, r4, lsl #2
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
656 + ldr pc, [r5]
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
657 +MC_put_o_8_arm_align0:
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
658 + ldmia r1, {r4-r5}
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
659 + add r1, r1, r2
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
660 + pld [r1]
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
661 + stmia r0, {r4-r5}
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
662 + add r0, r0, r2
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
663 + subs r3, r3, #1
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
664 + bne MC_put_o_8_arm_align0
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
665 + ldmfd sp!, {r4-r10, pc} @@ update PC with LR content.
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
666 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
667 +.macro PROC8 shift
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
668 + ldmia r1, {r4-r6}
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
669 + add r1, r1, r2
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
670 + mov r9, r4, lsr #(\shift)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
671 + pld [r1]
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
672 + mov r10, r5, lsr #(\shift)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
673 + orr r9, r9, r5, lsl #(32-\shift)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
674 + orr r10, r10, r6, lsl #(32-\shift)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
675 + stmia r0, {r9-r10}
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
676 + subs r3, r3, #1
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
677 + add r0, r0, r2
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
678 +.endm
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
679 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
680 +MC_put_o_8_arm_align1:
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
681 + and r1, r1, #0xFFFFFFFC
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
682 +1: PROC8(8)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
683 + bne 1b
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
684 + ldmfd sp!, {r4-r10, pc} @@ update PC with LR content.
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
685 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
686 +MC_put_o_8_arm_align2:
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
687 + and r1, r1, #0xFFFFFFFC
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
688 +1: PROC8(16)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
689 + bne 1b
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
690 + ldmfd sp!, {r4-r10, pc} @@ update PC with LR content.
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
691 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
692 +MC_put_o_8_arm_align3:
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
693 + and r1, r1, #0xFFFFFFFC
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
694 +1: PROC8(24)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
695 + bne 1b
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
696 + ldmfd sp!, {r4-r10, pc} @@ update PC with LR content.
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
697 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
698 +MC_put_o_8_arm_align_jt:
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
699 + .word MC_put_o_8_arm_align0
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
700 + .word MC_put_o_8_arm_align1
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
701 + .word MC_put_o_8_arm_align2
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
702 + .word MC_put_o_8_arm_align3
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
703 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
704 +@ ----------------------------------------------------------------
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
705 +.macro AVG_PW rW1, rW2
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
706 + mov \rW2, \rW2, lsl #24
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
707 + orr \rW2, \rW2, \rW1, lsr #8
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
708 + eor r9, \rW1, \rW2
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
709 + and \rW2, \rW1, \rW2
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
710 + and r10, r9, r12
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
711 + add \rW2, \rW2, r10, lsr #1
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
712 + and r10, r9, r11
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
713 + add \rW2, \rW2, r10
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
714 +.endm
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
715 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
716 + .align
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
717 + .global MC_put_x_16_arm
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
718 +MC_put_x_16_arm:
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
719 + @@ void func(uint8_t * dest, const uint8_t * ref, int stride, int height)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
720 + pld [r1]
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
721 + stmfd sp!, {r4-r11,lr} @ R14 is also called LR
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
722 + and r4, r1, #3
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
723 + adr r5, MC_put_x_16_arm_align_jt
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
724 + ldr r11, [r5]
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
725 + mvn r12, r11
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
726 + add r5, r5, r4, lsl #2
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
727 + ldr pc, [r5, #4]
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
728 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
729 +.macro ADJ_ALIGN_QW shift, R0, R1, R2, R3, R4
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
730 + mov \R0, \R0, lsr #(\shift)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
731 + orr \R0, \R0, \R1, lsl #(32 - \shift)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
732 + mov \R1, \R1, lsr #(\shift)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
733 + orr \R1, \R1, \R2, lsl #(32 - \shift)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
734 + mov \R2, \R2, lsr #(\shift)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
735 + orr \R2, \R2, \R3, lsl #(32 - \shift)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
736 + mov \R3, \R3, lsr #(\shift)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
737 + orr \R3, \R3, \R4, lsl #(32 - \shift)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
738 + mov \R4, \R4, lsr #(\shift)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
739 +@ and \R4, \R4, #0xFF
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
740 +.endm
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
741 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
742 +MC_put_x_16_arm_align0:
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
743 + ldmia r1, {r4-r8}
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
744 + add r1, r1, r2
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
745 + pld [r1]
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
746 + AVG_PW r7, r8
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
747 + AVG_PW r6, r7
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
748 + AVG_PW r5, r6
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
749 + AVG_PW r4, r5
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
750 + stmia r0, {r5-r8}
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
751 + subs r3, r3, #1
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
752 + add r0, r0, r2
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
753 + bne MC_put_x_16_arm_align0
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
754 + ldmfd sp!, {r4-r11,pc} @@ update PC with LR content.
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
755 +MC_put_x_16_arm_align1:
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
756 + and r1, r1, #0xFFFFFFFC
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
757 +1: ldmia r1, {r4-r8}
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
758 + add r1, r1, r2
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
759 + pld [r1]
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
760 + ADJ_ALIGN_QW 8, r4, r5, r6, r7, r8
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
761 + AVG_PW r7, r8
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
762 + AVG_PW r6, r7
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
763 + AVG_PW r5, r6
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
764 + AVG_PW r4, r5
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
765 + stmia r0, {r5-r8}
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
766 + subs r3, r3, #1
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
767 + add r0, r0, r2
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
768 + bne 1b
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
769 + ldmfd sp!, {r4-r11,pc} @@ update PC with LR content.
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
770 +MC_put_x_16_arm_align2:
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
771 + and r1, r1, #0xFFFFFFFC
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
772 +1: ldmia r1, {r4-r8}
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
773 + add r1, r1, r2
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
774 + pld [r1]
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
775 + ADJ_ALIGN_QW 16, r4, r5, r6, r7, r8
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
776 + AVG_PW r7, r8
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
777 + AVG_PW r6, r7
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
778 + AVG_PW r5, r6
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
779 + AVG_PW r4, r5
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
780 + stmia r0, {r5-r8}
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
781 + subs r3, r3, #1
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
782 + add r0, r0, r2
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
783 + bne 1b
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
784 + ldmfd sp!, {r4-r11,pc} @@ update PC with LR content.
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
785 +MC_put_x_16_arm_align3:
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
786 + and r1, r1, #0xFFFFFFFC
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
787 +1: ldmia r1, {r4-r8}
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
788 + add r1, r1, r2
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
789 + pld [r1]
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
790 + ADJ_ALIGN_QW 24, r4, r5, r6, r7, r8
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
791 + AVG_PW r7, r8
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
792 + AVG_PW r6, r7
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
793 + AVG_PW r5, r6
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
794 + AVG_PW r4, r5
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
795 + stmia r0, {r5-r8}
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
796 + subs r3, r3, #1
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
797 + add r0, r0, r2
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
798 + bne 1b
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
799 + ldmfd sp!, {r4-r11,pc} @@ update PC with LR content.
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
800 +MC_put_x_16_arm_align_jt:
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
801 + .word 0x01010101
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
802 + .word MC_put_x_16_arm_align0
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
803 + .word MC_put_x_16_arm_align1
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
804 + .word MC_put_x_16_arm_align2
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
805 + .word MC_put_x_16_arm_align3
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
806 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
807 +@ ----------------------------------------------------------------
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
808 + .align
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
809 + .global MC_put_x_8_arm
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
810 +MC_put_x_8_arm:
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
811 + @@ void func(uint8_t * dest, const uint8_t * ref, int stride, int height)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
812 + pld [r1]
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
813 + stmfd sp!, {r4-r11,lr} @ R14 is also called LR
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
814 + and r4, r1, #3
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
815 + adr r5, MC_put_x_8_arm_align_jt
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
816 + ldr r11, [r5]
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
817 + mvn r12, r11
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
818 + add r5, r5, r4, lsl #2
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
819 + ldr pc, [r5, #4]
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
820 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
821 +.macro ADJ_ALIGN_DW shift, R0, R1, R2
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
822 + mov \R0, \R0, lsr #(\shift)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
823 + orr \R0, \R0, \R1, lsl #(32 - \shift)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
824 + mov \R1, \R1, lsr #(\shift)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
825 + orr \R1, \R1, \R2, lsl #(32 - \shift)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
826 + mov \R2, \R2, lsr #(\shift)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
827 +@ and \R4, \R4, #0xFF
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
828 +.endm
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
829 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
830 +MC_put_x_8_arm_align0:
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
831 + ldmia r1, {r4-r6}
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
832 + add r1, r1, r2
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
833 + pld [r1]
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
834 + AVG_PW r5, r6
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
835 + AVG_PW r4, r5
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
836 + stmia r0, {r5-r6}
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
837 + subs r3, r3, #1
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
838 + add r0, r0, r2
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
839 + bne MC_put_x_8_arm_align0
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
840 + ldmfd sp!, {r4-r11,pc} @@ update PC with LR content.
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
841 +MC_put_x_8_arm_align1:
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
842 + and r1, r1, #0xFFFFFFFC
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
843 +1: ldmia r1, {r4-r6}
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
844 + add r1, r1, r2
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
845 + pld [r1]
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
846 + ADJ_ALIGN_DW 8, r4, r5, r6
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
847 + AVG_PW r5, r6
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
848 + AVG_PW r4, r5
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
849 + stmia r0, {r5-r6}
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
850 + subs r3, r3, #1
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
851 + add r0, r0, r2
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
852 + bne 1b
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
853 + ldmfd sp!, {r4-r11,pc} @@ update PC with LR content.
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
854 +MC_put_x_8_arm_align2:
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
855 + and r1, r1, #0xFFFFFFFC
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
856 +1: ldmia r1, {r4-r6}
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
857 + add r1, r1, r2
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
858 + pld [r1]
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
859 + ADJ_ALIGN_DW 16, r4, r5, r6
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
860 + AVG_PW r5, r6
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
861 + AVG_PW r4, r5
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
862 + stmia r0, {r5-r6}
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
863 + subs r3, r3, #1
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
864 + add r0, r0, r2
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
865 + bne 1b
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
866 + ldmfd sp!, {r4-r11,pc} @@ update PC with LR content.
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
867 +MC_put_x_8_arm_align3:
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
868 + and r1, r1, #0xFFFFFFFC
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
869 +1: ldmia r1, {r4-r6}
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
870 + add r1, r1, r2
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
871 + pld [r1]
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
872 + ADJ_ALIGN_DW 24, r4, r5, r6
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
873 + AVG_PW r5, r6
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
874 + AVG_PW r4, r5
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
875 + stmia r0, {r5-r6}
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
876 + subs r3, r3, #1
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
877 + add r0, r0, r2
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
878 + bne 1b
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
879 + ldmfd sp!, {r4-r11,pc} @@ update PC with LR content.
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
880 +MC_put_x_8_arm_align_jt:
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
881 + .word 0x01010101
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
882 + .word MC_put_x_8_arm_align0
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
883 + .word MC_put_x_8_arm_align1
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
884 + .word MC_put_x_8_arm_align2
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
885 + .word MC_put_x_8_arm_align3
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
886 Index: libmpeg2/motion_comp_iwmmxt.c
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
887 ===================================================================
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
888 --- libmpeg2/motion_comp_iwmmxt.c (revision 0)
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
889 +++ libmpeg2/motion_comp_iwmmxt.c (revision 0)
26044
7a541b991b85 Merge two #ifdefs into one.
diego
parents: 26043
diff changeset
890 @@ -0,0 +1,59 @@
23236
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
891 +/*
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
892 + * motion_comp_iwmmxt.c
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
893 + * Copyright (C) 2004 AGAWA Koji <i (AT) atty (DOT) jp>
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
894 + *
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
895 + * This file is part of mpeg2dec, a free MPEG-2 video stream decoder.
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
896 + * See http://libmpeg2.sourceforge.net/ for updates.
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
897 + *
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
898 + * mpeg2dec is free software; you can redistribute it and/or modify
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
899 + * it under the terms of the GNU General Public License as published by
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
900 + * the Free Software Foundation; either version 2 of the License, or
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
901 + * (at your option) any later version.
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
902 + *
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
903 + * mpeg2dec is distributed in the hope that it will be useful,
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
904 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
905 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
906 + * GNU General Public License for more details.
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
907 + *
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
908 + * You should have received a copy of the GNU General Public License
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
909 + * along with this program; if not, write to the Free Software
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
910 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
911 + */
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
912 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
913 +#include "config.h"
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
914 +
26044
7a541b991b85 Merge two #ifdefs into one.
diego
parents: 26043
diff changeset
915 +#if defined(ARCH_ARM) && defined(HAVE_IWMMXT)
23236
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
916 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
917 +#include <inttypes.h>
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
918 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
919 +#include "mpeg2.h"
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
920 +#include "attributes.h"
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
921 +#include "mpeg2_internal.h"
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
922 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
923 +/* defined in libavcodec */
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
924 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
925 +extern void put_pixels16_iwmmxt(uint8_t * dest, const uint8_t * ref, const int stride, int height);
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
926 +extern void put_pixels16_x2_iwmmxt(uint8_t * dest, const uint8_t * ref, const int stride, int height);
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
927 +extern void put_pixels16_y2_iwmmxt(uint8_t * dest, const uint8_t * ref, const int stride, int height);
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
928 +extern void put_pixels16_xy2_iwmmxt(uint8_t * dest, const uint8_t * ref, const int stride, int height);
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
929 +extern void put_pixels8_iwmmxt(uint8_t * dest, const uint8_t * ref, const int stride, int height);
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
930 +extern void put_pixels8_x2_iwmmxt(uint8_t * dest, const uint8_t * ref, const int stride, int height);
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
931 +extern void put_pixels8_y2_iwmmxt(uint8_t * dest, const uint8_t * ref, const int stride, int height);
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
932 +extern void put_pixels8_xy2_iwmmxt(uint8_t * dest, const uint8_t * ref, const int stride, int height);
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
933 +extern void avg_pixels16_iwmmxt(uint8_t * dest, const uint8_t * ref, const int stride, int height);
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
934 +extern void avg_pixels16_x2_iwmmxt(uint8_t * dest, const uint8_t * ref, const int stride, int height);
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
935 +extern void avg_pixels16_y2_iwmmxt(uint8_t * dest, const uint8_t * ref, const int stride, int height);
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
936 +extern void avg_pixels16_xy2_iwmmxt(uint8_t * dest, const uint8_t * ref, const int stride, int height);
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
937 +extern void avg_pixels8_iwmmxt(uint8_t * dest, const uint8_t * ref, const int stride, int height);
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
938 +extern void avg_pixels8_x2_iwmmxt(uint8_t * dest, const uint8_t * ref, const int stride, int height);
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
939 +extern void avg_pixels8_y2_iwmmxt(uint8_t * dest, const uint8_t * ref, const int stride, int height);
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
940 +extern void avg_pixels8_xy2_iwmmxt(uint8_t * dest, const uint8_t * ref, const int stride, int height);
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
941 +
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
942 +mpeg2_mc_t mpeg2_mc_iwmmxt = {
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
943 + {put_pixels16_iwmmxt, put_pixels16_x2_iwmmxt, put_pixels16_y2_iwmmxt, put_pixels16_xy2_iwmmxt,
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
944 + put_pixels8_iwmmxt, put_pixels8_x2_iwmmxt, put_pixels8_y2_iwmmxt, put_pixels8_xy2_iwmmxt}, \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
945 + {avg_pixels16_iwmmxt, avg_pixels16_x2_iwmmxt, avg_pixels16_y2_iwmmxt, avg_pixels16_xy2_iwmmxt,
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
946 + avg_pixels8_iwmmxt, avg_pixels8_x2_iwmmxt, avg_pixels8_y2_iwmmxt, avg_pixels8_xy2_iwmmxt}, \
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
947 +};
f0ddd02aec27 iWMMXt-accelerated DCT and motion compensation for ARM processors
gpoirier
parents: 21923
diff changeset
948 +
26044
7a541b991b85 Merge two #ifdefs into one.
diego
parents: 26043
diff changeset
949 +#endif /* defined(ARCH_ARM) && defined(HAVE_IWMMXT) */