ARM 네온에 조건부 스토어를 생성하는 방법을 알아 내려고하고 있습니다. 내가하고자하는 것은이 SSE 교육과 동등합니다 :ARM 네온 : 조건부 상점 제안
무효 _mm_maskmoveu_si128 (__m128i d, __m128i n, char * p);
조건부로 d의 바이트 요소를 주소 p에 저장합니다. 선택기 n의 각 바이트의 상위 비트는 d의 해당 바이트가 저장 될지 여부를 결정합니다.
NEON 내장 함수로 수행하는 방법에 대한 제안이 있으십니까? 16 × 1 바이트 요소의
int8x16_t store_mask = {0,0,0,0,0,0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
int8x16_t tmp_dest = vld1q_u8((int8_t*)p_dest);
vbslq_u8(source,tmp_dest,store_mask);
vst1q_u8((int8_t*)p_dest,tmp_dest);
세 단계로 수행해야합니다. 먼저 벡터를로드하고 마스크를 사용하여 필요한 요소를 수정 한 다음 수정 된 벡터를 다시 저장합니다. 그것의 원래 위치. –
미안하지만 아직도 나에게 분명하지 않다. 내가 뭘하고 싶은 :이 같은 벡터를 사용 : 마스크 = {0000000x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80} ; _mm_maskmoveu_si128 (__ m128i d, __m128i n, char * p)의 "n"매개 변수입니다. 케이스. 당신이 말하는 가면은 어떻게 구조화되어야합니까? 어떤 작업을해야합니까? 고맙습니다 (전에는 네온을 사용한 적이 없기 때문에 조금 혼란 스럽습니다). – user2696208
OK - 복잡 해짐에 따라 아래에 답변의 형태로 자세한 설명을했습니다. –