ARM过程返回性能

时间:2017-10-31 16:59:01

标签: arm armv7 thumb

我正在对Thumb2可执行文件进行二进制检测,我注意到在我的一些基准测试中,检测的二进制文件比原始文件执行得更好(非常奇怪,因为我的仪器添加了更多的代码来执行)。

考虑到这种异常现象,我得出的结论是,性能差异是由我处理程序返回的不同方式引起的。在原始可执行文件中,大多数返回都是用

处理的
pop {..., pc}

在我的仪器之后,这些被翻译为

pop {..., lr}
...
bx lr

因为我需要使用返回地址进行一些计算。

我能够通过一个简单的程序进一步测试这种行为,该程序调用子程序100万次,pop {lr}; bx lr执行速度比pop {pc}快49%(这是巨大的)。

所有测试均在运行Marvell Armada XP四核ARMv7 SoC的Scaleway C1 Baremetal Server上完成。

有人对此有解释吗?

修改

服务器运行Ubuntu 16.04。以下是我的测试的源代码:popcptestbxlrtest。对于编译,我使用GCC Linaro版本5.4.0和默认设置。

0 个答案:

没有答案