SSE2
読み:エスエスイー-トゥー
外語:SSE2: Streaming SIMD Extensions 2
ストリーミングSIMD拡張命令2。
Intel
の
マイクロプロセッサー
である
Pentium 4
(
Willamette
コアと
Northwood
コア)に搭載された命令群で、従来の
SSE
の拡張版にあたる。
目次
特徴
演算
改良
機能の有無判別
新命令
浮動小数点演算命令
整数命令
キャッシュに関する命令
特徴
演算
従来、
浮動小数点
の演算は
x87
命令(FPU)で行なわれてきた。SSE対応マイクロプロセッサーでも同様で、倍精度の演算は相変わらずFPUを用いていた。
MMX
ではマルチメディア処理に利用される演算機能が追加され、またSSEでは3Dグラフィックスで多用される単精度浮動小数点演算を複数個同時に処理(SIMD処理)可能となった。
このようにMMXやSSEはあくまでx87の補完機能という位置づけだった。しかし、x87命令とMMX/SSE命令はいちいち切り換えないと互いに利用できないため、精度を要する演算との併用は弱点として存在した。
改良
そこでSSE2は更に144個の新命令を追加し、倍精度浮動小数点演算に対応させた。
2個までの倍精度浮動小数点演算をまとめて処理できる他、整数演算も複数まとめて計算可能で、8ビット×16、16ビット×8、32ビット×4、64ビット×2を処理する命令が存在する。
機能の有無判別
機能の有無は、EAXレジスターに1を代入して
CPUID命令
を実行し、EDXレジスターに得られたフラグのビット26が1かどうかで確認できる。
新命令
SSE2では計144命令が追加された。ニーモニックのルールは次の通りである。
命令の最後のpdは、2つのパックド倍精度浮動小数点演算。
命令の最後のpsは、4つのパックド単精度浮動小数点演算。
命令の最後のsdは、最下位のみの倍精度浮動小数点演算。
命令の最後のssは、最下位のみの単精度浮動小数点演算。
SSE2で追加された新命令は、次の通りである。
浮動小数点演算命令
転送
movapd
movupd
movsd
movlpd
movhpd
movmskpd
加算
addpd
addsd
減算
subpd
subsd
乗算
mulpd
mulsd
除算
divpd
divsd
平方根
sqrtpd
sqrtsd
最大
maxpd
maxsd
最小
minpd
minsd
論理
andpd
andnpd
orpd
xorpd
比較
cmppd
cmpsd
comisd
ucomisd
シャッフル
shufpd
アンパック
unpckhpd
unpcklpd
変換
cvtps2pd
cvtpd2ps
cvtss2sd
cvtsd2ss
cvtpd2pi
cvtpi2pd
cvtpd2dq
cvtdq2pd
cvtsd2si
cvtsi2sd
cvtps2dq
cvtdq2ps
整数命令
転送
movdqa
movdqu
movq2dq
movdq2q
加算
paddq
減算
psubq
乗算
pmuludq
シャッフル
pshuflw
pshufhw
pshufd
シフト
pslldq
psrldq
アンパック
punpckhqdq
punpcklqdq
キャッシュに関する命令
フラッシュ
clflush
キャッシュなしで転送
movntpd
movntdq
movnti
maskmovdqu
メモリーアクセス順序
lfence
mfence
再検索