正如前面提到的,ARM通常使用前四个寄存器(R0-R4)传递前四个值。

    f()函数使用了前三个寄存器(R0-R2)作为参数。

    一条指令完成乘法和加法4,如果不包括SIMD新的FMA指令5,通常x86下没有这样的指令。

    第一条指令MOV R3,R0,看起来冗余是因为该代码是非优化的。

    这里f()编译时使用完全优化模式(-O3),MOV指令被优化,现在MLA使用所有输入寄存器并将结果置入R0寄存器。

    Thumb模式下没有MLA指令,编译器做了两次间接处理,MULS指令使R0寄存器的值与R1寄存器的值相乘并将结果存入R0。ADDS指令将R0与R2的值相加并将结果存入R0。