~ubuntu-branches/ubuntu/lucid/mpg123/lucid

« back to all changes in this revision

Viewing changes to src/dct36_3dnowext.S

Tags: upstream-0.66
ImportĀ upstreamĀ versionĀ 0.66

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
        dct36_3dnowext: extended 3DNow optimized DCT36
 
3
 
 
4
        copyright ?-2007 by the mpg123 project - free software under the terms of the LGPL 2.1
 
5
        see COPYING and AUTHORS files in distribution or http://mpg123.org
 
6
 
 
7
        Transformed back into standalone asm, with help of
 
8
        gcc -S -DHAVE_CONFIG_H -I.  -march=k6-3 -O3 -Wall -pedantic -fno-strict-aliasing  -DREAL_IS_FLOAT -c -o dct36_3dnowext.{S,c}
 
9
 
 
10
        MPlayer comment follows.
 
11
*/
 
12
 
 
13
/*
 
14
 * dct36_3dnow.c - 3DNow! optimized dct36()
 
15
 *
 
16
 * This code based 'dct36_3dnow.s' by Syuuhei Kashiyama
 
17
 * <squash@mb.kcom.ne.jp>, only two types of changes have been made:
 
18
 *
 
19
 * - removed PREFETCH instruction for speedup
 
20
 * - changed function name for support 3DNow! automatic detection
 
21
 *
 
22
 * You can find Kashiyama's original 3dnow! support patch
 
23
 * (for mpg123-0.59o) at
 
24
 * http://user.ecc.u-tokyo.ac.jp/~g810370/linux-simd/ (Japanese).
 
25
 *
 
26
 * by KIMURA Takuhiro <kim@hannah.ipc.miyakyo-u.ac.jp> - until 31.Mar.1999
 
27
 *                    <kim@comtec.co.jp>               - after  1.Apr.1999
 
28
 *
 
29
 * Modified for use with MPlayer, for details see the changelog at
 
30
 * http://svn.mplayerhq.hu/mplayer/trunk/
 
31
 * $Id: dct36_3dnow.c 18786 2006-06-22 13:34:00Z diego $
 
32
 *
 
33
 * Original disclaimer:
 
34
 *  The author of this program disclaim whole expressed or implied
 
35
 *  warranties with regard to this program, and in no event shall the
 
36
 *  author of this program liable to whatever resulted from the use of
 
37
 *  this program. Use it at your own risk.
 
38
 *
 
39
 * 2003/06/21: Moved to GCC inline assembly - Alex Beregszaszi
 
40
 */
 
41
 
 
42
#include "mangle.h"
 
43
 
 
44
        .text
 
45
        ALIGN32,,31
 
46
.globl ASM_NAME(dct36_3dnowext)
 
47
        /* .type        ASM_NAME(dct36_3dnowext), @function */
 
48
ASM_NAME(dct36_3dnowext):
 
49
        pushl   %ebp
 
50
        movl    %esp, %ebp
 
51
        pushl   %esi
 
52
        pushl   %ebx
 
53
        movl    8(%ebp), %eax
 
54
        movl    12(%ebp), %esi
 
55
        movl    16(%ebp), %ecx
 
56
        movl    20(%ebp), %edx
 
57
        movl    24(%ebp), %ebx
 
58
#APP
 
59
        movq (%eax),%mm0
 
60
        movq 4(%eax),%mm1
 
61
        pfadd %mm1,%mm0
 
62
        movq %mm0,4(%eax)
 
63
        psrlq $32,%mm1
 
64
        movq 12(%eax),%mm2
 
65
        punpckldq %mm2,%mm1
 
66
        pfadd %mm2,%mm1
 
67
        movq %mm1,12(%eax)
 
68
        psrlq $32,%mm2
 
69
        movq 20(%eax),%mm3
 
70
        punpckldq %mm3,%mm2
 
71
        pfadd %mm3,%mm2
 
72
        movq %mm2,20(%eax)
 
73
        psrlq $32,%mm3
 
74
        movq 28(%eax),%mm4
 
75
        punpckldq %mm4,%mm3
 
76
        pfadd %mm4,%mm3
 
77
        movq %mm3,28(%eax)
 
78
        psrlq $32,%mm4
 
79
        movq 36(%eax),%mm5
 
