帮助我简单的iPhone手臂程序集在xcode下(内联或不内联)
我需要写在iphone臂组件 (在Xcode中4)(正常32位没有拇指)简单的常规,有一个问题(独立汇编程序不链接与嵌入我有指定参数和generall错误麻烦)
我需要组装一个像
void clear_alpha(unsigned char*bits, int width, int height)
{ for(int j=0; j<height; j++)
for(int i=0; i<width; i++)
{
bits[j][i][4] = 0;
}
}
左右,任何人都可以帮忙,TNX
如果这段代码很慢,为什么不尝试重写呢
void clear_alpha(unsigned char*bits, int width, int height)
{
for(int j=0; j<height; j++)
for(int i=0; i<width; i++)
{
bits[j][i][4] = 0; // this should be [3]
}
}
不确定优化器做了什么,但索引正在增加。 您可以很容易地替换循环中的3个乘法
void clear_alpha(unsigned char*bits, int width, int height)
{
char *bits_ptr = bits + 3;
char *bits_end = bits + height * width * 4;
for(; bits_ptr < bits_end; bits_ptr += 4) {
*bits_ptr = 0;
}
}
我没有运行 - 检查我的工作,以确保你不会超出最后。 现在,而不是3倍,你有一个添加。 我假设你的第三维是5(编辑:基于评论修正),但如果我错了,你必须修复。
看到我对这个ARM asm问题的回答,它显示了如何仅在设备上运行并且针对ARM模式而不是Thumb进行编译时才有条件地编译ARM asm。 答案还显示了一个将C参数传递给ARM asm语句的小例子。 您应该使用上面提到的简化for循环,然后将指令转换为ARM asm。
ARM asm例子
请注意,编译器为此示例生成的代码可能与您编写的任何ASM一样快。 但是,当进入更复杂的情况时,一个好的ASM编码器将比编译器做得更好,主要是因为gcc不擅长使用条件ARM asm语句。
memset(bits, 0, sizeof(unsigned char)*width*height);
怎么样memset(bits, 0, sizeof(unsigned char)*width*height);
上一篇: help me with simple iphone arm assembly routine under xcode (inline or not)
下一篇: inline asm compiled in XCode for Simulator but failed to compile for Device