Конвертировать определенные свойства SSE в свойства NEON

> [EDIT: (edited to highlight the question in context)

Ниже приведены характеристики SSE, для которых Мне требуются НЕОН поскольку я конвертирую некоторый код SSE для работы на iOS.

  • _mm_set_ps

Устанавливает четыре значения с плавающей запятой одинарной точности для четырех входов.

(__m128 _mm_set_ps(float z , float y , float x , float w );)

Return Value:
r0 := w
r1 := x
r2 := y
r3 := z
  • _mm_loadu_ps

Загружает четыре значения одинарной точности с плавающей точкой. Адрес делает не должен быть выровнен по 16 байтов.

__m128 _mm_loadu_ps(float * p);

Return Value:
r0 := p[0]
r1 := p[1]
r2 := p[2]
r3 := p[3]
  • _mm_storeu_ps

Хранит четыре значения с плавающей точкой одинарной точности. Адрес делает не должен быть выровнен по 16 байтов.

void _mm_storeu_ps(float *p, __m128 a);

Return Value:
p[0] := a0
p[1] := a1
p[2] := a2
p[3] := a3
  • _mm_add_epi32

Добавляет 4 подписанный или же неподписанный 32-разрядные целые числа от a до 4 32-разрядные целые числа со знаком или без знака в b.

__m128i _mm_add_epi32 (__m128i a, __m128i b);

Return Value:
r0 := a0 + b0
r1 := a1 + b1
r2 := a2 + b2
r3 := a3 + b3

Примечание: по возможности избегайте выравниваемого доступа к памяти. Итак, мне нужен способ преобразовать не выровненный доступ в выровненный доступ (возможно, с использованием отступов).

1

Решение

Я не очень знаком с внутренностями NEON, но могу назвать вам эквивалентные инструкции NEON. Тогда вы легко найдете подходящий макрос.

_mm_set_ps

Если значения уже находятся в S регистрах, вам просто нужно заново интерпретировать их как D регистры
В противном случае вы можете заполнить регистр D командой vmov:
vmov.i32 d0, r0, r1

_mm_loadu_ps

vld1.32 q0, [r0]

_mm_storeu_ps

vst1.32 q0, [r0]

_mm_add_epi32

vadd.u32 q0, q1, q2

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]