Чтение 64-битного значения из сопроцессора на руку - PullRequest
1 голос
/ 11 мая 2019

Я пытаюсь прочитать переменную pmcntr из микросхемы arm (Cortex-A72).Я могу прочитать 32-битную версию следующим образом:

asm volatile ("mrc p15, 0, %0, c9, c13, 0" : "=r" (pmccntr));

Но я не уверен, как читать ее как 64-битную.В документации arm есть следующая таблица:

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 ...

1 Ответ

1 голос
/ 11 мая 2019

Я так понимаю, это связано с ... mrrc, но я не могу найти хорошую документацию о том, как они используются или чем они отличаются от mrc

Согласно справочному руководству ARMv8 , страницы 4102 и 4103, mrc используется для доступа к 32-битному системному (в старых архитектурах ARM: сопроцессор) регистре; согласно страницам 4104 и 4105, mrrc используется для доступа к 64-битному системному регистру.

Синтаксис: MRRC <coproc>, #<opc1>, <Rt>, <Rt2>, <CRm>, в то время как регистр ЦП <Rt> получит младшие 32 бита, а регистр ЦП <Rt2> получит старшие 32 бита 64-битного системного регистра.

Я так понимаю, это связано с mrc2 ...

Руководство ARMv8 случайно упоминает инструкцию mrc2, но не описывает эту инструкцию. Тем не менее, руководство ARMv7 делает:

Инструкция mrc2, по-видимому, предназначена для сторонних расширений, разработанных производителями полупроводников, которые производят микроконтроллеры с использованием ядра ARM.

Инструкции mrc2 будут работать только на микроконтроллере, который имеет такие расширения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...