我正在为 iphone 使用内联汇编,我在设备调试模式下工作。
指令如下:
__asm__("smlatb %0, %1, %2 ,%3 \n\t": "=r"(Temp): "r"(treg5) : "r"(fac5) : "r"(Temp) );
我收到一个错误:
错误:tokedn '(' 之前的预期 ')' 错误:'asm' 中的未知寄存器名称 'r'
我正在使用 X-code 3.0 和 gcc 4.0。有任何想法吗?
应该只有三个冒号,而不是四个。
第一个冒号后面的参数指定输入,然后是输出,然后是clobber 列表。
如果您有多个参数,您可以使用逗号而不是冒号来分隔它们。
在你的例子中。我假设 temp 是您的输出,而 treg5, fac5 是您的输入。你可能想要这样的东西。
__asm__("smlatb %0, %1, %2, %0 \n\t"
: "=r"(Temp)
: "0"(Temp), "r"(treg5), "r"(fac5)
:);
顺便说一句, vfpmath库中有一些很好的 iphone ARM 程序集示例。
你有太多:
(冒号)。它们用作分隔符。因此,您应该有一个将汇编代码与输出变量分开,一个将输出变量与输入变量分开。有点像asm ("assembly" : <output> : <inputs> : [extra attributes])
。查找 GCC 的“内联汇编”,您将看到一些示例。
我相信你应该做这样的事情:
__asm__("smlatb %0, %1, %2 ,%3 \n\t": "=r"(Temp): "r"(treg5) : "r"(fac5) : "r"(Temp));
有关详细信息,请参阅此 Stack Overflow 问题。
我添加了 codewarrior 风格的内联汇编 __asm{
smlatb Temp, treg5, fac5 ,Temp } 并在 GCC 4.0 语言下的 build 选项卡下的项目设置中我选择了选项 Allow CodeWarrior-Style Inline Assembly 也选择了 allow 'asm' 'inline' 'typeof'选项和代码终于工作了
一个更正指令是 asm ("smlatb %0, %1, %2 ,%3 \n\t": "=r"(Temp): "r"(treg5) : "r"(fac5) : "r “(温度));