Как узнать, поддерживает ли процессор ARMv8 состояние выполнения AArch32?

#assembly #arm #arm64 #armv8

#сборка #рука #арм64 #armv8

Вопрос:

В справочном руководстве по архитектуре ARMv8 перечислены мили специальных регистров, некоторые из которых позволяют программисту определять доступность функций процессора во время выполнения.

Существует ли такой регистр, сообщающий программисту, поддерживается ли состояние выполнения AArch32? Одна вещь ID_PFR0_EL1 , которую я нашел, — это информация о том, какие варианты набора команд AArch32 поддерживаются, но, похоже, в ней не указано, поддерживается ли набор команд вообще.

Какой регистр или другую вещь я ищу?

Ответ №1:

Вы ищете ID_AA64PFR0_EL1 .

Из руководства, страница D13-3253:

Скриншот

И да, есть процессоры ARMv8, которые вообще не поддерживают AArch32. Примером является Apple A11 и более поздние версии.

Комментарии:

1. Спасибо! Должно быть, я пропустил это. Итак, я предполагаю, что Apple M1 его тоже не поддерживает?

2. Я вижу, что процессор, не относящийся к AArch32, будет иметь 0000 или 0001 во всех четырех вариантах.

3. @fuz У меня не было возможности сбросить этот регистр на M1, но я сильно предполагаю, что это так.

4. @Siguza Я только что пробовал, но, похоже, macOS Big Sur не позволяет вам считывать этот регистр из пользовательского процесса. Довольно облом.

5. @Siguza FreeBSD на самом деле поддерживает.