2

我阅读了处理此类问题的不同主题,但我仍然没有答案。这是我的问题:

在我的头文件中,我有这个:

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

在我的项目设置中,我验证了以下这些选项是经过检查的 链接文本

但我有一个控制台错误:

{标准输入}:242:所选处理器不支持 -- smull r0,r1,r2,r3' {standard input}:244:unshifted register required --orr r0,r0,r1,lsl#20'

你可以帮帮我吗 ?

4

1 回答 1

3

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

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

于 2009-07-07T20:42:58.607 回答