Spec-Zone.ru › GCC 14

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

Генерировать код, использующий (не использующий) инструкции округления FP до целого, реализованные на процессоре 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’

Генерировать код, использующий (не использующий) инструкцию подсчёта единиц и двойной точности FP обратного приближения, реализованную на процессоре 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’

Предполагать (не предполагать), что инструкции оценки обратного приближения обеспечивают оценку более высокой точности, чем предписывает PowerPC ABI.

‘string’
‘no-string’

Генерировать код, использующий (не использующий) инструкции загрузки строк и инструкции сохранения строки для сохранения нескольких регистров и выполнения небольших блочных перемещений.

‘vsx’
‘no-vsx’

Генерировать код, использующий (не использующий) инструкции вектор/скаляр (VSX), а также разрешить использование встроенных функций, которые обеспечивают более прямой доступ к набору инструкций VSX. В 32-разрядном коде вы не можете включить инструкции VSX или AltiVec, если на командной строке не используется -mabi=altivec.

‘friz’
‘no-friz’

Генерировать (не генерировать) инструкцию friz при использовании параметра -funsafe-math-optimizations для оптимизации округления значения с плавающей точкой до 64-битного целого и обратно до значения с плавающей точкой. Инструкция friz не возвращает то же значение, если число с плавающей точкой слишком велико для размещения в целом числе.

‘avoid-indexed-addresses’
‘no-avoid-indexed-addresses’

Генерировать код, который пытается избежать (не избегать) использования инструкций загрузки или сохранения с индексами.

‘paired’
‘no-paired’

Генерировать код, использующий (не использующий) генерацию инструкций PAIRED simd.

‘longcall’
‘no-longcall’

Генерировать код, предполагающий (не предполагающий), что все вызовы находятся далеко, поэтому требуется более длинная и дорогая последовательность вызова.

‘cpu=CPU’

Указывает архитектуру для генерации кода при компиляции функции. Если вы выбираете атрибут target("cpu=power7") при генерации 32-битного кода, инструкции 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-13.3.0/gcc/PowerPC-Function-Attributes.html

Spec-Zone.ru

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