我正在使用iphone的内联汇编,我正在设备调试模式。
说明如下:
__asm__("smlatb %0, %1, %2 ,%3 \n\t": "=r"(Temp): "r"(treg5) : "r"(fac5) : "r"(Temp) );
我收到了错误:
错误:预期')'tokedn'('' 错误:未知的寄存器名称'r' 'ASM'
我正在使用X-code 3.0和gcc 4.0。有什么想法吗?
答案 0 :(得分:1)
应该只有三个冒号,而不是四个。
第一个冒号后面的参数指定输入,然后指定输出,然后指定clobber列表。
如果您有多个参数,可以使用逗号分隔它们而不是冒号。
在你的例子中。我假设,temp是你的输出,treg5,fac5是你的输入。 你可能想要这样的东西。
__asm__("smlatb %0, %1, %2, %0 \n\t"
: "=r"(Temp)
: "0"(Temp), "r"(treg5), "r"(fac5)
:);
顺便说一下,vfpmath库中有一些很好的iphone ARM组件示例。
答案 1 :(得分:0)
指令的一次修正 asm (“smlatb%0,%1,%2,%3 \ n \ t”:“= r”(临时):“r”(treg5):“r”(fac5): “r”(临时));
答案 2 :(得分:0)
我相信你应该这样做:
__asm__("smlatb %0, %1, %2 ,%3 \n\t": "=r"(Temp): "r"(treg5) : "r"(fac5) : "r"(Temp));
有关详细信息,请参阅this Stack Overflow question。
答案 3 :(得分:0)
我添加了codewarrior样式的内联汇编
__asm {
smlatb Temp,treg5,fac5,Temp}
在我选择的GCC 4.0语言下的构建选项卡下的项目设置中
选项允许CodeWarrior样式内联汇编
也选择了
允许'asm''内联''typeof'选项,代码最终工作
答案 4 :(得分:0)
你有太多:
(冒号)。它们用作分隔符。因此,您应该有一个将汇编代码与输出变量分开,一个用于将输出变量与输入变量分开。这就像asm ("assembly" : <output> : <inputs> : [extra attributes])
。查找GCC的“内联汇编”,您将看到一些示例。