由于一些原因,又摸起了匯編。
今天歪想了一陣子,拿gcc生成的代碼看了一下,結果發現它生成的代碼跟我寫的對應的匯編代碼幾乎一樣,除了順序稍有差別以外。
不知道編譯罵依據什么規則來生成那些優化代碼的,比如:
if (n > 7)
n = 5;
如果不打開sse,生成的代碼會生成這樣的代碼:
cmpl $7, %ecx
jle .L6
movl $5, %ecx
.L6:
打開sse,生成代碼如下:
cmpl $7, %ecx
cmovl $5, %ecx
這種簡單點的比較容易想,復雜的比如bswap指令,怎么寫c程序讓它生成呢?類似這樣的高效指令還挺多,不知道有沒有一種規則,依據這種規則就能生成對應的高效機器碼。。