Hi,
found a small bug in MIX_AREAS2 (pcm_dmix_i386.h):
> "\tmovl $0, %%eax\n"
> "\tmovl $1, %%ecx\n"
> "\tmovl (%%ebx), %%edx\n"
> "\t" LOCK_PREFIX "cmpxchgl %%ecx, (%%edi)\n"
> "\tjnz 2f\n"
> "\tmovl (%%esi), %%ecx\n"
> "\tshr $8, %%ecx\n"
> "\tsubl %%edx, %%ecx\n"
> "2:"
> "\tmovl (%%esi), %%ecx\n"
> "\tshr $8, %%ecx\n"
> "\t" LOCK_PREFIX "addl %%ecx, (%%ebx)\n"
- subl %edx, %ecx has no effect (result is overwritten by the next ops)
- we have signed values so we have to use "sarl" (sign-extend) instead
of "shr".
A patch is appended.
ciao
gd...
--
Gerhard Dirschl !! See you at the LinuxTag 2003 !!
Karlsruhe
Germany
--- alsa-lib.old/src/pcm/pcm_dmix_i386.h 2003-03-18 19:00:20.000000000 +0100
+++ alsa-lib/src/pcm/pcm_dmix_i386.h 2003-07-09 13:47:35.000000000 +0200
@@ -283,16 +283,13 @@
* xadd(*sum, sample);
*/
"\tmovl $0, %%eax\n"
- "\tmovl $1, %%ecx\n"
- "\tmovl (%%ebx), %%edx\n"
- "\t" LOCK_PREFIX "cmpxchgl %%ecx, (%%edi)\n"
- "\tjnz 2f\n"
+ "\tmovl $1, %%edx\n"
"\tmovl (%%esi), %%ecx\n"
- "\tshr $8, %%ecx\n"
- "\tsubl %%edx, %%ecx\n"
+ "\tsarl $8, %%ecx\n"
+ "\t" LOCK_PREFIX "cmpxchgl %%edx, (%%edi)\n"
+ "\tjnz 2f\n"
+ "\tsubl (%%ebx), %%ecx\n"
"2:"
- "\tmovl (%%esi), %%ecx\n"
- "\tshr $8, %%ecx\n"
"\t" LOCK_PREFIX "addl %%ecx, (%%ebx)\n"
/*
@@ -310,7 +307,7 @@
"\tcmpl $-0x800000,%%ecx\n"
"\tjl 5f\n"
"\tmov %%ecx, %%eax\n"
- "\tshl $8, %%eax\n"
+ "\tshll $8, %%eax\n"
"\tmovl %%eax, (%%edi)\n"
"\tcmpl %%ecx, (%%ebx)\n"
"\tjnz 3b\n"