内联汇编错误
我正在使用内联汇编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。有任何想法吗?
一个校正指令是 ASM( “smlatb%0%1%2%3 \ n \ t” 的: “= R”(温度): “R”(treg5):“R “(fac5):”r“(Temp));
我认为你应该做这样的事情:
__asm__("smlatb %0, %1, %2 ,%3 \n\t": "=r"(Temp): "r"(treg5) : "r"(fac5) : "r"(Temp));
嗨 我已经做到了,即在asm之前和之后添加了2个下划线字符,但我仍然得到相同的错误。 – Manish 2009-05-05 06:00:10
我加的CodeWarrior风格联汇编 __asm {
smlatb温度,treg5,FAC5,温度} 和下GCC 4.0语言编译选项卡下prject设置我选择 选项允许的CodeWarrior风格的内联汇编 还选择 允许'asm''inline''typeof'选项并且代码最终生效
您有太多:
(冒号)。它们被用作分隔符。因此,您应该有一个将汇编代码与输出变量分开,另一个将输出变量与输入变量分开。这是像asm ("assembly" : <output> : <inputs> : [extra attributes])
。查看GCC的'内联程序集',你会看到一些例子。
感谢看着例子解决了我的问题 – Manish 2009-05-07 07:06:12
应该只有三个冒号,而不是四个。
第一个冒号后面的参数指定了输入,然后是输出,然后是clobber列表。
如果您有多个参数,您可以使用逗号来分隔它们,而不是冒号。
在你的例子中。我假设,那个温度是你的输出,treg5,fac5是你的输入。 你可能想要这样的东西。
__asm__("smlatb %0, %1, %2, %0 \n\t"
: "=r"(Temp)
: "0"(Temp), "r"(treg5), "r"(fac5)
:);
顺便说一句,在vfpmath库中有一些很好的iphone ARM程序集的例子。
我编辑了原始问题以包含此更新信息。 – unwind 2009-05-05 06:31:18