[英]ARM inline assembly - input operand constraint contains '='
这是我当前的代码:
void int32hex(u32 val, char *out) {
asm("rev %[dst], %[src]" :: [dst]"=r"(val), [src]"r"(val));
binhex((u8*)&val, 4, out);
}
我的想法是采用参数val
,使用rev
指令翻转它(字节序),然后将其传递。
根据我的阅读,以上代码似乎是正确的,目标寄存器具有=r
标志,这意味着可以写入该寄存器。 但是,当通过GCC运行时,出现错误:输入操作数约束包含'='
如果我将标志更改为简单的r
则它将正常编译,但val
的值不会更改。
错误告诉您出了什么问题- =
约束仅适用于输出,不适用于输入,并且您的asm模式具有两个输入(一个令人困惑地称为“ dst”),而没有任何输出。 您可能打算将“ dst”作为输出:
asm("rev %[dst], %[src]" : [dst]"=r"(val) : [src]"r"(val));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.