6.4.1.24 Атрибуты функций PowerPC
В бэкенде PowerPC поддерживаются следующие атрибуты функций:
-
longcall shortcall-
Атрибут
longcallуказывает, что функция может находиться далеко от места вызова, и для неё может потребоваться другая, более затратная последовательность вызова. Атрибутshortcallуказывает, что функция всегда находится достаточно близко, чтобы можно было использовать более короткую последовательность вызова. Эти атрибуты переопределяют как параметр -mlongcall, так и настройку#pragma longcall.Дополнительные сведения о необходимости длинных вызовов см. в разделе Параметры IBM RS/6000 и PowerPC.
-
target (options) -
Как описано в разделе Общие атрибуты функций, этот атрибут позволяет задавать параметры компиляции, зависящие от целевой платформы.
Для PowerPC разрешены следующие параметры:
- ‘altivec’
- ‘no-altivec’
-
Генерировать код, использующий (не использующий) инструкции AltiVec. В 32-разрядном коде нельзя включить инструкции AltiVec, если в командной строке не указан параметр -mabi=altivec.
- ‘cmpb’
- ‘no-cmpb’
-
Генерировать код, использующий (не использующий) инструкцию сравнения байтов, реализованную в процессоре POWER6 и других процессорах, поддерживающих архитектуру PowerPC V2.05.
- ‘dlmzb’
- ‘no-dlmzb’
-
Генерировать код, использующий (не использующий) инструкцию поиска в строке ‘dlmzb’ в процессорах IBM 405, 440, 464 и 476. При выборе этих процессоров эта инструкция генерируется по умолчанию.
- ‘fprnd’
- ‘no-fprnd’
-
Генерировать код, использующий (не использующий) инструкции округления числа с плавающей точкой до целого, реализованные в процессоре POWER5+ и других процессорах, поддерживающих архитектуру PowerPC V2.03.
- ‘hard-dfp’
- ‘no-hard-dfp’
-
Генерировать код, использующий (не использующий) инструкции десятичной арифметики с плавающей точкой, реализованные в некоторых процессорах POWER.
- ‘isel’
- ‘no-isel’
-
Генерировать код, использующий (не использующий) инструкцию ISEL.
- ‘mfcrf’
- ‘no-mfcrf’
-
Генерировать код, использующий (не использующий) инструкцию перемещения из поля регистра условий, реализованную в процессоре POWER4 и других процессорах, поддерживающих архитектуру PowerPC V2.01.
- ‘mulhw’
- ‘no-mulhw’
-
Генерировать код, использующий (не использующий) инструкции умножения половинных слов и умножения с накоплением в процессорах IBM 405, 440, 464 и 476. При выборе этих процессоров данные инструкции генерируются по умолчанию.
- ‘multiple’
- ‘no-multiple’
-
Генерировать код, использующий (не использующий) инструкции множественной загрузки слов и множественного сохранения слов.
- ‘update’
- ‘no-update’
-
Генерировать код, использующий (не использующий) инструкции загрузки или сохранения, которые обновляют базовый регистр адресом вычисленного местоположения в памяти.
- ‘popcntb’
- ‘no-popcntb’
-
Генерировать код, использующий (не использующий) инструкцию подсчёта единичных битов и инструкцию оценки обратного значения числа с плавающей точкой двойной точности, реализованные в процессоре POWER5 и других процессорах, поддерживающих архитектуру PowerPC V2.02.
- ‘popcntd’
- ‘no-popcntd’
-
Генерировать код, использующий (не использующий) инструкцию подсчёта единичных битов, реализованную в процессоре POWER7 и других процессорах, поддерживающих архитектуру PowerPC V2.06.
- ‘powerpc-gfxopt’
- ‘no-powerpc-gfxopt’
-
Генерировать код, использующий (не использующий) дополнительные инструкции архитектуры PowerPC из группы Graphics, включая инструкцию выбора числа с плавающей точкой.
- ‘powerpc-gpopt’
- ‘no-powerpc-gpopt’
-
Генерировать код, использующий (не использующий) дополнительные инструкции архитектуры PowerPC из группы General Purpose, включая инструкцию вычисления квадратного корня числа с плавающей точкой.
- ‘recip-precision’
- ‘no-recip-precision’
-
Предполагать (не предполагать), что инструкции оценки обратного значения обеспечивают более высокую точность, чем требуется ABI PowerPC.
- ‘string’
- ‘no-string’
-
Генерировать код, использующий (не использующий) инструкции загрузки строк и сохранения слов строки для сохранения нескольких регистров и перемещения небольших блоков.
- ‘vsx’
- ‘no-vsx’
-
Генерировать код, использующий (не использующий) векторные/скалярные инструкции (VSX), а также разрешить использование встроенных функций, обеспечивающих более прямой доступ к набору инструкций VSX. В 32-разрядном коде нельзя включить инструкции VSX или AltiVec, если в командной строке не указан параметр -mabi=altivec.
- ‘friz’
- ‘no-friz’
-
Генерировать (не генерировать) инструкцию
friz, если для оптимизации округления значения с плавающей точкой до 64-разрядного целого числа с последующим преобразованием обратно в число с плавающей точкой используется параметр -funsafe-math-optimizations. Инструкцияfrizне возвращает то же значение, если число с плавающей точкой слишком велико, чтобы поместиться в целое число. - ‘avoid-indexed-addresses’
- ‘no-avoid-indexed-addresses’
-
Генерировать код, который старается избегать (не избегает) использования индексированных инструкций загрузки и сохранения.
- ‘paired’
- ‘no-paired’
-
Генерировать код, использующий (не использующий) генерацию SIMD-инструкций PAIRED.
- ‘longcall’
- ‘no-longcall’
-
Генерировать код, предполагающий (не предполагающий), что все вызовы выполняются на большом расстоянии и поэтому требуют более длинной и затратной последовательности вызова.
- ‘cpu=CPU’
-
Задать архитектуру, для которой следует генерировать код при компиляции функции. Если при генерации 32-разрядного кода выбрать атрибут
target("cpu=power7"), инструкции VSX и AltiVec не генерируются, если в командной строке не указан параметр -mabi=altivec. - ‘tune=TUNE’
Задать архитектуру, для которой следует оптимизировать код при компиляции функции. Если атрибут
target("tune=TUNE")не указан, а атрибутtarget("cpu=CPU")указан, компиляция оптимизируется для архитектуры CPU, а не для настройки по умолчанию, заданной в командной строке.
В PowerPC инлайнер не встраивает функцию, для которой заданы параметры целевой платформы, отличающиеся от параметров вызывающей функции, если только набор параметров целевой платформы вызываемой функции не является подмножеством набора параметров вызывающей функции.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-15.3.0/gcc/PowerPC-Function-Attributes.html