Spec-Zone.ru › GCC 14

6.62.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);

Следующие встроенные функции доступны на системах, использующих -mmpy-option=6 или выше.

__v2hi __builtin_arc_dmach (__v2hi, __v2hi);
__v2hi __builtin_arc_dmachu (__v2hi, __v2hi);
__v2hi __builtin_arc_dmpyh (__v2hi, __v2hi);
__v2hi __builtin_arc_dmpyhu (__v2hi, __v2hi);
__v2hi __builtin_arc_vaddsub2h (__v2hi, __v2hi);
__v2hi __builtin_arc_vsubadd2h (__v2hi, __v2hi);

Следующие встроенные функции доступны на системах, использующих -mmpy-option=7 или выше.

__v2si __builtin_arc_vmac2h (__v2hi, __v2hi);
__v2si __builtin_arc_vmac2hu (__v2hi, __v2hi);
__v2si __builtin_arc_vmpy2h (__v2hi, __v2hi);
__v2si __builtin_arc_vmpy2hu (__v2hi, __v2hi);

Следующие встроенные функции доступны на системах, использующих -mmpy-option=8 или выше.

long long __builtin_arc_qmach (__v4hi, __v4hi);
long long __builtin_arc_qmachu (__v4hi, __v4hi);
long long __builtin_arc_qmpyh (__v4hi, __v4hi);
long long __builtin_arc_qmpyhu (__v4hi, __v4hi);
long long __builtin_arc_dmacwh (__v2si, __v2hi);
long long __builtin_arc_dmacwhu (__v2si, __v2hi);
_v2si __builtin_arc_vaddsub (__v2si, __v2si);
_v2si __builtin_arc_vsubadd (__v2si, __v2si);
_v4hi __builtin_arc_vaddsub4h (__v4hi, __v4hi);
_v4hi __builtin_arc_vsubadd4h (__v4hi, __v4hi);

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-14.2.0/gcc/ARC-SIMD-Built_002din-Functions.html

Spec-Zone.ru

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