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

« back to all changes in this revision

Viewing changes to src/dct64_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
        dct64_3dnowext: extended 3DNow optimized DCT64
 
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 dct64_3dnowext.{S,c}
 
9
 
 
10
        MPlayer comment follows.
 
11
*/
 
12
 
 
13
/*
 
14
* This code was taken from http://www.mpg123.org
 
15
* See ChangeLog of mpg123-0.59s-pre.1 for detail
 
16
* Applied to mplayer by Nick Kurshev <nickols_k@mail.ru>
 
17
* Partial 3dnowex-DSP! optimization by Nick Kurshev
 
18
*
 
19
* TODO: optimize scalar 3dnow! code
 
20
* Warning: Phases 7 & 8 are not tested
 
21
*/
 
22
 
 
23
#include "mangle.h"
 
24
 
 
25
        .data
 
26
        ALIGN4
 
27
        /* .type        plus_1f, @object
 
28
           .size        plus_1f, 4  */
 
29
plus_1f:
 
30
        .long   1065353216
 
31
        ALIGN8
 
32
        /* .type        x_plus_minus_3dnow, @object
 
33
           .size        x_plus_minus_3dnow, 8 */
 
34
x_plus_minus_3dnow:
 
35
        .long   0
 
36
        .long   -2147483648
 
37
 
 
38
        .text
 
39
        ALIGN32,,31
 
40
.globl ASM_NAME(dct64_3dnowext)
 
41
        /* .type        ASM_NAME(dct64_3dnowext), @function */
 
42
ASM_NAME(dct64_3dnowext):
 
43
        pushl   %ebp
 
44
        movl    %esp, %ebp
 
45
        pushl   %edi
 
46
        pushl   %esi
 
47
        pushl   %ebx
 
48
        subl    $256, %esp
 
49
#APP
 
50
        movl 16(%ebp),%eax
 
51
        leal 128+-268(%ebp),%edx
 
52
        movl 8(%ebp),%esi
 
53
        movl 12(%ebp),%edi
 
54
        movl $ASM_NAME(costab_mmxsse),%ebx
 
55
        leal -268(%ebp),%ecx
 
56
        movq    (%eax), %mm0
 
57
        movq    8(%eax), %mm4
 
58
        movq    %mm0, %mm3
 
59
        movq    %mm4, %mm7
 
60
        pswapd  120(%eax), %mm1
 
61
        pswapd  112(%eax), %mm5
 
62
        pfadd   %mm1, %mm0
 
63
        pfadd   %mm5, %mm4
 
64
        movq    %mm0, (%edx)
 
65
        movq    %mm4, 8(%edx)
 
66
        pfsub   %mm1, %mm3
 
67
        pfsub   %mm5, %mm7
 
68
        pfmul   (%ebx), %mm3
 
69
        pfmul   8(%ebx), %mm7
 
70
        pswapd  %mm3, %mm3
 
71
        pswapd  %mm7, %mm7
 
72
        movq    %mm3, 120(%edx)
 
73
        movq    %mm7, 112(%edx)
 
74
        movq    16(%eax), %mm0
 
75
        movq    24(%eax), %mm4
 
76
        movq    %mm0, %mm3
 
77
        movq    %mm4, %mm7
 
78
        pswapd  104(%eax), %mm1
 
79
        pswapd  96(%eax), %mm5
 
80
        pfadd   %mm1, %mm0
 
81
        pfadd   %mm5, %mm4
 
82
        movq    %mm0, 16(%edx)
 
83
        movq    %mm4, 24(%edx)
 
84
        pfsub   %mm1, %mm3
 
85
        pfsub   %mm5, %mm7
 
86
        pfmul   16(%ebx), %mm3
 
87
        pfmul   24(%ebx), %mm7
 
88
        pswapd  %mm3, %mm3
 
89
        pswapd  %mm7, %mm7
 
90
        movq    %mm3, 104(%edx)
 
91
        movq    %mm7, 96(%edx)
 
92
        movq    32(%eax), %mm0
 
93
        movq    40(%eax), %mm4
 
94
        movq    %mm0, %mm3
 
95
        movq    %mm4, %mm7
 
96
        pswapd  88(%eax), %mm1
 
97
        pswapd  80(%eax), %mm5
 
98
        pfadd   %mm1, %mm0
 
99
        pfadd   %mm5, %mm4
 
100
        movq    %mm0, 32(%edx)
 
