2013-02-22 2 views

ответ

3
int16x8_t vcombine_s16 (int16x4_t, int16x4_t) 

не имеет прямое указание соответствия, это способ лечения два двойных реестров в качестве регистра четырехъядерного и обеспечить безопасность типов в C. Можно было бы сделать это в сборке неявно просто вызывая двойные или квадроцикл регистров когда это требуется. См. Диаграмму ниже для возможных способов использования банка регистрации NEON.

gccdocumentation для внутренних дел.

Для, как это будет реализовано в сборке, вы можете использовать GCC

#include "arm_neon.h" 

int16x8_t c(int16x4_t a, int16x4_t b) { 
    return vcombine_s16(b, a); 
} 

превращается в

c(__simd64_int16_t, __simd64_int16_t): 
    vswp d1, d0 
    bx lr 

Я на самом деле сгенерирована online.

Так что, в конце концов, я думаю, что это кипит, если регистры смежны, тогда они уже объединены, если нет, вы можете просто использовать vmov или vswp.

См. Это arm documentation о том, как neon Регистры, отложенные и переданные.

enter image description here

+1

+1 для интерактивного онлайн-компилятора. – Spectravideo328