Hi,
sprabg7.pdf said that it is easy to port floating algorithm to C66 chips, but I find the compiler does not generate software pipeline loops even for such a simple loop:
for ( i = 0; i < n; i++)
{
oneOverAbs_a = oneOverAbs_a * oneOverAbs_a;
abs_a[i] = (a_sqr * oneOverAbs_a);
dtemp1 = _ftod(oneOverAbs_a, oneOverAbs_a);
dtemp1 = _dmpysp(dtemp, dtemp1);
dtemp1 = _dmpysp(_ftod(32768.f, 32768.f), dtemp1);
_amem4(&ejalpha[i]) = _dspinth(dtemp1);
}
The feedback message is:
159 ;*----------------------------------------------------------------------------*
160 ;* SOFTWARE PIPELINE INFORMATION
161 ;* Disqualified loop: Loop contains a call
162 ;* Disqualified loop: Loop contains non-pipelinable instructions
163 ;* Disqualified loop: Loop contains a call
164 ;* Disqualified loop: Loop contains non-pipelinable instructions
165 ;* Disqualified loop: Loop contains a call
TMS320C6x Assembler PC v7.4.4 Sun Dec 08 13:16:32 2013
Tools Copyright (c) 1996-2013 Texas Instruments Incorporated
main_p19.asm PAGE 4
166 ;* Disqualified loop: Loop contains non-pipelinable instructions
167 ;* Disqualified loop: Loop contains a call
168 ;* Disqualified loop: Loop contains non-pipelinable instructions
169 ;* Disqualified loop: Loop contains a call
170 ;* Disqualified loop: Loop contains non-pipelinable instructions
171 ;* Disqualified loop: Loop contains a call
172 ;* Disqualified loop: Loop contains non-pipelinable instructions
I have check build options, turn off #include <math.lib>, select rts6600_elf.lib.
It pipelines the loop only after I comment out these two lines:
oneOverAbs_a = oneOverAbs_a * oneOverAbs_a;
abs_a[i] = (a_sqr * oneOverAbs_a);
What is the problem? Thanks,