annotate mp3lib/decode_MMX.c @ 7492:5465cbd5c5ef

Modern versions of OpenSSH listen on localhost to forward the X11 connection (X11UseLocalhost defaults to yes). The following patch permits to consider as non local any DISPLAY environment which port is greater or equal to 10 else mplayer tries a local optimization on a distant X server which doesn't work. patch by Denis.Ducamp@groar.org
author arpi
date Mon, 23 Sep 2002 21:17:30 +0000
parents d4367189b2ff
children 1320f1b3229d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4142
nick
parents:
diff changeset
1 /*
nick
parents:
diff changeset
2 * this code comes under GPL
nick
parents:
diff changeset
3 * This code was taken from http://www.mpg123.org
nick
parents:
diff changeset
4 * See ChangeLog of mpg123-0.59s-pre.1 for detail
nick
parents:
diff changeset
5 * Applied to mplayer by Nick Kurshev <nickols_k@mail.ru>
nick
parents:
diff changeset
6 *
nick
parents:
diff changeset
7 * Local ChangeLog:
nick
parents:
diff changeset
8 * - Partial loops unrolling and removing MOVW insn from loops
nick
parents:
diff changeset
9 */
4246
3f677202418b mangling in mp3lib + stdcall undefined fix with cygwin
atmos4
parents: 4142
diff changeset
10 #include "../mangle.h"
4142
nick
parents:
diff changeset
11 #define real float /* ugly - but only way */
nick
parents:
diff changeset
12
nick
parents:
diff changeset
13 static unsigned long long __attribute__((aligned(8))) null_one = 0x0000ffff0000ffffULL;
nick
parents:
diff changeset
14 static unsigned long long __attribute__((aligned(8))) one_null = 0xffff0000ffff0000ULL;
nick
parents:
diff changeset
15 unsigned long __attribute__((aligned(8))) costab_mmx[] =
nick
parents:
diff changeset
16 {
nick
parents:
diff changeset
17 1056974725,
nick
parents:
diff changeset
18 1057056395,
nick
parents:
diff changeset
19 1057223771,
nick
parents:
diff changeset
20 1057485416,
nick
parents:
diff changeset
21 1057855544,
nick
parents:
diff changeset
22 1058356026,
nick
parents:
diff changeset
23 1059019886,
nick
parents:
diff changeset
24 1059897405,
nick
parents:
diff changeset
25 1061067246,
nick
parents:
diff changeset
26 1062657950,
nick
parents:
diff changeset
27 1064892987,
nick
parents:
diff changeset
28 1066774581,
nick
parents:
diff changeset
29 1069414683,
nick
parents:
diff changeset
30 1073984175,
nick
parents:
diff changeset
31 1079645762,
nick
parents:
diff changeset
32 1092815430,
nick
parents:
diff changeset
33 1057005197,
nick
parents:
diff changeset
34 1057342072,
nick
parents:
diff changeset
35 1058087743,
nick
parents:
diff changeset
36 1059427869,
nick
parents:
diff changeset
37 1061799040,
nick
parents:
diff changeset
38 1065862217,
nick
parents:
diff changeset
39 1071413542,
nick
parents:
diff changeset
40 1084439708,
nick
parents:
diff changeset
41 1057128951,
nick
parents:
diff changeset
42 1058664893,
nick
parents:
diff changeset
43 1063675095,
nick
parents:
diff changeset
44 1076102863,
nick
parents:
diff changeset
45 1057655764,
nick
parents:
diff changeset
46 1067924853,
nick
parents:
diff changeset
47 1060439283,
nick
parents:
diff changeset
48 };
nick
parents:
diff changeset
49
4322
2935211e4f9b Fixing compilation on non-MMX but x86 systems
nick
parents: 4246
diff changeset
50 static int temp;
4142
nick
parents:
diff changeset
51 void synth_1to1_MMX_s(real *bandPtr, int channel, short *samples,
nick
parents:
diff changeset
52 short *buffs, int *bo)
nick
parents:
diff changeset
53 {
nick
parents:
diff changeset
54 __asm __volatile(
nick
parents:
diff changeset
55 "movl %1,%%ecx\n\t"
nick
parents:
diff changeset
56 "movl %2,%%edi\n\t"
nick
parents:
diff changeset
57 "movl $15,%%ebx\n\t"
nick
parents:
diff changeset
58 "movl %4,%%edx\n\t"
nick
parents:
diff changeset
59 "leal (%%edi,%%ecx,2),%%edi\n\t"
nick
parents:
diff changeset
60 "decl %%ecx\n\t"
nick
parents:
diff changeset
61 "movl %3,%%esi\n\t"
nick
parents:
diff changeset
62 "movl (%%edx),%%eax\n\t"
4608
b9c19fe73850 Fix according to strange bugreport
nick
parents: 4322
diff changeset
63 "jecxz .L01\n\t"
4142
nick
parents:
diff changeset
64 "decl %%eax\n\t"
nick
parents:
diff changeset
65 "andl %%ebx,%%eax\n\t"
nick
parents:
diff changeset
66 "leal 1088(%%esi),%%esi\n\t"
nick
parents:
diff changeset
67 "movl %%eax,(%%edx)\n\t"
4608
b9c19fe73850 Fix according to strange bugreport
nick
parents: 4322
diff changeset
68 ".L01:\n\t"
4142
nick
parents:
diff changeset
69 "leal (%%esi,%%eax,2),%%edx\n\t"
4322
2935211e4f9b Fixing compilation on non-MMX but x86 systems
nick
parents: 4246
diff changeset
70 "movl %%eax,%5\n\t"
4142
nick
parents:
diff changeset
71 "incl %%eax\n\t"
nick
parents:
diff changeset
72 "pushl %0\n\t"
nick
parents:
diff changeset
73 "andl %%ebx,%%eax\n\t"
nick
parents:
diff changeset
74 "leal 544(%%esi,%%eax,2),%%ecx\n\t"
nick
parents:
diff changeset
75 "incl %%ebx\n\t"
nick
parents:
diff changeset
76 "testl $1, %%eax\n\t"
4608
b9c19fe73850 Fix according to strange bugreport
nick
parents: 4322
diff changeset
77 "jnz .L02\n\t"
4142
nick
parents:
diff changeset
78 "xchgl %%edx,%%ecx\n\t"
4322
2935211e4f9b Fixing compilation on non-MMX but x86 systems
nick
parents: 4246
diff changeset
79 "incl %5\n\t"
4142
nick
parents:
diff changeset
80 "leal 544(%%esi),%%esi\n\t"
4608
b9c19fe73850 Fix according to strange bugreport
nick
parents: 4322
diff changeset
81 ".L02:\n\t"
4142
nick
parents:
diff changeset
82 "emms\n\t"
nick
parents:
diff changeset
83 "pushl %%edx\n\t"
nick
parents:
diff changeset
84 "pushl %%ecx\n\t"
4246
3f677202418b mangling in mp3lib + stdcall undefined fix with cygwin
atmos4
parents: 4142
diff changeset
85 "call *"MANGLE(dct64_MMX_func)"\n\t"
4142
nick
parents:
diff changeset
86 "leal 1(%%ebx), %%ecx\n\t"
4322
2935211e4f9b Fixing compilation on non-MMX but x86 systems
nick
parents: 4246
diff changeset
87 "subl %5,%%ebx\n\t"
4142
nick
parents:
diff changeset
88 "pushl %%ecx\n\t"
4246
3f677202418b mangling in mp3lib + stdcall undefined fix with cygwin
atmos4
parents: 4142
diff changeset
89 "leal "MANGLE(decwins)"(%%ebx,%%ebx,1), %%edx\n\t"
4142
nick
parents:
diff changeset
90 "shrl $1, %%ecx\n\t"
5290
d4367189b2ff use .balign instead of .align
arpi
parents: 4608
diff changeset
91 ".balign 16\n\t"
4608
b9c19fe73850 Fix according to strange bugreport
nick
parents: 4322
diff changeset
92 ".L03:\n\t"
4142
nick
parents:
diff changeset
93 "movq (%%edx),%%mm0\n\t"
nick
parents:
diff changeset
94 "movq 64(%%edx),%%mm4\n\t"
nick
parents:
diff changeset
95 "pmaddwd (%%esi),%%mm0\n\t"
nick
parents:
diff changeset
96 "pmaddwd 32(%%esi),%%mm4\n\t"
nick
parents:
diff changeset
97 "movq 8(%%edx),%%mm1\n\t"
nick
parents:
diff changeset
98 "movq 72(%%edx),%%mm5\n\t"
nick
parents:
diff changeset
99 "pmaddwd 8(%%esi),%%mm1\n\t"
nick
parents:
diff changeset
100 "pmaddwd 40(%%esi),%%mm5\n\t"
nick
parents:
diff changeset
101 "movq 16(%%edx),%%mm2\n\t"
nick
parents:
diff changeset
102 "movq 80(%%edx),%%mm6\n\t"
nick
parents:
diff changeset
103 "pmaddwd 16(%%esi),%%mm2\n\t"
nick
parents:
diff changeset
104 "pmaddwd 48(%%esi),%%mm6\n\t"
nick
parents:
diff changeset
105 "movq 24(%%edx),%%mm3\n\t"
nick
parents:
diff changeset
106 "movq 88(%%edx),%%mm7\n\t"
nick
parents:
diff changeset
107 "pmaddwd 24(%%esi),%%mm3\n\t"
nick
parents:
diff changeset
108 "pmaddwd 56(%%esi),%%mm7\n\t"
nick
parents:
diff changeset
109 "paddd %%mm1,%%mm0\n\t"
nick
parents:
diff changeset
110 "paddd %%mm5,%%mm4\n\t"
nick
parents:
diff changeset
111 "paddd %%mm2,%%mm0\n\t"
nick
parents:
diff changeset
112 "paddd %%mm6,%%mm4\n\t"
nick
parents:
diff changeset
113 "paddd %%mm3,%%mm0\n\t"
nick
parents:
diff changeset
114 "paddd %%mm7,%%mm4\n\t"
nick
parents:
diff changeset
115 "movq %%mm0,%%mm1\n\t"
nick
parents:
diff changeset
116 "movq %%mm4,%%mm5\n\t"
nick
parents:
diff changeset
117 "psrlq $32,%%mm1\n\t"
nick
parents:
diff changeset
118 "psrlq $32,%%mm5\n\t"
nick
parents:
diff changeset
119 "paddd %%mm1,%%mm0\n\t"
nick
parents:
diff changeset
120 "paddd %%mm5,%%mm4\n\t"
nick
parents:
diff changeset
121 "psrad $13,%%mm0\n\t"
nick
parents:
diff changeset
122 "psrad $13,%%mm4\n\t"
nick
parents:
diff changeset
123 "packssdw %%mm0,%%mm0\n\t"
nick
parents:
diff changeset
124 "packssdw %%mm4,%%mm4\n\t"
nick
parents:
diff changeset
125
nick
parents:
diff changeset
126 "movq (%%edi), %%mm1\n\t"
nick
parents:
diff changeset
127 "punpckldq %%mm4, %%mm0\n\t"
4246
3f677202418b mangling in mp3lib + stdcall undefined fix with cygwin
atmos4
parents: 4142
diff changeset
128 "pand "MANGLE(one_null)", %%mm1\n\t"
3f677202418b mangling in mp3lib + stdcall undefined fix with cygwin
atmos4
parents: 4142
diff changeset
129 "pand "MANGLE(null_one)", %%mm0\n\t"
4142
nick
parents:
diff changeset
130 "por %%mm0, %%mm1\n\t"
nick
parents:
diff changeset
131 "movq %%mm1,(%%edi)\n\t"
nick
parents:
diff changeset
132
nick
parents:
diff changeset
133 "leal 64(%%esi),%%esi\n\t"
nick
parents:
diff changeset
134 "leal 128(%%edx),%%edx\n\t"
nick
parents:
diff changeset
135 "leal 8(%%edi),%%edi\n\t"
nick
parents:
diff changeset
136
nick
parents:
diff changeset
137 "decl %%ecx\n\t"
4608
b9c19fe73850 Fix according to strange bugreport
nick
parents: 4322
diff changeset
138 "jnz .L03\n\t"
4142
nick
parents:
diff changeset
139
nick
parents:
diff changeset
140 "popl %%ecx\n\t"
nick
parents:
diff changeset
141 "andl $1, %%ecx\n\t"
nick
parents:
diff changeset
142 "jecxz .next_loop\n\t"
nick
parents:
diff changeset
143
nick
parents:
diff changeset
144 "movq (%%edx),%%mm0\n\t"
nick
parents:
diff changeset
145 "pmaddwd (%%esi),%%mm0\n\t"
nick
parents:
diff changeset
146 "movq 8(%%edx),%%mm1\n\t"
nick
parents:
diff changeset
147 "pmaddwd 8(%%esi),%%mm1\n\t"
nick
parents:
diff changeset
148 "movq 16(%%edx),%%mm2\n\t"
nick
parents:
diff changeset
149 "pmaddwd 16(%%esi),%%mm2\n\t"
nick
parents:
diff changeset
150 "movq 24(%%edx),%%mm3\n\t"
nick
parents:
diff changeset
151 "pmaddwd 24(%%esi),%%mm3\n\t"
nick
parents:
diff changeset
152 "paddd %%mm1,%%mm0\n\t"
nick
parents:
diff changeset
153 "paddd %%mm2,%%mm0\n\t"
nick
parents:
diff changeset
154 "paddd %%mm3,%%mm0\n\t"
nick
parents:
diff changeset
155 "movq %%mm0,%%mm1\n\t"
nick
parents:
diff changeset
156 "psrlq $32,%%mm1\n\t"
nick
parents:
diff changeset
157 "paddd %%mm1,%%mm0\n\t"
nick
parents:
diff changeset
158 "psrad $13,%%mm0\n\t"
nick
parents:
diff changeset
159 "packssdw %%mm0,%%mm0\n\t"
nick
parents:
diff changeset
160 "movd %%mm0,%%eax\n\t"
nick
parents:
diff changeset
161 "movw %%ax, (%%edi)\n\t"
nick
parents:
diff changeset
162 "leal 32(%%esi),%%esi\n\t"
nick
parents:
diff changeset
163 "leal 64(%%edx),%%edx\n\t"
nick
parents:
diff changeset
164 "leal 4(%%edi),%%edi\n\t"
nick
parents:
diff changeset
165
nick
parents:
diff changeset
166 ".next_loop:\n\t"
nick
parents:
diff changeset
167 "subl $64,%%esi\n\t"
nick
parents:
diff changeset
168 "movl $7,%%ecx\n\t"
5290
d4367189b2ff use .balign instead of .align
arpi
parents: 4608
diff changeset
169 ".balign 16\n\t"
4608
b9c19fe73850 Fix according to strange bugreport
nick
parents: 4322
diff changeset
170 ".L04:\n\t"
4142
nick
parents:
diff changeset
171 "movq (%%edx),%%mm0\n\t"
nick
parents:
diff changeset
172 "movq 64(%%edx),%%mm4\n\t"
nick
parents:
diff changeset
173 "pmaddwd (%%esi),%%mm0\n\t"
nick
parents:
diff changeset
174 "pmaddwd -32(%%esi),%%mm4\n\t"
nick
parents:
diff changeset
175 "movq 8(%%edx),%%mm1\n\t"
nick
parents:
diff changeset
176 "movq 72(%%edx),%%mm5\n\t"
nick
parents:
diff changeset
177 "pmaddwd 8(%%esi),%%mm1\n\t"
nick
parents:
diff changeset
178 "pmaddwd -24(%%esi),%%mm5\n\t"
nick
parents:
diff changeset
179 "movq 16(%%edx),%%mm2\n\t"
nick
parents:
diff changeset
180 "movq 80(%%edx),%%mm6\n\t"
nick
parents:
diff changeset
181 "pmaddwd 16(%%esi),%%mm2\n\t"
nick
parents:
diff changeset
182 "pmaddwd -16(%%esi),%%mm6\n\t"
nick
parents:
diff changeset
183 "movq 24(%%edx),%%mm3\n\t"
nick
parents:
diff changeset
184 "movq 88(%%edx),%%mm7\n\t"
nick
parents:
diff changeset
185 "pmaddwd 24(%%esi),%%mm3\n\t"
nick
parents:
diff changeset
186 "pmaddwd -8(%%esi),%%mm7\n\t"
nick
parents:
diff changeset
187 "paddd %%mm1,%%mm0\n\t"
nick
parents:
diff changeset
188 "paddd %%mm5,%%mm4\n\t"
nick
parents:
diff changeset
189 "paddd %%mm2,%%mm0\n\t"
nick
parents:
diff changeset
190 "paddd %%mm6,%%mm4\n\t"
nick
parents:
diff changeset
191 "paddd %%mm3,%%mm0\n\t"
nick
parents:
diff changeset
192 "paddd %%mm7,%%mm4\n\t"
nick
parents:
diff changeset
193 "movq %%mm0,%%mm1\n\t"
nick
parents:
diff changeset
194 "movq %%mm4,%%mm5\n\t"
nick
parents:
diff changeset
195 "psrlq $32,%%mm1\n\t"
nick
parents:
diff changeset
196 "psrlq $32,%%mm5\n\t"
nick
parents:
diff changeset
197 "paddd %%mm0,%%mm1\n\t"
nick
parents:
diff changeset
198 "paddd %%mm4,%%mm5\n\t"
nick
parents:
diff changeset
199 "psrad $13,%%mm1\n\t"
nick
parents:
diff changeset
200 "psrad $13,%%mm5\n\t"
nick
parents:
diff changeset
201 "packssdw %%mm1,%%mm1\n\t"
nick
parents:
diff changeset
202 "packssdw %%mm5,%%mm5\n\t"
nick
parents:
diff changeset
203 "psubd %%mm0,%%mm0\n\t"
nick
parents:
diff changeset
204 "psubd %%mm4,%%mm4\n\t"
nick
parents:
diff changeset
205 "psubsw %%mm1,%%mm0\n\t"
nick
parents:
diff changeset
206 "psubsw %%mm5,%%mm4\n\t"
nick
parents:
diff changeset
207
nick
parents:
diff changeset
208 "movq (%%edi), %%mm1\n\t"
nick
parents:
diff changeset
209 "punpckldq %%mm4, %%mm0\n\t"
4246
3f677202418b mangling in mp3lib + stdcall undefined fix with cygwin
atmos4
parents: 4142
diff changeset
210 "pand "MANGLE(one_null)", %%mm1\n\t"
3f677202418b mangling in mp3lib + stdcall undefined fix with cygwin
atmos4
parents: 4142
diff changeset
211 "pand "MANGLE(null_one)", %%mm0\n\t"
4142
nick
parents:
diff changeset
212 "por %%mm0, %%mm1\n\t"
nick
parents:
diff changeset
213 "movq %%mm1,(%%edi)\n\t"
nick
parents:
diff changeset
214
nick
parents:
diff changeset
215 "subl $64,%%esi\n\t"
nick
parents:
diff changeset
216 "addl $128,%%edx\n\t"
nick
parents:
diff changeset
217 "leal 8(%%edi),%%edi\n\t"
nick
parents:
diff changeset
218 "decl %%ecx\n\t"
4608
b9c19fe73850 Fix according to strange bugreport
nick
parents: 4322
diff changeset
219 "jnz .L04\n\t"
4142
nick
parents:
diff changeset
220
nick
parents:
diff changeset
221 "movq (%%edx),%%mm0\n\t"
nick
parents:
diff changeset
222 "pmaddwd (%%esi),%%mm0\n\t"
nick
parents:
diff changeset
223 "movq 8(%%edx),%%mm1\n\t"
nick
parents:
diff changeset
224 "pmaddwd 8(%%esi),%%mm1\n\t"
nick
parents:
diff changeset
225 "movq 16(%%edx),%%mm2\n\t"
nick
parents:
diff changeset
226 "pmaddwd 16(%%esi),%%mm2\n\t"
nick
parents:
diff changeset
227 "movq 24(%%edx),%%mm3\n\t"
nick
parents:
diff changeset
228 "pmaddwd 24(%%esi),%%mm3\n\t"
nick
parents:
diff changeset
229 "paddd %%mm1,%%mm0\n\t"
nick
parents:
diff changeset
230 "paddd %%mm2,%%mm0\n\t"
nick
parents:
diff changeset
231 "paddd %%mm3,%%mm0\n\t"
nick
parents:
diff changeset
232 "movq %%mm0,%%mm1\n\t"
nick
parents:
diff changeset
233 "psrlq $32,%%mm1\n\t"
nick
parents:
diff changeset
234 "paddd %%mm0,%%mm1\n\t"
nick
parents:
diff changeset
235 "psrad $13,%%mm1\n\t"
nick
parents:
diff changeset
236 "packssdw %%mm1,%%mm1\n\t"
nick
parents:
diff changeset
237 "psubd %%mm0,%%mm0\n\t"
nick
parents:
diff changeset
238 "psubsw %%mm1,%%mm0\n\t"
nick
parents:
diff changeset
239 "movd %%mm0,%%eax\n\t"
nick
parents:
diff changeset
240 "movw %%ax,(%%edi)\n\t"
nick
parents:
diff changeset
241 "emms\n\t"
nick
parents:
diff changeset
242 :
4322
2935211e4f9b Fixing compilation on non-MMX but x86 systems
nick
parents: 4246
diff changeset
243 :"m"(bandPtr),"m"(channel),"m"(samples),"m"(buffs),"m"(bo), "m"(temp)
2935211e4f9b Fixing compilation on non-MMX but x86 systems
nick
parents: 4246
diff changeset
244 :"memory","%edi","%esi","%ebx");
4142
nick
parents:
diff changeset
245 }