Как получить cpuid используя встроенную сборку в powerpc? - PullRequest
0 голосов
/ 11 мая 2018

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

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

0 голосов
/ 11 мая 2018

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

...