質問

私はxmm0に2つのパックド・クワッドワード整数を持っていると私は一緒にそれらを追加し、メモリ位置に結果を格納する必要があります。私は、各整数の値は2 ^ 15の を未満であることを保証することができます。今、私は次のことをやってます:

int temp;
....   

   movdq2q mm0, xmm0
   psrldq xmm0, 8
   movdq2q mm1, xmm0
   paddq mm0,mm1
   movd temp, mm0

これを行うには良い方法はありますか?

役に立ちましたか?

解決

まず最初に、なぜあなたは16ビット形式で収まるように値を表すためにクワッドワードを使用していますか?カップル・ソリューション、それを脇に残します:

pshufd xmm1, xmm0, EEh
paddq  xmm0, xmm1
movd   temp, xmm0

または

movdqa xmm1, xmm0
psrldq xmm1, 8
paddq  xmm0, xmm1
movd   temp, xmm0

または

movhlps xmm1, xmm0
paddq   xmm0, xmm1
movd    temp, xmm0

あなたが実際にpaddqを使用する必要はありませんが、あなたは、のいずれかで逃げることができ、あなたが好む場合は狭く追加します。

編集 4つのダブルクワッドワードを合計する - あなたが持っていることは、かなり細かいです。あなたがそれらのすべてのデータが各スロットの低ダブルワードに収まることを知っていることを考えると、あなたのような何かを試すことができます:

shufps  xmm0, xmm2, 88h
shufps  xmm4, xmm6, 88h
paddd   xmm0, xmm4
psrlq   xmm1, xmm0, 32
paddd   xmm0, xmm1
movhlps xmm1, xmm0
paddd   xmm0, xmm0
movd    temp, xmm0

またはより高速であることを証明しないかもしれない可能性がある。

EMMSとしては、それだけで別の命令です。あなたはemmsを持っている必要がありますのx87浮動小数点命令を使用して任意のコードの前に、MMXレジスタに触れる任意のコードの後。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top