101
        movq    %mm4, 40(%edx)
 
102
        pfsub   %mm1, %mm3
 
103
        pfsub   %mm5, %mm7
 
104
        pfmul   32(%ebx), %mm3
 
105
        pfmul   40(%ebx), %mm7
 
106
        pswapd  %mm3, %mm3
 
107
        pswapd  %mm7, %mm7
 
108
        movq    %mm3, 88(%edx)
 
109
        movq    %mm7, 80(%edx)
 
110
        movq    48(%eax), %mm0
 
111
        movq    56(%eax), %mm4
 
112
        movq    %mm0, %mm3
 
113
        movq    %mm4, %mm7
 
114
        pswapd  72(%eax), %mm1
 
115
        pswapd  64(%eax), %mm5
 
116
        pfadd   %mm1, %mm0
 
117
        pfadd   %mm5, %mm4
 
118
        movq    %mm0, 48(%edx)
 
119
        movq    %mm4, 56(%edx)
 
120
        pfsub   %mm1, %mm3
 
121
        pfsub   %mm5, %mm7
 
122
        pfmul   48(%ebx), %mm3
 
123
        pfmul   56(%ebx), %mm7
 
124
        pswapd  %mm3, %mm3
 
125
        pswapd  %mm7, %mm7
 
126
        movq    %mm3, 72(%edx)
 
127
        movq    %mm7, 64(%edx)
 
128
        movq    (%edx), %mm0
 
129
        movq    8(%edx), %mm4
 
130
        movq    %mm0, %mm3
 
131
        movq    %mm4, %mm7
 
132
        pswapd  56(%edx), %mm1
 
133
        pswapd  48(%edx), %mm5
 
134
        pfadd   %mm1, %mm0
 
135
        pfadd   %mm5, %mm4
 
136
        movq    %mm0, (%ecx)
 
137
        movq    %mm4, 8(%ecx)
 
138
        pfsub   %mm1, %mm3
 
139
        pfsub   %mm5, %mm7
 
140
        pfmul   64(%ebx), %mm3
 
141
        pfmul   72(%ebx), %mm7
 
142
        pswapd  %mm3, %mm3
 
143
        pswapd  %mm7, %mm7
 
144
        movq    %mm3, 56(%ecx)
 
145
        movq    %mm7, 48(%ecx)
 
146
        movq    16(%edx), %mm0
 
147
        movq    24(%edx), %mm4
 
148
        movq    %mm0, %mm3
 
149
        movq    %mm4, %mm7
 
150
        pswapd  40(%edx), %mm1
 
151
        pswapd  32(%edx), %mm5
 
152
        pfadd   %mm1, %mm0
 
153
        pfadd   %mm5, %mm4
 
154
        movq    %mm0, 16(%ecx)
 
155
        movq    %mm4, 24(%ecx)
 
156
        pfsub   %mm1, %mm3
 
157
        pfsub   %mm5, %mm7
 
158
        pfmul   80(%ebx), %mm3
 
159
        pfmul   88(%ebx), %mm7
 
160
        pswapd  %mm3, %mm3
 
161
        pswapd  %mm7, %mm7
 
162
        movq    %mm3, 40(%ecx)
 
163
        movq    %mm7, 32(%ecx)
 
164
        movq    64(%edx), %mm0
 
165
        movq    72(%edx), %mm4
 
166
        movq    %mm0, %mm3
 
167
        movq    %mm4, %mm7
 
168
        pswapd  120(%edx), %mm1
 
169
        pswapd  112(%edx), %mm5
 
170
        pfadd   %mm1, %mm0
 
171
        pfadd   %mm5, %mm4
 
172
        movq    %mm0, 64(%ecx)
 
173
        movq    %mm4, 72(%ecx)
 
174
        pfsubr  %mm1, %mm3
 
175
        pfsubr  %mm5, %mm7
 
176
        pfmul   64(%ebx), %mm3
 
177
        pfmul   72(%ebx), %mm7
 
178
        pswapd  %mm3, %mm3
 
179
        pswapd  %mm7, %mm7
 
180
        movq    %mm3, 120(%ecx)
 
181
        movq    %mm7, 112(%ecx)
 
182
        movq    80(%edx), %mm0
 
183
        movq    88(%edx), %mm4
 
184
        movq    %mm0, %mm3
 
185
        movq    %mm4, %mm7
 
186
        pswapd  104(%edx), %mm1
 
