Spec-Zone.ru › GCC 10

Следующая: Основные встроенные функции PowerPC, доступные в ISA 2.05, Вверх: Основные встроенные функции PowerPC [Содержание][Индекс]

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

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

‘power10’

Процессор IBM POWER10.

‘power9’

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

‘power8’

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

‘power7’

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

‘power6x’

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

‘power6’

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

‘power5+’

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

‘power5’

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

‘ppc970’

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

‘power4’

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

‘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.

Вот пример:

#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 , если процессор во время выполнения поддерживает аппаратную возможность 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).

‘arch_3_1’

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

‘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’

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

‘mma’

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

‘mmu’

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

‘notb’

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

‘pa6t’

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

‘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’

Процессор имеет унифицированный кэш I/D.

‘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_mtfsf (const int, double);
void __builtin_mtfsb0 (const int);
void __builtin_mtfsb1 (const int);
void __builtin_set_fpscr_rn (int);

Функции __builtin_ppc_get_timebase и __builtin_ppc_mftb генерируют инструкции для чтения регистра базового времени. Функция __builtin_ppc_get_timebase может генерировать несколько инструкций и всегда возвращает 64 бита регистра базового времени. Функция __builtin_ppc_mftb всегда генерирует одну инструкцию и возвращает значение регистра базового времени как unsigned long, отбрасывая старшее слово в 32-битных средах. Функция __builtin_mffs возвращает значение регистра FPSCR. Обратите внимание, что ISA 3.0 поддерживает __builtin_mffsl(), что позволяет программному обеспечению считывать управляющие и нелипкие биты состояния в FPSCR без задержек, связанных с доступом к липким битам состояния. Функция __builtin_mtfsf принимает постоянную маску поля целого 8-битного числа и аргумент двойной точности с плавающей запятой и генерирует инструкцию mtfsf (расширенное мнемокод) для записи новых значений в выбранные поля 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-10.5.0/gcc/Basic-PowerPC-Built-in-Functions-Available-on-all-Configurations.html

Spec-Zone.ru

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