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

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操作数作为第二条指令的输入之一。编译器并不抱怨,但不知怎么的,我没有得到正确的结果。

最佳答案

输出操作数可以分配给与输入相同的寄存器,除非使用早期的clobber。在您的情况下,%5可能与%0%1相同,并且由于第一条指令破坏了这些指令,您的第二条指令将使用错误的值。因此,应该对这两个输出操作数使用早期的clobber修饰符,例如"=&r"(mullo2)

关于c - 我可以将输出操作数用作ARM内联汇编中的输入吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34275218/

10-11 18:31