説明

2つのオペランドに対して演算を行い、その後オペランドの元の値を格納するための命令

【課題】 汎用レジスタのようなアーキテクチャ・リソースへの依存を軽減し、新しい命令を用いるソフトウェア・バージョンの機能及び性能を改善する、既存のアーキテクチャと整合性が取れた新しい命令機能を提供する。
【解決手段】 インターロックされたメモリ・オペランドを有する算術/論理命令が実行され、実行時に、メモリ内の位置から第2オペランドを取得し、第2オペランドの一時コピーを保存し、実行は、第2オペランド及び第3オペランドに基づいて、算術演算又は論理演算を行い、結果を第2オペランドのメモリ位置に格納し、その後、一時コピーを第1のレジスタに格納する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、コンピュータ・システムに関し、より具体的には、コンピュータ・システム・プロセッサの命令機能に関する。
【背景技術】
【0002】
商標:IBM(登録商標)は米国ニューヨーク州アーモンク所在のInternational Business Machines Corporationの登録商標であり、S/390、Z900、z990及びz10、並びに他の製品名は、International Business Machines Corporation社又は他の会社の登録商標又は製品名であり得る。
【0003】
1960年代にIBM(登録商標)のSystems360として知られていたマシンに始まり現在に至るまで、IBMは、多くの非常に有能なエンジニアの研究により、コンピューティング・システムに対するその本質的な性質のために「メインフレーム」として知られるようになった特別なアーキテクチャを作り出してきており、その動作原理は、IBMの発明者が発明した命令の「メインフレーム」実装時に実行し、採用することができる命令を記述することによりそのマシンのアーキテクチャを示すものであり、それらは、長年にわたって示された通り、IBMの非特許文献1に含めることによって、重大な貢献として「メインフレーム」が表すコンピューティング・マシンの状態の改善に大きく貢献している。2009年2月に発行された非特許文献1の第8版は、SA−22−7832−07として標準的な公開解説書になっており、IBM System z10(登録商標) Enterprise Classサーバを含むIBMのz10(登録商標)メインフレーム・サーバに組み込まれている。
【0004】
図1を参照すると、ホスト・コンピュータ・システム50の代表的なコンポーネントが描かれている。コンピュータ・システムにおいて、当技術分野において周知である他のコンポーネント構成を用いることもできる。代表的なホスト・コンピュータ50は、メイン・ストア(コンピュータ・メモリ2)と通信状態にある1つ又は複数のCPU1に加えて、ストレージ・デバイス11及び他のコンピュータ又はSAN等と通信するためのネットワーク10へのI/Oインターフェースを含む。CPU1は、アーキテクチャ化された(architected)命令セット及びアーキテクチャ化された機能を有するアーキテクチャに準拠している。CPU1は、プログラム・アドレス(仮想アドレス)をメモリの実アドレスに変換するための動的アドレス変換(Dynamic Address Translation、DAT)3を有することができる。DATは、一般的に、変換をキャッシュに入れるための変換ルックアサイド・バッファ(Translation Lookaside Buffer、TLB)7を含むので、コンピュータ・メモリ2のブロックへの後のアクセスは、アドレス変換の遅延を必要としない。一般的に、コンピュータ・メモリ2とプロセッサ1との間に、キャッシュ9が用いられる。キャッシュ9は、1つより多いCPUが利用可能な大容量のキャッシュと、大型のキャッシュと各CPUとの間のより小型でより高速な(下位レベルの)キャッシュとを有する階層とすることができる。幾つかの実装において、下位レベルのキャッシュは、命令のフェッチ及びデータ・アクセスのために別個の下位レベル・キャッシュを与えるように分割される。一実施形態においては、キャッシュ9を介して、命令フェッチ・ユニット4により、命令がメモリ2からフェッチされる。命令は、命令デコード・ユニット(6)でデコードされ、命令実行ユニット8にディスパッチされる(幾つかの実施形態においては他の命令と共に)。一般的には、例えば、演算実行ユニット、浮動小数点実行ユニット、及び分岐命令実行ユニットなどの幾つかの実行ユニット8が用いられる。命令は、実行ユニットにより実行され、必要に応じて命令が指定したレジスタ又はメモリからオペランドにアクセスする。メモリ2からオペランドにアクセスする(ロード又はストアする)場合、典型的には、ロード/ストア・ユニット5が、実行される命令の制御下でアクセスを処理する。命令は、ハードウェア回路又は内部のマイクロコード(ファームウェア)において、又はその両方の組み合わせによって実行することができる。
【0005】
図2において、ホスト・アーキテクチャのホスト・コンピュータ・システム50をエミュレートする、エミュレートされたホスト・コンピュータ・システム21の一例が提供される。エミュレートされたホスト・コンピュータ・システム21では、ホスト・プロセッサ(CPU)1は、エミュレートされたホスト・プロセッサ(又は仮想ホスト・プロセッサ)であり、かつ、ホスト・コンピュータ50のプロセッサ1のものとは異なるネイティブな命令セット・アーキテクチャを有するエミュレーション・プロセッサ27を含む。エミュレートされたホスト・コンピュータ・システム21は、エミュレーション・プロセッサ27がアクセス可能なメモリ22を有する。例示的な実施形態において、メモリ22は、ホスト・コンピュータ・メモリ2の部分と、エミュレーション・ルーチン23の部分とに区分化される。ホスト・コンピュータ・メモリ2は、ホスト・コンピュータ・アーキテクチャに従い、エミュレートされたホスト・コンピュータ・システム21のプログラムに利用可能である。エミュレーション・プロセッサ27は、エミュレートされたプロセッサ1のもの以外のアーキテクチャのアーキテクチャ化された命令セットのネイティブ命令を実行し、このネイティブ命令はエミュレーション・ルーチン・メモリ23から取得されたものであり、かつ、エミュレーション・プロセッサ27は、シーケンス及びアクセス/デコード・ルーチンにおいて取得される1つ又は複数の命令を用いることにより、ホスト・コンピュータ・メモリ2の中のプログラム由来の実行のためのホスト命令にアクセスすることができ、このシーケンス及びアクセス/デコード・ルーチンは、アクセスされたホスト命令をデコードして、アクセスされたホスト命令の機能をエミュレートするためのネイティブ命令実行ルーチンを判定することができる。ホスト・コンピュータ・システム50のアーキテクチャのために定められた、例えば、汎用レジスタ、制御レジスタ、動的アドレス変換、及びI/Oサブシステムのサポート、並びにプロセッサ・キャッシュといったファシリティを含む他のファシリティを、アーキテクチャ化ファシリティ・ルーチンによってエミュレートすることができる。エミュレーション・ルーチンは、エミュレーション・ルーチンの性能を高めるために、エミュレーション・プロセッサ27において利用可能な(汎用レジスタ、及び仮想アドレスの動的変換といった)機能を利用することもできる。ホスト・コンピュータ50の機能をエミュレートする際にプロセッサ27を補助するために、専用のハードウェア及びオフ・ロード・エンジンを設けることもできる。
【0006】
メインフレームにおいて、アーキテクチャ化されたマシン命令は、通常、プログラマによって、多くの場合コンパイラ・アプリケーションを介して、今日では「C」プログラマによって用いられる。ストレージ媒体内に格納されたこれらの命令は、z/ArchitectureのIBMサーバにおいて、又は代替的に他のアーキテクチャを実行するマシンにおいて、ネイティブに実行することができる。これらの命令は、既存の及び将来のIBMメインフレーム・サーバにおいて、及び、IBMの他のマシン(例えば、pSeries(登録商標)サーバ及びxSeries(登録商標)サーバ)上で、エミュレートすることができる。これらの命令は、IBM(登録商標)、Intel(登録商標)、AMD(商標)、Sun Microsystemsなどによって製造されたハードウェアを用いて種々のマシン上でLinux(登録商標)を実行しているマシンにおいて実行することができる。Z/Architecture(登録商標)下でそのハードウェア上で実行することに加えて、Linux(登録商標)を用いること、並びに、エミュレーション・モードにあるHercules、UMX、FSI(Fundamental Software,Inc)、又はPlatform Solutions,Inc(PSI)によるエミュレーションを用いるマシンを用いることもできる。エミュレーション・モードにおいては、ネイティブ・プロセッサによって、エミュレーション・ソフトウェアが実行され、エミュレートされたプロセッサのアーキテクチャをエミュレートする。
【0007】
ネイティブ・プロセッサ27は、一般的に、エミュレートされたプロセッサのエミュレーションを実行するためにファームウェア又はネイティブ・オペレーティング・システムのいずれかを含むエミュレーション・ソフトウェア23を実行する。エミュレーション・ソフトウェア23は、エミュレートされたプロセッサ・アーキテクチャの命令のフェッチと実行を担当する。エミュレーション・ソフトウェア23は、エミュレートされたプログラム・カウンタを維持し、命令境界を常時監視している。エミュレーション・ソフトウェア23は、一度に1つ又は複数のエミュレートされたマシン命令をフェッチし、ネイティブ・プロセッサ27により実行するために、その1つ又は複数のエミュレートされたマシン命令を、対応するネイティブマシン命令のグループに変換することができる。これらの変換された命令は、より速い変換を達成できるようにキャッシュに入れることができる。それにも関わらず、エミュレーション・ソフトウェアは、エミュレートされたプロセッサ・アーキテクチャのアーキテクチャ規則を維持して、オペレーティング・システム及びエミュレートされたプロセッサのために書かれたアプリケーションが正確に動作することを保証しなければならない。さらに、エミュレーション・ソフトウェアは、これらに限られるものではないが、制御レジスタ、汎用レジスタ、浮動小数点レジスタ、例えばセグメント・テーブル及びページ・テーブルを含む動的アドレス変換機能、割り込み機構、コンテキスト・スイッチ機構、時刻(Time of Day、TOD)クロック、及びI/Oサブシステムへのアーキテクチャ化インターフェースを含む、エミュレートされたプロセッサ1のアーキテクチャによって識別されるリソースを提供し、オペレーティング・システム又はエミュレートされたプロセッサ上で実行するように設計されたアプリケーション・プログラムが、エミュレーション・ソフトウェアを有するネイティブ・プロセッサ上で実行できるようにしなければならない。
【0008】
エミュレートされた特定の命令がデコードされ、個々の命令の機能を実行するためのサブルーチンが呼び出される。エミュレートされたプロセッサ1の機能をエミュレートするエミュレーション・ソフトウェア機能23は、例えば、「C」サブルーチン又はドライバにおいて、或いは好ましい実施形態の説明を理解した後で当業者の技術の範囲内にあるような特定のハードウェアのためにドライバを提供する他の何らかの方法で実装される。種々のソフトウェア及びハードウェア・エミュレーションの特許には、これらに限られるものではないが、Beausoleil他による「Multiprocessor for hardware emulation」という名称の特許文献1、Scalzi他による「Preprocessing of stored target routines for emulating incompatible instructions on a target processor」という名称の特許文献2、Davidian他による「Decoding guest instruction to directly access emulation routines that emulate the guest instructions」という名称の特許文献3、Gorishek他による「Symmetrical multiprocessing bus and chipset used for coprocessor support allowing non−native code to run in a system」という名称の特許文献4、Lethin他による「Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method」という名称の特許文献5、Eric Trautによる「Method for emulating guest instructions on a host computer through dynamic recompilation of host instructions」という名称の特許文献6が挙げられる。これらの参考文献は、当業者が利用可能なターゲット・マシンのための異なるマシン用に設計された命令形式のエミュレーションを達成する様々な既知の方法、並びに、上記で参照されたものにより使用される市販のソフトウェア技術を示す。
【先行技術文献】
【特許文献】
【0009】
【特許文献1】米国特許第5551013号
【特許文献2】米国特許第6009261号
【特許文献3】米国特許第5574873号
【特許文献4】米国特許第6308255号
【特許文献5】米国特許第6463582号
【特許文献6】米国特許第5790825号
【非特許文献】
【0010】
【非特許文献1】「IBM(登録商標) z/Architecture(登録商標) Principles of Operation」、刊行番号SA22−7832−07、第8版、2009年2月
【発明の概要】
【発明が解決しようとする課題】
【0011】
必要とされるのは、汎用レジスタのようなアーキテクチャ・リソースへの依存を軽減し、新しい命令を用いるソフトウェア・バージョンの機能及び性能を改善する、既存のアーキテクチャと整合性が取れた新しい命令機能である。
【課題を解決するための手段】
【0012】
一実施形態において、インターロックされたメモリ・オペランドを含む算術/論理命令が実行され、この算術/論理命令は、オペコード(op code)・フィールドと、第1のレジスタ内の第1オペランドを指定する第1のレジスタ・フィールドと、メモリ内の第2オペランドの位置を指定する第2のレジスタを指定する第2のレジスタ・フィールドと、第3のレジスタを指定する第3のレジスタ・フィールドとを含み、算術/論理命令の実行は、プロセッサにより、第2のレジスタによって指定されるメモリ内の位置からある値から成る第2オペランドを取得することと、第3のレジスタから第3オペランドを取得することと、取得した第2オペランド及び取得した第3オペランドに基づいて、オペコードが定義した算術演算又は論理演算を行って、結果を生成することと、生成した結果を、上記メモリ内の位置に格納することと、取得した第2オペランドの値を第1のレジスタに保存することとを含み、この値は、命令の実行により変更されない。
【0013】
一実施形態においては、結果が0であること、又は結果が0でないことを示す条件コードが保存される。
【0014】
一実施形態においては、オペコードが定義した算術演算は、算術加算又は論理加算であり、オペコードが定義した論理演算は、論理積、排他的論理和、又は論理和のうちのいずれか1つであり、実行は、論理演算の結果が負であることに応答して、結果が負であることを示す条件コードを保存することと、論理演算の結果が正であることに応答して、結果が正であることを示す条件コードを保存することと、論理演算の結果がオーバーフローであることに応答して、結果がオーバーフローであることを示す条件コードを保存することとを含む。
【0015】
一実施形態においては、オペコードによってオペランドのサイズが指定され、1つ又は複数の第1のオペコードは32ビット・オペランドを指定し、1つ又は複数の第2のオペコードは64ビット・オペランドを指定する。
【0016】
一実施形態においては、算術/論理命令は、2つの別個のオペコード・フィールド、第1の変位フィールド、及び第2の変位フィールドから成るオペコードをさらに含み、メモリ内の位置は、第2のレジスタの内容を符号付き変位値に加算することによって決定され、符号付き変位値は、第2の変位フィールドに連結された第1の変位フィールドの符号拡張された値を含む。
【0017】
一実施形態においては、実行は、オペコードが第1のオペコードであり、第2オペランドが32ビット境界上にないことに応答して、指定例外を発生させることと、オペコードが第2のオペコードであり、第2オペランドが64ビット境界上にないことに応答して、指定例外を発生させることとをさらに含む。
【0018】
一実施形態においては、プロセッサは、マルチプロセッサ・システム内のプロセッサであり、実行はさらに、第2オペランドを取得することが、第2オペランドを取得することと、結果をメモリ内の第2の位置に格納することとの間に、マルチプロセッサ・システムの他のプロセッサがそのメモリ内の位置にアクセスできないようにすることと、生成された結果の格納時に、マルチプロセッサ・システムの他のプロセッサがメモリ内の位置にアクセスするのを可能にすることとを含む。
【0019】
実施形態の上記及び付加的な目的、特徴、並びに利点は、以下に書かれた説明において明らかになるであろう。
【0020】
他の実施形態及び態様は、本明細書に詳細に説明され、特許請求される本発明の一部であるとみなされる。利点及び特徴をより良く理解するために、説明及び図面を参照されたい。
【0021】
本発明とみなされる主題は、本明細書の最後にある特許請求の範囲において具体的に示され、明確に請求されている。本発明の前記及び他の目的、特徴、並びに利点は、添付の図面と併用される以下の詳細な説明から明らかである。
【図面の簡単な説明】
【0022】
【図1】例示的なホスト・コンピュータ・システムを示す図である。
【図2】例示的なエミュレーション・ホスト・コンピュータ・システムを示す図である。
【図3】例示的なコンピュータ・システムを示す図である。
【図4】例示的なコンピュータ・ネットワークを示す図である。
【図5】コンピュータ・システムの要素を示す図である。
【図6】コンピュータ・システムの詳細な要素を示す。
【図7】コンピュータ・システムの詳細な要素を示す。
【図8】コンピュータ・システムの詳細な要素を示す。
【図9】コンピュータ・システムのマシン命令形式を示す。
【図10】コンピュータ・システムのマシン命令形式を示す。
【図11】コンピュータ・システムのマシン命令形式を示す。
【図12】コンピュータ・システムのマシン命令形式を示す。
【図13】コンピュータ・システムのマシン命令形式を示す。
【図14】コンピュータ・システムのマシン命令形式を示す。
【図15】一実施形態の例示的なフローを示す。
【図16】一実施形態の例示的なフローを示す。
【図17】例示的なコンテキスト・スイッチのフローを示す。
【発明を実施するための形態】
【0023】
1つの実施形態は、ソフトウェア(ライセンス内部コード(LIC)、ファームウェア、マイクロ・コード、ミリ・コード、ピコ・コードなどと呼ばれる場合もあるが、そのいずれも実施形態と整合性がある)により実施することができる。図1を参照すると、ソフトウェア・プログラム・コードは、典型的には、システム50のCPU(中央演算処理装置)1としても知られるプロセッサにより、CD−ROMドライブ、テープドライブ、又はハードドライブといった長期ストレージ媒体11からアクセスされる。ソフトウェア・プログラム・コードは、ディスケット、ハードドライブ、又はC−ROMといった、データ処理システムと共に使用するための種々の周知の媒体のいずれかの上で具体化することができる。コードは、こうした媒体上に分散させても、又はコンピュータ・メモリ2からユーザに分散させても、或いは、こうした他のシステムのユーザが使用するために、ネットワーク10上の1つのコンピュータ・システムのストレージから他のコンピュータ・システムに分散させてもよい。
【0024】
或いは、プログラム・コードをメモリ2内で具体化し、プロセッサ・バスを用いてプロセッサ1によってプログラム・コードにアクセスすることができる。このようなプログラム・コードは、種々のコンピュータ・コンポーネント及び1つ又は複数のアプリケーション・プログラムの機能及び相互作用を制御するオペレーティング・システムを含む。プログラム・コードは、通常、高密度ストレージ媒体11から高速メモリ2にページングされ、そこでプロセッサ1による処理のために利用可能になる。ソフトウェア・プログラム・コードをメモリ内、物理的媒体上で具体化し、及び/又は、ネットワークを介してソフトウェア・コードを分散させる技術及び方法は周知であり、ここではこれ以上論じない。プログラム・コードは、有形の媒体(これらに限られるものではないが、電子メモリ・モジュール(RAM)、フラッシュメモリ、コンパクトディスク(CD)、DVD、磁気テープなどを含む)上に作成され、格納されたとき、「コンピュータ・プログラム製品」と呼ばれることが多い。コンピュータ・プログラム製品媒体は、典型的には、処理回路によって実行されるために、好ましくはコンピュータ・システム内の処理回路によって読み取り可能である。
【0025】
図3は、代表的なワークステーション又はサーバ・ハードウェア・システムを示す。図3のシステム100は、随意的な周辺機器を含む、パーソナル・コンピュータ、ワークステーション、又はサーバなどの代表的なコンピュータ・システム101を含む。ワークステーション101は、1つ又は複数のプロセッサ106と、周知の技術に従ってプロセッサ106とシステム101の他のコンポーネントを接続し、これらの間の通信を可能にするために用いられるバスとを含む。バスは、プロセッサ106を、例えばハードドライブ(例えば、磁気媒体、CD、DVD、及びフラッシュメモリのいずれかを含む)又はテープドライブを含むことができる、メモリ105及び長期ストレージ107に接続する。システム101はまた、バスを介して、マイクロプロセッサ106を、キーボード104、マウス103、プリンタ/スキャナ110、及び/又はタッチ・センシティブ・スクリーン、デジタル化された入力パッド等のいずれかのユーザ・インターフェース機器とすることができる他のインターフェース機器といった、1つ又は複数のインターフェース機器に接続する、ユーザ・インターフェース・アダプタを含むこともできる。バスはまた、ディスプレイ・アダプタを介して、LCDスクリーン又はモニタなどのディスプレイ装置102をマイクロプロセッサ106にも接続する。
【0026】
システム101は、ネットワーク109と通信する108ことができるネットワーク・アダプタを介して、他のコンピュータ又はコンピュータ・ネットワークと通信することができる。例示的なネットワーク・アダプタは、通信チャネル、トークン・リング、イーサネット又はモデムである。代替的に、ワークステーション101は、CDPD(セルラー・デジタル・パケット・データ)カードのような無線インターフェースを用いて通信することもできる。ワークステーション101は、ローカル・エリア・ネットワーク(LAN)又は広域エリア・ネットワーク(WAN)内のこうした他のコンピュータと関連付けることができ、或いは、別のコンピュータなどとのクライアント/サーバ構成におけるクライアントとすることができる。これらの構成の全て、並びに、適切な通信ハードウェア及びソフトウェアは、当技術分野において周知である。
【0027】
図4は、実施形態を実施することができるデータ処理ネットワーク200を示す。データ処理ネットワーク200は、各々が複数の個々のワークステーション101、201、202、203、204を含むことができる、無線ネットワーク及び有線ネットワークのような複数の個々のネットワークを含むことができる。さらに、当業者であれば理解するように、1つ又は複数のLANを含ませることができ、そこで、LANは、ホスト・プロセッサに結合された複数のインテリジェント・ワークステーションを含むことができる。
【0028】
さらに図4を参照すると、ネットワークはまた、ゲートウェイ・コンピュータ(クライアント・サーバ206)、又はアプリケーション・サーバ(データ・リポジトリにアクセスすることができ、かつ、ワークステーション205から直接アクセスすることもできるリモート・サーバ208)のようなメインフレーム・コンピュータ又はサーバを含むこともできる。ゲートウェイ・コンピュータ206は、各ネットワーク207への入口点として働く。ゲートウェイは、1つのネットワーク・プロトコルを別のものに接続するときに必要とされる。ゲートウェイ206は、通信リンクによって別のネットワーク(例えば、インターネット207)に結合できることが好ましい。ゲートウェイ206はまた、通信リンクを用いて、1つ又は複数のワークステーション101、201、202、203、204に直接結合することもできる。ゲートウェイ・コンピュータは、IBM Corp.社から入手可能なIBM eServer(商標)、zSeries(登録商標)、z9(登録商標)サーバを用いて実装することができる。
【0029】
ソフトウェア・プログラム・コードは、一般的に、CD−ROMドライブ又はハードドライブといった、長期ストレージ媒体107から、システム101のプロセッサ106によってアクセスされる。ソフトウェア・プログラム・コードは、ディスケット、ハードドライブ、又はCD−ROMといった、データ処理システムと共に使用するための種々の周知の媒体のいずれかの上で具体化することができる。コードは、そのような媒体上で分散させても、又はメモリからユーザ210、211に分散させても、或いは、こうした他のシステムのユーザが使用するために、ネットワー上の1つのコンピュータ・システムのストレージから他のコンピュータ・システムに分散させてもよい。
【0030】
或いは、プログラミング・コード111をメモリ105内で具体化し、プロセッサ・バスを用いてプロセッサ106によってプログラミング・コード111にアクセスすることができる。このようなプログラミング・コードは、種々のコンピュータ・コンポーネント及び1つ又は複数のアプリケーション・プログラム112の機能及び相互作用を制御するオペレーティング・システムを含む。プログラム・コードは、通常、高密度ストレージ媒体107から高速メモリ105にページングされ、そこでプロセッサ106による処理のために利用可能になる。ソフトウェア・プログラミング・コードをメモリ内、物理的媒体上で具体化し、及び/又は、ネットワークを介してソフトウェア・コードを配布する技術及び方法は周知であり、ここではこれ以上論じない。プログラム・コードは、作成され、有形の媒体(これらに限られるものではないが、電子メモリ・モジュール(RAM)、フラッシュメモリ、コンパクトディスク(CD)、DVD、磁気テープなどを含む)に格納された場合には、しばしば「コンピュータ・プログラム製品」と呼ばれる。コンピュータ・プログラム製品媒体は、典型的には、処理回路によって実行されるために、好ましくはコンピュータ・システム内にある処理回路によって読み取り可能である。
【0031】
プロセッサが最も容易に利用できるキャッシュ(通常、プロセッサの他のキャッシュよりも高速で小さい)は、最下位(L1又はレベル1)のキャッシュであり、メイン・ストア(メイン・メモリ)は、最上位レベルのキャッシュ(3つのレベルがある場合にはL3)である。最下位レベルのキャッシュは、実行されるマシン命令を保持する命令キャッシュ(I−キャッシュ)と、データ・オペランドを保持するデータ・キャッシュ(D−キャッシュ)とに分割されることが多い。
【0032】
図5を参照すると、プロセッサ106についての例示的なプロセッサの実施形態が示される。典型的には、メモリ・ブロックをバッファに入れてプロセッサ性能を向上させるために、1つ又は複数のレベルのキャッシュ303が用いられる。キャッシュ303は、使用される可能性が高いメモリ・データのキャッシュ・ラインを保持する高速バッファである。典型的なキャッシュ・ラインは、64バイト、128バイト、又は256バイトのメモリ・データである。データをキャッシュに入れるのではなく、命令をキャッシュに入れるために、別個のキャッシュが用いられることが多い。キャッシュ・コヒーレンス(メモリ及びキャッシュ内のラインのコピーの同期)は、多くの場合、当技術分野において周知の種々の「スヌープ(Snoop)」アルゴリズムによって与えられる。プロセッサ・システムの主ストレージ105は、キャッシュと呼ばれることが多い。4つのレベルのキャッシュ303を有するプロセッサ・システムにおいて、主ストレージ105は、典型的にはより高速であり、かつ、コンピュータ・システムが利用できる不揮発性ストレージ(DASD、テープ等)の一部だけを保持するので、レベル5(L5)のキャッシュと呼ばれることがある。主ストレージ105は、オペレーティング・システムによって主ストレージ105との間でページングされるデータのページを「キャッシュに入れる」。
【0033】
プログラム・カウンタ(命令カウンタ)311は、実行される現行の命令のアドレスを常時監視している。z/Architectureプロセッサのプログラム・カウンタは64ビットであり、従来のアドレッシング制限をサポートするために、31ビット又は24ビットに切り捨てることができる。プログラム・カウンタは、典型的には、コンテキスト・スイッチの際に持続するように、コンピュータのPSW(プログラム状況ワード)内で具体化される。従って、例えば、オペレーティング・システムにより、プログラム・カウンタ値を有する進行中のプログラムに割り込みをかけることが可能である(プログラム環境からオペレーティング・システム環境へのコンテキスト・スイッチ)。プログラムのPSWは、プログラムがアクティブでない間、プログラム・カウンタ値を保持し、オペレーティング・システムが実行されている間、オペレーティング・システムの(PSW内の)プログラム・カウンタが使用される。典型的には、プログラム・カウンタは、現行の命令のバイト数に等しい量だけインクリメントされる。RISC(Reduced Instruction Set Computing、縮小命令セット・コンピューティング)命令は、典型的には固定長であり、CISC(Complex Instruction Set Computing、複合命令セット・コンピューティング)命令は、典型的には可変長である。IBM z/Architectureの命令は、2バイト、4バイト、又は6バイトの長さを有するCISC命令である。例えば、コンテキスト・スイッチ操作又は分岐命令の分岐成立(Branch taken)操作により、プログラム・カウンタ311が変更される。コンテキスト・スイッチ操作において、現行のプログラム・カウンタ値は、実行されるプログラムについての他の状態情報(条件コードのような)と共にプログラム状況ワード(PSW)に保存され、実行される新しいプログラム・モジュールの命令を指し示す新しいプログラム・カウンタ値がロードされる。分岐成立操作を行い、分岐命令の結果をプログラム・カウンタ311にロードすることによって、プログラムが判断を下すこと又はプログラム内でループすることを可能にする。
【0034】
典型的には、プロセッサ106の代わりに命令をフェッチするために、命令フェッチ・ユニット305が用いられる。フェッチ・ユニットは、「次の順次命令(next sequential instruction)」、分岐成立命令のターゲット命令、又はコンテキスト・スイッチの後のプログラムの最初の命令のいずれかをフェッチする。今日の命令フェッチ・ユニットは、プリフェッチされた命令を使用することができる可能性に基づいて、命令を投機的にプリフェッチするプリフェッチ技術を用いることが多い。例えば、フェッチ・ユニットは、次の順次命令を含む16バイトの命令と、付加的なバイトの更なる順次命令とをフェッチすることができる。
【0035】
次いで、フェッチされた命令が、プロセッサ106によって実行される。一実施形態において、フェッチされた命令は、フェッチ・ユニットのディスパッチ・ユニット306に渡される。ディスパッチ・ユニット306は命令をデコードし、デコードされた命令についての情報を適切なユニット307、308、310に転送する。実行ユニット307は、典型的には、命令フェッチ・ユニット305からデコードされた算術命令についての情報を受け取り、命令のオペコードに従ってオペランドに関する算術演算を行う。オペランドは、好ましくは、メモリ105、アーキテクチャ化レジスタ309、又は実行される命令の即値フィールドのいずれかから、実行ユニット307に与えられる。実行の結果は、格納された場合には、メモリ105、レジスタ309、又は他のマシン・ハードウェア(制御レジスタ、PSWレジスタなどのような)内に格納される。
【0036】
プロセッサ106は、典型的には、命令の機能を実行するための1つ又は複数の実行ユニット307、308、310を有する。図6を参照すると、実行ユニット307は、インターフェース論理407を介して、アーキテクチャ化された汎用レジスタ309、デコード/ディスパッチ・ユニット306、ロード・ストア・ユニット310、及び他のプロセッサ・ユニット401と通信することができる。実行ユニット307は、幾つかのレジスタ回路403、404、405を用いて、算術論理演算ユニット(ALU)402が動作する情報を保持することができる。ALUは、加算(add)、減算(subtract)、乗算(multiply)、及び除算(divide)などの算術演算、並びに、論理積(and)、論理和(or)、及び排他的論理和(xor)、ローテート(rotate)及びシフト(shift)のような論理関数を実行する。ALUは、設計に依存する専用の演算をサポートすることが好ましい。他の回路は、例えば条件コード及びリカバリー・サポート論理を含む、他のアーキテクチャ化ファシリティ408を提供することができる。典型的には、ALU演算の結果は、出力レジスタ回路406に保持され、この出力レジスタ回路406が、結果を種々の他の処理機能に転送することができる。多数のプロセッサ・ユニットの構成が存在し、本説明は、一実施形態の代表的な理解を与えることのみを意図している。
【0037】
例えばADD命令は、算術及び論理機能を有する実行ユニット307で実行され、一方、例えば浮動小数点命令は、特化された浮動小数点能力を有する浮動小数点実行部で実行される。実行ユニットは、オペランドに対してオペコードが定めた関数を行うことにより、命令が特定したオペランドに対して動作することが好ましい。例えば、ADD命令は、命令のレジスタ・フィールドによって特定された2つのレジスタ309内に見出されるオペランドに対して、実行ユニット307により実行することができる。
【0038】
実行ユニット307は、2つのオペランドに対して算術加算を実行し、結果を第3オペランドに格納し、ここで、第3オペランドは、第3のレジスタであってもよく又は2つのソース・レジスタのいずれかであってもよい。実行ユニットは、シフト、ローテート、論理積、論理和、及び排他的論理和のような種々の論理関数、並びに、加算、減算、乗算、除法のいずれかを含む、種々の代数関数を実行することができる算術論理演算ユニット(ALU)402を使用することが好ましい。スカラー演算のために設計されたALU402もあり、浮動小数点のために設計されたALU402もある。データは、アーキテクチャに応じて、ビッグエンディアン(Big Endian)(最下位のバイトが最も高いバイト・アドレスである)、又はリトルエンディアン(Little Endian)(最下位のバイトが最も低いバイト・アドレスである)とすることができる。IBM z/Architectureは、ビッグエンディアンである。符号付きフィールドは、アーキテクチャに応じて、符号及び大きさ、1の補数、又は2の補数とすることができる。2の補数における負の値又は正の値は、ALU内で加法しか必要としないため、ALUが減算能力を設計する必要がないという点で、2の補数は有利である。数値は、通常、省略表現で記述され、12ビット・フィールドは、4,096バイトブロックのアドレスを定め、通常、例えば4Kバイト(キロバイト)ブロックのように記述される。
【0039】
図7を参照すると、分岐命令を実行するための分岐命令情報が、典型的には、分岐ユニット308に送られ、この分岐ユニット308は、多くの場合、分岐履歴テーブル432のような分岐予測アルゴリズムを用いて、他の条件付き演算が完了する前に分岐の結果を予測する。条件付き演算が完了する前に、現行の分岐命令のターゲットがフェッチされ、投機的に実行される。条件付き演算が完了すると、投機的に実行された分岐命令は、条件付き演算の条件及び投機された結果に基づいて、完了されるか又は破棄される。典型的な分岐命令は、条件コードを試験し、条件コードが分岐命令の分岐要件を満たす場合、ターゲット・アドレスに分岐することができ、ターゲット・アドレスは、例えば、命令のレジスタ・フィールド又は即値フィールド内に見出されるものを含む幾つかの数に基づいて計算することができる。分岐ユニット308は、複数の入力レジスタ回路427、428、429と、出力レジスタ回路430とを有するALU426を用いることができる。分岐ユニット308は、例えば、汎用レジスタ309、デコード・ディスパッチ・ユニット306、又は他の回路425と通信することができる。
【0040】
例えば、オペレーティング・システムによって開始されるコンテキスト・スイッチ、コンテキスト・スイッチを発生させるプログラム例外又はエラー、コンテキスト・スイッチを発生させるI/O割り込み信号、或いは、(マルチスレッド環境における)複数のプログラムのマルチスレッド活動を含む様々な理由により、命令のグループの実行に割り込みがかけられることがある。コンテキスト・スイッチ動作は、現在実行中のプログラムについての状態情報を保存し、次いで、起動される別のプログラムについての状態情報をロードすることが好ましい。状態情報は、例えば、ハードウェア・レジスタ又はメモリ内に保存することができる。状態情報は、実行される次の命令を指し示すプログラム・カウンタ値と、条件コードと、メモリ変換情報と、アーキテクチャ化されたレジスタの内容とを含むことが好ましい。コンテキスト・スイッチの活動は、ハードウェア回路、アプリケーション・プログラム、オペレーティング・システム・プログラム、又はファームウェア・コード(マイクロ・コード、ピコ・コード、又はライセンス内部コード(LIC))単独で又はその組み合わせで実施することができる。
【0041】
プロセッサは、命令により定義された方法に従ってオペランドにアクセスする。命令は、命令の一部の値を用いて即値オペランドを与えることができ、汎用レジスタ又は専用レジスタ(例えば、浮動小数点レジスタ)のいずれかを明示的に指し示す1つ又は複数のレジスタ・フィールドを与えることができる。命令は、オペコード・フィールドによって、オペランドとして識別されるインプライド・レジスタ(implied register)を用いることができる。命令は、オペランドのためのメモリ位置を用いることができる。z/Architectureの長変位ファシリティ(long displacement facility)により例示されるように、オペランドのメモリ位置を、レジスタ、即値フィールド、又はレジスタと即値フィールドの組み合わせによって与えることができ、命令は、基底レジスタ、指標レジスタ、及び即値フィールド(変位フィールド)を定め、これらが、例えば互いに加算されてメモリ内のオペランドのアドレスをもたらす。ここでの位置(location)は、典型的には、特に断りのない限り、メイン・メモリ(主ストレージ)内の記憶位置を意味する。
【0042】
図8を参照すると、プロセッサは、ロード/ストア・ユニット310を用いて、ストレージにアクセスする。ロード/ストア・ユニット310は、メモリ303内のターゲット・オペランドのアドレスを取得し、オペランドをレジスタ309又は別のメモリ303の記憶位置にロードすることによってロード操作を行うことができ、或いは、メモリ303内のターゲット・オペランドのアドレスを取得し、レジスタ309又は別のメモリ303の記憶位置から取得したデータをメモリ303内のターゲット・オペランドの記憶位置に格納することによって、ストア操作を行うことができる。ロード/ストア・ユニット310は、投機的なものであってもよく、命令シーケンスに対してアウト・オブ・オーダー式の順序でメモリにアクセスすることができるが、プログラムに対して、命令がイン・オーダー式に実行されたという外観を維持する必要がある。ロード/ストア・ユニット310は、汎用レジスタ309、デコード/ディスパッチ・ユニット306、キャッシュ/メモリ・インターフェース303、又は他の要素455と通信することができ、ストレージ・アドレスを計算し、かつ、パイプライン処理を順に行って操作をイン・オーダー式に保持するための、種々のレジスタ回路、ALU458、及び制御論理463を含む。一部の動作は、アウト・オブ・オーダー式とすることができるが、ロード/ストア・ユニットは、アウト・オブ・オーダー式動作が、プログラムに対して、当技術分野において周知のようなイン・オーダー式に実行されたように見えるようにする機能を提供する。
【0043】
好ましくは、アプリケーション・プログラムが「見ている」アドレスは、仮想アドレスと呼ばれることが多い。仮想アドレスは、「論理アドレス」及び「実効アドレス(effective address)」と呼ばれることもある。これらの仮想アドレスは、これらに限られるものではないが、単に仮想アドレスをオフセット値にプリフィックス付加すること、1つ又は複数の変換テーブルを介して仮想アドレスを変換することを含む、種々の動的アドレス変換(DAT)312技術の1つによって、物理的メモリ位置にリダイレクトされるという点で仮想のものであり、変換テーブルは、少なくともセグメント・テーブル及びページ・テーブルを単独で又は組み合わせて含むことが好ましく、セグメント・テーブルは、ページ・テーブルを指し示すエントリを有することが好ましい。z/Architectureでは、領域第1テーブル、領域第2テーブル、領域第3テーブル、セグメント・テーブル、及び随意的なページ・テーブルを含む、変換の階層が提供される。アドレス変換の性能は、仮想アドレスを関連した物理的メモリ位置にマッピングするエントリを含む変換ルックアサイド・バッファ(TLB)を用いることにより改善されることが多い。DAT312が変換テーブルを用いて仮想アドレスを変換したときに、エントリが作成される。次いで、後に仮想アドレスを用いることで、低速の順次変換テーブル・アクセスではなく、高速のTLBのエントリを用いることが可能になる。TLBの内容は、LRU(Least Recently Used)を含む種々の置換アルゴリズムによって管理することができる。
【0044】
プロセッサがマルチプロセッサ・システムのプロセッサである場合には、各プロセッサは、コヒーレンシのために、I/O、キャッシュ、TLB、及びメモリといった共有リソースをインターロック状態に保持する責任を負う。キャッシュ・コヒーレンシを保持する際に、一般的には「スヌープ」技術が用いられる。スヌープ環境においては、共有を容易にするために、各キャッシュ・ラインを、共有状態、排他的状態、変更状態、無効状態等のいずれか1つの状態にあるものとしてマーク付けすることができる。
【0045】
I/Oユニット304は、プロセッサに、例えば、テープ、ディスク、プリンタ、ディスプレイ、及びネットワークを含む周辺機器に取り付けるための手段を与える。I/Oユニットは、ソフトウェア・ドライバによってコンピュータ・プログラムに提示されることが多い。IBMによるz/Seriesのようなメインフレームにおいては、チャネル・アダプタ及びオープン・システム・アダプタが、オペレーティング・システムと周辺機器との間に通信をもたらすメインフレームのI/Oユニットである。
【0046】
非特許文献1からの以下の記述は、コンピュータ・システムのアーキテクチャ上の観点を記載する。:
【0047】
ストレージ:
コンピュータ・システムは、主ストレージ内の情報、並びに、アドレッシング、保護、参照、及び変更の記録を含む。アドレッシングの幾つかの態様は、アドレスの形式、アドレス空間の概念、種々のタイプのアドレス、及び1つのタイプのアドレスを別のタイプのアドレスに変換する方法を含む。主ストレージの一部は、永続的に割り当てられた記憶位置を含む。主ストレージは、システムに、データの直接アドレス指定可能な高速アクセス・ストレージを与える。データ及びプログラムを処理できるようになる前に、(入力装置から)データ及びプログラムの両方を主ストレージにロードしなければならない。
【0048】
主ストレージは、キャッシュと呼ばれることもある、1つ又は複数のより小さくより高速アクセスのバッファ・ストレージを含むことができる。キャッシュは、典型的には、CPU又はI/Oプロセッサと物理的に関連付けられる。物理的構成及び別個のストレージ媒体を使用することの影響は、性能に対するものを除き、通常、プログラムにより観察することはできない。
【0049】
命令及びデータ・オペランドについて、別個のキャッシュを保持することができる。キャッシュ内の情報は、キャッシュ・ブロック又はキャッシュ・ライン(又は短縮してライン)と呼ばれる、整数境界(integral boundary)上にある連続したバイト内に保持される。モデルは、キャッシュ・ラインのサイズをバイトで返す、EXTRACT CACHE ATTRIBUTE命令を提供することができる。モデルはまた、データ又は命令キャッシュへのストレージのプリフェッチ、或いは、キャッシュからのデータの解放に影響を与える、PREFETCH DATA及びPREFETCH DATA RELATIVE LONG命令を提供することができる。
【0050】
ストレージは、長い水平方向のビットの文字列と考えられる。大部分の操作において、ストレージへのアクセスは、左から右への順序で進む。ビットの文字列は、8ビット単位で分割される。8ビットの単位は1バイトと呼ばれ、全ての情報の形式の基本的な構成要素(building block)である。ストレージ内の各々のバイト位置は、負でない一意の整数により識別され、この整数がそのバイト位置のアドレスであり、即ち、簡単にバイト・アドレスである。隣接するバイト位置は、連続するアドレスを有し、左の0で始まり、左から右への順序で進む。アドレスは、符号なしの2進整数であり、24ビット、31ビット、又は64ビットである
【0051】
情報は、ストレージとCPU又はチャネル・サブシステムとの間で、一度に1バイトずつ、又は1バイト・グループずつ伝送される。特に断りのない限り、ストレージ内のバイト・グループは、グループの左端のバイトによりアドレス指定される。グループ内のバイト数は、実行される操作により暗黙に決定されるか、又は明示的に指定される。CPU操作に使用される場合、バイト・グループはフィールドと呼ばれる。バイト・グループの中の各々において、ビットは、左から右の順序で番号が付けられる。左端のビットは「上位(high-order)」ビットと呼ばれることがあり、右端ビットは「下位(low-order)」ビットと呼ばれることがある。しかしながら、ビット数は、ストレージ・アドレスではない。バイトだけを、アドレス指定することができる。ストレージ内の1つのバイトを形成する個々のビットに対して操作を行うためには、そのバイト全体にアクセスする必要がある。1バイトの中のビットには、左から右に0から7までの番号が付けられる。1つのアドレスの中のビットには、24ビット・アドレスの場合は8−31又は40−63の番号を付けることができ、或いは、31ビット・アドレスの場合は1−31又は33−63の番号を付けることができ、64ビット・アドレスの場合は0−63の番号が付けられる。複数バイトから成る他のいずれかの固定長形式の中では、その形式を構成するビットには、0から始まる連続番号が付けられる。エラー検出のため及び好ましくは訂正のために、各バイト又はバイト・グループと共に、1つ又は複数の検査ビットが伝送されることがある。このような検査ビットは、マシンにより自動的に生成されるものであり、プログラムが直接制御することはできない。記憶容量は、バイト数で表わされる。ストレージ・オペランド・フィールドの長さが命令のオペレーション・コードで暗黙的に指定される場合、そのフィールドは固定長を有すると言われ、固定長は、1バイト、2バイト、4バイト、8バイト、又は16バイトとすることができる。一部の命令では、より長いフィールドが暗黙的に指定されることもある。ストレージ・オペランド・フィールドの長さが暗黙的に指定されず明示的に記述される場合は、そのフィールドは可変長を有すると言われる。可変長オペランドは、1バイトのインクリメントにより変化し得る。情報がストレージ内に置かれるとき、ストレージへの物理パスの幅が格納されるフィールドの長さを上回り得るが、指定されたフィールド内に含まれるバイト位置の内容のみが置き換えられる。
【0052】
特定の情報単位は、ストレージ内の整数境界上になければならない。そのストレージ・アドレスがバイトでの単位での長さの倍数であるとき、境界は、情報単位に関して整数のものであると言われる。整数境界上にある2バイト、4バイト、8バイト、及び16バイトのフィールドには、特別な名称が与えられる。ハーフワード(halfword)は、2バイト境界上にある2個の連続したバイトのグループであり、これは、命令の基本的な構成要素である。ワード(word)は、4バイト境界上にある4個の連続したバイトのグループである。ダブルワード(doubleword)は、8バイト境界上にある8個の連続したバイトのグループである。クワドワード(quadword)は、16バイト境界上にある16個の連続したバイトのグループである。ストレージ・アドレスが、ハーフワード、ワード、ダブルワード、及びクワドワードを示す場合、そのアドレスの2進表現は、それぞれ、右端の1個、2個、3個、又は4個のビットが0になる。命令は、2バイトの整数境界上になければならない。大部分の命令のストレージ・オペランドは、境界合わせ(boundary alignment)要件をもたない。
【0053】
命令及びデータ・オペランドに対して別個のキャッシュを実装するモデルにおいては、ストアが、後にフェッチされる命令を変更するかどうかに関係なく、後に命令をフェッチするキャッシュ・ライン内にプログラムが格納する場合には、著しい遅延が生じることがある。
【0054】
命令:
典型的には、CPUの動作は、ストレージ内の命令により制御され、これらの命令は、ストレージ・アドレスの昇順に従って左から右へ一度に1つずつ順に実行される。この順次操作は、分岐、LOAD PSW、割り込み、SIGNAL PROCESSORの指令、又は手作業の介入によって変更され得る。
【0055】
命令は、2つの主要部分:即ち、
・実行される動作を指定するオペレーション・コード(オペコード)
・随意的に、関与するオペランドの指定、
を含むことが好ましい。
【0056】
z/Architectureの命令形式が、図9−図14に示される。命令は、単にオペコード501を提供することができ、或いは、オペコードと、即値オペランド又はレジスタ若しくはメモリ内のオペランドを探し出すためのレジスタ指定子を含む種々のフィールドとを提供することもできる。オペコードは、1つ又は複数の特定の汎用レジスタ(GPR)のような暗黙的リソース(オペランド等)が使用されることをハードウェアに指示することができる。オペランドは、3つのクラス、即ち、レジスタ内に入れられるオペランド、即値オペランド、及びストレージ内のオペランドにグループ化することができる。オペランドは、明示的に指定される場合又は暗黙的に指定される場合がある。レジスタ・オペランドは、汎用レジスタ、浮動小数点レジスタ、アクセス・レジスタ、又は制御レジスタ内に含めることができ、レジスタのタイプは、オペコードにより識別される。オペランドを含むレジスタは、命令の中のRフィールドと呼ばれる4ビット・フィールド内のレジスタを識別することによって指定される。命令によっては、オペランドは、暗黙的に指定されたレジスタに含められ、このレジスタは、オペコードにより暗黙的に指定される。即値オペランドは、命令の中に含まれるものであり、即値オペランドを含む8ビット、16ビット、又は32ビットのフィールドを、Iフィールドと呼ぶ。ストレージ内のオペランドの長さは、暗黙的に指定されるか、ビット・マスクによって指定されるか、命令内のLフィールドと呼ばれる4ビット又は8ビットの長さ指定により指定されるか、又は汎用レジスタの内容により指定され得る。ストレージ内のオペランドのアドレスは、汎用レジスタの内容をアドレスの一部として使用する形式により指定される。これにより、以下の:
1.簡略表記法を使用して完全なアドレスを指定する、
2.汎用レジスタをオペランドとして用いる命令を使用して、アドレス操作を行う、
3.命令ストリームを変更することなく、プログラム手段によりアドレスを変更する、
4.他のプログラムから受け取ったアドレスを直接使用して、データ域の記憶位置に関係なく操作を行う、
ことが可能になる。
【0057】
ストレージを参照するために使用されるアドレスは、命令のRフィールドが指すレジスタに含まれているか、又は、それぞれ、命令の中でBフィールド、Xフィールド、及びDフィールドにより指定されている基底アドレス、指標、及び変位から計算される。CPUがアクセス・レジスタ・モードにあるとき、Bフィールド又はRフィールドは、アドレスを指定するために使用されるのに加えて、アクセス・レジスタを指定することもできる。命令の実行を記述するために、オペランドは、第1オペランド及び第2オペランド、そして場合によっては第3オペランド及び第4オペランドとして指定されることが好ましい。一般に、1つの命令の実行には2つのオペランドが関与し、実行結果は第1オペランドと置き換わる。
【0058】
命令の長さは、1個、2個、又は3個のハーフワードとし、ストレージ内でハーフワード境界上に配置する必要がある。命令形式を示す図9−図14を参照すると、各々の命令は、25個の基本形式:即ち、E501、I502、RI503、504、RIE505、551、552、553、554、RIL506、507、RIS555、RR510、RRE511、RRF512、513、514、RRS、RS516、517、RSI520、RSL521、RSY522、523、RX524、RXE525、RXF526、RXY527、S530、SI531、SIL556、SIY532、SS533、534、535、536、537、SSE541、及びSSF542のいずれかの形をとり、RRFには3つ、RI、RIL、RS及びRSYには2つ、RIE及びSSには5つの変形がある。
【0059】
形式の名前は、大まかに言うと、その操作に関与するオペランドのクラス、及びフィールドについての何らかの詳細を示す。即ち:
・RISは、レジスタ対即値操作及びストレージ操作を示す。
・RRSは、レジスタ間操作及びストレージ操作を示す。
・SILは、16ビットの即値フィールドを有するストレージ対即値操作を示す。
【0060】
I、RR、RS、RSI、RX、SI、及びSS形式では、命令の最初の1バイトが、オペコードを含む。E、RRE、RRF、S、SIL、及びSSE形式では、S形式の一部の形式では最初の1バイト内にオペコードがあることを除いては、命令の最初の2バイトがオペコードを含む。RI及びRIL形式では、命令の最初の1バイト及びビット位置12−15内にオペコードがある。RIE、RIS、RRS、RSL、RSY、RXE、RXF、RXY、及びSIY形式では、命令の最初の1バイト及び第6バイト内にオペコードがある。オペコードの最初又は唯一のバイトの最初の2ビットは、以下のように、命令の長さと形式を指定する。
【0061】
RR、RRE、RRF、RRR、RX、RXE、RXF、RXY、RS、RSY、RSI、RI、RIE、及びRIL形式では、R1フィールドが示すレジスタの内容が、第1オペランドと呼ばれる。第1オペランドを含むレジスタは、「第1オペランド位置」と呼ばれ、「レジスタR1」と呼ばれることもある。RR、RRE、RRF、及びRRR形式では、R2フィールドは、第2オペランドを含むレジスタを示し、かつ、R1と同じレジスタを示すこともある。RRF、RXF、RS、RSY、RSI、及びRIE形式では、R3フィールドが使用されるかどうかは、命令によって決まる。RS及びRSY形式では、R3フィールドは、代わりに、マスクを指定するM3フィールドである場合もある。Rフィールドは、一般命令では汎用レジスタ又はアクセス・レジスタを指し、制御命令では汎用レジスタを指し、浮動小数点命令では浮動小数点レジスタ又は汎用レジスタを指す。汎用レジスタ及び制御レジスタについては、レジスタ・オペランドは、命令に応じて、64ビット・レジスタのビット位置32−63にあるか、又はレジスタ全体を占める。
【0062】
I形式では、8ビットの即値データ・フィールド、即ち命令のIフィールドの内容が、直接オペランドとして使用される。SI形式では、8ビットの即値データ・フィールド、即ち命令のI2フィールドの内容が、直接第2オペランドとして使用される。B1フィールド及びD1フィールドが、第1オペランドを指定し、その長さは1バイトである。SIY形式では、D1フィールドの代わりにDH1フィールド及びDL1フィールドが用いられることを除いて、操作は同じである。命令ADD HALFWORD IMMEDIATE、COMPARE HALFWORD IMMEDIATE、LOAD HALFWORD IMMEDIATE、及びMULTIPLY HALFWORD IMMEDIATEのRI形式では、命令の16ビットのI2フィールドの内容が、直接符号付き2進整数として使用され、R1フィールドは第1オペランドを指定し、その長さは、命令に応じて、32ビット又は64ビットである。命令TEST UNDER MASK(TMHH、TMHL、TMLH、TMLL)については、I2フィールドの内容はマスクとして使用され、R1フィールドは、第1オペランドを指定し、その長さは64ビットである。
【0063】
命令INSERT IMMEDIATE、AND IMMEDIATE、OR IMMEDIATE、及びLOAD LOGICAL IMMEDIATEについては、I2フィールドの内容が、符号なし2進整数又は論理値として用いられ、R1フィールドは、第1オペランドを指定し、その長さは64ビットである。RI及びRSI形式の相対・分岐命令の場合は、16ビットのI2フィールドの内容が、ハーフワードの数を示す符号付き2進整数として使用される。この数値を分岐命令のアドレスに加えたものが、分岐アドレスを示す。RIL形式の相対・分岐命令の場合、I2フィールドは32ビットであり、同じように使用される。
【0064】
RI及びRSI形式の相対・分岐命令の場合は、16ビットのI2フィールドの内容が、ハーフワードの数を示す符号付き2進整数として使用される。この数値を分岐命令のアドレスに加えたものが、分岐アドレスを示す。RIL形式の相対・分岐命令の場合、I2フィールドは32ビットであり、同じように使用される。RIE形式の命令COMPARE IMMEDIATE AND BRANCH RELATIVE及びCOMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVEの場合は、8ビットのI2フィールドの内容が、直接第2オペランドとして使用される。RIE形式の命令COMPARE IMMEDIATE AND BRANCH、COMPARE IMMEDIATE AND TRAP、COMPARE LOGICAL IMMEDIATE AND BRANCH、及びCOMPARE LOGICAL IMMEDIATE AND TRAPの場合は、16ビットのI2フィールドの内容が、直接第2オペランドとして用いられる。RIE形式の命令COMPARE AND BRANCH RELATIVE、COMPARE IMMEDIATE AND BRANCH RELATIVE、COMPARE LOGICAL AND BRANCH RELATIVE、及びCOMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVEの場合は、16ビットのI4フィールドの内容が、ハーフワードの数を示す符号付き2進整数として使用され、これが命令のアドレスに加算されて分岐アドレスを形成する。
【0065】
RIL形式の命令ADD IMMEDIATE、ADD LOGICAL IMMEDIATE、ADD LOGICAL WITH SIGNED IMMEDIATE、COMPARE IMMEDIATE、COMPARE LOGICAL IMMEDIATE、LOAD IMMEDIATE、及びMULTIPLY SINGLE IMMEDIATEの場合は、32ビットのI2フィールドの内容が、直接第2オペランドとして用いられる。
【0066】
RIS形式の命令の場合は、8ビットのI2フィールドの内容が、直接第2オペランドとして使用される。SIL形式では、16ビットのI2フィールドの内容が、直接第2オペランドとして使用される。以下に説明されるように、B1及びD1フィールドが、第1オペランドを指定する。
【0067】
RSL、SI、SIL、SSE、及び殆どのSS形式では、B1フィールドが示す汎用レジスタの内容がD1フィールドの内容に加えられ、第1オペランド・アドレスを形成する。RS、RSY、S、SIY、SS、及びSSE形式では、B2フィールドが示す汎用レジスタの内容がD2フィールド又はDH2及びDL2フィールドの内容に加えられ、第2オペランド・アドレスを形成する。RX、RXE、RXF、及びRXY形式では、X2及びB2フィールドが示す汎用レジスタの内容がD2フィールド又はDH2及びDL2フィールドの内容に加えられ、第2オペランド・アドレスを形成する。RIS及びRRS形式並びに1つのSS形式では、B4フィールドが示す汎用レジスタの内容がD4フィールドの内容に加えられ、第4オペランド・アドレスを形成する。
【0068】
8ビットの長さのフィールドを1つだけ有するSS形式では、命令AND(NC)、EXCLUSIVE OR(XC)、MOVE(MVC)、MOVE NUMERICS、MOVE ZONES、及びOR(OC)において、Lは、第1オペランド・アドレスが示すバイトの右側に追加するオペランド・バイトの数を指定する。従って、第1オペランドのバイト長は、Lの長さコード0−255に対応して、1−256になる。格納結果は、第1オペランドと置き換わり、アドレスと長さで指定されるフィールドの外部に格納されることは決してない。この形式では、第2オペランドは、第1オペランドと同じ長さを有する。EDIT、EDIT AND MARK、PACK ASCII、PACK UNICODE、TRANSLATE、TRANSLATE AND TEST、UNPACK ASCII、及びUNPACK UNICODEに適用される、前述の定義の変形がある。
【0069】
2つの長さフィールドを有するSS形式及びRSL形式では、L1は、第1オペランド・アドレスが示すバイトの右側に追加するオペランド・バイトの数を指定する。従って、第1オペランドのバイト長は、L1の長さコード0−15に対応して、1−16になる。同様に、L2は、第2オペランド・アドレスが示す記憶位置の右側に追加するオペランド・バイトの数を指定する。結果は第1オペランドと置き換わり、アドレスと長さで指定されるフィールドの外部に格納されることは決してない。第1オペランドが第2オペランドより長い場合は、第2オペランドは、第1オペランドの長さに等しくなるまで左方向に拡張され、その拡張部分には0が入る。この拡張によって、ストレージ内の第2オペランドが変更されることはない。MOVE TO PRIMARY、MOVE TO SECONDARY、及びMOVE WITH KEY命令により使用される、2つのRフィールドを有するSS形式では、R1フィールドが示す汎用レジスタの内容は、32ビットの符号なしの値であり、これは真の長さと呼ばれる。オペランドの長さは、どちらも、有効長と呼ばれる長さである。有効長は、真の長さ又は256の、どちらか小さい方の長さである。命令では、条件コードを設定し、真の長さで指定された総バイト数を移動するためのループをプログラミングしやすくする。LOAD MULTIPLE DISJOINT命令についての様々なレジスタ及び2つのストレージ・オペランドを指定するため、及び、PERFORM LOCKED OPERATION命令についての1つ又は2つのレジスタ及び1つ又は2つのストレージ・オペランドを指定するためにも、2つのRフィールドを有するSS形式が使用される。
【0070】
B1、B2、X2、又はB4フィールドのいずれかが0である場合は、それに対応するアドレス・コンポーネントが存在しないことを示す。存在しないコンポーネントについては、汎用レジスタ0の内容に関係なく、中間合計値を形成する際に0が使用される。変位が0であるということに、特別な意味はない。
【0071】
現行PSWのビット31及び32は、アドレッシング・モード・ビットである。ビット31は拡張アドレッシング・モード・ビットであり、ビット32は基本アドレッシング・モード・ビットである。これらのビットは、アドレス生成により生成される実効アドレスのサイズを制御する。現行PSWのビット31及び32が両方とも0のときは、CPUは24ビット・アドレッシング・モードになっており、24ビットの命令実効アドレス及びオペランド実効アドレスが生成される。現行PSWのビット31が0であり、ビット32が1のときは、CPUは31ビット・アドレッシング・モードになっており、31ビットの命令実効アドレス及びオペランド実効アドレスが生成される。現行PSWのビット31及び32が両方とも1のときは、CPUは64ビット・アドレッシング・モードになっており、64ビットの命令実効アドレス及びオペランド実効アドレスが生成される。CPUが命令を実行するときには、命令及びオペランドのアドレスの生成が必要とされる。
【0072】
現行PSWが示す記憶位置から命令がフェッチされると、命令アドレスがその命令に含まれるバイト数だけ増加され、命令が実行される。次いで、次の順番の命令をフェッチするために新しい命令のアドレス値を使用して、同じステップが繰り返される。24ビット・アドレッシング・モードでは、命令アドレスは循環し、命令アドレス224−2の位置のハーフワードの次には、命令アドレス0の位置のハーフワードが続く。従って、24ビット・アドレッシング・モードでは、命令アドレスの更新の結果としてPSWビット位置104からの繰り上がりが生じる場合、その繰り上がりは失われる。31ビット又は64ビットのアドレッシング・モードでは、命令アドレスは同様に循環し、それぞれ、命令アドレス231−2の位置又は264−2の位置にあるハーフワードの次には、命令アドレス0の位置にあるハーフワードが続く。それぞれPSWビット位置97又は64からの繰り上がりは失われる。
【0073】
ストレージを参照するオペランド・アドレスは、中間値から導き出され、中間値は、命令のRフィールドで指定されているレジスタに含まれるか、又は、基底アドレス、指標、及び変位の3つの2進数の和として求められる。基底アドレス(B)は、命令内のBフィールドと呼ばれる4ビット・フィールドにプログラムで指定された汎用レジスタに含まれている、64ビットの数値である。基底アドレスは、各々のプログラム及びデータ域を個別にアドレス指定するための手段として使用することができる。基底アドレスは、配列型の計算では配列の位置を示し、レコード型の処理ではレコードを識別することができる。基底アドレスを使用して、ストレージ全体のアドレス指定が行われる。基底アドレスはまた、指標付けにも使用できる。
【0074】
指標(X)は、命令内のXフィールドと呼ばれる4ビット・フィールドにプログラムで指定された汎用レジスタに含まれている、64ビットの数値である。指標は、RX、RXE、及びRXY形式の命令により指定されたアドレスの中にのみ含まれている。RX−、RXE−、RXF−、及びRXY−形式の命令では、二重の指標付けが可能である、即ち、指標を使用して、配列の中の要素のアドレスを与えることができる。
【0075】
変位(D)は、命令内のDフィールドと呼ばれるフィールドに含まれている、12ビット又は20ビットの数値である。12ビット変位は符号なしであり、基底アドレスが指定する記憶位置を超えた最大4,095バイトまでの相対アドレッシングを提供する。20ビットの変位は符号付きであり、基底アドレスの位置を超えた最大524,287バイトまで、又はその前の最大524,288バイトまでの相対アドレス指定を提供する。配列型の計算では、変位を使用して、1つの要素と関連した多数の項目のうちの1つを指定することができる。レコードの処理では、変位を使用して、レコード内の項目を識別することができる。12ビットの変位は、特定の形式の命令のビット位置20−31にある。幾つかの形式の命令では、第2の12ビットの変位も命令のビット位置36−47にある。
【0076】
20ビットの変位は、RSY、RXY、又はSIY形式の命令の中だけにある。これらの命令において、Dフィールドは、ビット位置20−31のDL(低)フィールドと、ビット位置32−39のDH(高)フィールドとから成る。長変位ファシリティがインストールされた場合、変位の数値は、DLフィールドの内容の左にDHフィールドの内容を追加することにより形成される。長変位ファシリティがインストールされていない場合、変位の数値は、DLフィールドの内容の左に8つの0ビットを追加することにより形成され、DHフィールドの内容は無視される。
【0077】
中間合計値を形成する際、基底アドレス及び指標は、64ビットの2進整数として扱われる。12ビットの変位は、12ビットの符号なし2進整数として扱われ、左側に52個の0ビットが追加される。20ビットの変位は、20ビットの符号付き2進整数として扱われ、左側に符号ビットと等しいビットが44個追加される。この3つは、64ビット2進整数として加算され、オーバーフローは無視される。合計値は常に64ビットの長さであり、生成アドレスを形成するための中間値として用いられる。中間値のビットには、0−63の番号が付けられる。B1、B2、X2、又はB4フィールドのいずれかが0である場合、それに対応するアドレス・コンポーネントが存在しないことを示す。存在しないコンポーネントについては、汎用レジスタ0の内容に関係なく、中間合計値を形成する際に0が使用される。変位が0であるということに、特別な意味はない。
【0078】
Rフィールドが示す汎用レジスタの内容を使用してストレージ内のオペランドをアドレス指定することが命令の説明により指定されている場合は、そのレジスタの内容が64ビットの中間値として使用される。
【0079】
1つの命令で、アドレス計算及びオペランド位置の両方に同じ汎用レジスタを指定することができる。アドレス計算は、もしあれば、操作によりレジスタが変更される前に完了する。個々の命令定義の中で特に断りがない限り、生成されるオペランド・アドレスは、ストレージ内でのオペランドの左端のバイトを指す。
【0080】
生成されるオペランド・アドレスは常に64ビットの長さであり、ビットには0−63の番号が付けられている。生成アドレスが中間値から取得される方法は、現行のアドレッシング・モードによって決まる。24ビット・アドレッシング・モードでは、中間値のビット0−39は無視され、生成アドレスのビット0−39は、0に強制的に設定され、中間値のビット40−63が、生成アドレスのビット40−63になる。31ビット・アドレッシング・モードでは、中間値のビット0−32は無視され、生成アドレスのビット0−32は0に強制的に設定され、中間値のビット33−63が、生成アドレスのビット33−63になる。64ビット・アドレッシング・モードでは、中間値のビット0−63が、生成アドレスのビット0−63になる。指標レジスタ及び基底アドレス・レジスタの中では、負の値を使用することができる。31ビット・アドレッシング・モードでは、これらの値のビット0−32は無視され、24ビット・アドレッシング・モードでは、これらの値のビット0−39は無視される。
【0081】
分岐命令の場合、分岐が実行されたときに次に実行される命令のアドレスを、分岐アドレスと呼ぶ。命令形式は、分岐命令に応じて、RR、RRE、RX、RXY、RS、RSY、RSI、RI、RIE、又はRILとすることができる。分岐アドレスは、RS、RSY、RX、及びRXY形式では、基底アドレスと変位により指定され、RX及びRXY形式では、指標により指定される。これらの形式において、中間値の生成は、オペランド・アドレスの中間値の生成と同じ規則に従って行われる。RR及びRRE形式では、R2フィールドが示す汎用レジスタの内容が、分岐アドレス形成の元となる中間値として使用される。汎用レジスタ0を、分岐アドレスを含むものとして指定することはできない。R2フィールドの値が0である場合は、その命令は分岐なしで実行される。
【0082】
相対−分岐命令は、RSI、RI、RIE、及びRIL形式のものである。相対−分岐命令のRSI、RI、及びRIS形式では、I2フィールドの内容は、ハーフワードの数を示す16ビットの符号付き2進整数として扱われる。RIL形式では、I2フィールドの内容は、ハーフワードの数を示す32ビットの符号付き2進整数として扱われる。分岐アドレスは、相対−分岐命令のアドレスに、I2フィールドに指定されているハーフワードの数を加えたものである。
【0083】
RSI、RI、RIE、又はRIL形式の相対分岐命令の場合の64ビットの中間値は、2つの加数の和であり、ビット位置0からのオーバーフローは無視される。RSI、RI、又はRIE形式では、第1の加数は、COMPARE AND BRANCH RELATIVE、COMPARE IMMEDIATE AMD BRANCH RELATIVE、COMPARE LOGICAL AND BRANCH RELATIVE、及びCOMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVEの場合に、I4フィールドの内容にI2フィールドについて上述したようにビットが追加されているという点を除いて、I2フィールドの内容の右側に1個の0ビットを付加し、左側にその内容の符号ビットと等しいビットを47個付加したものである。RIL形式では、第1の加数は、I2フィールドの内容の右側に1個の0ビットを付加し、左側にその内容の符号ビットと等しいビットを31個付加したものである。第2の加数は、全ての形式において、分岐命令の64ビット・アドレスである。分岐命令のアドレスは、次の順次命令をアドレス指定するためにアドレスが更新される前のPSWの命令アドレスであるか、又は、EXECUTE命令が使用される場合は、EXECUTE命令のターゲットのアドレスである。EXECUTEを24ビット又は31ビット・アドレッシング・モードで使用している場合、分岐命令のアドレスは、それぞれ、ターゲット・アドレスの左側に40個又は33個の0を付加したものである。
【0084】
分岐アドレスは常に64ビットの長さであり、ビットには0−63の番号が付けられる。分岐アドレスは、現行PSWのビット64−127と置き換わる。分岐アドレスを中間値から取得する方法は、アドレッシング・モードによって決まる。アドレッシング・モードを変更する分岐命令の場合は、新しいアドレッシング・モードが使用される。24ビット・アドレッシング・モードでは、中間値のビット0−39は無視され、分岐アドレスのビット0−39は0にされ、中間値のビット40−63が、分岐アドレスのビット40−63になる。31ビット・アドレッシング・モードでは、中間値のビット0−32は無視され、分岐アドレスのビット0−32は0にされ、中間値のビット33−63が、分岐アドレスのビット33−63になる。64ビット・アドレッシング・モードでは、中間値のビット0−63が分岐アドレスのビット0−63になる。
【0085】
幾つかの分岐命令では、指定された特定の条件を満たしているかどうかによって、分岐するかどうかが決まる。条件が満たされていない場合は、分岐は行われず、通常の順序で命令が続行され、分岐アドレスは使用されない。分岐が行われる場合は、分岐アドレスのビット0−63が現行PSWのビット64−127と置き換わる。分岐アドレスは、分岐操作の一部としてストレージにアクセスするためには使用されない。分岐アドレスが奇数であることが原因で起きる指定例外、及び、分岐位置にある命令のフェッチが原因で起こるアクセス例外は、分岐操作の一部として認識されるのではなく、代わりに、分岐位置にある命令の実行に関連した例外として認識される。
【0086】
BRANCH AND SAVEのような分岐命令で、分岐アドレス計算及びオペランド位置の両方に同じ汎用レジスタを指定することができる。分岐アドレス計算が完了してから、操作の残りの部分が実行される。
【0087】
第4章「制御」で説明したプログラム状況ワード(PSW)には、プログラムの適正な実行のために必要な情報が含まれている。PSWは、命令の順序を制御し、現在実行中のプログラムとの関連におけるCPUの状態を保持及び提示するために使用される。アクティブなPSW、即ち制御を行っているPSWを、現行PSW(current PSW)と呼ぶ。分岐命令は、意思決定、ループ制御、及びサブルーチン・リンケージの機能を実行する。分岐命令は、現行PSWに新しい命令アドレスを導入することにより、命令の順序に影響を与える。16ビットのI2フィールドを有する相対−分岐命令では、基底レジスタを使用せずに、分岐命令の位置を基準として、プラス64K−2バイトまで、又はマイナス64Kバイトまでのオフセット位置に分岐することができる。32ビットのI2フィールドを有する相対−分岐命令では、基底レジスタを使用せずに、分岐命令の位置を基準として、プラス4G−2バイトまで、又はマイナス4Gバイトまでのオフセット位置に分岐することができる。
【0088】
意思決定のためのファシリティは、BRANCH ON CONDITION、BRANCH RELATIVE ON CONDITION、及びBRANCH RELATIVE ON CONDITION LONG命令により与えられる。これらの命令は、殆どの算術操作、論理操作、及びI/O操作の結果を反映する条件コードを検査する。条件コードは、2ビットから成り、0、1、2、及び3の4通りの条件コード設定が可能である。
【0089】
各設定の具体的な意味は、条件コードを設定する操作によって決まる。例えば、条件コードは、0である、0以外、第1オペランドが高い、等しい、オーバーフロー、及びサブチャネル使用中などの条件を反映する。一旦設定されると、条件コードは、別の条件コードを設定させる命令により変更されるまで、変わらないままである。
【0090】
BRANCH ON CONDITION、BRANCH RELATIVE ON CONDITION、及びBRANCH RELATIVE ON CONDITION LONGを使用し、アドレスの算術操作及びカウント操作の結果をテストすることにより、ループ制御を行うことができる。特に使用頻度の高い算術とテストの組み合わせに使用する命令として、BRANCH ON COUNT、BRANCH ON INDEX HIGH、及びBRANCH ON INDEX LOW OR EQUALが提供され、これらの命令と同等の相対・分岐も提供される。これらの分岐は、これらのタスク用に特化されているので、それらの性能が向上する。
【0091】
アドレッシング・モードの変更が必要ない場合のサブルーチン・リンケージを行う命令には、BRANCH AND LINK及びBRANCH AND SAVE命令がある。(BRANCH AND SAVEに関するこの説明は、BRANCH RELATIVE AND SAVE及びBRANCH RELATIVE AND SAVE LONGにも適用される。)これらの命令はどちらも、新しい命令アドレスを導入するだけでなく、戻りアドレスとそれに関連した情報を保存することもできる。分岐命令をターゲットとするEXECUTE命令の場合は、EXECUTEの後に続く命令のアドレスであるが、戻りアドレスは、ストレージ内の分岐命令の後に続く命令アドレスである。
【0092】
BRANCH AND LINK及びBRANCH AND SAVEのどちらの命令も、R1フィールドを有する。これらの命令は、それぞれ命令に応じたフィールドを使用して分岐アドレスを形成する。以下のように命令の働きを要約する。:
・24ビット・アドレッシング・モードでは、どちらの命令も、汎用レジスタR1のビット位置40−63に戻りアドレスを入れ、そのレジスタのビット0−31は変わらないままである。BRANCH AND LINKは、汎用レジスタR1のビット位置32−39に、命令長コードと、現行PSWからの条件コード及びプログラム・マスクを入れる。BRANCH AND SAVEは、これらのビット位置に0を入れる。
・31ビット・アドレッシング・モードでは、どちらの命令も、汎用レジスタR1のビット位置33−63に戻りアドレスを入れ、ビット位置32に1を入れ、レジスタのビット0−31は変わらないままである。
・64ビット・アドレッシング・モードでは、どちらの命令も、汎用レジスタR1のビット位置0−63に戻りアドレスを入れる。
・どのアドレッシング・モードにおいても、どちらの命令も現行アドレッシング・モードの制御下で分岐アドレスを生成する。これらの命令は、分岐アドレスのビット0−63をPSWのビット位置64−127に入れる。RR形式では、命令のR2フィールドが0であるときは、どちらの命令も分岐を行わない。
【0093】
24ビット又は31ビットのアドレッシング・モードでは、BRANCH AND SAVEは、基本アドレッシング・モード・ビット、即ちPSWのビット32を、汎用レジスタR1のビット位置32に入れることが分かる。BRANCH AND LINKは、31ビット・アドレッシング・モードの場合に同じことを行う。命令BRANCH AND SAVE AND SET MODE及びBRANCH AND SET MODEは、リンケージ中にアドレッシング・モードの変更が必要な場合に使用するためのものである。これらの命令には、R1フィールドとR2フィールドとがある。以下にこれらの命令の働きを要約する。:
・BRANCH AND SAVE AND SET MODEは、汎用レジスタR1の内容をBRANCH AND SAVEの場合と同じ設定にする。さらに、この命令は、拡張アドレッシング・モード・ビット、即ちPSWのビット31を、レジスタのビット位置63に入れる。
・BRANCH AND SET MODEは、R1が0以外のときは、以下のことを行う。24ビット又は31ビット・モードでは、この命令は、PSWのビット32を汎用レジスタR1のビット位置32に入れ、レジスタのビット0−31及び33−63は変更しない。このレジスタが命令アドレスを含む場合、レジスタのビット63は0でなければならないという点に留意されたい。64ビット・モードでは、この命令は、PSWのビット31(1つ)を汎用レジスタR1のビット位置63に入れ、レジスタのビット0−62は変更されないままである。
・R2が0以外のときは、どちらの命令も、以下のように、アドレッシング・モードを設定し、分岐を行う。汎用レジスタR2のビット63が、PSWのビット位置31に入れられる。ビット63が0の場合は、レジスタのビット32がPSWのビット位置32に入れられる。ビット63が1の場合は、PSWのビット32は1に設定される。次いで、新しいアドレッシング・モードの制御下で、レジスタの内容から分岐アドレスが生成されるが、レジスタのビット63は0と見なされる。命令は、分岐アドレスのビット0−63をPSWのビット位置64−127に入れる。汎用レジスタR2のビット63は変更されないままなので、呼び出し先プログラムに入る時点で1になっていることがある。R2がR1と同じである場合は、指定された汎用レジスタ内の結果は、R1レジスタについて指定されている結果と同じになる。
【0094】
割り込み(コンテキスト・スイッチ):
割り込み機構により、CPUが、構成の外部、構成の内部、又はCPU自体の中にある条件の結果として、状態を変化させることが可能になる。優先順位の高い条件に迅速に応答し、条件のタイプを即時認識するのを可能にするために、割り込み条件は、外部割り込み、入力/出力割り込み、マシン・チェック割り込み、プログラム割り込み、再始動割り込み、及び監視プログラム呼び出し割り込みの6つのクラスにグループ化される。
【0095】
割り込みは、現行PSWを旧PSWとして格納し、割り込みの原因を示す情報を格納し、新しいPSWをフェッチすることから成る。処理は、新しいPSWの指定に従って再開する。通常、割り込みが発生したときに格納される旧PSWには、割り込みが発生しなかったとすれば次に実行されるはずだった命令のアドレスが含まれており、従って、中断されたプログラムの再開が可能である。プログラム割り込み及び監視プログラム呼び出し割り込みの場合、格納された情報は、最後に実行される命令の長さを識別するコードも含んでおり、従って、プログラムが割り込みの原因に対応することが可能である。通常の応答が割り込みを発生させた命令の再実行である或るプログラム条件の場合は、命令アドレスは、最後に実行された命令を直接識別する。
【0096】
再始動割り込みを除き、CPUが作動状態にあるときにだけ、割り込みが発生し得る。再始動割り込みは、CPUが停止状態又は作動状態にあるときにも発生し得る。
【0097】
いずれのアクセス例外も、その例外が関連している命令の実行の一部として発生する。CPUが、使用可能でない記憶位置からプリフェッチしようと試みた場合、或いは他の何らかのアクセス例外条件を検出したが、分岐命令又は割り込みが命令シーケンスを変更した結果、当該命令が実行されない場合は、アクセス例外は発生しない。どの命令でも、命令フェッチが原因でアクセス例外が発生することがある。さらに、ストレージ内のオペランドへのアクセスが原因で、命令実行に関連したアクセス例外が発生することがある。例外を発生させずに命令の第1ハーフワードをフェッチできないとき、命令のフェッチを原因とするアクセス例外が示される。命令の第1ハーフワードについてアクセス例外がないときは、命令の最初の2ビットに指定されている命令長に従って、付加的なハーフワードについてアクセス例外が示されることがあるが、命令の第2又は第3のハーフワードにアクセスせずに操作を実行できる場合は、その未使用部分についてアクセス例外が示されるかどうかは、予測不能である。命令フェッチに関するアクセス例外の指示は全ての命令について共通であるので、個々の命令の定義の中ではカバーされない。
【0098】
個々の命令の説明の中に特に明記されていない限り、オペランド位置へのアクセスに関連した例外には、以下の規則が適用される。フェッチ・タイプ・オペランドの場合は、アクセス例外が必ず示されるのは、操作の完了に必要なオペランド部分についてのみである。フェッチ・タイプのオペランドの中の、操作の完了に必要な部分については、アクセス例外が示されるかどうかは予測不能である。
【0099】
ストア・タイプのオペランドの場合は、オペランドのアクセス不能部分を使用せずに操作を完了できる場合であっても、オペランド全体についてアクセス例外が発生する。ストア・タイプのオペランドの値が予測不能として定義される状況では、アクセス例外が示されるかどうかは予測不能である。オペランド位置へのアクセスが原因でアクセス例外が発生するたびに、命令の説明の中のプログラム例外のリストに、「アクセス」という語が含められる。また、このエントリには、どのオペランドが例外の発生の原因となり得るか、及び、そのオペランド位置へのフェッチ・アクセス又はストア・アクセスのどちらで例外が発生するかも示される。アクセス例外は、オペランドの、個々の命令について定義されている部分についてのみ発生する。
【0100】
操作例外は、CPUが、無効なオペレーション・コードを有する命令を実行しようとした場合に発生する。そのオペレーション・コードは割り当てられていないものであるか、又は、そのオペレーション・コードを有する命令がCPUにインストールされていない可能性がある。操作は抑止される。命令長コードは、1、2、又は3である。操作例外は、16進数0001のプログラム割り込みコードにより示される(又は、同時にPERイベントも示される場合は、16進数0081)。
【0101】
一部のモデルでは、特殊機能又は特注機能の補助のため、又は、それらの一部として提供されている命令などのように、本明細書では説明されていない命令を提供することがある。従って、本明細書で説明されていないオペレーション・コードにより、必ずしも操作例外が発生するとは限らない。さらに、これらの命令により、操作モードがセットアップされたり、又は、後続の命令の実行に影響を及ぼすような変更がマシンに加えられたりすることもある。このような操作が生じるのを回避するために、本明細書で説明されていないオペレーション・コードを有する命令は、そのオペレーション・コードに関連した特定の機能が求められる場合に限り実行すべきである。
【0102】
指定例外(specificationexception)は、以下のいずれかが真であるときに発生する。
1.PSWの未割り当てのビット位置(即ち、ビット位置0、2−4、24−30、又は33−63のいずれか)に1が入れられる。これは、早期PSW指定例外として扱われる。
2.PSWのビット位置12に1が入れられる。これは、早期PSW指定例外として扱われる。
3.次のいずれかの理由により、PSWが無効である:
a.PSWのビット31が1であり、ビット32が0である。
b.PSWのビット31及び32が、24ビット・アドレッシング・モードを示す0であり、PSWのビット64−103が全て0ではない。
c.PSWのビット31が0であり、ビット32が、31ビット・アドレッシング・モードを示す1であり、PSWのビット64−96が全て0ではない。これは、早期PSW指定例外として扱われる。
4.PSWが奇数の命令アドレスを含む。
5.こうした整数境界指定を必要とする命令で、オペランド・アドレスが整数境界を示していない。
6.偶数番号のレジスタ指定を必要とする命令のRフィールドにより、奇数番号の汎用レジスタが指定されている。
7.拡張オペランドに、0、1、4、5、8、9、12、又は13以外の浮動小数点レジスタが指定されている。
8.10進数演算の乗数又は除数が、15桁の数字と符号を超えている。
9.10進数の乗算又は除算において、第1オペランド・フィールドの長さが、第2オペランド・フィールドの長さより短いか又はこれと等しい。
10.CIPHER MESSAGE、CIPHER MESSAGE WITH CHAINING、COMPUTE INTERMEDIATE MESSAGE DIGEST、COMPUTE LAST MESSAGE DIGEST、又はCOMPUTE MESSAGE AUTHENTICATION CODEの実行が試みられ、汎用レジスタ0のビット57−63における機能コードは、未割り当ての又はインストールされていない機能コードを含む。
11.CIPHER MESSAGE又はCIPHER MESSAGE WITH CHAININGの実行が試みられ、R1又はR2フィールドは、奇数番号のレジスタ又は汎用レジスタ0を指示する。
12.CIPHER MESSAGE、CIPHER MESSAGE WITH CHAINING、COMPUTE INTERMEDIATE MESSAGE DIGEST、又はCOMPUTE MESSAGE AUTHENTICATION CODEの実行が試みられ、第2オペランドの長さは、指定された関数のデータ・ブロックのサイズの倍数ではない。この指定例外条件は、クエリ関数に適用されない。
13.COMPARE AND FORM CODEWORDの実行が試みられ、汎用レジスタ1、2、及び3は最初に偶数値を含んでいない。
32.COMPARE AND SWAP AND STOREの実行が試みられ、かつ、次の条件のいずれかが存在する。:
・機能コードが未割り当ての値を指定する。
・格納特性が未割り当ての値を指定する。
・機能コードは0であり、第1オペランドはワード境界上に指定されない。
・機能コードは1であり、第1オペランドはダブルワード境界上に指定されない。
・第2オペランドは、格納値のサイズに対応する整数境界上に指定されない。
33.COMPARE LOGICAL LONG UNICODE又はMOVE LONG UNICODEの実行が試みられ、汎用レジスタR1+1又はR3+1のいずれの内容も、偶数のバイト数を指定しない。
34.COMPARE LOGICAL STRING、MOVE STRING、又はSEARCH STRINGの実行が試みられ、汎用レジスタ0のビット32−55が全て0ではない。
35.COMPRESSION CALLの実行が試みられ、汎用レジスタ0のビット48−51が、値0000及び0110−1111(2進数)のいずれかを有する。
36.COMPUTE INTERMEDIATE MESSAGE DIGEST、COMPUTE LAST MESSAGE DIGEST、又はCOMPUTE MESSAGE AUTHENTICATION CODEの実行が試みられ、次のいずれかが真である。:
・R2フィールドが、奇数番号のレジスタ又は汎用レジスタ0を指定する。
・汎用レジスタ0のビット56が0ではない。
37.CONVERT HFP TO BFP、CONVERT TO FIXED(BFP又はHFP)、又はLOAD FP INTEGER(BFP)の実行が試みられ、M3フィールドが有効な修飾子を指定していない。
38.DIVIDE TO INTEGERの実行が試みられ、M4フィールドが有効な修飾子を指定していない。
39.EXECUTEの実行が試みられ、ターゲット・アドレスが奇数である。
40.EXTRACT STACKED STATEの実行が試みられ、汎用レジスタR2のビット位置56−63のコードは、ASN−and−LX−reuseファシリティがインストールされていない場合に4より大きく、或いは、このファシリティがインストールされている場合には5より大きい。
41.FIND LEFTMOST ONEの実行が試みられ、R1フィールドが、奇数番号のレジスタを指定する。
42.INVALIDATE DAT TABLE ENTRYの実行が試みられ、汎用レジスタR2のビット44−51が全て0ではない。
43.LOAD FPCの実行が試みられ、FPCレジスタ内のサポートされていないビットに対応する第2オペランドの1つ又は複数のビットが1である。
44.LOAD PAGE−TABLE−ENTRY ADDRESSの実行が試みられ、命令のM4フィールドが、0000−0100(2進数)以外のいずれかの値を含む。
45.LOAD PSWの実行が試みられ、第2オペランド・アドレスにおけるダブルワードのビット12が0である。この例外が発生するかどうかは、モデルによって決まる。
46.MONITOR CALLの実行が試みられ、命令のビット位置8−11が0を含まない。
47.MOVE PAGEの実行が試みられ、汎用レジスタ0のビット位置48−51が0を含まないか、又は、レジスタのビット52と53が両方とも1である。
48.PACK ASCIIの実行が試みられ、L2フィールドが31より大きい。
49.PACK UNICODEの実行が試みられ、L2フィールドが63より大きいか、又は偶数である。
50.PERFORM FLOATING POINT OPERATIONの実行が試みられ、汎用レジスタ0のビット32が0であり、ビット33−63の1つ又は複数のフィールドが無効であるか、又はインストールされていない機能を指定する。
51.PERFORM LOCKED OPERATIONの実行が試みられ、次のいずれかが真である。:
・汎用レジスタ0のTビット、即ちビット55が0であり、レジスタのビット56−63の機能コードが無効である。
・汎用レジスタ0のビット32−54が全て0ではない。
・アクセス・レジスタ・モードにおいて、ALETを含むパラメータ・リストを使用させる機能コードについて、R3フィールドが0である。
52.PERFORM TIMING FACILITY FUNCTIONの実行が試みられ、次のいずれかが真である。:
・汎用レジスタ0のビット56が0ではない。
・汎用レジスタ0のビット57−63が、未割り当ての又はインストールされていない機能コードを指定する。
53.PROGRAM TRANSFER又はPROGRAM TRANSFER WITH INSTANCEの実行が試みられ、次の全てが真である。:
・PSWの拡張アドレッシング・モード・ビットが0である。
・命令のR2フィールドが指定する汎用レジスタ内の基本アドレッシング・モード・ビット、即ちビット32が0である。
・同じレジスタ内の命令アドレスのビット33−39が全て0ではない。
54.RESUME PROGRAMの実行が試みられ、次のいずれかが真である。:
・現行PSWに入れるために、第2オペランドのPSWフィールドのビット31、32、及び64−127は有効ではない。次のいずれかが真である場合、例外が発生する。:
−ビット31及び32の両方とも0であり、ビット63−103が全て0ではない。
−ビット31は0、ビット32は1であり、ビット64−96が全て0ではない。
−ビット31は1、ビット32が0である。
−ビット127が1である。
・パラメータ・リストのビット0−12が全て0ではない。
55.SEARCH STRING UNICODEの実行が試みられ、汎用レジスタ0のビット32−47が全て0ではない。
56.SET ADDRESS SPACE CONTROL、又はSET ADDRESS SPACE CONTROL FASTの実行が試みられ、第2オペランド・アドレスのビット52及び53が両方とも0ではない。
57.SET ADDRESSING MODE(SAM24)の実行が試みられ、PSW内の未更新の命令アドレスのビット0−39、PSWのビット64−103が、全て0ではない。
58.SET ADDRESSING MODE(SAM31)の実行が試みられ、PSW内の未更新の命令アドレスのビット0−32、PSWのビット64−96が、全て0ではない。
59.SET CLOCK PROGRAMMABLE FIELDの実行が試みられ、汎用レジスタ0のビット32−47が全て0ではない。
60.SET FPCの実行が試みられ、FPCレジスタ内のサポートされていないビットに対応する第1オペランドの1つ又は複数のビットが1である。
61.STORE SYSTEM INFORMATIONの実行が試みられ、汎用レジスタ0内の機能コードが有効であり、次のいずれかが真である。:
・汎用レジスタ0のビット36−55及び汎用レジスタ1のビット32−47が全て0ではない。
・第2オペランド・アドレスが、4Kバイト境界上に位置合わせされない。
62.TRANSLATE TWO TO ONE又はTRANSLATE TWO TO TWOの実行が試みられ、汎用レジスタR1+1における長さは偶数のバイトを指定していない。
63.UNPACK ASCIIの実行が試みられ、L1フィールドが31より大きい。
64.UNPACK UNICODEの実行が試みられ、L1フィールドが63より大きいか、又は偶数である。
65.UPDATE TREEの実行が試みられ、汎用レジスタ4及び5の最初の内容は、24ビット又は31ビット・アドレッシング・モードにおいて8の倍数ではないか、又は、64ビット・アドレッシング・モードにおいて16の倍数ではない。旧PSWにより識別される命令の実行は抑止される。しかしながら、早期PSW指定例外(原因1−3)の場合は、新PSWを導入する操作は完了するが、その直後に割り込みが発生する。命令長コード(ILC)は1、2、又は3であり、例外を引き起こした命令の長さを示すことが好ましい。命令アドレスが奇数(6〜33ページの原因4)の場合は、ILCが1、2、又は3のいずれになるかは予測不能である。早期PSW指定例外(原因1−3)のために例外が発生し、LOAD PSW、LOAD PSW EXTENDED、PROGRAM RETURN、又は割り込みによりその例外が導入された場合は、ILCは0である。例外がSET ADDRESSING MODE(SAM24、SAM31)により導入された場合は、ILCは1であり、或いは、SET ADDRESSING MODEがEXECUTEのターゲットであった場合、ILCは2である。例外が、SET SYSTEM MASK又はSTORE THEN OR SYSTEM MASKにより導入された場合、ILCは2である。
【0103】
プログラム割り込みは、プログラムの実行中に起きた例外及びイベントを報告するために使用される。プログラム割り込みにより、旧PSWが実記憶位置(real location)336−351に格納され、新PSWが実記憶位置464−479からフェッチされる。割り込み原因は、割り込みコードにより識別される。割り込みコードは、実記憶位置142−143に入れられ、命令長コードは実記憶位置141のバイトのビット位置5及び6に入れられ、そのビットの残りは0に設定され、実記憶位置140には0が格納される。原因によっては、割り込みの理由を識別する付加的な情報が実記憶位置144−183に格納される。PER−3ファシリティがインストールされている場合、プログラム割り込み動作の一部として、ブレーキング・イベント・アドレス・レジスタの内容が、実記憶位置272−279に入れられる。PERイベント及び暗号操作例外を除いて、割り込みコードの右端7個のビット位置に入れられたコード値が、割り込みの原因となった条件を示す。一度に1つの条件しか示すことはできない。割り込みコードのビット0−7は、0に設定される。PERイベントは、割り込みコードのビット8が1に設定されることにより示される。これが唯一の条件である場合は、ビット0−7及び9−15も0に設定される。PERイベントと同時に別のプログラム割り込み条件も示される場合、ビット8は1に設定され、他の条件と同様にビット0−7及び9−15が設定される。暗号操作例外は、割り込みコードの0119(16進数)で示されるか、又は、PERイベントも示される場合、0199(16進数)で示される。
【0104】
対応するマスク・ビットが存在する場合、そのマスク・ビットが1のときだけ、プログラム割り込み起こり可能性がある。PSW内のプログラム・マスクは4つの例外を制御し、FPCレジスタ内のIEEEマスクはIEEE例外を制御し、制御レジスタ0のビット33は、SET SYSTEM MASKが特殊操作例外を起こすかどうかを制御し、制御レジスタ8のビット48−63は、監視イベントが引き起こす割り込みを制御し、マスクの階層はPERイベントが引き起こす割り込みを制御する。いずれかの制御マスク・ビットが0であれば、条件は無視され、その条件は保留のまま残されることはない。
【0105】
プログラム割り込み用の新PSWにPSW形式エラーがあるか、又は、命令フェッチのプロセスにおいて例外が発生した場合、一連のプログラム割り込みが起きることがある。
【0106】
プログラム例外として示される条件の幾つかは、チャネル・サブシステムにより発生することもあり、その場合、例外はサブチャネル状況ワード又は拡張状況ワードで示される。
【0107】
データ例外が原因でプログラム割り込みが起きたときは、データ例外コード(DXC)が記憶位置147に格納され、記憶位置144−146には0が格納される。DXCは、種々のタイプのデータ例外条件を識別する。AFPレジスタ(付加的浮動小数点レジスタ)制御ビット、即ち、制御レジスタ0のビット45が1のとき、浮動小数点制御(FPC)レジスタのDXCフィールドにもDXCが入れられる。他のいずれのプログラム例外が報告されても、FPCレジスタ内のDXCフィールドは変更されないままである。DXCは、データ例外の具体的な原因を示す8ビットのコードである。
【0108】
DXC2及び3は、相互排他的であり、いずれの他のDXCよりも優先順位が高い。従って、例えば、DXC2(BFP命令)は、どのIEEE例外よりも優先され、DXC3(DFP命令)は、どのIEEE例外又はシミュレートされたIEEE例外よりも優先される。別の例として、DXC3(DFP命令)及びDXC1(AFPレジスタ)の両方についての条件が存在する場合には、DXC3が報告される。指定例外及びAFPレジスタ・データ例外の両方が該当する場合は、どちらが報告されるかは予測不能である。
【0109】
アドレッシング例外は、CPUが、構成内で使用可能になっていない主記憶位置を参照しようと試みた場合に発生する。主記憶位置が構成内で使用できないのは、その位置がインストールされていない場合、ストレージ・ユニットが構成内に存在しない場合、又はストレージ・ユニットの電源がオフである場合である。構成内で使用可能でない記憶位置を指定しているアドレスを、無効であると言う。命令のアドレスが無効な場合は、操作は抑止される。同様に、EXECUTEのターゲット命令のアドレスが無効な場合も、操作は抑止される。さらに、テーブル又はテーブル・エントリにアクセスする際にアドレッシング例外が発生した場合は、操作単位が抑止される。この規則が適用されるテーブル及びテーブル・エントリは、ディスパッチ可能単位制御テーブル、1次ASN第2テーブル・エントリ、並びにアクセス・リスト、領域第1テーブル、領域第2テーブル、領域第3テーブル、セグメント・テーブル、ページ・テーブル、リンケージ・テーブル、リンケージ第1テーブル、リンケージ第2テーブル、エントリ・テーブル、ASN第1テーブル、ASN第2テーブル、権限テーブル、リンケージ・スタック、及びトレース・テーブル内のエントリである。領域第1テーブル、領域第2テーブル、領域第3テーブル、セグメント・テーブル、及びページ・テーブルに対する参照についてアドレッシング例外が生じた場合は、動的アドレス変換の際の暗黙参照の場合も、LOAD PAGE−TABLE−ENTRY ADDRESS、LOAD REAL ADDRESS、STORE REAL ADDRESS、及びTEST PROTECTIONの実行と関連した参照の場合も、アドレッシング例外は抑止をもたらす。同様に、ディスパッチ可能単位制御テーブル、1次ASN第2テーブル・エントリ、アクセス・リスト、ASN第2テーブル、又は権限テーブルへのアクセスについてアドレッシング例外が生じた場合は、暗黙的なアクセス・レジスタ変換の場合も、又は、LOAD PAGE−TABLE−ENTRY ADDRESS、LOAD REAL ADDRESS、STORE REAL ADDRESS、TEST ACCESS、又はTEST PROTECTIONの一部として行われるアクセス・レジスタ変換の場合も、抑止がもたらされる。実行が抑止される一部の特定の命令を除いて、オペランド・アドレスの変換はできても、そのアドレスが使用不能の位置を示している場合は、操作は終了する。終了の場合は、変更されるのは結果フィールドだけである。この文脈における「結果フィールド」という用語は、条件コード、レジスタ、及びいずれかの記憶位置のうち、命令により変更されるものとして指定されている位置が含まれる。
【0110】
上記は、1つのコンピュータ・システムの実施形態の用語及び構造の理解に有用である。実施形態は、z/Architecture又はそこで提供される説明に制限されるものではない。実施形態は、ここでの教示を有する他のコンピュータ製造業者の他のコンピュータ・アーキテクチャに有利に適用することが可能である。
【0111】
図17を参照すると、コンピュータ・システムは、オペレーティング・システム(OS)701、及び2つ以上のアプリケーション・プログラム702、703を実行することができる。OSが、アプリケーションにより使用されるリソースを管理するのを可能にするために、コンテキスト・スイッチが用いられる。一例においては、OS701は、割り込みタイマーを設定し、該割り込みタイマーによって指定された期間だけアプリケーション・プログラムが実行されるのを可能にするように、コンテキスト・スイッチ動作を開始する704。コンテキスト・スイッチ動作は、実行すべき次のOS命令を指し示すOSのプログラム・カウンタを含む、OSの状態情報を保存する705。続いて、コンテキスト・スイッチ動作は、アプリケーション・プログラム#1 702の状態情報を取得し705、アプリケーション・プログラム#1 702が、アプリケーション・プログラムの取得した現行プログラム・カウンタにおいて、命令の実行を開始するのを可能にする706。割り込みタイマーが終了すると、コンテキスト・スイッチの動作を開始し704、コンピュータ・システムをOSに戻す。
【0112】
異なるプロセッサ・アーキテクチャは、汎用レジスタ(general purpose register)と呼ばれることが多い、制限された数の汎用レジスタ(general register、GR)を提供し、それらは、アーキテクチャ化された命令セットの命令により明示的に(及び/又は、暗黙的に)識別される。IBM z/Architecture及びその前身のアーキテクチャ(1964年頃のオリジナルのSystem360に遡ることができる)は、各々の中央演算処理装置(CPU)に対して16個の汎用レジスタ(GR)を提供する。以下のように、プロセッサ(中央演算処理装置(CPU))の命令により、GRを使用することができる。:
・算術又は論理演算のソース・オペランドとして。
・算術又は論理演算のターゲット・オペランドとして。
・メモリ・オペランドのアドレスとして(基底レジスタ、指標レジスタ、又は直接)。
・メモリ・オペランドの長さとして。
・命令との間で機能コード又は他の情報を提供するといった他の使用。
【0113】
2000年にIBM z/Architectureメインフレームが導入されるまで、メインフレームの汎用レジスタは、32ビットで構成されており、z/Architectureの導入に伴い、汎用レジスタは64ビットで構成されるようになったが、互換性の理由で、多くのz/Architecture命令は、引き続き32ビットをサポートしている。
【0114】
同様に、例えばIntel(登録商標)からのx86のような他のアーキテクチャは、互換モードを提供するので、例えば32ビット・レジスタを有する現行のマシンは、命令が、32ビットGRの最初の8ビット又は16ビットだけにアクセスするモードを提供する。
【0115】
初期のIBM System360環境においてさえ、アセンブラ・プログラマー及びコンパイラ設計者にとって、16個のレジスタ(例えば、命令内の4ビット・レジスタ・フィールドにより識別される)は難題であることが分かっていた。中規模サイズのプログラムは、コード及びデータをアドレス指定するために幾つかの基底レジスタを必要とすることがあり、アクティブな変数を保持するのに使用可能なレジスタの数を制限する。制限された数のレジスタに対処するために、特定の技術が使用される。:
・プログラム設計(モジュラー・プログラミングのように単純な)は、基底レジスタの過剰使用を最小限にするのに役立った。
・コンパイラは、レジスタの動的な再割り当てを管理するために、レジスタの「色分け」のような技術を使用している。
・以下を用いて、基底レジスタの使用を減らすことができる。:即ち、
・(命令内に)即値定数を有するよりより新しい算術及び論理命令。
・相対−即値オペランド・アドレスを有するより新しい命令。
・長変位を有するより新しい命令。
【0116】
しかしながら、CPU内のレジスタの数が収容可能であるよりも多くの生存変数(live variable)及びアドレッシング範囲がある場合、一定のレジスタ圧(register pressure)が残る。
【0117】
z/Architectureは、3つのプログラムが選択可能なアドレッシング・モード:即ち、24ビット、31ビット、及び64ビット・アドレッシングを提供する。しかしながら、64ビット値を必要とせず、64ビットのメモリ・アドレッシングも利用しないプログラムの場合には、64ビットのGRを有することの利点は限られている。以下の開示は、通常は64ビット・アドレッシング又は変数を使用しないプログラムに対して64ビット・レジスタを利用するための技術を説明する。
【0118】
本開示においては、レジスタのビット位置に、左から右に昇順で番号が付けられる(ビッグエンディアン)慣例が使用される。64ビット・レジスタでは、ビット0(左端のビット)が最上位の値(263)を表し、ビット63(右端のビット)が最下位の値(2)を表す。こうしたレジスタの左端の32ビット(ビット0−31)は、上位ワード(high word)と呼ばれ、レジスタの右端の32ビット(ビット32−63)は、下位ワード(low word)と呼ばれ、1ワードは32ビットである。
【0119】
INTERLOCKED−ACCESSファシリティ:
1つの例示的なz/Architectureの実施形態においては、単一命令においてインターロック更新により(比較及びスワップ(compare−and−swap)タイプの更新を使用するのとは対照的に)、ロード、更新、及びストア操作を行うことを可能にする手段を提供する、interlocked−access(インターロック・アクセス)ファシリティを利用することができる。このファシリティはまた、インターロック・フェッチ方式により、2つの別個の記憶位置からのロードを試みる命令を提供する。このファシリティは、以下の命令、
・LOAD AND ADD
・LOAD AND ADD LOGICAL
・LOAD AND AND
・LOAD AND EXCLUSIVE OR
・LOAD AND OR
・LOAD PAIR DISJOINT
を提供する。
【0120】
LOAD/STORE ON CONDITIONファシリティ:
1つの例示的なz/Architectureの実施形態においては、load/store−on−condition(条件付きロード/ストア)ファシリティは、命令の条件コード・マスク・フィールドがPSW内の現在の条件コードに合致したときにのみ、選択された操作を実行できる手段を提供することができる。このファシリティは、以下の命令、
・LOAD ON CONDITION
・STORE ON CONDITION
を提供する。
【0121】
DISTINCT−OPERANDSファシリティ
1つの例示的なz/Architectureの実施形態においては、distinct−operands(独立オペランド)ファシリティは、結果レジスタが、ソース・レジスタのいずれとも異なり得る、代替的な形態の選択された算術命令及び論理命令を提供することができる。このファシリティは、以下の命令、
・ADD
・ADD IMMEDIATE
・ADD LOGICAL
・ADD LOGICAL WITH SIGNED IMMEDIATE
・AND
・EXCLUSIVE OR
・OR
・SHIFT LEFT SINGLE
・SHIFT LEFT SINGLE LOGICAL
・SHIFT RIGHT SINGLE
・SHIFT RIGHT SINGLE LOGICAL
・SUBTRACT
・SUBTRACT LOGICAL
についての代替的な形態を提供する。
【0122】
POPULATION−COUNTファシリティ
1つの例示的なz/Architectureの実施形態においては、population−count(ポピュレーション・カウント)ファシリティは、汎用レジスタの各バイトの1のビット数のカウントを提供するPOPULATION−COUNT命令を提供することができる。
【0123】
ストレージ・オペランド参照:
特定の特殊な命令の場合、多数のオペランドについてのフェッチ参照が、他のCPU及びチャネル・プログラムによる特定のアクセスに対して、インターロックされているように見えることがある。そのようなフェッチ参照は、インターロック・フェッチ参照と呼ばれる。インターロック・フェッチ参照と関連したフェッチ・アクセスは、必ずしも連続して行われるとは限らず、インターロック・フェッチ参照のフェッチ・アクセス間に、他のCPUによるストア・アクセスが、インターロック・フェッチ参照と同じ記憶位置において行われないことがある。LOAD PAIR DISJOINT命令に対するストレージ・オペランド・フェッチ参照は、インターロック・フェッチ参照とすることができる。インターロック・フェッチにより、LOAD PAIR DISJOINTが、両方のオペランドをフェッチできるかどうかは、条件コードにより示される。特定の特殊な命令の場合、他のCPU及びチャネル・プログラムによる特定のアクセスに対して、更新参照がインターロックされることがある。このような更新参照を、インターロック更新参照(interlocked-update reference)と呼ぶ。インターロック更新参照と関連したフェッチ・アクセス及びストア・アクセスは、必ずしも連続して行われるとは限らないが、インターロック更新参照のフェッチ・アクセスとストア・アクセスとの間に、他のCPU及びチャネル・プログラムによる全てのストア・アクセス、並びに、他のCPUによるインターロック更新参照と関連したフェッチ・アクセス及びストア・アクセスが、同じ記憶位置で行なわれることが防止される。
【0124】
マルチプロセッサ・システムはストレージ・オペランド参照をインターロックするための様々な手段を組み入れることができる。一実施形態は、参照中にシステム内のキャッシュ・ラインの排他的所有権を取得するプロセッサを有する。別の実施形態は、例えば、メモリからアクセスされるオペランドがキャッシュ・ライン内にある整数境界上にあることを必要とすることにより、ストレージ・アクセスが同じキャッシュ・ラインに制限されることを必要とする。この場合、128バイトのキャッシュ・ラインにおいてアクセスされるいずれの64ビット(8バイト)オペランドも、これが64ビット整数境界上にあれば、確実に全体がキャッシュ・ライン内に収まる。
【0125】
ブロック並行処理参照:
一部の参照では、ハーフワード(2バイト)、ワード(4バイト)、ダブルワード(8バイト)、又はクワドワード(16バイト)内の全てのバイト(8ビット)へのアクセスが、他のCPU及びチャネル・プログラムから見ると、ブロック並行処理(block concurrent)に見えるように指定される。このセクションでは、ハーフワード、ワード、ダブルワード、又はクワドワードを、ブロックと呼ぶ。フェッチ・タイプ参照が、ブロック内での並行処理のように見えるよう指定されている場合、そのブロックに含まれるバイトがフェッチされている間、別のCPU又はチャネル・プログラムによるそのブロックへのストア・アクセスは許可されない。ストア・タイプ参照が、ブロック内での並行処理のように見えるよう指定されている場合、そのブロック内のバイトがストアされている間、別のCPU又はチャネル・プログラムによるそのブロックへのアクセス(フェッチ又はストア)は許可されない。
【0126】
逐次化(serializing)命令という用語は、1つ又は複数の逐次化機能を実行させる命令を指す。逐次化操作という用語は、命令内の操作の単位、又は割り込みのような逐次化機能を実行させるマシン操作を指す。
【0127】
特定オペランドの逐次化
特定の命令は、命令のオペランドに対して、特定オペランドの逐次化(specific-operand-serialization)を行わせることができる。他のCPU及びチャネル・サブシステムから見ると、特定オペランドの逐次化操作は、概念上前にある全てのストレージ・アクセスが、概念上後にある命令の特定ストレージ・アクセスへのアクセスが行われる前に完了されることから成る。他のCPU及びチャネル・プログラムから見ると、特定オペランドの逐次化を行わせる命令が完了すると、その命令のストアが完了する。特定オペランドの逐次化は、以下の命令:
・インターロック・アクセス・ファシリティがインストールされており、第1オペランドが、オペランドのサイズに対して整数である境界上に位置合わせされている場合の、第1オペランドに対する、ADD IMMEDIATE(ASI、AGSI)及びADD LOGICAL WITH SIGNED IMMEDIATE
・第2オペランドに対する、LOAD AND ADD、LOAD AND ADD LOGICAL、LOAD AND AND、LOAD AND EXCLUSIVE OR、LOAD AND OR
の実行によって行われる。
【0128】
インターロック更新:
IBM z/Architecture及びその前身のマルチプロセッサ・アーキテクチャ(後のSystem360まで遡る)は、特定の「インターロック更新(interlocked−update)」命令を実装している。インターロック更新命令は、命令を実行するCPUが、メモリがフェッチされた時点からこれが再びストアされるまで、そのメモリ位置に対する排他的なアクセスを有することを保証する。これにより、同じ記憶位置にアクセスしようとするマルチ・プロセッサ構成の複数のCPUが、間違った結果を見ないことが保証される。
【0129】
第1のインターロック更新命令は、S/360マルチプロセッシング・システムにおいて導入されたTEST AND SET(TS)であった。System370は、COMPARE AND SWAP(CS)及びCOMPARE DOUBLE AND SWAP(CDS)命令を導入した。ESA/390は、COMPARE AND SWAP AND PURGE(CSP)命令(仮想メモリの管理に使用される特化された形態)を付加した。z/Architectureは、64ビットのCOMPARE AND SWAP(CSG)及びCOMPARE AND SWAP AND PURGE(CSPG)、並びに128ビットのCOMPARE DOUBLE AND SWAP(CDSG)命令を付加した。z/Architectureの長変位ファシリティは、COMPARE AND SWAP(CSY)及びCOMPARE DOUBLE AND SWAP(CDSY)命令を付加した。z/Architectureのcompare−and−swap−and−storeファシリティは、COMPARE AND SWAP AND STORE命令を付加した。TEST AND SET命令についての(TS)のようなニーモニックは、命令を識別するためにアセンブラ・プログラマーによって使用される。アセンブラ表記法は、z/Architectureの参考文献において論じられており、本発明の教示には重要でない。
【0130】
従来技術のインターロック更新命令を用いて、複雑性及び付加的なCPUサイクルを犠牲にしてではあるが、ロック・プロトコル、メモリ位置に対するインターロック算術及び論理操作その他を含む、より複雑な形態の逐次化されたアクセスを行うことができる。操作のアトミック単位として機能する種々のインターロック更新パラダイムに対する必要性が、引き続き存在する。本明細書における実施形態は、これらのパラダイムのうちの3つに対処する。
【0131】
本開示は、インターロック更新技術を実施する2つの新しい命令セット、及び、オペランドが適切に位置合わせされているときにインターロック更新を用いて機能するように定められた既存の第3の命令セットの機能拡張について説明する:
【0132】
Load and Perform操作:
この命令グループは、メモリ位置(第2オペランド)から汎用レジスタ(第1オペランド)に値をロードし、汎用レジスタ(第3オペランド)内の値に算術演算又はブール演算を行い、演算の結果を、再びメモリ位置に入れる。第2オペランドのフェッチ及びストアは、他のCPUには、ブロック並行処理のインターロック更新であるように見える。
【0133】
Load Pair Disjoint:
この命令グループは、異なる別個のメモリ位置(第1オペランド及び第2オペランド)からの2つの値を、偶数/奇数対の汎用レジスタ(第3オペランドとして指定される)にロードしようと試みる。インターロック方式で(即ち、値の1つが別のCPUにより変更されることなく)、2つの異なるメモリ位置にアクセスできるかは、条件コードにより示される。
【0134】
ADD [LOGICAL WITH SIGNED] IMMEDIATEの機能拡張:
従来技術のSystem z10は、命令内の即値定数を使用してメモリ位置への加算を行うために幾つかの命令:即ち、ADD IMMEDIATE(ASI、AGSI)及びADD LOGICAL WITH SIGNED IMMEDIATE(ALSI、ALGSI)を導入した。本来の定義では、これらの命令によるメモリ・アクセスは、インターロック更新ではなかった。インターロック更新ファシリティがインストールされており、これらの命令についてのメモリ・オペランドが整数境界上に位置合わせされている場合、オペランドのフェッチ/加算/ストアは、ブロック並行処理のインターロック更新であるように定義される。
【0135】
他のアーキテクチャは、この問題に対する代替的な解決策を実装する。例えば、Intel Pentiumアーキテクチャは、特定の後続の命令についてのインターロック更新に影響を及ぼすロック・プリフィックス(LOCK prefix)命令を定める。しかしながら、ロック・プリフィックス技術は、不必要な複雑性をアーキテクチャに付加する。本明細書に記載される解決策は、プリフィックス命令を必要とせずに、操作のアトミック単位でインターロック更新を行うものである。
【0136】
INTERLOCKED−STORAGE−ACCESS命令:
以下は、Interlocked−Storage−Access(インターロック・ストレージ・アクセス)命令の例である。
【0137】
LOAD AND ADD(RSY形式)
命令がコンピュータ・システムにより実行されると、第2オペランドが第3オペランドに加算され、和が第2オペランド位置に入れられる。その後、第2オペランドの元の内容(加算前の)は変更されずに第1オペランド位置に入れられる。LAAオペコードの場合、オペランドは32ビットの符号付き2進整数として扱われる。LAAGオペコードの場合、オペランドは64ビットの符号付き2進整数として扱われる。ロード目的の第2オペランドのフェッチ、及び第2オペランド位置へのストアは、他のCPUから見ると、ブロック並行処理のインターロック更新参照であるように見える。特定オペランドの逐次化操作が行われる。変位は、20ビットの符号付き2進整数として扱われる。LAAの第2オペランドは、ワード境界上に指定されなければならない。LAAGの第2オペランドは、ダブルワード境界上に指定されなければならない。そうでない場合には、指定例外が発生する。
結果として得られる条件コード:
0 結果が0であり、オーバーフローは発生しない
1 結果が0より小さく、オーバーフローは発生しない
2 結果が0より大きく、オーバーフローは発生しない
3 オーバーフロー
プログラム例外:
・アクセス例外(フェッチ及びストア、オペランド2)
・固定小数点オーバーフロー例外
・操作例外(インターロック・アクセス・ファシリティがインストールされていない場合)
・指定例外
プログラミング上の注意:
1.R1及びR3フィールドが同じレジスタを指定する場合を除いて、汎用レジスタR3は変更されない。
2.LOAD AND ADD、LOAD AND ADD LOGICAL、LOAD AND AND、LOAD AND EXCLUSIVE OR、及びLOAD AND ORの操作は、以下のように表現することができる。
temp←operand_2;operand_2←operand_2 OP operand_3;operand_1←temp;OPは、命令によって実行される算術操作又は論理操作を表す。
【0138】
LOAD AND ADD LOGICAL(RSY形式)
命令がコンピュータ・システムにより実行されると、第2オペランドが第3オペランドに加算され、和が第2オペランド位置に入れられる。その後、第2オペランドの元の内容(加算前の)は変更されずに、第1オペランド位置に入れられる。LAALオペコードの場合、オペランドは32ビットの符号なし2進整数として扱われる。LAALGオペコードの場合、オペランドは64ビットの符号なし2進整数として扱われる。ロードのための第2オペランドのフェッチ、及び第2オペランド位置へのストアは、他のCPUから見ると、ブロック並行処理のインターロック更新参照であるように見える。特定オペランドの逐次化操作が行われる。変位は、20ビットの符号付き2進整数として扱われる。LAALの第2オペランドは、ワード境界上に指定されなければならない。LAALGの第2オペランドは、ダブルワード境界上に指定されなければならない。そうでない場合には、指定例外が生じる。
結果として得られる条件コード:
0 結果は0であり、繰り上がりはない
1 結果は0でなく、繰り上がりはない
2 結果は0であり、繰り上がる
3 結果は0でなく、繰り上がる
プログラム例外:
・アクセス例外(フェッチ及びストア、オペランド2)
・操作例外(インターロック・アクセス・ファシリティがインストールされていない場合)
・指定例外
プログラミング上の注意:LOAD AND ADDについてのプログラミング上の注意を参照されたい。
【0139】
LOAD AND AND(RSY形式)
命令がコンピュータ・システムにより実行されると、第2オペランドと第3オペランドの論理積(AND)が、第2オペランド位置に入れられる。その後、第2オペランドの元の内容(論理積演算前の)は変更されずに、第1オペランド位置に入れられる。LANオペコードの場合、オペランドは32ビットである。LANGオペコードの場合、オペランドは64ビットである。連結子ANDは、ビット単位でオペランドに適用される。両方のオペランドの対応するビット位置が1を含む場合、結果のビット位置の内容が1に設定され、そうでない場合には、結果ビットが0に設定される。ロード目的の第2オペランドのフェッチ、及び第2オペランド位置へのストアは、他のCPUから見ると、ブロック並行処理のインターロック更新参照であるように見える。特定オペランド逐次化操作が行われる。変位は、20ビットの符号付き2進整数として扱われる。LANの第2オペランドは、ワード境界上に指定されなければならない。LANGの第2オペランドは、ダブルワード境界上に指定されなければならない。そうでない場合には、指定例外が生じる。
結果として得られる条件コード:
0 結果は0である
1 結果は0でない
2 −−
3 −−
プログラム例外:
・アクセス例外(フェッチ及びストア、オペランド2)
・操作例外(インターロック・アクセス・ファシリティがインストールされていない場合)
・指定例外
プログラミング上の注意:LOAD AND ADDについてのプログラミング上の注意を参照されたい。
【0140】
LOAD AND EXCLUSIVE OR(RSY形式)
命令がコンピュータ・システムにより実行されると、第2オペランドと第3オペランドの排他的論理和(EXCLUSIVE OR)が、第2オペランド位置に入れられる。その後、第2オペランドの元の内容(排他的論理和演算前の)は変更されずに、第1オペランド位置に入れられる。LAXオペコードの場合、オペランドは32ビットである。LAXGオペコードの場合、オペランドは64ビットである。連結子exclusive ORは、ビット単位でオペランドに適用される。2つのオペランドの対応するビット位置のビットが異なる場合には、結果のビット位置の内容が1に設定され、そうでない場合には、結果ビットが0に設定される。ロード目的の第2オペランドのフェッチ、及び第2オペランド位置へのストアは、他のCPUから見ると、ブロック並行処理のインターロック更新参照であるように見える。特定オペランドの逐次化操作が行われる。変位は、20ビットの符号付き2進整数として扱われる。LAXの第2オペランドは、ワード境界上に指定されなければならない。LAXGの第2オペランドは、ダブルワード境界上に指定されなければならない。そうでない場合、指定例外が生じる。
結果として得られる条件コード:
0 結果は0である
1 結果は0でない
2 −−
3 −−
プログラム例外:
・アクセス例外(フェッチ及びストア、オペランド2)
・操作例外(インターロック・アクセス・ファシリティがインストールされていない場合)
・指定例外
プログラミング上の注意:LOAD AND ADDについてのプログラミング上の注意を参照されたい。
【0141】
LOAD AND OR(RSY形式)
命令がコンピュータ・システムにより実行されると、第2オペランドと第3オペランドの論理和(OR)が、第2オペランド位置に入れられる。その後、第2オペランドの元の内容(論理和演算前の)は変更されずに、第1オペランド位置に入れられる。LAOオペコードの場合、オペランドは32ビットである。LAOGオペコードの場合、オペランドは64ビットである。連結子ORは、ビット単位でオペランドに適用される。一方又は両方のオペランドの対応するビット位置が1を含む場合には、結果のビット位置の内容が1に設定され、そうでない場合には、結果ビットが0に設定される。ロード目的の第2オペランドのフェッチ、及び第2オペランド位置へのストアは、他のCPUから見ると、ブロック並行処理のインターロック更新参照であるように見える。特定オペランドの逐次化操作が行われる。変位は、20ビットの符号付き2進整数として扱われる。LAOの第2オペランドは、ワード境界上に指定されなければならない。LAOGの第2オペランドは、ダブルワード境界上に指定されなければならない。そうでない場合には、指定例外が生じる。
結果として得られる条件コード:
0 結果は0である
1 結果は0でない
2 −−
3 −−
プログラム例外:
・アクセス例外(フェッチ及びストア、オペランド2)
・操作例外(インターロック・アクセス・ファシリティがインストールされていない場合)
・指定例外
プログラミング上の注意:LOAD AND ADDについてのプログラミング上の注意を参照されたい。
【0142】
LOAD PAIR DISJOINT(SSF形式)
命令がコンピュータ・システムにより実行されると、汎用レジスタR3は、偶数/奇数レジスタ対の偶数レジスタを指定する。第1オペランドは変更されずに、第3オペランドの偶数レジスタに入れられ、第2オペランドは変更されずに、第3オペランドの奇数レジスタに入れられる。条件コードは、第1及び第2オペランドが、ブロック並行処理のインターロック・フェッチによってフェッチされたように見えるかどうかを示す。LPDオペコードの場合、第1及び第2オペランドは、ストレージ内のワードであり、第3オペランドは、汎用レジスタR3及びR3+1のビット32−63にあり、レジスタのビット0−31は変更されない。LPDGオペコードの場合、第1及び第2オペランドは、ストレージ内のダブルワードであり、第3オペランドは、汎用レジスタR3及びR3+1のビット0−63にある。他のCPUから見ると、第1及び第2オペランドは、ブロック並行処理のインターロック・フェッチによってフェッチされたように見える場合、条件コード0が設定される。第1及び第2オペランドが、ブロック並行処理のインターロック更新によってフェッチされたように見えない場合、条件コード3が設定される。第3オペランドは、条件コードに関係なくロードされる。第1及び第2オペランドの変位は、12ビットの符号なし2進整数として扱われる。LPDの第1及び第2オペランドは、ワード境界上に指定されなければならない。LPDGの第1及び第2オペランドは、ダブルワード境界上に指定されなければならない。汎用レジスタR3は、偶数レジスタを指定しなければならない。そうでない場合には、指定例外が生じる。
結果として得られる条件コード:
0 レジスタ対は、インターロック・フェッチによってロードされる
1 −−
2 −−
3 レジスタ対は、インターロック・フェッチによってはロードされない
プログラム例外:
・アクセス例外(フェッチ、オペランド1及び2)
・操作例外(インターロック・アクセス・ファシリティがインストールされていない場合)
・指定例外
プログラミング上の注意:
1.条件コードの設定は、構成内の他のCPUによるストレージ・アクセスによって決まる。
2.結果として得られる条件コードが3である場合、プログラムは分岐し、LOAD PAIR DISJOINT命令を再実行することができる。しかしながら、インターロック・フェッチを得ようとする試みが繰り返し不成功に終わった後、プログラムは、ストレージ・オペランドへのアクセスを逐次化する代替的な手段を使用すべきである。代替的な経路に分岐する前に、プログラムが、LOAD PAIR DISJOINTを10回以上再実行しないことが推奨される。
3.プログラムは、決して条件コード0が設定されない状況に適合できなくてはならない。
【0143】
LOAD/STORE−ON−CONDITION命令:
以下は、例示的Load/Store−on−condition命令である:
【0144】
LOAD ON CONDITION(RRF、RSY形式)
命令がコンピュータ・システムにより実行されると、条件コードが、M3により指定された値のうちの1つを有する場合には、第2オペランドは、変更されずに、第1オペランド位置に入れられ、そうでない場合には、第1オペランドは変更されないままである。LOC及びLROCの場合、第1及び第2オペランドは32ビットであり、LGOCオペコード及びLGROCオペコードの場合、第1及び第2オペランドは64ビットである。M3フィールドは、4ビットのマスクとして使用される。4つの条件コード(0、1、2、及び3)は、次のように左から右へ、マスクの4つのビットに対応する。
【0145】
現行の条件コードを使用して、対応するマスク・ビットを選択する。条件コードにより選択されたマスク・ビットが1である場合には、ロードが実行される。選択されたマスク・ビットが0である場合には、ロードは実行されない。LOC及びLGOCについての変位は、20ビットの符号付き2進整数として扱われる。LOC及びLGOCの場合、M3フィールドにより指定された条件が満たされないとき(即ち、ロード操作が実行されないとき)、第2オペランドについて、アクセス例外が発生するか、又はPERゼロ・アドレス検出が行われるかは、モデルによって決まる。
条件コード:コードは変更されないままである。
プログラム例外:
・アクセス例外(フェッチ、LOC及びLGOCのオペランド2)
・操作例外(load/store−on−conditionファシリティがインストールされていない場合)
プログラミング上の注意:
1.M3フィールドが0を含む場合、命令は、NOPとして機能する。M3フィールドが全て1を含み、例外条件が存在しない場合、常にロード操作が実行される。しかしながら、これらは、それぞれNOP又は条件なしロードを実施する好ましい手段ではない。
2.LOC及びLGOCの場合、M3フィールドにより指定された条件が満たされないとき、第2オペランドがキャッシュに持ち込まれるかどうかは、モデルによって決まる。
3.LOAD ON CONDITIONが指標レジスタを提供しない点を除いて、LOAD ON CONDITIONは、別個のBRANCH ON CONDITION命令にLOAD命令が続くのと似た機能を提供する。例えば、以下の2つの命令シーケンスは等しい。予測分岐を実施するモデルにおいては、CPUが分岐条件を成功裏に予測できるとき、BRANCH ON CONDITION命令とLOAD命令の組み合わせは、LOAD ON CONDITION命令よりも幾分良好に機能し得る。しかしながら、条件がより不規則であるときのように、CPUが分岐条件を成功裏に予測できないモデルにおいては、LOAD ON CONDITION命令は、著しい性能の改善をもたらすことができる。
【0146】
STORE ON CONDITION(RSY形式)
命令がコンピュータ・システムにより実行されると、条件コードが、M3により指定された値のうちの1つを有する場合には、第1オペランドは変更されずに、第2オペランド位置に入れられ、そうでない場合には、第2オペランドは変更されないままである。STOCオペコードの場合、第1及び第2オペランドは32ビットであり、STGOCオペコードの場合、第1及び第2オペランドは64ビットである。M3フィールドは、4ビットのマスクとして使用される。4つの条件コード(0、1、2、及び3)は、次のように左から右へ、マスクの4つのビットに対応する。:即ち、現行の条件コードを使用して、対応するマスク・ビットを選択する。条件コードにより選択されたマスク・ビットが1である場合には、ストアが行われる。選択されたマスク・ビットが0である場合には、ストアは行われず、通常の命令の順序に従って次の順次命令に進む。変位は、20ビットの符号付き2進整数として扱われる。M3フィールドにより指定された条件が満たされない場合(即ち、ストア操作が実行されない)、第2オペランドについて、次の:即ち、(a)アクセス例外が生じる、(b)PERストレージ変更イベントが生じる、(c)PERゼロ・アドレス検出イベントが生じる、又は(d)変更ビットが設定される、のいずれか又は全てが発生するかどうかは、モデルによって決まる。
条件コード:コードは変更されないままである。
プログラム例外:
・アクセス例外(ストア、オペランド2)
・操作例外(load/store−on−conditionファシリティがインストールされていない場合)
プログラミング上の注意:
1.M3フィールドが0を含む場合、命令は、NOPとして機能する。M3フィールドが全て1を含み、例外条件が存在しない場合、常にストア操作が実行される。しかしながら、これらは、それぞれNOP又は条件なしストアを実施する好ましい手段ではない。
2.M3フィールドにより指定された条件が満たされないとき、第2オペランドがキャッシュに持ち込まれるかどうかは、モデルによって決まる。
3.STORE ON CONDITIONが指標レジスタを提供しない点を除いて、STORE ON CONDITIONは、別個のBRANCH ON CONDITION命令にSTORE命令が続くのと似た機能を提供する。例えば、以下の2つの命令シーケンスは等しい。予測分岐を実施するモデルにおいては、CPUが分岐条件を成功裏に予測できるとき、BRANCH ON CONDITION命令とSTORE命令の組み合わせは、STORE ON CONDITION命令よりも幾分良好に機能し得る。しかしながら、条件がより不規則であるときのように、CPUが分岐条件を成功裏に予測できないモデルにおいては、STORE ON CONDITION命令は、著しい性能の改善をもたらすことができる。
【0147】
DISTINCT−OPERANDSファシリティ命令:
以下は、例示的なDistinct−operandsファシリティ命令である:
【0148】
ADD(RR、RRE、RRF、RX、RXY形式)、ADD IMMEDIATE(RIL、RIE、SIY形式)
命令がコンピュータ・システムにより実行されると、ADD(A、AG、AGF、AGFR、AGR、AR、及びAYオペコード)及びADD IMMEDIATE(AFI、AGFI、AGSI、及びASIオペコード)の場合は、第2オペランドが第1オペランドに加算され、和が第1オペランド位置に入れられる。ADD(AGRK及びARK)及びADD IMMEDIATE(AGHIK及びAHIKオペコード)の場合は、第2オペランドが第3オペランドに加算され、和が第1オペランド位置に入れられる。
【0149】
ADD(A、AR、ARK、及びAYオペコード)及びADD IMMEDIATE(AFIオペコード)の場合は、オペランドと和は、32ビットの符号付き2進整数として扱われる。ADD(AG、AGR、及びAGRKオペコード)の場合は、これらは64ビットの符号付き2進整数として扱われる。
【0150】
ADD(AGFR、AGFオペコード)及びADD IMMEDIATE(AGFIオペコード)の場合は、第2オペランドは、32ビットの符号付き2進整数として扱われ、第1オペランドと和は、64ビットの符号付き2進整数として扱われる。ADD IMMEDIATE(ASIオペコード)の場合は、第2オペランドは、8ビットの符号付き2進整数として扱われ、第1オペランドと和は、32ビットの符号付き2進整数として扱われる。ADD IMMEDIATE(AGSIオペコード)の場合は、第2オペランドは、8ビットの符号付き2進整数として扱われ、第1オペランドと和は、64ビットの符号付き2進整数として扱われる。ADD IMMEDIATE(AHIKオペコード)の場合、第1及び第3オペランドは、32ビットの符号付き2進整数として扱われ、第2オペランドは、16ビットの符号付き2進整数として扱われる。ADD IMMEDIATE(AGHIKオペコード)の場合は、第1及び第3オペランドは、64ビットの符号付き2進整数として扱われ、第2オペランドは、16ビットの符号付き2進整数として扱われる。
【0151】
オーバーフローが発生すると、符号ビット位置への繰り上がりを許容し、符号ビット位置からの繰り上がりは無視することによって、結果が取得され、条件コード3が設定される。固定小数点オーバーフロー・マスクが1の場合には、固定小数点オーバーフローに関するプログラム割り込みが発生する。
【0152】
インターロック・アクセス・ファシリティがインストールされており、ADD IMMEDIATE(ASI、AGSI)の第1オペランドが、そのサイズに対応する整数境界上に位置合わせされているとき場合、第1オペランドのフェッチ及びストアは、他のCPUから見るとインターロック更新として実行され、特定オペランドの逐次化操作が実行される。インターロック・アクセス・ファシリティがインストールされていない場合、又はADD IMMEDIATE(ASI、AGSI)の第1オペランドが、そのサイズに対応する整数境界上に位置合わせされていない場合、そのオペランドのフェッチ及びストアは、インターロック更新として実行されない。
【0153】
Aの変位は、12ビットの符号なし2進整数として扱われる。AY、AG、AGF、AGSI、及びASIの変位は、20ビットの符号付き2進整数として扱われる。
結果として得られる条件コード:
0 結果が0であり、オーバーフローは発生しない
1 結果が0より小さく、オーバーフローは発生しない
2 結果が0より大きく、オーバーフローは発生しない
3 オーバーフロー
【0154】
プログラム例外:
・アクセス例外(フェッチ及びストア、AGSI及びASIのオペランド1のみ;フェッチ、A、AY、AG、及びAGFのオペランド2のみ)
・固定小数点オーバーフロー例外
・操作例外(AY、長変位ファシリティがインストールされていない場合;AFI及びAGFI、extended immediateファシリティがインストールされていない場合;AGSI及びASI、一般命令拡張ファシリティがインストールされていない場合;ARK、AGRK、AHIK及びAGHIK、distinct−operandsファシリティがインストールされていない場合)
プログラミング上の注意:
1.ADD IMMEDIATE(AGSI及びASI)の第1オペランドへのアクセスは、ストレージから第1オペランドをフェッチし、その後、更新された値をストアすることから成る。インターロック・アクセス・ファシリティがインストールされていない場合、又は、第1オペランドが、そのサイズに対応する整数境界上に位置合わせされていない場合、第1オペランドへのフェッチ・アクセス及びストア・アクセスは、必ずしもフェッチ・アクセスの直後にストア・アクセスが行われるとは限らない。このような条件下では、別のCPU又はチャネル・サブシステムもまたその記憶位置を更新できる可能性がある場合には、ストレージ内の位置を更新するのに、ADD IMMEDIATE(AGSI及びASI)を安全に使用することができない。インターロック・アクセス・ファシリティがインストールされており、第1オペランドが、そのサイズに対応する整数境界上に位置合わせされている場合、ブロック並行処理のインターロック更新を使用して、オペランドにアクセスされる。
2.算術演算におけるオーバーフロー条件を無視する特定のプログラミング言語の場合、条件コード3を設定することにより、結果の符号が不明瞭になる。しかしながら、ADD IMMEDIATEの場合、分岐マスクを設定する際、I2フィールドの符号(コード生成の時点で既知である)を使用することができ、これにより、結果の符号が正確に決定される。
【0155】
ADD LOGICAL(RR、RRE、RX、RXY形式)、ADD LOGICAL IMMEDIATE(RIL形式)
命令がコンピュータ・システムにより実行されると、ADD LOGICAL(AL、ALG、ALGF、ALGFR、ALGR、ALR、及びALYオペコード)及びADD LOGICAL IMMEDIATE(ALGFI及びALFIオペコード)の場合は、第2オペランドが第1オペランドに加算され、和が第1オペランド位置に入れられる。
【0156】
ADD LOGICAL(ALGRK及びALRKオペコード)の場合は、第2オペランドが第3オペランドに加算され、和が第1オペランド位置に入れられる。ADD LOGICAL(AL、ALR、ALRK、及びALYオペコード)及びADD LOGICAL IMMEDIATE(ALFIオペコード)の場合は、オペランドと和は、32ビットの符号なし2進整数として扱われる。ADD LOGICAL(ALG、ALGR、及びALGRKオペコード)の場合は、それらは、64ビットの符号なし2進整数として扱われる。ADD LOGICAL(ALGFR、ALGFオペコード)及びADD LOGICAL IMMEDIATE(ALGFIオペコード)の場合は、第2オペランドは、32ビットの符号なし2進整数として扱われ、第1オペランドと和は、64ビットの符号なし2進整数として扱われる。
【0157】
ALの変位は、12ビットの符号なし2進整数として扱われる。ALY、ALG、及びALGFの変位は、20ビットの符号付き2進整数として扱われる。
結果として得られる条件コード:
0 結果は0であり、繰り上がりはない
1 結果は0でなく、繰り上がりはない
2 結果は0であり、繰り上がる
3 結果は0でなく、繰り上がる
プログラム例外:
・アクセス例外(フェッチ、AL、ALY、ALG、及びALGFのオペランド2のみ)
・操作例外(ALY、長変位ファシリティがインストールされていない場合;ALFI及びALGFI、extended immediateファシリティがインストールされていない場合;ALRK及びALGRK、distinct−operandsファシリティがインストールされていない場合)
【0158】
ADD LOGICAL WITH SIGNED IMMEDIATE(SIY、RIE形式)
命令がコンピュータ・システムにより実行されると、ALGSIオペコード及びALSIオペコードの場合は、第2オペランドが第1オペランドに加算され、和が第1オペランド位置に入れられる。ALGHSIK及びALHSIKオペコードの場合は、第2オペランドが第3オペランドに加算され、和が第1オペランド位置に入れられる。ALSIオペコードの場合は、第1オペランドと和は、32ビットの符号なし2進整数として扱われる。ALGSIオペコードの場合は、第1オペランドと和は、64ビットの符号なし2進整数として扱われる。ALSI及びALGSIの両方の場合は、第2オペランドは、8ビットの符号付き2進整数として扱われる。ALHSIKオペコードの場合は、第1及び第3オペランドは、32ビットの符号なし2進整数として扱われる。ALGHSIKオペコードの場合は、第1及び第3オペランドは、64ビットの符号なし2進整数として扱われる。ALGHSIK及びALHSIKの両方の場合、第2オペランドは、16ビットの符号付き2進整数として扱われる。
【0159】
インターロック・アクセス・ファシリティがインストールされており、第1オペランドが、そのサイズに対応する整数境界上に位置合わせされている場合、ブロック並行処理のインターロック更新を用いて、オペランドにアクセスされる。ALGSI及びALSIの場合は、第2オペランドが第1オペランドに加算され、和が第1オペランド位置に入れられる。ALGHSIK及びALHSIKの場合、第2オペランドが第3オペランドに加算され、和が第1オペランド位置に入れられる。ALSIの場合は、第1オペランドと和は、32ビットの符号なし2進整数として扱われる。ALGSIの場合は、第1オペランドと和は、64ビットの符号なし2進整数として扱われる。ALSI及びALGSIの両方の場合、第2オペランドは、8ビットの符号付き2進整数として扱われる。ALHSIKの場合は、第1及び第3オペランドは、32ビットの符号なし2進整数として扱われる。ALGHSIKの場合は、第1及び第3オペランドは、64ビットの符号なし2進整数として扱われる。ALGHSIK及びALHSIKの両方の場合、第2オペランドは、16ビットの符号付き2進整数として扱われる。インターロック・アクセス・ファシリティがインストールされており、第1オペランドが、そのサイズに対応する整数境界上に位置合わせされている場合、第1オペランドのフェッチ及びストアは、他のCPUから見るとインターロック更新として実行され、特定オペランドの逐次化操作が実行される。インターロック・アクセス・ファシリティがインストールされていない場合、又はADD LOGICAL WITH SIGNED IMMEDIATE(ALSI、ALGSI)の第1オペランドが、そのサイズに対応する整数境界上に位置合わせされていない場合、そのオペランドのフェッチ及びストアは、インターロック更新として実行されない。第2オペランドが負の値を含む場合、条件コードは、SUBTRACT LOGICAL演算が実行されたかのように設定される。第2オペランドが負である場合、条件コード0は決して設定されない。変位は、20ビットの符号付き2進整数として扱われる。
結果として得られる条件コード:
0 結果は0であり、繰り上がりはない
1 結果は0でなく、繰り上がりはない
2 結果は0であり、繰り上がる
3 結果は0でなく、繰り上がる
【0160】
AND(RR、RRE、RRF、RX、RXY、SI、SIY、SS形式)
命令がコンピュータ・システムにより実行されると、N、NC、NG、NGR、NI、NIY、NR、及びNYオペコードの場合は、第1オペランドと第2オペランドの論理積(AND)が、第1オペランド位置に入れられる。NGRK及びNRKの場合、第2オペランドと第3オペランドの論理積は、第1オペランド位置に入れられる。連結子ANDは、ビット単位でオペランドに適用される。両方のオペランドの対応するビット位置が1を含む場合、結果のビット位置の内容が1に設定され、そうでない場合には、結果ビットが0に設定される。AND(NCオペコード)の場合、各々のオペランドは、左から右へと処理される。オペランドがオーバーラップするときは、オペランドが一度に1バイトずつ処理され、各々の結果バイトは、必要なオペランド・バイトをフェッチした直後に格納されるかのように、結果が取得される。AND(NI及びNIYオペコード)の場合、第1オペランドの長さは1バイトであり、1バイトのみが格納される。AND(N、NR、NRK、及びNY)の場合、オペランドは32ビットであり、AND(NG、NGR、及びNGRKオペコード)の場合、オペランドは64ビットである。N、NI、及びNCの両方のオペランドの変位は、12ビットの符号なし2進整数として扱われる。NY、NIY及びNGの変位は、20ビットの符号付き2進整数として扱われる。
結果として得られる条件コード:
0 結果は0である
1 結果は0でない
2 −−
3 −−
プログラム例外:
・アクセス例外(フェッチ、オペランド2、N、NY、NG及びNC;フェッチ及びストア、オペランド1、NI、NIY及びNC)
・操作例外(NIY及びNY、長変位ファシリティがインストールされていない場合;NGRK及びNRK、distinct operandsファシリティがインストールされていない場合)
【0161】
EXCLUSIVE OR(RR、RRE、RRF、RX、RXY、SI、SIY、SS形式)
命令がコンピュータ・システムにより実行されると、X、XC、XG、XGR、XI、XIY、XR、及びXYオペコードの場合、第1オペランドと第2オペランドの排他的論理和(EXCLUSIVE OR)が、第1オペランド位置に入れられる。XGRK及びXRKオペコードの場合、第2オペランドと第3オペランドの排他的論理和が、第1オペランド位置に入れられる。連結子EXCLUSIVE ORは、ビット単位でオペランドに適用される。2つのオペランドの対応するビット位置のビットが異なる場合、結果のビット位置の内容が1に設定され、そうでない場合には、結果ビットが0に設定される。EXCLUSIVE OR(XCオペコード)の場合、各々のオペランドは、左から右へと処理される。オペランドがオーバーラップするときは、オペランドが一度に1バイトずつ処理され、各々の結果バイトは、必要なオペランド・バイトをフェッチした直後に格納されるかのように、結果が取得される。EXCLUSIVE OR(XI、XIYオペコード)の場合、第1オペランドの長さは1バイトであり、1バイトのみが格納される。EXCLUSIVE OR(X、XR、XRK、及びXYオペコード)の場合、オペランドは32ビットであり、EXCLUSIVE OR(XG、XGR、及びXGRKオペコード)の場合、オペランドは64ビットである。X、XI、及びXCの両オペランドの変位は、12ビットの符号なし2進整数として扱われる。XY、XIY、及びXGの変位は、20ビットの符号付き2進整数として扱われる。
結果として得られる条件コード:
0 結果は0である
1 結果は0でない
2 −−
3 −−
プログラム例外:
・アクセス例外(フェッチ、オペランド2、X、XY、XG及びXC;フェッチ及びストア、オペランド1、XI、XIY及びXC)
・操作例外(XIY及びXY、長変位ファシリティがインストールされていない場合;XGRK及びXRK、distinct operandsファシリティがインストールされていない場合)
プログラミング上の注意:
1.−
2.EXCLUSIVE ORは、ビットを反転するために使用することができ、この操作は、プログラム式2進スイッチのテスト及び設定の際に特に有用である。
3.あるフィールドとそのフィールド自体との排他的論理和は、全て0になる。
4.EXCLUSIVE OR(XR又はXGR)の場合、A EXCLUSIVE−OR B、B EXCLUSIVE−OR A、A EXCLUSIVE−OR Bというシーケンスの結果、付加的な汎用レジスタを使用することなく、AとBの内容が交換される。
5.EXCLUSIVE OR(XI)及びEXCLUSIVE OR(XC)の第1オペランドへのアクセスは、ストレージから第1オペランドのバイトをフェッチし、その後、更新された値をストアすることから成る。特定のバイトへのこれらのフェッチ・アクセス及びストア・アクセスは、必ずしもフェッチ・アクセスの直後にストア・アクセスが行われるとは限らない。従って、別のCPU又はチャネル・プログラムもまたその記憶位置を更新できる可能性がある場合には、ストレージ内の記憶位置を更新するのに、EXCLUSIVE ORを安全に使用することはできない。
【0162】
OR(RR、RRE、RRF、RX、RXY、SI、SIY、SS形式)
命令がコンピュータ・システムにより実行されると、O、OC、OG、OGR、OI、OIY、OR、及びOYオペコードの場合は、第1オペランドと第2オペランドの論理和(OR)が、第1オペランド位置に入れられる。OGRK及びORKの場合、第2オペランドと第3オペランドの論理和が、第1オペランド位置に入れられる。連結子ORは、ビット単位でオペランドに適用される。一方又は両方のオペランドの対応するビット位置が1を含む場合には、結果のビット位置の内容が1に設定され、そうでない場合には、結果ビットが0に設定される。OR(OCオペコード)の場合、各々のオペランドは、左から右へと処理される。オペランドがオーバーラップするときは、オペランドが一度に1バイトずつ処理され、各々の結果バイトは、必要なオペランド・バイトをフェッチした直後に格納されるかのように、結果が取得される。OR(OI、OIYオペコード)の場合、第1オペランドの長さは1バイトであり、1バイトのみが格納される。OR(O、OR、ORK、及びOYオペコード)の場合、オペランドは32ビットであり、OR(OG、OGR、及びOGRKオペコード)の場合、オペランドは64ビットである。O、OI、及びOCの両オペランドの変位は、12ビットの符号なし2進整数として扱われる。OY、OIY、及びOGの変位は、20ビットの符号付き2進整数として扱われる。
結果として得られる条件コード:
0 結果は0である
1 結果は0でない
2 −−
3 −−
【0163】
SHIFT LEFT SINGLE(RS、RSY形式)
命令がコンピュータ・システムにより実行されると、SLAオペコードの場合は、符号付き第1オペランドの31ビットの数値部分が、第2オペランド・アドレスにより指定されるビット数だけ左にシフトされ、結果が第1オペランド位置に入れられる。汎用レジスタR1のビット0−31は、変更されないままである。SLAKオペコードの場合は、符号付き第3オペランドの31ビットの数値部分が、第2オペランド・アドレスにより指定されるビット数だけ左にシフトされ、結果の左側に第3オペランドの符号ビットを付加したものが、第1オペランド位置に入れられる。汎用レジスタR1のビット0−31は、変更されないままであり、汎用レジスタR3において第3オペランドは、変更されないままである。SLAGオペコードの場合は、符号付き第3オペランドの63ビットの数値部分が、第2オペランド・アドレスにより指定されるビット数だけ左にシフトされ、結果の左側に第3オペランドの符号ビットを付加したものが、第1オペランド位置に入れられる。汎用レジスタR3において第3オペランドは変更されないままである。第2オペランドのアドレスは、データのアドレス指定には使用されず、その右端6ビットは、シフトされるビット位置の数を示す。アドレスの残りの部分は無視される。SLAオペコードの場合は、第1オペランドは、汎用レジスタR1のビット位置32−63にある32ビットの符号付き2進整数として扱われる。第1オペランドの符号は、変更されないままである。このオペランドの31個の数値ビットの全てが、左シフトに関与する。SLAKの場合は、第1及び第3オペランドは、それぞれ、汎用レジスタR1及びR3のビット位置32−63にある32ビットの符号付き2進整数として扱われる。第1オペランドの符号は、第3オペランドの符号と同じに設定される。第3オペランドの31個の数値ビットの全てが、左シフトに関与する。SLAGの場合は、第1及び第3オペランドは、それぞれ、汎用レジスタR1及びR3のビット位置0−63にある64ビットの符号付き2進整数として扱われる。第1オペランドの符号は、第3オペランドの符号と同じに設定される。第3オペランドの63個の数値ビットの全てが、左シフトに関与する。SLA、SLAG、又はSLAKの場合、右側の空いたビット位置に、0が与えられる。符号ビットとは異なる1つ又は複数のビットが、SLA又はSLAKの場合は、ビット位置33から、又はSLAGの場合はビット位置1から外にシフトされる場合には、オーバーフローが発生し、条件コード3が設定される。固定小数点オーバーフロー・マスク・ビットが1であれば、固定小数点オーバーフローに関するプログラム割り込みが発生する。
結果として得られる条件コード:
0 結果が0であり、オーバーフローは発生しない
1 結果が0より小さく、オーバーフローは発生しない
2 結果が0より大きく、オーバーフローは発生しない
3 オーバーフロー
プログラム例外
・固定小数点オーバーフロー例外
・操作例外(SLAK、distinct−operandsファシリティがインストールされていない場合)
【0164】
SHIFT LEFT SINGLE LOGICAL(RS、RSY形式)
命令がコンピュータ・システムにより実行されると、SLLオペコードの場合は、32ビットの第1オペランドが、第2オペランド・アドレスにより指定されるビット数だけ左にシフトされ、結果は、第1オペランド位置に入れられる。汎用レジスタR1のビット0−31は、変更されないままである。SLLKの場合は、32ビットの第3オペランドが、第2オペランド・アドレスにより指定されるビット数だけ左にシフトされ、結果は、第1オペランド位置に入れられる。汎用レジスタR1のビット0−31は、変更されないままであり、汎用レジスタR3において第3オペランドは変更されないままである。SLLGオペコードの場合は、64ビットの第3オペランドが、第2オペランド・アドレスにより指定されるビット数だけ左にシフトされ、結果は、第1オペランド位置に入れられる。汎用レジスタR3において第3オペランドは変更されないままである。第2オペランド・アドレスは、データのアドレス指定には使用されず、その右端6ビットは、シフトされるビット位置の数を示す。アドレスの残りの部分は無視される。SLLの場合は、第1オペランドは、汎用レジスタR1のビット位置32−63にある。このオペランドの32ビットの全てが、左シフトに関与する。SLLKの場合は、第1及び第3オペランドは、それぞれ、汎用レジスタR1及びR3のビット位置32−63にある。第3オペランドの32ビットの全てが、左シフトに関与する。SLLGの場合は、第1及び第3オペランドは、それぞれ、汎用レジスタR1及びR3のビット位置0−63にある。第3オペランドの64ビットの全てが、左シフトに関与する。SLL、SLLG、又はSLLKオペコードの場合は、右側の空いたビット位置に0が与えられる。
条件コード:コードは変更されないままである。
プログラム例外:
・操作例外(SLLK、distinct−operandsファシリティがインストールされていない場合)
【0165】
SHIFT RIGHT SINGLE(RS、RSY形式)
命令がコンピュータ・システムにより実行されると、SRAオペコードの場合は、符号付き第1オペランドの31ビットの数値部分が、第2オペランド・アドレスにより指定されるビット数だけ右にシフトされ、結果は、第1オペランド位置に入れられる。汎用レジスタR1のビット0−32は、変更されないままである。SRAKオペコードの場合は、符号付き第3オペランドの31ビットの数値部分が、第2オペランド・アドレスにより指定されるビット数だけ右にシフトされ、結果の左側に第3オペランドの符号ビットを付加したものが、第1オペランド位置に入れられる。汎用レジスタR1のビット0−32は、変更されないままである。SHIFT RIGHT SINGLE(SRAGオペコード)の場合は、符号付き第3オペランドの63ビットの数値部分が、第2オペランド・アドレスにより指定されるビットの数だけ右にシフトされ、結果の左側に第3オペランドの符号ビットを付加したものが、第1オペランド位置に入れられる。汎用レジスタR3において第3オペランドは変更されないままである。第2オペランドのアドレスは、データのアドレス指定には使用されず、その右端6ビットは、シフトされるビット位置の数を示す。アドレスの残りの部分は無視される。SRAの場合は、第1オペランドは、汎用レジスタR1のビット位置32−63にある32ビットの符号付き2進整数として扱われる。第1オペランドの符号は、変更されないままである。このオペランドの31個の数値ビットの全てが、右シフトに関与する。SRAKの場合は、第1及び第3オペランドは、それぞれ、汎用レジスタR1及びR3のビット位置32−63にある32ビットの符号付き2進整数として扱われる。第1オペランドの符号は、第3オペランドの符号と同じに設定される。第3オペランドの31個の数値ビットの全てが、右シフトに関与する。SRAGの場合は、第1及び第3オペランドは、それぞれ、汎用レジスタR1及びR3のビット位置0−63にある64ビットの符号付き2進整数として扱われる。第1オペランドの符号は、第3オペランドの符号と同じく設定される。第3オペランドの63個の数値ビットの全てが、右シフトに関与する。SRA、SRAG、又はSRAKの場合は、ビット位置63から外にシフトされたビットは検査されず、失われる。左側の空いたビット位置に、符号と等しいビットが与えられる。
結果として得られる条件コード:
0 結果は0である
1 結果は0より小さい
2 結果は0より大きい
3 −−
プログラム例外:
・操作例外(SRAK、distinct−operandsファシリティがインストールされていない場合)
プログラミング上の注意:
1.ビット位置を1つだけ右にシフトすることは、2で割って結果を下向きに丸めることと同じである。偶数の数値を右に1桁シフトした場合は、結果はその数値を2で割るのと同じことである。奇数の数値を右に1桁シフトした場合の結果は、その数の次に小さい数を2で割るのと同じことである。例えば、+5を右に1ビット位置だけシフトすると、+2になるが、−5の場合は−3になる。
2.SHIFT RIGHT SINGLE(SRA及びSRAK)の場合は、シフト量が31から63までの範囲内である場合、数値部分の全体がレジスタから外にシフトされ、初期内容が負であったかどうかによって、−1又は0の結果が残る。SHIFT RIGHT SINGLE(SRAG)の場合は、シフト量が63の場合に同じ結果が生じる。
【0166】
SHIFT RIGHT SINGLE LOGICAL(RS、RSY形式)
命令がコンピュータ・システムにより実行されると、SRLオペコードの場合、32ビットの第1オペランドが、第2オペランド・アドレスにより指定されるビット数だけ右にシフトされ、結果は、第1オペランド位置に入れられる。汎用レジスタR1のビット0−31は、変更されないままである。SRLKオペコードの場合は、32ビットの第3オペランドが、第2オペランド・アドレスにより指定されるビット数だけ右にシフトされ、結果は、第1オペランド位置に入れられる。汎用レジスタR1のビット0−31は、変更されないままであり、汎用レジスタR3において第3オペランドは変更されないままである。SRLGオペコードの場合は、64ビットの第3オペランドが、第2オペランド・アドレスにより指定されるビット数だけ右にシフトされ、結果は、第1オペランド位置に入れられる。汎用レジスタR3において第3オペランドは変更されないままである。第2オペランド・アドレスは、データのアドレス指定には使用されず、その右端6ビットは、シフトされるビット位置の数を示す。アドレスの残りの部分は無視される。SRLの場合は、第1オペランドは、汎用レジスタR1のビット位置32−63にある。このオペランドの32ビットの全てが、右シフトに関与する。SRLKの場合は、第1及び第3オペランドは、それぞれ、汎用レジスタR1及びR3のビット位置32−63にある。第3オペランドの32ビットの全てが、右シフトに関与する。SRLGの場合は、第1及び第3オペランドは、それぞれ、汎用レジスタR1及びR3のビット位置0−63にある。第3オペランドの64ビットの全てが、右シフトに関与する。SRL、SRLG、又はSRLKの場合、ビット位置63から外にシフトされたビットは検査されず、失われる。左側の空いたビット位置には0が与えられる。
条件コード:コードは変更されないままである。
プログラム例外:
・操作例外(SLRK、distinct−operandsファシリティがインストールされていない場合)
【0167】
SUBTRACT(RR、RRE、RRF、RX、RXY形式)
命令がコンピュータ・システムにより実行されると、S、SG、SGF、SGFR、SGR、SR、及びSYの場合は、第1オペランドから第2オペランドが減算され、差が第1オペランド位置に入れられる。SGRK及びSRKの場合は、第2オペランドから第3オペランドが減算され、差が第1オペランド位置に入れられる。S、SR、SRK、及びSYの場合は、オペランドと差は、32ビットの符号付き2進整数として扱われる。SG、SGR、及びSGRKの場合は、それらは、64ビットの符号付き2進整数として扱われる。SGFR及びSGFの場合は、第2オペランドは、32ビットの符号付き2進整数として扱われ、第1オペランドと差は、64ビットの符号付き2進整数として扱われる。オーバーフローが発生すると、符号ビット位置への繰り上がりを許容し、符号ビット位置からの繰り上がりは無視することによって、結果が取得され、条件コード3が設定される。固定小数点オーバーフロー・マスクが1のときは、固定小数点オーバーフローに関するプログラム割り込みが発生する。Sの変位は、12ビットの符号なし2進整数として扱われる。SY、SG、及びSGFの変位は、20ビットの符号付き2進整数として扱われる。
結果として得られる条件コード:
0 結果が0であり、オーバーフローは発生しない
1 結果が0より小さく、オーバーフローは発生しない
2 結果が0より大きく、オーバーフローは発生しない
3 オーバーフロー
プログラム例外:
・アクセス例外(フェッチ、S、SY、SG、及びSGFのオペランド2のみ)
・固定小数点オーバーフロー例外
・操作例外(SY、長変位ファシリティがインストールされていない場合;SRK、SGRK、distinct−operandsファシリティがインストールされていない場合)
プログラミング上の注意:
1.SR及びSGRの場合は、R1とR2が同じレジスタを指定するとき、この減算はそのレジスタの内容を消去することと同じである。
2.最大の負の数値から同じ値を減算すると、結果は0になり、オーバーフローは発生しない。
【0168】
SUBTRACT LOGICAL(RR、RRE、RRF、RX、RXY形式)、SUBTRACT LOGICAL IMMEDIATE(RIL形式)
命令がコンピュータ・システムにより実行されると、SUBTRACT LOGICAL(SL、SLG、SLGF、SLGFR、SLGR、SLR、SLY)及びSUBTRACT LOGICAL IMMEDIATEの場合は、第1オペランドから第2オペランドが減算され、差が第1オペランド位置に入れられる。SUBTRACT LOGICAL(SLGRK及びSLRK)の場合は、第2オペランドから第3オペランドが減算され、差が第1オペランド位置に入れられる。SUBTRACT LOGICAL(SL、SLR、SLRK、及びSLY)及びSUBTRACT LOGICAL IMMEDIATE(SLFI)の場合は、オペランドと差は、32ビットの符号なし2進整数として扱われる。SUBTRACT LOGICAL(SLG、SLGR、及びSLGRK)の場合は、それらは、64ビットの符号なし2進整数として扱われる。SUBTRACT LOGICAL(SLGFR,SLGF)及びSUBTRACTLOGICAL IMMEDIATE(SLGFI)の場合は、第2オペランドは、32ビットの符号なし2進整数として扱われ、第1オペランドと差は、64ビットの符号なし2進整数として扱われる。SLの変位は、12ビットの符号なし2進整数として扱われる。SLY、SLG、及びSLGFの変位は、20ビットの符号付き2進整数として扱われる。
結果として得られる条件コード
0 −−
1 結果は0でなく、繰り下がりがある
2 結果は0であり、繰り下がりはない
3 結果が0でなく、繰り下がりはない
プログラム例外:
・アクセス例外(フェッチ、SL、SLY、SLG、及びSLGFのオペランド2のみ)
・操作例外(SLY、長変位ファシリティがインストールされていない場合;SLFI及びSLGFI、extended immediateファシリティがインストールされていない場合;SLRK及びSLGRK、distinct−operandsファシリティがインストールされていない場合)
プログラミング上の注意:
1.論理減算は、第2オペランドの1の補数と値1とを、第1オペランドに加算することによって行われる。第2オペランドの2の補数の代わりに、1の補数と値1を使用するため、第2オペランドが0のときは繰り上がりが生じる。
2.SUBTRACT LOGICALがSUBTRACTと異なるのは、条件コードの意味、及びオーバーフローについての割り込みが発生しないという点のみである。
3.差が0のときは、常に、SLGR、SLGFR、SLG、及びSLGFではビット位置0からの、又は、SLR、SL、及びSLYではビット位置32からの繰り上がりが生じ、従って、繰り下がりはない。
4.SUBTRACT LOGICALについての条件コード設定は、繰り上がりの有無を示すものと解釈することもできる。
【0169】
POPULATION COUNT命令:
以下は、Population Count命令の一例である:
【0170】
POPULATION COUNT(RRE形式)
命令がコンピュータ・システムにより実行されると、汎用レジスタR2の8バイトの各々の1のビット数のカウントが、汎用レジスタR1の対応するバイトに入れられる。汎用レジスタR1の各バイトは、0−8の範囲の8ビットの2進整数である。
結果として得られる条件コード:
0 結果は0である
1 結果は0でない
2 −−
3 −−
プログラム例外:
・操作例外(population−countファシリティがインストールされていない場合)
プログラミング上の注意:
1.条件コードは、汎用レジスタR1、R2の全ての64ビットに基づいて設定される。汎用レジスタ内の1のビット総数は、以下に示すようにして計算することができる。この例では、汎用レジスタ15はカウントされたビット数を含み、汎用レジスタ15内の1のビット総数を含む結果は、汎用レジスタ8に入れられる。(汎用レジスタ9は作業用レジスタとして使用され、完了時の残差値を含む。)
2.POPCNT命令の結果が0になる可能性が高い場合には、プログラムは、分岐命令を挿入して、POPCNTによって設定される条件コードに基づいた加算及びシフト操作を省くことができる。
3.プログラミング上の注意2に示されたものと同様の技術を使用して、第2オペランドのワード、ハーフワード、又は非連続なバイトの1のビット総数を求めることができる。
【0171】
一実施形態においては、図15及び図16を参照すると、インターロックされたメモリ・オペランドを含む算術/論理命令608が実行され、この算術/論理命令は、オペコード・フィールド(OP)と、第1のレジスタ内の第1オペランドを指定する第1のレジスタ・フィールド(R1)と、メモリ内の第2オペランドの位置を指定する第2レジスタを指定する第2レジスタ・フィールと(B2)と、第3のレジスタを指定する第3のレジスタ・フィールド(R3)とを含み、算術/論理命令の実行は:プロセッサにより、第2のレジスタによって指定されるメモリ内の位置から第2オペランドを取得する601ことであって、第2オペランドはある値(一実施形態において、この値は、一時ストアに保存すること607ができる)、取得することと、第3のレジスタから第3オペランドを取得すること602と、取得した第2オペランド及び取得した第3オペランドに基づいて、オペコードが定義した算術演算又は論理演算を行って、結果を生成する603ことと、生成した結果をメモリ内の位置に格納する604ことと、取得した第2オペランドの値(一例として、一時ストアに保存しておいた取得した第2オペランドの値)を第1のレジスタに保存すること605とを含み、この値は、命令の実行により変更されない。
【0172】
一実施形態においては、条件コードが保存され606、条件コードは、結果が0であること、又は結果が0でないことを示す。
【0173】
一実施形態においては、オペコードが定義した算術演算652は、算術又は論理加算(ADD)であり、オペコードが定義した論理演算は、論理積(AND)、排他的論理和(EXCLUSIVE−OR)、又は論理和(OR)のうちのいずれか1つであり、実行は、論理演算の結果が負であることに応答して、結果が負であることを示す条件コードを保存することと、論理演算の結果が正であることに応答して、結果が正であることを示す条件コードを保存することと、論理演算の結果がオーバーフローであることに応答して、結果がオーバーフローであることを示す条件コードを保存することとを含む。
【0174】
一実施形態においては、オペコードによりオペランドのサイズが指定され、1つ又は複数の第1のオペコードは、32ビットのオペランドを指定し、1つ又は複数の第2のオペコードは、64ビットのオペランドを指定する。
【0175】
一実施形態においては、算術/論理命令608は、2つの別個のオペコード・フィールド(OP、OP)、第1の変位フィールド(DH2)及び第2の変位フィールド(DL2)から成るオペコードをさらに含み、メモリ内の位置は、第2のレジスタの内容を符号付き変位値に加算することによって決定され、符号付き変位値は、第2の変位フィールドに連結された第1の変位フィールドの符号拡張された値を含む。
【0176】
一実施形態においては、実行は、オペコードが第1のオペコードであり、第2オペランドが32ビット境界上にないことに応答して、指定例外を発生させること651と、オペコードが第2のオペコードであり、第2オペランドが64ビット境界上にないことに応答して、指定例外を発生させることとをさらに含む。
【0177】
一実施形態においては、プロセッサは、マルチプロセッサ・システム内のプロセッサであり、実行はさらに、第2オペランドを取得することとが、第2オペランドを取得することと、結果をメモリ内の第2の位置に格納することとの間に、マルチプロセッサ・システムの他のプロセッサがメモリ内の位置にアクセスできないようにすることと、生成された結果の格納時に、マルチプロセッサ・システムの他のプロセッサがメモリ内の位置にアクセスするのを可能にすることを含む。
【0178】
本発明の好ましい実施形態がここに示され、説明されたが、本発明は、ここで開示される精密な構成に限定されるものではないこと、及び、添付の特許請求の範囲に定められる本発明の範囲内にある全ての変更及び修正に対する権利が保持されることを理解すべきである。
【符号の説明】
【0179】
608:算術/論理命令
701:オペレーティング・システム(OS)
702、703:アプリケーション・プログラム
OP:オペコード
R1:第1のレジスタ・フィールド
B2:第2のレジスタ・フィールド
R3:第3のレジスタ・フィールド
DH2:第1の変位フィールド
DL2:第2の変位フィールド

