2011-08-26 2 views
11

いくつかのインテルSSE操作のNEON同等性を理解するのに問題があります。 NEONはQレジスタ全体を一度に扱うことができないようです(128ビットの値のデータ型)。私はarm_neon.hヘッダーまたはNEON intrinsics referenceに何も見つかりませんでした。私は(私は多くの経験を持っていないNEONが提供するシフト動作を見てきましたが、上記を行うための同等の方法を見つけることができませんでしたNEON対Intel SSE - 特定の操作の同等性

// 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付き)。上記を行うことは可能ですか(私はちょうどそれが方法を知らないと思いますか?) すべてのポインターを大いに感謝します。

答えて

6

VEXT命令が必要です。あなたの例のようなものになります。この後

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

を、ビットvalの0から111までは、ビットvector_of_8_s16の16から127を含んでいます、そしてvalのビット112-127は、ビットanother_vector_s16の0-15が含まれています。

+0

私は実際にそれをすでに実装しました。自分のアプローチを検証するための例を提供することは可能でしょうか? – celavek

+0

はvtblとvtbxについて私の答えを削除しました。 vextは行く方法です! –

+0

@celavek:例を挙げましたが、アプローチを検証する方法は、例と比較するのではなく、テストすることです。それは動作するか動作しません。 –

関連する問題