2017-02-18 96 views
1

我想申請一個算法,採用寄存器R0, R1,...,Rn通過LLVM IR控制x86寄存器?

在這種情況下,我想要控制的是這些寄存器被賦值的順序。

在LLVM IR級可以控制寄存器,還是IR屏蔽掉這些低級細節?

+0

它內聯彙編是可能的,這可能不是你想要的。 IR在這方面比裝配水平更高C級。 – Joky

+0

什麼方法調用可用於內聯彙編? – Shuzheng

+0

我不明白這個問題嗎? – Joky

回答

0

您可以在新版本的llvm上使用llvm.read_register和llvm.write_register。

如果你想有一個很好的例子,嘗試創建一個全局變量,像這樣:

register void *rsp asm("rsp"); 

然後嘗試用printf的打印。與-S -emit,LLVM編譯簡單的C程序,你可以看到llvm.read_register用於

%4 = call i64 @llvm.read_register.i64(metadata !0) 

,並在文件,你會看到元數據索引0的底部是:

!0 = !{!"rsp"} 
+0

但是不會變成'mov rax,rsp'什麼的?它不允許你控制寄存器'%4'的存儲位置。 –

+0

這並不總是正確的,但即使它不是優化器肯定會引起問題。內聯彙編可能是實現OP特別想要的最好方法 – keyboardsmoke