簡體   English   中英

是否有可能告訴clang哪些寄存器用於代碼的某些部分而不使用匯編

[英]Is it possible to tell clang which registers to use for certain parts of the code without using assembly

我正在開發一個項目,要求它在Linux和Windows上運行。
但是,由於clangmsvc下的寄存器不同,有些代碼在Linux上不起作用。

有沒有辦法讓寄存器使用一致或請求clang在操作期間使用特定的寄存器? 我想找到一個不涉及重寫匯編部分的解決方案。 以下是我所說的不同輸出代碼。

https://godbolt.org/z/DO9pQN

任何幫助表示贊賞。

編輯每條評論:
這適用於仿真器,因此某些寄存器用於某些任務。 其中一個主要的事情是我們將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.

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