From af0c81d4afcfaae87aabb030c08af9b02bfbec44 Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Wed, 17 Sep 2003 15:39:12 +0000 Subject: [PATCH] fixed 32bit sample dmix code for i386. --- src/pcm/pcm_dmix_i386.h | 63 ++++++++++++++--------------------------- 1 file changed, 22 insertions(+), 41 deletions(-) diff --git a/src/pcm/pcm_dmix_i386.h b/src/pcm/pcm_dmix_i386.h index 44c6ed4e..81cfcf4f 100644 --- a/src/pcm/pcm_dmix_i386.h +++ b/src/pcm/pcm_dmix_i386.h @@ -288,11 +288,15 @@ static void MIX_AREAS2(unsigned int size, "\t" LOCK_PREFIX "cmpxchgl %%ecx, (%%edi)\n" "\tjnz 2f\n" "\tmovl (%%esi), %%ecx\n" - "\tshr $8, %%ecx\n" + /* sample >>= 8 */ + "\tsarl $8, %%ecx\n" "\tsubl %%edx, %%ecx\n" + "\tjmp 21f\n" "2:" "\tmovl (%%esi), %%ecx\n" - "\tshr $8, %%ecx\n" + /* sample >>= 8 */ + "\tsarl $8, %%ecx\n" + "21:" "\t" LOCK_PREFIX "addl %%ecx, (%%ebx)\n" /* @@ -305,53 +309,31 @@ static void MIX_AREAS2(unsigned int size, "3:" "\tmovl (%%ebx), %%ecx\n" - "\tcmpl $0x7fffff,%%ecx\n" - "\tjg 4f\n" - "\tcmpl $-0x800000,%%ecx\n" - "\tjl 5f\n" - "\tmov %%ecx, %%eax\n" - "\tshl $8, %%eax\n" - "\tmovl %%eax, (%%edi)\n" - "\tcmpl %%ecx, (%%ebx)\n" - "\tjnz 3b\n" - /* - * while (size-- > 0) + * if (sample > 0x7fff00) */ - "\tadd %4, %%edi\n" - "\tadd %5, %%esi\n" - "\tadd %6, %%ebx\n" - "\tdecl %0\n" - "\tjnz 1b\n" - "\tjmp 6f\n" - + "\tmovl $0x7fffff, %%eax\n" + "\tcmpl %%eax, %%ecx\n" + "\tjg 4f\n" /* - * sample > 0x7fff00 + * if (sample < -0x800000) */ - - "\t.p2align 4,,15\n" - + "\tmovl $-0x800000, %%eax\n" + "\tcmpl %%eax, %%ecx\n" + "\tjl 4f\n" + "\tmovl %%ecx, %%eax\n" "4:" - "\tmovl $0x7fffffff, (%%edi)\n" - "\tcmpl %%ecx,(%%ebx)\n" - "\tjnz 3b\n" - "\tadd %4, %%edi\n" - "\tadd %5, %%esi\n" - "\tadd %6, %%ebx\n" - "\tdecl %0\n" - "\tjnz 1b\n" - "\tjmp 6f\n" - /* - * sample < -0x800000 + * sample <<= 8; */ - - "\t.p2align 4,,15\n" - - "5:" - "\tmovl $-0x80000000, (%%edi)\n" + "\tsall $8, %%eax\n" + "\tmovl %%eax, (%%edi)\n" "\tcmpl %%ecx, (%%ebx)\n" "\tjnz 3b\n" + + /* + * while (size-- > 0) + */ "\tadd %4, %%edi\n" "\tadd %5, %%esi\n" "\tadd %6, %%ebx\n" @@ -360,7 +342,6 @@ static void MIX_AREAS2(unsigned int size, // "\tjmp 6f\n" "6:" - : /* no output regs */ : "m" (size), "m" (dst), "m" (src), "m" (sum), "m" (dst_step), "m" (src_step), "m" (sum_step) : "esi", "edi", "edx", "ecx", "ebx", "eax" -- 2.47.1