We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
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.