assembly 莱亚与MOV + INC用于递增一个变量并将其存储在另一个变量中?

w8rqjzmb  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(112)

这和你的

lea r12, [rsi + 1]

mov r12, rsi
inc r12

其中一个是否优于另一个(性能方面)?

5lwkijsr

5lwkijsr1#

莱亚的机器码更短,只有1个uop而不是2个,并且不依赖于mov-elimination(在Ice Lake上禁用),只有1个周期延迟。它在所有现有的微体系结构(https://uops.info//https://agner.org/optimize/)上都明显更好,这就是为什么编译器在编译int foo(int x){ return x+1; }时使用它
另请参阅Using LEA on values that aren't addresses / pointers?
并且重新计算微操作等等,一般来说,* What considerations go into predicting latency for operations on modern superscalar processors and how can I calculate them by hand? *
inc在桤木Lake E核心或其他Silvermont系列CPU上的效能会有轻微的降低,因为它会行程部分旗标。* INC instruction vs ADD 1: Does it matter? *
lea不影响FLAGS,这对周围的代码偶尔会有帮助。现代CPU每个周期可以重命名FLAGS的次数与管道宽度一样多,所以除了adc循环或其他特殊情况外,编写FLAGS通常不是问题。

相关问题