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

Я пытаюсь скомпилировать код С++. но я получаю сообщение об ошибке на архитектуре 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));
}

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

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

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


person Satya Harish    schedule 11.05.2018    source источник
comment
идентификатор процессора. На самом деле инструкция CPUID позволяет получить МНОГО информации о x86, в зависимости от значения, указанного в «func». То, как вы обойдете это, зависит от того, какую информацию вы пытаетесь получить и что вы собираетесь с ней делать. Кроме того, этот вопрос можно считать обманом этого.   -  person David Wohlferd    schedule 11.05.2018


Ответы (2)


Как уже упоминалось, 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 может содержать некоторый код, который вы можете адаптировать.

Еще одним интересным источником может быть инфраструктура autotools для библиотеки GMP; в частности, файлы config.guess и configure.ac верхнего уровня.


Также: gcc -march=native -E -dM - < /dev/null на хосте power[pc] может позволить вам выполнить поиск ЦП и/или строки подтипа.

person Brett Hale    schedule 11.05.2018

cpuid — это x86_64. В Power такого нет.

person Jesper Juhl    schedule 11.05.2018
comment
Спасибо за ответ @jesper. если во Власти такого нет, то как будут решаться такого рода проблемы. мы просто игнорируем их или любые другие обходные пути? - person Satya Harish; 11.05.2018
comment
Как это обрабатывается, зависит от того, что вы делаете. Если целью программы является вывод информации о ЦП, то игнорирование, вероятно, не является правильным ответом. См. также это. - person David Wohlferd; 11.05.2018