Spec-Zone.ru › GCC 9

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 AltiVec на ISA 2.05:
• Встроенные функции PowerPC AltiVec, доступные на ISA 2.06:
• Встроенные функции PowerPC AltiVec, доступные на ISA 2.07:
• Встроенные функции PowerPC AltiVec, доступные на ISA 3.0:

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

Spec-Zone.ru

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