ア | イ | ウ | エ | オ |
カ | キ | ク | ケ | コ |
サ | シ | ス | セ | ソ |
タ | チ | ツ | テ | ト |
ナ | ニ | ヌ | ネ | ノ |
ハ | ヒ | フ | ヘ | ホ |
マ | ミ | ム | メ | モ |
ヤ | ユ | ヨ | ||
ラ | リ | ル | レ | ロ |
ワ | ヰ | ヴ | ヱ | ヲ |
ン |
A | B | C | D | E |
F | G | H | I | J |
K | L | M | N | O |
P | Q | R | S | T |
U | V | W | X | Y |
Z | 数字 | 記号 |
SSE4のうち、Penrynから搭載された47個の命令のこと。
様々なメディア処理、画像処理、3D処理のパフォーマンス向上を目的とした新命令群である。
前述のような用途向けに特化された命令が多いが、XMMレジスターの任意のビットの挿入・抽出命令や、丸めモードを即値で指定できる丸め命令などの汎用的な命令もある。
各命令についの詳細は後述する。
機能の有無は、EAXレジスターに1を代入してCPUID命令を実行し、ECXレジスターに得られたフラグのビット19が1かどうかで確認できる。
4つの32ビット×32ビット演算を実行する命令である。
新たな積和演算命令が二つ追加された。
dpps命令は、2個、3個、4個から任意に選択できる。
CPUのライトコンバイン(WriteCombine)メモリーへのアクセスは遅い。そこで、解決のための新命令が追加された。
この命令の挙動は、通常のロード命令と同様で、メモリーから16バイトを読み込みレジスターにコピーする命令である。
通常のロード命令と異なるのは、ライトコンバインメモリーからキャッシュラインと同量のデータを一時バッファーにコピーし、そこから16バイトをレジスターにコピーする点にある。このため、後続の命令がロードする対象が一時バッファーに含まれていた場合、一時バッファーの中からデータをコピーするため高速である。
ソースオペランドから、同じフィールドのディスティネーションオペランドに値をコピーするブレンディングのための命令が追加されている。
従来、2から4命令必要だったものを1命令で実行できるようにし、処理の効率改善をする。
8種類の、パックド整数の最小値/最大値を求める命令が追加された。
既に、画像処理用に8ビット符号なし、音声処理用に16ビット符号ありの命令があったが、今回はこれに新演算が追加されたことになる。
但し制限として、演算のオペランドはXMMレジスターのみである。整数演算の一種ではあるが、MMXレジスターは使用できない。
浮動小数点を丸めて整数にする、4つの丸め命令が追加されている。
丸めモードは、現在のモードか、または即値で任意に指定することが可能。丸めモードはIEEE-754の四種類のモード(最近値、−∞方向、+∞方向、切り捨て)に対応する。
これを用いると、床関数floor()や天井関数ceil()が、理論上は一命令で実装することが出来る。
GPRおよびXMMレジスター間での単純なデータ挿入/抽出命令が7つ(但しアセンブリ命令のニーモニックとしては9種類)追加されている。
ワード以上であっても、メモリーアクセス時のアラインメントは必要ない。
また、pinsrXのワード単位で動作する命令pinsrwは、既にSSE命令セットに存在する。
小さなパックド整数を、大きなパックド整数に変換する命令が12個追加されている。
符号ありの場合は符号拡張をし、元の整数のMSBで拡張される部分を埋める。ゼロパディングの場合は、拡張部分はゼロで埋める。
オペランドはXMMレジスターもしくはメモリー、ディスティネーションはXMMレジスターである。ワード以上であってもアラインメントは必須ではないが、アラインメントチェックが有効の場合は、メモリー境界を合わせる必要がある。
8つの符号なしバイト整数のSADを実行し、一つの符号なしワード整数を得る命令が一つ追加されている。
SSE2から搭載されたpsadbwと比較すると、この新命令mpsadbwは内部にソースシフター(Source Shifter)が装備されており、命令一つで8種類のSADが計算できる。このためオペランドにimm8が追加されている。
例えば画像処理で、xmm1に前画像、xmm2に現画像を8ヶ所分指定して実行すれば、8つのSADをまとめてxmm1に返してくれる。従って、例えば8×8サイズのSAD演算を従来とSSE4で比較すると、コード量は1/3程度にまでコンパクトに済むようになる。
8つの符号なしパックドワードから、最小値とその位置を求める命令が追加された。
上で紹介したmpsadbw命令は、その結果のワードを8個、XMMレジスターにパックして返す。この命令は、これをまとめて比較し、最小の値とその場所を返す命令である。
この検索を迅速に行なうことは、モーション予測の処理の高速化に繋がり、つまりビデオエンコーディング処理の高速化に寄与する。
結果は、ディスティネーションのビット0〜15に最小値、その最小ワードのインデックスがビット16〜18に格納される。ディスティネーションの残りのビットは(将来的な拡張の可能性はあるが現時点では)ゼロで埋められる。
XMMレジスターに対するtest命令が一つ追加された。
ソースとデスティネーションの各XMMレジスター同士をAND演算し、結果をフラグ(CFおよびZF)に格納する命令である。XMMレジスターの内容は変化しない。
従来であれば、一旦CPUのレジスターに複写してからtest命令をせざるを得なかった。パックされた整数であれば、例えばpmovmskbなどの命令の後でtest命令を使う、などが一般的である。ptestを使うと、その手間が不要になる。
パックされた値の比較命令が一つ追加された。
この命令は、従来からあるpcmpeqb/pcmpeqw/pcmpeqdなどと同様の処理だが、比較単位がクアッドワードとなる。
飽和演算処理の付いた、ダブルワードからワードへの変換命令が一つ追加された。
元の符号ありダブルワードが、符号なしワードの範囲外(0xFFFFより大きい、または0より小さい)場合、0xFFFFまたは0x0000がディスティネーションに格納されます(飽和処理)。
コメントなどを投稿するフォームは、日本語対応時のみ表示されます