0
我有一个内联汇编代码,有两条小线。我想在第二行中使用从第一行检索的输出操作数作为输入操作数。我想知道是否有可能。这里是我的代码:我可以使用输出操作数作为ARM内联汇编中的输入吗?
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
操作数是我的第二个指令输入的一个。编译器不会抱怨,但不知何故,我没有得到正确的结果。
是的,您可以。检查生成的asm代码(使用'gcc -S'或'objdump')。还要指定您提供的输入以及您得到的输出以及为什么不正确。 – Jester
不知道我是否理解正确,但是:如果您仅在**相同的''asm'语句中使用寄存器,则必须将它们列在clobber部分中,但不能作为输入或输出。否则,如果您想更改输入参数,则必须将其输入/输出。请注意,使用'uint32'作为名字是一个坏主意,因为这很容易与'uint32_t'类型混淆。一般来说,使用自解释的名称,而不是它们的类型。 – Olaf
另请注意,输出操作数可能会被分配到相同的寄存器作为输入,除非您使用early-clobber。在你的情况下,'%5'可能与'%0'或'%1'相同,并且由于这些被第一条指令破坏,你的第二条将会使用错误的值。 – Jester