我在看這段代碼:找到第一位,使用BSF找到最後一位總成,BLF
http://lxr.free-electrons.com/source/arch/x86/include/asm/bitops.h
static inline unsigned long __ffs(unsigned long word) { asm("rep; bsf %1,%0" : "=r" (word) : "rm" (word)); return word; }
爲什麼會出現一個 「代表」,在BSF指令前面?爲什麼這不是__fls
?
有沒有性能優勢?如評論中所述,如果我們考慮針對不同的平臺進行編譯,返回值仍然是未定義的。 – w00d
是的,對於某些cpus可能會有性能優勢。根據Agner Fog的文檔,大多數AMD處理器對於'BSF'來說需要3或4個時鐘,但對於'TZCNT'來說只有2個時鐘。在英特爾Haswell,他們採取同一時間。 – Jester