12

いくつかのIntelSSE操作のNEONの同等性を理解するのに問題があります。NEONはQレジスタ全体を一度に処理できないようです(128ビット値のデータ型)。arm_neon.hヘッダーまたはNEON組み込み関数リファレンスに何も見つかりませんでした。

私がやりたいことは次のとおりです。

// Intel SSE
// shift the entire 128 bit value with 2 bytes to the right; this is done 
// without sign extension by shifting in zeros
__m128i val = _mm_srli_si128(vector_of_8_s16, 2);
// insert the least significant 16 bits of "some_16_bit_val"
// the whole thing in this case, into the selected 16 bit 
// integer of vector "val"(the 16 bit element with index 7 in this case)
val = _mm_insert_epi16(val, some_16_bit_val, 7);

NEONが提供するシフト操作を見てきましたが、同等の方法が見つかりませんでした(NEONの経験はあまりありません)。上記を行うことは可能ですか(私は方法がわからないと思います)?どんなポインタでも大歓迎です。

4

1 に答える 1

6

VEXT命令が必要です。あなたの例は次のようになります:

int16x8_t val = vextq_s16(vector_of_8_s16, another_vector_s16, 1);

この後、のビット0〜111にはのvalビット16〜127が含まれvector_of_8_s16、のビット112〜127にはのvalビット0〜15が含まれますanother_vector_s16

于 2011-08-27T14:53:31.847 に答える