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