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