[linux-audio-dev] Re: Fixing Freeverb and Denormals

From: Neil Klepeis <nklepeis@email-addr-hidden>
Date: Sat Jan 22 2005 - 01:08:50 EET

Erik de Castro Lopo wrote:
>>static inline float
>>undenormalise(volatile float s)
>>{
>> s += 9.8607615E-32f;
>> return s - 9.8607615E-32f;
>>}
> That looks OK to me, and the optimiser should not discard it because s
> is volatile. Have you looked at the assembler output?

I used this new function and set all undenormalize calls in the freeverb
source code to the form:
x = undenormalize(x)

The problem is MUCH better, now the DSP% only hits 60% instead of
zooming past 80-90%, and ardour doesn't zombify. Almost useful... But
I do get xruns. There must be some other place where undenormalize
needs to be called, or perhaps the new inline function is still not
working quite right.

> The static inline function you have above should be OK. Look at the
> assembler output (use gcc -S to generate assembler) to make sure that
> the addition and subtraction isn't being optimised out.

What exactly am I looking for? After using g++ -S, the allpass.o file,
for example, starts out with:

         .file "allpass.cpp"
         .text
         .align 2
         .p2align 2,,3
.globl _ZN7allpassC2Ev
         .type _ZN7allpassC2Ev, @function
_ZN7allpassC2Ev:
.LFB11:
         pushl %ebp
.LCFI0:
         movl %esp, %ebp

[snip]

Thanks for your help!

Neil
Received on Sat Jan 22 12:15:04 2005

This archive was generated by hypermail 2.1.8 : Sat Jan 22 2005 - 12:15:04 EET