187
        pswapd  96(%edx), %mm5
 
188
        pfadd   %mm1, %mm0
 
189
        pfadd   %mm5, %mm4
 
190
        movq    %mm0, 80(%ecx)
 
191
        movq    %mm4, 88(%ecx)
 
192
        pfsubr  %mm1, %mm3
 
193
        pfsubr  %mm5, %mm7
 
194
        pfmul   80(%ebx), %mm3
 
195
        pfmul   88(%ebx), %mm7
 
196
        pswapd  %mm3, %mm3
 
197
        pswapd  %mm7, %mm7
 
198
        movq    %mm3, 104(%ecx)
 
199
        movq    %mm7, 96(%ecx)
 
200
        movq    96(%ebx), %mm2
 
201
        movq    104(%ebx), %mm6
 
202
        movq    (%ecx), %mm0
 
203
        movq    8(%ecx), %mm4
 
204
        movq    %mm0, %mm3
 
205
        movq    %mm4, %mm7
 
206
        pswapd  24(%ecx), %mm1
 
207
        pswapd  16(%ecx), %mm5
 
208
        pfadd   %mm1, %mm0
 
209
        pfadd   %mm5, %mm4
 
210
        movq    %mm0, (%edx)
 
211
        movq    %mm4, 8(%edx)
 
212
        pfsub   %mm1, %mm3
 
213
        pfsub   %mm5, %mm7
 
214
        pfmul   %mm2, %mm3
 
215
        pfmul   %mm6, %mm7
 
216
        pswapd  %mm3, %mm3
 
217
        pswapd  %mm7, %mm7
 
218
        movq    %mm3, 24(%edx)
 
219
        movq    %mm7, 16(%edx)
 
220
        movq    32(%ecx), %mm0
 
221
        movq    40(%ecx), %mm4
 
222
        movq    %mm0, %mm3
 
223
        movq    %mm4, %mm7
 
224
        pswapd  56(%ecx), %mm1
 
225
        pswapd  48(%ecx), %mm5
 
226
        pfadd   %mm1, %mm0
 
227
        pfadd   %mm5, %mm4
 
228
        movq    %mm0, 32(%edx)
 
229
        movq    %mm4, 40(%edx)
 
230
        pfsubr  %mm1, %mm3
 
231
        pfsubr  %mm5, %mm7
 
232
        pfmul   %mm2, %mm3
 
233
        pfmul   %mm6, %mm7
 
234
        pswapd  %mm3, %mm3
 
235
        pswapd  %mm7, %mm7
 
236
        movq    %mm3, 56(%edx)
 
237
        movq    %mm7, 48(%edx)
 
238
        movq    64(%ecx), %mm0
 
239
        movq    72(%ecx), %mm4
 
240
        movq    %mm0, %mm3
 
241
        movq    %mm4, %mm7
 
242
        pswapd  88(%ecx), %mm1
 
243
        pswapd  80(%ecx), %mm5
 
244
        pfadd   %mm1, %mm0
 
245
        pfadd   %mm5, %mm4
 
246
        movq    %mm0, 64(%edx)
 
247
        movq    %mm4, 72(%edx)
 
248
        pfsub   %mm1, %mm3
 
249
        pfsub   %mm5, %mm7
 
250
        pfmul   %mm2, %mm3
 
251
        pfmul   %mm6, %mm7
 
252
        pswapd  %mm3, %mm3
 
253
        pswapd  %mm7, %mm7
 
254
        movq    %mm3, 88(%edx)
 
255
        movq    %mm7, 80(%edx)
 
256
        movq    96(%ecx), %mm0
 
257
        movq    104(%ecx), %mm4
 
258
        movq    %mm0, %mm3
 
259
        movq    %mm4, %mm7
 
260
        pswapd  120(%ecx), %mm1
 
261
        pswapd  112(%ecx), %mm5
 
262
        pfadd   %mm1, %mm0
 
263
        pfadd   %mm5, %mm4
 
264
        movq    %mm0, 96(%edx)
 
265
        movq    %mm4, 104(%edx)
 
266
        pfsubr  %mm1, %mm3
 
267
        pfsubr  %mm5, %mm7
 
268
        pfmul   %mm2, %mm3
 
269
        pfmul   %mm6, %mm7
 
270
        pswapd  %mm3, %mm3
 
271
        pswapd  %mm7, %mm7
 
272
        movq    %mm3, 120(%edx)
 
