由于一些原因,又摸起了汇编。
今天歪想了一阵子,拿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程序让它生成呢?类似这样的高效指令还挺多,不知道有没有一种规则,依据这种规则就能生成对应的高效机器码。。