80
        punpckldq %mm5,%mm4
 
81
        pfadd %mm5,%mm4
 
82
        movq %mm4,36(%eax)
 
83
        psrlq $32,%mm5
 
84
        movq 44(%eax),%mm6
 
85
        punpckldq %mm6,%mm5
 
86
        pfadd %mm6,%mm5
 
87
        movq %mm5,44(%eax)
 
88
        psrlq $32,%mm6
 
89
        movq 52(%eax),%mm7
 
90
        punpckldq %mm7,%mm6
 
91
        pfadd %mm7,%mm6
 
92
        movq %mm6,52(%eax)
 
93
        psrlq $32,%mm7
 
94
        movq 60(%eax),%mm0
 
95
        punpckldq %mm0,%mm7
 
96
        pfadd %mm0,%mm7
 
97
        movq %mm7,60(%eax)
 
98
        psrlq $32,%mm0
 
99
        movd 68(%eax),%mm1
 
100
        pfadd %mm1,%mm0
 
101
        movd %mm0,68(%eax)
 
102
        movd 4(%eax),%mm0
 
103
        movd 12(%eax),%mm1
 
104
        punpckldq %mm1,%mm0
 
105
        punpckldq 20(%eax),%mm1
 
106
        pfadd %mm1,%mm0
 
107
        movd %mm0,12(%eax)
 
108
        psrlq $32,%mm0
 
109
        movd %mm0,20(%eax)
 
110
        psrlq $32,%mm1
 
111
        movd 28(%eax),%mm2
 
112
        punpckldq %mm2,%mm1
 
113
        punpckldq 36(%eax),%mm2
 
114
        pfadd %mm2,%mm1
 
115
        movd %mm1,28(%eax)
 
116
        psrlq $32,%mm1
 
117
        movd %mm1,36(%eax)
 
118
        psrlq $32,%mm2
 
119
        movd 44(%eax),%mm3
 
120
        punpckldq %mm3,%mm2
 
121
        punpckldq 52(%eax),%mm3
 
122
        pfadd %mm3,%mm2
 
123
        movd %mm2,44(%eax)
 
124
        psrlq $32,%mm2
 
125
        movd %mm2,52(%eax)
 
126
        psrlq $32,%mm3
 
127
        movd 60(%eax),%mm4
 
128
        punpckldq %mm4,%mm3
 
129
        punpckldq 68(%eax),%mm4
 
130
        pfadd %mm4,%mm3
 
131
        movd %mm3,60(%eax)
 
132
        psrlq $32,%mm3
 
133
        movd %mm3,68(%eax)
 
134
        movq 24(%eax),%mm0
 
135
        movq 48(%eax),%mm1
 
136
        movd ASM_NAME(COS9)+12,%mm2
 
137
        punpckldq %mm2,%mm2
 
138
        movd ASM_NAME(COS9)+24,%mm3
 
139
        punpckldq %mm3,%mm3
 
140
        pfmul %mm2,%mm0
 
141
        pfmul %mm3,%mm1
 
142
        pushl %eax
 
143
        movl $1,%eax
 
144
        movd %eax,%mm7
 
145
        pi2fd %mm7,%mm7
 
146
        popl %eax
 
147
        movq 8(%eax),%mm2
 
148
        movd ASM_NAME(COS9)+4,%mm3
 
149
        punpckldq %mm3,%mm3
 
150
        pfmul %mm3,%mm2
 
151
        pfadd %mm0,%mm2
 
152
        movq 40(%eax),%mm3
 
153
        movd ASM_NAME(COS9)+20,%mm4
 
154
        punpckldq %mm4,%mm4
 
155
        pfmul %mm4,%mm3
 
156
        pfadd %mm3,%mm2
 
157
        movq 56(%eax),%mm3
 
158
        movd ASM_NAME(COS9)+28,%mm4
 
159
        punpckldq %mm4,%mm4
 
160
        pfmul %mm4,%mm3
 
161
        pfadd %mm3,%mm2
 
162
        movq (%eax),%mm3
 
163
        movq 16(%eax),%mm4
 
164
        movd ASM_NAME(COS9)+8,%mm5
 
165
        punpckldq %mm5,%mm5
 
166
        pfmul %mm5,%mm4
 
167
        pfadd %mm4,%mm3
 
