arm memset的一些理解!!!
2011-08-16 14:18
155 查看
在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;
}
}
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;
}
}
相关文章推荐
- 关于qt移植arm的环境变量的一些小理解
- 如何理解ARM的一些名词
- ZigBee的一些不太容易理解的术语
- java中八种基本数据类型以及它们的封装类,String类型的一些理解
- 手机应用加速网络请求的一些理解
- 关于Andiroid SDcard 自己的一些理解
- 设计模式之Builder (创建者模式)的一些个人理解(转)
- 对nutch爬虫的一些理解
- MapReduce初步理解及一些简单计算应用
- JAVA初学:关于“面对对象”的一些理解与感悟
- 关于Apache/Tomcat/JBOSS/Neginx/lighttpd/Jetty等一些常见服务器的区别比较和理解
- 对Native和非Native Android APP开发的一些理解
- 对Giraph的一些理解
- 理解ActiveX控件的一些背景知识
- javascript 中对this关键字的一些理解
- 关于数组和指针的一些理解
- android运行权限的一些理解
- line-height的一些深入理解及应用
- KCF算法的一些概念理解
- 对java反射机制的一些理解