2013-10-25 3 views
1
> [EDIT: (edited to highlight the question in context) 

Ниже приведены встроенные функции SSE, для которых я требую NEON встроенных функции, как я уверен, преобразование некоторого SSE кода для запуска на IOS.Преобразование специальной встроенной SSE для NEON встроенных функций

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

Stores четыре одинарной точности, значения с плавающей точкой. Адрес не должен быть выровнен по 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-битных чисел в 4 до знаком или без знака 32-битных чисел в б.

__m128i _mm_add_epi32 (__m128i a, __m128i b); 

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

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

ответ

1

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

_mm_set_ps

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

_mm_loadu_ps

vld1.32 q0, [r0]

_mm_storeu_ps

vst1.32 q0, [r0]

_mm_add_epi32

vadd.u32 q0, q1, q2

+0

Привет, вы можете объяснить vmov.i32? Я не могу найти полноценную документацию в Интернете? – p0lAris