Jean-Marc Valin
2006-Jan-19 15:48 UTC
[Fwd: Re: [Speex-dev] Errors in speex lib with Blackfin]
> So, I did following changes: > In every loop I remove %= (In Vis.DSP Help I didn't find such sign) > And loop become able to compile.Let me know if you think of something that would work in both gcc and VDSP.> With parallel issues I found several interesting things: > > 1) > "A0 -= R1.L*R0.H (IS), A1 -= R1.L*R0.L (M,IS) || R0 = [%1++];\n\t" > //doesn't compile > It can be compiled in that way: > "A1 -= R1.L*R0.L (M), A0 -= R1.L*R0.H (IS) || R0 = [%1++];\n\t" > or > "A1 -= R1.L*R0.L, A0 -= R1.L*R0.H (IS) || R0 = [%1++];\n\t" > //So, with (M,IS)-doesn't work, And for Vis.DSP - A1 operations must > //be first. So, I think that without (M,IS) it will work wrong, so I > //decide to separate it: > "A0 -= R1.L*R0.H (IS);" > "A1 -= R1.L*R0.L (M,IS) || R0 = [%1++];\n\t"Strange that it's not allowed yet gcc doesn't complain. I guess it wouldn't be the first time gnu as silently generates bad code. Still, I haven't seen this to cause bad results. Where's that from?> 2)//about Acc operations > "A0 = A1 = 0;"//doesn't compile > "A1 = A0 = 0;"//that's okI can fix that. Where?> By the way, can you explain me why the next stroke wrong: > "R1.L = R4.L*R2.L (IS) || R0 <<= 1;" > //This is ok for 32||16||16 > //model, but don't compilesStrange. Still no clue why gnu as is OK and not VDSP. Where's that?> 3)About Pregs(I wrote in previous letter about Pointer registers) - I think that VDSP compiler > are using different Pregs in C/C++ routines and when big asm inline > routine happens(that uses a lot of Pregs) - pointer registers are busy > by another values. So, to prevent data damage compiling fails. > Because it happens only with big inline routines, that uses a lot of > Pregs(5 of 6).OK, I can probably fix that to reduce the requirement.> How performance changes when you are switching from floating point to > fixed point with using gcc? And to Blackfin asm?float->fixed : at least 10x faster (but probably more like 100x) fixed->asm: Almost 2x faster with gcc, but probably less difference with VDSP.> When I am using BF537 Ezkit Lite(600MHz) - I am compressing sound with speex > (8 KHz, 16 bit, one channel). > To compress 1 second of sound it takes: > 1)floating point - 8 seconds > 2)fixed point - about 4 seconds.Definitely not normal. Using quality 8 (15 kbps) at 8 kHz and complexity 2 (default) takes about 15% on a 500 MHz Blackfin 533 (STAMP). What are you testing with? testenc?> Do you intend to make any additions, changes in speex library with > using Blackfin?What do you mean? Jean-Marc