6.60.5 Встроенные функции ARC SIMD
Встроенные функции SIMD, предоставляемые компилятором, могут использоваться для генерации векторных инструкций. Этот раздел описывает доступные встроенные функции и их использование в программах. С опцией -msimd компилятор предоставляет 128-битные векторные типы, которые могут быть указаны с помощью атрибута vector_size. Заголовочный файл arc-simd.h может быть включён для использования следующих предопределённых типов:
typedef int __v4si __attribute__((vector_size(16))); typedef short __v8hi __attribute__((vector_size(16)));
Эти типы могут быть использованы для определения 128-битных переменных. Встроенные функции, перечисленные в следующем разделе, могут быть использованы с этими переменными для генерации векторных операций.
Для всех встроенных функций, __builtin_arc_someinsn, заголовочный файл arc-simd.h также предоставляет эквивалентные макросы, называемые _someinsn, которые могут быть использованы для упрощения программирования и повышения читаемости. Также предоставляются следующие макросы для управления DMA:
#define _setup_dma_in_channel_reg _vdiwr #define _setup_dma_out_channel_reg _vdowr
Ниже приведён полный список всех встроенных функций SIMD, предоставляемых для ARC, сгруппированных по сигнатурам вызовов.
Следующие принимают два __v8hi аргумента и возвращают __v8hi результат:
__v8hi __builtin_arc_vaddaw (__v8hi, __v8hi) __v8hi __builtin_arc_vaddw (__v8hi, __v8hi) __v8hi __builtin_arc_vand (__v8hi, __v8hi) __v8hi __builtin_arc_vandaw (__v8hi, __v8hi) __v8hi __builtin_arc_vavb (__v8hi, __v8hi) __v8hi __builtin_arc_vavrb (__v8hi, __v8hi) __v8hi __builtin_arc_vbic (__v8hi, __v8hi) __v8hi __builtin_arc_vbicaw (__v8hi, __v8hi) __v8hi __builtin_arc_vdifaw (__v8hi, __v8hi) __v8hi __builtin_arc_vdifw (__v8hi, __v8hi) __v8hi __builtin_arc_veqw (__v8hi, __v8hi) __v8hi __builtin_arc_vh264f (__v8hi, __v8hi) __v8hi __builtin_arc_vh264ft (__v8hi, __v8hi) __v8hi __builtin_arc_vh264fw (__v8hi, __v8hi) __v8hi __builtin_arc_vlew (__v8hi, __v8hi) __v8hi __builtin_arc_vltw (__v8hi, __v8hi) __v8hi __builtin_arc_vmaxaw (__v8hi, __v8hi) __v8hi __builtin_arc_vmaxw (__v8hi, __v8hi) __v8hi __builtin_arc_vminaw (__v8hi, __v8hi) __v8hi __builtin_arc_vminw (__v8hi, __v8hi) __v8hi __builtin_arc_vmr1aw (__v8hi, __v8hi) __v8hi __builtin_arc_vmr1w (__v8hi, __v8hi) __v8hi __builtin_arc_vmr2aw (__v8hi, __v8hi) __v8hi __builtin_arc_vmr2w (__v8hi, __v8hi) __v8hi __builtin_arc_vmr3aw (__v8hi, __v8hi) __v8hi __builtin_arc_vmr3w (__v8hi, __v8hi) __v8hi __builtin_arc_vmr4aw (__v8hi, __v8hi) __v8hi __builtin_arc_vmr4w (__v8hi, __v8hi) __v8hi __builtin_arc_vmr5aw (__v8hi, __v8hi) __v8hi __builtin_arc_vmr5w (__v8hi, __v8hi) __v8hi __builtin_arc_vmr6aw (__v8hi, __v8hi) __v8hi __builtin_arc_vmr6w (__v8hi, __v8hi) __v8hi __builtin_arc_vmr7aw (__v8hi, __v8hi) __v8hi __builtin_arc_vmr7w (__v8hi, __v8hi) __v8hi __builtin_arc_vmrb (__v8hi, __v8hi) __v8hi __builtin_arc_vmulaw (__v8hi, __v8hi) __v8hi __builtin_arc_vmulfaw (__v8hi, __v8hi) __v8hi __builtin_arc_vmulfw (__v8hi, __v8hi) __v8hi __builtin_arc_vmulw (__v8hi, __v8hi) __v8hi __builtin_arc_vnew (__v8hi, __v8hi) __v8hi __builtin_arc_vor (__v8hi, __v8hi) __v8hi __builtin_arc_vsubaw (__v8hi, __v8hi) __v8hi __builtin_arc_vsubw (__v8hi, __v8hi) __v8hi __builtin_arc_vsummw (__v8hi, __v8hi) __v8hi __builtin_arc_vvc1f (__v8hi, __v8hi) __v8hi __builtin_arc_vvc1ft (__v8hi, __v8hi) __v8hi __builtin_arc_vxor (__v8hi, __v8hi) __v8hi __builtin_arc_vxoraw (__v8hi, __v8hi)
Следующие принимают один __v8hi и один int аргумент и возвращают __v8hi результат:
__v8hi __builtin_arc_vbaddw (__v8hi, int) __v8hi __builtin_arc_vbmaxw (__v8hi, int) __v8hi __builtin_arc_vbminw (__v8hi, int) __v8hi __builtin_arc_vbmulaw (__v8hi, int) __v8hi __builtin_arc_vbmulfw (__v8hi, int) __v8hi __builtin_arc_vbmulw (__v8hi, int) __v8hi __builtin_arc_vbrsubw (__v8hi, int) __v8hi __builtin_arc_vbsubw (__v8hi, int)
Следующие принимают один __v8hi аргумент и один int аргумент, который должен быть 3-битной константой времени компиляции, указывающей номер регистра I0-I7. Они возвращают __v8hi результат.
__v8hi __builtin_arc_vasrw (__v8hi, const int) __v8hi __builtin_arc_vsr8 (__v8hi, const int) __v8hi __builtin_arc_vsr8aw (__v8hi, const int)
Следующие принимают один __v8hi аргумент и один int аргумент, который должен быть 6-битной константой времени компиляции. Они возвращают __v8hi результат.
__v8hi __builtin_arc_vasrpwbi (__v8hi, const int) __v8hi __builtin_arc_vasrrpwbi (__v8hi, const int) __v8hi __builtin_arc_vasrrwi (__v8hi, const int) __v8hi __builtin_arc_vasrsrwi (__v8hi, const int) __v8hi __builtin_arc_vasrwi (__v8hi, const int) __v8hi __builtin_arc_vsr8awi (__v8hi, const int) __v8hi __builtin_arc_vsr8i (__v8hi, const int)
Следующие принимают один __v8hi аргумент и один int аргумент, который должен быть 8-битной константой времени компиляции. Они возвращают __v8hi результат.
__v8hi __builtin_arc_vd6tapf (__v8hi, const int) __v8hi __builtin_arc_vmvaw (__v8hi, const int) __v8hi __builtin_arc_vmvw (__v8hi, const int) __v8hi __builtin_arc_vmvzw (__v8hi, const int)
Следующие принимают два int аргумента, второй из которых должен быть 8-битной константой времени компиляции. Они возвращают __v8hi результат:
__v8hi __builtin_arc_vmovaw (int, const int) __v8hi __builtin_arc_vmovw (int, const int) __v8hi __builtin_arc_vmovzw (int, const int)
Следующие принимают один __v8hi аргумент и возвращают __v8hi результат:
__v8hi __builtin_arc_vabsaw (__v8hi) __v8hi __builtin_arc_vabsw (__v8hi) __v8hi __builtin_arc_vaddsuw (__v8hi) __v8hi __builtin_arc_vexch1 (__v8hi) __v8hi __builtin_arc_vexch2 (__v8hi) __v8hi __builtin_arc_vexch4 (__v8hi) __v8hi __builtin_arc_vsignw (__v8hi) __v8hi __builtin_arc_vupbaw (__v8hi) __v8hi __builtin_arc_vupbw (__v8hi) __v8hi __builtin_arc_vupsbaw (__v8hi) __v8hi __builtin_arc_vupsbw (__v8hi)
Следующие принимают два int аргумента и не возвращают результата:
void __builtin_arc_vdirun (int, int) void __builtin_arc_vdorun (int, int)
Следующие принимают два int аргумента и не возвращают результата. Первый аргумент должен быть 3-битной константой времени компиляции, указывающей один из каналов настройки DMA DR0-DR7:
void __builtin_arc_vdiwr (const int, int) void __builtin_arc_vdowr (const int, int)
Следующие принимают int аргумент и не возвращают результата:
void __builtin_arc_vendrec (int) void __builtin_arc_vrec (int) void __builtin_arc_vrecrun (int) void __builtin_arc_vrun (int)
Следующие принимают __v8hi аргумент и два int аргумента и возвращают __v8hi результат. Второй аргумент должен быть 3-битной константой времени компиляции, указывающей один из регистров I0-I7, а третий аргумент должен быть 8-битной константой времени компиляции.
Примечание: Хотя эквивалентные аппаратные инструкции не принимают регистр SIMD в качестве операнда, эти встроенные функции перезаписывают соответствующие биты регистра __v8hi, предоставленного в качестве первого аргумента, значением, загруженным из расположения [Ib, u8] в SDM.
__v8hi __builtin_arc_vld32 (__v8hi, const int, const int) __v8hi __builtin_arc_vld32wh (__v8hi, const int, const int) __v8hi __builtin_arc_vld32wl (__v8hi, const int, const int) __v8hi __builtin_arc_vld64 (__v8hi, const int, const int)
Следующие принимают два int аргумента и возвращают __v8hi результат. Первый аргумент должен быть 3-битной константой времени компиляции, указывающей один из регистров I0-I7, а второй аргумент должен быть 8-битной константой времени компиляции.
__v8hi __builtin_arc_vld128 (const int, const int) __v8hi __builtin_arc_vld64w (const int, const int)
Следующие принимают __v8hi аргумент и два int аргумента и не возвращают результата. Второй аргумент должен быть 3-битной константой времени компиляции, указывающей один из регистров I0-I7, а третий аргумент должен быть 8-битной константой времени компиляции.
void __builtin_arc_vst128 (__v8hi, const int, const int) void __builtin_arc_vst64 (__v8hi, const int, const int)
Следующие принимают __v8hi аргумент и три int аргумента и не возвращают результата. Второй аргумент должен быть 3-битной константой времени компиляции, определяющей 16-битный подрегистр, который будет сохранён, третий аргумент должен быть 3-битной константой времени компиляции, указывающей один из регистров I0-I7, а четвёртый аргумент должен быть 8-битной константой времени компиляции.
void __builtin_arc_vst16_n (__v8hi, const int, const int, const int) void __builtin_arc_vst32_n (__v8hi, const int, const int, const int)
Далее: Встроенные функции ARM iWMMXt, Предыдущее: Встроенные функции ARC, Вверх: Встроенные функции целевых платформ [Оглавление][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-7.5.0/gcc/ARC-SIMD-Built-in-Functions.html