[英]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.