6.60.23 Встроенные функции PowerPC AltiVec/VSX ¶
GCC предоставляет интерфейс для семейства процессоров PowerPC для доступа к операциям AltiVec, описанным в руководстве Motorola по программированию интерфейса AltiVec. Интерфейс доступен при включении <altivec.h> и использовании -maltivec и -mabi=altivec. Интерфейс поддерживает следующие типы векторов.
vector unsigned char vector signed char vector bool char vector unsigned short vector signed short vector bool short vector pixel vector unsigned int vector signed int vector bool int vector float
Реализация GCC интерфейса языка высокого уровня, доступного из кода C и C++, отличается от документации Motorola в нескольких аспектах.
- Векторная константа представляет собой список константных выражений в фигурных скобках.
- Векторная инициализация не требует приведения типа, если векторная константа имеет тот же тип, что и переменная, которую она инициализирует.
- Если
signedилиunsignedопущено, знаковый тип векторного типа — это значение по умолчанию для базового типа. Значение по умолчанию зависит от операционной системы, поэтому портативный программа должен всегда указывать знаковый тип. - Компиляция с -maltivec добавляет ключевые слова
__vector,vector,__pixel,pixel,__boolиbool. При компиляции ISO C контекстно-зависимая подстановка ключевых словvector,pixelиboolотключена. Для их использования необходимо включить<altivec.h>. - GCC позволяет использовать имя
typedefв качестве спецификатора типа для векторного типа, но только в следующих случаях:- При использовании
__vectorвместоvector; например,typedef signed short int16; __vector int16 data;
- При использовании
vectorв режиме ключевых слов и предопределений; например,typedef signed short int16; vector int16 data;
Обратите внимание, что режим ключевых слов и предопределений включен путем отключения расширений GNU (например, с помощью
-std=c11) и включением<altivec.h>.
- При использовании
- Для языка C перегруженные функции реализуются с помощью макросов, поэтому следующее не работает:
vec_add ((vector signed int){1, 2, 3, 4}, foo);Поскольку
vec_addявляется макросом, векторная константа в примере обрабатывается как четыре отдельных аргумента. Для работы оберните весь аргумент в скобки.
Примечание: Поддерживается только интерфейс <altivec.h>. Внутренне GCC использует встроенные функции для достижения функциональности в указанном заголовочном файле, но они не поддерживаются и могут быть изменены без предварительного уведомления.
GCC соответствует спецификации OpenPOWER 64-битного ELF V2 ABI, которую можно найти по адресу https://openpowerfoundation.org/?resource_lib=64-bit-elf-v2-abi-specification-power-architecture. Приложение А данного документа перечисляет интерфейсы векторного API, которые должны быть предоставлены совместимыми компиляторами. Разработчикам программ следует предпочтительно использовать интерфейсы, описанные в нем. Однако исторически GCC предоставляет дополнительные интерфейсы для доступа к векторным инструкциям. Они кратко описаны ниже.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-10.5.0/gcc/PowerPC-AltiVec_002fVSX-Built-in-Functions.html