On Tue, May 24, 2011 at 10:04 AM, David Henningsson <david.hennings...@canonical.com> wrote: > Ok, so there is still a high-pitched noise with 5.1, although I tried to fix > that a while ago. I now know what the error is, but perhaps somewhat with > more GCC-ASM skills can help me fix it. > > I spent parts of yesterday and today analysing it and came up with the > following conclusion: > > Here's the asm code as written in svolume_sse.c, function > pa_volume_s16ne_sse2: > > #define MOD_ADD(a,b) \ > " add "#a", %3 \n\t" /* channel += inc */ \ > " mov %3, %4 \n\t" \ > " sub "#b", %4 \n\t" /* tmp = channel - channels */ \ > " cmovae %4, %3 \n\t" /* if (tmp >= 0) channel = tmp */ > > And called with: MOD_ADD($8, %5) > > Here's what it shows up with gdb (on i386) : > > 0x00f3fbe6 <+550>: add $0x8,%edi > 0x00f3fbe9 <+553>: mov %edi,%ecx > 0x00f3fbeb <+555>: sub %edi,%ecx > 0x00f3fbed <+557>: cmovae %ecx,%edi > > The error: both %3 and %5 is turned into the %edi register. > > Here's the register allocation: > > : "+r" (samples), "+r" (volumes), "+r" (length), "=D" (channel), "=&r" > (temp) > : "rm" ((pa_reg_x86)channels) > : "cc" > > As I can tell from the above the "=D" forces %3 to go into %edi, but I don't > know how to tell GCC not to use %edi for %5 (channels) as well, does anybody > know? Can this be a GCC bug?
Either use "+D" for channel or "&rm" for channels. The manual here: http://gcc.gnu.org/onlinedocs/gcc/Modifiers.html#Modifiers is pretty good. --Andy _______________________________________________ pulseaudio-discuss mailing list pulseaudio-discuss@mail.0pointer.de https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss