Spec-Zone.ru › GCC 13

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

Процессор поддерживает старую ISA 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_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 всегда генерирует одну инструкцию и возвращает значение регистра тайм-базы как целое без знака, отбрасывая старший разряд в 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 бит. Аргумент может быть константой или храниться в переменной. Встроенная функция использует инструкцию ISA 3.0 mffscrn, если она доступна, в противном случае она считывает FPSCR, маскирует текущие биты режима округления и выполняет операцию OR с новым значением.

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

Spec-Zone.ru

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