2008-09-23 36 views
13

我正在寫一些代碼,並嘗試使用SIMD內在函數SSE2/3加速它。我的代碼具有這樣的性質,我需要將一些數據加載到XMM寄存器中並多次執行。當我查看生成的彙編代碼時,GCC似乎不斷清理數據回到內存,以重新加載XMM0和XMM1中的其他內容。我正在編譯x86-64,所以我有15個寄存器。爲什麼GCC只使用兩個,我能做些什麼來讓它使用更多?有什麼方法可以在寄存器中「固定」一些值嗎?我在我的變量定義中添加了「register」關鍵字,但生成的彙編代碼是相同的。如何讓GCC在使用內部函數時使用兩個以上的SIMD寄存器?

+0

我遇到了與ARM相同的問題。 AFAICT,我使用的語法是正確的 - 它與GCC文檔中指定的語法匹配。但是,我得到同樣的錯誤......我想知道最新的GCC是否在這方面被竊聽。 – 2009-11-30 21:43:01

+0

啊 - 對不起 - 我的評論實際上是關於弗洛林在他對下面回覆的評論中描述的問題(使用asm(「regname」)會產生錯誤)。 – 2009-11-30 21:44:18

回答

3

是的,你可以。 Explicit Reg Vars討論您需要將變量固定到特定寄存器的語法。

2

如果您正在爲每個內部指定單獨的寄存器,那麼您可以直接編寫彙編目錄,尤其是考慮到gcc在許多情況下不必要地忽略內在函數的習慣。

相關問題