我只是注意到鏘編譯此語句(不使用任何優化,當然):86 ADDL VS subl
--x; /* int x; */
到:
addl $4294967295, %ecx ## imm = 0xFFFFFFFF
爲什麼?是否有使用addl
代替subl
「顯而易見」的任何優勢?還是僅僅是一個實現事實?
什麼名堂我是這一個:
x -= 1;
變爲:
subl $1, %eax
鏘信息:
Apple clang version 3.0 (tags/Apple/clang-211.12) (based on LLVM 3.0svn) Target: x86_64-apple-darwin11.2.0 Thread model: posix
這可能只是實施,並可以與優化級別更改。更重要的是有趣的是,它不使用'dec',這可能是一種優化,因爲'dec'不會改變儘可能多的狀態標誌,因此依賴於以前的指令。 – ughoavgfhw 2012-04-12 15:44:44
GCC產生相同碼兩個'X - '和'X = -1'使用'subl'。有趣的是,如果我啓用'-O3',它會使用'xorl'。 – 2012-04-12 15:49:28
沒有優勢,也沒有劣勢。兩者都是3個字節,並具有相同的性能特徵。 – harold 2012-04-12 16:05:37