下面是
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
);
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;
]