273
        movq    %mm7, 112(%edx)
 
274
        movq    112(%ebx), %mm2
 
275
        movq    (%edx), %mm0
 
276
        movq    16(%edx), %mm4
 
277
        movq    %mm0, %mm3
 
278
        movq    %mm4, %mm7
 
279
        pswapd  8(%edx), %mm1
 
280
        pswapd  24(%edx), %mm5
 
281
        pfadd   %mm1, %mm0
 
282
        pfadd   %mm5, %mm4
 
283
        movq    %mm0, (%ecx)
 
284
        movq    %mm4, 16(%ecx)
 
285
        pfsub   %mm1, %mm3
 
286
        pfsubr  %mm5, %mm7
 
287
        pfmul   %mm2, %mm3
 
288
        pfmul   %mm2, %mm7
 
289
        pswapd  %mm3, %mm3
 
290
        pswapd  %mm7, %mm7
 
291
        movq    %mm3, 8(%ecx)
 
292
        movq    %mm7, 24(%ecx)
 
293
        movq    32(%edx), %mm0
 
294
        movq    48(%edx), %mm4
 
295
        movq    %mm0, %mm3
 
296
        movq    %mm4, %mm7
 
297
        pswapd  40(%edx), %mm1
 
298
        pswapd  56(%edx), %mm5
 
299
        pfadd   %mm1, %mm0
 
300
        pfadd   %mm5, %mm4
 
301
        movq    %mm0, 32(%ecx)
 
302
        movq    %mm4, 48(%ecx)
 
303
        pfsub   %mm1, %mm3
 
304
        pfsubr  %mm5, %mm7
 
305
        pfmul   %mm2, %mm3
 
306
        pfmul   %mm2, %mm7
 
307
        pswapd  %mm3, %mm3
 
308
        pswapd  %mm7, %mm7
 
309
        movq    %mm3, 40(%ecx)
 
310
        movq    %mm7, 56(%ecx)
 
311
        movq    64(%edx), %mm0
 
312
        movq    80(%edx), %mm4
 
313
        movq    %mm0, %mm3
 
314
        movq    %mm4, %mm7
 
315
        pswapd  72(%edx), %mm1
 
316
        pswapd  88(%edx), %mm5
 
317
        pfadd   %mm1, %mm0
 
318
        pfadd   %mm5, %mm4
 
319
        movq    %mm0, 64(%ecx)
 
320
        movq    %mm4, 80(%ecx)
 
321
        pfsub   %mm1, %mm3
 
322
        pfsubr  %mm5, %mm7
 
323
        pfmul   %mm2, %mm3
 
324
        pfmul   %mm2, %mm7
 
325
        pswapd  %mm3, %mm3
 
326
        pswapd  %mm7, %mm7
 
327
        movq    %mm3, 72(%ecx)
 
328
        movq    %mm7, 88(%ecx)
 
329
        movq    96(%edx), %mm0
 
330
        movq    112(%edx), %mm4
 
331
        movq    %mm0, %mm3
 
332
        movq    %mm4, %mm7
 
333
        pswapd  104(%edx), %mm1
 
334
        pswapd  120(%edx), %mm5
 
335
        pfadd   %mm1, %mm0
 
336
        pfadd   %mm5, %mm4
 
337
        movq    %mm0, 96(%ecx)
 
338
        movq    %mm4, 112(%ecx)
 
339
        pfsub   %mm1, %mm3
 
340
        pfsubr  %mm5, %mm7
 
341
        pfmul   %mm2, %mm3
 
342
        pfmul   %mm2, %mm7
 
343
        pswapd  %mm3, %mm3
 
344
        pswapd  %mm7, %mm7
 
345
        movq    %mm3, 104(%ecx)
 
346
        movq    %mm7, 120(%ecx)
 
347
        movd    plus_1f, %mm6
 
348
        punpckldq 120(%ebx), %mm6
 
349
        movq    x_plus_minus_3dnow, %mm7
 
350
        movq    32(%ecx), %mm0
 
351
        movq    64(%ecx), %mm2
 
352
        movq    %mm0, %mm1
 
353
        movq    %mm2, %mm3
 
354
        pxor    %mm7, %mm1
 
355
        pxor    %mm7, %mm3
 
356
        pfacc   %mm1, %mm0
 
357
        pfacc   %mm3, %mm2
 
358
        pfmul   %mm6, %mm0
 
