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