帮助我简单的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);

链接地址: http://www.djcxy.com/p/59743.html

上一篇: 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