Spec-Zone.ru › GCC 10

Далее: Встроенные функции транзакционной памяти PowerPC для аппаратного обеспечения, Предыдущее: Основные встроенные функции PowerPC, Вверх: Встроенные функции, специфичные для конкретных целевых машин [Оглавление][Индекс]

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 предоставляет дополнительные интерфейсы для доступа к векторным инструкциям. Они кратко описаны ниже.

  • Встроенные функции 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-10.5.0/gcc/PowerPC-AltiVec_002fVSX-Built-in-Functions.html

Spec-Zone.ru

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