Tag: 汇编

LEA指令的目的是什么?

对我来说,这只是一个时髦的MOV。 它的目的是什么?我什么时候可以使用它?

为什么GCC不能优化a * a * a * a * a到(a * a * a)*(a * a * a)?

我正在做一些科学应用的数值优化。 我注意到的一件事是GCC将通过编译成a*a来优化调用pow(a,2) ,但是调用pow(a,6)没有被优化,实际上会调用库函数pow ,这会大大减慢表现。 (相比之下, 英特尔C ++编译器 ,可执行icc ,将消除pow(a,6)的库调用pow(a,6) 。) 我很好奇的是,当我使用GCC 4.5.1和选项“ -O3 -lm -funroll-loops -msse4 ”替换pow(a,6)使用a*a*a*a*a*a 5 mulsd指示: movapd %xmm14, %xmm13 mulsd %xmm14, %xmm13 mulsd %xmm14, %xmm13 mulsd %xmm14, %xmm13 mulsd %xmm14, %xmm13 mulsd %xmm14, %xmm13 而如果我写(a*a*a)*(a*a*a) ,就会产生 movapd %xmm14, %xmm13 mulsd %xmm14, %xmm13 mulsd %xmm14, %xmm13 mulsd %xmm13, %xmm13 这将乘法指令的数量减少到3. icc具有相似的行为。 为什么编译器不能识别这个优化技巧?