![](/img/trans.png)
[英]Is it possible to prohibit the use of certain registers for a small snippet of C++ code?
[英]Is it possible to tell clang which registers to use for certain parts of the code without using assembly
我正在開發一個項目,要求它在Linux和Windows上運行。
但是,由於clang
和msvc
下的寄存器不同,有些代碼在Linux上不起作用。
有沒有辦法讓寄存器使用一致或請求clang
在操作期間使用特定的寄存器? 我想找到一個不涉及重寫匯編部分的解決方案。 以下是我所說的不同輸出代碼。
任何幫助表示贊賞。
編輯每條評論:
這適用於仿真器,因此某些寄存器用於某些任務。 其中一個主要的事情是我們將RSI用於某個變量,然后clang在函數調用中使用RSI。 編譯的MSVC不會遇到同樣的問題。
編輯2每條評論:
這是針對xbox 360模擬器Xenia的。
我們目前正在嘗試完成Linux方面的事情。 但是,我們遇到了clang使用相同寄存器進行函數調用的問題,就像我們用來存儲一個叫做上下文的東西一樣。
我們的想法是要求clang不要使用那個特定的寄存器,但是如果不在Assembly中編寫它就找不到辦法。 該解決方案的另一個問題是gcc
在不同的寄存器上也可能存在相同的問題。 具體來說,我們正在研究ppc測試。 以上鏈接是clang與msvc相比的輸出。
這是相關代碼:
rsi
不能在linux上用於您自己的目的,因為它在函數調用約定psABI-x86_64中使用
但是,如果您可以使用其他寄存器作為使用Gcc編譯的r10
代碼,並且選項-ffixed-r10
將不使用r10
( 演示 )。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.