2

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

无效 _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);
4

1 回答 1

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
于 2013-08-19T12:46:15.650 回答