6.60.22 Встроенные функции PowerPC AltiVec/VSX
GCC предоставляет интерфейс для процессоров семейства PowerPC для доступа к операциям AltiVec, описанным в руководстве по программированию AltiVec от Motorola. Интерфейс доступен при включении <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 соответствует спецификации ABI OpenPOWER 64-битного ELF V2, которая доступна по адресу http://openpowerfoundation.org/wp-content/uploads/resources/leabi-prd/content/index.html. Приложение A этого документа содержит список интерфейсов векторного API, которые должны предоставляться совместимыми компиляторами. Программисты должны предпочтительно использовать описанные там интерфейсы. Однако в прошлом GCC предоставлял дополнительные интерфейсы для доступа к векторным инструкциям. Краткое описание этих интерфейсов приведено ниже.
Далее: Встроенные функции PowerPC аппаратной транзакционной памяти, Предыдущее: Основные встроенные функции PowerPC, Вверх: Встроенные функции целевых систем [Оглавление][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-9.5.0/gcc/PowerPC-AltiVec_002fVSX-Built-in-Functions.html