diff options
author | nick <nick@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-07-05 09:44:18 +0000 |
---|---|---|
committer | nick <nick@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-07-05 09:44:18 +0000 |
commit | 124de950d60f8f698817d3e33a8a1853c9d941e5 (patch) | |
tree | 733856c47bc9f35547c120e62d93f07e26b1eebb /mp3lib/dct64_3dnow.s | |
parent | 225aeb5d3114eeafe85b03e535dc7b0153aff535 (diff) | |
download | mpv-124de950d60f8f698817d3e33a8a1853c9d941e5.tar.bz2 mpv-124de950d60f8f698817d3e33a8a1853c9d941e5.tar.xz |
Slight otimization
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@1278 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'mp3lib/dct64_3dnow.s')
-rw-r--r-- | mp3lib/dct64_3dnow.s | 268 |
1 files changed, 136 insertions, 132 deletions
diff --git a/mp3lib/dct64_3dnow.s b/mp3lib/dct64_3dnow.s index 8ab315c8d6..3298747377 100644 --- a/mp3lib/dct64_3dnow.s +++ b/mp3lib/dct64_3dnow.s @@ -7,6 +7,11 @@ # Warning: Phases 7 & 8 are not tested # +.data + .align 8 +x_plus_minus_3dnow: .long 0x00000000, 0x80000000 +plus_1f: .float 1.0 + .text .align 16 @@ -501,23 +506,41 @@ dct64_MMX_3dnow: /* Phase 6. This is the end of easy road. */ /* Code below is coded in scalar mode. Should be optimized */ - movd 32(%ecx), %mm0 - pfadd 36(%ecx), %mm0 - movd %mm0, 32(%edx) - - movd 32(%ecx), %mm0 - pfsub 36(%ecx), %mm0 - pfmul 120(%ebx),%mm0 - movd %mm0, 36(%edx) + movd plus_1f, %mm6 + punpckldq 120(%ebx), %mm6 /* mm6 = 1.0 | 120(%ebx)*/ + movq x_plus_minus_3dnow, %mm7 /* mm7 = +1 | -1 */ - movd 44(%ecx), %mm0 - pfsub 40(%ecx), %mm0 - pfmul 120(%ebx),%mm0 - - movd %mm0, 44(%edx) - pfadd 40(%ecx), %mm0 - pfadd 44(%ecx), %mm0 - movd %mm0, 40(%edx) + movq 32(%ecx), %mm0 + movq 64(%ecx), %mm2 + movq %mm0, %mm1 + movq %mm2, %mm3 + pxor %mm7, %mm1 + pxor %mm7, %mm3 + pfacc %mm1, %mm0 + pfacc %mm3, %mm2 + pfmul %mm6, %mm0 + pfmul %mm6, %mm2 + movq %mm0, 32(%edx) + movq %mm2, 64(%edx) + + movd 44(%ecx), %mm0 + movd 40(%ecx), %mm2 + movd 120(%ebx), %mm3 + punpckldq 76(%ecx), %mm0 + punpckldq 72(%ecx), %mm2 + punpckldq %mm3, %mm3 + movq %mm0, %mm4 + movq %mm2, %mm5 + pfsub %mm2, %mm0 + pfmul %mm3, %mm0 + movq %mm0, %mm1 + pfadd %mm5, %mm0 + pfadd %mm4, %mm0 + movq %mm0, %mm2 + punpckldq %mm1, %mm0 + punpckhdq %mm1, %mm2 + movq %mm0, 40(%edx) + movq %mm2, 72(%edx) movd 48(%ecx), %mm3 pfsub 52(%ecx), %mm3 @@ -534,38 +557,22 @@ dct64_MMX_3dnow: pfadd 48(%ecx), %mm0 pfadd 52(%ecx), %mm0 - movd %mm0, 48(%edx) - pfadd %mm3, %mm1 - movd %mm1, 56(%edx) - movd %mm2, 60(%edx) - pfadd %mm3, %mm2 - movd %mm2, 52(%edx) + pfadd %mm3, %mm1 + punpckldq %mm2, %mm1 + pfadd %mm3, %mm2 + punpckldq %mm2, %mm0 + movq %mm1, 56(%edx) + movq %mm0, 48(%edx) /*---*/ - movd 64(%ecx), %mm0 - pfadd 68(%ecx), %mm0 - movd %mm0, 64(%edx) - - movd 64(%ecx), %mm0 - pfsub 68(%ecx), %mm0 - pfmul 120(%ebx), %mm0 - movd %mm0, 68(%edx) - - movd 76(%ecx), %mm0 - pfsub 72(%ecx), %mm0 - pfmul 120(%ebx), %mm0 - movd %mm0, 76(%edx) - pfadd 72(%ecx), %mm0 - pfadd 76(%ecx), %mm0 - movd %mm0, 72(%edx) - movd 92(%ecx), %mm0 - pfsub 88(%ecx), %mm0 - pfmul 120(%ebx), %mm0 - movd %mm0, 92(%edx) - pfadd 92(%ecx), %mm0 - pfadd 88(%ecx), %mm0 - movq %mm0, %mm1 + movd 92(%ecx), %mm1 + pfsub 88(%ecx), %mm1 + pfmul 120(%ebx), %mm1 + movd %mm1, 92(%edx) + pfadd 92(%ecx), %mm1 + pfadd 88(%ecx), %mm1 + movq %mm1, %mm0 pfadd 80(%ecx), %mm0 pfadd 84(%ecx), %mm0 @@ -579,14 +586,12 @@ dct64_MMX_3dnow: movd %mm0, 84(%edx) movd %mm1, 88(%edx) - movd 96(%ecx), %mm0 - pfadd 100(%ecx), %mm0 - movd %mm0, 96(%edx) - - movd 96(%ecx), %mm0 - pfsub 100(%ecx), %mm0 - pfmul 120(%ebx), %mm0 - movd %mm0, 100(%edx) + movq 96(%ecx), %mm0 + movq %mm0, %mm1 + pxor %mm7, %mm1 + pfacc %mm1, %mm0 + pfmul %mm6, %mm0 + movq %mm0, 96(%edx) movd 108(%ecx), %mm0 pfsub 104(%ecx), %mm0 @@ -596,13 +601,13 @@ dct64_MMX_3dnow: pfadd 108(%ecx), %mm0 movd %mm0, 104(%edx) - movd 124(%ecx), %mm0 - pfsub 120(%ecx), %mm0 - pfmul 120(%ebx), %mm0 - movd %mm0, 124(%edx) - pfadd 120(%ecx), %mm0 - pfadd 124(%ecx), %mm0 - movq %mm0, %mm1 + movd 124(%ecx), %mm1 + pfsub 120(%ecx), %mm1 + pfmul 120(%ebx), %mm1 + movd %mm1, 124(%edx) + pfadd 120(%ecx), %mm1 + pfadd 124(%ecx), %mm1 + movq %mm1, %mm0 pfadd 112(%ecx), %mm0 pfadd 116(%ecx), %mm0 @@ -738,18 +743,18 @@ dct64_MMX_3dnow: jmp .L_bye .L01: /* Phase 9*/ - movd (%ecx), %mm0 - pfadd 4(%ecx), %mm0 - pf2id %mm0, %mm0 - movd %mm0, %eax - movw %ax, 512(%esi) - movd (%ecx), %mm0 - pfsub 4(%ecx), %mm0 - pfmul 120(%ebx), %mm0 - pf2id %mm0, %mm0 - movd %mm0, %eax - movw %ax, (%esi) + movq (%ecx), %mm0 + movq %mm0, %mm1 + pxor %mm7, %mm1 + pfacc %mm1, %mm0 + pfmul %mm6, %mm0 + pf2id %mm0, %mm0 + movd %mm0, %eax + movw %ax, 512(%esi) + psrlq $32, %mm0 + movd %mm0, %eax + movw %ax, (%esi) movd 12(%ecx), %mm0 pfsub 8(%ecx), %mm0 @@ -763,22 +768,24 @@ dct64_MMX_3dnow: movd %mm0, %eax movw %ax, 256(%esi) - movd 16(%ecx), %mm0 - pfsub 20(%ecx), %mm0 - pfmul 120(%ebx), %mm0 - movq %mm0, %mm3 + movd 16(%ecx), %mm3 + pfsub 20(%ecx), %mm3 + pfmul 120(%ebx), %mm3 + movq %mm3, %mm2 - movd 28(%ecx), %mm0 - pfsub 24(%ecx), %mm0 - pfmul 120(%ebx), %mm0 - pf2id %mm0, %mm7 + movd 28(%ecx), %mm2 + pfsub 24(%ecx), %mm2 + pfmul 120(%ebx), %mm2 + movq %mm2, %mm1 + + pf2id %mm2, %mm7 movd %mm7, %eax movw %ax, 384(%edi) - movq %mm0, %mm2 - pfadd 24(%ecx), %mm0 - pfadd 28(%ecx), %mm0 - movq %mm0, %mm1 + pfadd 24(%ecx), %mm1 + pfadd 28(%ecx), %mm1 + movq %mm1, %mm0 + pfadd 16(%ecx), %mm0 pfadd 20(%ecx), %mm0 pf2id %mm0, %mm0 @@ -793,7 +800,6 @@ dct64_MMX_3dnow: movd %mm2, %eax movw %ax, 128(%edi) - /* Phase 10*/ movq 32(%edx), %mm0 @@ -813,32 +819,51 @@ dct64_MMX_3dnow: movw %ax, 64(%edi) movw %cx, 192(%edi) - movd 40(%edx), %mm0 - pfadd 56(%edx), %mm0 - pf2id %mm0, %mm0 - movd %mm0, %eax - movw %ax, 192(%esi) - - movd 56(%edx), %mm0 - pfadd 36(%edx), %mm0 - pf2id %mm0, %mm0 - movd %mm0, %eax - movw %ax, 64(%esi) - + movd 40(%edx), %mm3 + movd 56(%edx), %mm4 movd 60(%edx), %mm0 - pf2id %mm0, %mm7 - movd %mm7, %eax + movd 44(%edx), %mm2 + movd 120(%edx), %mm5 + punpckldq %mm4, %mm3 + punpckldq 124(%edx), %mm0 + pfadd 100(%edx), %mm5 + punpckldq 36(%edx), %mm4 + punpckldq 92(%edx), %mm2 + movq %mm5, %mm6 + pfadd %mm4, %mm3 + pf2id %mm0, %mm1 + pf2id %mm3, %mm3 + pfadd 88(%edx), %mm5 + movd %mm1, %eax + movd %mm3, %ecx movw %ax, 448(%edi) - pfadd 44(%edx), %mm0 + movw %cx, 192(%esi) + pf2id %mm5, %mm5 + psrlq $32, %mm1 + psrlq $32, %mm3 + movd %mm5, %ebx + movd %mm1, %eax + movd %mm3, %ecx + movw %bx, 96(%esi) + movw %ax, 480(%edi) + movw %cx, 64(%esi) + pfadd %mm2, %mm0 pf2id %mm0, %mm0 movd %mm0, %eax + pfadd 68(%edx), %mm6 movw %ax, 320(%edi) + psrlq $32, %mm0 + pf2id %mm6, %mm6 + movd %mm0, %eax + movd %mm6, %ebx + movw %ax, 416(%edi) + movw %bx, 32(%esi) movq 96(%edx), %mm0 movq 112(%edx), %mm2 movq 104(%edx), %mm4 - pfadd 112(%edx), %mm0 - pfadd 104(%edx), %mm2 + pfadd %mm2, %mm0 + pfadd %mm4, %mm2 pfadd 120(%edx), %mm4 movq %mm0, %mm1 movq %mm2, %mm3 @@ -846,20 +871,20 @@ dct64_MMX_3dnow: pfadd 64(%edx), %mm0 pfadd 80(%edx), %mm2 pfadd 72(%edx), %mm4 - pf2id %mm0, %mm7 - pf2id %mm2, %mm6 + pf2id %mm0, %mm0 + pf2id %mm2, %mm2 pf2id %mm4, %mm4 - movd %mm7, %eax - movd %mm6, %ecx + movd %mm0, %eax + movd %mm2, %ecx movd %mm4, %ebx movw %ax, 480(%esi) movw %cx, 352(%esi) movw %bx, 224(%esi) - psrlq $32, %mm7 - psrlq $32, %mm6 + psrlq $32, %mm0 + psrlq $32, %mm2 psrlq $32, %mm4 - movd %mm7, %eax - movd %mm6, %ecx + movd %mm0, %eax + movd %mm2, %ecx movd %mm4, %ebx movw %ax, 32(%edi) movw %cx, 160(%edi) @@ -886,27 +911,6 @@ dct64_MMX_3dnow: movw %cx, 224(%edi) movw %bx, 352(%edi) - movd 120(%edx), %mm0 - pfadd 100(%edx), %mm0 - movq %mm0, %mm1 - pfadd 88(%edx), %mm0 - pf2id %mm0, %mm0 - movd %mm0, %eax - movw %ax, 96(%esi) - pfadd 68(%edx), %mm1 - pf2id %mm1, %mm1 - movd %mm1, %eax - movw %ax, 32(%esi) - - movq 124(%edx), %mm0 - pf2id %mm0, %mm1 - movd %mm1, %eax - movw %ax, 480(%edi) - pfadd 92(%edx), %mm0 - pf2id %mm0, %mm0 - movd %mm0, %eax - movw %ax, 416(%edi) - movsw .L_bye: @@ -915,6 +919,6 @@ dct64_MMX_3dnow: popl %edi popl %esi popl %ebx - ret - + ret $12 + |