Spec-Zone.ru › GCC 9

6.60.21.1 Основные встроенные функции PowerPC, доступные во всех конфигурациях

Встроенная функция: void __builtin_cpu_init (void)

Эта функция является nop на платформе PowerPC и включена только для сохранения совместимости API со встроенными функциями x86.

Встроенная функция: int __builtin_cpu_is (const char *cpuname)

Эта функция возвращает значение 1 , если процессор во время выполнения имеет тип cpuname, и возвращает 0 в противном случае.

Функция __builtin_cpu_is требует GLIBC 2.23 или новее, которая экспортирует биты возможностей оборудования. GCC определяет макрос __BUILTIN_CPU_SUPPORTS__ , если встроенная функция __builtin_cpu_supports полностью поддерживается.

Если GCC был сконфигурирован для использования GLIBC до версии 2.23, встроенная функция __builtin_cpu_is всегда возвращает 0, и компилятор выдает предупреждение.

Следующие имена процессоров могут быть определены:

‘power9’

Процессор IBM POWER9 Server.

‘power8’

Процессор IBM POWER8 Server.

‘power7’

Процессор IBM POWER7 Server.

‘power6x’

Процессор IBM POWER6 Server (режим RAW).

‘power6’

Процессор IBM POWER6 Server (режим архитектуры).

‘power5+’

Процессор IBM POWER5+ Server.

‘power5’

Процессор IBM POWER5 Server.

‘ppc970’

Процессор IBM 970 Server (например, Apple G5).

‘power4’

Процессор IBM POWER4 Server.

‘ppca2’

Встраиваемый 64-битный процессор IBM A2.

‘ppc476’

Встраиваемый 32-битный процессор IBM PowerPC 476FP.

‘ppc464’

Встраиваемый 32-битный процессор IBM PowerPC 464.

‘ppc440’

Встраиваемый 32-битный процессор PowerPC 440.

‘ppc405’

Встраиваемый 32-битный процессор PowerPC 405.

‘ppc-cell-be’

Процессор IBM PowerPC Cell Broadband Engine Architecture.

Вот пример:

#ifdef __BUILTIN_CPU_SUPPORTS__
  if (__builtin_cpu_is ("power8"))
    {
       do_power8 (); // POWER8 specific implementation.
    }
  else
#endif
    {
       do_generic (); // Generic implementation.
    }
Встроенная функция: int __builtin_cpu_supports (const char *feature)

Эта функция возвращает значение 1 , если процессор во время выполнения поддерживает функцию HWCAP feature, и возвращает 0 в противном случае.

Функция __builtin_cpu_supports требует GLIBC 2.23 или новее, которая экспортирует биты возможностей оборудования. GCC определяет макрос __BUILTIN_CPU_SUPPORTS__ , если встроенная функция __builtin_cpu_supports полностью поддерживается.

Если GCC был сконфигурирован для использования GLIBC до версии 2.23, встроенная функция __builtin_cpu_suports всегда возвращает 0, и компилятор выдает предупреждение.

Следующие функции могут быть определены:

‘4xxmac’

Процессор 4xx имеет блок умножения-складывания.

‘altivec’

Процессор имеет блок SIMD/векторных вычислений.

‘arch_2_05’

Процессор поддерживает ISA 2.05 (например, POWER6).

‘arch_2_06’

Процессор поддерживает ISA 2.06 (например, POWER7).

‘arch_2_07’

Процессор поддерживает ISA 2.07 (например, POWER8).

‘arch_3_00’

Процессор поддерживает ISA 3.0 (например, POWER9).

‘archpmu’

Процессор поддерживает набор совместимых событий мониторинга производительности.

‘booke’

Процессор поддерживает категорию встроенной ISA.

‘cellbe’

Процессор имеет ядро CELL broadband engine.

‘darn’

Процессор поддерживает инструкцию darn (возвращение случайного числа).

‘dfp’

Процессор имеет десятичный блок с плавающей точкой.

‘dscr’

Процессор поддерживает регистр управления потоком данных.

‘ebb’

Процессор поддерживает ветвление с использованием базы событий.

‘efpdouble’

Процессор имеет блок SPE с двойной точностью.

‘efpsingle’

Процессор имеет блок SPE с одинарной точностью.

‘fpu’

Процессор имеет блок с плавающей точкой.

‘htm’

Процессор имеет инструкции транзакционной памяти.

‘htm-nosc’

Ядро прерывает транзакции оборудования при выполнении системного вызова.

‘htm-no-suspend’

