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 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