Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
3960 Serge 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 
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
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_VALUE(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) */
713
 
714
NONEXEC_STACK