簡體   English   中英

在GCC中使用嵌入式ARM匯編時優化使用的寄存器

[英]Optimizing used registers when using inline ARM assembly in GCC

我想在我的C代碼中編寫一些內聯ARM程序集。 對於此代碼,我需要使用一個或兩個以上的寄存器,而不僅僅是聲明為該函數的輸入和輸出的寄存器。 我知道如何使用清單列表告訴GCC我將使用一些額外的寄存器來進行計算。

但是,我確信,GCC可以自由地進行改組,以優化時使用哪些寄存器。 也就是說,我覺得使用固定寄存器進行計算是個壞主意。

在不使用固定寄存器的情況下,使用既不是行內程序集的輸入也不輸出的額外寄存器的最佳方法是什么?

PS我當時以為使用偽輸出變量可能會解決問題,但是我不確定其他什么樣的效果會產生...

好的,我找到了一個支持使用虛擬輸出而不是硬寄存器的想法的源:

4.8臨時寄存器:人們有時也會錯誤地將clobbers用於臨時寄存器。 正確的方法是組成一個虛擬輸出,並根據允許的輸入重疊使用“ = r”或“ =&r”。 GCC為虛擬值分配一個寄存器。 區別在於,GCC可以選擇一個方便的寄存器,因此具有更大的靈活性。

摘自 pdf第20頁。

對於對GCC內聯匯編的更多信息感興趣的任何人, 網站都非常有啟發性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM