2013-10-28 5 views
2

Я хочу знать, что эквивалентная инструкция/код для инструкции SSE в инструкции Neon.нахождение инструкции neon, соответствующей инструкции sse

__m128i a,b,c; 
c = _mm_packs_epi32(a, b); 

Упаковывает 8-значные 32-разрядные целые числа из a и b в 16-битные целочисленные и насыщенные символы.

Я проверил эквивалентную инструкцию на сайте ARM, но я не нашел эквивалентной инструкции. http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204j/Bcfjicfj.html

ответ

2

Там нет инструкции, которая непосредственно делает то, что вы хотите, но все строительные блоки, чтобы построить один есть :

насыщение/узкая инструкция:

int16x4_t vqmovn_s32 (int32x4_t) 

Это внутреннее насыщение от подписанных 32-битных до 16-битных целых чисел, возвращающих четыре суженные целые числа в переменной ширины 64 бит.

Комбинируя их в ваш _mm_packs_epi32 легко: Просто сделай это для а и б, и объединить результаты:

int32x4_t a,b; 
    int16x8_t c; 

    c = vcombine_s16 (vqmovn_s32(a), vqmovn_s32(b)); 

Вы, возможно, придется поменять порядок аргументов vcombine_s16.

+0

Не могли бы вы рассказать мне еще одну неоновую инструкцию, эквивалентную _mm_storel_epi64. – TLE

+0

Мое решение - использовать vget_lang (64x2,1) для получения младшего 64-битного регистра, а затем использовать vst1q для хранения. это правильно? – TLE

1

Этот пакет/насытить операция подпадает под категорию в MOV инструкции в NEON:

VQMOVN (Vector Saturating Move and Narrow) copies each element of the operand vector to the corresponding element of the destination vector. The result element is half the width of the operand element, and values are saturated to the result width.

+0

(psst, не уверен, что вы помечены для миграции [эта дымящаяся куча навоза] (http://stackoverflow.com/questions/19615856/27-ips-lcd-monitor?noredirect=1), но я думаю [ суперпользователь может нанести вам удары] (http://meta.stackexchange.com/questions/203172/migrated-question-not-marked-as-migrated-on-source-site)) – Will

+0

можете ли вы рассказать я, неоновая инструкция, эквивалентная _mm_storel_epi64. – TLE

+0

Мое решение - использовать vget_lang (int64x2_t, 1) для получения младшего 64-битного регистра, а затем использовать vst1q для хранения. это правильно? – TLE

Смежные вопросы