繁体   English   中英

我可以将输出操作数用作ARM内联汇编中的输入吗?

[英]Can I use output operand as an input inside ARM inline assembly?

我有一个带有两行小的内联汇编代码。 我想使用从第一行检索的输出操作数作为第二行的输入操作数。 我想知道是否有可能。 这是我的代码:

asm volatile(   "umull          %0, %1, %3, %4; \n\t"
                "adds           %2, %5, %0;     \n\t"
                :"=r"(mullo2), "=r"(mulhi2), "=r"(temp)
                :"r"(A), "r"(B->uint32[6]), "r"(mulhi1)
                :"cc");

如您在这里看到的,我需要mullo2操作数成为第二条指令中的输入之一。 编译器没有抱怨,但是以某种方式我没有得到正确的结果。

除非您使用Early-Clobber,否则输出操作数可能会分配给与输入相同的寄存器。 在您的情况下, %5可能与%0%1相同,并且由于它们被第一条指令销毁,因此您的第二条指令将使用错误的值。 因此,您应该在这两个输出操作数上使用Early-Clobber修饰符,例如"=&r"(mullo2)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM