竹下世界塔の計算機よもやま話

アクセスカウンタ

zoom RSS マルチメディア命令調査:IA-32のMMX命令

<<   作成日時 : 2009/12/12 22:57   >>

ブログ気持玉 0 / トラックバック 1 / コメント 0

IA-32で使われているMMX命令を分類し、機能を調査した。
基本
浮動小数点レジスタ8本を下から64bit分使用する。(MM0〜MM7レジスタ)
浮動小数点演算とは排他。切り換えのための命令(EMMS)がある。
8bit×8(バイト),16bit×4(ワード),32bit×2(ダブルワード),64bit×1(クワッドワード)に分けて使用する。
2オペランド命令。MMXレジスタ間とMMXレジスタ⇔メモリ間の操作。
状態フラグはない。算術演算はラップアラウンド、符号付き飽和、符号なし飽和がある。

加算命令
PADDx mm0,mm1
PADDB パックドバイト加算 ラップアラウンド、符号有り飽和(PADDSB)、符号なし飽和(PADDUSB)
PADDW パックドワード加算 ラップアラウンド、符号有り飽和(PADDSW)、符号なし飽和(PADDUSW)
PADDD パックドダブルワード加算 ラップアラウンド

減算命令
PSUBx
PSUBB パックドバイト減算 ラップアラウンド、符号有り飽和(PSUBSB)、符号なし飽和(PSUBUSB)
PSUBW パックドワード減算 ラップアラウンド、符号有り飽和(PSUBSW)、符号なし飽和(PSUBUSW)
PSUBD パックドダブルワード減算 ラップアラウンド

乗算命令 パックドワードのみ、飽和演算なし
PMULLW mm0,mm1 パックドワード乗算の結果の下位16ビットを格納
tmpA[31:0] = mm0[63:48] × mm1[63:48]
tmpB[31:0] = mm0[47:32] × mm1[47:32]
tmpC[31:0] = mm0[31:16] × mm1[31:16]
tmpD[31:0] = mm0[15:0] × mm1[15:0]
mm0[63:0] = tmpA[15:0] : tmpB[15:0] : tmpC[15:0] : tmpD[15:0]
PMULHW mm0,mm1 パックドワード乗算の結果の上位16ビットを格納
tmpA〜tmpDを求めるまではPMULLWと同じ
mm0[63:0] = tmpA[31:16] : tmpB[31:16] : tmpC[31:16] : tmpD[31:16]

積和演算命令 パックドワードの積和演算、結果はパックドダブルワード
PMADDWD mm0,mm1
mm0[63:32] = mm0[63:48] × mm1[63:48] + mm0[47:32] × mm1[47:32]
mm0[31:0] = mm0[31:16] × mm1[31:16] + mm0[15:0] × mm1[15:0]

シフト命令 シフト量の即値指定あり パックドバイトのシフトはない
PSLLW パックドワードの左論理シフト
PSLLD パックドダブルワードの左論理シフト
PSLLQ クワッドワードの左論理シフト
PSRLW パックドワードの右論理シフト
PSRLD パックドダブルワードの右論理シフト
PSRLQ クワッドワードの右論理シフト
PSRAW パックドワードの右算術シフト
PSRAD パックドダブルワードの右算術シフト
PSRAQ クワッドワードの右算術シフト

論理演算命令 ビット単位で行うのでパックドデータは関係なく64bit幅が対象
PAND mm0,mm1 → mm0 = mm0 & mm1
PANDN mm0,mm1 → mm0 = mm0 & not(mm1)
POR mm0,mm1 → mm0 = mm0 | mm1
PXOR mm0,mm1 → mm0 = mm0 xor mm1

比較命令 フラグは持たないが比較結果をパックドレジスタに格納する
PCMPEQB パックドバイト同士を比較し等しければall"1"、そうでなければall"0"を格納
PCMPEQW パックドワード同士を比較し等しければall"1"、そうでなければall"0"を格納
PCMPEQD パックドダブルワード同士を比較し等しければall"1"、そうでなければall"0"を格納
PCMPGTB パックドバイト同士を大小比較し、ソースが大きければall"1"、そうでなければall"0"を格納
PCMPGTW パックドワード同士を大小比較し、ソースが大きければall"1"、そうでなければall"0"を格納
PCMPGTD パックドダブルワード同士を大小比較し、ソースが大きければall"1"、そうでなければall"0"を格納

