2009-05-04 216 views
0

我正在使用内联汇编for iphone,我在设备调试模式下工作。内联汇编错误

的指令如下:

__asm__("smlatb %0, %1, %2 ,%3 \n\t": "=r"(Temp): "r"(treg5) : "r"(fac5) : "r"(Temp)); 

而且我正在一个错误:

error : expected ')' before tokedn '(' error: unknown register name 'r' in 'asm'

我使用X-码3.0和GCC 4.0。有任何想法吗?

回答

0

一个校正指令是 ASM( “smlatb%0%1%2%3 \ n \ t” 的: “= R”(温度): “R”(treg5):“R “(fac5):”r“(Temp));

+0

我编辑了原始问题以包含此更新信息。 – unwind 2009-05-05 06:31:18

0

我认为你应该做这样的事情:

__asm__("smlatb %0, %1, %2 ,%3 \n\t": "=r"(Temp): "r"(treg5) : "r"(fac5) : "r"(Temp)); 

详见this Stack Overflow question

+0

嗨 我已经做到了,即在asm之前和之后添加了2个下划线字符,但我仍然得到相同的错误。 – Manish 2009-05-05 06:00:10

0

我加的CodeWarrior风格联汇编 __asm {
smlatb温度,treg5,FAC5,温度} 和下GCC 4.0语言编译选项卡下prject设置我选择 选项允许的CodeWarrior风格的内联汇编 还选择 允许'asm''inline''typeof'选项并且代码最终生效

0

您有太多:(冒号)。它们被用作分隔符。因此,您应该有一个将汇编代码与输出变量分开,另一个将输出变量与输入变量分开。这是像asm ("assembly" : <output> : <inputs> : [extra attributes])。查看GCC的'内联程序集',你会看到一些例子。

+0

感谢看着例子解决了我的问题 – Manish 2009-05-07 07:06:12

1

应该只有三个冒号,而不是四个。

第一个冒号后面的参数指定了输入,然后是输出,然后是clobber列表。

如果您有多个参数,您可以使用逗号来分隔它们,而不是冒号。

在你的例子中。我假设,那个温度是你的输出,treg5,fac5是你的输入。 你可能想要这样的东西。

__asm__("smlatb %0, %1, %2, %0 \n\t" 
     : "=r"(Temp) 
     : "0"(Temp), "r"(treg5), "r"(fac5) 
     :); 

顺便说一句,在vfpmath库中有一些很好的iphone ARM程序集的例子。