359
        pfmul   %mm6, %mm2
 
360
        movq    %mm0, 32(%edx)
 
361
        movq    %mm2, 64(%edx)
 
362
        movd    44(%ecx), %mm0
 
363
        movd    40(%ecx), %mm2
 
364
        movd    120(%ebx), %mm3
 
365
        punpckldq 76(%ecx), %mm0
 
366
        punpckldq 72(%ecx), %mm2
 
367
        punpckldq %mm3, %mm3
 
368
        movq    %mm0, %mm4
 
369
        movq    %mm2, %mm5
 
370
        pfsub   %mm2, %mm0
 
371
        pfmul   %mm3, %mm0
 
372
        movq    %mm0, %mm1
 
373
        pfadd   %mm5, %mm0
 
374
        pfadd   %mm4, %mm0
 
375
        movq    %mm0, %mm2
 
376
        punpckldq %mm1, %mm0
 
377
        punpckhdq %mm1, %mm2
 
378
        movq    %mm0, 40(%edx)
 
379
        movq    %mm2, 72(%edx)
 
380
        movd   48(%ecx), %mm3
 
381
        movd   60(%ecx), %mm2
 
382
        pfsub  52(%ecx), %mm3
 
383
        pfsub  56(%ecx), %mm2
 
384
        pfmul 120(%ebx), %mm3
 
385
        pfmul 120(%ebx), %mm2
 
386
        movq    %mm2, %mm1
 
387
        pfadd  56(%ecx), %mm1
 
388
        pfadd  60(%ecx), %mm1
 
389
        movq    %mm1, %mm0
 
390
        pfadd  48(%ecx), %mm0
 
391
        pfadd  52(%ecx), %mm0
 
392
        pfadd   %mm3, %mm1
 
393
        punpckldq %mm2, %mm1
 
394
        pfadd   %mm3, %mm2
 
395
        punpckldq %mm2, %mm0
 
396
        movq    %mm1, 56(%edx)
 
397
        movq    %mm0, 48(%edx)
 
398
        movd   92(%ecx), %mm1
 
399
        pfsub  88(%ecx), %mm1
 
400
        pfmul 120(%ebx), %mm1
 
401
        movd   %mm1, 92(%edx)
 
402
        pfadd  92(%ecx), %mm1
 
403
        pfadd  88(%ecx), %mm1
 
404
        movq   %mm1, %mm0
 
405
        pfadd  80(%ecx), %mm0
 
406
        pfadd  84(%ecx), %mm0
 
407
        movd   %mm0, 80(%edx)
 
408
        movd   80(%ecx), %mm0
 
409
        pfsub  84(%ecx), %mm0
 
410
        pfmul 120(%ebx), %mm0
 
411
        pfadd  %mm0, %mm1
 
412
        pfadd  92(%edx), %mm0
 
413
        punpckldq %mm1, %mm0
 
414
        movq   %mm0, 84(%edx)
 
415
        movq    96(%ecx), %mm0
 
416
        movq    %mm0, %mm1
 
417
        pxor    %mm7, %mm1
 
418
        pfacc   %mm1, %mm0
 
419
        pfmul   %mm6, %mm0
 
420
        movq    %mm0, 96(%edx)
 
421
        movd  108(%ecx), %mm0
 
422
        pfsub 104(%ecx), %mm0
 
423
        pfmul 120(%ebx), %mm0
 
424
        movd  %mm0, 108(%edx)
 
425
        pfadd 104(%ecx), %mm0
 
426
        pfadd 108(%ecx), %mm0
 
427
        movd  %mm0, 104(%edx)
 
428
        movd  124(%ecx), %mm1
 
429
        pfsub 120(%ecx), %mm1
 
430
        pfmul 120(%ebx), %mm1
 
431
        movd  %mm1, 124(%edx)
 
432
        pfadd 120(%ecx), %mm1
 
433
        pfadd 124(%ecx), %mm1
 
434
        movq  %mm1, %mm0
 
435
        pfadd 112(%ecx), %mm0
 
436
        pfadd 116(%ecx), %mm0
 
437
        movd  %mm0, 112(%edx)
 
438
        movd  112(%ecx), %mm0
 
439
        pfsub 116(%ecx), %mm0
 
440
        pfmul 120(%ebx), %mm0
 
441
        pfadd %mm0,%mm1
 
442
        pfadd 124(%edx), %mm0
 
443
        punpckldq %mm1, %mm0
 
