562
|
1 /*
|
|
2 equalizer_3dnow: 3DNow! optimized do_equalizer()
|
|
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 KIMURA Takuhiro
|
|
7 */
|
|
8
|
|
9 #include "mangle.h"
|
|
10
|
|
11 .text
|
|
12 ALIGN4
|
|
13 .globl ASM_NAME(do_equalizer_3dnow)
|
|
14 /* .type ASM_NAME(do_equalizer_3dnow),@function */
|
|
15 /* void do_equalizer(real *bandPtr,int channel, real equalizer[2][32]); */
|
|
16 ASM_NAME(do_equalizer_3dnow):
|
|
17 pushl %esi
|
|
18 pushl %ebx
|
|
19 /* bandPtr */
|
|
20 movl 12(%esp),%ebx
|
|
21 /* channel */
|
|
22 movl 16(%esp),%ecx
|
|
23 xorl %edx,%edx
|
|
24 /* equalizer */
|
|
25 movl 20(%esp),%esi
|
|
26 sall $7,%ecx
|
|
27 ALIGN4
|
|
28 .L9:
|
|
29 movq (%ebx,%edx),%mm0
|
|
30 pfmul (%esi,%ecx),%mm0
|
|
31
|
|
32 movq 8(%ebx,%edx),%mm1
|
|
33 pfmul 8(%esi,%ecx),%mm1
|
|
34 movq %mm0,(%ebx,%edx)
|
|
35
|
|
36 movq 16(%ebx,%edx),%mm0
|
|
37 pfmul 16(%esi,%ecx),%mm0
|
|
38 movq %mm1,8(%ebx,%edx)
|
|
39
|
|
40 movq 24(%ebx,%edx),%mm1
|
|
41 pfmul 24(%esi,%ecx),%mm1
|
|
42 movq %mm0,16(%ebx,%edx)
|
|
43
|
|
44 movq 32(%ebx,%edx),%mm0
|
|
45 pfmul 32(%esi,%ecx),%mm0
|
|
46 movq %mm1,24(%ebx,%edx)
|
|
47
|
|
48 movq 40(%ebx,%edx),%mm1
|
|
49 pfmul 40(%esi,%ecx),%mm1
|
|
50 movq %mm0,32(%ebx,%edx)
|
|
51
|
|
52 movq 48(%ebx,%edx),%mm0
|
|
53 pfmul 48(%esi,%ecx),%mm0
|
|
54 movq %mm1,40(%ebx,%edx)
|
|
55
|
|
56 movq 56(%ebx,%edx),%mm1
|
|
57 pfmul 56(%esi,%ecx),%mm1
|
|
58 movq %mm0,48(%ebx,%edx)
|
|
59 movq %mm1,56(%ebx,%edx)
|
|
60
|
|
61 addl $64,%edx
|
|
62 addl $32,%ecx
|
|
63 cmpl $124,%edx
|
|
64 jle .L9
|
|
65 ALIGN4
|
|
66 popl %ebx
|
|
67 popl %esi
|
|
68 ret
|
|
69
|
|
70 /* Mark non-executable stack. */
|
|
71 #if defined(__linux__) && defined(__ELF__)
|
|
72 .section .note.GNU-stack,"",%progbits
|
|
73 #endif
|