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