特許第5960115号(P5960115)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ インテル コーポレイションの特許一覧

特許5960115プロセッサに関するロード/移動及び複製命令
<>
  • 特許5960115-プロセッサに関するロード/移動及び複製命令 図000002
  • 特許5960115-プロセッサに関するロード/移動及び複製命令 図000003
  • 特許5960115-プロセッサに関するロード/移動及び複製命令 図000004
  • 特許5960115-プロセッサに関するロード/移動及び複製命令 図000005
  • 特許5960115-プロセッサに関するロード/移動及び複製命令 図000006
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5960115
(24)【登録日】2016年7月1日
(45)【発行日】2016年8月2日
(54)【発明の名称】プロセッサに関するロード/移動及び複製命令
(51)【国際特許分類】
   G06F 9/315 20060101AFI20160719BHJP
   G06F 9/38 20060101ALI20160719BHJP
【FI】
   G06F9/30 340D
   G06F9/38 370A
【請求項の数】27
【全頁数】19
(21)【出願番号】特願2013-257903(P2013-257903)
(22)【出願日】2013年12月13日
(62)【分割の表示】特願2010-39897(P2010-39897)の分割
【原出願日】2002年12月12日
(65)【公開番号】特開2014-89730(P2014-89730A)
(43)【公開日】2014年5月15日
【審査請求日】2013年12月13日
(31)【優先権主張番号】10/032,144
(32)【優先日】2001年12月20日
(33)【優先権主張国】US
【前置審査】
(73)【特許権者】
【識別番号】593096712
【氏名又は名称】インテル コーポレイション
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100091214
【弁理士】
【氏名又は名称】大貫 進介
(72)【発明者】
【氏名】ルーセル,パトリス
【審査官】 三坂 敏夫
(56)【参考文献】
【文献】 特開平08−314898(JP,A)
【文献】 特開昭61−294550(JP,A)
【文献】 特開平09−016397(JP,A)
【文献】 特開平10−240528(JP,A)
【文献】 米国特許第06115812(US,A)
【文献】 池井満,”IA−64プロセッサ基本講座”,日本,株式会社オーム社,2000年 8月25日,p.150−151,160−161
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/315
G06F 9/38
(57)【特許請求の範囲】
【請求項1】
プロセッサであって、
フェッチ/復号化手段と、
命令に応じて機能を実行する実行コアと、を備え、
前記命令の1つは、単一のソース・オペランドを示すフォーマットを有する単一の移動及び複製命令を含み、
前記単一の移動及び複製命令は、前記プロセッサに、
前記単一のソース・オペランドの非連続位置群からの複数のビットを、前記単一のソース・オペランドと同一サイズである単一のデスティネーション・レジスタの非連続デスティネーション位置群に記憶させ、かつ、
前記単一のソース・オペランドの前記非連続位置群それぞれからの前記ビットを、前記デスティネーション・レジスタの他のデスティネーション位置群に複製させ、
複製されるべき前記単一のソース・オペランドの前記非連続位置群は、前記単一の移動及び複製命令に対して固定であるが、
複製されるべき前記単一のソース・オペランドの前記非連続位置群は、前記単一の移動及び複製命令によって、黙示的に規定される、プロセッサ。
【請求項2】
方法であって、
プロセッサを用いて単一のプログラム命令を実行する工程を含み、
前記プロセッサは、
前記プロセッサの実行コアを用いて、前記命令によって示される単一のソース・オペランドの非連続位置群からの複数のビットを、前記単一のソース・オペランドと同一サイズを有する単一のデスティネーション・レジスタの非連続デスティネーション位置群に記憶する工程と、
前記プロセッサの実行コアを用いて、前記単一のソース・オペランドの前記非連続位置群の各々のビットを、前記デスティネーション・レジスタのデスティネーション位置の他の群に複製し、記憶する工程と、
を含む、オペレーションを実行し、
複製されるべき前記単一のソース・オペランドの前記非連続位置群は、前記命令に対して黙示的である、方法。
【請求項3】
命令を記憶させたコンピュータ判読可能媒体上に存在するコンピュータ・プログラムであって、該命令がプロセッサによって実行された場合、該プロセッサに:
前記命令によって示される単一のソース・オペランドの非連続位置群からの複数のビットを、前記単一のソース・オペランドと同一サイズを有する単一のデスティネーション・レジスタの非連続デスティネーション位置群に記憶する工程;及び
前記命令によって示される前記単一のソース・オペランドの前記非連続位置群の各々のビットを前記デスティネーション・レジスタのデスティネーション位置の他の群に複製し、記憶する工程;を行わせ、
複製される対象の前記単一のソース・オペランドの前記非連続位置群は、前記命令によって黙示的に規定される、コンピュータ・プログラム。
【請求項4】
プロセッサであって、
フェッチ/復号化手段と、
命令に応じて機能を実行する実行コアと、を備え、
前記命令の1つは、単一のパック単精度浮動小数点移動、及び、単一の128ビットのソース・オペランドを示すフォーマットを有する複製命令を含み、かつ、
前記プロセッサに、
単一の128ビットのデスティネーション・レジスタのビット〔63−32〕に前記単一のソース・オペランドのビット〔63−32〕を記憶させ、
前記単一のソース・オペランドのビット〔63−32〕を、前記デスティネーション・レジスタのビット〔31−0〕に複製させて、記憶させ、
前記デスティネーション・レジスタのビット〔127−96〕に前記単一のソース・オペランドのビット〔127−96〕を記憶させ、
前記デスティネーション・レジスタのビット〔95−64〕に前記ソース・オペランドの前記ビット〔127−96〕を複製させて、記憶させ、
前記命令は、前記プロセッサに、
前記ソース・オペランドの前記ビット〔63−32〕を、前記デスティネーション・レジスタの前記ビット〔63−32〕及び前記ビット〔31−0〕に記憶させ、かつ、
前記ソース・オペランドの前記ビット〔127−96〕を、前記デスティネーション・レジスタの前記ビット〔127−96〕及び前記ビット〔95−64〕に記憶させる、
ことだけができるタイプのものである、プロセッサ。
【請求項5】
命令を実行する工程を含む、プロセッサにおいて実行される方法であって、前記命令は、
前記命令によって示される単一のソース・オペランドのビット〔127−0〕にアクセスする工程;
単一の128ビットのデスティネーション・レジスタのビット〔63−32〕に前記単一のソース・オペランドのビット〔63−32〕を記憶し、前記単一のソース・オペランドの前記ビット〔63−32〕を前記デスティネーション・レジスタのビット〔31−0〕に複製し、記憶する工程;及び
前記デスティネーション・レジスタのビット〔127−96〕に前記単一のソース・オペランドのビット〔127−96〕を記憶し、前記単一のソース・オペランドのビット〔127−96〕を前記デスティネーション・レジスタのビット〔95−64〕に複製し、記憶する工程、を行わせ、
前記単一のソース・オペランドの前記ビット〔63−32〕を、前記デスティネーション・レジスタの前記ビット〔63−32〕及び前記ビット〔31−0〕へ記憶することは、前記命令に対して黙示的である、方法。
【請求項6】
命令を記憶させたコンピュータ判読可能媒体上に存在するコンピュータ・プログラムであって、該命令がプロセッサによって実行された場合、該プロセッサに:
前記命令によって示される単一のソース・オペランドのビット〔127−0〕にアクセスする工程;
単一の128ビットのデスティネーション・レジスタのビット〔63−32〕に、前記命令によって示される前記単一のソース・オペランドのビット〔63−32〕を記憶し、前記単一のソース・オペランドの前記ビット〔63−32〕を前記デスティネーション・レジスタのビット〔31−0〕に複製し、記憶する工程;及び
前記デスティネーション・レジスタのビット〔127−96〕に、前記命令によって示される前記単一のソース・オペランドのビット〔127−96〕を記憶し、前記単一のソース・オペランドのビット〔127−96〕を前記デスティネーション・レジスタのビット〔95−64〕に複製し、記憶する工程;を行わせ、
前記単一のソース・オペランドの前記ビット〔63−32〕を、前記デスティネーション・レジスタの前記ビット〔63−32〕へ記憶すること、及び、前記単一のソース・オペランドの前記ビット〔63−32〕を、前記デスティネーション・レジスタの前記ビット〔31−0〕へ複製及び記憶することは、前記命令によって黙示的に規定される、コンピュータ・プログラム。
【請求項7】
プロセッサであって、
フェッチ/復号化手段と、
命令に応じて機能を行う実行コアと、を備え、
前記命令の1つは、単一のソース・オペランドを示すフォーマットを有し、前記プロセッサに、
単一の128ビットのデスティネーション・レジスタのビット〔31−0〕に前記単一のソース・オペランドのビット〔31−0〕を記憶させ、
前記単一のソース・オペランドの前記ビット〔31−0〕を前記デスティネーション・レジスタのビット〔63−32〕に複製させ、記憶させ、
前記デスティネーション・レジスタのビット〔95−64〕に該単一のソース・オペランドのビット〔95−64〕を記憶させ、かつ、
前記デスティネーション・レジスタのビット〔127−96〕に前記単一のソース・オペランドの前記ビット〔95−64〕を複製させ、記憶させる、
単一のパック単精度浮動小数点移動及び複製命令を含み、
前記パック単精度浮動小数点移動及び複製命令は、前記プロセッサに、
前記デスティネーション・レジスタの前記ビット〔63−32〕及び前記ビット〔31−0〕に前記単一のソース・オペランドの前記ビット〔31−0〕を記憶させ、かつ、
前記デスティネーション・レジスタの前記ビット〔127−96〕及び前記ビット〔95−64〕に前記単一のソース・オペランドの前記ビット〔95−64〕を記憶させる、
ことのみできるタイプのものである、プロセッサ。
【請求項8】
方法であって、
単一のソース・オペランドを示すフォーマットを有するプログラム命令を実行する工程を含み、前記命令は、
プロセッサにおいて、
前記命令によって示された前記単一のソース・オペランドのビット〔31−0〕を単一の128ビット・デスティネーション・レジスタのビット〔31−0〕に記憶する機能と、
前記命令によって示された前記単一のソース・オペランドの前記ビット〔31−0〕を前記デスティネーション・レジスタのビット〔63−32〕に複製し、記憶する機能と、
前記単一のソース・オペランドのビット〔95−64〕を前記デスティネーション・レジスタのビット〔95−64〕に記憶する機能と、
前記命令によって示された前記単一のソース・オペランドの前記ビット〔95−64〕を前記デスティネーション・レジスタのビット〔127−96〕に複製し、記憶する機能と、を生じさせ、
前記単一のソース・オペランドの前記ビット〔95−64〕を、前記デスティネーション・レジスタの前記ビット〔95−64〕及び前記ビット〔127−96〕へ記憶することは、前記命令に対して黙示的である、方法。
【請求項9】
命令を記憶させたコンピュータ判読可能媒体上に存在するコンピュータ・プログラムであって、前記命令は、プロセッサによって実行された場合、前記プロセッサに機能を行わせ、前記機能は、
前記命令によって示された単一のソース・オペランドのビット〔31−0〕を単一の128ビット・デスティネーション・レジスタのビット〔31−0〕に記憶する機能と、
前記単一のソース・オペランドの前記ビット〔31−0〕を前記デスティネーション・レジスタのビット〔63−32〕に複製し、記憶する機能と、
前記単一のソース・オペランドのビット〔95−64〕を前記デスティネーション・レジスタのビット〔95−64〕に記憶する機能と、
前記命令によって示された前記単一のソース・オペランドの前記ビット〔95−64〕を前記デスティネーション・レジスタのビット〔127−96〕に複製し、記憶する機能と、を含み、
前記単一のソース・オペランドの前記ビット〔95−64〕の、前記デスティネーション・レジスタの前記ビット〔95−64〕への前記記憶、及び、前記単一のソース・オペランドの前記ビット〔95−64〕の、前記デスティネーション・レジスタの前記ビット〔127−96〕への前記複製及び前記記憶は、前記命令によって黙示的に規定される、コンピュータ・プログラム。
【請求項10】
請求項1記載のプロセッサであって、前記単一の移動及び複製命令は、メモリにおける前記単一のソース・オペランドを示すためのフォーマットを有する、プロセッサ。
【請求項11】
請求項1記載のプロセッサであって、前記ソース・オペランドの前記非連続位置群は、32ビットの単精度浮動小数点データを含む、プロセッサ。
【請求項12】
請求項1記載のプロセッサであって、前記移動及び複製命令は、前記単一のソース・オペランドと同じサイズを有する単一のデスティネーション・レジスタを示す、プロセッサ。
【請求項13】
請求項4記載のプロセッサであって、前記パック単精度浮動小数点移動及び複製命令は、メモリにおける前記単一のソース・オペランドを示すためのフォーマットを有し、前記ソース・オペランドの前記ビット〔63−32〕は、32ビットの単精度浮動小数点データ要素を含む、プロセッサ。
【請求項14】
請求項4記載のプロセッサであって、前記パック単精度浮動小数点移動及び複製命令は、前記単一のソース・オペランドと同じサイズを有する単一のデスティネーション・レジスタを示す、プロセッサ。
【請求項15】
請求項7記載のプロセッサであって、前記パック単精度浮動小数点移動及び複製命令は、メモリにおける前記単一のソース・オペランドを示すためのフォーマットを有し、前記ソース・オペランドの前記ビット〔31−0〕は、32ビットの単精度浮動小数点データ要素を含む、プロセッサ。
【請求項16】
請求項7記載のプロセッサであって、前記パック単精度浮動小数点移動及び複製命令は、前記単一のソース・オペランドと同じサイズを有する単一のデスティネーション・レジスタを示す、プロセッサ。
【請求項17】
装置であって、
単一のソース及び単一のデスティネーションを示す命令を受け取るためのフロント・エンドであって、前記単一のソースは、第1の単精度浮動小数点値、第2の単精度浮動小数点値、第3の単精度浮動小数点値、及び、第4の単精度浮動小数点値を含む第1の複数のパック単精度浮動小数点値を有し、前記第2の単精度浮動小数点値は、前記第1の単精度浮動小数点値と前記第3の単精度浮動小数点値とを記憶するために使用されるビット間にある前記単一のソースのビットに記憶される、フロント・エンドと、
前記フロント・エンドに結合された実行コアであって、前記実行コアは、前記デスティネーションに前記命令に対応する結果を記憶し、前記結果は、前記第1の単精度浮動小数点値に等しくなる第5の単精度浮動小数点値、前記第1の単精度浮動小数点値に等しくなる第6の単精度浮動小数点値、前記第3の単精度浮動小数点値に等しくなる第7の単精度浮動小数点値、及び、前記第3の単精度浮動小数点値に等しくなる第8の単精度浮動小数点値を順番に含む第2の複数のパック単精度浮動小数点値を有する、実行コアと、を備え、
前記命令は、前記第5の単精度浮動小数点値及び前記第6の単精度浮動小数点値が前記第1の単精度浮動小数点値に等しくなる旨を示唆する、装置。
【請求項18】
請求項17記載の装置であって、前記命令はメモリにおける前記単一のソースを示す装置。
【請求項19】
請求項17記載の装置であって、前記命令は、前記単一のソースと同じサイズを有する単一のデスティネーションとして、前記デスティネーションを示す装置。
【請求項20】
プロセッサであって、
第1の命令及び第2の命令をフェッチするためのフロント・エンドと、
前記フロント・エンドに結合され、前記第1の命令及び前記第2の命令を実行するためのコアと、を備え、
前記コアは、第1のデスティネーション・レジスタ及びメモリにおける単一の第1のソースを示す前記第1の命令に応答して、前記第1のソースのビット〔31−0〕を前記第1のデスティネーション・レジスタのビット記憶位置〔63−32〕及び〔31−0〕に記憶し、かつ、前記第1のソースのビット〔95−64〕を前記第1のデスティネーション・レジスタのビット記憶位置〔127−96〕及び〔95−64〕に記憶し、
前記コアは、第2のデスティネーション・レジスタ及びメモリにおける単一の第2のソースを示す前記第2の命令に応答して、前記第2のソースのビット〔63−32〕を前記第2のデスティネーション・レジスタのビット記憶位置〔31−0〕及び〔63−32〕に記憶し、かつ、前記第2のソースのビット〔127−96〕を前記第2のデスティネーション・レジスタのビット記憶位置〔127−96〕及び〔95−64〕に記憶し、
前記第1の命令は、前記コアが前記第1のソースの前記ビット〔31−0〕を前記第1のデスティネーション・レジスタの前記ビット記憶位置〔63−32〕及び〔31−0〕に記憶させることを黙示的に規定する、プロセッサ。
【請求項21】
請求項20記載のプロセッサであって、前記第2の命令は前記第2のソースを単一のソースとして示すプロセッサ。
【請求項22】
装置であって、
単一のソース及びデスティネーションを示す命令を受け取るためのフロント・エンドであって、前記ソースは、第1の複数のパック浮動小数点値を有し、前記第1の複数のパック浮動小数点値は、第1の浮動小数点値、第2の浮動小数点値、及び、第3の浮動小数点値を含み、前記第2の浮動小数点値は、前記第1の浮動小数点値と前記第3の浮動小数点値とを記憶するために使用されるビット間にある前記単一のソースのビットに記憶される、フロント・エンドと、
前記フロント・エンドに結合された実行コアであって、前記実行コアは、前記デスティネーションに前記命令に対応する結果を記憶し、前記結果は、前記第1の浮動小数点値に等しくなる第4の浮動小数点値、前記第1の浮動小数点値に等しくなる第5の浮動小数点値、前記第3の浮動小数点値に等しくなる第6の浮動小数点値、及び、前記第3の浮動小数点値に等しくなる第7の浮動小数点値を順番に含む第2の複数のパック浮動小数点値を有する、実行コアと、を備え、
前記第1の浮動小数点値に等しくなる前記第4の浮動小数点値及び前記第5の浮動小数点値は、前記命令のタイプによって固定されている、装置。
【請求項23】
装置であって、
単一のソース及びデスティネーションを示す命令を受け取るためのフロント・エンドであって、前記単一のソースは、第1の複数のパック浮動小数点値を有し、前記第1の複数のパック浮動小数点値は、前記ソースのビット〔31−0〕における第1の単精度浮動小数点値、前記ソースのビット〔63−32〕における第2の単精度浮動小数点値、前記ソースのビット〔95−64〕における第3の単精度浮動小数点値、及び前記ソースのビット〔127−96〕における第4の単精度浮動小数点値を含む、フロント・エンドと、
前記フロント・エンドに結合された実行コアであって、前記実行コアは、前記命令によって示された前記デスティネーションに前記命令に対応するパックされた結果を記憶し、前記パックされた結果は、第2の複数のパック浮動小数点値を有し、前記第2の複数のパック浮動小数点値は、前記第1の単精度浮動小数点値に等しくなる前記パックされた結果のビット〔31−0〕における第5の単精度浮動小数点値、前記第1の単精度浮動小数点値に等しくなる前記パックされた結果のビット〔63−32〕における第6の単精度浮動小数点値、前記第3の単精度浮動小数点値に等しくなる前記パックされた結果のビット〔95−64〕における第7の単精度浮動小数点値、及び、前記第3の単精度浮動小数点値に等しくなる前記パックされた結果のビット〔127−96〕における第8の単精度浮動小数点値を含む、実行コアと、を備え、
前記命令のオプコードは、前記第5の単精度浮動小数点値及び前記第6の単精度浮動小数点値が前記第1の単精度浮動小数点値に等しくなる旨を示す、装置。
【請求項24】
装置であって、
単一のソース及びデスティネーションを示す命令を受け取るためのフロント・エンドであって、前記ソースは、第1の複数のパック浮動小数点値を有し、前記第1の複数のパック浮動小数点値は、前記ソースのビット〔31−0〕における第1の単精度浮動小数点値、前記ソースのビット〔63−32〕における第2の単精度浮動小数点値、前記ソースのビット〔95−64〕における第3の単精度浮動小数点値、及び、前記ソースのビット〔127−96〕における第4の単精度浮動小数点値を含む、フロント・エンドと、
前記フロント・エンドに結合された実行コアであって、前記実行コアは、前記命令によって示された前記デスティネーションに前記命令に対応するパックされた結果を記憶し、前記パックされた結果は、第2の複数のパック浮動小数点値を有し、前記第2の複数のパック浮動小数点値は、前記第2の単精度浮動小数点値に等しくなる前記パックされた結果のビット〔31−0〕における第5の単精度浮動小数点値、前記第2の単精度浮動小数点値に等しくなる前記パックされた結果のビット〔63−32〕における第6の単精度浮動小数点値、前記第4の単精度浮動小数点値に等しくなる前記パックされた結果のビット〔95−64〕における第7の単精度浮動小数点値、及び、前記第4の単精度浮動小数点値に等しくなる前記パックされた結果のビット〔127−96〕における第8の単精度浮動小数点値を含む、実行コアと、を備え、
前記命令は、前記第5の単精度浮動小数点値及び前記第6の単精度浮動小数点値が前記第2の単精度浮動小数点値に等しくなる旨を黙示的に示す、装置。
【請求項25】
装置であって、
単一のソース及びデスティネーションを示す命令を受け取るための復号化手段であって、前記単一のソースは、第1の複数のパック浮動小数点値を有し、前記第1の複数のパック浮動小数点値は、第1の値、第2の値、及び、第3の値を含み、前記第2の値は、前記第1の値と前記第3の値とを記憶するために使用されるビット間にある前記単一のソースのビットに記憶される、復号化手段と、
前記復号化手段に結合された実行リソースであって、前記実行リソースは、前記デスティネーションに前記命令に対応する結果を記憶し、前記結果は、前記第1の値に等しくなる第4の値、前記第1の値に等しくなる第5の値、前記第3の値に等しくなる第6の値、及び、前記第3の値に等しくなる第7の値を順番に含む第2の複数のパック値を含む、実行リソースと、を備え、
前記命令は、前記第4の値及び前記第5の値が前記第1の値に等しくなる旨を黙示的に規定する、装置。
【請求項26】
装置であって、
単一のソース及び単一のデスティネーションを示す命令を受け取るための復号化手段であって、前記ソースは、第1の複数のパック浮動小数点値を有し、前記第1の複数のパック浮動小数点値は、前記ソースのビット〔31−0〕における第1の単精度浮動小数点値、前記ソースのビット〔63−32〕における第2の単精度浮動小数点値、前記ソースのビット〔95−64〕における第3の単精度浮動小数点値、及び、前記ソースのビット〔127−96〕における第4の単精度浮動小数点値を含む、復号化手段と、
前記復号化手段に結合された実行リソースであって、前記実行リソースは、前記命令によって示された前記デスティネーションに前記命令に対応するパックされた結果を記憶し、前記パックされた結果は、第2の複数のパック浮動小数点値を有し、前記第2の複数のパック浮動小数点値は、前記第1の単精度浮動小数点値に等しくなる前記パックされた結果のビット〔31−0〕における第5の単精度浮動小数点値、前記第1の単精度浮動小数点値に等しくなる前記パックされた結果のビット〔63−32〕における第6の単精度浮動小数点値、前記第3の単精度浮動小数点値に等しくなる前記パックされた結果のビット〔95−64〕における第7の単精度浮動小数点値、及び、前記第3の単精度浮動小数点値に等しくなる前記パックされた結果のビット〔127−96〕における第8の単精度浮動小数点値を含む、実行リソースと、を備え、
前記命令のオプコードは、前記第5の単精度浮動小数点値及び前記第6の単精度浮動小数点値が前記第1の単精度浮動小数点値に等しくなる旨を示し、
前記命令は、前記ソースのアドレスを示し、
前記パックされた結果は、前記ソースと同じアドレスを有する第2のソースを示す前記命令なしで記憶される、装置。
【請求項27】
装置であって、
単一のソース及び単一のデスティネーションを示す命令を受け取るための復号化手段であって、前記ソースは、第1の複数のパック浮動小数点値を有し、前記第1の複数のパック浮動小数点値は、前記ソースのビット〔31−0〕における第1の単精度浮動小数点値、前記ソースのビット〔63−32〕における第2の単精度浮動小数点値、前記ソースのビット〔95−64〕における第3の単精度浮動小数点値、及び、前記ソースのビット〔127−96〕における第4の単精度浮動小数点値を含む、復号化手段と、
前記復号化手段に結合された実行リソースであって、前記実行リソースは、前記命令によって示された前記デスティネーションに前記命令に対応するパックされた結果を記憶し、前記パックされた結果は、第2の複数のパック浮動小数点値を有し、前記第2の複数のパック浮動小数点値は、前記第2の単精度浮動小数点値に等しくなる前記パックされた結果のビット〔31−0〕における第5の単精度浮動小数点値、前記第2の単精度浮動小数点値に等しくなる前記パックされた結果のビット〔63−32〕における第6の単精度浮動小数点値、前記第4の単精度浮動小数点値に等しくなる前記パックされた結果のビット〔95−64〕における第7の単精度浮動小数点値、及び、前記第4の単精度浮動小数点値に等しくなる前記パックされた結果のビット〔127−96〕における第8の単精度浮動小数点値を含む、実行リソースと、を備え、
前記第5の単精度浮動小数点値及び前記第6の単精度浮動小数点値が前記第2の単精度浮動小数点値に等しくなる旨が前記命令によって黙示的に規定され
前記命令は、前記ソースのアドレスを示し、
前記パックされた結果は、前記ソースと同じアドレスを有する第2のソースを示す前記命令なしで記憶される、装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プロセッサに関するロード/移動及び複製命令に関するものである。
【背景技術】
【0002】
システム・アーキテクチャは、プロセッサの動作のモードと、オペレーティング・システムをサポートするよう設けられて更にシステム指向レジスタ並びにデータ構造及びシステム指向命令を有する仕組み、とを表すものである。システム・アーキテクチャは更に、実アドレスと保護モードとの間を切り替えるのに必要な仕組みを設けるものである。
【発明の概要】
【発明が解決しようとする課題】
【0003】
システム・アーキテクチャに対する単一命令複数データ(SIMD)技術は64ビットのレジスタに入ったパック整数データの並列計算を備える。SIMDは性能の向上を、例えば、高度メディア、画像処理及びデータ圧縮アプリケーションにおけるプロセッサに対して、設ける。
【課題を解決するための手段】
【0004】
下記の実施例以外の実施例は本特許請求の範囲内におさまるものである。
【図面の簡単な説明】
【0005】
図1】プロセッサの構成図である。
図2】実行環境の構成図である。
図3】バイト・オーダ基本データ・タイプの図である。
図4】浮動小数点フォーマットの図である。
図5】種々のSIMD拡張命令、データ・タイプ及び該データ・タイプをレジスタにパックする方法をまとめた表である。
【発明を実施するための形態】
【0006】
下記の実施例以外の実施例は本特許請求の範囲内におさまるものである。
【実施例】
【0007】
図1によって、プロセッサ10を表す。プロセッサ10は3ウェイのスーパースカラ・パイプライン・アーキテクチャである。並列処理手法を用いて、プロセッサ10は大抵、クロック・サイクル毎に3つの命令を復号化し、ディスパッチして、実行を完了する(リタイアする)ことができる。このレベルの命令スループットを取り扱うよう、プロセッサ10は、アウト・オブ・オーダ型命令実行をサポートする分離型12段パイプラインを用いる。プロセッサ10のマイクロ・アーキテクチャ・パイプラインは4つの部分、すなわち、1次キャッシュ12及び2次キャッシュ14、フロント・エンド16、アウト・オブ・オーダ型実行コア18、及びリタイアメント部20、に分割される。命令及びデータはシステム・バス24とインタフェースするバス・インタフェース・ユニット22を通じてこれらのユニットに供給される。フロント・エンド16は非常に高い実行帯域を有して半分のクロック・サイクルのレーテンシによって基本整数演算を実行し得るアウト・オブ・オーダ型コア18に対してプログラムの順序で命令を供給する。フロント・エンド16は命令をフェッチして、マイクロ演算(μ−ops)と呼ばれる、簡単な演算に復号化する。フロント・エンド16は、アウト・オブ・オーダ型コア18に対して、元のプログラム順序で、サイクル毎に複数のマイクロ演算を発出し得る。フロント・エンド16はいくつかの基本機能を行う。例えば、フロント・エンド16は実行されそうなプリフェッチ命令を行い、既にプリフェッチされていない命令をフェッチし、命令をマイクロ演算に復号化し、複雑な命令及び特定用途向コードに対するマイクロ・コードを生成し、実行トレース・キャッシュ26からの復号化命令を配信して、分岐予測ユニット28において高度アルゴリズムを用いて分岐を予測する。
【0008】
プロセッサ10のフロント・エンド16は高速の、パイプライン・マイクロプロセッサにおける共通の問題のいくつかに対応するよう企図されている。これらの問題のうちの2つは、例えば、重大な遅延の原因をもたらしている。これらは当該ターゲットからフェッチされた命令を復号化する時間及びキャッシュ線の中間にある分岐又は分岐ターゲットによる無駄な復号化帯域である。
【0009】
実行トレース・キャッシュ26は復号化命令を記憶することによってこれらの両方の問題に対応する。命令はフェッチされ、翻訳エンジン(図なし)によって復号化されて、トレースと呼ばれる一連のマイクロ演算に組み入れられる。これらのマイクロ演算のトレースはトレース・キャッシュ26に記憶される。最もありそうな分岐のターゲットからの命令は、命令アドレスの連続性にかかわりなく、該分岐の直後に続く。トレースが構築されると、トレース・キャッシュ26はそのトレースに後続する命令についてサーチされる。その命令が既存のトレースにおける第1命令として出現する場合、メモリ階層からの命令30のフェッチ及び復号化は終わって、トレース・キャッシュ26は命令の新たなソースになる。
【0010】
実行トレース・キャッシュ18及び翻訳エンジン(図なし)は協調分岐予測ハードウェアを有する。分岐ターゲットは分岐ターゲット・バッファ(BTBS)28を用いてそれらのリニア・アドレスに基づいて予測されて直ちにフェッチされる。分岐ターゲットは、それらがトレース・キャッシュ26から、実際にそこにキャッシュされている場合、フェッチされる;さもなければ、それらはメモリ階層からフェッチされる。翻訳エンジンの分岐予測情報は最もありうる経路に沿ってトレースを形成するのに用いられる。
【0011】
コア18はプロセッサ10が命令を再配列することを可能にするようアウト・オブ・オーダで命令を実行するので、一マイクロ演算が、データ又は競合実行リソース待ちの間に、遅延された場合、プログラムの順序において後続する他のマイクロ演算はそれを迂回して進み得る。プロセッサ10はT演算(T−ops)の流れを円滑化するよういくつかのバッファを使用する。これは、パイプラインの一部が遅延を経験する場合、その遅延は並列に実行する他の演算又は先行してバッファのキューに入れられたマイクロ演算の実行によって相殺され得ることを示唆する。
【0012】
コア18は並列実行を容易にするよう企図されている。コア18はサイクル毎に6つのマイクロ演算までディスパッチし得る、すなわち、これはトレース・キャッシュ26及びリタイアメント部20のマイクロ演算の帯域を超える、ことを特筆する。ほとんどのパイプラインは毎サイクル、新しいマイクロ演算の実行を開始し得るので、いくつかの命令がパイプライン毎にいつでも処理し得る。多数の算術論理演算ユニット(ALU)命令は1サイクル毎に2つを開始し得て、多くの浮動小数点命令は2サイクル毎に1つを開始し得る。最後に、マイクロ演算を、アウト・オブ・オーダで、それらのデータ入力が準備完了になってリソースが利用可能になるとすぐに、開始し得る。
【0013】
リタイアメント部20は実行コア18からの実行マイクロ演算の結果を受信して該結果を処理するので、適切なアーキテクチャ状態が元のプログラムの順序によって更新される。意味上正しく実行するよう、命令の結果はリタイアされる前に元のプログラムの順序でコミットされる。命令がリタイアされるのと並行して、例外を発生させ得る。したがって、例外は投機的には発生し得ない。それらは正しい順序にて発生して、プロセッサ10は実行後、正しく再起動し得る。
【0014】
マイクロ演算が完了してその結果をデスティネーションに書き込む場合、それはリタイアされる。3つのマイクロ演算までをサイクル毎にリタイアし得る。リタイアメント部20におけるリオーダ・バッファ(ROB)(図なし)は完了マイクロ演算をバッファし、アーキテクチャ状態を正常に更新して、例外の配列を管理するプロセッサ10におけるユニットである。
【0015】
リタイアメント部20は更に、分岐を常に把握して更新分岐ターゲット情報をBTB28に送信して分岐履歴を更新する。このようにして、もう必要のないトレースをトレース・キャッシュ26から除去し得て、新しい分岐経路を、更新分岐履歴情報に基づいて、フェッチし得る。
【0016】
図2によって、実行環境50を表す。(図1の)プロセッサ10上で実行中のプログラム又はタスクは何れも命令を実行するリソース群及びコード、データ、並びに状態情報を記憶するリソース群が与えられる。これらのリソースはプロセッサ10に関する実行環境50を構成する。プロセッサ10上で実行中のアプリケーション・プログラム及びオペレーティング・システム又はエグゼクティブは共同で実行環境50を使用する。実行環境50は基本プログラム実行レジスタ52、アドレス空間54、浮動小数点ユニット(FPU)レジスタ56、マルチメディア拡張レジスタ(MMX)58、及びSIMD拡張(SSE(ストリーミングSIMD拡張命令)及びSSE2(ストリーミングSIMD拡張命令2))レジスタ60を含む。
【0017】
プロセッサ10上で実行中のタスク又はプログラムは何れも4ギガバイト(232バイト)までのリニア・アドレス・ベース54及び64ギガバイト(236バイト)までの物理アドレス・ベースをアドレス指定し得る。アドレス空間54はフラットなものでもセグメント化されたものでもよい。物理アドレス拡張の仕組みを用いて、236−1の物理アドレス空間をアドレス指定し得る。
【0018】
基本プログラム実行レジスタ52は8つの汎用レジスタ62、6つのセグメント・レジスタ64、EFLAGSレジスタ(フラグ・レジスタ)66、及びEIP(命令ポインタ)レジスタ68を含む。基本プログラム実行レジスタ52は汎用命令群を実行する基本実行環境を設ける。これらの命令はバイト、ワード、及びダブルワード整数に基本整数算術を行い、プログラムのフロー制御を扱い、ビット及びバイトの強さを演算して、メモリをアドレス指定する。
【0019】
FPUレジスタ56は8つのFPUデータ・レジスタ70、FPU制御レジスタ72、ステータス・レジスタ74、FPU命令ポインタ・レジスタ76、FPUオペランド(データ)ポインタ・レジスタ78、FPUタグ・レジスタ80及びFPU命令操作(OP)コード・レジスタ82を含む。FPUレジスタ56は単精度、倍精度、並びに倍精度拡張浮動小数値、ワード、ダブルワード、並びにクアドワード整数、及び2進化10進符号(BCD)値を演算する実行環境を設ける。
【0020】
8つのマルチメディア拡張レジスタ58は64ビットのパック・バイト、ワード、及びダブルワードの整数に単一命令複数データ(SIMD)演算を行うことをサポートする。
【0021】
SIMD拡張命令(SSE及びSSE2)レジスタ60は8つの拡張マルチメディア(XMM)データ・レジスタ84及びMXCSRレジスタ86を含む。SIMD拡張命令(SSE及びSSE2)レジスタ60は128ビットのパック単精度並びに倍精度浮動小数値及び128ビットのパック・バイト、ワード、ダブルワード及びクワドワード整数にSIMD演算を実行することをサポートする。
【0022】
スタック(図なし)はプロシジャ又はサブルーチン・コール及びプロシジャ又はサブルーチン間でのパラメータ渡しをサポートする。
【0023】
汎用レジスタ62はオペランド及びポインタを記憶するのに利用可能である。セグメント・レジスタ64はセグメント・セレクタを6つまで収容する。EFLAGS(プログラム・ステータス及び制御)レジスタ66は実行中のプログラムのステータスについて通知してプロセッサの限定的な(アプリケーション・プログラム・レベルの)制御を可能にする。EIP(命令ポインタ)レジスタ68は実行する次の命令に対する32ビットのポインタを含む。
【0024】
32ビットの汎用レジスタ62は論理及び算術演算用オペランド、アドレス計算用オペランド、及びメモリ・ポインタを収容するよう備えられる。セグメント・レジスタ64は16ビットのセグメント・セレクタを収容する。セグメント・セレクタはメモリにおけるセグメントを識別する特別なポインタである。メモリにおいて特定のセグメントをアクセスするよう、そのセグメントに対するセグメント・セレクタが適切なセグメント・レジスタ64になければならない。
【0025】
アプリケーション・コードを作成する場合、プログラマは一般に、アセンブラ指令及び記号のあるセグメント・セレクタを生成する。アセンブラ及び他のツールはその場合、これらの指令及び記号に関連した実際のセグメント・セレクタ値を生成する。システム・コードを作成する場合、プログラマはセグメント・セレクタを直接生成する必要があるかもしれない。
【0026】
セグメント・レジスタ64の使用方法はオペレーティング・システム又はエグゼクティブが用いるメモリ管理モデルの種類によって変わってくる。フラットな(非セグメント化)メモリ・モデルを用いる場合、セグメント・レジスタ64は重複セグメントに向けられたセグメント・セレクタによってロードされ、それらの各々はリニア・アドレス空間上のアドレス・ゼロから始まる。これらの重複セグメントは更にプログラムに対するリニア・アドレス空間を含む。一般に、2つ:コードに対する1つ;及びデータ並びにスタックに対するもう1つ;の重複セグメントが定義される。セグメント・レジスタ64のCS(コード・セグメント)セグメント・レジスタ(図なし)はコード・セグメントに向けられて全ての他のセグメント・レジスタはデータ及びスタック・セグメントに向けられる。
【0027】
セグメント化メモリ・モデルを用いる場合、各セグメント・レジスタ64は通常、異なるセグメント・セレクタによってロードされるので、各セグメント・レジスタ64はリニア・アドレス空間内で異なるセグメントに向けられる。したがって、常に、プログラムはリニア・アドレス空間においてセグメントを6つまでアクセスし得る。セグメント・レジスタ64の1つによって向けられることのないセグメントをアクセスするよう、プログラムは第1に、アクセスされるセグメント・セレクタをセグメント・レジスタ64にロードする。
【0028】
32ビットEFLAGSレジスタ66はステータス・フラグ群、制御フラグ、及びシステム・フラグ群を含む。EFLAGSレジスタ66におけるフラグの一部は、特定用途向命令を用いて、直接修正し得る。該全部のレジスタ66が直接検査又は修正されることを可能にする命令はない。しかしながら、以下の命令:LAHF(ステータス・フラグをAHレジスタにロードする)、SAHF(ステータス・フラグをAHレジスタに記憶する)、push−F(Fレジスタのプッシュ)、push−FD(FDレジスタのプッシュ)、pop−F(Fレジスタのポップ)、及びpop−FD(FDレジスタのポップ);をプロシジャ・スタック又は汎用レジスタにフラグ群を移動してプロシジャ・スタック又は汎用レジスタからフラグ群を移動するのに用い得る。EFLAGSレジスタ66の内容がプロシジャ・スタック又は汎用レジスタに転送された後、フラッグを、プロセッサ10ビット操作命令を用いて、検査及び修正し得る。
【0029】
タスクを一時停止する場合、プロセッサ10は自動的に一時停止されているタスクについての(図なしの)タスク状態セグメント(TSS)においてEFLAGSレジスタ66の状態をセーブする。プロセッサ10は、該プロセッサ自体に新しいタスクを結びつける場合、新しいタスク・プログラム状態レジスタ(PSS(プログラム状態セグメント)、図なし)からのデータによってEFLAGSレジスタ66をロードする。
【0030】
コールがインタラプト又は例外ハンドラ・プロシジャに対して行われた場合、プロセッサ10は自動的にプロシジャ・スタック上でEFLAGSレジスタ66の状態をセーブする。インタラプト又は例外がタスク・スイッチによって扱われる場合、EFLAGSレジスタ66の状態は一時停止されているタスクに対するTSS上にセーブされる。
【0031】
プロセッサ10において用いられる基本データ・タイプはバイト、ワード、ダブルワード、クワドワード及びダブルクワドワードである。1バイトは8ビットで、1ワードは2バイト(16ビット)で、ダブルワードは4バイト(32ビット)で、クワドワードは8バイト(64ビット)で、ダブルクワドワードは16バイト(128ビット)である。
【0032】
図3によって、メモリにおいてオペランドとして表される基本データ・タイプ各々のバイト・オーダを表す。各データ・タイプのロー・バイト(ビット0乃至7)はメモリにおける最下位のアドレスを占めてそのアドレスは更にオペランドのアドレスである。
【0033】
ワード、ダブルワード及びクアドワードはメモリにおいて自然境界上でアラインされる必要はない。ワード、ダブルワード及びクワドワードに対する自然境界は各々、偶数のアドレス、4で割り切れるアドレス、及び8で割り切れるアドレスである。しかしながら、プログラムの性能を向上させるよう、データ構造(特にスタック)は可能な限り、自然境界上でアラインされるべきである。この理由はプロセッサ10がアラインされていないメモリ・アクセスを行うのに2つのメモリ・アクセスを必要とする一方、アラインされたアクセスは1つのメモリ・アクセスを必要とすることにある。4バイトの境界をまたがるワード若しくはダブルワードのオペランド又は8バイトの境界をまたがるクワドワードのオペランドはアラインされていないとみなされ、それをアクセスするのに2つの別個のメモリ・バス・サイクルを必要とする。奇数のアドレスから開始するがワードの境界をまたがらないワードはアラインされているとみなされて、なお、1つのバス・サイクルにおいてアクセスし得る。
【0034】
ダブルクワドワードを演算する命令のいくつかはメモリ・オペランドが自然境界上でアラインされることを必要とする。これらの命令は、アラインされていないオペランドが特定された場合、一般保護例外(#GP)を生成する。ダブルクワドワードに対する自然境界は16によって割り切れるアドレスの何れかである。ダブルクワドワードを演算する他の命令はアラインされていないアクセスを、一般保護例外を生成することなく、可能にするが、メモリからアラインされていないデータをアクセスするには追加のメモリ・バス・サイクルが必要になる。
【0035】
バイト、ワード及びダブルワードはプロセッサ10の基本データ・タイプであるが、命令のいくつかは演算を数値データ・タイプに行うことを可能にするよう更にこれらのデータ・タイプを解釈・実行することをサポートする。例えば、プロセッサ10は2つの種類:符号無し;及び符号付き;の整数を定義する。符号無しの整数はゼロから、選定オペランド・サイズで符号化し得る最大の正数までの範囲の通常の(ordinary)2進値である。符号付きの整数は正及び負の整数の値の両方を表すのに用い得る2の補数の2進値である。
【0036】
プロセッサ10は3つの浮動小数点データ・タイプ;単精度浮動小数点;倍精度浮動小数点;及び倍精度拡張浮動小数点;を定義して該データ・タイプを演算する。これらのデータ・タイプに対するデータ・フォーマットは2進の浮動小数点算術に関するIEEE(米国電気電子学会)標準754に規定されたようなフォーマットに直接相当する。
【0037】
ポインタはメモリにおける位置のアドレスである。プロセッサ10は2つの種類のポインタ;ニア・ポインタ(32ビット);及びファー・ポインタ(48ビット);を定義する。ニア・ポインタはセグメント内部の(実効アドレスとも呼ばれる)32ビットのオフセットである。フラットなメモリ・モデルにおける全てのメモリ参照に、又はアクセスされるセグメントの身元が暗示される場合に、セグメント化されたモデルにおける参照に、用いられる。ファー・ポインタは48ビットの論理アドレスで、16ビットのセグメント・セレクタ及び32ビットのオフセットから成る。ファー・ポインタはアクセスされるセグメントの身元が明示的に規定されなければならない場合に、メモリ参照及びセグメント化されたメモリ・モデルにおける参照に用いられる。
【0038】
ビット・フィールドは連続する一連のビットのことである。それはメモリにおける如何なるバイトの如何なるビット位置からでも開始し得、32ビットまで含み得る。ストリングは連続する一連のビット、バイト、ワード又はダブルワードのことである。ビット列は如何なるバイトの如何なるビット位置からでも開始し得、232−1ビットまで含み得る。バイト列はバイト、ワード又はダブルワードを含み得、ゼロから232−1バイト(4ギガバイト)までの範囲に及び得る。
【0039】
2進符号化10進整数(BCD整数)は0から9までの範囲の有効値を有する符号無しの4ビット整数である。プロセッサ10は1つ以上の汎用レジスタ62又は1つ以上のFPUレジスタ56にあるBCD整数の演算を定義する。
【0040】
図4によれば、実数はFPU56浮動小数点レジスタ70における浮動小数点フォーマット100にて表される。浮動小数点フォーマットは3つの部分;符号102;有効数字104;及び指数106;を含む。符号102は該数が正(0)か負(1)を示す2進値である。有効数字104は2つの部分:1ビットの(更にJビットとも呼ばれる)2進整数108及び2進分数110;を有する。整数ビット108は表されないことがあり、その代わりに暗黙の値である。指数106は有効数字104が乗算される2を基底とする累乗を表す2進整数である。
【0041】
プロセッサ10はSIMD演算において用いられる64ビット及び128ビットのパック・データ・タイプの群を規定して該群を演算する。これらのデータ・タイプは基本データ・タイプ(パックされた、バイト、ワード、ダブルワード並びにクワドワード)及びパック整数及びパック浮動小数点演算において用いる基本データ・タイプの数値解釈を含む。
【0042】
64ビットのSIMDデータ・タイプは主に、64ビットのマルチメディア拡張レジスタ58において演算される。基本64ビット・パック・データ・タイプはパック・バイト、パック・ワード及びパック・ダブルワードである。マルチメディア拡張レジスタ58においてこれらのデータ・タイプに数値SIMD演算を行う場合、これらのデータ・タイプはバイト、ワード、又はダブルワード整数値を含むものとして解釈される。
【0043】
128ビットのパックSIMDデータ・タイプは主に、128ビットの拡張マルチメディア(XMM)レジスタ84及びメモリ54において演算される。基本128ビット・パック・データ・タイプはパック・バイト、パック・ワード、パック・ダブルワード及びパック・クワドワードである。拡張マルチメディア(XMM)レジスタ84においてこれらの基本データ・タイプにSIMD演算を行う場合、これらのデータ・タイプはパック若しくはスカラ単精度浮動小数点又は倍精度浮動小数点値を含むものとしてか、パックされた、バイト、ワード、ダブルワード、又はクワドワード整数値を含むものとして、解釈される。
【0044】
図5によれば、表120は種々のSIMD拡張、演算されるデータ・タイプ、及びデータ・タイプがマルチメディア拡張レジスタ58及び拡張マルチメディア(XMM)レジスタ84にパックされる方法のまとめを表す。
【0045】
上記のように、マルチメディア拡張命令はメモリ54、マルチメディア拡張レジスタ58、及び/又は汎用レジスタ62に含まれた、パックされた、バイト、ワード、ダブルワード又はクワドワード整数オペランドを演算する。マルチメディア拡張命令はデータ転送命令、変換命令、パック算術命令、比較命令、論理命令、シフト並びに回転命令及び状態管理命令を含む。
【0046】
SIMD拡張(SSE及びSSE2)命令はいくつかの、例えば、4つの、群:拡張マルチメディア(XXM)レジスタ84を演算するSIMD単精度浮動小数点命令、MXSCRレジスタ86を演算するMXSCR命令、MXXレジスタ58を演算する64ビットSIMD整数命令、及びキャッシュ可能性制御、プリフェッチ並びに命令順序付け命令に分割される。
【0047】
命令の1つのクラスに移動/ロード及び複製タイプの命令がある。これらの命令は、例えば、ビットの複製を得るようロード値に明示的な演算を行う必要性を省くものであるため、「複合」命令とも呼ばれる。現在のアーキテクチャはMOVDDUP命令、MOVSHDUP命令及びMOVSLDUP命令を含む。これらの命令はパック単精度及びパック倍精度浮動小数点データ・タイプの複雑な算術をサポートするよう備えられる。これらの命令は種々のアプリケーションにおいて用い得る。例えば、これらの命令は信号処理アプリケーション及び自然データ・タイプの処理に関係するアプリケーションの効率を向上し得る。
【0048】
MOVDDUP命令は、64ビット(ソースがレジスタの場合、ビット〔63−0〕)をロード/移動する、倍精度浮動小数点の1だけの移動及びSSE2複製命令である。MOVDDUP命令は、同じ結果レジスタの下半分と上半分との両方において同じ64ビットを返す、すなわち、ソースからの64ビットを複製する。したがって、ソースが0/1のエントリを有する場合、デスティネーションは1/0/1/0のエントリを有する。MOVEDDUP命令は以下のフォーマット:
MOVEDDUP デスティネーション、ソース;
を有し、ソース・オペランドはメモリ位置54又は第2拡張マルチメディア(XMM)レジスタ84でデスティネーション・オペランドは第1拡張マルチメディア(XMM)レジスタ84である。ソースは倍精度浮動小数点データ・タイプを含む。
【0049】
演算においては、ソース・オペランドがメモリ・アドレスの場合、第1拡張マルチメディア(XMM)レジスタのビット〔63−0〕がメモリ・アドレスのビット〔63−0〕によってロードされて、第1拡張マルチメディア(XMM)レジスタのビット〔127−64〕はメモリ位置のビット〔63−0〕によってロードされる。ソース・オペランドが第2拡張マルチメディア(XMM)レジスタの場合、第1拡張マルチメディア(XMM)レジスタのビット〔63−0〕は第2拡張マルチメディア(XMM)レジスタのビット〔63−0〕に等しくなるよう設定されて第1拡張マルチメディア(XMM)レジスタのビット〔127−64〕は第2拡張マルチメディア(XMM)レジスタのビット〔63−0〕に等しくなるよう設定される。
【0050】
リニア・アドレスは参照メモリ・データの最下位バイトのアドレスに相当する。メモリ・アドレスが示された場合、メモリ位置でのデータの16バイトがロード又は記憶される。レジスタ−レジスタ形式の演算が用いられる場合、128ビットのソース・レジスタの内容は128ビットのデスティネーション・レジスタに複製される。
【0051】
MOVSHDUP命令は128ビットをロード/移動して結果として生じるレジスタにエントリ1及び3を複製する、単精度浮動小数点上位移動及びSSE2複製命令である。128ビットのソース・レジスタ幅の例においては、各エントリは32ビットである。特に、ソースのエントリが、3/2/1/0の(0が下位単精度エントリで3が上位単精度エントリである)、場合、MOVSHDUP命令の実行後の結果レジスタは複製されたエントリ3及び1を記憶してエントリ3/3/1/1を設ける。MOVSHDUPは以下のフォーマット:
MOVSHDUP デスティネーション、ソース;
を有し、ソース・オペランドはメモリ位置54又は第2拡張マルチメディア(XMM)レジスタ84を表してデスティネーション・オペランドは第1拡張マルチメディア(XMM)レジスタ84である。ソース・オペランドはパック単精度浮動小数点データ・タイプを有する。
【0052】
演算においては、ソース・オペランドがメモリ・アドレスの場合、第1拡張マルチメディア(XMM)レジスタのビット〔31−0〕がメモリ・アドレスのビット〔63−32〕によってロードされ、第1拡張マルチメディア(XMM)レジスタのビット63−32がメモリ・アドレスのビット〔63−32〕によってロードされ、第1拡張マルチメディア(XMM)レジスタのビット95−64がメモリ・アドレスのビット〔127−96〕によってロードされて、第1拡張マルチメディア(XMM)レジスタのビット127−96がメモリ・アドレスのビット〔127−96〕によってロードされる。
【0053】
ソース・オペランドが第2拡張マルチメディア(XMM)レジスタの場合、第1拡張マルチメディア(XMM)レジスタのビット〔31−0〕が第2拡張マルチメディア(XMM)レジスタのビット〔63−32〕に等しくなるよう設定され、第1拡張マルチメディア(XMM)レジスタのビット〔63−32〕が第2拡張マルチメディア(XMM)レジスタのビット〔63−32〕に等しくなるよう設定され、第1拡張マルチメディア(XMM)レジスタのビット〔95−64〕が第2拡張マルチメディア(XMM)レジスタのビット〔127−96〕に等しくなるよう設定され、第1拡張マルチメディア(XMM)レジスタのビット〔127−96〕が第2拡張マルチメディア(XMM)レジスタのビット〔127−96〕に等しくなるよう設定される。
【0054】
リニア・アドレスは参照メモリ・データの最下位バイトのアドレスに相当する。メモリ・アドレスが示された場合、メモリ位置での16バイトのデータがロード又は記憶される。レジスタ−レジスタ形式の演算が用いられる場合、128ビットのソース・レジスタの内容は128ビットのデスティネーション・レジスタに複製される。
【0055】
MOVSLDUP命令は、128ビットをロード/移動してエントリ0及び2を複製する、パック単精度浮動小数点下位移動及びSSE2複製命令である。特に、ソースが3/2/1/0(0が下位単精度エントリ)である場合、結果レジスタはエントリ2/2/0/0を記憶する。MOVSLDUP命令は以下のフォーマット:
MOVSLDUP デスティネーション、ソース;
を有し、ソース・オペランドはメモリ位置54又は第2拡張マルチメディア(XMM)レジスタ84でデスティネーション・オペランドは第1拡張マルチメディア(XMM)レジスタ84である。ソース・オペランドはパック単精度浮動小数点データ・タイプを含む。
【0056】
演算においては、ソース・オペランドがメモリ・アドレスの場合、第1拡張マルチメディア(XMM)レジスタのビット〔31−0〕はメモリ・アドレスのビット〔31−0〕によってロードされて、第1拡張マルチメディア(XMM)レジスタのビット〔63−32〕はメモリ・アドレスのビット〔31−0〕によってロードされて、第1拡張マルチメディア(XMM)レジスタのビット〔95−64〕はメモリ・アドレスのビット〔95−64〕によってロードされて、第1拡張マルチメディア(XMM)レジスタのビット〔127−96〕はメモリ・アドレスのビット〔95−64〕によってロードされる。ソース・オペランドがレジスタの場合、第1拡張マルチメディア(XMM)レジスタのビット〔31−0〕は第2拡張マルチメディア(XMM)レジスタのビット〔31−0〕に等しくなるよう設定され、第1拡張マルチメディア(XMM)レジスタのビット〔63−32〕は第2拡張マルチメディア(XMM)レジスタのビット〔31−0〕に等しくなるよう設定され、第1拡張マルチメディア(XMM)レジスタのビット〔95−64〕は第2拡張マルチメディア(XMM)レジスタのビット〔95−64〕に等しくなるよう設定され、第1拡張マルチメディア(XMM)レジスタのビット〔127−96〕は第2拡張マルチメディア(XMM)レジスタのビット〔95−64〕に等しくなるよう設定される。
【0057】
リニア・アドレスは参照メモリ・データの最下位バイトのアドレスに相当する。メモリ・アドレスが示された場合、メモリ位置での16バイトのデータがロード又は記憶される。レジスタ−レジスタ形式の演算が用いられる場合、128ビットのソース・レジスタの内容は128ビットのデスティネーション・レジスタに複製される。
図1
図2
図3
図4
図5