168
        movq 32(%eax),%mm4
 
169
        movd ASM_NAME(COS9)+16,%mm5
 
170
        punpckldq %mm5,%mm5
 
171
        pfmul %mm5,%mm4
 
172
        pfadd %mm4,%mm3
 
173
        pfadd %mm1,%mm3
 
174
        movq 64(%eax),%mm4
 
175
        movd ASM_NAME(COS9)+32,%mm5
 
176
        punpckldq %mm5,%mm5
 
177
        pfmul %mm5,%mm4
 
178
        pfadd %mm4,%mm3
 
179
        movq %mm2,%mm4
 
180
        pfadd %mm3,%mm4
 
181
        movq %mm7,%mm5
 
182
        punpckldq ASM_NAME(tfcos36)+0,%mm5
 
183
        pfmul %mm5,%mm4
 
184
        movq %mm4,%mm5
 
185
        pfacc %mm5,%mm5
 
186
        movd 108(%edx),%mm6
 
187
        punpckldq 104(%edx),%mm6
 
188
        pfmul %mm6,%mm5
 
189
        pswapd %mm5,%mm5
 
190
        movq %mm5,32(%ecx)
 
191
        movq %mm4,%mm6
 
192
        punpckldq %mm6,%mm5
 
193
        pfsub %mm6,%mm5
 
194
        punpckhdq %mm5,%mm5
 
195
        movd 32(%edx),%mm6
 
196
        punpckldq 36(%edx),%mm6
 
197
        pfmul %mm6,%mm5
 
198
        movd 32(%esi),%mm6
 
199
        punpckldq 36(%esi),%mm6
 
200
        pfadd %mm6,%mm5
 
201
        movd %mm5,1024(%ebx)
 
202
        psrlq $32,%mm5
 
203
        movd %mm5,1152(%ebx)
 
204
        movq %mm3,%mm4
 
205
        pfsub %mm2,%mm4
 
206
        movq %mm7,%mm5
 
207
        punpckldq ASM_NAME(tfcos36)+32,%mm5
 
208
        pfmul %mm5,%mm4
 
209
        movq %mm4,%mm5
 
210
        pfacc %mm5,%mm5
 
211
        movd 140(%edx),%mm6
 
212
        punpckldq 72(%edx),%mm6
 
213
        pfmul %mm6,%mm5
 
214
        movd %mm5,68(%ecx)
 
215
        psrlq $32,%mm5
 
216
        movd %mm5,0(%ecx)
 
217
        movq %mm4,%mm6
 
218
        punpckldq %mm6,%mm5
 
219
        pfsub %mm6,%mm5
 
220
        punpckhdq %mm5,%mm5
 
221
        movd 0(%edx),%mm6
 
222
        punpckldq 68(%edx),%mm6
 
223
        pfmul %mm6,%mm5
 
224
        movd 0(%esi),%mm6
 
225
        punpckldq 68(%esi),%mm6
 
226
        pfadd %mm6,%mm5
 
227
        movd %mm5,0(%ebx)
 
228
        psrlq $32,%mm5
 
229
        movd %mm5,2176(%ebx)
 
230
        movq 8(%eax),%mm2
 
231
        movq 40(%eax),%mm3
 
232
        pfsub %mm3,%mm2
 
233
        movq 56(%eax),%mm3
 
234
        pfsub %mm3,%mm2
 
235
        movd ASM_NAME(COS9)+12,%mm3
 
236
        punpckldq %mm3,%mm3
 
237
        pfmul %mm3,%mm2
 
238
        movq 16(%eax),%mm3
 
239
        movq 32(%eax),%mm4
 
240
        pfsub %mm4,%mm3
 
241
        movq 64(%eax),%mm4
 
242
        pfsub %mm4,%mm3
 
243
        movd ASM_NAME(COS9)+24,%mm4
 
244
        punpckldq %mm4,%mm4
 
245
        pfmul %mm4,%mm3
 
246
        movq 48(%eax),%mm4
 
247
        pfsub %mm4,%mm3
 
248
        movq (%eax),%mm4
 
249
        pfadd %mm4,%mm3
 
250
        movq %mm2,%mm4
 
251
        pfadd %mm3,%mm4
 
252
        movq %mm7,%mm5
 
