iphone dev:内联asm的问题

时间:2009-06-30 09:24:13

标签: 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)         
   : "r" (_a), "r" (_b), "i" (r), "i" (32-(r)));
  cl; })

在我的项目设置中,我确认以下这些选项已被确认 link text

但我有一个控制台错误:

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

你能帮帮我吗?

1 个答案:

答案 0 :(得分:3)

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

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