[pulseaudio-discuss] [PATCH] Re: Why is it still hissing?
David Henningsson
david.henningsson at canonical.com
Fri May 27 00:44:32 PDT 2011
On 2011-05-25 14:41, Andrew Lutomirski wrote:
> On Tue, May 24, 2011 at 10:04 AM, David Henningsson
> <david.henningsson at 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.
Thanks! Maybe I've found it if I had googled it better. Unfortunately
that didn't work, but after several attempts I came up with something
that seems to work here. The problem seems to be with the "rm" thing
itself.
Colin (or someone else), if you have time, would you give this a test
spin and apply if it works for you?
--
David Henningsson, Canonical Ltd.
http://launchpad.net/~diwic
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-SSE-MMX-Fix-problem-with-highpitched-noise-on-i386.patch
Type: text/x-patch
Size: 2713 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/pulseaudio-discuss/attachments/20110527/d9fd88fd/attachment.bin>
More information about the pulseaudio-discuss
mailing list