253
        punpckldq ASM_NAME(tfcos36)+4,%mm5
 
254
        pfmul %mm5,%mm4
 
255
        movq %mm4,%mm5
 
256
        pfacc %mm5,%mm5
 
257
        movd 112(%edx),%mm6
 
258
        punpckldq 100(%edx),%mm6
 
259
        pfmul %mm6,%mm5
 
260
        movd %mm5,40(%ecx)
 
261
        psrlq $32,%mm5
 
262
        movd %mm5,28(%ecx)
 
263
        movq %mm4,%mm6
 
264
        punpckldq %mm6,%mm5
 
265
        pfsub %mm6,%mm5
 
266
        punpckhdq %mm5,%mm5
 
267
        movd 28(%edx),%mm6
 
268
        punpckldq 40(%edx),%mm6
 
269
        pfmul %mm6,%mm5
 
270
        movd 28(%esi),%mm6
 
271
        punpckldq 40(%esi),%mm6
 
272
        pfadd %mm6,%mm5
 
273
        movd %mm5,896(%ebx)
 
274
        psrlq $32,%mm5
 
275
        movd %mm5,1280(%ebx)
 
276
        movq %mm3,%mm4
 
277
        pfsub %mm2,%mm4
 
278
        movq %mm7,%mm5
 
279
        punpckldq ASM_NAME(tfcos36)+28,%mm5
 
280
        pfmul %mm5,%mm4
 
281
        movq %mm4,%mm5
 
282
        pfacc %mm5,%mm5
 
283
        movd 136(%edx),%mm6
 
284
        punpckldq 76(%edx),%mm6
 
285
        pfmul %mm6,%mm5
 
286
        movd %mm5,64(%ecx)
 
287
        psrlq $32,%mm5
 
288
        movd %mm5,4(%ecx)
 
289
        movq %mm4,%mm6
 
290
        punpckldq %mm6,%mm5
 
291
        pfsub %mm6,%mm5
 
292
        punpckhdq %mm5,%mm5
 
293
        movd 4(%edx),%mm6
 
294
        punpckldq 64(%edx),%mm6
 
295
        pfmul %mm6,%mm5
 
296
        movd 4(%esi),%mm6
 
297
        punpckldq 64(%esi),%mm6
 
298
        pfadd %mm6,%mm5
 
299
        movd %mm5,128(%ebx)
 
300
        psrlq $32,%mm5
 
301
        movd %mm5,2048(%ebx)
 
302
        movq 8(%eax),%mm2
 
303
        movd ASM_NAME(COS9)+20,%mm3
 
304
        punpckldq %mm3,%mm3
 
305
        pfmul %mm3,%mm2
 
306
        pfsub %mm0,%mm2
 
307
        movq 40(%eax),%mm3
 
308
        movd ASM_NAME(COS9)+28,%mm4
 
309
        punpckldq %mm4,%mm4
 
310
        pfmul %mm4,%mm3
 
311
        pfsub %mm3,%mm2
 
312
        movq 56(%eax),%mm3
 
313
        movd ASM_NAME(COS9)+4,%mm4
 
314
        punpckldq %mm4,%mm4
 
315
        pfmul %mm4,%mm3
 
316
        pfadd %mm3,%mm2
 
317
        movq (%eax),%mm3
 
318
        movq 16(%eax),%mm4
 
319
        movd ASM_NAME(COS9)+32,%mm5
 
320
        punpckldq %mm5,%mm5
 
321
        pfmul %mm5,%mm4
 
322
        pfsub %mm4,%mm3
 
323
        movq 32(%eax),%mm4
 
324
        movd ASM_NAME(COS9)+8,%mm5
 
325
        punpckldq %mm5,%mm5
 
326
        pfmul %mm5,%mm4
 
327
        pfsub %mm4,%mm3
 
328
        pfadd %mm1,%mm3
 
329
        movq 64(%eax),%mm4
 
330
        movd ASM_NAME(COS9)+16,%mm5
 
331
        punpckldq %mm5,%mm5
 
332
        pfmul %mm5,%mm4
 
333
        pfadd %mm4,%mm3
 
334
        movq %mm2,%mm4
 
335
        pfadd %mm3,%mm4
 
336
        movq %mm7,%mm5
 
337
        punpckldq ASM_NAME(tfcos36)+8,%mm5
 
