Я пытаюсь скомпилировать код C ++. но я получаю ошибку на архитектуре power8. который отлично работает в архитектурах x86_64. ниже ошибка, которую я получаю.
error: impossible register constraint in 'asm'
: "a"(func));
^
Ниже приведен блок кода, где я получаю эту ошибку.
static INLINE void cpuid(int *dest, int func)
{
__asm__ volatile("cpuid": "=a"(dest[0]), "=b"(dest[1]), "=c"(dest[2]), "=d"(dest[3])
: "a"(func));
}
что-то не так в этом коде или я что-то упустил?
Или есть какой-нибудь другой способ получить идентификатор процессора?
Заранее спасибо!
Как уже упоминалось, cpuid
является инструкцией для процессоров x86-64 (AMD64 / EMT64) и более поздних версий x86 (IA32) и не имеет ничего общего с powerpc. Насколько я знаю, не существует эквивалента такой инструкции для powerpc (по крайней мере, не для непривилегированных инструкций), предписанной спецификацией powerpc, поэтому операционные системы имеют свои собственные подходы.
В некоторых системах, например, в вариантах BSD, это может быть так просто: sysctl <option>
Вы могли бы взглянуть на стратегии, используемые gcc
определить powerpc
а также power
версии процессора для разных операционные системы:
От текущего gcc-8.1.0
источник: driver-powerpcspe.c
, driver-rs6000.c
может предоставить некоторый код, который вы можете адаптировать.
Другим интересным источником может быть инфраструктура автоинструментов для Библиотека GMP; в частности, на высшем уровне config.guess
а также configure.ac
файлы.
Также: gcc -march=native -E -dM - < /dev/null
на хосте power [pc] можно разрешить поиск строки процессора и / или подтипа.
cpuid
это x86_64 вещь На Силе нет такого.