0,0 → 1,70 |
/* |
equalizer_3dnow: 3DNow! optimized do_equalizer() |
|
copyright ?-2006 by the mpg123 project - free software under the terms of the LGPL 2.1 |
see COPYING and AUTHORS files in distribution or http://mpg123.org |
initially written by KIMURA Takuhiro |
*/ |
|
#include "mangle.h" |
|
.text |
ALIGN4 |
.globl ASM_NAME(do_equalizer_3dnow) |
/* .type ASM_NAME(do_equalizer_3dnow),@function */ |
/* void do_equalizer(real *bandPtr,int channel, real equalizer[2][32]); */ |
ASM_NAME(do_equalizer_3dnow): |
pushl %esi |
pushl %ebx |
/* bandPtr */ |
movl 12(%esp),%ebx |
/* channel */ |
movl 16(%esp),%ecx |
xorl %edx,%edx |
/* equalizer */ |
movl 20(%esp),%esi |
sall $7,%ecx |
ALIGN4 |
.L9: |
movq (%ebx,%edx),%mm0 |
pfmul (%esi,%ecx),%mm0 |
|
movq 8(%ebx,%edx),%mm1 |
pfmul 8(%esi,%ecx),%mm1 |
movq %mm0,(%ebx,%edx) |
|
movq 16(%ebx,%edx),%mm0 |
pfmul 16(%esi,%ecx),%mm0 |
movq %mm1,8(%ebx,%edx) |
|
movq 24(%ebx,%edx),%mm1 |
pfmul 24(%esi,%ecx),%mm1 |
movq %mm0,16(%ebx,%edx) |
|
movq 32(%ebx,%edx),%mm0 |
pfmul 32(%esi,%ecx),%mm0 |
movq %mm1,24(%ebx,%edx) |
|
movq 40(%ebx,%edx),%mm1 |
pfmul 40(%esi,%ecx),%mm1 |
movq %mm0,32(%ebx,%edx) |
|
movq 48(%ebx,%edx),%mm0 |
pfmul 48(%esi,%ecx),%mm0 |
movq %mm1,40(%ebx,%edx) |
|
movq 56(%ebx,%edx),%mm1 |
pfmul 56(%esi,%ecx),%mm1 |
movq %mm0,48(%ebx,%edx) |
movq %mm1,56(%ebx,%edx) |
|
addl $64,%edx |
addl $32,%ecx |
cmpl $124,%edx |
jle .L9 |
ALIGN4 |
popl %ebx |
popl %esi |
ret |
|
NONEXEC_STACK |