【特許請求の範囲】
【請求項1】
インターロックされたメモリ・オペランドを有する算術/論理命令を実行するためにコンピュータに実装される方法であって、前記算術/論理命令は、オペコード・フィールドと、第1のレジスタ内の第1オペランドを指定する第1のレジスタ・フィールドと、メモリ内の第2オペランドの位置を指定する第2のレジスタを指定する第2のレジスタ・フィールドと、第3のレジスタを指定する第3のレジスタ・フィールドとを含み、前記算術/論理命令の前記実行は、
プロセッサにより、前記第2のレジスタによって指定されるメモリ内の位置からある値から成る第2オペランドを取得することと、
前記第3のレジスタから第3オペランドを取得することと、
前記取得した第2オペランド及び前記取得した第3オペランドに基づいて、オペコードが定義した算術演算又は論理演算を行って、結果を生成することと、
前記生成した結果を、前記メモリ内の位置に格納することと、
前記取得した第2オペランドの前記値を前記第1のレジスタに保存することと、
を含む方法。
【請求項2】
前記結果が0であること、又は前記結果が0でないことを示す条件コードを保存することをさらに含む、請求項1に記載の方法。
【請求項3】
前記オペコードが定義した算術演算は、算術加算又は論理加算であり、前記オペコードが定義した論理演算は、論理積、排他的論理和、又は論理和のうちのいずれか1つであり、
前記論理演算の前記結果が負であることに応答して、前記結果が負であることを示す前記条件コードを保存することと、
前記論理演算の前記結果が正であることに応答して、前記結果が正であることを示す前記条件コードを保存することと、
前記論理演算の前記結果がオーバーフローであることに応答して、前記結果がオーバーフローであることを示す前記条件コードを保存することと、
をさらに含む、請求項2に記載の方法。
【請求項4】
前記オペコードによってオペランドのサイズが指定され、1つ又は複数の第1のオペコードは32ビット・オペランドを指定し、1つ又は複数の第2のオペコードは64ビット・オペランドを指定する、請求項3に記載の方法。
【請求項5】
前記算術/論理命令は、2つの別個のオペコード・フィールド、第1の変位フィールド、及び第2の変位フィールドから成る前記オペコードをさらに含み、前記メモリ内の位置は、前記第2のレジスタの内容を符号付き変位値に加算することによって決定され、前記符号付き変位値は、前記第2の変位フィールドに連結された前記第1の変位フィールドの符号拡張された値を含む、請求項4に記載の方法。
【請求項6】
前記オペコードが第1のオペコードであり、前記第2オペランドが32ビット境界上にないことに応答して、指定例外を発生させることと、
前記オペコードが第2のオペコードであり、前記第2オペランドが64ビット境界上にないことに応答して、指定例外を発生させることと、
をさらに含む、請求項5に記載の方法。
【請求項7】
前記プロセッサは、マルチプロセッサ・システム内のプロセッサであり、
前記第2オペランドを取得することは、前記第2オペランドを取得することと、結果をメモリ内の前記第2の位置に格納することとの間に、前記マルチプロセッサ・システムの他のプロセッサが前記メモリ内の位置にアクセスできないようにすることと、
前記生成された結果の格納時に、前記マルチプロセッサ・システムの他のプロセッサが前記メモリ内の位置にアクセスするのを可能にすることと、
をさらに含む、請求項6に記載の方法。
【請求項8】
インターロックされたメモリ・オペランドを有する算術/論理命令を実行するためのコンピュータ・プログラムであって、前記算術/論理命令は、オペコード・フィールドと、第1のレジスタ内の第1オペランドを指定する第1のレジスタ・フィールドと、メモリ内の第2オペランドの位置を指定する第2のレジスタを指定する第2のレジスタ・フィールドと、第3のレジスタを指定する第3のレジスタ・フィールドとを含み、前記コンピュータ・プログラムは、プロセッサに、
前記第2のレジスタによって指定されるメモリ内の位置からある値から成る第2オペランドを取得することと、
前記第3のレジスタから第3オペランドを取得することと、
前記取得した第2オペランド及び前記取得した第3オペランドに基づいて、オペコードが定義した算術演算又は論理演算を行って、結果を生成することと、
前記生成した結果を、前記メモリ内の位置に格納することと、
前記取得した第2オペランドの前記値を前記第1のレジスタに保存することと、
を実行させる、コンピュータ・プログラム。
【請求項9】
前記結果が0であること、又は前記結果が0でないことを示す条件コードを保存することをさらに実行させる、請求項8に記載のコンピュータ・プログラム。
【請求項10】
前記オペコードが定義した算術演算は、算術加算又は論理加算であり、前記オペコードが定義した論理演算は、論理積、排他的論理和、又は論理和のうちのいずれか1つであり、
前記論理演算の前記結果が負であることに応答して、前記結果が負であることを示す前記条件コードを保存することと、
前記論理演算の前記結果が正であることに応答して、前記結果が正であることを示す前記条件コードを保存することと、
前記論理演算の前記結果がオーバーフローであることに応答して、前記結果がオーバーフローであることを示す前記条件コードを保存することと、
をさらに実行させる、請求項9に記載のコンピュータ・プログラム。
【請求項11】
前記オペコードによってオペランドのサイズが指定され、1つ又は複数の第1のオペコードは32ビット・オペランドを指定し、1つ又は複数の第2のオペコードは64ビット・オペランドを指定する、請求項10に記載のコンピュータ・プログラム。
【請求項12】
前記算術/論理命令は、2つの別個のオペコード・フィールド、第1の変位フィールド及び第2の変位フィールドから成る前記オペコードをさらに含み、前記メモリ内の位置は、前記第2のレジスタの内容を符号付き変位値に加算することによって決定され、前記符号付き変位値は、前記第2の変位フィールドに連結された前記第1の変位フィールドの符号拡張された値を含む、請求項11に記載のコンピュータ・プログラム。
【請求項13】
前記オペコードが第1のオペコードであり、前記第2オペランドが32ビット境界上にないことに応答して、指定例外を発生させることと、
前記オペコードが第2のオペコードであり、前記第2オペランドが64ビット境界上にないことに応答して、指定例外を発生させることと、
をさらに実行させる、請求項12に記載のコンピュータ・プログラム。
【請求項14】
前記プロセッサは、マルチプロセッサ・システム内のプロセッサであり、
前記第2オペランドを前記取得することが、前記第2オペランドを取得することと、結果をメモリ内の前記第2の位置に格納することの間に、前記マルチプロセッサ・システムの他のプロセッサが前記メモリ内の位置にアクセスできないようにすることと、
前記生成された結果の格納時に、前記マルチプロセッサ・システムの他のプロセッサが前記メモリ内の位置にアクセスするのを可能にすることと、
をさらに含む、請求項13に記載のコンピュータ・プログラム。
【請求項15】
インターロックされたメモリ・オペランドを有する算術/論理命令を実行するためのコンピュータ・システムであって、前記算術/論理命令は、オペコード・フィールドと、第1のレジスタ内の第1オペランドを指定する第1のレジスタ・フィールドと、メモリ内の第2オペランドの位置を指定する第2のレジスタを指定する第2のレジスタ・フィールドと、第3のレジスタを指定する第3のレジスタ・フィールドとを含み、
メモリと、
前記メモリと通信状態にあるプロセッサであって、メモリから命令をフェッチするための命令フェッチ要素と、フェッチされた命令を実行するための1つ又は複数の実行要素とを含むプロセッサと、
を含む、前記コンピュータ・システムは、
プロセッサにより、前記第2のレジスタによって指定されるメモリ内の位置からある値から成る第2オペランドを取得することと、
前記第3のレジスタから第3オペランドを取得することと、
前記取得した第2オペランド及び前記取得した第3オペランドに基づいて、オペコードが定義して算術演算又は論理演算を行って、結果を生成することと、
前記生成した結果を、前記メモリ内の位置に格納することと、
前記生成した第2オペランドの前記値を前記第1のレジスタに保存することと、
を含む前記算術/論理命令を実行するための方法を実行するように構成される、コンピュータ・システム。
【請求項16】
前記算術/論理命令を実行するための方法は、前記結果が0であること、又は前記結果が0でないことを示す条件コードを保存することをさらに含む、請求項15に記載のコンピュータ・システム。
【請求項17】
前記オペコードが定義した算術演算は、算術加算又は論理加算であり、前記オペコードが定義した論理演算は、論理積、排他的論理和、又は論理和のうちのいずれか1つであり、
前記論理演算の前記結果が負であることに応答して、前記結果が負であることを示す前記条件コードを保存することと、
前記論理演算の前記結果が正であることに応答して、前記結果が正であることを示す前記条件コードを保存することと、
前記論理演算の前記結果がオーバーフローであることに応答して、前記結果がオーバーフローであることを示す前記条件コードを保存することと、
を前記算術/論理命令を実行するための方法はさらに含む、請求項16に記載のコンピュータ・システム。
【請求項18】
前記オペコードによってオペランドのサイズが指定され、1つ又は複数の第1のオペコードは32ビット・オペランドを指定し、1つ又は複数の第2のオペコードは64ビット・オペランドを指定する、請求項17に記載のコンピュータ・システム。
【請求項19】
前記算術/論理命令は、2つの別個のオペコード・フィールド、第1の変位フィールド、及び第2の変位フィールドから成る前記オペコードをさらに含み、前記メモリ内の位置は、前記第2のレジスタの内容を符号付き変位値に加算することによって決定され、前記符号付き変位値は、前記第2の変位フィールドに連結された前記第1の変位フィールドの符号拡張された値を含む、請求項18に記載のコンピュータ・システム。
【請求項20】
前記オペコードが第1のオペコードであり、前記第2オペランドが32ビット境界上にないことに応答して、指定例外を発生させることと、
前記オペコードが第2のオペコードであり、前記第2オペランドが64ビット境界上にないことに応答して、指定例外を発生させることと、
を前記算術/論理命令を実行するための方法はさらに含む、請求項19に記載のコンピュータ・システム。
【請求項21】
前記プロセッサは、マルチプロセッサ・システム内のプロセッサであり、
前記第2オペランドを取得することは、前記第2オペランドを取得することと、結果をメモリ内の前記第2の位置に格納することとの間に、前記マルチプロセッサ・システムの他のプロセッサがメモリ内の前記位置にアクセスするのを防止することと、
前記生成された結果の格納時に、前記マルチプロセッサ・システムの他のプロセッサがメモリ内の前記位置にアクセスするのを可能にすることと、
をさらに含む、請求項20に記載のコンピュータ・システム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate


【公開番号】特開2012−9021(P2012−9021A)
【公開日】平成24年1月12日(2012.1.12)
【国際特許分類】
【出願番号】特願2011−133183(P2011−133183)
【出願日】平成23年6月15日(2011.6.15)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.イーサネット
2.PENTIUM
【出願人】(390009531)インターナショナル・ビジネス・マシーンズ・コーポレーション (4,084)
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MASCHINES CORPORATION
【復代理人】
【識別番号】100110607
【弁理士】
【氏名又は名称】間山 進也
【Fターム(参考)】