环(英特尔参考文献人工输入)ECX/RCX递减,如果非零。虽然速度很慢,但英特尔不能便宜地让它跑得更快吗?dec/jnz
已经宏熔断为单个uop。在沙桥家族;唯一的区别是设置旗子。
loop
在不同的微体系结构上阿格纳·福格(氏)指令表:
难道解码器不能像lea rcx, [rcx-1]
/ jrcxz
?那将是3次。至少在没有地址大小前缀的情况下,它必须使用ecx
截断RIP
到EIP
如果跳下去了;也许控制减幅的地址大小的奇怪选择解释了为什么会有这么多uop?
或者更好的是,把它解码成一个不设置标志的融合的分叉?dec ecx
/ jnz
在SNB上,解码为单个uop(它确实设置了标志)。
我知道真正的代码不使用它(因为它一直缓慢从至少P5或什么),但AMD认为这是值得的,使它快速推土机。可能是因为这很容易。
如果loop
太快了,这将是完美的BigInteger任意精度adc
循环,以避免部分旗档/减速。(请参阅我对我的答案的评论),或任何其他情况下,您想要在不接触标志的情况下循环。与代码大小相比,它还具有较小的代码大小优势。dec/jnz
。(和dec/jnz
只有宏观保险丝对SNB-家庭)。
关于现代CPUdec/jnz
在ADC循环中没问题,loop
对于ADCX/ADOX循环(保留)来说还是不错的。
如果loop
如果是快速的,编译器将已经使用它作为一个窥视孔优化的代码大小+速度上的CPU,没有宏融合。
它也无法阻止我对所有使用错误16位代码的问题感到恼火loop
对于每个循环,即使当它们还需要在循环中另一个计数器时。但至少不会如坏的。