6.59.26 Встроенные функции SPU
GCC предоставляет расширения для процессора SPU, как описано в спецификации расширений языка Sony/Toshiba/IBM SPU. Реализация GCC отличается по нескольким аспектам.
- Не поддерживается необязательное расширение указания векторных констант в скобках.
- Векторная инициализация не требует приведения типов, если векторная константа имеет тот же тип, что и переменная, которую она инициализирует.
- Если
signedилиunsignedопущено, знаковый атрибут векторного типа соответствует знаковому атрибуту базового типа по умолчанию. Значение по умолчанию зависит от операционной системы, поэтому для портативности программы необходимо всегда указывать знаковый атрибут. - По умолчанию добавляется ключевое слово
__vector. Макросvectorопределён в<spu_intrinsics.h>и может быть переопределён. - GCC позволяет использовать имя
typedefв качестве спецификатора типа для векторного типа. - Для C перегруженные функции реализованы с помощью макросов, поэтому следующее не работает:
spu_add ((vector signed int){1, 2, 3, 4}, foo);Поскольку
spu_add— это макрос, векторная константа в примере обрабатывается как четыре отдельных аргумента. Для корректной работы оберните весь аргумент в скобки. - Расширенная версия
__builtin_expectне поддерживается.
Примечание: Поддерживается только интерфейс, описанный в вышеупомянутой спецификации. Внутри GCC для реализации необходимых функций используются встроенные функции, но они не поддерживаются и могут быть изменены без предварительного уведомления.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-6.5.0/gcc/SPU-Built-in-Functions.html