On a Raspberry Pi 3b, which is ARM Cortex-A5 processor, ARMv7 architecture, I am reading the cycle counter registers from the PMU (Performance Monitor Unit):
uint32_t cycle_counter_read (void){ uint32_t cc = 0; __asm__ volatile ("mrc p15, 0, %0, c9, c13, 0":"=r" (cc)); return cc;}
uint32_t cycle_counter_read (void)
{
uint32_t cc = 0;
__asm__ volatile ("mrc p15, 0, %0, c9, c13, 0":"=r" (cc));
return cc;
}
I'd like to understand on which ARM processors will this code run successfully, other than the one in Raspberry Pi 3B.
Which ARM info is important for this:
Currently I have included this code only for ARMv7:
#if defined(PLATFORM_ARMV7)
cycle_counter_read();
#endif
Thanks.
Simply by checking the respective architecture manuals!
If your code is for Linux, you need to check Armv7-A, Armv8-A and Armv9-A.
I was hoping there is some other way, but it's good to know that R T F Manual is all there is to it.
Afaik there are registers that you can check at runtime if a special functionality is supported. So you can check if the PMU exists, but not the opcodes you need to access it.