Spec-Zone.ru › GCC 11

Далее: Основные встроенные функции 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’

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

‘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 бит. Аргумент может быть как 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-11.4.0/gcc/Basic-PowerPC-Built-in-Functions-Available-on-all-Configurations.html

Spec-Zone.ru

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