This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

C6000 c优化,循环次数不是4的倍数如何优化



下面是Ti官方求解最小值的c代码,当矢量x次原数个数不是4的倍数,还能用吗?

#pragma CODE_SECTION(DSPF_sp_minval, ".text:optimized");

//#include "DSPF_sp_minval.h"
#include "float.h"

float DSPF_sp_minval(const float* restrict x, int nx)
{
   int    i;
   float  x0, x1, x2, x3, min0, min1, min2, min3;
   double x_01, x_23;

   min0 = FLT_MAX;
   min1 = FLT_MAX;
   min2 = FLT_MAX;
   min3 = FLT_MAX;
 
   _nassert(nx % 4 == 0);
   _nassert(nx > 0);
   _nassert((int)x % 8 == 0);

   #pragma MUST_ITERATE(1,,)
   for (i = 0; i < nx; i+=4)
   {
      x_01 = _amemd8((void*)&x[i]);
      x_23 = _amemd8((void*)&x[i+2]);
      x0   = _hif(x_01);
      x1   = _lof(x_01);
      x2   = _hif(x_23);
      x3   = _lof(x_23);
      if (x0 < min0)
        min0 = x0;
      if (x1 < min1)
        min1 = x1;
      if (x2 < min2)
        min2 = x2;
      if (x3 < min3)
        min3 = x3;
   }
   if (min0 < min1)
     min1 = min0;
   if (min2 < min3)
     min3 = min2;
   if (min3 < min1)
     return min3;
   else   
     return min1;
}