2010-11-04 32 views
2

在克++,揍爲ASM列表可以指定,例如:C++:ASM撞列表

asm ("somecode" : : "r1", "r2", "r3"); 

這意味着彙編代碼改變寄存器r1,R2,R3。

現在,我改變了寄存器依賴模板參數n(該asm塊是一個模板函數中),和寄存器R1,...,RN將被改變。我該如何表達?

+0

爲什麼你需要這樣做?有了那麼多寄存器的架構,你不能只選擇幾個使用並且總是使用那些特定的寄存器嗎? – bdonlan 2011-01-17 11:55:51

回答

1

你面臨着多少個不同的寄存器星座?如果不是太多,你可以爲每個提供一個特定的實現。 (模板專業化

因爲我認爲沒有可能創建「模板化語句」。

+0

恐怕這將是我不得不採取的解決方案,雖然'n'可以取0到120之間的值... – Thomas 2010-11-04 11:52:19

+0

是否有可能用''r1' const char *'?如果是這樣,這可能是解決方案。 – Flinsch 2010-11-04 13:27:43

+0

這個想法也出現在我的腦海裏(不知道它在語法上是否正確),但我甚至不會想到用模板化的元素數生成這個逗號分隔的「const char *」集。 – Thomas 2010-11-04 17:18:25

0

您可以設置可在clobber列表中使用的所有寄存器,因此編譯器不會使用它們來存儲變量的值;我知道這有點慢,但如果你不需要非常高的優化,它就會工作。