forked from KolibriOS/kolibrios
71 lines
1.3 KiB
ArmAsm
71 lines
1.3 KiB
ArmAsm
|
/*
|
||
|
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
|