2

__m128i レジスタ (ベクトル A) があり、内容は 16 ビット値です。

{100,26,26,26,26,26,26,100} // A Vector

今、私はベクトルを減算します

{82,82,82,82,82,82,82,82}

指示で

_mm_sub_epi16(a_vec,_mm_set1_epi16(82)) 

期待される結果は次のベクトルである必要があります

{18,-56,-56,-56,-56,-56,-56,18}

しかし、私は得る

{18,65480,65480,65480,65480,65480,65480,18}

ベクトルが符号付きとして扱われることをどのように解決できますか?

A ベクトルは、次の命令によって作成されました。

__m128i a_vec = _mm_srli_epi16(_mm_unpacklo_epi8(score_vec_8bit, score_vec_8bit), 8)
4

1 に答える 1

5

65480と同じ値です-56(どちらも0xffc8レジスタ レベルにあります) - unsigned short であるかのように表示しているだけです。

キャリー/ボローフラグを使用しないバイナリ値の非飽和加算および減算では、値が符号付きか符号なしかは実際には無関係であることに注意してください。したがって、同じ命令を符号付きと符号なしの両方の short の追加に使用できます。唯一の違いは、その後、結果を解釈 (または表示) します。

于 2012-10-31T12:18:25.683 に答える