2011-10-03 86 views
1

爲了測試性能,我已經給了一個任務來將小塊asm轉換爲內在。 我從來沒有開發任何一個代碼,但我理解asm和c,並閱讀內在的語法。但我無法找到有關內存訪問寄存器的信息。我發現2個功能:將內聯ASM轉換爲內部

getReg()和setReg()

getReg()帶有不同的寄存器表的表和他們的ID /數: - 通用整數寄存器 - 應用寄存器 - 控制寄存器 - 間接寄存器 但他們都沒有對應像rax,rdi等asm寄存器。

我該如何處理寄存器,例如rcx,rdi等等? 或者換句話說我如何轉換這一點:

MOV%0%RCX

內在相同呢?

回答

4

您錯過了內在點 - 在使用內在函數時(在某些情況下可能訪問特殊寄存器的情況除外),您不必擔心寄存器分配問題。總的想法是讓編譯器爲您處理所有這種低級別的管家工作。要將原始asm移植到內部函數,首先需要對asm代碼進行反向工程,以便了解它的意圖,然後使用內在函數重新實現等效代碼。如果你發佈了一些實際的代碼,那麼你可能會得到更具體的建議。

+0

非常感謝,我很關心性能,因爲內在的和ASM將基準,看看他們的表現如何。 – GoTTimw

+0

使用intrinsics編寫的代碼應該與原始asm一樣快,並且在某些情況下可能會更快,因爲編譯器通常可以比人類更好地執行指令調度和寄存器分配。 –