[英]How to call C inline assembly asm in cython?
如何在cython中調用C語言的內聯匯編函數asm()
? 我嘗試了一個簡單的asm("mov $eax, 0x1") or __asm__()
。 它在asm
調用之前很好地處理,然后給我以下錯誤:
NameError: 名稱 'asm' 未定義
我將我的代碼編譯為python setup.py build_ext --inplace && python runids.py
無法直接從 Cython 調用匯編程序。 你能做的最好的事情是將asm
包裝在一個 C 函數中並從 Cython 調用它 - 例如使用像這樣的逐字 C 代碼(這里是 gcc):
%%cython
cdef extern from *:
"""
void inline_asm_fun(void){
__asm__("mov $1, %%eax" ::: "eax");
}
"""
void inline_asm_fun()
def use_inline_asm():
inline_asm_fun()
正如@PeterCordes 指出的那樣,要在內聯匯編程序中做一些有用的事情,應該使用擴展 asm ,即__asm__("mov $1, %%eax" ::: "eax")
而不是簡單__asm__("mov $1, %eax")
安全的__asm__("mov $1, %eax")
。 后者會修改%eax
而不通知編譯器。
對於 MVSC,內聯匯編器的非標准擴展是__asm
但它僅支持 x86 而不是 x64。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.