其实这篇文章的初衷是分析alpha架构下和arm架构下,为什么相同的用例arm生成的汇编指令会少一些,由于工作的保密性,暂时不介绍alpha生成的指令,因此先来主要分析一下,arm架构之所以少生成汇编指令的原因——adrp指令。
环境依然是ARM架构下的gcc编译器,编译选项为 -O2。
4.Adrp指令
再来看一下arm编译器中的adrp指令
在了解adrp指令之前,首先要了解adr指令。以下是arm白皮书中对PC相关地址的计算描述——
ADR
作用:小范围的地址读取指令。ADR 指令将基于PC 相对偏移的地址值读取到寄存器中。
原理:将有符号的21位的偏移,加上PC, 结果写入到通用寄存器,可用来计算 +/- 1MB范围的任意字节的有效地址。
ADRP