2015-10-16 35 views

回答

5

這是在支持它的處理器上將bfs變成tzcnt的黑客攻擊。不過,它肯定會在代碼中保留一條評論。引述的指令集參考:

0F BC/R BSF R32,R/M32

F3 0F BC/R TZCNT R32,R/M32

TZCNT計數後至少顯著的數量源操作數(第二個操作數)的 中的零位,並返回目標操作數 中的結果(第一個操作數)。 TZCNT是BSF指令的擴展。 TZCNT和BSF指令的關鍵區別在於,TZCNT 在源操作數爲0時提供操作數大小作爲輸出,而在 BSF指令的情況下,如果源操作數爲0,則目標操作數的內容未定義。在不支持 TZCNT的處理器上,指令字節編碼作爲BSF執行。

(該REP前綴是當然的F3。)

+0

有沒有性能優勢?如評論中所述,如果我們考慮針對不同的平臺進行編譯,返回值仍然是未定義的。 – w00d

+3

是的,對於某些cpus可能會有性能優勢。根據Agner Fog的文檔,大多數AMD處理器對於'BSF'來說需要3或4個時鐘,但對於'TZCNT'來說只有2個時鐘。在英特爾Haswell,他們採取同一時間。 – Jester

相關問題