在c标准中,memset是一个字节一个字节的set buf。。但在arm机上,对齐4个字节的读写比一个字节的读写速度要快许多。。有时候为了速度。。只能改进memset按照4个字节刷buf。。
void memset16(sl_uint16 *dst, sl_uint16 val, int len)
{
#if 1//defined(PREFER_SIZE_OVER_SPEED) || defined(__OPTIMIZE_SIZE__)
register int l = (sl_uint32)dst & 3;
register int i, v;
register int *dst2;
register int val2 = val << 16 | val;
if (len < 4)
{
*dst = val;
return;
}
if(l == 2)
{
*dst = val;
dst2 = (int*)(dst+1);
v = (len - l)%4;
len = (len - l)/4;
} else
{
dst2 = (int*)dst;
v = len % 4;
len = len/4;
}
for (i=0; i< len; i++)
*dst2++ = val2;
if (v != 0)
{
*(sl_uint16*)dst2 = val;
}
}