444
        movq  %mm0, 116(%edx)
 
445
        jnz .L01
 
446
        movd      (%ecx), %mm0
 
447
        pfadd    4(%ecx), %mm0
 
448
        movd     %mm0, 1024(%esi)
 
449
        movd      (%ecx), %mm0
 
450
        pfsub    4(%ecx), %mm0
 
451
        pfmul  120(%ebx), %mm0
 
452
        movd      %mm0, (%esi)
 
453
        movd      %mm0, (%edi)
 
454
        movd   12(%ecx), %mm0
 
455
        pfsub   8(%ecx), %mm0
 
456
        pfmul 120(%ebx), %mm0
 
457
        movd    %mm0, 512(%edi)
 
458
        pfadd   12(%ecx), %mm0
 
459
        pfadd   8(%ecx), %mm0
 
460
        movd    %mm0, 512(%esi)
 
461
        movd   16(%ecx), %mm0
 
462
        pfsub  20(%ecx), %mm0
 
463
        pfmul 120(%ebx), %mm0
 
464
        movq    %mm0, %mm3
 
465
        movd   28(%ecx), %mm0
 
466
        pfsub  24(%ecx), %mm0
 
467
        pfmul 120(%ebx), %mm0
 
468
        movd    %mm0, 768(%edi)
 
469
        movq    %mm0, %mm2
 
470
        pfadd  24(%ecx), %mm0
 
471
        pfadd  28(%ecx), %mm0
 
472
        movq    %mm0, %mm1
 
473
        pfadd  16(%ecx), %mm0
 
474
        pfadd  20(%ecx), %mm0
 
475
        movd   %mm0, 768(%esi)
 
476
        pfadd  %mm3, %mm1
 
477
        movd   %mm1, 256(%esi)
 
478
        pfadd  %mm3, %mm2
 
479
        movd   %mm2, 256(%edi)
 
480
        movq   32(%edx), %mm0
 
481
        movq   48(%edx), %mm1
 
482
        pfadd  48(%edx), %mm0
 
483
        pfadd  40(%edx), %mm1
 
484
        movd   %mm0, 896(%esi)
 
485
        movd   %mm1, 640(%esi)
 
486
        psrlq  $32, %mm0
 
487
        psrlq  $32, %mm1
 
488
        movd   %mm0, 128(%edi)
 
489
        movd   %mm1, 384(%edi)
 
490
        movd   40(%edx), %mm0
 
491
        pfadd  56(%edx), %mm0
 
492
        movd   %mm0, 384(%esi)
 
493
        movd   56(%edx), %mm0
 
494
        pfadd  36(%edx), %mm0
 
495
        movd   %mm0, 128(%esi)
 
496
        movd   60(%edx), %mm0
 
497
        movd   %mm0, 896(%edi)
 
498
        pfadd  44(%edx), %mm0
 
499
        movd   %mm0, 640(%edi)
 
500
        movq   96(%edx), %mm0
 
501
        movq   112(%edx), %mm2
 
502
        movq   104(%edx), %mm4
 
503
        pfadd  112(%edx), %mm0
 
504
        pfadd  104(%edx), %mm2
 
505
        pfadd  120(%edx), %mm4
 
506
        movq   %mm0, %mm1
 
507
        movq   %mm2, %mm3
 
508
        movq   %mm4, %mm5
 
509
        pfadd  64(%edx), %mm0
 
510
        pfadd  80(%edx), %mm2
 
511
        pfadd  72(%edx), %mm4
 
512
        movd   %mm0, 960(%esi)
 
513
        movd   %mm2, 704(%esi)
 
514
        movd   %mm4, 448(%esi)
 
515
        psrlq  $32, %mm0
 
516
        psrlq  $32, %mm2
 
517
        psrlq  $32, %mm4
 
518
        movd   %mm0, 64(%edi)
 
519
        movd   %mm2, 320(%edi)
 
520
        movd   %mm4, 576(%edi)
 
521
        pfadd  80(%edx), %mm1
 
522
        pfadd  72(%edx), %mm3
 
523
        pfadd  88(%edx), %mm5
 
524
        movd   %mm1, 832(%esi)
 
525
        movd   %mm3, 576(%esi)
 
526
        movd   %mm5, 320(%esi)
 
527
        psrlq  $32, %mm1
 
528
        psrlq  $32, %mm3
 
529
        psrlq  $32, %mm5
 
