2013-03-13 70 views
0

我一直在羨慕地把inline assembler放到GCC編譯的代碼中,我想知道你是否可以用Clang做類似的事情?例如有一些方法,我可以完成一個函數的定義與LLVM assembler你可以內嵌C編譯的LLVM位碼嗎?

int add_two_ints(int a, int b) { 
    /* 
    * some bitcode stuff goes here to add 
    * the ints and return the result 
    */ 
} 

任何引用,或代碼來完成上面的例子將是巨大的。

+0

* bitcode *是什麼? – 2013-03-13 14:47:01

+0

您是否想要物理CPU的內聯彙編程序或「內聯LLVM IR」?內聯彙編代表前者,但代碼片段指示後者。 – delnan 2013-03-13 14:48:44

+0

看來我的術語錯了。解決問題。 – brooks94 2013-03-13 15:31:40

回答

0

鐺支持內聯彙編,包括在聲明輸入,輸出GCC的擴展和破壞的寄存器:

int add_two_ints(int a, int b) { 
    int result; 
    asm("addl %1, %2;" 
     "movl %2, %0;" 
     : "=r"(result) 
     : "r"(a), "r"(b) 
     :); 
    return result; 
} 

鏘也對微軟的__asm { }語法和英特爾的風格裝配實驗支持。

它不支持在C或C++源代碼中包含LLVM-IR。由於行內彙編通常用於訪問特殊指令,並且LLVM-IR不支持這種功能,因此這種功能在很大程度上只是一種新穎之處。

+3

至少,LLVM-IR允許訪問內在函數,顯式對齊註釋和元數據(並且這些都不可以從C獲得),所以這樣的功能會很有用。 – 2013-03-20 17:26:58

相關問題