(58)【調査した分野】(Int.Cl.,DB名)
前記第1の命令は、SIMDレジスタが4個の32ビット要素を前記第1のソースデータオペランドセットとして保持することを指定する、請求項1から4のいずれか一項に記載のプロセッサ。
前記第1の命令は、SIMDレジスタが8個の32ビット要素を前記第1のソースデータオペランドセットとして保持することを指定する、請求項1から4のいずれか一項に記載のプロセッサ。
前記第1の命令は、SIMDレジスタが16個の32ビット要素を前記第1のソースデータオペランドセットとして保持することを指定する、請求項1から4のいずれか一項に記載のプロセッサ。
前記第1の命令は、前記1または複数の置換関数インジケータを、前記第1のソースデータオペランドセット内の4個の32ビット要素の対応する各レーンのために、1ビットを前記即値バイトオペランドで設定することにより指定する、請求項8に記載のプロセッサ。
前記1または複数の実行ユニットは、前記デコードされた第1の命令に応答して、前記第1のソースデータオペランドセットの前記部分を使用して、4回のSM4ラウンド交換または4回のSM4キー生成を実行する、請求項1から10のいずれか一項に記載のプロセッサ。
【発明を実施するための形態】
【0041】
以下の詳細な説明において、単一命令複数データ(SIMD)SM4ラウンドスライス演算を提供する命令およびロジックについて開示する。命令の実施形態は、第1のソースデータオペランドセットおよび第2のソースデータオペランドセット、並びに例えば、即値オペランド内で複数の置換関数インジケータを指定する。プロセッサの実施形態は、複数の暗号化ユニットを含んでよく、複数の暗号化ユニットは第1の命令に応答して、第1の置換関数を示す置換関数インジケータに応答して、複数のSM4ラウンド交換から成るスライスを、第1のソースデータオペランドセットの部分に、第2のソースデータオペランドセットからの対応する複数のキーを用いて実行し、第2の置換関数を示す置換関数インジケータに応答して、複数のSM4キー生成から成るスライスを、第1のソースデータオペランドセットの別の部分を第2のソースデータオペランドセットからの対応する複数の定数と共に使用して実行し、第1の命令の結果要素のセットをSIMDデスティネーションレジスタに格納する。
【0042】
同一のSIMD命令を用いて、複数のSM4ラウンド交換から成るスライスおよび複数のSM4キー生成から成るスライスの両方を実行することで、暗号化または暗号化解除が小さいバッファ(例えば256ビット)でキー拡張と同時に処理されてよいことを理解されたい。いくつかの実施形態において、スライスはSM4ラウンド交換の4回のラウンドおよびSM4キー生成の4回のラウンドで構成されてよい。このような実施形態では、SM4ラウンド交換およびSM4キー生成の32回のラウンドが8(または9)回のSM4ラウンドスライス演算を使用して実行されてよい。 いくつかの実施形態において、256ビットデータパスまたは512ビットデータパスの各128ビットレーンが、命令の即値オペランド内の特定の置換関数(例えば、T若しくはT'または代替的にL若しくはL')を示す対応する値に基づいて、複数のSM4ラウンド交換から成るスライスの処理または複数のSM4キー生成から成るスライスの処理のために選択されてよい。いくつかの代替的な実施形態において、複数のSM4ラウンド交換から成るスライスを処理するための、および複数のSM4キー生成から成るスライスを処理するためのデータパスのレーンは予め定められ、および/または、固定されていてよい。いくつかの実施形態において、スライスは複数のマイクロ命令(またはマイクロopまたはμop)によって実装されてよく、結果は1マイクロ命令から次のマイクロ命令へとバイパスされてよい。いくつかの代替的な実施形態において、スライスは、ハードウェア内のロジックの複数のレイヤ(例えば2または4または8等)によって、または代替的に、複数のマイクロ命令およびハードウェア内のロジックの複数のレイヤの何らかの組み合わせによって実装されてよい。いくつかの実施形態において、スライスは、命令の即値オペランド内の値によって示されるSM4ラウンド交換およびSM4キー生成のラウンド数(例えば、1、2、4、8、16、または32)を備えてよい。いくつかの代替的な実施形態において、スライスのラウンド数は、命令ニーモニックによって、および/または、演算エンコーディング(またはオペコード)によって示されてよい。
【0043】
以下の詳細な説明において、本発明の実施形態に対するより完全な理解を提供すべく、処理ロジック、プロセッサタイプ、マイクロアーキテクチャ条件、イベント、有効化メカニズム等の多くの具体的な詳細が記載されている。しかしながら、当業者ならば、そのような具体的な詳細なしに本発明は実施され得ることを理解されたい。また、本発明の実施形態を不要に不明瞭にするのを回避すべく、いくつかの周知の構造、回路等は詳細に示されていない。
【0044】
以下の実施形態は、プロセッサに関して記載されているが、他のタイプの集積回路およびロジックデバイスには他の実施形態が適用可能である。本発明の実施形態に係る類似の技術および教示は、他のタイプの回路または半導体デバイスに適用可能であり、当該回路または半導体デバイスは、より高いパイプラインスループットおよび改善された性能の利益を享受できる。本発明の実施形態の教示は、データ操作を実行するあらゆるプロセッサまたは機械に適用可能である。しかしながら、本発明は512ビット、256ビット、128ビット、64ビット、32ビットまたは16ビットまたは8ビットのデータ操作を実行するプロセッサまたは機械に限定されず、本発明は、データの操作または管理が行われるあらゆるプロセッサおよび機械に適用可能である。また、以下の詳細な説明は例示を提供しており、添付図面は例示目的のために様々な例を図示している。しかしながら、これらの例は、本発明の実施形態に係るあらゆる可能性のある実装を網羅的に列挙するのではなく、単に本発明の実施形態の例を提供する意図であって、限定的な意味において解釈されるべきではない。
【0045】
以下の例示は、実行ユニットおよびロジック回路の文脈で命令処理および命令配信について記載するが、本発明の他の実施形態は、有形な機械可読媒体上に格納されたデータおよび/または命令を用いて実現され得、当該データおよび/または命令は機械による実行時、機械に対して、本発明の少なくとも一実施形態と一貫性のある機能を実行させる。一実施形態において、本発明の実施形態に関連する機能は、機械で実行可能な命令に具現化される。命令は、当該命令でプログラムされる汎用プロセッサまたは特定用途向けプロセッサに対し、本発明の複数の段階を実行させるために使用可能である。本発明の実施形態は、コンピュータプログラム製品またはソフトウェアとして提供されてよく、当該コンピュータプログラム製品またはソフトウェアは、自身に格納された命令を有する機械またはコンピュータ可読媒体を含んでよく、当該命令を使用して、本発明の実施形態による1または複数の演算を実行するようにコンピュータ(または他の電子デバイス)をプログラムしてよい。代替的に、本発明の実施形態の複数の段階は、当該段階を実行するための固定機能ロジックを含む特別なハードウェアコンポーネント、またはプログラムされたコンピュータコンポーネントおよび固定機能のハードウェアコンポーネントの任意の組み合わせによって実行されてよい。
【0046】
本発明の実施形態を実行するためのロジックをプログラムするために使用される命令は、DRAM、キャッシュ、フラッシュメモリまたは他のストレージ等のシステム内のメモリに格納されてよい。さらに、命令はネットワークを介してまたは他のコンピュータ可読媒体を通して配信されてよい。故に、機械可読媒体としては、特に限定されないが、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスク、リードオンリメモリ(CD‐ROM)、および光磁気ディスク、リードオンリメモリ(ROM)、ランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、磁気若しくは光カード、フラッシュメモリ、または電気、光、音波または他の形態の伝搬信号(例えば、搬送波、赤外線信号、デジタル信号等)を介したインターネット経由での情報送信に使用される有形の機械可読ストレージ等、機械(例えばコンピュータ)によって読み取り可能な形式で情報を格納または送信するための任意のメカニズムが含まれてよい。従って、コンピュータ可読媒体としては、機械(例えばコンピュータ)によって読み取り可能な形式で電子的命令または情報を格納または送信するために好適な任意のタイプの有形の機械可読媒体が含まれる。
【0047】
設計は、作成からシミュレーション、製造まで様々なステージを経てよい。設計を表わすデータは、多数の方法で設計を表わしてよい。まず、シミュレーションで有用であるように、ハードウェアはハードウェア記述言語または別の機能記述言語を使用して表わされてよい。また、ロジックおよび/またはトランジスタゲートを用いる回路レベルモデルが、設計プロセスのどこかのステージで生成されてよい。さらに、多くの設計はどこかのステージにおいて、ハードウェアモデルの様々なデバイスの物理的配置を表わすデータレベルに到達する。従来の半導体製造技術が使用される場合、ハードウェアモデルを表わすデータは、集積回路の生成に使用されるマスクについて異なるマスク層における様々な特徴部の存在または不存在を指定するデータであってよい。設計のあらゆる表現において、データは任意の形態の機械可読媒体に格納されてよい。メモリ、またはディスク等の磁気若しくは光ストレージは、このような情報を送信するために変調または変調以外の方法で生成された光波または電波を介して送信される情報を格納する機械可読媒体であってよい。コードまたは設計を示すまたは搬送する電気搬送波が送信される場合、電気信号のコピー、バッファリング、または再送信が実行される限度において、新しいコピーが作成される。故に、通信プロバイダまたはネットワークプロバイダは、搬送波にエンコードされた情報等の項目を有形の機械可読媒体上に少なくとも一時的に格納し、本発明の実施形態の技術を具現化してよい。
【0048】
現在のプロセッサでは、多数の異なる実行ユニットを使用し、様々なコードおよび命令が処理および実行されている。いくつかの命令はより迅速に終了する一方、他の命令は完了までに複数のクロックサイクルを必要とし得る等、すべての命令は等しく作成されているわけではない。命令のスループットがより高速なほど、プロセッサの性能全体はより良好になる。故に、多数の命令を可能な限り高速で実行させると有利になろう。しかしながら、より複雑なもの、実行時間およびプロセッサリソースの観点からより多くのものを要求するような特定の命令が存在する。例えば、浮動小数点命令、ロード/ストア操作、データ移動等がある。
【0049】
より多くのコンピュータシステムがインターネット、テキストおよびマルチメディアアプリケーションで使用されるにつれ、追加のプロセッササポートが経時的に導入されている。一実施形態において、命令セットは、データタイプ、命令、レジスタアーキテクチャ、アドレス指定モード、メモリアーキテクチャ、割り込み処理および例外処理、並びに外部入力および出力(I/O)を含む1または複数のコンピュータアーキテクチャに関連付けられてよい。
【0050】
一実施形態において、命令セットアーキテクチャ(ISA)は、1または複数のマイクロアーキテクチャによって実装されてよく、当該マイクロアーキテクチャは1または複数の命令セットを実装するために使用されるプロセッサロジックおよび回路を含む。従って、異なるマイクロアーキテクチャを備えるプロセッサは、共通の命令セットの少なくとも一部を共有してよい。例えば、インテル(登録商標)Pentium(登録商標)4プロセッサ、インテル(登録商標)Core(商標)プロセッサ、およびカリフォルニア州サニーベールのアドバンストマイクロデバイス社のプロセッサは、異なる内部設計を有するもののx86命令セット(より新しいバージョンに追加されたいくつかの拡張機能を持つ)のバージョンとほぼ同一のものを実装する。同様に、ARM Holdings、MIPS、またはそれらのライセンシ若しくは採用者等の他のプロセッサ開発企業によって設計されたプロセッサは、共通の命令セットの少なくとも一部を共有してよいが、異なるプロセッサ設計を含んでよい。例えば、ISAとの同一レジスタアーキテクチャは、新規または周知の技術を使用して異なるマイクロアーキテクチャにおいて異なる方法で実装されてよく、このようなものとしては専用物理レジスタ、レジスタリネーミングメカニズムを使用(例えばレジスタエイリアステーブル(RAT)、リオーダバッファ(ROB)およびリタイアメントレジスタファイルの使用)して動的に割り当てられた1または複数の物理レジスタが含まれる。一実施形態において、レジスタは、1または複数のレジスタ、レジスタアーキテクチャ、レジスタファイル、またはソフトウェアプログラマによってアドレス指定可能であってもなくてもよい他のレジスタセットを含んでよい。
【0051】
一実施形態において、命令は、1または複数の命令フォーマットを含んでよい。一実施形態において、命令フォーマットは、実行されるべき演算およびその演算が実行されるオペランドをとりわけ指定するための様々なフィールド(ビット数、ビットの場所等)を示してよい。いくつかの命令フォーマットは、命令テンプレート(またはサブフォーマット)によってさらに定義されてよい。例えば、特定の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するように定義されてよく、および/または、異なって解釈される特定のフィールドを有するように定義されてよい。一実施形態において、命令は命令フォーマット(および、定義されている場合は、その命令フォーマットの複数の命令テンプレートのうちの特定の1つにおいて)を使用して表わされ、命令は演算およびその演算が行われるオペランドを指定または示す。
【0052】
科学的アプリケーション、財務アプリケーション、自動ベクトル化汎用アプリケーション、RMS(Recognition(認識)、mining(マイニング)、およびsynthesis(合成))アプリケーション、並びにビジュアルおよびマルチメディアアプリケーション(例えば、2D/3Dグラフィックス、画像処理、ビデオ圧縮/圧縮解除、音声認識アルゴリズムおよびオーディオ操作)は、多数のデータアイテム上に同一の演算が実行されることを要求してよい。一実施形態において、単一命令複数データ(SIMD)とは、プロセッサに、複数のデータ要素への演算を実行させるタイプの命令を指す。SIMD技術は、レジスタ内のビットを複数の固定サイズまたは可変サイズのデータ要素に論理的に分割可能なプロセッサにおいて使用されてよく、データ要素の各々は別個の値を表わす。例えば、一実施形態において、64ビットレジスタ内のビットは、4つの別個の16ビットデータ要素を含むソースオペランドとして編成されてよく、当該データ要素の各々は別個の16ビット値を表わす。このタイプのデータは、「パックされた」データタイプまたは「ベクトル」データタイプと称されてよく、このデータタイプのオペランドは、パックされたデータオペランドまたはベクトルオペランドと称されてよい。一実施形態において、パックされたデータアイテムまたはベクトルは、単一のレジスタ内に格納されたパックされたデータ要素のシーケンスであってよく、パックされたデータオペランドまたはベクトルオペランドは、SIMD命令(または「パックされたデータ命令または「ベクトル命令」)のソースオペランドまたはデスティネーションオペランドであってよい。一実施形態において、SIMD命令は、同一または異なるサイズのデスティネーションベクトルオペランド(結果のベクトルオペランドとも称される)を同一または異なる数のデータ要素を備える状態で同一または異なるデータ要素順序において生成すべく、単一のベクトル演算が2つのソースベクトルオペランドに行われることを指定する。
【0053】
x86命令、MMX(商標)命令、ストリーミングSIMD拡張(SSE)命令、SSE2命令、SSE3命令、SSE4.1命令およびSSE4.2命令を含む命令セットを有するIntel(登録商標)Core(商標)プロセッサ、ベクトル浮動小数点(VFP)命令および/またはNEON命令を含む命令セットを有するARM Cortex(登録商標)ファミリのプロセッサ等のARMプロセッサ、中国科学アカデミーのコンピューティング技術協会(ICT)によって開発されたLoongsonファミリのプロセッサ等のMIPSプロセッサによって採用されるようなSIMD技術がアプリケーション性能の大きな改善を可能にした(Core(商標)およびMMX(商標)は、カリフォルニア州サンタクララのインテルコーポレーションの登録商標または商標である)。
【0054】
一実施形態において、デスティネーションおよびソースレジスタ/データとは、対応するデータまたは演算のソースおよびデスティネーションを表わす一般的な用語である。いくつかの実施形態において、それらはレジスタ、メモリ、または本明細書に記載されたものではない他の名前または機能を有する他のストレージ領域によって実装されてよい。例えば、一実施形態において、「DEST1」が一時的なストレージレジスタまたは他のストレージ領域であってよい一方で、「SRC1」および「SRC2」は、第1のソースストレージレジスタおよび第2のソースストレージレジスタまたは他のストレージ領域等であってよい。他の実施形態において、SRCおよびDESTストレージ領域のうちの2または2より多いものが、同一のストレージ領域(例えばSIMDレジスタ)内の複数の異なるデータストレージ要素に対応してよい。一実施形態において、複数のソースレジスタのうちの1つは、例えば、第1のソースデータおよび第2のソースデータで行われた演算結果をデスティネーションレジスタとして機能する2つのソースレジスタのうちの1つにライトバックすることによって、デスティネーションレジスタとして動作してもよい。
【0055】
図1Aは、プロセッサと共に形成された例示的なコンピュータシステムのブロック図であり、プロセッサは本発明の一実施形態による命令を実行するための実行ユニットを含む。システム100は、本明細書に記載の実施形態におけるような本発明による、処理データに対するアルゴリズムを実行するためのロジックを含む実行ユニットを採用するプロセッサ102等のコンポーネントを含む。システム100は、カリフォルニア州サンタクララのインテルコーポレーションから入手可能なPENTIUM(登録商標)III、PENTIUM(登録商標)4、Xeon(商標)、Itanium(登録商標)、XScale(商標)および/またはStrongARM(商標)マイクロプロセッサに基づく処理システムの典型的なものであるが、他のシステム(他のマイクロプロセッサ、エンジニアリングワークステーション、セットトップボックス等を有するPCを含む)も使用されてよい。一実施形態において、サンプルシステム100は、ワシントン州レドモンドのマイクロソフト社から入手可能なWINDOWS(登録商標)オペレーティングシステムのバージョンを実行してよいが、他のオペレーティングシステム(例えばUNIX(登録商標)およびLinux(登録商標))、埋め込みソフトウェアおよび/またはグラフィックユーザインタフェースも使用されてよい。故に、本発明の実施形態は、ハードウェア回路およびソフトウェアの任意の特定の組み合わせに限定されない。
【0056】
実施形態はコンピュータシステムに限定されない。本発明の代替的な実施形態は、ハンドヘルドデバイスおよび埋め込みアプリケーション等の他のデバイスにおいて使用されてよい。ハンドヘルドデバイスのいくつかの例としては、携帯電話、インターネットプロトコルデバイス、デジタルカメラ、携帯情報端末(PDA)およびハンドヘルドPCが含まれる。埋め込みアプリケーションとしては、マイクロコントローラ、デジタル信号プロセッサ(DSP)、システムオンチップ、ネットワークコンピュータ(NetPC)、セットトップボックス、ネットワークハブ、ワイドエリアネットワーク(WAN)スイッチ、または少なくとも一実施形態に係る1または複数の命令を実行し得る任意の他のシステムが含まれ得る。
【0057】
図1Aは、プロセッサ102と共に形成されたコンピュータシステム100のブロック図であり、プロセッサ102は本発明の一実施形態による少なくとも1つの命令を実行するアルゴリズムを実行するための1または複数の実行ユニット108を含む。一実施形態は、単一プロセッサのデスクトップまたはサーバシステムの文脈で記載され得るが、代替の実施形態がマルチプロセッサシステム内に含まれてよい。システム100は、「ハブ」システムアーキテクチャの一例である。コンピュータシステム100は、データ信号を処理するためのプロセッサ102を含む。プロセッサ102は、複合命令セットコンピュータ(CISC)マイクロプロセッサ、縮小命令セットコンピューティング(RISC)マイクロプロセッサ、超長命令語(VLIW)マイクロプロセッサ、複数の命令セットの組み合わせを実装するプロセッサ、または、例えばデジタル信号プロセッサ等の任意の他のプロセッサデバイスであってよい。プロセッサ102はプロセッサバス110に連結され、プロセッサバス110は、プロセッサ102とシステム100内の他のコンポーネントとの間でデータ信号を送信し得る。システム100の複数の要素は、当該技術分野に習熟した者にとって周知であるそれらの従来機能を実行する。
【0058】
一実施形態において、プロセッサ102はレベル1(L1)内部キャッシュメモリ104を含む。アーキテクチャに応じて、プロセッサ102は、単一の内部キャッシュまたは複数のレベルの内部キャッシュを有してよい。代替的に、別の実施形態においては、キャッシュメモリは、プロセッサ102の外部に存在してよい。他の実施形態はまた、特定の実装およびニーズに応じて、内部および外部の両方のキャッシュの組み合わせを含んでよい。レジスタファイル106は、異なるタイプのデータを整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、および命令ポインタレジスタを含む様々なレジスタに格納してよい。
【0059】
整数演算および浮動小数点演算を実行するためのロジックを含む実行ユニット108も、プロセッサ102内に存在する。プロセッサ102はまた、特定のマクロ命令のためのマイクロコードを格納するマイクロコード(μコード)ROMを含む。一実施形態では、実行ユニット108は、パックされた命令セット109を処理するためのロジックを含む。命令を実行するための関連回路と共に、汎用プロセッサ102の命令セット内にパックされた命令セット109を含めることによって、多くのマルチメディアアプリケーションによって使用される演算が、汎用プロセッサ102内のパックされたデータを使用して実行されてよい。故に、多くのマルチメディアアプリケーションはパックされたデータに演算を実行するために、プロセッサのデータバスの全幅を使用することによって、加速化され、より効率的に実行されてよい。これにより、1データ要素に1または複数の演算を一度に実行すべく、データのより小さな単位をプロセッサのデータバスにわたり転送する必要性をなくしてよい。
【0060】
実行ユニット108の代替の実施形態はマイクロコントローラ、埋め込みプロセッサ、グラフィックデバイス、DSP、および他のタイプのロジック回路内で使用されてもよい。システム100は、メモリ120を含む。メモリ120は、ダイナミックランダムアクセスメモリ(DRAM)デバイス、スタティックランダムアクセスメモリ(SRAM)デバイス、フラッシュメモリデバイス、または他のメモリデバイスであってよい。メモリ120は、プロセッサ102によって実行可能な、データ信号によって表現される命令および/またはデータを格納してよい。
【0061】
システムロジックチップ116は、プロセッサバス110およびメモリ120に連結される。示される実施形態中のシステムロジックチップ116は、メモリコントローラハブ(MCH)である。プロセッサ102は、MCH116とプロセッサバス110を介して通信してよい。MCH116は、命令およびデータの格納およびグラフィックコマンド、データおよびテクスチャの格納のためにメモリ120への高帯域幅メモリパス118を提供する。MCH116は、システム100内のプロセッサ102、メモリ120、および他のコンポーネント間にわたり、データ信号を送信し、データ信号をプロセッサバス110、メモリ120、およびシステムI/O 122間にわたり橋渡しする。いくつかの実施形態において、システムロジックチップ116は、グラフィックコントローラ112に連結するためのグラフィックポートを提供してよい。MCH116は、メモリインタフェース118を介してメモリ120に連結される。グラフィックカード112が、アクセラレーテッドグラフィックポート(AGP)相互接続114を介してMCH116に連結される。
【0062】
システム100は、MCH116をI/Oコントローラハブ(ICH)130に連結するための独自のハブインタフェースバス122を使用する。ICH130は、ローカルI/Oバスを介していくつかのI/Oデバイスへの直接的な接続を提供する。ローカルI/Oバスは、周辺機器をメモリ120、チップセットおよびプロセッサ102に接続するための高速I/Oバスである。いくつかの例としては、オーディオコントローラ、ファームウェアハブ(フラッシュBIOS)128、無線送受信機126、データストレージ124、ユーザ入力およびキーボードインタフェースを含むレガシI/Oコントローラ、ユニバーサルシリアルバス(USB)等のシリアル拡張ポート、およびネットワークコントローラ134が挙げられる。データストレージデバイス124は、ハードディスクドライブ、フロッピー(登録商標)ディスクドライブ、CD‐ROMデバイス、フラッシュメモリデバイス、または他の大容量ストレージデバイスを含んでよい。
【0063】
システムの別の実施形態について、一実施形態による命令はシステムオンチップと共に使用されてよい。システムオンチップの一実施形態は、プロセッサおよびメモリで構成される。このような1システムのためのメモリはフラッシュメモリである。フラッシュメモリは、プロセッサおよび他のシステムコンポーネントと同一のダイ上に配置されてよい。また、メモリコントローラまたはグラフィックコントローラ等の他のロジックブロックもシステムオンチップ上に配置されてよい。
【0064】
図1Bは、本発明の一実施形態に係る原理を実装するデータ処理システム140を示す。本明細書に記載の実施形態は、本発明の実施形態の範囲から逸脱することなく、代替の処理システムと共に使用し得ることを当業者は容易に理解されたい。
【0065】
コンピュータシステム140は、一実施形態による少なくとも1つの命令を実行可能な処理コア159を備える。一実施形態について、処理コア159は、特に限定されないが、CISC、RISC、またはVLIWタイプのアーキテクチャを含む任意のタイプのアーキテクチャの処理ユニットを表わす。処理コア159はまた、1または複数の処理技術における製造に好適であってよく、また機械可読媒体に対し十分詳細に表現されることによって、当該製造を容易にするために好適であってよい。
【0066】
処理コア159は、実行ユニット142、レジスタファイルのセット145、およびデコーダ144を備える。処理コア159はまた、本発明の実施形態の理解には不要である追加の回路(不図示)を含む。実行ユニット142は処理コア159によって受信される命令を実行するために使用される。典型的なプロセッサ命令の実行に加え、実行ユニット142は、パックされたデータフォーマットに演算を実行するために、パックされた命令セット143内の命令を実行してよい。パックされた命令セット143は、本発明の実施形態を実行するための命令および他のパックされた命令を含む。実行ユニット142は、内部バスによってレジスタファイル145に連結される。レジスタファイル145は、データを含む情報を格納するための処理コア159上のストレージ領域を表わす。上記の通り、パックされたデータを格納するために使用されるストレージ領域は、重要ではないことを理解されたい。実行ユニット142はデコーダ144に連結される。デコーダ144は、処理コア159によって受信される命令を、制御信号および/またはマイクロコードエントリポイントにデコードするために使用される。これらの制御信号および/またはマイクロコードエントリポイントに応答して、実行ユニット142は適切な演算を実行する。一実施形態において、デコーダは命令のオペコードを解釈するために使用され、当該オペコードは、命令内で示される該当データに対しどのような演算を実行すべきかを示すであろう。
【0067】
処理コア159は、様々な他のシステムデバイスとの通信のためにバス141に連結され、当該システムデバイスとしては特に限定されないが、例えば、シンクロナスダイナミックランダムアクセスメモリ(SDRAM)コントロール146、スタティックランダムアクセスメモリ(SRAM)コントロール147、バーストフラッシュメモリインタフェース148、PCメモリカード国際協会(PCMCIA)/コンパクトフラッシュ(登録商標)(CF)カードコントロール149、液晶ディスプレイ(LCD)コントロール150、ダイレクトメモリアクセス(DMA)コントローラ151、および代替のバスマスターインタフェース152が含まれてよい。一実施形態において、データ処理システム140はまたI/Oバス153を介して様々なI/Oデバイスと通信するためのI/Oブリッジ154を含んでよい。このようなI/Oデバイスとしては特に限定されないが、例えば、汎用非同期送受信回路(UART)155、ユニバーサルシリアルバス(USB)156、Bluetooth(登録商標)無線UART157およびI/O拡張インタフェース158が含まれてよい。
【0068】
データ処理システム140の一実施形態は、モバイル、ネットワークおよび/または無線通信、並びに文字列比較演算等を含むSIMD演算を実行可能な処理コア159を提供する。処理コア159は、様々なオーディオアルゴリズム、ビデオアルゴリズム、イメージ処理アルゴリズムおよび通信アルゴリズムでプログラムされてよく、当該アルゴリズムにはウォルシュアダマール変換、高速フーリエ変換(FFT)、離散コサイン変換(DCT)、およびそれらそれぞれの逆変換等の離散変換と、色空間変換、ビデオエンコードモーション推定またはビデオデコードモーション補償等の圧縮/圧縮解除技法と、パルス符号変調(PCM)等の変調/復調(MODEM)機能とが含まれる。
【0069】
図1Cは、SIMD SM4暗号化ブロック暗号機能を提供するための命令を実行可能なデータ処理システムの別の代替的な実施形態を示す。代替的な一実施形態により、データ処理システム160は、メインプロセッサ166、SIMDコプロセッサ161、キャッシュメモリ167、および入/出力システム168を含んでよい。随意で、入/出力システム168は、無線インタフェース169に連結されてよい。SIMDコプロセッサ161は、一実施形態による命令を含む演算を実行可能である。処理コア170は1または複数の処理技術における製造に好適であってよく、また機械可読媒体上で十分詳細に表現されることによって、処理コア170を含むデータ処理システム160のうちの全部または一部の製造を容易にするために好適であってよい。
【0070】
一実施形態について、SIMDコプロセッサ161は実行ユニット162およびレジスタファイルのセット164を備える。メインプロセッサ166の一実施形態は、実行ユニット162による実行のための一実施形態による命令を含む命令セット163のうちの命令を認識するためのデコーダ165を備える。代替的な実施形態については、SIMDコプロセッサ161はまた、命令セット163のうちの命令をデコードするためのデコーダ165Bのうちの少なくとも一部を備える。処理コア170はまた、本発明の実施形態の理解には不要である追加の回路(不図示)を含む。
【0071】
演算時、メインプロセッサ166は、キャッシュメモリ167および入/出力システム168とのやり取りを含む一般的なタイプのデータ処理操作を制御するデータ処理命令ストリームを実行する。SIMDコプロセッサ命令がデータ処理命令ストリーム内に埋め込まれている。メインプロセッサ166のデコーダ165は、これらのSIMDコプロセッサ命令を付属のSIMDコプロセッサ161によって実行される必要があるタイプのものであると認識する。従って、メインプロセッサ166は、これらのSIMDコプロセッサ命令(または、SIMDコプロセッサ命令を表わす制御信号)をコプロセッサバス171に対し発行し、当該コプロセッサバス171から、これらのSIMDコプロセッサ命令が任意の付属のSIMDコプロセッサによって受信される。この場合、SIMDコプロセッサ161は、自身を宛先とするあらゆる受信されたSIMDコプロセッサ命令を受け付けおよび実行する。
【0072】
データは、SIMDコプロセッサ命令による処理のために、無線インタフェース169を介して受信されてよい。一例として、音声通信がデジタル信号の形態で受信されてよく、当該デジタル信号はSIMDコプロセッサ命令によって処理され、当該音声通信を表わすデジタルオーディオサンプルを再生成してよい。別の例として、圧縮されたオーディオおよび/またはビデオがデジタルビットストリームの形態で受信されてよく、当該デジタルビットストリームはSIMDコプロセッサ命令によって処理され、デジタルオーディオサンプルおよび/またはモーションビデオフレームを再生成してよい。処理コア170の一実施形態について、メインプロセッサ166およびSIMDコプロセッサ161は、単一の処理コア170に統合され、当該単一の処理コア170は実行ユニット162、レジスタファイルのセット164および一実施形態による命令を含む命令セット163のうちの命令を認識するためのデコーダ165を備える。
【0073】
図2は、本発明の一実施形態による命令を実行するためのロジック回路を含むプロセッサ200のためのマイクロアーキテクチャのブロック図である。いくつかの実施形態において、一実施形態による命令は、バイト、ワード、ダブルワード、クワッドワード等のサイズに加え、単精度整数データタイプおよび倍精度整数データタイプおよび単精度浮動小数点データタイプおよび倍精度浮動小数点データタイプのようなデータタイプを有するデータ要素に演算を行うように実装されてよい。一実施形態において、インオーダフロントエンド201は実行されるべき命令をフェッチするプロセッサ200の一部であり、当該命令をプロセッサパイプラインにおいて後で使用されるように準備する。フロントエンド201はいくつかのユニットを含んでよい。一実施形態において、命令プリフェッチャ226は、メモリから命令をフェッチし、当該命令を命令デコーダ228にフィードすると、命令デコーダ228が今度は当該命令をデコードまたは解釈する。例えば、一実施形態において、デコーダは、受信された命令を、機械が実行可能な「マイクロ命令」または「マイクロオペレーション」(マイクロopまたはμopとも称される)と称される1または複数の演算にデコードする。他の実施形態において、デコーダは命令を、オペコード並びに対応するデータおよび制御フィールドに解析する。オペコード並びに対応するデータおよび制御フィールドは、マイクロアーキテクチャによって使用され、一実施形態による演算を実行する。一実施形態において、トレースキャッシュ230はデコードされたμopを取得し、実行のために、それらをプログラムにより順序付けられたシーケンスまたはμopキュー234内のトレースに組み立てる。トレースキャッシュ230が複雑な命令に遭遇する場合、マイクロコードROM232は演算の完了に必要なμopを提供する。
【0074】
いくつかの命令が単一のマイクロopに変換される一方、他の命令は完全な演算を完了させるためのいくつかのマイクロopを必要とする。一実施形態において、命令の完了に4つより多いマイクロopが必要な場合、デコーダ228はマイクロコードROM232にアクセスし、命令を実行する。一実施形態において、命令は、命令デコーダ228で処理するための少数のマイクロopにデコードされてよい。別の実施形態において、演算を遂行するために多数のマイクロopが必要な場合、命令はマイクロコードROM232内に格納されてよい。トレースキャッシュ230とは、一実施形態によるマイクロコードROM232からの1または複数の命令を完了すべく、マイクロコードシーケンスを読み取るための正しいマイクロ命令ポインタを判断するためのエントリポイントプログラマブルロジックアレイ(PLA)を指す。マイクロコードROM232が命令のためのマイクロopのシーケンス処理を完了した後、機械のフロントエンド201は、トレースキャッシュ230からのマイクロopのフェッチを再開する。
【0075】
アウトオブオーダ実行エンジン203は、命令を実行のために準備する場所である。アウトオブオーダ実行ロジックは、命令フローがパイプラインに行き、実行のためにスケジュールされる際、性能を最適化するために、命令フローを円滑化し、並べ替えるための複数のバッファを有する。アロケータロジックは、各μopが実行のために必要とする機械のバッファおよびリソースを割り当てる。レジスタリネーミングロジックはロジックレジスタをレジスタファイル内のエントリにリネーム(名前変更)する。アロケータはまた、命令スケジューラの前にある2つのμopキューのうちの一方にある各μopのためにエントリを割り当てる。当該μopキューのうちの1つはメモリ操作用、もう1つは非メモリ操作用のものであり、当該命令スケジューラはメモリスケジューラ、高速スケジューラ202、低速/全般浮動小数点スケジューラ204、および簡易浮動小数点スケジューラ206で構成される。μopスケジューラ202、204、206は、それらの従属入力レジスタオペランドソースの準備状態およびμopがそれらの演算の完了に必要とする実行リソースの利用可能性に基づいて、μopが、いつ実行準備が整うかを判断する。一実施形態の高速スケジューラ202は、メインクロックサイクルの各半分においてスケジュールしてよい一方、他のスケジューラはメインプロセッサクロックサイクルごとに一回のみスケジュールしてよい。スケジューラは、μopの実行をスケジュールするためのディスパッチポートを調整する。
【0076】
レジスタファイル208、210は、スケジューラ202、204、206および実行ブロック211内の実行ユニット212、214、216、218、220、222、224間に配置される。それぞれ整数演算および浮動小数点演算のための別個のレジスタファイル208、210が存在する。一実施形態の各レジスタファイル208、210はまた、レジスタファイル内にまだ書き込まれていない完了したばかりの結果を、新しい従属μopにバイパスまたは転送し得るバイパスネットワークを含む。整数レジスタファイル208および浮動小数点レジスタファイル210はまた、それら同士でデータを通信可能である。一実施形態について、整数レジスタファイル208は2つの別個のレジスタファイルに分割され、1つのレジスタファイルは低次の32ビットデータ用、第2のレジスタファイルは高次の32ビットデータ用である。一実施形態の浮動小数点レジスタファイル210は、128ビット幅エントリを有する。というのは、浮動小数点命令は通常、64〜128ビット幅のオペランドを有するからである。
【0077】
実行ブロック211は、命令が実際に実行される場所である実行ユニット212、214、216、218、220、222、224を含む。このセクションは、マイクロ命令が実行する必要のある整数データオペランド値および浮動小数点データオペラント値を格納するレジスタファイル208、210を含む。一実施形態のプロセッサ200は複数の実行ユニット、すなわちアドレス生成ユニット(AGU)212、AGU214、高速ALU216、高速ALU218、低速ALU220、浮動小数点ALU222、浮動小数点移動ユニット224で構成される。一実施形態では、浮動小数点実行ブロック222、224は、浮動小数点演算、MMX演算、SIMD演算およびSSE演算または他の演算を実行する。一実施形態の浮動小数点ALU222は、マイクロopの除算、平方根および剰余を実行するための64ビット単位の浮動小数点除算器を含む。本発明のいくつかの実施形態について、浮動小数点値を含む命令は、浮動小数点ハードウェアで処理されてよい。一実施形態において、ALU演算が高速ALU実行ユニット216、218に移動する。一実施形態の高速ALU216、218は、高速演算をクロックサイクルの半分の有効なレイテンシで実行してよい。一実施形態では、複素整数演算の大半は低速ALU220に移動される。というのは、低速ALU220は、乗算、シフト、フラグロジック、および分岐処理等の長レイテンシタイプの演算のための整数実行ハードウェアを含むからである。メモリロード/ストア操作は、AGU212、214によって実行される。一実施形態では、整数ALU216、218、220は、64ビットデータオペランドに整数演算を実行する文脈で記載される。代替的な実施形態において、ALU216、218、220は、16、32、128、256等の様々なデータビットをサポートするように実装されてよい。同様に、浮動小数点ユニット222、224は、様々なビット幅を有するオペランドの範囲をサポートするように実装されてよい。一実施形態では、浮動小数点ユニット222、224は、SIMD命令およびマルチメディア命令と連携して、128ビット幅のパックされたデータオペランドに演算を行ってよい。
【0078】
一実施形態において、μopスケジューラ202、204、206は、親ロードが実行を終了する前に、従属する演算をディスパッチする。μopはプロセッサ200内で予測的にスケジュールされ、実行され、プロセッサ200はまたメモリミスを処理するためのロジックを含む。データロードがデータキャッシュ内で失敗する場合、従属する演算がパイプライン内にインフライトで存在する可能性があり、これにより、スケジューラは一時的に誤ったデータが残された状態になっている。再生メカニズムは、誤ったデータを使用する命令を追跡および再実行する。従属する演算のみが再生の必要があり、独立した演算は完了を許可される。プロセッサの一実施形態に係るスケジューラおよび再生メカニズムはまた、SIMD SM4暗号化ブロック暗号機能を提供する命令をキャッチするように設計されている。
【0079】
「レジスタ」という用語は、オペランドを識別するための命令の一部として使用されるオンボードプロセッサのストレージ場所を指してよい。換言すると、レジスタとは、プロセッサの外部(プログラマの視点から)から使用可能なレジスタであってよい。しかしながら、一実施形態のレジスタは特定のタイプの回路を意味するものとして限定されるべきではない。一実施形態のレジスタは、データの格納、データの供給、および本明細書に記載の機能を実行可能である。本明細書に記載のレジスタは、プロセッサ内の回路によって、専用物理レジスタ、レジスタリネーミングを使用して動的に割り当てられた物理レジスタ、専用物理レジスタおよび動的に割り当てられた物理レジスタの組み合わせ等、任意の数の異なる技術を使用して実装されてよい。一実施形態において、整数レジスタは32ビットの整数データを格納する。一実施形態のレジスタファイルはまた、パックされたデータのための8つのマルチメディアSIMDレジスタを含む。後述の通り、レジスタはパックされたデータを保持するように設計されたデータレジスタであると理解されてよく、当該データレジスタとしては、カリフォルニア州サンタクララのインテルコーポレーションのMMX技術で有効にされるマイクロプロセッサ内の64ビット幅MMX(商標)レジスタ(いくつかの例において「mm」レジスタとも称される)といったものが挙げられる。整数および浮動小数点の両方の形態で利用可能なこれらのMMXレジスタは、SIMD命令およびSSE命令に伴うパックされたデータ要素と共に動作してよい。同様に、SSE2、SSE3、SSE4、またはそれ以降(概して「SSEx」と称される)に関する128ビット幅XMMレジスタ技術は、このようなパックされたデータオペランドを保持するためにも使用されてよい。一実施形態において、パックされたデータおよび整数データを格納する際、レジスタは当該2つのデータタイプ間を区別する必要はない。一実施形態において、整数および浮動小数点は同一のレジスタファイル内または異なるレジスタファイル内に含まれる。さらに、一実施形態において、浮動小数点データおよび整数データは異なるレジスタ内または同一のレジスタ内に格納されてよい。
【0080】
以下の図中の例示において、多数のデータオペランドについて説明される。
図3Aは、本発明の一実施形態による、マルチメディアレジスタ内の様々なパックされたデータタイプを表わしたものを示す。
図3Aは、128ビット幅オペランドのパックされたバイト310、パックされたワード320、およびパックされたダブルワード(dword)330のデータタイプを示す。この例のパックされたバイトフォーマット310は128ビット長であり、16個のパックされたバイトデータ要素を含む。1バイトは、例えば、8ビットのデータとして定義される。各バイトデータ要素の情報は、0ビットから7ビットまではバイト0、8ビットから15ビットまではバイト1、16ビットから23ビットまではバイト2、および最終の120ビットから127ビットまではバイト15内に格納される。故に、すべての利用可能なビットがレジスタ内で使用される。このストレージ構成によって、プロセッサのストレージ効率が向上する。なお、16個のデータ要素にアクセスされるので、16個のデータ要素に対し1つの演算が並列に実行されてよい。
【0081】
概して、一データ要素は、同一の長さを持つ他のデータ要素と共に、単一のレジスタまたはメモリ場所に格納される個々のデータである。SSEx技術に関するパックされたデータシーケンスにおいては、XMMレジスタ内に格納されたデータ要素の数は、個々のデータ要素のビット長で分割された128ビットである。同様に、MMXおよびSSE技術に関するパックされたデータシーケンスにおいては、MMXレジスタ内に格納されたデータ要素の数は、個々のデータ要素のビット長で分割された64ビットである。
図3Aに示すデータタイプは128ビット長であるが、本発明の実施形態は、64ビット幅、256ビット幅、512ビット幅のオペランドまたは他のサイズのオペランドと共に動作してもよい。この例のパックされたワードフォーマット320は128ビット長であり、8個のパックされたワードデータ要素を含む。各パックされたワードは、16ビットの情報を含む。
図3Aのパックされたダブルワードフォーマット330は128ビット長であり、4個のパックされたダブルワードデータ要素を含む。各パックされたダブルワードデータ要素は、32ビットの情報を含む。パックされたクワッドワードは128ビット長であり、2個のパックされたクワッドワードデータ要素を含む。
【0082】
図3Bは、代替的なレジスタ内データストレージフォーマットを示す。各パックされたデータは、1より多い独立データ要素を含んでよい。パックされたハーフ341、パックされたシングル342およびパックされたダブル343の3つのパックされたデータフォーマットが図示されている。パックされたハーフ341、パックされたシングル342およびパックされたダブル343の一実施形態は、固定小数点データ要素を含む。代替的な実施形態については、パックされたハーフ341、パックされたシングル342およびパックされたダブル343のうちの1または複数は、浮動小数点データ要素を含んでよい。パックされたハーフ341の代替的な一実施形態は、8個の16ビットデータ要素を含む128ビット長である。パックされたシングル342の一実施形態は128ビット長であり、4個の32ビットデータ要素を含む。パックされたダブル343の一実施形態は128ビット長であり、2個の64ビットデータ要素を含む。このようなパックされたデータフォーマットは、例えば、96ビット、160ビット、192ビット、224ビット、256ビット、512ビットまたはそれ以上といった他のレジスタ長にさらに拡張されてよいことを理解されたい。
【0083】
図3Cは、本発明の一実施形態による、マルチメディアレジスタ内の様々な符号付きおよび符号なしのパックされたデータタイプを表わしたものを示す。符号なしのパックされたバイト表現344は、SIMDレジスタ内の符号なしのパックされたバイトの格納状態を示す。各バイトデータ要素の情報は、0ビットから7ビットまではバイト0、8ビットから15ビットまではバイト1、16ビットから23ビットまではバイト2等、および最終の120ビットから127ビットまではバイト15内に格納される。故に、すべての利用可能なビットがレジスタ内で使用される。このストレージ構成によって、プロセッサのストレージ効率が向上されてよい。なお、16個のデータ要素にアクセスされるので、16個のデータ要素に対し1つの演算が並列に実行されてよい。符号付きのパックされたバイト表現345は、符号付きのパックされたバイトの格納状態を示す。各バイトデータ要素の第8番目のビットは、符号インジケータであることに留意されたい。符号なしのパックされたワード表現346は、ワード0からワード7がSIMDレジスタ内にどのように格納されるかを示す。符号付きのパックされたワード表現347は、符号なしのパックされたワードのレジスタ内表現346と類似する。各ワードデータ要素の第16番目のビットが符号インジケータであることに留意されたい。符号なしのパックされたダブルワード表現348は、ダブルワードデータ要素の格納方法を示す。符号付きパックされたダブルワード表現349は、符号なしのパックされたダブルワードのレジスタ内表現348と類似する。必要な符号ビットは、各ダブルワードデータ要素の第32番目のビットであることに留意されたい。
【0084】
図3Dは、演算エンコーディング(オペコード)フォーマット360の一実施形態の図であり、演算エンコーディング(オペコード)フォーマット360は32ビットまたは32ビットより多いビットを有し、カリフォルニア州サンタクララのインテルコーポレーションのworld wide web(www)(intel.com/products/processor/manuals/)から入手可能な「インテル(登録商標)64およびIA‐32インテルアーキテクチャソフトウェア開発者のマニュアル第2Aと第2Bとの組み合わせ:命令セットリファレンスA-Z」に記載のタイプのオペコードフォーマットと一致するレジスタ/メモリオペランドアドレス指定モードを有する。一実施形態において、命令はフィールド361および362のうちの1または複数によってエンコードされてよい。1命令ごとに、最大2つのソースオペランド識別子364および365を含む、最大2つのオペランド位置が識別されてよい。一実施形態では、デスティネーションオペランド識別子366は、ソースオペランド識別子364と同一である一方、他の実施形態においては、それらは異なる。代替的な実施形態では、デスティネーションオペランド識別子366は、ソースオペランド識別子365と同一である一方、他の実施形態においては、それらは異なる。一実施形態において、ソースオペランド識別子364および365によって識別される複数のソースオペランドのうちの1つは、命令の結果によって上書きされる一方、他の実施形態においては、識別子364はソースレジスタ要素に対応し、識別子365はデスティネーションレジスタ要素に対応する。一実施形態では、オペランド識別子364および365を使用して、32ビットまたは64ビットのソースオペランドおよびデスティネーションオペランドを識別してよい。
【0085】
図3Eは、40または40より多くのビットを有する別の代替的な演算エンコーディング(オペコード)フォーマット370の図である。オペコードフォーマット370は、オペコードフォーマット360と対応し、オプションのプレフィックスバイト378を含む。一実施形態による命令は、フィールド378、371および372のうちの1または複数によってエンコードされてよい。1命令ごとに最大2つのオペランド位置が、ソースオペランド識別子374および375並びにプレフィックスバイト378によって識別されてよい。一実施形態では、プレフィックスバイト378が使用され、32ビットまたは64ビットのソースオペランドおよびデスティネーションオペランドを識別してよい。一実施形態では、デスティネーションオペランド識別子376はソースオペランド識別子374と同一である一方、他の実施形態においては、それらは異なる。代替的な実施形態では、デスティネーションオペランド識別子376は、ソースオペランド識別子375と同一である一方、他の実施形態においては、それらは異なる。一実施形態において、命令はオペランド識別子374および375によって識別されるオペランドのうちの1または複数に対し演算を行い、オペランド識別子374および375によって識別される1または複数のオペランドは命令の結果で上書きされる一方、他の実施形態においては、識別子374および375によって識別されるオペランドは別のレジスタ内の別のデータ要素に書き込まれる。オペコードフォーマット360および370は、レジスタ対レジスタ、メモリ対レジスタ、メモリによるレジスタ、レジスタによるレジスタ、即値によるレジスタ、レジスタ対メモリのアドレス指定が、MODフィールド363および373によって部分的に並びにオプションのスケールインデックスベースおよび変位バイトによって指定されることを可能にする。
【0086】
次に
図3Fを参照すると、いくつかの代替的な実施形態において、64ビット(または128ビットまたは256ビットまたは512ビットまたはそれ以上)の単一命令複数データ(SIMD)算術演算は、コプロセッサデータ処理(CDP)命令を介して実行されてよい。演算エンコーディング(オペコード)フォーマット380は、CDPオペコードフィールド382および389を有する1つのそのようなCDP命令を表示する。代替的な実施形態における、当該タイプのCDP命令演算は、フィールド383、384、387および388のうちの1または複数によってエンコードされてよい。1命令ごとに、最大2つのソースオペランド識別子385および390並びに1つのデスティネーションオペランド識別子386を含む、最大3つのオペランド位置が識別されてよい。コプロセッサの一実施形態は、8ビット、16ビット、32ビット、および64ビットの値に演算を行ってよい。一実施形態について、命令は整数データ要素に対し実行される。いくつかの実施形態において、命令は条件フィールド381を使用して条件的に実行されてよい。いくつかの実施形態では、ソースデータサイズがフィールド383によってエンコードされてよい。いくつかの実施形態において、ゼロ(Z)、負(N)、キャリー(C)およびオーバーフロー(V)検出がSIMDフィールドでなされてよい。いくつかの命令については、飽和タイプがフィールド384によってエンコードされてよい。
【0087】
次に
図3Gを参照すると、カリフォルニア州サンタクララのインテルコーポレーションのworld−wide−web(www)のintel.com/products/processor/manuals/から入手可能な「Intel(登録商標)Advanced Vector Extensions Programming Reference」に記載されたオペコードフォーマットタイプに一致する、別の実施形態によるSIMD SM4暗号化ブロック暗号機能を提供するための別の代替的な演算エンコーディング(オペコード)フォーマット397の図である。
【0088】
オリジナルのx86命令セットは、アドレスシラブルの様々なフォーマットおよび追加のバイト内に含まれる即値オペランドを持つ1バイトオペコードのために提供されており、追加のバイトの存在は第1の「オペコード」バイトから認識される。また、オペコードに対する修飾子として予約された特定のバイト値が存在した(命令の前に配置される必要があったことから、プレフィックスと称される)。256オペコードバイトの元のパレット(これらの特別なプレフィックス値を含む)が使用され尽くすと、単一のバイトが256オペコードの新しいセットへのエスケープとして使用された。ベクトル命令(例えば、SIMD)が追加されたら、より多くのオペコードの必要性が生じるので、たとえプレフィックスの使用を介して拡張された場合であっても、「2バイト」オペコードマッピングもまた不十分であった。この目的のために、2バイトにさらに、オプションのプレフィックスを識別子として使用する追加のマップ内に、新しい命令が追加された。
【0089】
また、64ビットモードの追加のレジスタを容易化すべく、プレフィックスとオペコード(および、オペコードを判断するために必要な任意のエスケープバイト)との間に追加のプレフィックス(「REX」と称する)が使用されてよい。一実施形態において、64ビットモードの追加のレジスタの使用を示すべく、REXは4つの「ペイロード」ビットを有してよい。他の実施形態において、REXは4ビットより少ないまたは多いビットを有してよい。少なくとも1つの命令セットの一般的なフォーマット(フォーマット360および/またはフォーマット370に概して対応する)は一般的に、以下のように示される。
[prefixes] [rex] escape [escape2] opcode modrm (等)
【0090】
オペコードフォーマット397は、オペコードフォーマット370に対応し、最も一般的に使用される他のレガシの命令プレフィックスバイトおよびエスケープコードに代わるオプションのVEXプレフィックスバイト391(一実施形態では、16進数の「C4」で開始する)を含む。例えば、以下は、命令をエンコードするための2つのフィールドを使用する一実施形態を示す。それは、元の命令内に第2のエスケープコードが存在する場合、またはREXフィールド内の追加のビット(例えば、XBフィールドおよびWフィールド)が使用される必要がある場合に、使用されてよい。以下に示される実施形態では、レガシエスケープが新しいエスケープ値によって表され、レガシプレフィックスは「ペイロード」バイトの一部として完全に圧縮され、レガシプレフィックスは将来の拡張のために再利用され、利用可能であり、第2のエスケープコードは、利用可能な将来のマップまたは特徴空間とともに「マップ」フィールドに圧縮され、新しい特徴(例えば、増大されたベクトル長および追加のソースレジスタ指定子)が追加される。
【数1】
【0091】
一実施形態による命令が、フィールド391および392のうちの1または複数によってエンコードされてよい。1命令につき最大4つのオペランド位置が、ソースオペランド識別子374および375との組み合わせ、並びにオプションのスケールインデックスベース(SIB)識別子393と、オプションの変位識別子394と、オプションの即値バイト395との組み合わせによるフィールド391によって識別されてよい。一実施形態について、32ビット若しくは64ビットのソースオペランドおよびデスティネーションオペランド、並びに/または128ビット若しくは256ビットのSIMDレジスタオペランドまたはメモリオペランドを識別すべく、VEXプレフィックスバイト391が使用されてよい。一実施形態について、オペコードフォーマット397によって提供される機能は、オペコードフォーマット370と冗長的であってよい一方、他の実施形態においては、それらは異なる。オペコードフォーマット370および397は、レジスタ対レジスタ、メモリ対レジスタ、メモリによるレジスタ、レジスタによるレジスタ、即値によるレジスタ、レジスタ対メモリのアドレス指定が、MODフィールド373によって部分的並びにオプションの(SIB)識別子393と、オプションの変位識別子394と、オプションの即値バイト395とによって指定されることを可能にする。
【0092】
次に
図3Hを参照すると、別の実施形態による、SIMD SM4暗号化ブロック暗号機能を提供するための別の代替的な演算エンコーディング(オペコード)フォーマット398の図である。オペコードフォーマット398は、オペコードフォーマット370および397に対応し、最も一般的に使用される他のレガシの命令プレフィックスバイトおよびエスケープコードに代わり、かつ、追加の機能を提供するためのオプションのEVEXプレフィックスバイト396(一実施形態では、16進数の「62」から開始)を含む。 一実施形態による命令が、フィールド396および392のうちの1または複数によってエンコードされてよい。1命令につき最大4つのオペランド位置およびマスクが、ソースオペランド識別子374と375との組み合わせ、およびオプションのスケールインデックスベース(SIB)識別子393と、オプションの変位識別子394と、オプションの即値バイト395との組み合わせによるフィールド396によって識別されてよい。一実施形態について、32ビット若しくは64ビットのソースオペランドおよびデスティネーションオペランド、並びに/または128ビット、256ビット若しくは512ビットのSIMDレジスタオペランドまたはメモリオペランドを識別すべく、EVEXプレフィックスバイト396が使用されてよい。一実施形態について、オペコードフォーマット398によって提供される機能は、オペコードフォーマット370または397と冗長的であってよい一方、他の実施形態においては、それらは異なる。オペコードフォーマット398は、レジスタ対レジスタ、メモリ対レジスタ、メモリによるレジスタ、レジスタによるレジスタ、即値によるレジスタ、レジスタ対メモリのマスクを用いるアドレス指定が、MODフィールド373によって部分的に並びにオプションの(SIB)識別子393と、オプションの変位識別子394と、オプションの即値バイト395とによって指定されることを可能にする。少なくとも1つの命令セットの一般的なフォーマット(フォーマット360および/またはフォーマット370に概して対応する)は一般的に、以下のように示される。
evex1 RXBmmmmm WvvvLpp evex4 opcode modrm [sib] [disp] [imm]
【0093】
一実施形態について、EVEXフォーマット398によりエンコードされた命令は、追加の新しい機能と共にSIMD SM4暗号化ブロック暗号機能を提供するために使用され得る追加の「ペイロード」ビットを有してよい。追加の新しい機能としては、例えば、ユーザ構成可能マスクレジスタ、または追加のオペランド、または128ビット、256ビット若しくは512ビットのベクトルレジスタまたはそれより多いビットのレジスタからの選択等が含まれ、選択はこれらのレジスタからなされる。
【0094】
例えば、暗黙的なマスクを持つSIMD SM4暗号化ブロック暗号機能を提供するためにVEXフォーマット397が使用されてよい場合、明示的なユーザ構成可能マスクを持つSIMD SM4暗号化ブロック暗号機能を提供するためにEVEXフォーマット398が使用されてよい。また、128ビットまたは256ビットのベクトルレジスタにSIMD SM4暗号化ブロック暗号機能を提供するためにVEXフォーマット397が使用されてよい場合、128ビット、256ビット、512ビットまたはそれより大きい(またはより小さい)ベクトルレジスタにSIMD SM4暗号化ブロック暗号機能を提供するために、EVEXフォーマット398が使用されてよい。
【0095】
SIMD SM4暗号化ブロック暗号機能を提供するための例示的命令が、以下の例によって示される。
【表1】
【0096】
上記に示される例示的命令は、第1のソースデータオペランドセットおよび第2のソースデータオペランドセット(例えば、256ビットまたは512ビット等であってよいVmm1およびVmm2/Mem‐Vとして)並びに複数の置換関数インジケータ(例えば、即値オペランドImm8内で)を指定してよい。上記の例示的命令を実行するためのプロセッサの実施形態は、複数の暗号化ユニットを含んでよい。複数の暗号化ユニットは命令に応答して、第1の置換関数(例えば、Imm8内の各値に基づくTまたはL)を示す置換関数インジケータに応答して、複数のSM4ラウンド交換から成るスライスを、第1のソースデータオペランドセットの部分に、第2のソースデータオペランドセットからの対応する複数のキーを用いて実行し、第2の置換関数(例えば、Imm8内の各ゼロ値に基づくT'またはL')を示す置換関数インジケータに応答して、複数のSM4キー生成から成るスライスを、第1のソースデータオペランドセットの別の部分を第2のソースデータオペランドセットからの対応する複数の定数と共に使用して実行し、第1の命令の結果要素のセットをSIMDデスティネーションレジスタに格納する。
【0097】
同一のSIMD命令を用いて、SM4ラウンド交換およびSM4キー生成の両方を実行することで、暗号化または暗号化解除が小さいバッファ(例えば256ビット)でキー拡張と同時に処理されてよいことを理解されたい。128ビット(例えば4個の32ビットワード要素)が新しいラウンド交換またはキー生成ごとに要求されるので、ラウンドごとに形成される最新の128ビットが次の連続的なラウンドにパイプラインまたはバイパスされてよい。いくつかの実施形態において、スライスはSM4ラウンド交換の4回のラウンドおよびSM4キー生成の4回のラウンドで構成されてよい。このような実施形態では、SM4ラウンド交換およびSM4キー生成の32回のラウンドが8(または9)回のSM4ラウンドスライス演算を使用して実行されてよい。いくつかの実施形態において、256ビットデータパスまたは512ビットデータパスの各128ビットレーンが、命令の即値オペランド内の特定の置換関数(例えば、T若しくはT'または代替的にL若しくはL')を示す対応する値に基づいて、複数のSM4ラウンド交換から成るスライスの処理または複数のSM4キー生成から成るスライスの処理のために選択されてよい。いくつかの代替的な実施形態において、複数のSM4ラウンド交換から成るスライスを処理するための、および複数のSM4キー生成から成るスライスを処理するためのデータパスのレーンは予め定められ、および/または、固定されていてよい。いくつかの実施形態において、スライスは複数のマイクロ命令(またはマイクロopまたはμop)によって実装されてよく、結果は1マイクロ命令から次のマイクロ命令へとバイパスされてよい。いくつかの代替的な実施形態において、スライスは、ハードウェア内のロジックの複数のレイヤ(例えば2または4または8等)によって、または代替的に、複数のマイクロ命令およびハードウェア内のロジックの複数のレイヤの何らかの組み合わせによって実装されてよい。いくつかの実施形態において、スライスは、命令の即値オペランド内の値によって示されるSM4ラウンド交換およびSM4キー生成のラウンド数(例えば、1、2、4、8、16、または32)を備えてよい。いくつかの代替的な実施形態において、スライスのラウンド数は、命令ニーモニックによって、および/または、演算エンコーディング(またはオペコード)によって示されてよい。スライスが複数のラウンド(例えば、4、8、16、32等)を有してよいいくつかの実施形態においては、ソースオペランド内のキー情報は、各ラウンド内で更新され、次のラウンドのためのブロック処理ロジックに供給されてよく、複数の定数が読み取られ(例えば、128ビット、256ビット、512ビット、1024ビット等のメモリオペランドから)、連続する各ラウンドのためのキー処理ロジックに供給されてよい。
【0098】
図4Aは、本発明の少なくとも一実施形態に従う、インオーダパイプラインおよびレジスタリネーミングステージ、アウトオブオーダ発行/実行パイプラインを示すブロック図である。
図4Bは、本発明の少なくとも一実施形態による、インオーダアーキテクチャコアおよびレジスタリネーミングロジック、プロセッサ内に含まれるアウトオブオーダ発行/実行ロジックを示すブロック図である。
図4A中の実線ボックスはインオーダパイプラインを示す一方、破線ボックスはレジスタリネーミング、アウトオブオーダ発行/実行パイプラインを示す。同様に、
図4B中の実線ボックスはインオーダアーキテクチャロジックを示す一方、破線ボックスはレジスタリネーミングロジックおよびアウトオブオーダ発行/実行ロジックを示す。
【0099】
図4A中、プロセッサパイプライン400はフェッチステージ402、長さデコードステージ404、デコードステージ406、割り当てステージ408、リネーミングステージ410、スケジューリング(ディスパッチまたは発行としても知られる)ステージ412、レジスタ読み取り/メモリ読み取りステージ414、実行ステージ416、ライトバック/メモリ書き込みステージ418、例外処理ステージ422、およびコミットステージ424を含む。
【0100】
図4B中、矢印は2または2より多いユニット間の連結を示し、矢印の方向はそれらのユニット間のデータフロー方向を示す。
図4Bは、実行エンジンユニット450に連結されたフロントエンドユニット430を含むプロセッサコア490を示し、これら両方はメモリユニット470に連結される。
【0101】
コア490は縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッド若しくは代替的なコアタイプであってよい。さらなる別のオプションとして、コア490は、例えば、ネットワークコアまたは通信コア、圧縮エンジンコア、グラフィックコア等の特定用途のコアであってよい。
【0102】
フロントエンドユニット430は、命令キャッシュユニット434に連結された分岐予測ユニット432を含み、命令キャッシュユニット434は、命令変換ルックアサイドバッファ(TLB)436に連結され、TLB436は命令フェッチユニット438に連結され、命令フェッチユニット438はデコードユニット440に連結される。デコードユニットまたはデコーダは命令をデコードしてよく、1または複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、または他の制御信号を出力として生成してよく、これらは元の命令からデコードされ、あるいは元の命令を反映し、あるいは元の命令から導かれる。デコーダは、様々な異なるメカニズムを使用して実装されてよい。好適なメカニズムの例としては特に限定されないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコードリードオンリメモリ(ROM)等が含まれる。命令キャッシュユニット434はさらにメモリユニット470内のレベル2(L2)キャッシュユニット476に連結される。デコードユニット440は、実行エンジンユニット450内のリネーム/アロケータユニット452に連結される。
【0103】
実行エンジンユニット450は、リタイアメントユニット454に連結されたリネーム/アロケータユニット452および1または複数のスケジューラユニット456のセットを含む。スケジューラユニット456は、予約ステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表わす。スケジューラユニット456は物理レジスタファイルユニット458に連結される。複数の物理レジスタファイルユニット458の各々は1または複数の物理レジスタファイルを表わしており、それぞれ異なる物理レジスタファイルは、スカラ整数、スカラ浮動小数点、パックされた整数、パックされた浮動小数点、ベクトル整数、ベクトル浮動小数点等、ステータス(例えば、実行されるべき次の命令のアドレスである命令ポインタ)等の1または複数の異なるデータタイプを格納する。物理レジスタファイルユニット458にリタイアメントユニット454を重複させ、レジスタリネーミングおよびアウトオブオーダ実行を実装可能な様々な方法を示してよい(例えば、リオーダバッファおよびリタイアメントレジスタファイルを使用して、将来のファイル、履歴バッファおよびリタイアメントレジスタファイルを使用して、レジスタマップおよびレジスタプールを使用して等)。概して、アーキテクチャレジスタは、プロセッサの外部から、またはプログラマの視点から可視である。レジスタは、任意の既知の特定のタイプの回路に限定されない。様々な異なるタイプのレジスタが、それらが本明細書に記載のデータを格納し、提供可能な限り、好適である。好適なレジスタの例としては特に限定されないが、専用物理レジスタ、レジスタリネーミングを使用して動的に割り当てられた物理レジスタ、専用物理レジスタおよび動的に割り当てられた物理レジスタの組み合わせ等が含まれる。リタイアメントユニット454および物理レジスタファイルユニット458は、実行クラスタ460に連結される。実行クラスタ460は、1または複数の実行ユニット462のセット、1または複数のメモリアクセスユニット464のセットを含む。実行ユニット462は、様々な演算(例えば、シフト、加算、減算、乗算)を様々なタイプのデータ(例えば、スカラ浮動小数点、パックされた整数、パックされた浮動小数点、ベクトル整数、ベクトル浮動小数点)に行ってよい。いくつかの実施形態は、特定の関数または関数セットに専用の複数の実行ユニットを含んでよい一方、他の実施形態は、1つのみの実行ユニットまたは、それらすべてが全関数を実行する複数の実行ユニットを含んでよい。スケジューラユニット456、物理レジスタファイルユニット458、および実行クラスタ460が可能性として複数形で図示されているのは、特定の実施形態は、特定タイプのデータ/演算のために別個のパイプライン(例えば、スカラ整数のパイプライン、スカラ浮動小数点/パックされた整数/パックされた浮動小数点/ベクトル整数/ベクトル浮動小数点のパイプラインおよび/またはメモリアクセスパイプライン。これらの各々は独自のスケジューラユニット、物理レジスタファイルユニット、および/または実行クラスタを有する。別個のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセスユニット464を有する特定の実施形態が実装される)を形成するからである。別個のパイプラインが使用される場合、これらのパイプラインのうちの1または複数はアウトオブオーダ発行/実行であってよく、残りはインオーダであってよいことも理解されたい。
【0104】
メモリアクセスユニット464のセットがメモリユニット470に連結され、当該メモリユニット470はレベル2(L2)キャッシュユニット476に連結されたデータキャッシュユニット474に連結されたデータTLBユニット472を含む。一例示的な実施形態において、メモリアクセスユニット464は、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含んでよく、これらの各々はメモリユニット470内のデータTLBユニット472に連結される。L2キャッシュユニット476は、1または複数の他のレベルのキャッシュに連結され、最終的にメインメモリに連結される。
【0105】
例を挙げると、例示的なレジスタリネーミング、アウトオブオーダ発行/実行コアアーキテクチャは、パイプライン400を以下のように実装してよい。すなわち、(1)命令フェッチ438がフェッチステージ402および長さデコードステージ404を実行する。(2)デコードユニット440がデコードステージ406を実行する。(3)リネーム/アロケータユニット452が割り当てステージ408およびリネーミングステージ410を実行する。(4)スケジューラユニット456がスケジュールステージ412を実行する。(5)物理レジスタファイルユニット458およびメモリユニット470がレジスタ読み取り/メモリ読み取りステージ414を実行する。実行クラスタ460が実行ステージ416を実行する。(6)メモリユニット470および物理レジスタファイルユニット458がライトバック/メモリ書き込みステージ418を実行する。(7)様々なユニットが例外処理ステージ422の実行に使用されてよい。(8)リタイアメントユニット454および物理レジスタファイルユニット458がコミットステージ424を実行する。
【0106】
コア490は、1または複数の命令セット(例えば、x86命令セット(より新しいバージョンに追加されたいくつかの拡張機能を持つ)、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セット、カリフォルニア州サニーベールのARM HoldingsのARM命令セット(NEON等のオプションの追加拡張機能を持つ)をサポートしてよい。
【0107】
コアは、マルチスレッディング(演算またはスレッドの2または2より多い並列セットの実行)をサポートし、様々な方法でマルチスレッディングを実行してよいことを理解されたい。そのようなものとしては、時分割マルチスレッディング、同時マルチスレッディング(この場合、単一の物理コアは、物理コアが同時にマルチスレッディングを行う複数のスレッドの各々に対する論理コアを提供する)、またはこれらの組み合わせ(例えば、時分割フェッチおよび時分割デコード並びにインテル(登録商標)ハイパースレッド技術等のそれら以降の同時マルチスレッディング)が含まれる。
【0108】
レジスタリネーミングはアウトオブオーダ実行の文脈で説明されているが、レジスタリネーミングはインオーダアーキテクチャにおいて使用されてよいことを理解されたい。プロセッサの示された実施形態は、別個の命令キャッシュユニット434/データキャッシュユニット474および共有L2キャッシュユニット476も含む一方、代替の実施形態は、例えば、レベル1(L1)内部キャッシュまたは複数のレベルの内部キャッシュ等、命令およびデータの両方のための単一の内部キャッシュを有してよい。いくつかの実施形態において、システムは、内部キャッシュおよび外部キャッシュの組み合わせを含んでよく、外部キャッシュはコアおよび/またはプロセッサの外部に存在する。代替的に、すべてのキャッシュは、コアおよび/またはプロセッサの外部に存在してよい。
【0109】
図5は、本発明の実施形態による統合メモリコントローラおよびグラフィックを持つシングルコアプロセッサおよびマルチコアプロセッサ500のブロック図である。
図5の実線のボックスは、シングルコア502A、システムエージェント510、1または複数のバスコントローラユニットのセット516を持つプロセッサ500を示す一方で、オプションの追加である破線のボックスは複数のコア502A〜N、システムエージェントユニット510内の1または複数の統合メモリコントローラユニットのセット514、および統合グラフィックロジック508を持つ代替のプロセッサ500示す。
【0110】
メモリ階層は、複数のコア内の1または複数のレベルのキャッシュ、共有キャッシュユニットのセットまたは1または複数の共有キャッシュユニット506、および統合メモリコントローラユニット514のセットに連結された外部メモリ(不図示)を含む。共有キャッシュユニットのセット506はレベル2(L2)、レベル3(L3)、レベル4(L4)等の1または複数の中レベルのキャッシュ、または他のレベルのキャッシュ、ラストレベルキャッシュ(LLC)、および/またはこれらの組み合わせを含んでよい。一実施形態では、リングベースの相互接続ユニット512が、統合グラフィックロジック508、共有キャッシュユニット506のセット、およびシステムエージェントユニット510を相互接続する一方で、代替的な実施形態は、このようなユニットを相互接続するための任意の数の周知技術を使用してよい。
【0111】
いくつかの実施形態において、コア502A〜Nのうちの1または複数は、マルチスレッディングが可能である。システムエージェント510は、コア502A〜Nを調整し、コア502A〜Nを操作するためのそれらのコンポーネントを含む。システムエージェントユニット510は、例えば、電力制御ユニット(PCU)およびディスプレイユニットを含んでよい。PCUは、コア502A〜Nの電力状態を調整するために必要なロジックおよびコンポーネント並びに統合グラフィックロジック508であってよく、または当該ロジックおよび当該コンポーネント並びに統合グラフィックロジック508を含んでよい。ディスプレイユニットは、1または複数の外部接続されたディスプレイを駆動するためのものである。
【0112】
コア502A〜Nはアーキテクチャおよび/または命令セットの観点から、同種または異種であってよい。例えば、コア502A〜Nのうちのいくつかは、インオーダであってよい一方、他のものはアウトオブオーダである。別の例として、コア502A〜Nのうちの2または2より多いものは同一の命令セットを実行可能であってよい一方、他のものは、その命令セットのサブセットのみまたは異なる命令セットを実行可能であってよい。
【0113】
プロセッサは、カリフォルニア州サンタクララのインテルコーポレーションから入手可能なCore(商標)i3、i5、i7、2DuoおよびQuad、Xeon(商標)、Itanium(商標)、XScale(商標)またはStrongARM(商標)プロセッサ等の汎用プロセッサであってよい。代替的に、プロセッサは、ARM Holdings社、MIPS等の別の会社のものであってもよい。プロセッサは、例えば、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジンプロセッサ、グラフィックプロセッサ、コプロセッサ、埋め込みプロセッサ等の特定用途向けプロセッサであってよい。プロセッサは、1または複数のチップ上に実装されてよい。プロセッサ500は、例えば、BiCMOS、CMOS、またはNMOS等の多数のプロセス技術のうちの任意のものを使用する1または複数の基板の一部であってよく、および/または当該基板上に実装されてよい。
【0114】
図6〜8は、プロセッサ500を含めるために好適な例示的なシステムである一方、
図9はコア502のうちの1または複数を含んでよい例示的なシステムオンチップ(SoC)である。ラップトップ、デスクトップ、ハンドヘルドPC、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、埋め込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイスのための当該技術分野で既知の他のシステム設計および構成も好適である。一般的に、本明細書に開示のプロセッサおよび/または他の実行ロジックを組み込み可能な非常に多種多様なシステムまたは電子デバイスが概して好適である。
【0115】
ここで
図6を参照すると、本発明の一実施形態によるシステム600のブロック図が示されている。システム600は、1または複数のプロセッサ610、615を含んでよく、当該1または複数のプロセッサ610、615は、グラフィックメモリコントローラハブ(GMCH)620に連結される。
図6中、追加のプロセッサ615のオプションとしての性質は、破線で示されている。
【0116】
各プロセッサ610、615はプロセッサ500の何らかのバージョンであってよい。しかしながら、統合グラフィックロジックおよび統合メモリ制御ユニットは、プロセッサ610、615内に存在しない可能性があることに留意されたい。
図6は、GMCH620はメモリ640に連結されてよく、メモリ640は、例えば、ダイナミックランダムアクセスメモリ(DRAM)であってよいことを示す。少なくとも一実施形態で、DRAMは不揮発性キャッシュに関連付けられてよい。
【0117】
GMCH620は、チップセットまたはチップセットの一部であってよい。GMCH620はプロセッサ610、615と通信し、プロセッサ610、615とメモリ640との間のやり取りを制御してよい。また、GMCH620は、プロセッサ610、615と、システム600の他の要素との間の加速バスインタフェースとして動作してもよい。少なくとも一実施形態では、GMCH620は、プロセッサ610、615とフロントサイドバス(FSB)695等のマルチドロップバスを介して通信する。
【0118】
さらに、GMCH620はディスプレイ645(フラットパネルディスプレイ等)に連結される。GMCH620は統合グラフィックアクセラレータを含んでよい。さらにGMCH620は、入/出力(I/O)コントローラハブ(ICH)650に連結され、当該入/出力(I/O)コントローラハブ(ICH)650は、様々な周辺デバイスをシステム600に連結するために使用されてよい。
図6の実施形態の例のために、外部グラフィックデバイス660が示されており、当該外部グラフィックデバイス660は別の周辺デバイス670と共にICH650に連結された別個のグラフィックデバイスであってよい。
【0119】
代替的に、追加のまたは異なるプロセッサがシステム600内に存在してもよい。例えば、追加のプロセッサ615は、プロセッサ610と同一である追加のプロセッサ、プロセッサ610と異種または非対称である追加のプロセッサ、アクセラレータ(例えば、グラフィックアクセラレータまたはデジタル信号処理(DSP)ユニット等)、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサを含んでよい。物理リソース610と615の間には、アーキテクチャ、マイクロアーキテクチャ、熱、電力消費の特性等を含む利点の指標範囲から見て様々な差異があってよい。これらの差異は、プロセッサ610、615間の非対称性および異種性として差異自体が効果的に表われてよい。少なくとも一実施形態について、様々なプロセッサ610、615が同一のダイパッケージ内に存在してよい。
【0120】
ここで
図7を参照すると、本発明の実施形態による第2のシステム700のブロック図が示されている。
図7に図示の通り、マルチプロセッサシステム700は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続750を介して連結された第1のプロセッサ770および第2のプロセッサ780を含む。プロセッサ770および780の各々は、プロセッサ610、615のうちの1または複数と同様、プロセッサ500の何らかのバージョンであってよい。
【0121】
2つのプロセッサ770、780のみが図示されるものの、本発明の範囲はそのようには限定されないことを理解されたい。他の実施形態においては、1または複数の追加のプロセッサが特定のプロセッサ内に存在してよい。
【0122】
プロセッサ770および780は、統合メモリコントローラユニット772および782をそれぞれ含むものとして図示されている。プロセッサ770はまた、そのバスコントローラユニットの一部として、ポイントツーポイント(P−P)インタフェース776および778を含み、同様に第2のプロセッサ780はP−Pインタフェース786および788を含む。プロセッサ770、780は、P−Pインタフェース回路778、788を使用してポイントツーポイント(P−P)インタフェース750を介して情報を交換してよい。
図7に図示の通り、IMC 772および782は当該プロセッサをそれぞれのメモリ、すなわちメモリ732とメモリ734とに連結し、当該メモリは、それぞれのプロセッサに局所的に取り付けられたメインメモリの一部であってよい。
【0123】
プロセッサ770、780はそれぞれ、ポイントツーポイントインタフェース回路776、794、786、798を使用して、個々のP−Pインタフェース752、754を介してチップセット790と情報を交換してよい。チップセット790はまた、高性能グラフィックスインタフェース739を介して高性能グラフィックス回路738と情報を交換してもよい。
【0124】
共有キャッシュ(不図示)がいずれかのプロセッサの内部または両方のプロセッサの外部に含まれてよく、共有キャッシュはさらに当該プロセッサとP−P相互接続を介して接続されていてよく、その結果、プロセッサが低電力モードの場合、いずれかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュ内に格納され得るようになる。
【0125】
チップセット790はインタフェース796を介して第1のバス716に連結されてよい。一実施形態において、第1のバス716はペリフェラルコンポーネントインターコネクト(PCI)バスであってよく、またはPCIエクスプレスバス若しくは別の第3世代I/O相互接続バス等のバスであってよいが、本発明の範囲はそのようには限定されない。
【0126】
図7に図示の通り、様々なI/Oデバイス714が、バスブリッジ718と共に第1のバス716に連結されてよく、当該バスブリッジ718は第1のバス716を第2のバス720に連結する。一実施形態において、第2のバス720はローピンカウント(LPC)バスであってよい。一実施形態において、様々なデバイスが第2のバス720に連結されてよく、これらとしては、例えば、キーボードおよび/またはマウス722、通信デバイス727、並びに命令/コードおよびデータ730を含み得るディスクドライブ若しくは他の大容量ストレージデバイス等のストレージユニット728が含まれる。さらに、オーディオI/O724が第2のバス720に連結されてよい。他のアーキテクチャも可能であることに留意されたい。例えば、
図7のポイントツーポイントアーキテクチャの代わりに、システムはマルチドロップバスまたは他のこのようなアーキテクチャを実装してよい。
【0127】
ここで
図8を参照すると、本発明の一実施形態による第3のシステム800のブロック図が示されている。
図7および
図8中で同様の要素は同様の参照符号が付されており、
図8の他の態様を不明瞭にするのを回避すべく、
図7の特定の態様は
図8で省略されている。
【0128】
図8は、プロセッサ870、880が統合メモリおよびI/O制御ロジック(CL)872、882をそれぞれ含んでよいことを示す。少なくとも一実施形態について、CL 872、882は、
図5および
図7に関し上記したもののような統合メモリコントローラユニットを含んでよい。また、CL872、882はI/O制御ロジックも含んでよい。
図8は、メモリ832、834がCL872、882に連結されるだけでなく、I/Oデバイス814が制御ロジック872、882に連結されることも示している。レガシI/Oデバイス815がチップセット890に連結される。
【0129】
ここで
図9を参照すると、本発明の一実施形態によるSoC900のブロック図が示されている。
図5中と同様の要素は同様の参照番号が付されている。また、破線は、より高度なSoC上でのオプションの機能を表わす。
図9中、相互接続ユニット902は、アプリケーションプロセッサ910、システムエージェントユニット510、バスコントローラユニット516、統合メモリコントローラユニット514、1または複数のメディアプロセッサ920のセット、スタティックランダムアクセスメモリ(SRAM)ユニット930、ダイレクトメモリアクセス(DMA)ユニット932、および1または複数の外部ディスプレイに連結するためのディスプレイユニット940に連結される。ここで、当該アプリケーションプロセッサ910は1または複数のコア502A〜Nのセットおよび共有キャッシュユニット506を含む。当該1または複数のメディアプロセッサ920のセットは統合グラフィックロジック508、静止および/またはビデオカメラ機能を提供するためのイメージプロセッサ924、ハードウェアオーディオアクセラレーションを提供するためのオーディオプロセッサ926、およびビデオエンコード/デコードアクセラレーションを提供するためのビデオプロセッサ928を含んでよい。
【0130】
図10は、中央処理装置(CPU)およびグラフィック処理ユニット(GPU)を含むプロセッサを示し、これらは一実施形態による少なくとも1つの命令を実行してよい。一実施形態において、少なくとも一実施形態による演算を実行するための命令は、CPUによって実行され得る。別の実施形態においては、命令はGPUによって実行され得る。さらなる別の実施形態においては、命令はGPUおよびCPUによって実行される演算の組み合わせを通して実行されてよい。例えば、一実施形態においては、一実施形態による命令は、GPUでの実行のために受信およびデコードされてよい。しかしながら、デコードされた命令内の1または複数の演算はCPUによって実行されてよく、命令の最終的なリタイアメントのために結果がGPUに戻されてよい。逆に、いくつかの実施形態において、CPUがプライマリプロセッサとして、GPUがコプロセッサとして動作してよい。
【0131】
いくつかの実施形態において、高度に並列化されたスループットの高いプロセッサから利益享受する命令はGPUによって実行されてよい一方で、深くパイプライン化されたアーキテクチャから利益享受するプロセッサの性能から利益享受する命令はCPUによって実行されてよい。例えば、グラフィック、科学アプリケーション、財務アプリケーションおよび他の並列ワークロードは、GPUの性能から利益享受してよく、そのように実行可能であるのに対して、オペレーティングシステムのカーネルまたはアプリケーションコード等のよりシーケンシャルなアプリケーションは、CPUにより好適であってよい。
【0132】
図10中、プロセッサ1000は、CPU1005、GPU1010、イメージプロセッサ1015、ビデオプロセッサ1020、USBコントローラ1025、UARTコントローラ1030、SPI/SDIOコントローラ1035、ディスプレイデバイス1040、高解像度マルチメディアインタフェース(HDMI(登録商標))コントローラ1045、MIPIコントローラ1050、フラッシュメモリコントローラ1055、デュアルデータレート(DDR)コントローラ1060、セキュリティエンジン1065、およびI
2S/I
2C(Integrated Interchip Sound/Inter−Integrated Circuit)インタフェース1070を含む。
図10中のプロセッサ内に、より多くのCPUまたはGPUおよび他の周辺インタフェースコントローラを含む、他のロジックおよび回路が含まれてもよい。
【0133】
少なくとも一実施形態に係る1または複数の態様は、機械可読媒体上に格納された、プロセッサ内の様々なロジックを表わす典型的データによって実装されてよく、当該データは機械による読み取り時に、機械に対し本明細書に記載の技術を実行するためのロジックを生成させる。このような「IPコア」として知られる典型的なものが有形の機械可読媒体(「テープ」)上に格納され、様々な顧客または製造施設に供給され、実際にロジックまたはプロセッサを生産する製造機械にロードされてよい。例えば、ARM Holdingsによって開発されたCortex(商標)プロセッサファミリおよび中国科学院のコンピューティング技術協会(ICT)により開発された龍芯(Loongson)IPコア等のIPコアが、テキサスインスツルメンツ、クアルコム、アップルまたはサムスン等の様々な顧客またはライセンシにライセンスまたは販売されてよく、またこれらの顧客またはライセンシによって生産されるプロセッサに実装されてよい。
【0134】
図11は、一実施形態によるIPコアの開発を示すブロック図を示す。ストレージ1130は、シミュレーションソフトウェア1120および/またはハードウェア若しくはソフトウェアモデル1110を含む。一実施形態において、IPコア設計を表わすデータがメモリ1140(例えばハードディスク)、有線接続(例えばインターネット)1150または無線接続1160を介してストレージ1130に提供されてよい。次に、シミュレーションツールおよびモデルによって生成されるIPコア情報が製造施設に送信されてよく、製造施設において、少なくとも一実施形態による少なくとも1つの命令を実行するためのIPコア情報がサードパーティによって製造されてよい。
【0135】
いくつかの実施形態において、1または複数の命令は第1のタイプまたはアーキテクチャ(例えばx86)に対応してよく、1または複数の命令は異なるタイプまたはアーキテクチャ(例えばARM)のプロセッサで変換またはエミュレーションされてよい。従って、一実施形態による命令は、ARM、x86、MIPS、GPUを含む任意のプロセッサ若しくはプロセッサタイプまたは他のプロセッサタイプ若しくはアーキテクチャで実行されてよい。
【0136】
図12は、一実施形態による第1のタイプの命令が異なるタイプのプロセッサによってエミュレーションされる方法を示す。
図12中、プログラム1205は、一実施形態による命令と同一または実質的に同一の機能を実行してよいいくつかの命令を含む。しかしながら、プログラム1205の命令はプロセッサ1215と異なるまたはプロセッサ1215と互換性のないタイプおよび/またはフォーマットであってよく、つまりプログラム1205内の命令タイプはプロセッサ1215によってネイティブに実行可能でなくてよいことを意味する。しかしながら、エミュレーションロジック1210の補助を用いて、プログラム1205の命令は、プロセッサ1215によってネイティブに実行可能な命令に変換される。一実施形態において、エミュレーションロジックはハードウェアで具現化される。別の実施形態においては、エミュレーションロジックは、プログラム1205内の命令タイプを、プロセッサ1215でネイティブに実行可能なタイプに変換するソフトウェアを含む有形の機械可読媒体で具現化される。他の実施形態においては、エミュレーションロジックは、固定機能のハードウェアまたはプログラム可能なハードウェアと、有形の機械可読媒体上に格納されたプログラムとの組み合わせである。一実施形態において、プロセッサはエミュレーションロジックを含む一方で、他の実施形態においては、エミュレーションロジックはプロセッサの外部に存在し、サードパーティによって供給される。一実施形態において、プロセッサは、プロセッサ内に含まれる、またはプロセッサに関連付けられたマイクロコードまたはファームウェアを実行することにより、ソフトウェアを有する有形の機械可読媒体に具現化されたエミュレーションロジックをロード可能である。
【0137】
図13は、本発明の実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比するブロック図である。図示された実施形態において、命令コンバータはソフトウェア命令コンバータであるものの、代替的に、命令コンバータはソフトウェア、ファームウェア、ハードウェアまたはこれらの様々な組み合わせで実装されてもよい。
図13は、高水準言語1302のプログラムが、x86バイナリコード1306を生成するx86コンパイラ1304を使用してコンパイルされ得ることを示しており、当該x86バイナリコード1306は、少なくとも1つのx86命令セットコア1316を持つプロセッサによってネイティブに実行されてよい。少なくとも1つのx86命令セットコアを持つプロセッサ1316は、少なくとも1つのx86命令セットコアを持つインテルのプロセッサと実質的に同一の諸機能を実行できる任意のプロセッサを表わしており、これは次のように行う。すなわち、少なくとも1つのx86命令セットコアを持つインテルのプロセッサと実質的に同一の結果を得るべく、(1)インテルx86命令セットコアの命令セットの大部分、または(2)少なくとも1つのx86命令セットコアを持つインテルのプロセッサ上での実行を目的とするアプリケーションまたは他のソフトウェアのオブジェクトコードバージョン、を互換性のある状態で実行またはそれ以外の方法で処理することによってである。x86コンパイラ1304は、x86バイナリコード1306(例えばオブジェクトコード)を生成するよう動作可能なコンパイラを表わし、当該x86バイナリコード1306は、追加のリンク処理と共に、または追加のリンク処理なく、少なくとも1つのx86命令セットコアを持つプロセッサ1316上で実行可能である。同様に、
図13は、高水準言語1302のプログラムが、代替の命令セットバイナリコード1310を生成する代替の命令セットコンパイラ1308を使用してコンパイルされ得ることを示しており、当該代替の命令セットバイナリコード1310は、少なくとも1つのx86命令セットコアを持たないプロセッサ1314(例えば、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セットを実行する、および/または、カリフォルニア州サニーベールのARM HoldingsのARM命令セットを実行するコアを持つプロセッサ)によってネイティブに実行されてよい。命令コンバータ1312は、x86バイナリコード1306を、x86命令セットコアを持たないプロセッサ1314によってネイティブに実行可能なコードに変換されるのに使用される。この変換されたコードは、これが可能な命令コンバータの作成は難しいため、代替の命令セットバイナリコード1310と同じである可能性は低いが、しかしながら、変換されたコードは、一般的な演算を達成し、代替的な命令セットに属する複数の命令で構成されるであろう。故に、命令コンバータ1312はエミュレーション、シミュレーションまたは任意の他の処理を介して、x86命令セットプロセッサまたはコアを有しないプロセッサまたは他の電子デバイスがx86バイナリコード1306を実行できるようにするソフトウェア、ファームウェア、ハードウェアまたはこれらの組み合わせを表わす。
【0138】
図14Aは、SIMD SM4暗号化ブロック暗号機能を提供する命令の実行のための装置1402の一実施形態のための図を示す。装置1402は、複数の要素から成る第1のソースデータオペランド1410セット、複数の要素から成る第2のソースデータオペランド1420セット、および8ビット即値オペランド1430内の1または複数の置換関数インジケータを備える。装置1401において、即値オペランド1430内の1または複数の置換関数インジケータのうちのブロック置換関数Tを示す第1のインジケータに応答して、第1のソースデータオペランド1410セットの部分(X
i〜X
i+3)の第2のソースデータオペランド1420セットからの対応する第1の1または複数のキー(RK
i)との第1の1または複数のSM4ラウンド交換が、マルチプレクサ1412で実行される。ブロック置換関数Tは、非線形置換τ(タウ)および線形置換Lを備える可逆的ミキサ置換である。すなわち、T(.)=L(τ(.))。式中、
【数2】
a
0〜a
3およびb
0〜b
3の各々は8ビットを有し、演算子
【数3】
は、ビット演算排他的OR(XOR)を表わし、演算子<<<は左回転を表わす。Sボックス関数、定数パラメータ、キー拡張および暗号化等のさらなる詳細は、サンマイクロシステムズのWhitfield Diffie氏およびソノマ州立大学のGeorger Ledin氏によって変換およびタイプセットされた、world−wide−webのeprint.iacr.org/2008/329.pdfから入手可能な2008年5月15日のバージョン1.03の「無線ネットワークのためのSM4暗号化アルゴリズム」で確認できるであろう。
【0139】
装置1401において、即値オペランド1430内の上記1または複数の置換関数インジケータのうちのキー置換関数T'を示す第2のインジケータに応答して、第1のソースデータオペランド1410セットの上記部分(RK
i〜RK
i+3)を第2のソースデータオペランド1420セットからの対応する第1の1または複数の定数(CKi)と共に使用して、第1の1または複数のSM4キー生成が、マルチプレクサ1414で実行される。ブロック置換関数T'は、同一の非線形置換τ(タウ)であるが、異なる線形置換L'を有する可逆的ミキサ置換である。すなわち、T'(.)=L'(τ(.))。式中、
【数4】
【0140】
代替的な好ましい実施形態において、即値オペランド1430内の1または複数の置換関数インジケータは、TおよびT'の代わりにそれぞれLおよびL'のブロック置換関数およびキー置換関数を示す(例えば、処理ブロック1403内の装置に示される通り)ように選択でき、装置1401若しくは装置1402またはSIMD SM4暗号化ブロック暗号機能を提供する特定の命令に対し、目に見えるアーキテクチャ的な変更を加える必要が一切なく、回路内のさらなるスペース低減をもたらすことを理解されたい。装置1401におけるTおよびT'への入力は、それぞれ次の通りである。
【数5】
次に、マルチプレクサ1412および1414の出力は、それぞれX
iおよびRK
iを用いてXORされ、X
i+4およびRK
i+4をそれぞれ生成する。装置1401の一実施形態により、1または複数のSM4ラウンド交換および1または複数のSM4キー生成の結果要素1440のセットが、SIMDレジスタ内に格納されてよい(例えば、単一のラウンドのみが要求される場合、またはマイクロ命令が使用され、中間結果を生成する場合)。
【0141】
装置1402において、1または複数のSM4ラウンド交換および1または複数のSM4キー生成の結果要素1440のセットが、複数の要素から成る別のソースデータオペランド1420セット、および即値オペランド1430内の1または複数の置換関数インジケータと共にアクセスされる(例えば、SIMDレジスタ内で)。装置1402において、即値オペランド1430内の上記1または複数の置換関数インジケータのうちのブロック置換関数Tを示す第3のインジケータに応答して、結果要素1440のセットの部分(X
i+1〜X
i+4)の第2のソースデータオペランド1420セットからの対応する第2の1または複数のキー(RK
i+1)との第2の1または複数のSM4ラウンド交換が、マルチプレクサ1432で実行される。装置1402の第2の1または複数のSM4ラウンド交換におけるTおよびT'への入力は、次の通りである。
【数6】
【0142】
装置1402の処理ブロック1403で、即値オペランド1430内の上記別の1または複数の置換関数インジケータのうちのキー置換関数L'を示す第4のインジケータに応答して、結果要素1440のセットの上記部分(RK
i+1〜RK
i+4)を第2のソースデータオペランド1420セットからの対応する第2の1または複数の定数(CK
i+1)と共に使用して、第2の1または複数のSM4キー生成が、マルチプレクサ1434で実行される。処理ブロック1403の装置におけるτ1433への入力は次の通りである(例えば、XOR回路1431に図示の通り)。
【数7】
装置1403でのτ1433の出力がT1435およびT'1436に入力される。次に、マルチプレクサ1432および1434の選択された出力が、X
i+1およびRK
i+1を用いてXOR(例えば、処理ブロック1403のXOR回路1437に図示の通り)され、それぞれX
i+5およびRK
i+5が生成される。装置1402の一実施形態によると、第2の1または複数のSM4ラウンド交換および第2の1または複数のSM4キー生成の結果要素1450の別のセットが、SIMDレジスタ内に格納されてよい(例えば、2回のラウンドのみが要求される場合、または別のマイクロ命令が使用され、別の中間結果を生成する場合)。
【0143】
同一のSIMD命令を用いて、SM4ラウンド交換およびSM4キー生成の両方を実行することで、暗号化または暗号化解除が小さいバッファ(例えば256ビット)でそれぞれの後続のキー拡張と同時に処理されてよいことを理解されたい。128ビット(例えば4個の32ビットワード要素)が新しいラウンド交換またはキー生成ごとに要求されるので、ラウンドごとに形成される最新の128ビット結果が次の連続的なラウンドにパイプラインまたはバイパスされてよい。いくつかの実施形態において、スライスはSM4ラウンド交換の2回のラウンドおよびSM4キー生成の2回のラウンドで構成されてよい。このような実施形態では、SM4ラウンド交換およびSM4キー生成の32回のラウンドが16(または17)回のSM4ラウンドスライス演算を使用して実行されてよい。いくつかの実施形態において、256ビットデータパスまたは512ビットデータパスの各128ビットレーンが、命令の即値オペランド内の特定の置換関数(例えば、T若しくはT'または代替的にL若しくはL')を示す対応する値に基づいて、複数のSM4ラウンド交換から成るスライスの処理または複数のSM4キー生成から成るスライスの処理のために選択されてよい。代替的な実施形態においては、複数のSM4ラウンド交換から成るスライスを処理するための、または複数のSM4キー生成から成るスライスを処理するための256ビットデータパスまたは512ビットデータパスの128ビットレーンは、命令のニーモニックまたは演算エンコーディング(またはオペコード)に基づいて、判断されてよい。SM4アルゴリズムの暗号化および暗号化解除方法は、ラウンドキーが使用される順序が逆であることを除き、同一の構造を有することも理解されたい。例えば、暗号化のためのキー順序が(RK
0,RK
1,RK
2,...RK
31)である一方、暗号化解除のためのキー順序は(RK
31,RK
30,RK
29,...RK
0)である。
【0144】
図14Bは、SIMD SM4暗号化ブロック暗号機能を提供する命令の実行のための装置1404の代替的な実施形態の図を示す。装置1404は、複数の要素から成る第1のソースデータオペランド1410セット、複数の要素から成る第2のソースデータオペランド1420セット、および8ビット即値オペランド1430内の1または複数の置換関数インジケータを備える。装置1401のこの代替的な実施形態において、即値オペランド1430内の1または複数の置換関数インジケータのうちの対応する処理ブロック1403への入力としてのブロック置換関数を示す第1のインジケータに応答して、第1のソースデータオペランド1410セットの部分(X
i〜X
i+3)の第2のソースデータオペランド1420セットからの対応する第1の1または複数のキー(RK
i)との第1の1または複数のSM4ラウンド交換が実行される。装置1401のこの代替的な実施形態において、即値オペランド1430内の上記1または複数の置換関数インジケータのうちの第2の対応する処理ブロック1403への入力としてのキー置換関数を示す第2のインジケータに応答して、第1のソースデータオペランド1410セットの上記部分(RK
i〜RK
i+3)を第2のソースデータオペランド1420セットからの対応する第1の1または複数の定数(CK
i)と共に使用して、第1の1または複数のSM4キー生成が実行される。装置1401の代替的な一実施形態により、1または複数のSM4ラウンド交換および1または複数のSM4キー生成の結果要素1440のセットがSIMDレジスタ内に格納されてよい(例えば、単一のラウンドのみが要求される場合、またはマイクロ命令が使用され、中間結果を生成する場合)。装置1401の他の代替の実施形態において、1または複数のSM4ラウンド交換および1または複数のSM4キー生成の結果要素1440のセットが、追加の処理レイヤのために、一時的な中間ストレージへのバイパスにラッチされ、または一時的な中間ストレージ内に格納されてよい。例えば、装置1401の実施形態のいくつかの実施形態はまた、複数の要素から成る中間ソースデータオペランド1440セットを備えてもよい。装置1404において、即値オペランド1430内の1または複数の置換関数インジケータのうちの別の対応する処理ブロック1403への入力としてのブロック置換関数を示す第1のインジケータに応答して、中間ソースデータオペランド1440セットの部分(X
i+1〜X
i+4)の第2のソースデータオペランド1420セットからの対応する第1の1または複数のキー(RK
i+1)との第2の1または複数のSM4ラウンド交換が実行される。装置1404の一実施形態において、第1のインジケータ内の値1(1)は、ブロック置換関数が対応する128ビットレーンで使用されることを示す。装置1404において、即値オペランド1430内の上記1または複数の置換関数インジケータのうちの別の第2の対応する処理ブロック1403への入力としてのキー置換関数を示す第2のインジケータに応答して、中間ソースデータオペランド1440セットの部分(RK
i+1〜RK
i+4)を第2のソースデータオペランド1420セットからの対応する第2の1または複数の定数(CK
i+1)と共に使用して、第2の1または複数のSM4キー生成が実行される。装置1404の一実施形態において、第2のインジケータ内の値ゼロ(0)は、キー置換関数が対応する128ビットレーンで使用されることを示す。装置1404の一実施形態により、1または複数のSM4ラウンド交換および1または複数のSM4キー生成の結果要素1450のセットが、SIMDレジスタ内に格納されてよい(例えば、2回のラウンドのみが要求される場合、またはマイクロ命令が使用され、中間結果を生成する場合)。装置1404の代替の実施形態において、1または複数のSM4ラウンド交換および1または複数のSM4キー生成の結果要素1450のセットが、追加の処理レイヤのために、一時的な中間ストレージへのバイパスにラッチされ、または一時的な中間ストレージ内に格納されてよい。
【0145】
例えば、装置1404の実施形態はまた、複数の要素から成る第2の中間ソースデータオペランド1450セットを備えてもよい。装置1404において、即値オペランド1430内の1または複数の置換関数インジケータのうちのさらなる別の対応する処理ブロック1403への入力としてのブロック置換関数を示す第1のインジケータに応答して、中間ソースデータオペランド1450セットの部分(X
i+2〜X
i+5)の第2のソースデータオペランド1420セットからの対応する第3の1または複数のキー(RK
i+2)との第3の1または複数のSM4ラウンド交換が実行される。また装置1404において、即値オペランド1430内の上記1または複数の置換関数インジケータのうちのさらなる別の第2の対応する処理ブロック1403への入力としてのキー置換関数を示す第2のインジケータに応答して、中間ソースデータオペランド1450セットの部分(RK
i+2〜RK
i+5)を第2のソースデータオペランド1420セットからの対応する第3の1または複数の定数(CK
i+2)と共に使用して、第3の1または複数のSM4キー生成が実行される。装置1404の一実施形態により、1または複数のSM4ラウンド交換および1または複数のSM4キー生成の結果要素1450のセットがSIMDレジスタ内に格納されてよい(例えば、3回のみのラウンドが要求される場合、またはマイクロ命令が使用され、中間結果を生成する場合)。装置1404の代替の実施形態において、1または複数のSM4ラウンド交換および1または複数のSM4キー生成の結果要素1460のセットが、追加の処理レイヤのために、一時的な中間ストレージへのバイパスにラッチされ、または一時的な中間ストレージ内に再度格納されてよい。故に、装置1404の実施形態はまた、複数の要素から成る第3の中間ソースデータオペランド1460セットを備えてもよい。装置1404のこのような実施形態において、即値オペランド1430内の1または複数の置換関数インジケータのうちのさらなる別の対応する処理ブロック1403への入力としてのブロック置換関数を示す第1のインジケータに応答して、中間ソースデータオペランド1460セットの部分(X
i+3〜X
i+6)の第2のソースデータオペランド1420セットからの対応する第4の1または複数のキー(RK
i+3)との第4の1または複数のSM4ラウンド交換が実行される。また、装置1404において、即値オペランド1430内の上記1または複数の置換関数インジケータのうちのさらなる別の第2の対応する処理ブロック1403への入力としてのキー置換関数を示す第2のインジケータに応答して、中間ソースデータオペランド1460セットの部分(RK
i+3〜RK
i+6)を第2のソースデータオペランド1420セットからの対応する第4の1または複数の定数(CK
i+3)と共に使用して、第4の1または複数のSM4キー生成が実行される。装置1404の一実施形態により、1または複数のSM4ラウンド交換および1または複数のSM4キー生成の結果要素1470のセットがSIMDレジスタ内に格納されてよい(例えば、4回のラウンドのみが要求される場合、またはマイクロ命令が使用され、中間結果を生成する場合)。装置1404の代替の実施形態において、1または複数のSM4ラウンド交換および1または複数のSM4キー生成の結果要素1470のセットが、追加の処理レイヤのために、一時的な中間ストレージへのバイパスにラッチされ、または一時的な中間ストレージ内に格納されてよい。
【0146】
いくつかの実施形態において、スライスはSM4ラウンド交換の4回のラウンドおよびSM4キー生成の4回のラウンドで構成されてよいことを理解されたい。このような実施形態では、SM4ラウンド交換およびSM4キー生成の32回のラウンドが8(または9)回のSM4ラウンドスライス演算を使用して実行されてよい。いくつかの実施形態において、256ビットデータパスまたは512ビットデータパスの各128ビットレーンが、命令の即値オペランド内の対応する値に基づいて、複数のSM4ラウンド交換から成るスライスの処理または複数のSM4キー生成から成るスライスの処理のために選択されてよい。いくつかの代替的な実施形態において、複数のSM4ラウンド交換から成るスライスを処理するための、および複数のSM4キー生成から成るスライスを処理するためのデータパスのレーンは、演算コード(またはオペコード)により予め定められ、および/または、固定されていてよい。
【0147】
いくつかの実施形態において、スライスは複数のマイクロ命令(またはマイクロopまたはμop)によって実装されてよく、結果は1マイクロ命令から次のマイクロ命令へとバイパスされてよいことも理解されたい。いくつかの代替的な実施形態において、スライスは、ハードウェア内のロジックの複数のレイヤ(例えば2または4または8等)によって、または代替的に、複数のマイクロ命令およびハードウェア内のロジックの複数のレイヤの何らかの組み合わせによって実装されてよい。いくつかの実施形態において、スライスは、命令の即値オペランド内の値によって示されるSM4ラウンド交換およびSM4キー生成のラウンド数(例えば、1、2、4、8、16、または32)を備えてよい。いくつかの代替的な実施形態において、スライスのラウンド数は、命令ニーモニックによって、および/または、演算エンコーディング(またはオペコード)によって示されてよい。
【0148】
図14Cは、SIMD SM4暗号化ブロック暗号機能を提供する命令の実行のための装置1406の別の代替的な実施形態の図を示す。装置1406は、複数の要素から成る第1のソースデータオペランド1410セット、複数の要素から成る第2のソースデータオペランド1420セット、および1または複数の置換関数インジケータ(例えば、随意でオプションの8ビット即値オペランド1430内の)を備える。装置1405の一実施形態において、制御ブロック1455(および/または随意でオプションの即値オペランド1430内であってもよい)内の1または複数の置換関数インジケータ1452のうちの対応する処理ブロック1403への入力としてのブロック置換関数を示す第1のインジケータに応答して、第1の1または複数のSM4ラウンド交換を実行するために、オペランド選択コントロール1451に従い、第1のソースデータオペランド1410セットから部分(X
i〜X
i+3)が、要素選択コントロール1457に従い、第2のソースデータオペランド1420セットから選択された対応する第1の1または複数のキー(RK
i)と共に最初に選択される。装置1405のこの実施形態において、制御ブロック1455(および/または随意でオプションの即値オペランド1430内であってもよい)内の上記1または複数の置換関数インジケータ1452のうちの第2の対応する処理ブロック1403への入力としてのキー置換関数を示す第2のインジケータに応答して、第1の1または複数のSM4キー生成を実行するために、オペランド選択コントロール1451に従い、第1のソースデータオペランド1410セットから部分(RK
i〜RK
i+3)が、要素選択コントロール1457に従い、第2のソースデータオペランド1420セットから選択された対応する第1の1または複数の定数(CK
i)と共に最初に選択されてよい。装置1406の代替的な一実施形態により、1または複数のSM4ラウンド交換および1または複数のSM4キー生成の結果要素1480のセットがSIMDレジスタ1490内に格納されてよい(例えば、スライスに要求されるラウンド数が完了した場合、またはマイクロ命令が使用され、中間結果を生成する場合)。装置1406の他の代替の実施形態において、1または複数のSM4ラウンド交換および1または複数のSM4キー生成の結果要素1480のセットが、追加の処理レイヤのために、一時的な中間ストレージへのバイパス1453にラッチされ、または一時的な中間ストレージ内に格納されてよい。
【0149】
例えば、装置1406の実施形態はまた、複数の要素から成る中間ソースデータオペランド1480セットを備えてもよい。装置1405において、制御ブロック1455(および/または随意で、またオプションの即値オペランド1430内であってもよい)内の1または複数の置換関数インジケータ1452のうちの対応する処理ブロック1403への入力としてのブロック置換関数を示す第1のインジケータに応答して、後続の1または複数のSM4ラウンド交換を実行するために、オペランド選択コントロール1451に従い、中間ソースデータオペランド1480セットから後続の部分(X
j+1〜X
j+4)が、要素選択コントロール1457に従い、第2のソースデータオペランド1420セットから選択された対応する後続の1または複数のキー(RK
i+j+1)と共に選択される。装置1405の一実施形態において、第1のインジケータ内の値1(1)は、ブロック置換関数が対応する128ビットレーンに使用されることを示す。装置1406の一実施形態において、1または複数の置換関数インジケータ1452のうちの第1のインジケータ内の値(1以外であってよい)は、ブロック置換関数が対応する128ビットレーンで使用されることを示し、随意で即値オペランド1430内の対応する値((1)であってもよいし、1以外であってもよい)に応答して、ブロック置換関数が対応する128ビットレーンで使用されることを示す。装置1405において、制御ブロック1455(および/または随意で、またオプションの即値オペランド1430内であってもよい)内の上記1または複数の置換関数インジケータ1452のうちの第2の対応する処理ブロック1403への入力としてのキー置換関数を示す第2のインジケータに応答して、後続の1または複数のSM4キー生成を実行するために、オペランド選択コントロール1451に従い、中間ソースデータオペランド1480セットから後続の部分(RK
j+1〜RK
j+4)が、要素選択コントロール1457に従い、第2のソースデータオペランド1420セットから選択された対応する後続の1または複数の定数(CK
i+j+1)と共に選択される。装置1405の実施形態において、第2のインジケータ内の値ゼロ(0)は、キー置換関数が対応する128ビットレーンで使用されることを示す。装置1406の一実施形態において、1または複数の置換関数インジケータ1452のうちの第2のインジケータ内の値(0以外であってよい)は、キー置換関数が対応する128ビットレーンで使用されることを示し、随意で即値オペランド1430内の対応する値(ゼロ(0)であってもよいし、ゼロ以外であってもよい)に応答して、キー置換関数が対応する128ビットレーンで使用されることを示す。装置1406の一実施形態により、1または複数のSM4ラウンド交換および1または複数のSM4キー生成の結果要素1480のセットがSIMDレジスタ1490内に格納されてよい(例えば、スライスに要求されるラウンド数が完了した場合)。
【0150】
図15Aは、SIMD SM4暗号化ブロック暗号機能のラウンドスライスを提供する命令の実行のための処理1501の一実施形態のフロー図を示す。処理1501および本明細書に開示された他の処理は、汎用機械または特定用途機械またはそれら両方の組み合わせによって実行可能な、専用ハードウェア若しくはソフトウェア若しくはファームウェアの演算コードを含み得る処理ブロックによって実行される。
【0151】
処理ブロック1531において、複数の演算から成るSIMD SM4ラウンドスライスのための命令がデコードされ、当該命令はブロック演算および/またはキー演算を指定する。例えば、命令の実施形態は、第1のソースデータオペランドセットと、第2のソースデータオペランドセットと、1または複数の置換関数インジケータと、を指定してよく、当該置換関数インジケータは、第1のソースデータオペランドセットおよび第2のソースデータオペランドセット(例えば、256ビットSIMDレジスタ内または512ビットSIMDレジスタ内に格納され得る)の各部分(例えば、128ビットレーン等)に対するブロック演算またはキー演算を指定すべく選択されてよい。デコードされた命令に応答して、複数のマイクロ命令(または複数のマイクロオペレーション、またはμop)が随意で処理ブロック1536内で生成されてよい(例えば、スライスの個々のラウンドを実行するため、または代替的に指定されたブロック演算若しくは指定されたキー演算を実行するため)。処理ブロック1541において、第1のソースデータオペランドセットがアクセスされる(例えば、256ビットまたは512ビットSIMDレジスタから)。処理ブロック1551において、第2のソースデータオペランドセットがアクセスされる(例えば、256ビット若しくは512ビットSIMDレジスタまたはメモリ場所から)。処理ブロック1561において、ブロック演算のための置換関数を示す(例えば、第1の値を有する即値オペランド内のビットにより)、1または複数の置換関数インジケータのうちのインジケータに応答して、SM4ラウンド交換が、指定されたブロック演算に関連付けられた第1のソースデータオペランドセットの部分および第2のソースデータオペランドセットからの対応する1または複数のキーに実行される。処理ブロック1571において、キー演算のための置換関数を示す(例えば、第2の値を有する即値オペランド内のビットにより)、1または複数の置換関数インジケータのうちの別のインジケータに応答して、SM4キー生成が、指定されたキー演算に関連付けられた第1のソースデータオペランドセットの第2の部分および第2のソースデータオペランドセットからの対応する1または複数の定数を使用して実行される。処理ブロック1581において、スライスのすべてのSM4ラウンド演算が終了したか否かに関する判断がなされる。終了していない場合、処理は処理ブロック1541における開始を反復する。そうでなければ、処理は処理ブロック1591に進み、処理ブロック1591では、命令の結果要素のセットがSIMDデスティネーションレジスタ内に格納される。
【0152】
処理1501の処理ブロックおよび本明細書に開示の他の処理は、反復方法で実行されるものとして示されているものの、可能な場合はいつでも代替の順序、または同時若しくは並列での実行が好ましく行われてよいことを理解されたい。
【0153】
図15Bは、SIMD SM4暗号化ブロック暗号機能のラウンドスライスを提供する命令の実行のための処理1502の代替的な実施形態のフロー図を示す。処理ブロック1532において、複数の演算から成るSIMD SM4ラウンドスライスのための命令がデコードされ、当該命令は複数の置換関数から成るセットを指定する(例えば、ブロック演算および/またはキー演算のための)。例えば、命令の実施形態は、第1のソースデータオペランドセットと、第2のソースデータオペランドセットと、1または複数の置換関数インジケータと、を指定してよく、当該置換関数インジケータは、第1のソースデータオペランドセットおよび第2のソースデータオペランドセット(例えば、256ビットSIMDレジスタ内または512ビットSIMDレジスタ内に格納され得る)の各部分(例えば、128ビットレーン等)に対するブロック演算またはキー演算を指定すべく選択されてよい。デコードされた命令に応答して、複数のマイクロ命令(または複数のマイクロオペレーション、またはμop)が随意で処理ブロック1537内で生成されてよい(例えば、スライスの個々のラウンドを実行するため、または代替的に指定されたブロック演算若しくは指定されたキー演算を実行するため)。処理ブロック1542において、第1のソースデータオペランドセットがアクセスされる(例えば、256ビットまたは512ビットSIMDレジスタから)。処理ブロック1552において、第2のソースデータオペランドセットがアクセスされる(例えば、256ビット若しくは512ビットSIMDレジスタまたはメモリ場所から)。処理ブロック1562において、第1の置換関数はブロック演算のためのものであることを示す(例えば、第1の値を有する即値オペランド内のビットにより)、1または複数の置換関数インジケータのうちのインジケータに応答して、1または複数のSM4ラウンド交換が、第1の置換関数に関連付けられた第1のソースデータオペランドセットの部分および第2のソースデータオペランドセットからの対応する1または複数のキーに実行される。処理ブロック1572において、第2の置換関数はキー演算のためのものであることを示す(例えば、第2の値を有する即値オペランド内のビットにより)、1または複数の置換関数インジケータのうちの別のインジケータに応答して、1または複数のSM4キー生成が、第2の置換関数に関連付けられた第1のソースデータオペランドセットの部分および第2のソースデータオペランドセットからの対応する1または複数の定数を使用して実行される。処理ブロック1582において、複数の演算から成るSM4ラウンドスライスが終了したか否かに関する判断がなされる。終了していない場合、処理は処理ブロック1562における開始を反復する。そうでなければ、処理は処理ブロック1592に進み、処理ブロック1592では、命令の結果要素のセットがSIMDデスティネーションレジスタ内に格納される。
【0154】
図15Cは、SIMD SM4暗号化ブロック暗号機能のラウンドスライスを提供する命令の実行のための処理1503の別の代替の実施形態のためのフロー図を示す。処理ブロック1513において、1または複数の入力ブロックおよび/またはキースケジュールを含む第1のソースデータオペランドセットが第1のSIMDレジスタ(例えば、256ビットまたは512ビットSIMDレジスタ)内に格納される。処理ブロック1523において、ラウンドキーおよび/または定数の1または複数のセットを含む第2のソースデータオペランドセットが第2のSIMDレジスタ(例えば、256ビットまたは512ビットSIMDレジスタ)内に格納される。処理ブロック1533において、複数の演算から成るSIMD SM4ラウンドスライスのための命令が受信され、当該命令は複数の置換関数から成るセットを指定する(例えば、ブロック演算および/またはキー演算のための)。例えば、命令の実施形態は、第1のソースデータオペランドセットと、第2のソースデータオペランドセットと、1または複数の置換関数インジケータと、を指定してよく、当該置換関数インジケータのいくつかの実施形態は、第1のソースデータオペランドセットおよび第2のソースデータオペランドセットの各部分(例えば、128ビットレーン等)に対するブロック演算またはキー演算を指定すべく選択されてよい。処理1504において、複数の演算から成るSIMD SM4ラウンドスライスのための命令に応答して、複数のマイクロ命令(または複数のマイクロオペレーション、またはμop)が随意で処理ブロック1538内で生成されてよい(例えば、スライスの個々のラウンドを実行するため、または代替的に指定されたブロック演算若しくは指定されたキー演算を実行するため)。処理1504の処理ブロック1563において、ブロック演算のための第1の置換関数を示す(例えば、第1の値を有する即値オペランド内のビットにより)1または複数の置換関数インジケータに応答して、1または複数のSM4ラウンド交換が、第1の置換関数に関連付けられた第1のソースデータオペランドセットおよび第2のソースデータオペランドセットからの対応する1または複数のキーの各レーンに実行される。処理1504の処理ブロック1573において、キー演算のための第2の置換関数を示す(例えば、第2の値を有する即値オペランド内のそれぞれのビットにより)1または複数の置換関数インジケータに応答して、1または複数のSM4キー生成が、第2の置換関数に関連付けられた第1のソースデータオペランドセットおよび第2のソースデータオペランドセットからの対応する1または複数の定数の各レーンを使用して実行される。処理1504の処理ブロック1583において、複数の演算から成るSM4ラウンドスライスが終了したか否かに関する判断がなされる。終了していない場合、処理は処理ブロック1563における開始を反復する。そうでなければ、処理は処理1504の処理ブロック1593に進み、処理ブロック1593では、命令の結果要素のセットがSIMDデスティネーションレジスタ内に格納される。
【0155】
図16Aは、SIMD SM4暗号化ブロック暗号機能のラウンドスライスを提供する命令を使用して、SIMD SM4暗号化ブロック暗号(例えば、暗号化のための)を効率的に実装するための処理1601の一実施形態のフロー図を示す。処理ブロック1610において、第1のソースオペランドセット(例えば、128ビット暗号化キーから導かれる初期キー値を含む)が第1のSIMDレジスタに格納される。処理ブロック1620において、第2のソースオペランドセット(例えば、定数パラメータ値CK
0〜CK
3を含む)が第2のSIMDレジスタ内に格納される。第1のソースオペランドセットおよび第2のソースオペランドセットの初期準備(不図示)が、無線ネットワーク規格のためのSM4暗号化アルゴリズム(英語による説明がworld wide webのeprint.iacr.org/2008/329.pdfから入手可能)の定義に従い実行されることを理解されたい。処理ブロック1630において、SM4キースケジュール(例えば、RK
0〜RK
3)がキー置換関数に関連付けられた第1のソースオペランドセットおよび第2のソースオペランドセットからの対応する複数の定数(例えば、第2のSIMDレジスタの1または複数の対応する128ビットレーンからのCK
0〜CK
3)の1または複数のレーンを使用して生成される。処理ブロック1640において、新しい第1のソースオペランド(例えば、1410)セットが第3のSIMDレジスタ(いくつかの実施形態において、第1のSIMDレジスタと同一のレジスタであってよい)内に格納される。処理ブロック1650において、新しい第2のソースオペランド(例えば、1420)セットが第4のSIMDレジスタ(いくつかの実施形態において、第2のSIMDレジスタと同一のレジスタであってよい)内に格納される。処理ブロック1650は、SM4キースケジュール(例えば、オペランド1470からのRK
i+4〜RK
i+7)および対応する複数の定数(例えば、メモリからのCK
i+4〜CK
i+7)を並べ替えるための1または複数の命令を使用することによって達成されてよく、例えば、命令は、SIMD SM4暗号化ブロック暗号のSIMD SM4ラウンドスライスを実行するための命令を実行することにより、処理1603における処理のために、複数の要素を新しい第2のソースオペランド(例えば、1420)セットに転置、シャッフル、ブレンド等することを理解されたい。
【0156】
処理1603の処理ブロック1660において、ブロック演算のための置換関数を示す(例えば、第1の値を有する即値オペランド1430内のビットにより)、1または複数の置換関数インジケータのうちのインジケータに応答して、複数のSM4ラウンド交換が、指定されたブロック置換関数に関連付けられた第1のソースデータオペランド(例えば、1410)セットおよび第2のソースデータオペランド(例えば、1420)セットからの対応する1または複数のキースケジュールの1または複数のレーンに実行される。処理ブロック1670において、キー演算のための置換関数を示す(例えば、第2の値を有する即値オペランド1430内のビットにより)、1または複数の置換関数インジケータのうちの別のインジケータに応答して、複数のSM4キー生成が、指定されたキー置換関数に関連付けられた第1のソースデータオペランド(例えば、1410)セットの1または複数のレーンおよび第2のソースデータオペランド(例えば、1420)セットからの対応する1または複数の定数を使用して実行される。処理ブロック1680において、命令の結果要素のセットが、SIMDレジスタ内のSIMDデスティネーションオペランド(例えば1470)に格納される。
【0157】
処理ブロック1690において、SM4ラウンドスライスのすべてが終了したか否かに関する判断がなされる。終了していない場合、処理は処理ブロック1640における開始を反復する。そうでなければ、処理1601は処理ブロック1699で終了する。
【0158】
図16Bは、SIMD SM4暗号化ブロック暗号機能のラウンドスライスを提供する命令を使用して、SIMD SM4暗号化ブロック暗号を効率的に実装するための処理1602の代替的な実施形態のフロー図を示す。第1のソースオペランドセットおよび第2のソースオペランドセットの初期準備(不図示)がSM4暗号化アルゴリズムの定義に従い実行されることを理解されたい。処理ブロック1610において、第1のソースオペランドセット(例えば、128ビット暗号化キーから導かれる初期キー値を含む)が第1のSIMDレジスタ内に格納される。処理ブロック1620において、第2のソースオペランドセット(例えば、定数パラメータ値CK
0〜CK
3を含む)が第2のSIMDレジスタ内に格納される。処理ブロック1630において、複数のSM4キースケジュール(例えば、RK
0〜RK
3)がキー置換関数に関連付けられた第1のソースオペランドセットおよび第2のソースオペランドセットからの対応する複数の定数(例えば、第2のSIMDレジスタの1または複数の対応する128ビットレーンからのCK
0〜CK
3)の1または複数のレーンを使用して、生成される。処理ブロック1640において、新しい第1のソースオペランド(例えば、1410)セットが第3のSIMDレジスタ(いくつかの実施形態において、第1のSIMDレジスタと同一のレジスタであっても、なくてもよい)内に格納される。処理ブロック1650において、新しい第2のソースオペランド(例えば、1420)セットが第4のSIMDレジスタ(いくつかの実施形態において、第2のSIMDレジスタと同一のレジスタであっても、なくてもよい)内に格納される。処理ブロック1640および/または1650は、SM4入力ブロックおよび/またはキースケジュール(例えば、オペランド1470からのX
0〜X
3および/またはRK
i〜RK
i+3)および対応する複数の定数(例えば、メモリからのCK
i〜CK
i+3)を並べ替えるための1または複数の命令を使用することによって達成されてよく、例えば、命令は、SM4 暗号化ブロック暗号のSIMD SM4ラウンドスライスを実行するための命令を実行することにより、処理1604における処理のために、複数の要素を新しい第2のソースオペランド(例えば、1420)セットに転置、シャッフル、ブレンド等することを理解されたい。
【0159】
処理1604の処理ブロック1660において、ブロック演算のための置換関数を示す(例えば、第1の値を有するオペコード内または即値オペランド1430内のビットにより)、1または複数の置換関数インジケータのうちのインジケータに応答して、複数のSM4ラウンド交換が、指定されたブロック置換関数に関連付けられた第1のソースデータオペランド(例えば、1410)セットおよび第2のソースデータオペランド(例えば、1420)セットからの対応する1または複数のキースケジュールの1または複数のレーンに実行される。処理ブロック1670において、キー演算のための置換関数を示す(例えば、第2の値を有するオペコード内または即値オペランド1430内のビットにより)、1または複数の置換関数インジケータのうちの別のインジケータに応答して、複数のSM4キー生成が、指定されたキー置換関数に関連付けられた第1のソースデータオペランド(例えば、1410)セットおよび第2のソースデータオペランド(例えば、1420)セットからの対応する1または複数の定数の1または複数のレーンを使用して実行される。処理ブロック1682において、命令の結果要素のセットがデスティネーションに格納され、新しい第1のソースオペランド(例えば1470)セットが第3のSIMDレジスタ内に格納される。
【0160】
処理ブロック1690において、SM4ラウンドスライスのすべてが終了したか否かに関する判断がなされる。終了していない場合、処理は処理ブロック1650における開始を反復する。そうでなければ、処理1601は処理ブロック1699で終了する。
【0161】
本明細書に開示のメカニズムに係る実施形態は、ハードウェア、ソフトウェア、ファームウェアまたはこれらの実装アプローチの組み合わせにおいて実装されてよい。本発明の実施形態は、少なくとも1つのプロセッサ、ストレージシステム(揮発性および不揮発性メモリおよび/またはストレージ要素を含む)、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを備えるプログラム可能なシステム上で実行されるコンピュータプログラムまたはプログラムコードとして実装されてよい。
【0162】
本明細書に記載の機能を実行し、出力情報を生成すべく、プログラムコードが入力命令に適用されてよい。出力情報は、既知の方法で1または複数の出力デバイスに適用されてよい。本願の意図する処理システムとは、例えばデジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、またはマイクロプロセッサ等のプロセッサを有する任意のシステムが含まれる。
【0163】
プログラムコードは、処理システムと通信するために、高水準の手続き型プログラミング言語またはオブジェクト指向プログラミング言語で実装されてよい。プログラムコードは、必要に応じて、アセンブリ言語または機械言語で実装されてもよい。実際、本明細書に記載のメカニズムは特定のプログラミング言語には一切範囲限定されない。いずれの場合においても、言語はコンパイル型言語または解釈型言語であってよい。
【0164】
少なくとも一実施形態に係る1または複数の態様は、機械可読媒体上に格納された、プロセッサ内で様々なロジックを表わす典型的命令によって実装されてよく、当該命令は機械による読み取り時に、機械に対し、本明細書に記載の技術を実行するためのロジックを生成させる。このような「IPコア」として知られる典型的なものが、有形の機械可読媒体上に格納され、様々な顧客または製造施設に供給され、実際にロジックまたはプロセッサを生産する製造機械にロードされてよい。
【0165】
このような機械可読ストレージ媒体としては特に限定されないが、機械またはデバイスによって製造または形成される複数の物品から成る非一時的な有形の構成が含まれてよく、それらとしては、ハードディスク、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD‐ROM)、コンパクトディスクリライタブル(CD‐RW)、および光磁気ディスクを含む任意の他のタイプのディスク、リードオンリメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)等のランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)等の半導体デバイス、磁気カード若しくは光カードといった記憶媒体、または電子的命令を格納するのに好適な任意の他のタイプの媒体が含まれる。
【0166】
従って、また、本発明の実施形態は、命令を含む、または本明細書に記載の構造、回路、装置、プロセッサおよび/またはシステム機能を定義するハードウェア記述言語(HDL)等の設計データを含む非一時的な有形の機械可読媒体を含む。また、このような実施形態はプログラム製品としても称されてよい。
【0167】
いくつかの場合において、命令コンバータを使用し、命令はソース命令セットからターゲット命令セットへ変換されてよい。例えば、命令コンバータは、ある命令を、コアによって処理されるべき1または複数の他の命令へと、トランスレート(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を使用して)、モーフィング、エミュレーション、またはそれら以外の方法による変換を行ってよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせによって実装されてよい。命令コンバータは、プロセッサ内、プロセッサ外、または部分的にプロセッサ内または部分的にプロセッサ外に存在してよい。
【0168】
故に、少なくとも一実施形態による1または複数の命令を実行するための技術が開示されている。具体的な例示的実施形態が記載され、添付図面に図示されているものの、このような実施形態は専ら例示にすぎず、広範な本発明においての限定となるものではなく、本開示に接する当業者には様々な他の変形例が想起され得るので、本発明は図示および記載された具体的な構造および構成に限定されないことを理解されたい。本技術分野等、成長が速く、さらなる進歩が容易に予測できない技術分野においては、当該開示の実施形態は、技術の進展を可能にすることで容易となるように、本開示の原理または添付の特許請求の範囲から逸脱することなく構成および詳細において容易に変更可能である。
本実施形態の例を下記の各項目として示す。
[項目1]
単一命令複数データ(SIMD)SM4演算のための第1の命令をデコードするためのデコードステージと、
1または複数の実行ユニットと、を備え、
前記第1の命令は、第1のソースデータオペランドセットと、第2のソースデータオペランドセットと、1または複数の置換関数インジケータと、を指定し、
前記1または複数の実行ユニットは、前記デコードされた第1の命令に応答して、
前記1または複数の置換関数インジケータのうちの第1のインジケータが第1の置換関数を示す場合、前記第1のソースデータオペランドセットの部分と前記第2のソースデータオペランドセットからの対応する第1の1または複数のキーとの1または複数のSM4ラウンド交換を実行し、
前記1または複数の置換関数インジケータのうちの第2のインジケータが第2の置換関数を示す場合、前記第1のソースデータオペランドセットの前記部分を前記第2のソースデータオペランドセットからの対応する第1の1または複数の定数と共に使用して、1または複数のSM4キー生成を実行し、
前記第1の命令の結果をSIMDデスティネーションレジスタ内に格納する、プロセッサ。
[項目2]
前記第1の置換関数は、SM4のミキサ置換関数Tである、項目1に記載のプロセッサ。
[項目3]
前記第2の置換関数は、SM4のキー拡張置換関数T'である、項目2に記載のプロセッサ。
[項目4]
前記第1の命令は、前記SIMDデスティネーションレジスタをデスティネーションオペランドとして指定する、項目1から3のいずれか一項に記載のプロセッサ。
[項目5]
前記第1の命令は、SIMDレジスタが4個の32ビット要素を前記第1のソースデータオペランドセットとして保持することを指定する、項目1から4のいずれか一項に記載のプロセッサ。
[項目6]
前記第1の命令は、SIMDレジスタが8個の32ビット要素を前記第1のソースデータオペランドセットとして保持することを指定する、項目1から4のいずれか一項に記載のプロセッサ。
[項目7]
前記第1の命令は、SIMDレジスタが16個の32ビット要素を前記第1のソースデータオペランドセットとして保持することを指定する、項目1から4のいずれか一項に記載のプロセッサ。
[項目8]
前記第1の命令は、前記1または複数の置換関数インジケータを即値バイトオペランドとして指定する、項目1から7のいずれか一項に記載のプロセッサ。
[項目9]
前記第1の命令は、前記1または複数の置換関数インジケータを、前記第1のソースデータオペランドセット内の4個の32ビット要素の対応する各レーンのために、1ビットを前記即値バイトオペランドで設定することにより指定する、項目8に記載のプロセッサ。
[項目10]
前記第1の命令は、前記1または複数の置換関数インジケータを前記第1の命令のニーモニック内で指定する、項目1から9のいずれか一項に記載のプロセッサ。
[項目11]
前記1または複数の実行ユニットは、前記デコードされた第1の命令に応答して、前記第1のソースデータオペランドセットの前記部分を使用して、4回のSM4ラウンド交換または4回のSM4キー生成を実行する、項目1から10のいずれか一項に記載のプロセッサ。
[項目12]
単一命令複数データ(SIMD)SM4ラウンドスライス演算のための第1の命令をデコードする段階であって、前記第1の命令は第1のソースデータオペランドセットと、第2のソースデータオペランドセットと、1または複数の置換関数インジケータと、を指定する段階と、
前記第1の命令に応答して、
前記第1のソースデータオペランドセットにアクセスする段階と、
前記第2のソースデータオペランドセットにアクセスする段階と、
前記1または複数の置換関数インジケータのうちの第1の置換関数を示す第1のインジケータに応答して、第1の複数のSM4ラウンド交換を、前記第1のソースデータオペランドセットの第1の部分に、前記第2のソースデータオペランドセットからの対応する第1の1または複数のキーを用いて実行する段階と、
前記1または複数の置換関数インジケータのうちの第2の置換関数を示す第2のインジケータに応答して、前記第1の複数のSM4キー生成を、前記第1のソースデータオペランドセットの第2の部分を前記第2のソースデータオペランドセットからの対応する第1の1または複数の定数と共に使用して実行する段階と、
前記第1の命令の結果要素のセットをSIMDデスティネーションレジスタ内に格納する段階と、を備える、方法。
[項目13]
前記第1の命令に応答して、前記第1の複数の数に等しい複数のマイクロ命令を生成する段階をさらに備える、項目12に記載の方法。
[項目14]
前記第1の複数の数は4に等しい、項目12に記載の方法。
[項目15]
前記第1の複数の数は2に等しい、項目12に記載の方法。
[項目16]
前記第1の部分および前記第2の部分は、128ビット幅のSIMDデータレーンを有する、項目12から15のいずれか一項に記載の方法。
[項目17]
前記第1の置換関数は、SM4のミキサ置換関数Tである、項目12から16のいずれか一項に記載の方法。
[項目18]
前記第2の置換関数は、SM4のキー拡張置換関数T'である、項目17に記載の方法。
[項目19]
単一命令複数データ(SIMD)SM4ラウンドスライス演算のための第1の命令を格納するためのメモリと、
プロセッサと、を備え、
前記プロセッサは、
前記第1の命令をフェッチするための命令フェッチステージと、
前記第1の命令をデコードするためのデコードステージであって、前記第1の命令は第1のソースデータオペランドセットと、第2のソースデータオペランドセットと、1または複数の置換関数インジケータと、を指定する、デコートステージと、
1または複数の実行ユニットと、を有し、
前記1または複数の実行ユニットは、前記デコードされた第1の命令に応答して、
前記第1のソースデータオペランドセットにアクセスし、
前記第2のソースデータオペランドセットにアクセスし、
第1の置換関数を示す前記1または複数の置換関数インジケータのうちの第1のインジケータに応答して、第1の複数のSM4ラウンド交換を、前記第1のソースデータオペランドセットの第1の部分に、前記第2のソースデータオペランドセットからの対応する第1の1または複数のキーを用いて実行し、
第2の置換関数を示す前記1または複数の置換関数インジケータのうちの第2のインジケータに応答して、前記第1の複数のSM4キー生成を、前記第1のソースデータオペランドセットの第2の部分を前記第2のソースデータオペランドセットからの対応する第1の1または複数の定数と共に使用して実行し、
前記第1の命令の結果要素のセットをSIMDデスティネーションレジスタ内に格納する、処理システム。
[項目20]
前記第1の置換関数は、SM4のミキサ置換関数Tである、項目19に記載の処理システム。
[項目21]
前記第2の置換関数は、SM4のキー拡張置換関数T'である、項目20に記載の処理システム。
[項目22]
前記デコードステージは、前記第1の命令のデコードに応答して、
前記第1の命令に応答して、前記第1の複数の数に等しい複数のマイクロ命令をさらに生成する、項目19から21のいずれか一項に記載の処理システム。
[項目23]
前記第1の複数の数は4に等しい、項目19に記載の処理システム。
[項目24]
前記第1の複数の数は2に等しい、項目19に記載の処理システム。
[項目25]
前記第1の部分および前記第2の部分は、128ビット幅のSIMDデータレーンを有する、項目19から24のいずれか一項に記載の処理システム。
[項目26]
単一命令複数データ(SIMD)SM4ラウンドスライス演算のための第1の命令を格納するためのメモリと、
プロセッサと、を備え、
前記第1の命令は、第1のソースデータオペランドセットと、第2のソースデータオペランドセットと、1または複数の置換関数インジケータと、を指定し、
前記プロセッサは、1または複数の暗号化ユニットを有し、前記1または複数の暗号化ユニットは、前記第1の命令に応答して、
前記1または複数の置換関数インジケータのうちの第1の置換関数を示す第1のインジケータに応答して、第1の複数のSM4ラウンド交換を、前記第1のソースデータオペランドセットの第1の部分に、前記第2のソースデータオペランドセットからの対応する第1の1または複数のキーを用いて実行し、
前記1または複数の置換関数インジケータのうちの第2の置換関数を示す第2のインジケータに応答して、前記第1の複数のSM4キー生成を、前記第1のソースデータオペランドセットの第2の部分を前記第2のソースデータオペランドセットからの対応する第1の1または複数の定数と共に使用して実行し、
前記第1の命令の結果要素のセットをSIMDデスティネーションレジスタ内に格納する、プロセッサ内の装置。
[項目27]
前記第1の命令は、前記SIMDデスティネーションレジスタをデスティネーションオペランドとして指定する、項目26に記載の装置。
[項目28]
前記第1の命令は、前記SIMDデスティネーションレジスタを第1のソースデータオペランドとして指定する、項目26または27に記載の装置。
[項目29]
前記第1の命令は、前記1または複数の置換関数インジケータを即値データオペランドとして指定する、項目26から28のいずれか一項に記載の装置。