530
        movd   %mm1, 192(%edi)
 
531
        movd   %mm3, 448(%edi)
 
532
        movd   %mm5, 704(%edi)
 
533
        movd   120(%edx), %mm0
 
534
        pfadd  100(%edx), %mm0
 
535
        movq   %mm0, %mm1
 
536
        pfadd  88(%edx), %mm0
 
537
        movd   %mm0, 192(%esi)
 
538
        pfadd  68(%edx), %mm1
 
539
        movd   %mm1, 64(%esi)
 
540
        movd  124(%edx), %mm0
 
541
        movd  %mm0, 960(%edi)
 
542
        pfadd  92(%edx), %mm0
 
543
        movd  %mm0, 832(%edi)
 
544
        jmp     .L_bye
 
545
.L01:   
 
546
        movq    (%ecx), %mm0
 
547
        movq    %mm0, %mm1
 
548
        pxor    %mm7, %mm1
 
549
        pfacc   %mm1, %mm0
 
550
        pfmul   %mm6, %mm0
 
551
        pf2iw   %mm0, %mm0
 
552
        movd    %mm0, %eax
 
553
        movw    %ax, 512(%esi)
 
554
        psrlq   $32, %mm0
 
555
        movd    %mm0, %eax
 
556
        movw    %ax, (%esi)
 
557
        movd    12(%ecx), %mm0
 
558
        pfsub    8(%ecx), %mm0
 
559
        pfmul  120(%ebx), %mm0
 
560
        pf2iw    %mm0, %mm7
 
561
        movd     %mm7, %eax
 
562
        movw     %ax, 256(%edi)
 
563
        pfadd   12(%ecx), %mm0
 
564
        pfadd    8(%ecx), %mm0
 
565
        pf2iw    %mm0, %mm0
 
566
        movd     %mm0, %eax
 
567
        movw     %ax, 256(%esi)
 
568
        movd   16(%ecx), %mm3
 
569
        pfsub  20(%ecx), %mm3
 
570
        pfmul  120(%ebx), %mm3
 
571
        movq   %mm3, %mm2
 
572
        movd   28(%ecx), %mm2
 
573
        pfsub  24(%ecx), %mm2
 
574
        pfmul 120(%ebx), %mm2
 
575
        movq   %mm2, %mm1
 
576
        pf2iw  %mm2, %mm7
 
577
        movd   %mm7, %eax
 
578
        movw   %ax, 384(%edi)
 
579
        pfadd  24(%ecx), %mm1
 
580
        pfadd  28(%ecx), %mm1
 
581
        movq   %mm1, %mm0
 
582
        pfadd  16(%ecx), %mm0
 
583
        pfadd  20(%ecx), %mm0
 
584
        pf2iw  %mm0, %mm0
 
585
        movd   %mm0, %eax
 
586
        movw   %ax, 384(%esi)
 
587
        pfadd  %mm3, %mm1
 
588
        pf2iw  %mm1, %mm1
 
589
        movd   %mm1, %eax
 
590
        movw   %ax, 128(%esi)
 
591
        pfadd  %mm3, %mm2
 
592
        pf2iw  %mm2, %mm2
 
593
        movd   %mm2, %eax
 
594
        movw   %ax, 128(%edi)
 
595
        movq    32(%edx), %mm0
 
596
        movq    48(%edx), %mm1
 
597
        pfadd   48(%edx), %mm0
 
598
        pfadd   40(%edx), %mm1
 
599
        pf2iw   %mm0, %mm0
 
600
        pf2iw   %mm1, %mm1
 
601
        movd    %mm0, %eax
 
602
        movd    %mm1, %ecx
 
603
        movw    %ax, 448(%esi)
 
604
        movw    %cx, 320(%esi)
 
605
        psrlq   $32, %mm0
 
606
        psrlq   $32, %mm1
 
607
        movd    %mm0, %eax
 
608
        movd    %mm1, %ecx
 
609
        movw    %ax, 64(%edi)
 
610
        movw    %cx, 192(%edi)
 
611
        movd   40(%edx), %mm3
 
612
        movd   56(%edx), %mm4
 
613
        movd   60(%edx), %mm0
 
614
        movd   44(%edx), %mm2
 
615
        movd  120(%edx), %mm5
 
616
        punpckldq %mm4, %mm3
 
617
        punpckldq 124(%edx), %mm0
 
618
        pfadd 100(%edx), %mm5
 
