iphone开发人员:内联asm存在问题

iphone开发人员:内联asm存在问题,iphone,xcode,assembly,inline-assembly,Iphone,Xcode,Assembly,Inline Assembly,我读过关于这类问题的不同主题,但仍然没有答案。 我的问题是: 在我的头文件中,我有以下内容: int cl, ch, _a = a, _b = b;\ __asm__ ("smull %0, %1, %2, %3\n" "mov %0, %0, lsr %4\n" "orr %0, %0, %1, lsl %5\n" : "=&r" (cl), "=&r" (ch) :

我读过关于这类问题的不同主题,但仍然没有答案。 我的问题是:

在我的头文件中,我有以下内容:

  int cl, ch, _a = a, _b = b;\
  __asm__ ("smull %0, %1, %2, %3\n"         
   "mov %0, %0, lsr %4\n"           
   "orr %0, %0, %1, lsl %5\n"           
   : "=&r" (cl), "=&r" (ch)         
   : "r" (_a), "r" (_b), "i" (r), "i" (32-(r)));
  cl; })
在我的项目设置中,我验证了以下选项是否被选中

但我有一个控制台错误:

{standard input}:242:所选处理器不支持--
smull r0、r1、r2、r3'
{标准输入}:244:需要未移位寄存器--
orr r0、r0、r1、lsl#20'


你能帮我吗?

你在为arm编译文件吗?默认情况下,iPhone的代码是为thumb编译的(除非您正在进行浮点运算,否则这通常更可取)。您列出的ASM是arm。您需要将使用该头的任何文件设置为arm编译,因为GCC不允许您在单个编译单元内切换后端。您可以通过取消选择“GCC4.x代码生成”下的“CompileforThumb”来更改它

将整个项目编译为arm很可能会对内存使用和代理性能产生重大(负面)影响。在iPhone上,通过宏将ASM包含在这样的标题中将被证明是非常混乱的。一般来说,您最好将所有ASM放在一个文件中,并将该文件编译为arm,但对于仅3条指令序列的内容,这可能也不值得