データ変換(パック、アンパック)命令
パック命令
PACKSSWB パックドワードデータをパックドバイトデータにパック(符号あり)
mm0[63:56] = mm1[63:48]をバイトデータに、オーバーフローなら0x7fに、アンダーフローなら0x80に飽和
mm0[55:48] = mm1[47:32]を 〃
mm0[47:40] = mm1[31:16]を 〃
mm0[39:32] = mm1[15:0]を 〃
mm0[31:24] = mm0[63:48]を 〃
mm0[23:16] = mm0[47:32]を 〃
mm0[15:8] = mm0[31:16]を 〃
mm0[7:0] = mm0[15:0]を 〃
PACKSSDW パックドダブルワードデータをパックドワードデータにパック(符号あり)
mm0[63:48] = mm1[63:32]をワードデータに、オーバーフローなら0x7fffに、アンダーフローなら0x8000に飽和
mm0[47:32] = mm1[31:0]を 〃
mm0[31:16] = mm0[63:32]を 〃
mm0[15:0] = mm0[31:0]を 〃
PACKUSWB パックドワードデータをパックドバイトデータにパック(符号なし)
mm0[63:56] = mm1[63:48]をバイトデータに、オーバーフローなら0xffに、アンダーフローなら0x00に
mm0[55:48] = mm1[47:32]を 〃
mm0[47:40] = mm1[31:16]を 〃
mm0[39:32] = mm1[15:0]を 〃
mm0[31:24] = mm0[63:48]を 〃
mm0[23:16] = mm0[47:32]を 〃
mm0[15:8] = mm0[31:16]を 〃
mm0[7:0] = mm0[15:0]を 〃

アンパック命令
PUNPKHBW mm0,mm1 4つの上位バイトをワードにインターリーブしてコピーする
mm0[63:48] = mm0[63:56] : mm1[63:56]
mm0[48:32] = mm0[55:48] : mm1[55:48]
mm0[31:16] = mm0[47:40] : mm1[47:40]
mm0[15:0] = mm0[39:32] : mm1[39:32]
PUNPKHWD mm0,mm1 2つの上位ワードをダブルワードにインターリーブしてコピーする
mm0[63:32] = mm0[63:48] : mm1[63:48]
mm0[31:0] = mm0[47:32] : mm1[47:32]
PUNPKHDQ mm0,mm1 上位ダブルワードをクワッドワードにインターリーブしてコピーする
mm0[63:0] = mm0[63:32] : mm1[63:32]

PUNPKLBW mm0,mm1 4つの下位バイトをワードにインターリーブしてコピーする
mm0[63:48] = mm0[31:24] : mm1[31:24]
mm0[48:32] = mm0[23:16] : mm1[23:16]
mm0[31:16] = mm0[15:8] : mm1[15:8]
mm0[15:0] = mm0[7:0] : mm1[7:0]
PUNPKLWD mm0,mm1 2つの下位ワードをダブルワードにインターリーブしてコピーする
mm0[63:32] = mm0[31:16] : mm1[31:16]
mm0[31:0] = mm0[15:0] : mm1[15:0]
PUNPKLDQ mm0,mm1 下位ダブルワードをクワッドワードにインターリーブしてコピーする
mm0[63:0] = mm0[31:0] : mm1[31:0]

 こうしてみると複雑な動作をする命令は特にない。マルチメディアエクステンションという名前に身構えていたのだろうか。


参考文献:
MMXテクノロジオフィシャルガイド Part3 MMXテクノロジアーキテクチャ詳解
→ MMX命令の応用例や当時のPentium/Pentium Proのチューニングについて詳しく書かれた本。

MMXテクノロジオフィシャルガイド (SOFTBANK BOOKS)MMXテクノロジオフィシャルガイド (SOFTBANK BOOKS)

ソフトバンククリエイティブ 1997-01
売り上げランキング : 1006603

Amazonで詳しく見る
by G-Tools

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(1件)

タイトル (本文) ブログ名/日時
マルチメディア命令調査:MIPS Vのマルチメディア拡張MDMX
 呼び方が「マッドマックス」というMIPSの3Dマルチメディア命令拡張。1996年にMicroprocessor Forumで発表されたもの。 ...続きを見る
竹下世界塔の計算機よもやま話
2013/02/25 01:44

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
URL(任意)
本 文




マルチメディア命令調査:IA-32のMMX命令 竹下世界塔の計算機よもやま話/BIGLOBEウェブリブログ
文字サイズ:       閉じる