我可以将输出操作数用作 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)
我有一个包含两行小代码的内联汇编代码。我想使用从第一行检索到的输出操作数作为第二行的输入操作数。我想知道这是否可能。这是我的代码:
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)