338
        pfmul %mm5,%mm4
 
339
        movq %mm4,%mm5
 
340
        pfacc %mm5,%mm5
 
341
        movd 116(%edx),%mm6
 
342
        punpckldq 96(%edx),%mm6
 
343
        pfmul %mm6,%mm5
 
344
        movd %mm5,44(%ecx)
 
345
        psrlq $32,%mm5
 
346
        movd %mm5,24(%ecx)
 
347
        movq %mm4,%mm6
 
348
        punpckldq %mm6,%mm5
 
349
        pfsub %mm6,%mm5
 
350
        punpckhdq %mm5,%mm5
 
351
        movd 24(%edx),%mm6
 
352
        punpckldq 44(%edx),%mm6
 
353
        pfmul %mm6,%mm5
 
354
        movd 24(%esi),%mm6
 
355
        punpckldq 44(%esi),%mm6
 
356
        pfadd %mm6,%mm5
 
357
        movd %mm5,768(%ebx)
 
358
        psrlq $32,%mm5
 
359
        movd %mm5,1408(%ebx)
 
360
        movq %mm3,%mm4
 
361
        pfsub %mm2,%mm4
 
362
        movq %mm7,%mm5
 
363
        punpckldq ASM_NAME(tfcos36)+24,%mm5
 
364
        pfmul %mm5,%mm4
 
365
        movq %mm4,%mm5
 
366
        pfacc %mm5,%mm5
 
367
        movd 132(%edx),%mm6
 
368
        punpckldq 80(%edx),%mm6
 
369
        pfmul %mm6,%mm5
 
370
        movd %mm5,60(%ecx)
 
371
        psrlq $32,%mm5
 
372
        movd %mm5,8(%ecx)
 
373
        movq %mm4,%mm6
 
374
        punpckldq %mm6,%mm5
 
375
        pfsub %mm6,%mm5
 
376
        punpckhdq %mm5,%mm5
 
377
        movd 8(%edx),%mm6
 
378
        punpckldq 60(%edx),%mm6
 
379
        pfmul %mm6,%mm5
 
380
        movd 8(%esi),%mm6
 
381
        punpckldq 60(%esi),%mm6
 
382
        pfadd %mm6,%mm5
 
383
        movd %mm5,256(%ebx)
 
384
        psrlq $32,%mm5
 
385
        movd %mm5,1920(%ebx)
 
386
        movq 8(%eax),%mm2
 
387
        movd ASM_NAME(COS9)+28,%mm3
 
388
        punpckldq %mm3,%mm3
 
389
        pfmul %mm3,%mm2
 
390
        pfsub %mm0,%mm2
 
391
        movq 40(%eax),%mm3
 
392
        movd ASM_NAME(COS9)+4,%mm4
 
393
        punpckldq %mm4,%mm4
 
394
        pfmul %mm4,%mm3
 
395
        pfadd %mm3,%mm2
 
396
        movq 56(%eax),%mm3
 
397
        movd ASM_NAME(COS9)+20,%mm4
 
398
        punpckldq %mm4,%mm4
 
399
        pfmul %mm4,%mm3
 
400
        pfsub %mm3,%mm2
 
401
        movq (%eax),%mm3
 
402
        movq 16(%eax),%mm4
 
403
        movd ASM_NAME(COS9)+16,%mm5
 
404
        punpckldq %mm5,%mm5
 
405
        pfmul %mm5,%mm4
 
406
        pfsub %mm4,%mm3
 
407
        movq 32(%eax),%mm4
 
408
        movd ASM_NAME(COS9)+32,%mm5
 
409
        punpckldq %mm5,%mm5
 
410
        pfmul %mm5,%mm4
 
411
        pfadd %mm4,%mm3
 
412
        pfadd %mm1,%mm3
 
413
        movq 64(%eax),%mm4
 
414
        movd ASM_NAME(COS9)+8,%mm5
 
415
        punpckldq %mm5,%mm5
 
416
        pfmul %mm5,%mm4
 
417
        pfsub %mm4,%mm3
 
418
        movq %mm2,%mm4
 
419
        pfadd %mm3,%mm4
 
420
        movq %mm7,%mm5
 
421
        punpckldq ASM_NAME(tfcos36)+12,%mm5
 
