[Speex-dev] Speex on TI C6x, Problem with TI C5x Patch

Jean-Marc Valin Jean-Marc.Valin at USherbrooke.ca
Thu May 26 08:01:59 PDT 2005

> Nice call.  The culprit is SHRL32.  This is not used in many places, and in 
> most of those, the operand comes from EXTEND32.  The only really suspicious 
> instances is in lsp.c (lsp_interpolate):
>    spx_word16_t tmp = DIV32_16(SHL32(1 + subframe,14),nb_subframes); 
> (subframe is an int)
> ...
> I see that your changes include adding an EXTEND32 to the line above.  I 
> made ONLY this change to the 1.1.8 base that I am working from, and the 
> problem is gone.

Good. So I guess you are still having your low MIPS count, right? How
much is that?

> I will go back to using fixed_generic.h for now, but it may still be 
> worthwhile to make a custom version that takes advantage of the compiler 
> intrinsics, which include 32-bit shifts, 16x16=32 and 32x16=32 MPY, and 
> 32+16x16=32 MAC (with and without rounding).  The multiply arithmetic all 
> returns saturated results.  It seems to me that can't hurt.  Do you see any 
> problem with using saturated MPY and MACs?

Saturation never hurts. That's actually what I would have used if all
platforms supported it (which is at least not the case when ARMv4). If
you send me a file with only the macros you want to override from
fixed_generic.h, I can include it in the tree.

> By the way, the lsp.c change also fixes the TI C54x build, as expected.

What do you mean? Before that, it worked on C55, but not C54?


Jean-Marc Valin <Jean-Marc.Valin at USherbrooke.ca>
Université de Sherbrooke

More information about the Speex-dev mailing list