x86 / SIMDアセンブリでは、変換する必要のあるグラフィックイメージの4つの32ビットピクセルをXMMレジスタに入力しました。ただし、ピクセルは10ビットパックRGB形式であるため、次の形式で32ビットで存在します。
[ red ][ green ][ blue ][]
RRRRRRRRRRGGGGGGGGGGBBBBBBBBBB00
最後の2ビットはパディングビットであり、未使用です。
これらのピクセルに別の値を掛ける必要がありますが、値をマスクする必要があるため、たとえば赤いピクセルにのみ影響します。この値は一定であるため、ハードコーディングできます。値が0.1234だとしましょう。これを適切なマスキングを使用して別のXMMレジスタに入れて、各32ビットセグメントの赤の部分にのみ影響を与えるにはどうすればよいですか?
グラフィカルに示されているように、私は次のようなことをしたいと思います。
XMM0 (first 32 bit segment):
[ 0.1234 ][ 1.0 ][ 1.0 ][]
*
XMM1 (first 32 bit segment):
RRRRRRRRRRGGGGGGGGGGBBBBBBBBBB00
その結果、XMM0とXMM1の積になります。もちろん、この32ビットセグメントはXMMレジスタ全体で複製されます。ここで最初の32ビットを指定したので、わかります。