arm memset的一些理解!!!

在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;
}

}

你可能感兴趣的:(arm memset的一些理解!!!)