Spec-Zone.ru › GCC 12

6.60.23 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 соответствует Справочнику по программированию векторных инструкций Power (PVIPR), который можно найти по адресу https://openpowerfoundation.org/?resource_lib=power-vector-intrinsic-programming-reference. Глава 4 данного документа подробно документирует интерфейсы API векторов, которые должны предоставляться совместимыми компиляторами. Разработчики программного обеспечения должны предпочтительно использовать описанные там интерфейсы. Тем не менее, GCC исторически предоставлял дополнительные интерфейсы для доступа к векторным инструкциям. Они кратко описаны ниже. Там, где PVIPR предоставляет портативный интерфейс, другие функции GCC, обеспечивающие те же возможности, следует считать устаревшими.

В PVIPR документированы следующие перегруженные функции:

vec_abs vec_absd vec_abss
vec_add vec_addc vec_adde
vec_addec vec_adds vec_all_eq
vec_all_ge vec_all_gt vec_all_in
vec_all_le vec_all_lt vec_all_nan
vec_all_ne vec_all_nge vec_all_ngt
vec_all_nle vec_all_nlt vec_all_numeric
vec_and vec_andc vec_any_eq
vec_any_ge vec_any_gt vec_any_le
vec_any_lt vec_any_nan vec_any_ne
vec_any_nge vec_any_ngt vec_any_nle
vec_any_nlt vec_any_numeric vec_any_out
vec_avg vec_bperm vec_ceil
vec_cipher_be vec_cipherlast_be vec_cmpb
vec_cmpeq vec_cmpge vec_cmpgt
vec_cmple vec_cmplt vec_cmpne
vec_cmpnez vec_cntlz vec_cntlz_lsbb
vec_cnttz vec_cnttz_lsbb vec_cpsgn
vec_ctf vec_cts vec_ctu
vec_div vec_double vec_doublee
vec_doubleh vec_doublel vec_doubleo
vec_eqv vec_expte vec_extract
vec_extract_exp vec_extract_fp32_from_shorth vec_extract_fp32_from_shortl
vec_extract_sig vec_extract_4b vec_first_match_index
vec_first_match_or_eos_index vec_first_mismatch_index vec_first_mismatch_or_eos_index
vec_float vec_float2 vec_floate
vec_floato vec_floor vec_gb
vec_insert vec_insert_exp vec_insert4b
vec_ld vec_lde vec_ldl
vec_loge vec_madd vec_madds
vec_max vec_mergee vec_mergeh
vec_mergel vec_mergeo vec_mfvscr
vec_min vec_mradds vec_msub
vec_msum vec_msums vec_mtvscr
vec_mul vec_mule vec_mulo
vec_nabs vec_nand vec_ncipher_be
vec_ncipherlast_be vec_nearbyint vec_neg
vec_nmadd vec_nmsub vec_nor
vec_or vec_orc vec_pack
vec_pack_to_short_fp32 vec_packpx vec_packs
vec_packsu vec_parity_lsbb vec_perm
vec_permxor vec_pmsum_be vec_popcnt
vec_re vec_recipdiv vec_revb
vec_reve vec_rint vec_rl
vec_rlmi vec_rlnm vec_round
vec_rsqrt vec_rsqrte vec_sbox_be
vec_sel vec_shasigma_be vec_signed
vec_signed2 vec_signede vec_signedo
vec_sl vec_sld vec_sldw
vec_sll vec_slo vec_slv
vec_splat vec_splat_s8 vec_splat_s16
vec_splat_s32 vec_splat_u8 vec_splat_u16
vec_splat_u32 vec_splats vec_sqrt
vec_sr vec_sra vec_srl
vec_sro vec_srv vec_st
vec_ste vec_stl vec_sub
vec_subc vec_sube vec_subec
vec_subs vec_sum2s vec_sum4s
vec_sums vec_test_data_class vec_trunc
vec_unpackh vec_unpackl vec_unsigned
vec_unsigned2 vec_unsignede vec_unsignedo
vec_xl vec_xl_be vec_xl_len
vec_xl_len_r vec_xor vec_xst
vec_xst_be vec_xst_len vec_xst_len_r
• Встроенные функции PowerPC AltiVec в ISA 2.05:
• Встроенные функции PowerPC AltiVec, доступные в ISA 2.06:
• Встроенные функции PowerPC AltiVec, доступные в ISA 2.07:
• Встроенные функции PowerPC AltiVec, доступные в ISA 3.0:
• Встроенные функции PowerPC AltiVec, доступные в ISA 3.1:

Далее: Встроенные функции PowerPC Hardware Transactional Memory, Предыдущее: Основные встроенные функции PowerPC, Вверх: Встроенные функции целевых платформ [Содержание][Индекс]

END_OF_DOCUMENT_MARKER

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-12.2.0/gcc/PowerPC-AltiVec_002fVSX-Built-in-Functions.html

Spec-Zone.ru

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