422
        pfmul %mm5,%mm4
 
423
        movq %mm4,%mm5
 
424
        pfacc %mm5,%mm5
 
425
        movd 120(%edx),%mm6
 
426
        punpckldq 92(%edx),%mm6
 
427
        pfmul %mm6,%mm5
 
428
        movd %mm5,48(%ecx)
 
429
        psrlq $32,%mm5
 
430
        movd %mm5,20(%ecx)
 
431
        movq %mm4,%mm6
 
432
        punpckldq %mm6,%mm5
 
433
        pfsub %mm6,%mm5
 
434
        punpckhdq %mm5,%mm5
 
435
        movd 20(%edx),%mm6
 
436
        punpckldq 48(%edx),%mm6
 
437
        pfmul %mm6,%mm5
 
438
        movd 20(%esi),%mm6
 
439
        punpckldq 48(%esi),%mm6
 
440
        pfadd %mm6,%mm5
 
441
        movd %mm5,640(%ebx)
 
442
        psrlq $32,%mm5
 
443
        movd %mm5,1536(%ebx)
 
444
        movq %mm3,%mm4
 
445
        pfsub %mm2,%mm4
 
446
        movq %mm7,%mm5
 
447
        punpckldq ASM_NAME(tfcos36)+20,%mm5
 
448
        pfmul %mm5,%mm4
 
449
        movq %mm4,%mm5
 
450
        pfacc %mm5,%mm5
 
451
        movd 128(%edx),%mm6
 
452
        punpckldq 84(%edx),%mm6
 
453
        pfmul %mm6,%mm5
 
454
        movd %mm5,56(%ecx)
 
455
        psrlq $32,%mm5
 
456
        movd %mm5,12(%ecx)
 
457
        movq %mm4,%mm6
 
458
        punpckldq %mm6,%mm5
 
459
        pfsub %mm6,%mm5
 
460
        punpckhdq %mm5,%mm5
 
461
        movd 12(%edx),%mm6
 
462
        punpckldq 56(%edx),%mm6
 
463
        pfmul %mm6,%mm5
 
464
        movd 12(%esi),%mm6
 
465
        punpckldq 56(%esi),%mm6
 
466
        pfadd %mm6,%mm5
 
467
        movd %mm5,384(%ebx)
 
468
        psrlq $32,%mm5
 
469
        movd %mm5,1792(%ebx)
 
470
        movq (%eax),%mm4
 
471
        movq 16(%eax),%mm3
 
472
        pfsub %mm3,%mm4
 
473
        movq 32(%eax),%mm3
 
474
        pfadd %mm3,%mm4
 
475
        movq 48(%eax),%mm3
 
476
        pfsub %mm3,%mm4
 
477
        movq 64(%eax),%mm3
 
478
        pfadd %mm3,%mm4
 
479
        movq %mm7,%mm5
 
480
        punpckldq ASM_NAME(tfcos36)+16,%mm5
 
481
        pfmul %mm5,%mm4
 
482
        movq %mm4,%mm5
 
483
        pfacc %mm5,%mm5
 
484
        movd 124(%edx),%mm6
 
485
        punpckldq 88(%edx),%mm6
 
486
        pfmul %mm6,%mm5
 
487
        movd %mm5,52(%ecx)
 
488
        psrlq $32,%mm5
 
489
        movd %mm5,16(%ecx)
 
490
        movq %mm4,%mm6
 
491
        punpckldq %mm6,%mm5
 
492
        pfsub %mm6,%mm5
 
493
        punpckhdq %mm5,%mm5
 
494
        movd 16(%edx),%mm6
 
495
        punpckldq 52(%edx),%mm6
 
496
        pfmul %mm6,%mm5
 
497
        movd 16(%esi),%mm6
 
498
        punpckldq 52(%esi),%mm6
 
499
        pfadd %mm6,%mm5
 
500
        movd %mm5,512(%ebx)
 
501
        psrlq $32,%mm5
 
502
        movd %mm5,1664(%ebx)
 
503
        femms
 
504
        
 
505
#NO_APP
 
506
        popl    %ebx
 
507
        popl    %esi
 
508
        leave
 
509
        ret
 
510
        /* .size        ASM_NAME(dct36_3dnowext), .-ASM_NAME(dct36_3dnowext) */