Spec-Zone.ru › GCC 10

Next: ARM iWMMXt Встроенные функции, Previous: Встроенные функции ARC, Up: Встроенные функции, специфичные для конкретных целевых машин [Оглавление][Индекс]

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)

Next: ARM iWMMXt Встроенные функции, Previous: Встроенные функции ARC, Up: Встроенные функции, специфичные для конкретных целевых машин [Оглавление][Индекс]

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

Spec-Zone.ru

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