使用LEA进行gcc优化

这个问题在这里已经有了答案:

  • LEA指令的目的是什么? 14个答案

  • lea (%ebx, %esi, 2), %edi只是计算ebx + esi*2并将结果存储在edi

    即使lea被设计为计算和存储有效地址,它也可以被用作优化技巧来对非内存地址进行计算。

    lea    (%rdi,%rdi,2),%eax
    shl    $0x7,%eax
    

    相当于:

    eax = rdi + rdi*2;
    eax = eax * 128;
    

    由于moordi ,它将moo*384存储在eax


    这是x86内核的标准优化技巧。 AGU地址生成单元是生成地址的处理器的子部分,能够进行简单的算术运算。 它不是一个完整的ALU,但有足够的晶体管来计算索引和缩放地址。 添加和移位。 LEA,Load Load Address指令是调用AGU中的逻辑并计算简单表达式的一种方法。

    这里的优化机会是AGU独立于ALU运行。 所以你可以得到超标量执行,同时执行两条指令。

    这实际上并不在你的代码片段中发生,但是如果在显示的需要ALU的指令之前进行了计算,则可能发生这种情况。 这是一个诀窍,只有在更简单的cpu核心,486和奔腾年份上才真正实现。 现代处理器有多个ALU,所以不再需要这个技巧。

    链接地址: http://www.djcxy.com/p/72363.html

    上一篇: gcc optimisation with LEA

    下一篇: What is the line using leal do?