Как получить cpuid используя встроенную сборку в powerpc?

Я пытаюсь скомпилировать код 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));
}

что-то не так в этом коде или я что-то упустил?

Или есть какой-нибудь другой способ получить идентификатор процессора?

Заранее спасибо!

1

Решение

Как уже упоминалось, 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] можно разрешить поиск строки процессора и / или подтипа.

3

Другие решения

cpuid это x86_64 вещь На Силе нет такого.

1