ARM Neon:条件商店建议

时间:2013-08-19 11:36:15

标签: arm store sse neon intrinsics

我正在试图弄清楚如何在ARM neon中生成条件存储。我想做的是相当于这个SSE指令:

void _mm_maskmoveu_si128(__ m128i d,__ m128i n,char * p);

有条件地将d的字节元素存储到地址p。选择器n中每个字节的高位确定是否存储d中的相应字节。

有关如何使用NEON内在函数的任何建议吗? 谢谢

这就是我所做的:

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);

1 个答案:

答案 0 :(得分:0)

假设16 x 1字节元素的向量,您将设置一个掩码向量,其中每个元素都是0(0x00)或全1(0xff)以确定元素是否应该是存储在没有。然后你需要做以下(伪代码):

 init mask vector = 0x00/0xff in each element
 init source vector = data to be selectively stored
 load dest vector from dest location
 apply `vbslq_u8` (`vbit` instruction) with dest vector, source vector and mask vector
 store dest vector back to dest location