619
        punpckldq 36(%edx), %mm4
 
620
        punpckldq 92(%edx), %mm2
 
621
        movq  %mm5, %mm6
 
622
        pfadd  %mm4, %mm3
 
623
        pf2iw  %mm0, %mm1
 
624
        pf2iw  %mm3, %mm3
 
625
        pfadd  88(%edx), %mm5
 
626
        movd   %mm1, %eax
 
627
        movd   %mm3, %ecx
 
628
        movw   %ax, 448(%edi)
 
629
        movw   %cx, 192(%esi)
 
630
        pf2iw  %mm5, %mm5
 
631
        psrlq  $32, %mm1
 
632
        psrlq  $32, %mm3
 
633
        movd   %mm5, %ebx
 
634
        movd   %mm1, %eax
 
635
        movd   %mm3, %ecx
 
636
        movw   %bx, 96(%esi)
 
637
        movw   %ax, 480(%edi)
 
638
        movw   %cx, 64(%esi)
 
639
        pfadd  %mm2, %mm0
 
640
        pf2iw  %mm0, %mm0
 
641
        movd   %mm0, %eax
 
642
        pfadd  68(%edx), %mm6
 
643
        movw   %ax, 320(%edi)
 
644
        psrlq  $32, %mm0
 
645
        pf2iw  %mm6, %mm6
 
646
        movd   %mm0, %eax
 
647
        movd   %mm6, %ebx
 
648
        movw   %ax, 416(%edi)
 
649
        movw   %bx, 32(%esi)
 
650
        movq   96(%edx), %mm0
 
651
        movq  112(%edx), %mm2
 
652
        movq  104(%edx), %mm4
 
653
        pfadd %mm2, %mm0
 
654
        pfadd %mm4, %mm2
 
655
        pfadd 120(%edx), %mm4
 
656
        movq  %mm0, %mm1
 
657
        movq  %mm2, %mm3
 
658
        movq  %mm4, %mm5
 
659
        pfadd  64(%edx), %mm0
 
660
        pfadd  80(%edx), %mm2
 
661
        pfadd  72(%edx), %mm4
 
662
        pf2iw  %mm0, %mm0
 
663
        pf2iw  %mm2, %mm2
 
664
        pf2iw  %mm4, %mm4
 
665
        movd   %mm0, %eax
 
666
        movd   %mm2, %ecx
 
667
        movd   %mm4, %ebx
 
668
        movw   %ax, 480(%esi)
 
669
        movw   %cx, 352(%esi)
 
670
        movw   %bx, 224(%esi)
 
671
        psrlq  $32, %mm0
 
672
        psrlq  $32, %mm2
 
673
        psrlq  $32, %mm4
 
674
        movd   %mm0, %eax
 
675
        movd   %mm2, %ecx
 
676
        movd   %mm4, %ebx
 
677
        movw   %ax, 32(%edi)
 
678
        movw   %cx, 160(%edi)
 
679
        movw   %bx, 288(%edi)
 
680
        pfadd  80(%edx), %mm1
 
681
        pfadd  72(%edx), %mm3
 
682
        pfadd  88(%edx), %mm5
 
683
        pf2iw  %mm1, %mm1
 
684
        pf2iw  %mm3, %mm3
 
685
        pf2iw  %mm5, %mm5
 
686
        movd   %mm1, %eax
 
687
        movd   %mm3, %ecx
 
688
        movd   %mm5, %ebx
 
689
        movw   %ax, 416(%esi)
 
690
        movw   %cx, 288(%esi)
 
691
        movw   %bx, 160(%esi)
 
692
        psrlq  $32, %mm1
 
693
        psrlq  $32, %mm3
 
694
        psrlq  $32, %mm5
 
695
        movd   %mm1, %eax
 
696
        movd   %mm3, %ecx
 
697
        movd   %mm5, %ebx
 
698
        movw   %ax, 96(%edi)
 
699
        movw   %cx, 224(%edi)
 
700
        movw   %bx, 352(%edi)
 
701
        movsw
 
702
.L_bye:
 
703
        femms
 
704
        
 
705
#NO_APP
 
706
        addl    $256, %esp
 
707
        popl    %ebx
 
708
        popl    %esi
 
709
        popl    %edi
 
710
        leave
 
711
        ret
 
712
        /* .size        ASM_NAME(dct64_3dnowext), .-ASM_NAME(dct64_3dnowext) */