2013-12-10 5 views
0

uint8_t * src를 uint16x8_t에로드하는 방법? 예를 들어 는, 우리는 다음을 수행 할 수 있습니다uint8_t * src를 uint16x8_t에로드하는 방법

uint8_t *src; 

--->

uint8x8_t mysrc = vld1_u8(src); 

내가 uint16x8_t하는 mysrc를 변환하는 vreinterpret _ *() 또는 (uint16x8_t) mysrc을 사용할 수 없다는 것 같은데? 맞아?

+1

vmovl에 대한 명확한 사례. 어셈블리를 알면 아주 사소한 일입니다. 지시 사항을 스스로 배우지 않으면 intrinsics로 아주 멀리 가지 않을 것입니다. –

답변

3

로드 8 개 처음 값으로 8 비트 값 :

uint8x8_t mysrc8x8 = vld1_u8(src); 

나서 제 8 비트에 붙이는 제로로하는 16 비트 값으로이 값을 변환 할 "convert long move" 명령을 사용

uint16x8_t mysrc16x8 = vmovl_u8(mysrc8x8); 

이 값에 대한 일부 연산을 수행 한 후에 myoutput16x8 출력을 uint16x8_t 형식으로 얻고이를 uint8x8_t으로 다시 변환하려는 경우을 사용할 수 있다고 가정합니다

uint8x8_t myoutput8x8 = vmovn_u16(myoutput16x8); 

희망이 도움이 :가 255보다 큰 경우 0 명령, 마음에 베어링이 실제로 값을자를 것입니다!