我正在尝试从ARM芯片(Cortex-A72)芯片中读取pmcntr变量。我可以阅读以下32位版本:
asm volatile ("mrc p15, 0, %0, c9, c13, 0" : "=r" (pmccntr));
但是我不确定如何将其读取为64位。在arm documentation中,它具有下表:
0x0F8 c9 0 c13 0 PMCCNTR[31:0] RW 32-bit Performance Monitors Cycle Count Register a
0x0FC - - - - PMCCNTR[63:32]
- - 0 c9 - PMCCNTR[63:0] 64-bit
但是我不确定如何读取64位值。我认为它与mrc2
或mrrc
有关,但是我找不到关于它们如何使用或与mrc
有何不同的任何好的文档... < / p>
答案 0 :(得分:1)
我认为它与...
mrrc
有关,但是我找不到关于它们的使用方式或与mrc
的区别的良好文档。
根据ARMv8 reference manual,第4102和4103页,mrc
用于访问32位系统(在较旧的ARM体系结构中为协处理器)寄存器;根据第4104和4105页,mrrc
用于访问64位系统寄存器。
语法为:MRRC <coproc>, #<opc1>, <Rt>, <Rt2>, <CRm>
,而CPU寄存器<Rt>
将接收64位系统寄存器的低32位,而CPU寄存器<Rt2>
将接收64位系统寄存器的高32位。
我认为这与
有关mrc2
...
ARMv8手册偶然提到了mrc2
指令,但没有描述该指令。但是,ARMv7手册可以:
mrc2
指令似乎是针对由使用ARM内核生产微控制器的半导体制造商设计的第三方扩展。
mrc2
指令仅适用于具有此类扩展名的微控制器。