内联汇编错误
我正在使用 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。 有任何想法吗?
I am using inline assembly for iphone, I working for device debug mode.
The instruction is as follows:
__asm__("smlatb %0, %1, %2 ,%3 \n\t": "=r"(Temp): "r"(treg5) : "r"(fac5) : "r"(Temp) );
And I am getting an errors:
error : expected ')' before tokedn '('
error: unknown register name 'r' in
'asm'
I am using X-code 3.0 and gcc 4.0. Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
应该只有三个冒号,而不是四个。
第一个冒号后面的参数指定输入,然后指定输出,最后指定破坏列表。
如果您有多个参数,则可以使用逗号而不是冒号来分隔它们。
在你的例子中。 我假设 temp 是您的输出,treg5、fac5 是您的输入。
你可能想要这样的东西。
顺便说一句,vfpmath 库中有一些 iphone ARM 汇编的好示例。
There should only be three colons, not four.
The arguments following the first colon specify the inputs, then the outputs, then the clobber list.
If you have multiple parameters you can use a comma to separate them rather then colon.
In your example. I assume, that temp is your output and treg5, fac5 are your inputs.
You probably want something like this.
Btw, there are some good examples of iphone ARM assembly in the vfpmath library.
指令的一项更正是
asm("smlatb %0, %1, %2 ,%3 \n\t": "=r"(Temp): "r"(treg5) : "r"(fac5) : “r”(温度));
one correction the instruction is
asm("smlatb %0, %1, %2 ,%3 \n\t": "=r"(Temp): "r"(treg5) : "r"(fac5) : "r"(Temp) );
我相信你应该做这样的事情:
请参阅这个堆栈溢出问题了解详细信息。
I believe you should be doing something like this:
See this Stack Overflow question for details.
我添加了 codewarrior 风格的内联汇编
__asm{
smlatb 温度、treg5、fac5、温度 }
并在 GCC 4.0 语言下的构建选项卡下的项目设置中选择
允许 CodeWarrior 风格的内联汇编选项
还选择了
允许 'asm' 'inline' 'typeof' 选项,代码终于工作了
I added codewarrior style inline assembly
__asm{
smlatb Temp, treg5, fac5 ,Temp }
and in prject settings under build tab under GCC 4.0 language I selected
the option Allow CodeWarrior-Style Inline Assembly
also selected
allow 'asm' 'inline' 'typeof' options and the code worked finally
您的
:
(冒号)过多。 它们用作分隔符。 因此,您应该使用一种方法将汇编代码与输出变量分开,另一种方法将输出变量与输入变量分开。 它类似于asm(“程序集”:<输出>:<输入>:[额外属性])
。 查找 GCC 的“内联汇编”,您会看到一些示例。You have got too many
:
(colons). They are used as separators. So, you should have one to separate the assembly code with the output variable, and one to separate the output variable from the input variables. It's something likeasm ("assembly" : <output> : <inputs> : [extra attributes])
. Look up 'inline assembly' for GCC and you will see some examples.