Процессор поддерживает транзакционную память, но не поддерживает инструкцию tsuspend..

‘ic_snoop’

Процессор поддерживает возможности прослушивания кэша инструкций.

‘ieee128’

Процессор поддерживает 128-битные инструкции IEEE двоичной арифметики с плавающей точкой.

‘isel’

Процессор поддерживает инструкцию выбора целых чисел.

‘mmu’

Процессор имеет блок управления памятью.

‘notb’

Процессор не имеет тайм-базы (например, 601 и 403gx).

‘pa6t’

Процессор поддерживает ISA PA Semi 6T CORE.

‘power4’

Процессор поддерживает ISA 2.00 (например, POWER4).

‘power5’

Процессор поддерживает ISA 2.02 (например, POWER5).

‘power5+’

Процессор поддерживает ISA 2.03 (например, POWER5+).

‘power6x’

Процессор поддерживает ISA 2.05 (например, POWER6) с расширенными инструкциями mffgpr и mftgpr.

‘ppc32’

Процессор поддерживает выполнение в 32-битном режиме.

‘ppc601’

Процессор поддерживает старую архитектуру POWER (например, 601).

‘ppc64’

Процессор поддерживает выполнение в 64-битном режиме.

‘ppcle’

Процессор поддерживает режим little-endian с использованием перестановки адресов.

‘scv’

Ядро поддерживает системные вызовы с вектором.

‘smt’

Процессор поддерживает одновременное многопоточное выполнение.

‘spe’

Процессор имеет блок расширения для обработки сигналов.

‘tar’

Процессор поддерживает целевой адресной регистр.

‘true_le’

Процессор поддерживает режим true little-endian.

‘ucache’

Процессор имеет объединенный кэш данных и инструкций.

‘vcrypto’

Процессор поддерживает векторные криптографические инструкции.

‘vsx’

Процессор поддерживает расширение векторно-скалярных вычислений.

Вот пример:

#ifdef __BUILTIN_CPU_SUPPORTS__
  if (__builtin_cpu_supports ("fpu"))
    {
       asm("fadd %0,%1,%2" : "=d"(dst) : "d"(src1), "d"(src2));
    }
  else
#endif
    {
       dst = __fadd (src1, src2); // Software FP addition function.
    }

Следующие встроенные функции также доступны на всех процессорах PowerPC:

uint64_t __builtin_ppc_get_timebase ();
unsigned long __builtin_ppc_mftb ();
double __builtin_unpack_ibm128 (__ibm128, int);
__ibm128 __builtin_pack_ibm128 (double, double);
double __builtin_mffs (void);
void __builtin_mtfsb0 (const int);
void __builtin_mtfsb1 (const int);
void __builtin_set_fpscr_rn (int);

Функции __builtin_ppc_get_timebase и __builtin_ppc_mftb генерируют инструкции для чтения регистра Time Base. Функция __builtin_ppc_get_timebase может генерировать несколько инструкций и всегда возвращает 64 бита регистра Time Base. Функция __builtin_ppc_mftb всегда генерирует одну инструкцию и возвращает значение регистра Time Base как целое без знака long, отбрасывая наиболее значимое слово в 32-битных средах. Функция __builtin_mffs возвращает значение регистра FPSCR. Обратите внимание, что ISA 3.0 поддерживает __builtin_mffsl(), что позволяет программному обеспечению читать управляющие и не-устойчивые статусные биты в FPSCR без более высокой задержки, связанной с доступом к устойчивым статусным битам. Функции __builtin_mtfsb0 и __builtin_mtfsb1 принимают изменяемый бит в качестве аргумента. Допустимый диапазон битов находится между 0 и 31. Встроенные функции соответствуют инструкциям mtfsb0 и mtfsb1, которые принимают аргумент и добавляют 32. Таким образом, эти инструкции изменяют только биты FPSCR[32:63], соответственно устанавливая указанный бит в ноль или единицу. Встроенная функция __builtin_set_fpscr_rn позволяет изменять оба бита режима округления с плавающей точкой. Аргументом является 2-битное значение. Аргумент может быть либо const int, либо храниться в переменной. Встроенная функция использует инструкцию ISA 3.0 mffscrn, если она доступна; в противном случае она читает FPSCR, маскирует текущие биты режима округления и выполняет операцию OR с новым значением.

Далее: Основные встроенные функции PowerPC, доступные в ISA 2.05, Назад: Основные встроенные функции PowerPC [Содержание][Индекс]

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-9.5.0/gcc/Basic-PowerPC-Built-in-Functions-Available-on-all-Configurations.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API