Spec-Zone.ru › GCC 12

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 если процессор во время выполнения поддерживает функцию HWCAP feature, и возвращает 0 в противном случае.

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

Если GCC был сконфигурирован для использования GLIBC до версии 2.23, встроенная функция __builtin_cpu_supports всегда возвращает 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’

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

‘ppc64’

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

‘ppcle’

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

‘scv’

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

‘smt’

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

‘spe’

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

‘tar’

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

‘true_le’

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

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

Spec-Zone.ru

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