我正在寫一些代碼,並嘗試使用SIMD內在函數SSE2/3加速它。我的代碼具有這樣的性質,我需要將一些數據加載到XMM寄存器中並多次執行。當我查看生成的彙編代碼時,GCC似乎不斷清理數據回到內存,以重新加載XMM0和XMM1中的其他內容。我正在編譯x86-64,所以我有15個寄存器。爲什麼GCC只使用兩個,我能做些什麼來讓它使用更多?有什麼方法可以在寄存器中「固定」一些值嗎?我在我的變量定義中添加了「register」關鍵字,但生成的彙編代碼是相同的。如何讓GCC在使用內部函數時使用兩個以上的SIMD寄存器?
13
A
回答
3
是的,你可以。 Explicit Reg Vars討論您需要將變量固定到特定寄存器的語法。
2
如果您正在爲每個內部指定單獨的寄存器,那麼您可以直接編寫彙編目錄,尤其是考慮到gcc在許多情況下不必要地忽略內在函數的習慣。
相關問題
- 1. 如何在使用SIMD內部函數時在寄存器中保持輸入相關的熱數據
- 2. 在GCC中使用內聯ARM彙編時優化使用的寄存器
- 3. 如何使用gcc asm關鍵字在寄存器中傳遞函數參數
- 4. GCC:禁止使用一些寄存器
- 5. 如何使用gcc編譯SIMD代碼
- 6. 如何在Vim中使用兩個寄存器替代:s
- 7. 哪些寄存器在函數中可以安全使用(x86)
- 8. 如何強制gcc在asm中使用兩個不同的寄存器操作數?
- 9. 獲取GCC在整個使用內聯asm的函數中保留SSE寄存器
- 10. 如何在kprobe中使用寄存器?
- 11. 如何使用ArrayList在寄存器
- 12. 的內聯彙編使用寄存器
- 13. 在SSE寄存器(GCC,C++)
- 14. GCC內聯彙編:讓編譯器決定使用什麼寄存器來臨時值
- 15. 如何同時使用兩個函數?
- 16. 使用行內彙編來更新內部系統寄存器
- 17. x86部分寄存器使用情況
- 18. 如何讓庫使用其內部函數以防其他庫中存在相同的函數
- 19. 如何在函數內部使用DomSanitizer
- 20. 如何在函數內部使用foreach
- 21. GCC不在函數調用中保存/恢復保留的寄存器
- 22. 兩個使用GCC
- 23. 在SSE內部函數中使用'錯誤'指令的gcc(6.1.0)
- 24. 如何使用C/gcc從外設IO寄存器讀取數據?
- 25. 如何使用內聯彙編程序保存寄存器值
- 26. 使用Union內部寄存器的奇怪行爲OpenCL
- 27. 使用SIMD內在函數進行高效的行列轉換
- 28. 使用SSE2內在函數和gcc內聯彙編器
- 29. 何時使用volatile與寄存器/局部變量
- 30. 在avr-gcc內聯彙編中使用輸出寄存器有哪些限制?
我遇到了與ARM相同的問題。 AFAICT,我使用的語法是正確的 - 它與GCC文檔中指定的語法匹配。但是,我得到同樣的錯誤......我想知道最新的GCC是否在這方面被竊聽。 – 2009-11-30 21:43:01
啊 - 對不起 - 我的評論實際上是關於弗洛林在他對下面回覆的評論中描述的問題(使用asm(「regname」)會產生錯誤)。 – 2009-11-30 21:44:18