Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

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