我想弄清楚如何在ARM霓虹燈中生成條件存儲。我想要做的是相當於這個SSE指令:ARM霓虹燈:有條件的店鋪建議
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);
你需要三個步驟做:首先加載載體,應用口罩,只修改所需要的元素,然後保存修改後的載體回它的原始位置。 –
對不起,但我仍然不清楚。我想要做的是:使用這樣一個向量:mask = {0,0,0,0,0,0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80} ;這是我的「n」參數在_mm_maskmoveu_si128(__ m128i d,__m128i n,char * p);案件。你所說的面罩應該如何構造?我應該做什麼操作?謝謝(我從來沒有用過霓虹燈,所以我有點困惑)。 – user2696208
好的 - 因爲它變得越來越複雜,我在下面的答案中提供了更詳細的解釋。 –