JP7442526B2 - 圧縮/解凍オペレーションを実行するための汎用プロセッサ命令 - Google Patents

圧縮/解凍オペレーションを実行するための汎用プロセッサ命令 Download PDF

Info

Publication number
JP7442526B2
JP7442526B2 JP2021532806A JP2021532806A JP7442526B2 JP 7442526 B2 JP7442526 B2 JP 7442526B2 JP 2021532806 A JP2021532806 A JP 2021532806A JP 2021532806 A JP2021532806 A JP 2021532806A JP 7442526 B2 JP7442526 B2 JP 7442526B2
Authority
JP
Japan
Prior art keywords
function
instruction
data
operand
block
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2021532806A
Other languages
English (en)
Other versions
JP2022518665A (ja
Inventor
ギアメイ、ブルース、コンラート
クライン、マティアス
スリゲル、ティモシー
ファレル、マーク
ソフィア、アントニー、トーマス
ヴァイシャウプト、サイモン
ミシュラ、アシュトシュ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2022518665A publication Critical patent/JP2022518665A/ja
Application granted granted Critical
Publication of JP7442526B2 publication Critical patent/JP7442526B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • H03M7/4031Fixed length to variable length coding
    • H03M7/4037Prefix coding
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • H03M7/4031Fixed length to variable length coding
    • H03M7/4037Prefix coding
    • H03M7/4043Adaptive prefix coding
    • H03M7/4062Coding table adaptation
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • H03M7/42Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code using table look-up for the coding or decoding process, e.g. using read-only memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30025Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Description

1つまたは複数の態様は一般に、コンピューティング環境内での処理を容易にすることに関し、詳細には、圧縮(compression)および解凍(decompression)オペレーションの処理を容易にすることに関する。
1つまたは複数のコンピューティング環境では、情報が、ストレージ・デバイス上に、元の圧縮されていない形態ではなしに、圧縮された形態で維持される。圧縮された形態は、元の形態よりも占有するバイトの数が少ない。その結果、圧縮された形態の情報を伝送および維持すると、元の形態の情報を用いて同じ機能を実行するのに比べて時間および空間が少なくて済む。
このような環境では、圧縮および解凍オペレーションを実行する機構をオペレーティング・システム(OS)が提供する。一例では、これらのオペレーションを提供するために、オペレーティング・システムが、zlibオープンソース・ソフトウェア・ライブラリを含んでいる。zlibオープンソース・ソフトウェア・ライブラリは、IETF(Internet Engineering Task Force) RFC(Request for Comments)1951仕様に指定されているDEFLATE標準圧縮技術に忠実に従っている。この機構は、圧縮もしくは解凍を実行するために汎用プロセッサ上でユーザが多くの命令を実行するソフトウェア実装を含むことがあり、またはシステムの入力/出力(I/O)ポートに接続された専用ハードウェア実装を使用することもある。この専用ハードウェア実装ではI/Oデバイスがそれらのオペレーションを実行する。
コンピューティング環境内での処理を容易にするためのコンピュータ・プログラム製品の提供によって、先行技術の短所が解決され、追加の利点が提供される。このコンピュータ・プログラム製品は、処理回路によって可読のコンピュータ可読記憶媒体であり、方法を実行するための命令を記憶したコンピュータ可読記憶媒体を備える。この方法は、コンピューティング環境の汎用プロセッサによって、複数の機能のうちの機能を実行するための命令を取得することを含み、この機能は、この命令によってサポート、すなわち、支持、実現されている。この命令は、圧縮のための業界標準に準拠した命令セット・アーキテクチャの単一のアーキテクト機械命令(architected machine instruction)である。この命令を実行する。この命令を実行することは、機能が圧縮機能であることまたは解凍機能であることに基づいて、入力データの状態を、入力データの圧縮されていない形態と入力データの圧縮された形態との間で変換して、変換された状態のデータを提供することを含む。変換された状態のデータは、タスクを実行する際に使用するために出力として提供される。
汎用プロセッサ上にディスパッチされた単一のアーキテクト命令を使用して、圧縮機能もしくは解凍機能またはその両方の機能(オペレーションとも呼ばれる)を実行することによって、それらの機能を実行するための基本ソフトウェア命令のうちのかなりのサブセットが、その単一のアーキテクト命令によって置き換えられる。それらの基本命令を単一のアーキテクト命令に置き換えることによって、プログラムの複雑さが低減し、基本命令を最適化するためのコードを含める必要性が排除される。全体的な性能が向上する。さらに、入力/出力デバイスにオペレーションをディスパッチしないことによって、オペレーティング・システムは、入力/出力デバイスがそのオペレーションを実行するのを待つ間のタスク・スイッチを回避する。
一例として、入力データの状態を変換することは、業界標準に準拠した圧縮フォーマットを使用する。この圧縮フォーマットは、例えば、DEFLATE圧縮フォーマット(DEFLATE compression format)を含む。
一実施形態では、このタスクが、圧縮データを含む出力を使用する1つまたは複数のオペレーションを実行すること、出力を送信すること、圧縮されていないデータを含む出力を使用する1つまたは複数のオペレーションを実行することからなるタスクのグループから選択される。
一実施形態では、命令は、オペレーションを指定するためのオペレーション・コードを含むオペレーション・コード・フィールドと、命令によって使用される複数のレジスタを指定するための複数のレジスタ・フィールドとを含む。この複数のレジスタは、命令によって出力として使用される出力オペランド位置を識別するために使用される1つのレジスタと、命令によって入力として使用される入力オペランド位置を識別するために使用される別のレジスタとを含み、この入力は、実行される機能に依存する。
例えば、機能が圧縮機能であることに基づいて、入力が、入力オペランド位置からのデータを含み、このデータが、出力オペランド位置に記憶される圧縮データ・シンボルを提供するようにエンコードされ、機能が解凍機能であることに基づいて、入力が、入力オペランド位置からの圧縮データ・シンボルを含み、この圧縮データ・シンボルが、出力オペランド位置に記憶される圧縮されていないデータを提供するようにデコードされる。
圧縮機能を実行すると、ストレージ・デバイス上には、元の形態の情報ではなく、圧縮された形態の情報が維持される。圧縮された形態の情報は、元の形態よりも少数のバイトを占有する。その結果、圧縮された形態の情報を伝送および維持すると、元の形態の情報を用いて同じ機能を実行するのに比べて時間および空間が少なくて済む。
一実施形態では、命令が、命令によって実行される複数の機能のうちの機能を示すための選択されたレジスタをさらに使用する。この複数の機能は、照会機能、圧縮機能、動的ハフマン表生成機能(generate dynamic-Huffman table function)および解凍機能を含む。
一実施形態では、命令が、複数の機能のうちの1つまたは複数の機能に関して命令によって使用されるパラメータ・ブロックのアドレスを提供するための選択された別のレジスタをさらに使用する。
さらなる態様では、実行される機能が動的ハフマン表生成機能であり、命令を実行することが、機能が動的ハフマン表生成機能であることに基づいて、命令の別の実行時に実行される機能が圧縮機能または解凍機能であるときに使用される動的ハフマン表の圧縮表現を生成することを含む。
本明細書では、1つまたは複数の態様に関係したコンピュータ実施方法(computer-implemented method)およびシステムも説明および特許請求されている。さらに、本明細書では、1つまたは複数の態様に関係するサービスも説明されており、それらのサービスが特許請求されている場合もある。
本明細書に記載された技術によって、追加の特徴および利点が実現される。本明細書では、他の実施形態および態様が詳細に説明されており、それらは、特許請求されている態様の部分とみなされる。
1つまたは複数の態様は、本明細書の末尾の特許請求の範囲に例として具体的に示されており、明確に特許請求されている。1つまたは複数の態様の上記の目的、特徴および利点ならびにその他の目的、特徴および利点は、添付図面とともに解釈される以下の詳細な説明から明らかである。
本発明の1つまたは複数の態様を組み込み、使用するためのコンピューティング環境の一例を示す図である。 本発明の1つまたは複数の態様による、図1Aのプロセッサのさらなる詳細を示す図である。 本発明の1つまたは複数の態様を組み込み、使用するためのコンピューティング環境の別の例を示す図である。 本発明の一態様による、DEFLATE変換呼出し(DEFLATE Conversion Call)(DFLTCC)命令の1つのフォーマットを示す図である。 本発明の一態様による、DEFLATE変換呼出し命令によって使用される暗黙のレジスタ(implied register)である汎用レジスタ0のフィールドの一例を示す図である。 本発明の一態様による、DEFLATE変換呼出し命令の機能コードの一例を示す図である。 本発明の一態様による、DEFLATE変換呼出し命令によって使用される暗黙のレジスタである汎用レジスタ1のフィールドの一例を示す図である。 本発明の一態様による、DEFLATE変換呼出し命令によって指定されるレジスタRの内容の一例を示す図である。 本発明の一態様による、DEFLATE変換呼出し命令によって使用されるレジスタR+1の内容の一例を示す図である。 本発明の一態様による、DEFLATE変換呼出し命令によって指定されるレジスタRの内容の一例を示す図である。 本発明の一態様による、DEFLATE変換呼出し命令によって使用されるレジスタR+1の内容の一例を示す図である。 本発明の一態様による、DEFLATE変換呼出し命令によって指定されるレジスタRの内容の一例を示す図である。 本発明の一態様による、DEFLATE変換呼出し命令のDFLTCC-QAF(使用可能機能照会(query available functions))機能によって使用されるパラメータ・ブロックの内容の一例を示す図である。 本発明の一態様による、DEFLATE変換呼出し命令のDFLTCC-GDHT(動的ハフマン表生成(generate dynamic-Huffman table))機能によって使用されるパラメータ・ブロックの内容の一例を示す図である。 本発明の一態様による、DEFLATE変換呼出し命令のDFLTCC-CMPR(圧縮)およびDFLTCC-XPND(展開(expand))機能によって使用されるパラメータ・ブロックの内容の一例を示す図である。 本発明の1つまたは複数の態様による、サブバイト境界(sub-byte boundary)の一例を示す図である。 本発明の一態様による、DFTLCC-CMPR機能に対してサブバイト境界がどのように適用されるのかを説明する例を示す図である。 本発明の一態様による、DFTLCC-CMPR機能に対してサブバイト境界がどのように適用されるのかを説明する例を示す図である。 本発明の一態様による、DFTLCC-CMPR機能に対してサブバイト境界がどのように適用されるのかを説明する例を示す図である。 本発明の一態様による、無圧縮のデータのブロックの一例を示す図である。 本発明の一態様による、固定ハフマン表(fixed-Huffman table)(FHT)を使用した圧縮データを有するブロックの一例を示す図である。 本発明の一態様による、動的ハフマン表(dynamic-Huffman table)(DHT)を使用した圧縮データを有するブロックの一例を示す図である。 本発明の一態様による、ストレージの中の圧縮データ・セットの一例を示す図である。 本発明の一態様による、データを圧縮して圧縮データ・セットの3つのブロックに入れるプログラムの見本の一例を示す図である。 本発明の一態様による、セットの第1の圧縮データ・ブロック上で機能しているDFLTCC-CMPR機能のためのパラメータ・ブロック内容の一例を示す図である。 本発明の一態様による、セットの第2の圧縮データ・ブロック上で機能しているDFLTCC-CMPR機能のためのパラメータ・ブロック内容の一例を示す図である。 本発明の一態様による、圧縮データ・セットからのデータを解凍するプログラムの見本の一例を示す図である。 本発明の一態様による、DFLTCC-CMPRを実行する前および複数回実行した後のインライン履歴バッファの例を示す図である。 本発明の一態様による、DFLTCC-CMPRを実行する前および複数回実行した後のインライン履歴バッファの例を示す図である。 本発明の一態様による、DFLTCC-CMPRを実行する前および複数回実行した後のインライン履歴バッファの例を示す図である。 本発明の一態様による、DFLTCCを実行する前および複数回実行した後の循環履歴の例を示す図である。 本発明の一態様による、DFLTCCを実行する前および複数回実行した後の循環履歴の例を示す図である。 本発明の一態様による、DFLTCCを実行する前および複数回実行した後の循環履歴の例を示す図である。 本発明の一態様による、DFLTCCを実行する前および複数回実行した後の循環履歴の例を示す図である。 本発明の一態様による、DFLTCCを実行する前および複数回実行した後の循環履歴の例を示す図である。 本発明の一態様による、DFLTCC-XPNDを実行する前および複数回実行した後のインライン履歴バッファの例を示す図である。 本発明の一態様による、DFLTCC-XPNDを実行する前および複数回実行した後のインライン履歴バッファの例を示す図である。 本発明の一態様による、DFLTCC-XPNDを実行する前および複数回実行した後のインライン履歴バッファの例を示す図である。 本発明の一態様による、DEFLATE変換呼出し命令の使用の一例を示す図である。 本発明の一態様による、循環履歴バッファの使用の一例を示す図である。 本発明の一態様による、コンピューティング環境内での処理を容易にすることの一例を示す図である。 本発明の一態様による、コンピューティング環境内での処理を容易にすることの一例を示す図である。 本発明の1つまたは複数の態様を組み込み、使用するためのコンピューティング環境の別の例を示す図である。 図20Aのメモリのさらなる詳細を示す図である。 クラウド・コンピューティング環境の一実施形態を示す図である。 抽象化モデル層の一例を示す図である。
本発明の一態様によれば、コンピューティング環境内での処理を容易にする能力が提供される。一例として、データを圧縮または解凍する(復元するとも言う)あるいはその両方のために、圧縮または解凍機能などの機能(オペレーションとも言う)を実行する単一の命令(例えばハードウェア/ソフトウェア・インタフェースの単一のアーキテクト・ハードウェア機械命令)が提供される。この命令は、プログラム(例えばオペレーティング・システムまたはユーザ・プログラム)によって汎用プロセッサ上にディスパッチされる、汎用プロセッサ命令セット・アーキテクチャ(ISA)の部分である。ISA命令を使用して圧縮/解凍を実行することにより、圧縮/解凍オペレーションを実行するのに、オペレーティング・システムによるタスク切替えが必要なく、それによって実行サイクルが節約される。さらに、単一の命令を使用してデータを圧縮または解凍する、あるいはその両方により、汎用プロセッサなどのプロセッサ内での実行時間が短縮される。
一例では、この命令が、DEFLATE規格と呼ばれる業界標準に準拠した圧縮オペレーションおよび復元オペレーションを実行し、この命令は、DEFLATE変換呼出し命令と呼ばれる。DEFLATE規格は、元の形態のデータ(圧縮されていない形態のデータ)の重複ストリング(duplicate string)を表す圧縮データ・シンボルに対する記述を含む。このようなシンボルは、処理中のデータの現在の位置に対する以前に処理した重複ストリングの位置および長さを記述した、重複ストリングのポインタおよび長さを含む。以前に処理した圧縮されていない形態のデータは履歴(history)と呼ばれる。一例では、履歴が、メモリの中の連続したいくつかのバイトであり、それらのバイトは、例えば32キロバイトもの大きなものでありうる。
本発明の1つまたは複数の態様を組み込み、使用するためのコンピューティング環境の一実施形態を、図1Aを参照して説明する。コンピューティング環境100は、例えば、プロセッサ102(例えば中央処理ユニット)、メモリ104(例えば主メモリ。システム・メモリ、主ストレージ、中央ストレージ、ストレージとしても知られている)、および1つもしくは複数の入力/出力(I/O)デバイスもしくはインタフェースまたはその両方106を含み、これらは、例えば1つもしくは複数のバス108もしくは他の接続またはその両方を介して互いに結合されている。
一例では、プロセッサ102が、米ニューヨーク州Armonkのインターナショナル・ビジネス・マシーンズ・コーポレーション(International Business Machines Corporation)によって提供されているz/Architecture(R)ハードウェア・アーキテクチャに基づくものであり、IBM Z(R)サーバなどのサーバの部分である。IBM Z(R)サーバも、インターナショナル・ビジネス・マシーンズ・コーポレーションによって提供されており、z/Architecture(R)ハードウェア・アーキテクチャを実装している。z/Architecture(R)ハードウェア・アーキテクチャの一実施形態が、"z/Architecture Principles of Operation,"IBM Publication No. SA22-7832-11, 12th edition, September 2017という表題の刊行物に記載されており、この刊行物は、参照によってその全体が本明細書に組み込まれている。しかしながら、z/Architecture(R)ハードウェア・アーキテクチャはアーキテクチャの一例に過ぎず、他のアーキテクチャもしくは他のタイプのコンピューティング環境またはその両方も、本発明の1つもしくは複数の態様を含むことができ、または本発明の1つもしくは複数の態様を使用することができ、あるいはその両方を実施することができる。一例では、このプロセッサが、z/OS(R)オペレーティング・システムなどのオペレーティング・システムを実行する。z/OS(R)オペレーティング・システムも、インターナショナル・ビジネス・マシーンズ・コーポレーションによって提供されている。
プロセッサ102は、命令を実行するために使用される複数の機能構成要素を含む。図1Bに示されているように、これらの機能的構成要素は、例えば、実行する命令をフェッチする命令フェッチ構成要素120、フェッチされた命令をデコードし、デコードされた命令のオペランドを取得する命令デコード・ユニット122、デコードされた命令を実行する命令実行構成要素124、命令を実行するために必要に応じてメモリにアクセスするメモリ・アクセス構成要素126、および実行された命令の結果を提供するライトバック(write back)構成要素130を含む。本発明の1つまたは複数の態様によれば、これらの構成要素のうちの1つまたは複数の構成要素は、本明細書に記載されている圧縮/解凍処理(または本発明の1つもしくは複数の態様を使用する可能性がある他の処理)で使用される1つもしくは複数の他の構成要素のうちの少なくとも一部分を含み、またはそのような1つもしくは複数の他の構成要素にアクセスすることができる。そのような1つもしくは複数の他の構成要素には、例えば、圧縮/解凍構成要素(または他の構成要素)136が含まれる。
本発明の1つまたは複数の態様を組み込み、使用するためのコンピューティング環境の別の例を、図2を参照して説明する。一例では、このコンピューティング環境が、z/Architecture(R)ハードウェア・アーキテクチャに基づくものである。しかしながら、このコンピューティング環境は、インターナショナル・ビジネス・マシーンズ・コーポレーションまたは他の法人によって提供されている他のアーキテクチャに基づくものであってもよい。
図2を参照すると、一例では、このコンピューティング環境が、中央電子処理装置(central electronics complex)(CEC)200を含む。CEC200は、例えば、1つまたは複数のプロセッサ(中央処理ユニット(CPU)としても知られている)204および入力/出力サブシステム206に結合されたメモリ202(システム・メモリ、主メモリ、主ストレージ、中央ストレージ、ストレージとしても知られている)など、複数の構成要素を含む。
メモリ202は、例えば、1つまたは複数の論理区画208、それらの論理区画を管理するハイパーバイザ210、およびプロセッサ・ファームウェア212を含む。ハイパーバイザ210の一例は、米ニューヨーク州Armonkのインターナショナル・ビジネス・マシーンズ・コーポレーションによって提供されているProcessor Resource/System Manager(PR/SM(商標))ハイパーバイザである。本明細書で使用されるとき、ファームウェアは、例えばプロセッサのマイクロコードを含む。ファームウェアは、例えば、より高水準の機械コードの実装で使用されるハードウェアレベル命令もしくはデータ構造またはその両方を含む。一実施形態では、ファームウェアが例えば、通常は信頼できるソフトウェアを含むマイクロコードまたは基礎をなすハードウェア向けの特定のマイクロコードとして配信されるプロプライエタリ・コード(proprietary code)を含み、システム・ハードウェアへのオペレーティング・システム・アクセスを制御する。
それぞれの論理区画208は別個のシステムとして機能することができる。すなわち、それぞれの論理区画を独立してリセットすることができ、それぞれの論理区画は、z/OS(R)オペレーティング・システムまたは別のオペレーティング・システムなどのゲスト・オペレーティング・システム220をランすることができ、異なるプログラム222とともに動作することができる。論理区画の中でランしているオペレーティング・システムまたはアプリケーション・プログラムは、システム全体にアクセスすることができるように見えるが、実際には、使用可能なのはシステムの一部分だけである。
メモリ202は、プロセッサ(例えばCPU)204に結合されており、プロセッサ(例えばCPU)204は、論理区画に割り振ることができる物理プロセッサ・リソースである。例えば、論理区画208は、1つまたは複数の論理プロセッサを含み、その1つまたは複数の論理プロセッサはそれぞれ、論理区画に動的に割り振ることができる物理プロセッサ・リソース204の全部または一部を表す。
さらに、メモリ202はI/Oサブシステム206に結合されている。I/Oサブシステム206は、中央電子処理装置の部分とすることができ、または中央電子処理装置とは別個のものとすることができる。I/Oサブシステム206は、主ストレージ202と、中央電子処理装置に結合された入力/出力制御ユニット230および入力/出力(I/O)デバイス240との間の情報の流れを指図する。
多くのタイプのI/Oデバイスを使用することができる。特定の1つのタイプのI/Oデバイスがデータ・ストレージ・デバイス250である。データ・ストレージ・デバイス250は、1つもしくは複数のプログラム252、1つもしくは複数のコンピュータ可読プログラム命令254、またはデータ、あるいはこれらの組合せなどを記憶することができる。このコンピュータ可読プログラム命令を、本発明の態様の実施形態の機能を実行するように構成されたものとすることができる。
一例として、それぞれのプロセッサ204は、1つもしくは複数のローカル・キャッシュまたは1つもしくは複数の共用キャッシュあるいはその両方を含む、複数のキャッシュ・レベルを含むキャッシュ階層の少なくとも1つのキャッシュ260(例えばローカル・キャッシュ)を含む。さらに、一実施形態では、ローカル・キャッシュおよびメモリ202が、データの圧縮および/もしくは解凍(ならびに/または本発明の1つもしくは複数の態様の他のオペレーション)のうちの1つまたは複数を実行する際に使用される圧縮/解凍構成要素(または他の構成要素)262に結合されている。さまざまな例では、これらのタスクを実行する1つまたは複数の構成要素が存在することができる。多くの変形形態が可能である。
一実施形態では、プロセッサ(例えばプロセッサ204)が、命令(例えばDEFLATE変換呼出し命令)を取得し、その命令をデコードし、その命令が使用するアドレスを変換することを含む、その命令のための準備を実行し、その命令のためのコマンドを、プロセッサに結合された、構成要素262などの構成要素に送信して、その命令によって指定された機能を実行する。構成要素262は、この指定された機能を実行する際に、構成要素262がデータを読み出し、そのデータを処理し、処理されたデータを再び記憶するような態様で、キャッシュ階層およびメモリにアクセスすることができる。一例として、構成要素262はハードウェア構成要素である。
さらなる実施形態では、構成要素262の少なくとも一部分が、プロセッサの一部として含まれている。多くの変形形態が可能である。
中央電子処理装置200は、取外し可能/非取外し可能の揮発性/不揮発性コンピュータ・システム記憶媒体を含むことができ、もしくはそのようなコンピュータ・システム記憶媒体に結合されたものとすることができ、またはその両方であることができる。例えば、中央電子処理装置200は、非取外し可能の不揮発性磁気媒体(通常は「ハード・ドライブ」と呼ばれる)、取外し可能な不揮発性磁気ディスク(例えば「フロッピー(R)・ディスク」)から読み出すためおよび取外し可能な不揮発性磁気ディスクに書き込むための磁気ディスク・ドライブ、および/またはCD-ROM、DVD-ROMもしくは他の光学式媒体などの取外し可能な不揮発性光ディスクから読み出すため、または取外し可能な不揮発性光ディスクに書き込むための光ディスク・ドライブを含むことができ、ならびに/あるいはこれらに結合されたものとすることができる。中央電子処理装置200とともに、他のハードウェア構成要素もしくはソフトウェア構成要素またはその両方を使用することができることを理解すべきである。このような構成要素の例は、限定はされないが、マイクロコード、デバイス・ドライバ、冗長処理ユニット、外部ディスク・ドライブ・アレイ、RAIDシステム、テープ・ドライブおよびデータ・アーカイバル・ストレージ・システムなどを含む。
さらに、中央電子処理装置200は、他の多数の汎用または専用コンピューティング・システム環境または構成とともに動作可能であることがある。中央電子処理装置200とともに使用するのに適している可能性があるよく知られているコンピューティング・システム、環境もしくは構成またはこれらの組合せの例は、限定はされないが、パーソナル・コンピュータ(PC)システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、ハンドヘルドまたはラップトップ・デバイス、マルチプロセッサ・システム、マイクロプロセッサ・ベースのシステム、セット・トップ・ボックス、プログラム可能なコンシューマ電子機器、ネットワークPC、ミニコンピュータ・システム、メインフレーム・コンピュータ・システム、および上記のシステムまたはデバイスのうちの任意のシステムまたはデバイスを含む分散クラウド・コンピューティング環境などを含む。
本明細書には、コンピューティング環境のさまざまな例が記載されているが、本発明の1つまたは複数の態様は、多くのタイプの環境とともに使用することができる。本明細書に提供されたコンピューティング環境は例に過ぎない。
本発明の一態様によれば、コンピューティング環境100または中央電子処理装置200などのコンピューティング環境は、データを圧縮および解凍する機構を提供する変換機能を使用する。一例では、この変換機能が、DEFLATE圧縮データ・フォーマットを使用してデータを圧縮および解凍する機構を提供するDEFLATE変換機能である。一例では、機能インジケータが例えば1にセットされているときに、この変換機能がシステムにインストールされる。z/Architecture(R)ハードウェア・アーキテクチャの特定の1つの例として、z/Architecture(R)アーキテクチャ・モードで変換機能がインストールされたときに、機能ビット151が例えば1にセットされる、この機能は、例えばDEFLATE変換呼出し命令を含み、DEFLATE変換呼出し命令の一実施形態を下で説明する。
一例では、IETF(Internet Engineering Task Force) RFC(Request for Comments)1951仕様などの選択された規格によって指定されているとおり、DEFLATE変換呼出し命令が、データの状態を、そのデータの元の(圧縮されていない)形態とそのデータの圧縮表現との間で変換することに関係した機能を実行する。この仕様は、the DEFLATE Compressed Data Format Specification version 1.3 Internet Engineering Task Force, Request for Comments 1951, May 1996に記載されている。
一例では、圧縮されていないデータがバイトのシーケンスであり、そのデータの圧縮表現がシンボルを含む。シンボルは、リテラル・バイト(literal byte)と呼ばれる圧縮されていないデータの個々のバイト、または重複ストリングと呼ばれる圧縮されていないデータの再び出現するバイトのシーケンスを表す。一例として、ハフマン表は、圧縮データ・シンボルと圧縮されていないデータとの間のエンコーディングおよびデコーディングを指定する。2種類のハフマン表、すなわち例えば可能な全てのコーディングを含む所定の仕様である固定ハフマン表(FHT)と、圧縮するデータに対して特に生成されるコーディングのセットである動的ハフマン表(DHT)とがあり、DHTは、可能な全てのコーディングのサブセットであることがある。DHTを用いて生成されたデータの圧縮表現は通常、FHTを用いて生成された同じデータの圧縮表現よりも小さい。重複ストリングを表す圧縮データ・シンボルをエンコードおよびデコードするために、履歴と呼ばれる、最も最近に(most recently)処理された圧縮されていないデータの一部分が維持される。履歴は、重複ストリングの参照ソース(reference source)である。履歴は、オペレーション中にデータが処理されたときに更新される。
示したとおり、一例では、DEFLATE変換呼出し命令が、DEFLATE圧縮データ・フォーマットを使用する。DEFLATE圧縮データ・フォーマットは、RCF 1951, DEFLATE Compressed Data Format Specification version 1.3に記載されている。DEFLATE変換呼出し命令に適用されるDEFLATE規格の属性は、例えば以下のものを含む。
・圧縮データ・セットは一連のブロックを含む。3種類のブロックがある。1つの種類のブロックは、3ビット・ヘッダ、ならびにそれに続く長さ情報および圧縮されていないデータを含み、2つの種類のブロックは、3ビット・ヘッダ、およびそれに続く圧縮データ要素を含む。
・圧縮データ要素は、動的ハフマン表の圧縮表現、圧縮データ・シンボル、およびエンド・オブ・ブロック(EOB)シンボルを含むことがある。
・圧縮データ要素は、さまざまなビット長を有する。
・圧縮データ要素は、ストレージの中のバイト境界間で始まること、または終わることがある。
・圧縮データ要素は、例えば右端ビット位置から左端ビット位置への順番でバイトにロードされる。
圧縮データ要素が、ストレージの中のバイトの全部ではない一部を占有しているときには、ストレージの中のそのバイトの全体にアクセスされる。ストレージ・オペランド長は、アドレス指定可能なバイトの数を指定し、これは、圧縮データが占有しているビットよりも多くのビットを指定することがある。
圧縮データ・ブロックに関する追加の詳細を以下でさらに説明する。
DEFLATE変換呼出し(DFLTCC)命令の一実施形態を図3A~3Lを参照して説明する。一例では、この命令が、汎用プロセッサ(例えばプロセッサ102または204)を使用して実行される。本明細書の説明では、特定の位置、特定のフィールドもしくはそれらのフィールドの特定のサイズ(例えば特定のバイトもしくはビットまたはその両方)、またはこれらの組合せが示される。しかしながら、他の位置、他のフィールドもしくは他のサイズまたはこれらの組合せを提供することもできる。さらに、ビットを特定の値、例えば1または0にセットすることが指定されるが、これは単なる例である。他の例では、ビットを、反対の値などの異なる値または別の値にセットすることができる。多くの変形形態が可能である。
一実施形態では、単一のデータ・ストリームを圧縮または復元するために、プログラム(例えばオペレーティング・システムまたはユーザ・プログラム)がDEFLATE変換呼出し命令を複数回実行することがある。例えば、アプリケーションが、大きなデータ・ストリーム(例えば1メガバイトよりも大きなデータ・ストリーム)を圧縮または解凍するとき、そのオペレーションは、データ・ストリームのバッファリングされた部分を圧縮または解凍するための複数回の呼出しを含むことがある。本発明の一態様によれば、プログラムが、DEFLATE変換呼出し命令の複数回の実行にまたがるオペレーション中に処理された圧縮されていないデータの履歴を蓄積するために使用されるバッファ(例えば32キロバイト・バッファ)を宣言する。このバッファは循環履歴バッファと呼ばれ、循環履歴バッファは、本明細書に記載されているように、DEFLATE変換呼出し命令を使用して定義される。
図3Aを参照すると、一例では、DEFLATE変換呼出し(DFLTCC)命令300のフォーマットが、オペレーション・コード(オペコード)フィールドおよび追加のレジスタ・フィールドを含む、レジスタおよびレジスタ・オペレーションを示すRRFフォーマットである。一例として、この命令は、DEFLATE変換呼出しオペレーションを示すオペレーション・コードを有するオペレーション・コード・フィールド302(例えばビット0~15)、汎用レジスタの第1の対を指示する第1のレジスタ・フィールド(R)304(例えばビット24~27)、汎用レジスタの第2の対を指示する第2のレジスタ・フィールド(R)306(例えばビット28~31)、および第3の汎用レジスタを指示する第3のレジスタ・フィールド(R)308(例えばビット16~19)を含む。Rフィールド304によって指示されたレジスタの内容は、(ストレージの中の)第1のオペランドの位置を指定し、Rフィールド306によって指示されたレジスタの内容は、(ストレージの中の)第2のオペランドの位置を指定し、Rフィールド308によって指示されたレジスタの内容は、(ストレージの中の)第3のオペランドの位置を指定する。R+1の内容は第1のオペランドの長さを指定し、R+1の内容は第2のオペランドの長さを指定する。一例では、命令のビット20~23が予備であり、0を含むべきであり、そうでない場合には、将来、このプログラムがコンパチブルには(compatibly)動作しない可能性がある。本明細書で使用されるとき、このプログラムは、DEFLATE変換呼出し命令を発行するプログラムである。このプログラムは、ユーザ・プログラム、オペレーティング・システムまたは別のタイプのプログラムとすることができる。
一実施形態では、この命令の実行が、1つまたは複数の暗黙の汎用レジスタ(すなわち命令によって明示的には指示されていないレジスタ)の使用を含む。例えば、汎用レジスタ0および1は、本明細書に記載されているように、DEFLATE変換呼出し命令を実行する際に使用される。一例では、汎用レジスタ0が、実行する機能(および後述する履歴バッファ・タイプ)を指定するために使用され、汎用レジスタ1が、この命令によって使用されるパラメータ・ブロックの位置を提供するために使用される。
一例として、図3Bを参照すると、汎用レジスタ0(309)が、履歴バッファ・タイプ・フィールド310および機能コード・フィールド312を含む。特定の1つの例では、汎用レジスタ0のビット位置56が履歴バッファ・タイプを含み、汎用レジスタ0のビット位置57~63が機能コードを含むが、他の実施形態では、履歴バッファ・タイプもしくは機能コードまたはその両方を収容するために、他のビットを使用することができる。一例では、汎用レジスタ0のビット57~63が、割り当てられていない機能コードまたはインストールされていない機能コードを指示しているときに、指定例外(specification exception)が認識される。
DEFLATE変換呼出し命令の割り当てられた例示的な機能コードが図3Cに示されており、それらの機能コードは、例えば、DFLTCC-QAF(使用可能機能照会)機能を示す機能コード0(313)、DFLTCC-GDHT(動的ハフマン表生成)機能を示す機能コード1(315)、DFLTCC-CMPR(圧縮)機能を示す機能コード2(317)、およびDFLTCC-XPND(展開)機能を示す機能コード4(319)を含む。それぞれのコードがパラメータ・ブロックを使用し、一例では、パラメータ・ブロックのサイズが機能に依存する。例えば、DFLTCC-QAF機能に関してはパラメータ・ブロックが32バイト、DFLTCC-GDHT機能に関してはパラメータ・ブロックが384バイト、DFLTCC-CMPRおよびDFLTCC-XPND機能に関してはパラメータ・ブロックが1536バイトである。この例では、その他の機能コードが割り当てられていない。例示的な機能および機能コードを説明するが、他の機能もしくは機能コードまたはその両方を使用することもできる。
指定された機能がDFLTCC-CMPRまたはDFLTCC-XPNDであるとき、汎用レジスタ0のビット56は、そのオペレーション中に使用される履歴バッファ・タイプ(HBT)を指定する。HBTが0のとき、履歴バッファはインライン履歴バッファと呼ばれる。インライン履歴バッファを使用しているとき、DFLTCC-CMPRが指定されているときには、履歴が例えば第2のオペランドの直ぐ左にあり、DFLTCC-XPNDが指定されているときには、履歴が例えば第1のオペランドの直ぐ左にある。HBTが1のとき、履歴バッファは循環履歴バッファと呼ばれる。循環履歴バッファを使用しているとき、DFLTCC-CMPRまたはDFLTCC-XPNDが指定されているときには、履歴が、第3のオペランドの一部分または全部である。DFLTCC-QAFまたはDFLTCC-GDHT機能が指定されているとき、汎用レジスタ0のビット56は無視される。一例では、汎用レジスタ0のビット位置0~31が無視される。さらに、一例では、汎用レジスタ0のビット位置32~55が予備であり、0を含むべきであり、そうでない場合には、将来、このプログラムがコンパチブルには動作しない可能性がある。
DEFLATE変換呼出し命令によって使用される別の暗黙のレジスタである汎用レジスタ1に関するさらなる詳細を、図3Dを参照して説明する。汎用レジスタ1(314)の内容は、例えば、ストレージの中のパラメータ・ブロックの左端バイトの論理アドレス316を指定する。一例では、このパラメータ・ブロックが、4キロバイト境界上に指示されることになっており、そうでない場合には指定例外が認識される。パラメータ・ブロックに関するさらなる詳細を以下でさらに説明する。
指定された機能(例えばDFLTCC-QAF、DFLTCC-GDHT、DFLTCC-CMPR、DFLTCC-XPND)に関して、汎用レジスタ0、1およびRの内容は変更されない。さらに、一例では、Rフィールド304が、汎用レジスタの偶数-奇数対を指示する。Rフィールド304は、偶数レジスタを指示するためのものであり、汎用レジスタ0を指示するためのものではなく、そうでない場合には指定例外が認識される。
図3E~3Fに示されており、本明細書でさらに詳細に説明されるように、汎用レジスタR 318の内容は第1のオペランド・アドレス320を示し、汎用レジスタR+1 322の内容は、第1のオペランドの長さ324を決定するために使用される。例えば、指定された機能がDFLTCC-CMPRまたはDFLTCC-XPNDであるとき、汎用レジスタR 318の内容は、第1のオペランドの左端バイトの論理アドレスを指定する。指定された機能がDFLTCC-CMPRであるとき、汎用レジスタR+1の内容は、パラメータ・ブロックの新規タスク(NT)フィールドおよびサブバイト境界(SBB)フィールド(後述)の値ととともに、第1のオペランドの長さを指定する。下の表は、DFLTCC-CMPR機能に対する第1のオペランドの長さを、汎用レジスタR+1、NTフィールドおよびSBBフィールドの内容に関して示した例を示している。
Figure 0007442526000001
指定された機能がDFLTCC-XPNDであるとき、汎用レジスタR+1の内容は第1のオペランドの長さを指定する。指定された機能がDFLTCC-CMPRまたはDFLTCC-XPNDであるとき、第1のオペランド位置には、データを圧縮または解凍した結果が記憶される。DFLTCC-QAFまたはDFLTCC-GDHT機能が指定されているとき、汎用レジスタRおよびR+1の内容は無視される。
さらに、一例では、指定された機能(例えばDFLTCC-QAF、DFLTCC-GDHT、DFLTCC-CMPRおよびDFLTCC-XPND)に関して、Rフィールド306は、汎用レジスタの偶数-奇数対を指示する。Rフィールド306は、偶数レジスタを指示するためのものであり、汎用レジスタ0を指示するためのものではなく、そうでない場合には指定例外が認識される。
図3G~3Hに示されており、本明細書でさらに詳細に説明されるように、汎用レジスタR 326の内容は第2のオペランド・アドレス328を示し、汎用レジスタR+1 330の内容は、第2のオペランドの長さ332を決定するために使用される。例えば、指定された機能がDFLTCC-GDHT、DFLTCC-CMPRまたはDFLTCC-XPNDであるとき、汎用レジスタRの内容は、第2のオペランドの左端バイトの論理アドレスを指定する。指定された機能がDFLTCC-CMPRまたはDFLTCC-GDHTであるとき、汎用レジスタR+1の内容は、第2のオペランドの長さを指定する。指定された機能がDFLTCC-XPNDであるとき、汎用レジスタR+1の内容は、パラメータ・ブロックのNTフィールドおよびSBBフィールドの値とともに、第2のオペランドの長さを指定する。第2のオペランド長が参照されており、命令の実行の開始時に第2のオペランド長の値が0でないとき、第2のオペランド位置からデータがフェッチされる。第2のオペランド長が参照されており、命令の実行の開始時に第2のオペランド長の値が0であり、命令の実行の開始時にパラメータ・ブロックの継続フラグ(continuation flag)(CF)フィールドが1であるとき、第2のオペランドにはアクセスされない。
DFLTCC-QAF機能が指定されているとき、汎用レジスタRおよびR+1の内容は無視される。DFLTCC-GDHT機能が指定されており、汎用レジスタR+1の内容が0に等しい長さを指定しているときには、指定例外が認識され、第2のオペランドにアクセスされない。DFLTCC-CMPRまたはDFLTCC-XPND機能が指定されており、命令の実行の開始時にパラメータ・ブロックの継続フラグ(CF)フィールドが0であり、汎用レジスタR+1の内容が0に等しい長さを指定しているときには、指定例外が認識され、第2のオペランドにアクセスされない。
図3Iに示されているように、指定された機能がDFLTCC-CMPRまたはDFLTCC-XPNDであり、履歴バッファ・タイプ(HBT)が循環(例えばHBT310=1)であるときには、汎用レジスタR 335の内容が、循環履歴バッファ・アドレス337を指定する。例えば、第3のオペランドの左端バイトの論理アドレスが指定される。これは、例えば4キロバイト境界を指示するためのものであり、そうでない場合には指定例外が認識される。一例では、循環履歴バッファが第3のオペランド位置に位置する。指定された機能がDFLTCC-CMPRまたはDFLTCC-XPNDであり、HBTが0のとき、汎用レジスタRの内容は無視される。DFLTCC-QAFまたはDFLTCC-GDHT機能が指定されているとき、汎用レジスタRの内容は無視される。一例では、指定された機能(例えば、DFLTCC-QAF、DFLTCC-GDHT、DFLTCC-CMPRおよびDFLTCC-XPND)に関しては、Rフィールドが、汎用レジスタ0または汎用レジスタ1を指示するためのものではなく、そうでない場合には指定例外が認識される。
オペレーションの一部として、指定された機能がDFLTCC-CMPRであるとき、汎用レジスタRの中のアドレスは、処理ビット位置0を含んだ第1のオペランドの処理されたバイトの数だけインクリメントされ、汎用レジスタR+1の中の長さは、同じ数だけデクリメントされ、汎用レジスタRの中のアドレスは、第2のオペランドの処理されたバイトの数だけインクリメントされ、汎用レジスタR+1の中の長さは、同じ数だけデクリメントされる。処理ビット位置0を含んだ第1のオペランドの処理されたバイトの数は、例えば、処理された出力ビットの数とSBBの元の値との和である被除数および値8である除数を用いた整数除算(integer division)の結果得られる整数商(integer quotient)である。下で説明するように、これらのアドレスおよび長さの形成および更新はアドレッシング・モードに依存する。
オペレーションの一部として、指定された機能がDFLTCC-XPNDであるとき、汎用レジスタRの中のアドレスは、第1のオペランドの処理されたバイトの数だけインクリメントされ、汎用レジスタR+1の中の長さは、同じ数だけデクリメントされ、汎用レジスタRの中のアドレスは、処理ビット位置0を含んだ第2のオペランドの処理されたバイトの数だけインクリメントされ、汎用レジスタR+1の中の長さは、同じ数だけデクリメントされる。処理ビット位置0を含んだ第2のオペランドの処理されたバイトの数は、処理された入力ビットの数とSBBの元の値との和である被除数および値8である除数を用いた整数除算の結果得られる整数商である。下で説明するように、これらのアドレスおよび長さの形成および更新はアドレッシング・モードに依存する。
24ビット・アドレシング・モードでは、一実施形態において、以下のことが適用される。
・汎用レジスタ1、R、RおよびRのビット位置40~63の内容はそれぞれ、パラメータ・ブロック、第1のオペランド、第2のオペランドおよび循環履歴バッファのアドレスを構成し、ビット位置0~39の内容は無視される。
・更新後の第1のオペランド・アドレスおよび第2のオペランド・アドレスのビット40~63はそれぞれ、汎用レジスタRおよびRの中の対応するビットを置き換える。更新後のアドレスのビット位置40からの桁上げ(carry)は無視され、汎用レジスタRおよびRのビット位置32~39の内容は0にセットされる。汎用レジスタRおよびRのビット位置0~31の内容は変更されないままである。この命令が、部分完了(partial completion)または正常完了(normal completion)で終了し、更新後のオペランド・アドレスが、命令の実行の開始時のオペランド・アドレスに等しいとき、対応する汎用レジスタのビット位置32~39は0にセットされる。
・汎用レジスタR+1およびR+1のビット位置32~63の内容はそれぞれ、例えば、第1および第2のオペランドの中のバイトの数を指定する32ビット符号なし2進整数を形成する。汎用レジスタR+1およびR+1のビット位置0~31の内容は無視される。
・更新後の第1のオペランド長および第2のオペランド長のビット32~63はそれぞれ、汎用レジスタR+1およびR+1の中の対応するビットを置き換える。汎用レジスタR+1およびR+1のビット位置0~31の内容は変更されないままである。
31ビット・アドレシング・モードでは、一実施形態において、以下のことが適用される。
・汎用レジスタ1、R、RおよびRのビット位置33~63の内容はそれぞれ、パラメータ・ブロック、第1のオペランド、第2のオペランドおよび循環履歴バッファのアドレスを構成し、ビット位置0~32の内容は無視される。
・更新後の第1のオペランド・アドレスおよび第2のオペランド・アドレスのビット33~63はそれぞれ、汎用レジスタRおよびRの中の対応するビットを置き換える。更新後のアドレスのビット位置33からの桁上げは無視され、汎用レジスタRおよびRのビット位置32の内容は0にセットされる。汎用レジスタRおよびRのビット位置0~31の内容は変更されないままである。この命令が、部分完了または正常完了で終了し、更新後のオペランド・アドレスが、命令の実行の開始時のオペランド・アドレスに等しいとき、対応する汎用レジスタのビット位置32は0にセットされる。
・汎用レジスタR+1およびR+1のビット位置32~63の内容はそれぞれ、第1および第2のオペランドの中のバイトの数を指定する32ビット符号なし2進整数を形成する。汎用レジスタR+1およびR+1のビット位置0~31の内容は無視される。
・更新後の第1のオペランド長および第2のオペランド長のビット32~63はそれぞれ、汎用レジスタR+1およびR+1の中の対応するビットを置き換える。汎用レジスタR+1およびR+1のビット位置0~31の内容は変更されないままである。
64ビット・アドレシング・モードでは、一実施形態において、以下のことが適用される。
・汎用レジスタ1、R、RおよびRのビット位置0~63の内容はそれぞれ、パラメータ・ブロック、第1のオペランド、第2のオペランドおよび循環履歴バッファのアドレスを構成する。
・更新後の第1のオペランド・アドレスおよび第2のオペランド・アドレスのビット0~63はそれぞれ、汎用レジスタRおよびRの中の対応するビットを置き換える。更新後のアドレスのビット位置0からの桁上げは無視される。
・汎用レジスタR+1およびR+1のビット位置0~63の内容はそれぞれ、第1および第2のオペランドの中のバイトの数を指定する64ビット符号なし2進整数を形成する。
・更新後の第1のオペランド長および第2のオペランド長のビット0~63はそれぞれ、汎用レジスタR+1およびR+1の中の対応するビットを置き換える。
アクセス-レジスタ・モードでは、アクセス・レジスタ1、R、RおよびRがそれぞれ、パラメータ・ブロック、第1のオペランド、第2のオペランドおよび循環履歴バッファを含むアドレス空間を指定する。アクセス-レジスタ・モードにおいて、インライン履歴バッファを用いたDFTCC-CMPRが指定されているときには、アクセス・レジスタRが、インライン履歴を含むアドレス空間を指定する。アクセス-レジスタ・モードにおいて、インライン履歴バッファを用いたDFTCC-XPNDが指定されているときには、アクセス・レジスタRが、インライン履歴を含むアドレス空間を指定する。
これらのさまざまな機能に関するさらなる詳細を下で説明する。
機能コード0:DFLTCC-QAF(使用可能機能照会)
DFLTCC-QAF(使用可能機能照会)機能は、インストールされた機能およびインストールされたパラメータ・ブロック・フォーマットの使用可能性を示す機構を提供する。DFLTCC-QAF機能に対するパラメータ・ブロックの例示的な1つのフォーマットを、図3Jを参照して説明する。一例では、DFLTCC-QAF機能(例えば機能コード0)に対するパラメータ・ブロック340が、インストール済み機能ベクトル(installed functions vector)342およびインストール済みパラメータ・ブロック・フォーマット・ベクトル(installed parameter block formats vector)346を含む。特定の1つの例では、これらのベクトルがそれぞれ、パラメータ・ブロックのバイト0~15およびバイト24~25に記憶されている。それぞれのベクトルを下でさらに説明する。
一例として、インストール済み機能ベクトル342のビット0~127はそれぞれ、DEFLATE変換呼出し命令の機能コード0~127に対応する。ビットが例えば1のときには、対応する機能がインストールされており、そうでない場合には、その機能はインストールされていない。
さらに、一例では、インストール済みパラメータ・ブロック・フォーマット・ベクトル346のビット0~15がそれぞれ、DFLTCC-GDHT、DFLTCC-CMPRおよびDFLTCC-XPND機能に対するパラメータ・ブロック・フォーマット0~15に対応する。ビットが例えば1のときには、対応するパラメータ・ブロック・フォーマットがインストールされており、そうでない場合には、そのパラメータ・ブロック・フォーマットはインストールされていない。一例では、パラメータ・ブロックの予備のバイト16~23および26~31に0が記憶されている。
パラメータ・ブロック340に関してある種のフィールドを説明したが、他の実施形態では、追加のフィールド、より少数のフィールドもしくは他のフィールド、またはこれらの組合せを含めることができる。
一実施形態では、DFLTCC-QAF機能が、汎用レジスタR、R、R、R+1およびR+1の内容を無視する。
適用可能なときには、パラメータ・ブロックに対してPER(プログラム・イベント記録(program event recording))ストレージ変更イベントが認識される。適用可能なときには、パラメータ・ブロックに対してPER0アドレス検出イベントが認識される。
一例では、DFLTCC-QAF機能の実行が完了したときに、条件コード(condition code)0がセットされ、一例では、この照会機能に対して条件コード1、2および3が適用不可である。
機能コード1:DFLTCC-GDHT(動的ハフマン表生成)
DFLTCC-GDHT機能が指定されているときには、DEFLATE規格によって指定されているとおり、第2のオペランドが、例えば、動的ハフマン表(DHT)の圧縮表現を生成するためのソースとして使用される。
一例では、DFLTCC-GDHT機能がパラメータ・ブロックを使用する。その一例を図3Kを参照して説明する。本明細書に記載されたこの例示的なパラメータ・ブロックでは、特定のフィールドおよびフィールドの特定のサイズに対する、パラメータ・ブロック内の特定の位置(例えば特定のバイトもしくはビットまたはその両方)が示される。しかしながら、1つまたは複数のフィールドに対して他の位置もしくはサイズまたはその両方を提供することもできる。さらに、ビットを特定の値、例えば1または0にセットすることが指定されるが、これは単なる例である。他の例では、ビットを、反対の値などの異なる値または別の値にセットすることができる。多くの変形形態が可能である。
さらに、一例では、このパラメータ・ブロックが、1つまたは複数の保存フィールド(preserved field)および1つまたは複数の予備フィールド(reserved field)を含む。保存フィールドは、DFLTCC-GDHT機能によって変更されない。プログラムが、単一のストレージ位置を初期化し、そのストレージ位置を、DFLTCC-GDHT機能のパラメータ・ブロックに対して使用し、続いて、同じストレージ位置を、DFLTCC-CMPR機能のパラメータ・ブロックに対して使用することを可能にするために、保存フィールドは予備フィールドから区別される。予備フィールドは0を含むことになっており、そうでない場合には、将来、このプログラムがコンパチブルには動作しない可能性がある。オペレーションが終了したとき、予備フィールドは0として記憶することができ、または変更しないでおくことができる
さらに、一部のフィールドは、他の機能(例えばDFLTCC-CMPRまたはDFLTCC-XPND)によって使用され、したがって、それらの機能に関係する態様を、それらのフィールドの記述とともに記述することもできる。
一例では、DFLTCC-GDHT機能に対するパラメータ・ブロック360が以下のフィールドを含む。
パラメータ・ブロック・バージョン番号(Parameter Block Version Number)(PBVN)362:このパラメータ・ブロックのバイト0~1は、パラメータ・ブロックのバージョンおよびサイズを指定する。PBVNのビット0~11は予備であり、0を含むべきであり、そうでない場合には、将来、このプログラムがコンパチブルには動作しない可能性がある。PBVNのビット12~15は、パラメータ・ブロックのフォーマットを指定する符号なし2進整数を含む。DFLTCC-QAF機能は、使用可能なパラメータ・ブロック・フォーマットを示す機構を提供する。指定されたパラメータ・ブロックのフォーマットがモデルによってサポートされていないときには、汎用オペランド・データ例外が認識される。PBVNは、プログラムによって指定され、命令の実行中に変更されない。
モデル・バージョン番号(Model Version Number)(MVN)363:このパラメータ・ブロックのバイト2は、命令を実行したモデルを識別する符号なし2進整数である。プログラムがMVNを初期化する必要はない。MVNは、命令の実行中に更新される。MVNに記憶される値はモデルに依存する。
動的ハフマン表(DHT)生成制御(Generation Control)(DHTGC)364:このパラメータ・ブロックのバイト17のビット2は、動的ハフマン表(DHT)の生成に適用される。DHTは、リテラル・バイト、重複ストリング長、エンド・オブ・ブロック(EOB)シンボルおよび重複ストリング・ポインタ距離(duplicate string pointer distance)を表すシンボルに対するハフマン・コードを指定する。特定のシンボルに対するハフマン・コードの値は、データの圧縮されていない形態の中での、そのシンボルが表すエンティティの出現カウントの関数である。シンボルに対するカウントが0のとき、そのシンボルに対するDHT中にハフマン・コードは存在しない。一例では、DHTGCが、0に等しいカウントを指定し、以下のとおりに取り扱われる。
DHTGC 意味
0 0に等しいリテラル・バイト、重複ストリング長およびポインタ距離のカウントを、1に等しいものとして取り扱う(ユニバーサルDHTを生成する)。
1 0に等しい重複ストリング長およびポインタ距離のカウントを、1に等しいものとして取り扱う。
リテラル・バイト、EOBシンボル、重複ストリング長および重複ストリング・ポインタ距離の可能な全ての値に対するハフマン・コードを指定するDHTは、ユニバーサルDHTと呼ばれる。圧縮されていない形態のデータの中では出現しないリテラル・バイト、重複ストリング長または重複ストリング・ポインタ距離の値に対してハフマン・コードを指定しないDHTは、非ユニバーサルDHTと呼ばれる。
DHTGCの全ての値について、結果として得られるDHTは、DEFLATE規格によって定義されているとおり、全ての可能な重複ストリング長およびポインタ距離に対してハフマン・コードを指定する。したがって、後にさらに説明する、結果として得られる圧縮された形態のDHTのHLIT(ハフマン・リテラル(Huffman literal))およびHDIST(ハフマン距離(Huffman distances))サブ要素はそれぞれ、例えば値29を含む。
DFLTCC-GDHT機能が指定されているとき、DHTGCはオペレーションへの入力である。DFLTCC-CMPRまたはDFLTCC-XPND機能が指定されているとき、DHTGCはオペレーションに適用されない。一実施形態では、命令の実行中、DHTGCが変更されない。
オペレーション終了補足コード(Operation Ending Supplemental Code)(OESC)365:このパラメータ・ブロックのバイト19は、プログラムに報告されている条件に関する追加情報を提供する符号なし2進整数である。このフィールドは複数の機能によって使用されるため、一部の条件は、他の機能によって使用されるパラメータ・ブロック(例えばDFLTCC-CMPRおよびDFLTCC-XPND機能によって使用される図3Lのパラメータ・ブロック)のフィールドを指す。報告されている条件が汎用オペランド・データ例外であるとき、オペレーションは抑制されているとみなされるが、パラメータ・ブロックのOESCフィールドは更新され、一例では、その場合に、それは以下のように定義される。
OESC(16進数) 意味
00 追加情報は提供されていない。
01 パラメータ・ブロック・バージョン番号362によって指定されたパラメータ・ブロックのフォーマットがモデルによってサポートされていない。
02 DFLTCC-CMPRまたはDFLTCC-XPND機能が指定されており、履歴長フィールド385(図3L)が例えば32,768よりも大きく、新規タスク・フィールド374(図3L)が0である。
11 2進数11に等しいBTYPE(ブロック・タイプ)を有する圧縮データ・ブロックに遭遇する。
12 2進数00に等しいBTYPEおよびLEN(長さ)の1の補数に等しくないNLENを有する圧縮データ・ブロックに遭遇する。
21 CDHTLフィールド366(図3L)が適用され、CDHTLフィールド366が、例えば42よりも小さいか、または2283よりも大きい。
22 オペレーション中に使用された圧縮DHTのHLITサブ要素が、例えば29よりも大きい(無効なDHT)。
23 オペレーション中に使用された圧縮DHTのHDISTサブ要素が、例えば29よりも大きい(無効なDHT)。
24 オペレーション中に使用された圧縮DHTが、圧縮DHTに対して定義された可能なコード長(例えば19)に対するビット長を指定するコードのシーケンスの中のコードであって、機能ハフマン・ツリーを指定するためにハフマン・アルゴリズムが必要とする長さよりも短いコードを指定する(無効なDHT)。
26 オペレーション中に使用された圧縮DHTが、リテラル・バイト、EOBシンボルおよび重複ストリング長からなる要素のセットに対する最初のコード長としてコード長16を指定する(以前のコード長をコピーする)(無効なDHT)。
27 オペレーション中に使用された圧縮DHTが、リテラル・バイトに対するコード長を指定するコードのシーケンスの中のコードを指定し、そのコードが、圧縮DHTの中で以前に指定された、参照されたコード長のセットを表すように決定されたどのコードとも一致しない(無効なDHT)。
28 オペレーション中に使用された圧縮DHTが、EOBシンボルにコード長0(CL0)を割り当てるコードを指定する。この場合、対応するDHTは、EOBシンボルを表すハフマン・コードを指定しない(無効なDHT)。
29 オペレーション中に使用された圧縮DHTが、重複ストリング長およびポインタ距離に対するコード長を指定するコードのシーケンスの中のコードを指定し、そのコードが、圧縮DHTの中で以前に指定された、参照されたコード長のセットを表すように決定されたどのコードとも一致しない(無効なDHT)。
2A オペレーション中に使用された圧縮DHTが、HLITフィールドの中の値と、HDISTフィールドの中の値と例えば258との和によって指定される、DHTの中のハフマン・コードの数よりも大きいいくつかのコード長を指定する。例として、これは、コード長16、17および18の不適切な使用によって可能である(無効なDHT)。
2B オペレーション中に使用された圧縮DHTが、リテラル・バイト、EOBシンボルおよび重複ストリング長のセットに対するコード長であって、機能ハフマン・ツリーを指定するためにハフマン・アルゴリズムが必要とする長さよりも短いコード長を指定する(無効なDHT)。
2D オペレーション中に使用された圧縮DHTが、重複ストリング・ポインタ距離のセットに対するコード長であって、機能ハフマン・ツリーを指定するためにハフマン・アルゴリズムが必要とする長さよりも短いコード長を指定する(無効なDHT)。
2F CDHTLフィールド366(図3L)が、オペレーション中に使用されたCDHTフィールド367(図3L)の中の圧縮DHTの長さを適用し、CDHTLフィールド366が、この長さに等しくない。
31 オペレーション中に使用された圧縮DHTが、オペレーション中に処理されたリテラル・バイトまたは重複ストリング長に対応するハフマン・コードを指定しない(不十分な非ユニバーサルDHT)か、または、DFLTCC-XPND機能が指定されており、2進数01に等しいBTYPEを有する圧縮データ・ブロックの中で遭遇する圧縮データ・シンボルが、重複ストリング長に対する無効コード(2進数11000110または11000111)を指定する。
32 オペレーション中に使用された圧縮DHTが、オペレーション中に処理された重複ストリング・ポインタ距離に対応するハフマン・コードを指定しない(不十分な非ユニバーサルDHT)か、または、DFLTCC-XPND機能が指定されており、2進数01に等しいBTYPEを有する圧縮データ・ブロックの中で遭遇する圧縮データ・シンボルが、重複ストリング・ポインタ距離に対する無効コード(2進数11110または11111)を指定する。
40 重複ストリング・ポインタである圧縮データ・シンボルに遭遇し、このデータ・シンボルが、そのシンボルを処理する時点で使用可能な履歴の長さよりも大きな距離を指定する。
汎用オペランド・データ例外の報告なしにオペレーションが終了したときには、OESCフィールドに0が記憶される。
0以外の補足コードに対するサポートはモデルに依存する。複数の条件が存在するとき、コードが存在する場合にどのコードがOESCフィールドの中で報告されるのかはモデルに依存する。
圧縮動的ハフマン表長(Compressed Dynamic-Huffman Table Length)(CDHTL)366:このパラメータ・ブロックのバイト56のビット4からバイト57のビット7までの12個のビットは、パラメータ・ブロックのCDHTフィールド(例えばCDHT367)の中のDHTの圧縮フォーマットの長さをビット・カウントとして指定する符号なし2進整数を含む。
DFLTCC-GDHT機能が指定されているとき、CDHTLは、オペレーションからの出力である。
DFLTCC-CMPR機能が指定されており、ハフマン表タイプ(例えば図3LのHTT376)が1のとき、CDHTLは、オペレーションへの入力である。CDHTLが、CDHTに対する適切な長さを指定していないときには、汎用オペランド・データ例外が認識される。DFLTCC-CMPR機能が指定されているとき、CDHTLは変更されない。
DFLTCC-XPND機能が指定されており、2進数10のBTYPEを有するブロックの一部分だけをデコードした後にオペレーションが終了したとき、このフィールドには、そのブロックの中のDHTの圧縮表現の長さが記憶される。DFLTCC-XPND機能が指定されており、オペレーションが、ブロック境界で、または2進数00もしくは01のBTYPEを有するブロックの一部分だけをデコードした後に終了したとき、このフィールドには0が記憶される。2進数10のBTYPEを有するブロック内で、復元オペレーションが再開されるとき、(すなわちCF(図3Lの継続フラグ373)が1に等しく、後述するIFS(未完了機能ステータス(incomplete function status)383)が16進数CまたはDに等しいとき)、このフィールドは、オペレーションへの入力である。
圧縮動的ハフマン表(CDHT)367:このパラメータ・ブロックのバイト64~351は、動的ハフマン表(DHT)の圧縮フォーマットを含む。
DHTは、2セットの要素を表すハフマン・コード(ビット・シーケンス)を指定する。一方のセットの要素は、リテラル・バイト、EOBシンボルおよび重複ストリング長を含む。もう一方のセットの要素は、重複ストリング・ポインタ距離を含む。DHTの圧縮表現は、コード長のセットを定義し、それぞれのセットのそれぞれの要素に対するコード長(CL)を指定する。オペレーション中に参照されることが予想される要素に対するハフマン・コードは、その要素に対して指定されたCL、および同じセットの中の同じ指定されたCLを有する要素の数から導出される。具体的には、DHTの圧縮表現は、一例として、以下のものを含む。
・リテラル・バイト、EOBシンボルおよび重複ストリング長を表すハフマン・コードの数を指定するHLITフィールド
・重複ストリング・ポインタ距離を表すハフマン・コードの数を指定するHDISTフィールド
・コード長を表すハフマン・コードの数を指定するHCLEN(ハフマン・コード長(Huffman code lengths))フィールド
・圧縮DHTに対して定義されたコード長、例えば19個のコード長のうちのそれぞれのコード長に対するビット長を指定するコードのシーケンス
・リテラル・バイト、EOBシンボルおよび重複ストリング長からなるセットの要素のうちのそれぞれの要素に対するコード長を指定するコードのシーケンス
・重複ストリング・ポインタ距離からなるセットの要素のうちのそれぞれの要素に対するコード長を指定するコードのシーケンス
以下で、DHTの圧縮表現に関するさらなる詳細を、2進数10のブロック・タイプを有する圧縮データ・ブロックの説明を参照して説明する。
一例では、DHTの圧縮表現が、CDHTフィールドの中で左揃えにされる。すなわち、バイト64の右端ビットが、DHTの圧縮表現のHLITサブ要素の最下位ビットを含む。
DFLTCC-GDHT機能が指定されているとき、DHTの圧縮表現は、オペレーションからの出力である。
DFLTCC-CMPR機能が指定されており、後述するHTTが1のとき、DHTの圧縮表現は、オペレーションへの入力である。CDHTフィールドは、DFLTCC-CMPR機能によって変更されない。
DFLTCC-XPND機能が指定されており、2進数10のBTYPEを有するブロックの一部分だけをデコードした後にオペレーションが終了したとき、このフィールドには、そのブロックの中のDHTの圧縮表現が記憶される。DFLTCC-XPND機能が指定されており、オペレーションが、ブロック境界で、または2進数00または01のBTYPEを有するブロックの一部分だけをデコードした後に終了したとき、このフィールドには0が記憶される。2進数10のBTYPEを有するブロック内で復元オペレーションが再開されるとき(すなわち、CFが1に等しく、IFSが16進数CまたはDに等しいとき)、このフィールドは、オペレーションへの入力である。
CDHTが変更されたとき、DHTの圧縮表現を表すために使用されていないフィールドのビットは、0として記憶される。
パラメータ・ブロック360に関してさまざまなフィールドを上で説明したが、他の実施形態では、追加のフィールド、より少数のフィールドもしくは他のフィールド、またはこれらの組合せを含めることができる。
DHT生成の態様は、パラメータ・ブロックの動的ハフマン表生成制御(DHTGC)フィールド364を使用して、プログラムによって機械に指定される。ソースが、圧縮されていないデータを含むこと、およびこのオペレーションを完了した後、生成された結果が、DFLTCC-CMPR機能によって同じソースを圧縮するように指定されることが意図されている。
一実施形態では、現在のオペレーションを処理している間に以前のオペレーションから参照するための履歴が存在しない。
一例では、汎用レジスタR+1の内容が、例えば32キロバイトよりも大きな長さを指定しているときに、以下のことが適用される。
・DHTの生成には、第2のオペランドの最初の32キロバイトだけが使用される。
・第2のオペランドの最初の32キロバイトを超える位置に対してはアクセス例外が認識されない。
汎用レジスタR+1の内容が、0に等しい長さを指定しているときには、指定例外が認識され、第2のオペランドにはアクセスされない。
結果として得られる圧縮DHTは、エンド・オブ・ブロック(EOB)シンボルを表すハフマン・コードを含む。
パラメータ・ブロックの圧縮動的ハフマン表(CDHT)フィールド367には、生成されたDHTの圧縮フォーマットが記憶される。パラメータ・ブロックのCDHTLフィールド366には、生成されたDHTの圧縮フォーマットの長さが記憶される。
このオペレーションは、このパラメータ・ブロックのモデル・バージョン番号フィールド363にモデル識別を記憶することを含む。
汎用オペランド・データ例外を認識することなくオペレーションが終了したときには、このパラメータ・ブロックのオペレーション終了補足コード(OESC)フィールド365に0が記憶される。
DFLTCC-GDHT機能の実行が完了したときには、条件コード0がセットされる。このDFLTCC-GDHT機能に対して条件コード1、2および3は適用不可である。
汎用レジスタRおよびR+1はオペレーションによって変更されない。
DFLTCC-GDHT機能が指定されているとき、汎用レジスタR、R+1およびRの内容は無視される。
適用可能なときには、第2のオペランド位置およびパラメータ・ブロックに対してPER0アドレス検出イベントが認識される。
機能コード2:DFLTCC-CMPR(圧縮)
DFLTCC-CMPR機能が指定されているときには、圧縮オペレーションが実行される。このオペレーションは、第2のオペランド位置からのデータをエンコードして、圧縮データ・シンボルにすることを含み、それらの圧縮データ・シンボルは、第1のオペランド位置に記憶される。
一例では、DFLTCC-CMPR機能がパラメータ・ブロックを使用する。その一例を、図3Lを参照して説明する。フィールドの一部は、パラメータ・ブロック360に関して上で説明されており、したがって、以下では、それらのフィールドが同じ参照符号で示されており、それらのフィールドがさらに詳細に説明されることはない。
一例では、パラメータ・ブロック370が以下のものを含む。
パラメータ・ブロック・バージョン番号(PBVN)362
モデル・バージョン番号(MVN)363
継続フラグ(CF)373:このパラメータ・ブロックのビット63は、1であるときに、オペレーションが部分的に完了したこと、および(例えば継続状態バッファ・フィールド392の中の)継続状態バッファの内容を使用して、オペレーションを再開することができることを示す。このプログラムは、継続フラグ(CF)を0に初期化するためのものであり、オペレーションを再開するために命令が再実行される場合にはCFを変更せず、そうでない場合、結果は予測不能である。
新規タスク(NT)374:このパラメータ・ブロックのバイト16のビット0は、1であるときに、オペレーションが、圧縮データ・セットの始まりに適用されることを指示する。したがって、現在のオペレーションに、以前のオペレーションからの履歴および検査値(check value)は適用されない。オペレーションの開始時にNTが1であり、部分完了の後にオペレーションが終了したときには、NTフィールドに0が記憶される。NTが0のときには、現在のオペレーションに、以前のオペレーションからの履歴および検査値が適用される。
検査値タイプ(CVT)375:このパラメータ・ブロックのバイト16のビット2は、パラメータ・ブロックの検査値フィールド(例えばフィールド387)に含まれる検査値のタイプを指定する。CVTが0のとき、検査値タイプは、例えば、32ビット巡回冗長検査(CRC-32)である。CVTが1のとき、検査値タイプは、例えば、32ビット・アドラー・チェックサム(Adler checksum)(アドラー-32)である。CVTビットは、命令の実行中に変更されない。
ハフマン表タイプ(HTT)376:このパラメータ・ブロックのバイト16のビット4は、0であるときに、DEFLATE規格によって定義されているとおり、固定ハフマン・コードを含む表(FHT)が圧縮オペレーション中に使用されることを指定する。HTTが1のときには、このパラメータ・ブロックのCDHTフィールドに指定された動的ハフマン・コードを含む表(DHT)が圧縮オペレーション中に使用される。HTTは、解凍オペレーションには適用されない。HTTビットは、命令の実行中に変更されない。
ブロック継続フラグ(BCF)377:このパラメータ・ブロックのバイト16のビット5は、DFLTCC-CMPR機能が指定されているときに適用される。0のときには、圧縮データ要素を記憶する前に、3ビット・ブロック・ヘッダ、および適用可能なときにはこのパラメータ・ブロックのCDHTフィールド(例えばフィールド367)の中に指定された動的ハフマン表の圧縮フォーマットが、第1のオペランド位置に記憶される。1のとき、第1のオペランド位置には、ブロック・ヘッダもまたはDHTの圧縮フォーマットも記憶されない。NTが1のとき、BCFは、0に等しいものとして取り扱われる。BCFビットは、命令の実行中に変更されない。
ブロック終了制御(Block Closing Control)(BCC)378:このパラメータ・ブロックのバイト16のビット6は、DFLTCC-CMPR機能が指定されてきるときに適用される。1のときには、全ての圧縮データ・シンボルを記憶した後に、エンド・オブ・ブロック(EOB)シンボルが、第1のオペランド位置に記憶される。HTTが、FHTを使用することを指定しているときには、一例として、(リテラル・バイト、EOBシンボルおよび重複ストリング長に対するコードを指定する表の中の中間整数表現256に対応する)2進数0000000のハフマン・コードが、EOBシンボルに対して使用される。HTTが、DHTを使用することを指定しているときには、DHTの中に、EOBシンボルに対するハフマン・コードが指定される。BCCビットが0のとき、第1のオペランド位置にはEOBシンボルが記憶されない。BCCビットは、命令の実行中に変更されない。
ブロック・ヘッダ最終(Block Header Final)(BHF)379:このパラメータ・ブロックのバイト16のビット7は、DFLTCC-CMPR機能が指定されており、BCF377が0またはNT374が1のときに適用され、そうでない場合、BHFは適用されない。適用可能であり、かつ1であるときには、第1のオペランド位置にブロック・ヘッダを記憶する前に、ブロック・ヘッダの最初のビット(BFINAL)が1にセットされる。適用可能であり、かつ0であるときには、第1のオペランド位置にブロック・ヘッダを記憶する前に、ブロック・ヘッダの最初のビット(BFINAL)が0にセットされる。BHFビットは、命令の実行中に変更されない。
DHT生成制御(DHTGC)364:DFLTCC-CMPR機能が指定されているとき、DHTGCは、オペレーションに適用されない。DHTGCは、命令の実行中に変更されない。
サブバイト境界(SBB)381:このパラメータ・ブロックのバイト18のビット5~7は、圧縮データ・ストリームのバイト内の処理済みビットと未処理ビットとの間の境界を指定する符号なし2進整数を含む。参照されるストリームのバイトは、オペレーションが終了したときに参照される最後のバイトであり、これは右端バイトを意味し、また、オペレーションが開始または再開されるときに参照される最初のバイトであり、これは左端バイトを意味する。DFLTCC-CMPR機能が指定されているとき、SBBは、第1のオペランド・アドレスによって指示されたバイトに適用される。DFLTCC-XPND機能が指定されているとき、SBBは、第2のオペランド・アドレスによって指示されたバイトに適用される。SBBは、処理された右端ビットの数を指定する。SBBは、オペレーションへの入力およびオペレーションの出力である。
SBBが2進数011の値を有するときの圧縮データ・ストリームの一例が、図4に示されている。オペレーション終了後の処理されたデータが400に示されており、オペレーション開始前の処理されるデータが402に示されている。
さらに、図5A~5Cは、DFLTCC-CMPR機能に対してSBBがどのように適用されるのかを示す例を示している。例えば、DFLTCC-CMPR機能を実行する前および実行した後にSBBがどのように適用されるのかを示す一例が図5Aに示されている。他の例が図5B~5Cに示されている。NT374が1のとき、SBB381は、2進数000に等しいものとして取り扱われる。
図3Lに戻り、パラメータ・ブロック370の追加のフィールドを説明する。
オペレーション終了補足コード(OESC)365
未完了機能ステータス(IFS)383:このパラメータ・ブロックのバイト21のビット4~7は、ある種のオペレーションが終了したときのステータス情報を含む。一例では、解凍オペレーションが終了したときに、IFSが、第2のオペランドに関する情報を以下のように伝達する。
IFS(2進数) 意味
0000 1に等しいBFINALを有するブロックの最後の要素をデコードした後にオペレーションが終了した。
1000 2進数00に等しいBTYPEおよび0に等しいBFINALを有するブロックの最後の要素以外の要素をデコードした後にオペレーションが終了した。
1001 2進数00に等しいBTYPEおよび1に等しいBFINALを有するブロックの最後の要素以外の要素をデコードした後にオペレーションが終了した。
1010 2進数01に等しいBTYPEおよび0に等しいBFINALを有するブロックの最後の要素以外の要素をデコードした後にオペレーションが終了した。
1011 2進数01に等しいBTYPEおよび1に等しいBFINALを有するブロックの最後の要素以外の要素をデコードした後にオペレーションが終了した。
1100 2進数10に等しいBTYPEおよび0に等しいBFINALを有するブロックの最後の要素以外の要素をデコードした後にオペレーションが終了した。
1101 2進数10に等しいBTYPEおよび1に等しいBFINALを有するブロックの最後の要素以外の要素をデコードした後にオペレーションが終了した。
1110 ブロック境界でオペレーションが終了し、1に等しいBFINALを有するブロックの最後の要素はデコードされておらず、次のブロックの最初のブロック・ヘッダ要素はまだ処理されていない。
一実施形態では、2進数0000に等しいIFSで復元オペレーションが終了することがあり、そのオペレーションが正常完了を満たさないことがある。そのような場合、そのオペレーションは、条件コード1または3がセットされた状態で終了する。
圧縮オペレーションが終了したとき、IFSフィールドは不定(undefined)だが、変更することができる。
IFSは、このオペレーションへの入力ではない。
未完了機能長(Incomplete Function Length)(IFL)384:このパラメータ・ブロックのバイト22~23は、ある種のオペレーションが終了したときの長さ情報を含む。解凍オペレーションに関しては、IFLが、第2のオペランドに適用される。2進数00に等しいBTYPEを有するブロックの全部ではない一部をデコードした後に解凍オペレーションが終了したとき、IFLは、まだ処理されていない、第2のオペランドの中のブロックのバイトの数を指定する符号なし2進整数を含む。例えばリトルエンディアン・バイト順(little-endian byte order)である2進数00に等しいBTYPEを有するブロックのLENフィールドとは違い、バイト22~23は、IFLを、例えばビッグエンディアン・バイト順(big-endian byte order)で含む。
2進数00に等しいBTYPEおよび1に等しいBFINALを有するブロック全体をデコードした後に解凍オペレーションが終了したときには、IFLフィールドに0が記憶される。0でないBTYPEを有するブロックの全部ではない一部をデコードした後に解凍オペレーションが終了したとき、または解凍オペレーションがブロック境界で終了したとき、IFLフィールドは不定だが、変更することができる。
圧縮オペレーションが終了したとき、IFLフィールドは不定だが、変更することができる。
IFLは、オペレーションへの入力ではない。
履歴長(HL)385:このパラメータ・ブロックのバイト44~45は、オペレーション中に参照することができる履歴バッファの中の履歴のバイト数を指定する符号なし2進整数を含む。HLは、インラインおよび循環履歴バッファに適用される。新規タスク(NT)が1に等しいとき、オペレーションの開始時に履歴は適用されず、履歴長は、オペレーションへの入力として0として取り扱われる。
履歴長が例えば32,768よりも大きく、NTが0に等しいときには、汎用オペランド・データ例外が認識される。
履歴長は、圧縮および解凍オペレーション中に変更される。元のHLとオペレーション中に処理された圧縮されていないデータ・バイトの数との和が、例えば32,768よりも小さいかまたは32,768に等しいとき、更新後のHLは、元のHLとオペレーション中に処理された圧縮されていないデータ・バイトの数との和に等しく、そうでないときには、更新後のHLが値32,768に等しい。
履歴オフセット(HO)386:履歴バッファ・タイプが循環であるとき、このパラメータ・ブロックのバイト46のビット1からバイト47のビット7までの15個のビットは、第3のオペランドの中のオフセットを指定する符号なし2進整数を含む。Rの内容と履歴オフセットとの和は、循環履歴バッファの中の圧縮されていないデータの最も早く(least recently)処理されたバイトである、バッファ内の履歴の最初のバイトの位置を指示する。履歴バッファ・タイプが循環であるとき、履歴オフセットは、オペレーションへの入力であり、オペレーションの終了時に更新される。元のHLとオペレーション中に処理された圧縮されていないデータ・バイトの数との和が、例えば32,768よりも小さいかまたは32,768に等しいとき、更新後のHOは元のHOに等しく、そうでないとき、更新後のHOは、32,768を法とする、元のHOと、元のHLと、オペレーション中に処理された圧縮されていないデータ・バイトの数との和に等しい。
履歴バッファ・タイプがインラインであるとき、パラメータ・ブロックのHOフィールドは不定だが、変更することができる。
検査値387:このパラメータ・ブロックのバイト48~51は検査値を含む。オペレーションの一部として検査値が生成される。検査値は、圧縮されていないデータのオペランドに適用される。すなわち、検査値は、DFLTCC-CMPR機能に関しては第2のオペランドに適用され、DFLTCC-XPND機能に関しては第1のオペランドに適用される。CVTビット375が0のときには、例えば32ビットの巡回冗長検査検査値(CRC-32)が生成される。CVTビット375が1のときには、例えば32ビットのアドラー・チェックサム検査値(アドラー-32)が生成される。
検査値の生成に対する入力は、例えば、4バイト・ベース(base)およびオペレーション中に処理された圧縮されていないデータである。圧縮データ・ブロックのセット全体を処理するためにDFLTCC命令が実行される回数に関わりなく、このベース入力は、圧縮データ・ブロックのセットに対する単一の首尾一貫した(consistent)検査値を計算する手段を提供する。NTビットが0のときには、検査値を生成する際のベース入力に対して、検査値フィールドの中の元の値が使用される。
一例では、アドラー-32検査値が生成されるときに、以下のことが適用される。
・NTビットが1のときには、4バイト・ベース入力に対して値1が使用される。
・アドラー-32検査値生成において定義される和は、65,521を法とする。
・結果は、検査値フィールドに、ビッグエンディアン・バイト順で記憶される。すなわち、検査値の最上位バイトがバイト48に位置し、検査値の最下位バイトがバイト51に位置する。
一実施形態では、CRC-32検査値が生成されるときに、以下のことが適用される。
・NTビットが1のときには、4バイト・ベース入力に対して値0が使用される。
・CRC-32検査値を生成する際に除数として使用される多項式は、x32+x26+x23+x22+x16+x12+x11+x10+x+x+x+x+x+x+xであり、これは16進数104C11DB7として表される。この表現では、左端ビットが最上位ビットに対応する。
・検査値を生成する最初のステージおよび最後のステージはそれぞれ、ベース入力の1の補数を計算するステージ、および結果を記憶する前に結果の1の補数を計算するステージである。
・結果は、検査値フィールドに、リトルエンディアン・バイト順で記憶される。すなわち、検査値の最下位バイトがバイト48に位置し、検査値の最上位バイトがバイト51に位置する。
一例では、オペレーションが、条件コード0がセットされた状態で終了したときに、検査値が、そのプログラムに対してだけ意味をなし、そうでないときには、検査値が中間結果に過ぎず、オペレーションを再開するためだけに意味をなす。DFLTCC-CMPR機能が指定されており、オペレーションが、条件コード1、2または3がセットされた状態で終了したときには、第2のオペランド・アドレスによって指示されたバイトの左の一部のバイトが、結果として得られる検査値の計算に含まれないことがある。DFLTCC-XPND機能が指定されており、オペレーションが、条件コード1、2または3がセットされた状態で終了したときには、第1のオペランド・アドレスによって指示されたバイトの右にまだ記憶されてない一部の結果バイトが、結果として得られる検査値の計算に既に含まれていることがある。
エンド・オブ・ブロック・シンボル(EOBS)388:このパラメータ・ブロックのバイト52のビット0からバイト53のビット6までの15個のビットは、エンド・オブ・ブロック(EOB)シンボルを含む。パラメータ・ブロックのエンド・オブ・ブロック長(EOBL)フィールド389は、EOBSフィールドの中のEOBシンボルの長さを指定する。EOBシンボルは、EOBSフィールドの中で左揃えにされる。EOBシンボルによって占有されていないEOBSフィールドのビットは、0として記憶される。データを圧縮するとき、どのタイプのハフマン表が適用されるのかに関わりなく、EOBSフィールドは、オペレーションの出力である。EOBSフィールドは、オペレーションへの入力としては使用されない。
バイト52のビット0は、EOBシンボルの最上位ビットを含む。EOBシンボルの長さが7ビットであるとき、バイト52のビット6は、EOBシンボルの最下位ビットを含む。EOBシンボルの長さが15ビットであるとき、バイト53のビット6は、EOBシンボルの最下位ビットを含む。
FHTを使用するブロックに関しては、DEFLATE規格によって定義されているとおり、EOBシンボルが2進数0000000である。DHTを使用するブロックに関しては、EOBシンボルがDHTによって定義される。EOBシンボルは、プログラムがブロックを閉じる能力を提供するために伝達される。
DFLTCC-XPND機能が指定されているとき、EOBSフィールドは不定だが、変更することができる。
エンド・オブ・ブロック長(EOBL)389:このパラメータ・ブロックのバイト54のビット0~3は、パラメータ・ブロックのEOBSフィールド388の中のエンド・オブ・ブロック(EOB)シンボルの長さを指定する符号なし2進整数を含む。この長さは、EOBシンボルがEOBSフィールドの中で占有するビットの数を指定する。データを圧縮するとき、どのタイプのハフマン表が適用されるのかに関わりなく、EOBLフィールドは、オペレーションの出力である。EOBLフィールドは、オペレーションへの入力としては使用されない。
DFLTCC-XPND機能が指定されているとき、EOBLフィールドは不定だが、変更することができる。
圧縮動的ハフマン表長(CDHTL)366
圧縮動的ハフマン表(CDHT)367:DFLTCC-CMPR機能が指定されており、HTTが1のとき、DHTの圧縮表現は、オペレーションへの入力である。CDHTフィールドは、DFLTCC-CMPR機能によって変更されない。
継続状態バッファ(CSB)392:条件によってCFフィールド373に値1が記憶されたときには、このパラメータ・ブロックのバイト384~1535に内部状態データが記憶され、そうでないときには、このパラメータ・ブロックのバイト384~1535が不定であり、変更することができる。記憶される内部状態データはモデルに依存し、この内部状態データは、続いて、オペレーションを再開するために使用することができる。必須ではないが、プログラムが、この継続状態バッファを、例えば全て0を含むように初期化することが予想される。命令が、0でない条件コードがセットされた状態で終了した後、オペレーションを再開するために命令を再実行する前に、プログラムは、継続状態バッファを変更すべきではなく、そうでない場合、結果は予測不能である。
パラメータ・ブロック370に関してさまざまなフィールドを上で説明したが、他の実施形態では、追加のフィールド、より少数のフィールドもしくは他のフィールド、またはこれらの組合せを含めることができる。
以下では、データの圧縮に関する圧縮オペレーションの一例を説明する。
第2のオペランドの全体が圧縮され、第1のオペランド位置に記憶されると、DFLTCC-CMPR機能の正常完了が起こる。一例では、正常完了によってオペレーションが終了すると、以下のことが起こる。
・パラメータ・ブロックのモデル・バージョン番号(MVN)フィールド363に、モデルに依存する値が記憶される。
・パラメータ・ブロックの継続フラグ(CF)フィールド373が0にセットされる。
・パラメータ・ブロックのサブバイト境界(SBB)フィールド381が更新される。
・パラメータ・ブロックのエンド・オブ・ブロック長(EOBL)フィールド389およびエンド・オブ・ブロック・シンボル(EOBS)フィールド388が更新される。
・パラメータ・ブロックの履歴長(HL)フィールド385が更新される。
・適用可能なときに、パラメータ・ブロックの履歴オフセット(HO)フィールド386が更新される。
・パラメータ・ブロックのオペレーション終了補足コード(OESC)フィールド365が0にセットされる。
・パラメータ・ブロックの検査値フィールド387が更新される。
・汎用レジスタRの中のアドレスが、処理ビット0を含んだ第1のオペランドの処理されたバイト数だけインクリメントされ、汎用レジスタR+1の中の長さが、同じ数だけデクリメントされる。処理ビット0を含んだ第1のオペランドの処理されたバイトの数は、処理された出力ビットの数とSBBの元の値との和である被除数および値8である除数を用いた整数除算の結果得られる整数商である。
・汎用レジスタRの中のアドレスが、処理されたソース・バイトの数だけインクリメントされ、汎用レジスタR+1の中の長さが、同じ数だけデクリメントされる。
・条件コード0がセットされる。
アドレスおよび長さの形成および更新はアドレシング・モードに依存する。
正常完了が起こったとき、オペレーションが終了した後のパラメータ・ブロックのCSBフィールド392は不定である。
一例では、CPUによって決定された数のバイトが処理されると、オペレーションが終了し、以下のことが起こる。
・パラメータ・ブロックの中の継続フラグ(CF)ビット373が1にセットされる。
・パラメータ・ブロックの中の継続状態バッファ(CSB)フィールド392が更新される。
・パラメータ・ブロックのサブバイト境界(SBB)フィールド381が更新される。
・パラメータ・ブロックの履歴長(HL)フィールド385が更新される。
・適用可能なときに、パラメータ・ブロックの履歴オフセット(HO)フィールド386が更新される。
・パラメータ・ブロックの検査値フィールド387が更新される。
・パラメータ・ブロックのモデル・バージョン番号(MVN)フィールド363に、モデルに依存する値が記憶される。
・パラメータ・ブロックのエンド・オブ・ブロック長(EOBL)フィールド389およびエンド・オブ・ブロック・シンボル(EOBS)フィールド388が更新される。
・パラメータ・ブロックのオペレーション終了補足コード(OESC)フィールド365が0にセットされる。
・汎用レジスタRの中のアドレスが、処理ビット0を含んだ第1のオペランドの処理されたバイト数だけインクリメントされ、汎用レジスタR+1の中の長さが、同じ数だけデクリメントされる。処理ビット0を含んだ第1のオペランドの処理されたバイトの数は、処理された出力ビットの数とSBBの元の値との和である被除数および値8である除数を用いた整数除算の結果得られる整数商である。
・汎用レジスタRの中のアドレスが、処理されたソース・バイトの数だけインクリメントされ、汎用レジスタR+1の中の長さが、同じ数だけデクリメントされる。
・条件コード3がセットされる。
アドレスおよび長さの形成および更新はアドレシング・モードに依存する。
このCPUによって決定されるバイトの数はモデルに依存し、命令が実行されるたびに異なる数とすることができる。
命令が、条件コード3がセットされた状態で終了した後、プログラムは、命令に対する入力または出力指定を変更せず、分岐して上に戻って、オペレーションを再開するために命令を再実行することが予想される。
ある種の状況では、条件コード3がセットされた状態で命令を終了したにもかかわらず、パラメータ・ブロックおよび汎用レジスタが更新されない。これらの状況は、DEFLATE変換呼出し命令を実行している間に、CPUが、静止(quiescing)オペレーションまたはCPU再試行を実行したときに起こることがある。これらのケースでは、CPUによって決定される処理されるバイトの数が0であり、第1のオペランド位置にデータが記憶されていることがあり、適用可能なときに、第3のオペランド位置にデータが記憶されていることがあり、対応する変更ビットがセットされている。
一例では、以下の条件のうちのいずれかの条件が当てはまるときに、第1のオペランド長は、オペレーションを完了するのに不十分である。
・命令の実行の開始時に、汎用レジスタR+1の内容によって指定された第1のオペランド長が0である。
・命令の実行中に第1のオペランド長が0に等しくなり、正常完了が起こらない。
一例では、汎用レジスタR+1の内容が0のとき、パラメータ・ブロックのNTおよびSBBフィールドの中の値に関わりなく、第1のオペランド長が0である。
一実施形態では、命令の実行中に第1のオペランド長が0に等しくなると、オペレーションが終了し、以下のことが起こる。
・パラメータ・ブロックの中の継続フラグ(CF)ビット373が1にセットされる。
・パラメータ・ブロックの中の継続状態バッファ(CSB)フィールド392が更新される。
・パラメータ・ブロックのサブバイト境界(SBB)フィールド381が更新される。
・パラメータ・ブロックの履歴長(HL)フィールド385が更新される。
・適用可能なときに、パラメータ・ブロックの履歴オフセット(HO)フィールド386が更新される。
・パラメータ・ブロックの検査値フィールド387が更新される。
・パラメータ・ブロックのモデル・バージョン番号(MVN)フィールド363に、モデルに依存する値が記憶される。
・パラメータ・ブロックのエンド・オブ・ブロック長(EOBL)フィールド389およびエンド・オブ・ブロック・シンボル(EOBS)フィールド388が更新される。
・パラメータ・ブロックのオペレーション終了補足コード(OESC)フィールド365が0にセットされる。
・汎用レジスタRの中のアドレスが、処理ビット0を含んだ第1のオペランドの処理されたバイト数だけインクリメントされ、汎用レジスタR+1の中の長さが、同じ数だけデクリメントされる。処理ビット0を含んだ第1のオペランドの処理されたバイトの数は、処理された出力ビットの数とSBBの元の値との和である被除数および値8である除数を用いた整数除算の結果得られる整数商である。
・汎用レジスタRの中のアドレスが、処理されたソース・バイトの数だけインクリメントされ、汎用レジスタR+1の中の長さが、同じ数だけデクリメントされる。
・条件コード1がセットされる。
アドレスおよび長さの形成および更新はアドレシング・モードに依存する。
一実施形態では、命令の実行の開始時に第1のオペランド長が0のとき、オペレーションが終了し、以下のことが起こる。
・条件コード1がセットされる。
命令が、条件コード1がセットされた状態で終了した後、プログラムは、第1のオペランド長もしくは第1のオペランド・アドレスまたはその両方を変更し、オペレーションを再開するために命令を再実行することが予想される。
適用可能なときには、以下のことに対して、PERストレージ変更イベントが認識される。
・後述するようにパラメータ・ブロックに記憶する。
・第1のオペランド位置に記憶する。
・第3のオペランド位置に記憶する。これは例えば、履歴バッファ・タイプ(HBT)が1(循環)であるときに起こる。
パラメータ・ブロックの全体がPERストレージ・エリア指示に重なるときには、適用可能なときに、パラメータ・ブロックに対してPERストレージ変更イベントが認識される。パラメータ・ブロックの一部分だけがPERストレージ・エリア指示に重なるとき、以下のうちのどれが起こるのかはモデルに依存する。
・適用可能なときに、パラメータ・ブロックに対してPERストレージ変更イベントが認識される。
・適用可能なときに、パラメータ・ブロックの記憶された部分に対してPERストレージ変更イベントが認識される。
HBTが1(循環)であるときには、適用可能なときに、パラメータ・ブロック、第1のオペランド位置、第2のオペランド位置および第3のオペランド位置に対してPER0アドレス検出イベントが認識される。
DFLTC-CCMPR機能に対して条件コード2は適用不可である。
命令が、条件コード1または3がセットされた状態で終了したときには、第2のオペランド位置から参照された入力データが、完全に処理されていること、または部分的にしか処理されていないことがある。入力データが部分的にしか処理されていないときには、第1のオペランド位置、第1のオペランド・アドレス、第1のオペランド長、およびパラメータ・ブロックのSBBフィールドの中の結果が、更新後の第2のオペランド・アドレスおよび第2のオペランド長と首尾一貫した状態を表さない。これらのケースでは、部分的に処理されたデータおよび内部状態情報を、パラメータ・ブロックのCSBフィールドの中に置くことができる。部分的に処理されるデータの量は、オペレーションが終了したときに存在した条件およびモデルに依存する。一部のデータが部分的にしか処理されていないことがあるが、更新後の第1のオペランド・アドレスによって指示された位置の左に記憶された結果は完全であり、それらの結果は、オペレーションが再開したときに変更されない。さらに、プログラムは続いて、オペレーションを再開するために命令を再実行することが予想され、そのときには、オペレーションを再開する前にCSBフィールドの内容が参照される。命令が、条件コード0がセットされた状態で終了したときには、全てのデータが完全に処理されており、入力および出力データに関連した全ての結果は首尾一貫した状態を表す。
命令が、0でない条件コードがセットされた状態で終了した後、オペレーションを再開するために命令を再実行する前に、プログラムは、パラメータ・ブロックのどのフィールドも変更すべきではなく、そうでない場合、結果は予測不能である。
機能コード4:DFLTCC-XPND(展開)
DFLTCC-XPND機能が指定されているときには、復元オペレーションが実行される。このオペレーションは、第2のオペランド位置からの圧縮データ・シンボルをデコードして、圧縮されていないデータにすることを含み、それらのデータは、第1のオペランド位置に記憶される。
一例では、DFLTCC-XPND機能がパラメータ・ブロックを使用する。その一例は、図3K~3Lに関して上で説明されている。
以下では、データの復元に関するDFLTCC-XPNDオペレーションの一例を説明する。
正常完了は、第2のオペランドの中のデータ・セットの最後のブロックの全ての要素がデコードされ、全ての圧縮されていないデータが第1のオペランド位置に記憶されたときに起こる。データ・セットの最後のブロックは、ブロック・ヘッダのBFINALビットが1のときに識別される。一実施形態では、正常完了によってオペレーションが終了すると、以下のことが起こる。
・パラメータ・ブロックのモデル・バージョン番号(MVN)フィールド363に、モデルに依存する値が記憶される。
・パラメータ・ブロックの継続フラグ(CF)フィールド373が0にセットされる。
・パラメータ・ブロックのサブバイト境界(SBB)フィールド381が更新される。
・パラメータ・ブロックの履歴長(HL)フィールド385が更新される。
・適用可能なときに、パラメータ・ブロックの履歴オフセット(HO)フィールド386が更新される。
・パラメータ・ブロックの圧縮動的ハフマン表(CDHT)フィールド367および圧縮動的ハフマン表長(CDHTL)フィールド366が0にセットされる。
・パラメータ・ブロックのオペレーション終了補足コード(OESC)フィールド365が0にセットされる。
・パラメータ・ブロックの検査値フィールド387が更新される。
・汎用レジスタRの中のアドレスが、第1のオペランド位置に記憶されたバイトの数だけインクリメントされ、汎用レジスタR+1の中の長さが、同じ数だけデクリメントされる。
・汎用レジスタRの中のアドレスが、処理ビット0を含んだ第2のオペランドの処理されたバイトの数だけインクリメントされ、汎用レジスタR+1の中の長さが、同じ数だけデクリメントされる。処理ビット0を含んだ第2のオペランドの処理されたバイトの数は、処理された入力ビットの数とSBBの元の値との和である被除数および値8である除数を用いた整数除算の結果得られる整数商である。
・条件コード0がセットされる。
アドレスおよび長さの形成および更新はアドレシング・モードに依存する。
正常完了が起こったとき、オペレーションが終了した後のパラメータ・ブロックのCSBフィールド392は不定である。
一実施形態では、CPUによって決定された数のバイトが処理されると、オペレーションが終了し、以下のことが起こる。
・パラメータ・ブロックの中の継続フラグ(CF)ビット373が1にセットされる。
・パラメータ・ブロックの中の継続状態バッファ(CSB)フィールド392が更新される。
・パラメータ・ブロックのサブバイト境界(SBB)フィールド381が更新される。
・パラメータ・ブロックの圧縮動的ハフマン表(CDHT)フィールド367および圧縮動的ハフマン表長(CDHTL)フィールド366が更新される。2進数10のBTYPE値を有するブロックを処理している間に部分完了が起こったときには、表を表すのに必要でないCDHTフィールドのバイトが0として記憶される。2進数00または01のBTYPE値を有するブロックを処理している間に部分完了が起こったときには、CDHTおよびCDHTLフィールドに0が記憶される。
・パラメータ・ブロックの履歴長(HL)フィールド385が更新される。
・適用可能なときに、パラメータ・ブロックの履歴オフセット(HO)フィールド386が更新される。
・パラメータ・ブロックの検査値フィールド387が更新される。
・パラメータ・ブロックのモデル・バージョン番号(MVN)フィールド363に、モデルに依存する値が記憶される。
・パラメータ・ブロックのオペレーション終了補足コード(OESC)フィールド365が0にセットされる。
・パラメータ・ブロックの未完了機能ステータス(IFS)フィールド383が更新される。
・適用可能なときに、パラメータ・ブロックの未完了機能長(IFL)フィールド384が更新される。
・汎用レジスタRの中のアドレスが、第1のオペランド位置に記憶されたバイトの数だけインクリメントされ、汎用レジスタR+1の中の長さが、同じ数だけデクリメントされる。
・汎用レジスタRの中のアドレスが、処理ビット0を含んだ第2のオペランドの処理されたバイトの数だけインクリメントされ、汎用レジスタR+1の中の長さが、同じ数だけデクリメントされる。処理ビット0を含んだ第2のオペランドの処理されたバイトの数は、処理された入力ビットの数とSBBの元の値との和である被除数および値8である除数を用いた整数除算の結果得られる整数商である。
・条件コード3がセットされる。
アドレスおよび長さの形成および更新はアドレシング・モードに依存する。
このCPUによって決定されるバイトの数はモデルに依存し、命令が実行されるたびに異なる数とすることができる。
命令が、条件コード3がセットされた状態で終了した後、プログラムは、命令に対する入力または出力指定を変更せず、分岐して上に戻って、オペレーションを再開するために命令を再実行することが予想される。
ある種の状況では、条件コード3がセットされた状態で命令を終了したにもかかわらず、パラメータ・ブロックおよび汎用レジスタが更新されない。これらの状況は、DEFLATE変換呼出し命令を実行している間に、CPUが、静止オペレーションまたはCPU再試行を実行したときに起こることがある。これらのケースでは、CPUによって決定される処理されるバイトの数が0であり、第1のオペランド位置にデータが記憶されていることがあり、適用可能なときに、第3のオペランド位置にデータが記憶されていることがあり、対応する変更ビットがセットされている。
例えば以下のことが当てはまるとき、第2のオペランド長は、オペレーションを完了するのに不十分である。
・1に等しいBFINALを有する圧縮データ・ブロックの最後の要素が、オペレーション中にデコードされておらず、第2のオペランド長およびSBBによって指示された第2のオペランドの中のビットの数が、デコードする次の要素のビットの数よりも少なく、第2のオペランド位置からのデータをデコードした全ての結果が、第1のオペランド位置に置かれている。
一実施形態では、第2のオペランド長が、オペレーションを完了するのに不十分であるとき、オペレーションが部分的に完了しており、オペレーションが終了し、以下のことが起こる。
・パラメータ・ブロックの中の継続フラグ(CF)ビット373が1にセットされる。
・パラメータ・ブロックの中の継続状態バッファ(CSB)フィールド392が更新される。
・パラメータ・ブロックのサブバイト境界(SBB)フィールド381が更新される。
・パラメータ・ブロックの圧縮動的ハフマン表(CDHT)フィールド367および圧縮動的ハフマン表長(CDHTL)フィールド366が更新される。2進数10のBTYPE値を有するブロックを処理している間に部分完了が起こったときには、表を表すのに必要でないCDHTフィールドのバイトが0として記憶される。2進数00または01のBTYPE値を有するブロックを処理している間に部分完了が起こったときには、CDHTおよびCDHTLフィールドに0が記憶される。
・パラメータ・ブロックの履歴長(HL)フィールド385が更新される。
・適用可能なときに、パラメータ・ブロックの履歴オフセット(HO)フィールド386が更新される。
・パラメータ・ブロックの検査値フィールド387が更新される。
・パラメータ・ブロックのモデル・バージョン番号(MVN)フィールド363に、モデルに依存する値が記憶される。
・パラメータ・ブロックのオペレーション終了補足コード(OESC)フィールド365が0にセットされる。
・パラメータ・ブロックの未完了機能ステータス(IFS)フィールド383が更新される。
・適用可能なときに、パラメータ・ブロックの未完了機能長(IFL)フィールド384が更新される。
・汎用レジスタRの中のアドレスが、第1のオペランド位置に記憶されたバイトの数だけインクリメントされ、汎用レジスタR+1の中の長さが、同じ数だけデクリメントされる。
・汎用レジスタRの中のアドレスが、処理ビット0を含んだ第2のオペランドの処理されたバイトの数だけインクリメントされ、汎用レジスタR+1の中の長さが、同じ数だけデクリメントされる。処理ビット0を含んだ第2のオペランドの処理されたバイトの数は、処理された入力ビットの数とSBBの元の値との和である被除数および値8である除数を用いた整数除算の結果得られる整数商である。
・条件コード2がセットされる。
アドレスおよび長さの形成および更新はアドレシング・モードに依存する。
命令が、条件コード2がセットされた状態で終了した後、プログラムは、第2のオペランド長もしくは第2のオペランド・アドレスまたはその両方を変更し、オペレーションを再開するために命令を再実行することが予想される。
例えば以下のことが当てはまるとき、第1のオペランド長は、オペレーションを完了するのに不十分である。
・第1のオペランド長が0に等しいために、第2のオペランド位置からのデータをデコードした結果を、第1のオペランド位置に置くことができない。
一実施形態では、第1のオペランド長が、オペレーションを完了するのに不十分であるとき、オペレーションが部分的に完了しており、オペレーションが終了し、以下のことが起こる。
・パラメータ・ブロックの中の継続フラグ(CF)ビット373が1にセットされる。
・パラメータ・ブロックの中の継続状態バッファ(CSB)フィールド392が更新される。
・パラメータ・ブロックのサブバイト境界(SBB)フィールド381が更新される。
・パラメータ・ブロックの圧縮動的ハフマン表(CDHT)フィールド367および圧縮動的ハフマン表長(CDHTL)フィールド366が更新される。2進数10のBTYPE値を有するブロックを処理している間に部分完了が起こったときには、表を表すのに必要でないCDHTフィールドのバイトが0として記憶される。2進数00または01のBTYPE値を有するブロックを処理している間に部分完了が起こったときには、CDHTおよびCDHTLフィールドに0が記憶される。
・パラメータ・ブロックの履歴長(HL)フィールド385が更新される。
・適用可能なときに、パラメータ・ブロックの履歴オフセット(HO)フィールド386が更新される。
・パラメータ・ブロックの検査値フィールド387が更新される。
・パラメータ・ブロックのモデル・バージョン番号(MVN)フィールド363に、モデルに依存する値が記憶される。
・パラメータ・ブロックのオペレーション終了補足コード(OESC)フィールド365が0にセットされる。
・パラメータ・ブロックの未完了機能ステータス(IFS)フィールド383が更新される。
・適用可能なときに、パラメータ・ブロックの未完了機能長(IFL)フィールド384が更新される。
・汎用レジスタRの中のアドレスが、第1のオペランド位置に記憶されたバイトの数だけインクリメントされ、汎用レジスタR+1の中の長さが、同じ数だけデクリメントされる。
・汎用レジスタRの中のアドレスが、処理ビット0を含んだ第2のオペランドの処理されたバイトの数だけインクリメントされ、汎用レジスタR+1の中の長さが、同じ数だけデクリメントされる。処理ビット0を含んだ第2のオペランドの処理されたバイトの数は、処理された入力ビットの数とSBBの元の値との和である被除数および値8である除数を用いた整数除算の結果得られる整数商である。
・条件コード1がセットされる。
アドレスおよび長さの形成および更新はアドレシング・モードに依存する。
命令が、条件コード1がセットされた状態で終了した後、プログラムは、第1のオペランド長もしくは第1のオペランド・アドレスまたはその両方を変更し、オペレーションを再開するために命令を再実行することが予想される。
適用可能なときには、以下のことに対して、PERストレージ変更イベントが認識される。
・本明細書で記載するようにパラメータ・ブロックに記憶する。
・第1のオペランド位置に記憶する。
・第3のオペランド位置に記憶する。これは例えば、履歴バッファ・タイプ(HBT)が1(循環)であるときに起こる。
一例では、パラメータ・ブロックの全体がPERストレージ・エリア指示に重なるとき、適用可能なときに、パラメータ・ブロックに対してPERストレージ変更イベントが認識される。一実施形態では、パラメータ・ブロックの一部分だけがPERストレージ・エリア指示に重なるとき、以下のうちのどれが起こるのかがモデルに依存する。
・適用可能なときに、パラメータ・ブロックに対してPERストレージ変更イベントが認識される。
・適用可能なときに、パラメータ・ブロックの記憶された部分に対してPERストレージ変更イベントが認識される。
HBTが1(循環)であるときには、適用可能なときに、パラメータ・ブロック、第1のオペランド位置、第2のオペランド位置および第3のオペランド位置に対してPER0アドレス検出イベントが認識される。
命令が、条件コード1、2または3がセットされた状態で終了したときには、第2のオペランド位置から参照された入力データが、完全に処理されていること、または部分的にしか処理されていないことがある。入力データが部分的にしか処理されていないときには、第1のオペランド位置、第1のオペランド・アドレス、第1のオペランド長、パラメータ・ブロックのSBBフィールド、パラメータ・ブロックの検査値フィールド、パラメータ・ブロックのHLフィールド、パラメータ・ブロックのIFSフィールド、ならびに適用可能なときには第3のオペランド位置およびパラメータ・ブロックのHOフィールドの中の結果が、更新後の第2のオペランド・アドレスおよび第2のオペランド長と首尾一貫した状態を表さない。これらのケースでは、部分的に処理されたデータおよび内部状態情報を、パラメータ・ブロックのCSBフィールドの中に置くことができる。部分的に処理されるデータの量は、オペレーションが終了したときに存在した条件およびモデルに依存する。一部のデータが部分的にしか処理されていないことがあるが、更新後の第1のオペランド・アドレスによって指示された位置の左に記憶された結果は完全であり、それらの結果は、オペレーションが再開したときに変更されない。さらに、プログラムは続いて、オペレーションを再開するために命令を再実行することが予想され、そのときには、オペレーションを再開する前にCSBフィールドの内容が参照される。オペレーションが、条件コード0がセットされた状態で終了したときには、全てのデータが完全に処理されており、入力および出力データに関連した全ての結果は首尾一貫した状態を表す。
命令が、0でない条件コードがセットされた状態で終了した後、オペレーションを再開するために命令を再実行する前に、プログラムは、パラメータ・ブロックのどのフィールドも変更すべきではなく、そうでない場合、結果は予測不能である。
圧縮データ・ブロック
一例では、ストレージの中の圧縮データ・ブロックのバイトが、例えば左から右へ処理される。圧縮データ・ブロックは、バイト境界で始まることも、もしくはバイト境界で始まらないこともあり、またはバイト境界で終わることも、もしくはバイト境界で終わらないこともある。圧縮データ・ブロックは例えばビット・ストリームである。ブロックの要素は、1ビットずつストレージにロードされる。このビット・ストリームは、ストレージのそれぞれのバイト内では例えば右から左へロードされ、バイト順では例えば左から右へロードされる。要素がハフマン・コードであるとき、ビットは、例えば要素の最上位ビットから最下位ビットへの順番で記憶される。要素がハフマン・コードでないとき、ビットは、例えば要素の最下位ビットから最上位ビットへの順番で記憶される。
図6は、圧縮データ・シンボルを含まない、2進数00のブロック・タイプを有するブロックの例600を示している。一実施形態では、この例に以下のことが当てはまる。
・圧縮データ・ブロック600は、bとして識別されるバイト0のビット4から始まり、b60として識別されるバイト7のビット0で終わる、ビット・ストリーム602からなる。
・このビット・ストリームの中で遭遇する最初の要素は、バイト0のビット4のBFINAL(ブロック・ヘッダ最終ビット)である。
・このビット・ストリームの中で遭遇する2番目の要素は、バイト0のビット2~3のBTYPE(ブロック・タイプ)である。この例では、BTYPEが2進数00である。
・BTYPEが2進数00であるとき、BTYPEの左、バイト境界の右のビットは無視される。この例では、それらのビットがバイト0のビット0~1である。
・このビット・ストリームの中で遭遇する3番目の要素は、LENフィールドの最下位バイト(LSB)であり、その次がLENフィールドの最上位バイト(MSB)である。LENフィールドは、ブロックの中の、リテラル・データを含むバイトの数を指定する。リテラル・データは例えば圧縮されていないデータである。このビット・ストリームではリテラル・データを含むバイトがNLENフィールドの後ろにある。NLENは、LENの1の補数である。一例では、バイト1~2が、LENフィールドを、リトルエンディアン・バイト順で含む。
・このビット・ストリームの中でLENフィールドの次に遭遇する要素は、NLENフィールドの最下位バイトであり、その次がNLENフィールドの最上位バイトがある。バイト3~4は、NLENフィールドを、リトルエンディアン・バイト順で含む。NLENフィールドは、LENフィールドの1の補数である。
・このビット・ストリームの中でNLENフィールドの次に遭遇する要素は、リテラル・バイトとして識別される、圧縮されていないデータである。バイト5~7は、圧縮されていないデータを含み、これらのデータは、このブロックを生成するために使用されたソース・データから変更されていない。
・このブロックに含まれる要素はいずれもハフマン・コードではない。DEFLATE規格によって定義されているように、このブロックの中の全ての要素は、その要素の最下位ビットから最上位ビットへの順番でビット・ストリーム順に記憶される。LEN、NLENおよびリテラル要素はそれぞれ、バイト境界で整列した整数個のバイトであるため、これらの要素はバイト単位で処理することができ、ビット単位で処理する必要は必ずしもない。
図7は、固定ハフマン表(FHT)を使用して生成された圧縮データ・シンボルを含む、2進数01のブロック・タイプを有するブロックの例700を示している。一実施形態では、この例に以下のことが当てはまる。
・圧縮データ・ブロック700は、bとして識別されるバイト0のビット4から始まり、b89として識別されるバイト11のビット3で終わる、ビット・ストリーム702からなる。
・このビット・ストリームの中で遭遇する最初の要素は、バイト0のビット4のBFINALである。
・このビット・ストリームの中で遭遇する2番目の要素は、バイト0のビット2~3のBTYPEである。この例では、BTYPEが2進数01である。
・固定ハフマン表(FHT)はこのブロックの構成要素ではない。
・このビット・ストリームの中で遭遇する3番目の要素は、バイト0のビット1から始まる、最初の圧縮データ・シンボルである。一例では、圧縮データ・シンボルが以下のサブ要素からなり、このビット・ストリームの中でそれらのサブ要素には、それらが記載された順番で遭遇する。
1.可変長のハフマン・コード。このコードの最上位ビットはこのコードの長さを指示する。このビット・ストリームの中で、このコードには、このコードの最上位ビットから最下位ビットへの順番で遭遇する。このコードが、リテラル値またはエンド・オブ・ブロック・シンボルを表しているとき、このコードは、その圧縮データ・シンボルの唯一のサブ要素である。このコードが、履歴バッファを指すポインタの長さを表しているとき、このコードの後には、圧縮データ・シンボルの後続のサブ要素が続く。
2.適用可能なときには、DEFLATE規格によって指定されているとおり、このハフマン・コードの後に、ポインタ長を表す余剰長さビット(extra length bit)が続くことができる。このビット・ストリームの中で、余剰長さビットには、その余剰長さビットの最下位ビットから最上位ビットへの順番で遭遇する。
3.このビット・ストリームの中で遭遇する次のサブ要素は、履歴バッファを指すポインタの5ビット距離コードである。このビット・ストリームの中で、この距離コードには、例えば距離コードの最上位ビットから最下位ビットへの順番で遭遇する。
4.適用可能なときには、DEFLATE規格によって指定されているとおり、この距離コードの後に、余剰距離ビットが続くことができる。このビット・ストリームの中で、余剰距離ビットには、その余剰距離ビットの最下位ビットから最上位ビットへの順番で遭遇する。
・一例として、バイト0のビット0~1、バイト1から9の全てのビット、およびバイト10のビット2~7は、圧縮データ・シンボルのビットを含む。
・このビット・ストリームの中で遭遇する最後の要素は、単一のサブ要素を含む圧縮データ・シンボルであり、この単一のサブ要素は、エンド・オブ・ブロック(EOB)シンボルを表すハフマン・コードである。2進数01のBTYPEを有するブロックに対するEOBシンボルは2進数0000000である。この例では、バイト10のビット1がEOBシンボルの最上位ビットを含んでおり、バイト11のビット3がEOBシンボルの最下位ビットを含んでいる。
・バイト11のビット3は、このビット・ストリームの最後のビットを含んでおり、このビットが、この圧縮データ・ブロックの最後のビットである。
図8は、動的ハフマン表(DHT)を使用して生成された圧縮データ・シンボルを含む、2進数10のブロック・タイプを有するブロックの例800を示している。一実施形態では、この例に以下のことが当てはまる。
・圧縮データ・ブロック800は、bとして識別されるバイト0のビット4から始まり、b89として識別されるバイト11のビット3で終わる、ビット・ストリーム802からなる。
・このビット・ストリームの中で遭遇する最初の要素は、バイト0のビット4のBFINALである。
・このビット・ストリームの中で遭遇する2番目の要素は、バイト0のビット2~3のBTYPEである。この例では、BTYPEが2進数10である。
・このビット・ストリームの中で遭遇する3番目の要素は、バイト0のビット1から始まる、動的ハフマン表(DHT)の圧縮表現である。一例では、このDHTの圧縮表現が以下のサブ要素からなり、このビット・ストリームの中でそれらのサブ要素には、それらが記載された順番で遭遇する。
1.HLIT:この5ビットHLITサブ要素と257との和が、リテラル・バイト、EOBシンボルおよび重複ストリング長を表すハフマン・コードの数を指定する。HLITの有効値は例えば0から29の範囲にある。このビット・ストリームの中で、HLITビットには、そのHLITサブ要素の最下位ビットから最上位ビットへの順番で遭遇する。この例では、bとして識別されるバイト0のビット1が、HLITサブ要素の最下位ビットである。
2.HDIST:この5ビットHDISTサブ要素と1との和が、重複ストリング・ポインタ距離を表すハフマン・コードの数を指定する。HDISTの有効値は例えば0から29の範囲にある。このビット・ストリームの中で、HDISTビットには、そのHDISTサブ要素の最下位ビットから最上位ビットへの順番で遭遇する。
3.HCLEN:この4ビットHCLENサブ要素と4との和が、コード長を表すハフマン・コードの数を指定する。HCLENの有効値は例えば0から15の範囲にある。このビット・ストリームの中で、HCLENビットには、そのHCLENサブ要素の最下位ビットから最上位ビットへの順番で遭遇する。
4.圧縮DHTに対して定義されたそれぞれのコード長に対するビット長を指定するコードのシーケンス。コードの数は、HCLENと4との和に等しい。それぞれのコードは3ビットである。
5.リテラル・バイト、EOBシンボルおよび重複ストリング長からなるセットのそれぞれの要素に対するコード長を指定するコードのシーケンス。指定されたコード長の数は、HLITと257との和に等しい。
リテラル・バイト、EOBシンボルおよび重複ストリング長のセットに対する最後のコード長(CL)が16、17または18であり、CLに続く余剰ビットが、そのセットに対して定義された数よりも多くの要素に対してCLを繰り返すことを指定しているとき、そのコード長は、重複ストリング・ポインタ距離のセットにも適用される。リテラル・バイト、EOBシンボルおよび重複ストリング長のセットに対するコード長を指定するコードのシーケンス、およびそれに続く、重複ストリング・ポインタ距離に対するコード長を指定するコードのシーケンスは、両方のセットに対する連続シーケンスである。
6.重複ストリング・ポインタ距離からなるセットのそれぞれの要素に対するコード長を指定するコードのシーケンス。指定されたコード長の数はHDISTと1との和に等しい。
・このビット・ストリームの中で遭遇する4番目の要素は、最初の圧縮データ・シンボルである。一実施形態では、圧縮データ・シンボルが以下のサブ要素からなり、このビット・ストリームの中でそれらのサブ要素には、それらが記載された順番で遭遇する。
1.可変長のハフマン・コード。このコードの最上位ビットはこのコードの長さを指示する。このビット・ストリームの中で、このコードには、このコードの最上位ビットから最下位ビットへの順番で遭遇する。このコードが、リテラル値またはエンド・オブ・ブロック・シンボルを表しているとき、このコードは、その圧縮データ・シンボルの唯一のサブ要素である。このコードが、履歴バッファを指すポインタの長さを表しているとき、このコードの後には、圧縮データ・シンボルの後続のサブ要素が続く。
2.適用可能なときには、DEFLATE規格によって指定されているとおり、このハフマン・コードの後に、ポインタ長を表す余剰長さビットが続くことができる。このビット・ストリームの中で、余剰長さビットには、例えばその余剰長さビットの最下位ビットから最上位ビットへの順番で遭遇する。
3.このビット・ストリームの中で遭遇する次のサブ要素は、履歴バッファを指すポインタの5ビット距離コードである。このビット・ストリームの中で、この距離コードには、例えば距離コードの最上位ビットから最下位ビットへの順番で遭遇する。
4.適用可能なときには、DEFLATE規格によって指定されているとおり、この距離コードの後に、余剰距離ビットが続くことができる。このビット・ストリームの中で、余剰距離ビットには、例えばその余剰距離ビットの最下位ビットから最上位ビットへの順番で遭遇する。
・このビット・ストリームの中で遭遇する後続のビット、例えばバイト10のビット5を含む、バイト10のビット5までの後続のビットは、圧縮データ・シンボルのビットを含む。
・このビット・ストリームの中で遭遇する最後の要素は、単一のサブ要素を含む圧縮データ・シンボルであり、この単一のサブ要素は、エンド・オブ・ブロック(EOB)シンボルを表すハフマン・コードである。この例では、バイト10のビット4がEOBシンボルの最上位ビットを含んでおり、バイト11のビット3がEOBシンボルの最下位ビットを含んでいる。
・バイト11のビット3は、このビット・ストリームの最後のビットを含んでおり、このビットが、この圧縮データ・ブロックの最後のビットである。
これらのさまざまなブロック・タイプの上記の説明では、ある種の定数値、および特定のビット、バイト、方向などを指定した。これらは例に過ぎない。他の実施形態では、他の定数値、ビット、バイト、方向などを指定することができる。
圧縮データ・セットの処理
DEFLATE変換呼出し命令の例示的な使用を示し、パラメータ・ブロックのさまざまなフィールドの説明を補強するために、圧縮データ・セットの処理の例を提供する。これらの例は、可能な全てのシナリオ、要件および能力を説明するものではなく、それらのうちのさまざまなシナリオ、要件もしくは能力またはそれらの組合せを示すものである。それらの例および説明は、例えば、ストレージの中の圧縮データ・セットに適用される。ストレージの中の圧縮データ・セットの一例が図9に示されている。示されているように、圧縮データ・セット900は、複数の圧縮データ・ブロック902を含み、データ・セット900の始まりは、圧縮データ・セット開始アドレス(CDSBA)904によって示される。
一実施形態では、本明細書に記載されたこれらの例に関して、圧縮データ・セットを処理するプログラムが、以下のことを考慮することが意図されている。
・圧縮データ・セット全体を処理するためにDEFLATE変換呼出し命令を複数回使用することにより、単一のパラメータ・ブロックを定義すること、および参照することができる。パラメータ・ブロックの検査値フィールド387および検査値タイプ・フィールド375は、圧縮データ・セットの中の圧縮データ・ブロック(例えば全てのブロック)に適用される。パラメータ・ブロックのサブバイト境界フィールド381は、個々のブロック間の遷移に適用される。履歴長385および履歴オフセット386は、複数のブロックに適用することができる。一例において、パラメータ・ブロックの残りのフィールドは、DEFLATE変換呼出し命令の特定の実行によって処理されている個々の圧縮データ・ブロックに適用されるだけである。
・個々の検査値は、例えば、圧縮データ・セットが表す圧縮されていないデータの全体に適用される。
・ブロック1の中の最初の圧縮データ・シンボルに関しては、参照すべき履歴は存在しない。ブロック1の中の後続のシンボルは、ブロック1の中の以前に遭遇したシンボルに対応する履歴を参照することができる。ブロック2の中のシンボルは、ブロック2および1の中の以前に遭遇したシンボルに対応する履歴を参照することができる。ブロック3の中のシンボルは、ブロック3、2および1の中の以前に遭遇したシンボルに対応する履歴を参照することができる。
図10は、図9で説明した圧縮データ・セット900の中のデータを圧縮するために使用される見本プログラム1000の一部分の一例を示している。さらに、図11は、図10のIABLK1(1002)として示された命令アドレスに位置するDFLTCC命令の実行中に使用されるパラメータ・ブロックのある種のフィールドに対する値を示している。例えば、図11は、さまざまなパラメータ・ブロック・フィールド1100、圧縮オペレーションの開始時のそれらのフィールドに対する値1102、条件コード1、2または3がセットされたときのオペレーションの終了時のそれらのフィールドに対する値1104、および条件コード0がセットされたときのオペレーションの終了時のそれらのフィールドに対する値1106を示している。
同様に、図12は、図10のIABLK2(1004)として示された命令アドレスに位置するDFLTCC命令の実行中に使用されるパラメータ・ブロックのある種のフィールドに対する値を示している。これらの図は、圧縮データ・セットの全体を処理するためにDEFLATE変換呼出し命令を複数回使用することに関連した詳細の一部を示している。
さらに、図13を参照すると、図9の圧縮データ・セットからのデータを解凍するために使用される見本プログラム1300の一部分の一例が示されている。
データの圧縮
データを圧縮するプロセスは、1つまたは複数の圧縮データ・ブロックを生成することを含む。DEFLATE変換呼出し命令の圧縮機能は、個々のブロックの部分を構築するために使用される。この部分がブロック全体であることもある。この機能は、2進数00ではなく、2進数01または10のブロック・タイプ(BTYPE)を有するブロックの部分を生成する。パラメータ・ブロックの新規タスク・ビット(NT)が1のときに、圧縮データの最初のブロックが生成され、以前に実行された圧縮オペレーションによる、参照すべき履歴は存在しない。
一例では、個々のブロックが、以下の要素を、それらの要素が記載された順に含む。
1.最終ブロック指示(BFINAL)
2.ブロック・タイプ(BTYPE)
3.動的ハフマン表の圧縮フォーマット(適用可能なとき)
4.圧縮データ・シンボル
5.エンド・オブ・ブロック(EOB)シンボル
圧縮オペレーションは、ブロックに対して定義された順序で指定されたこれらの要素を生成する。これらの要素は、ストレージの中のバイト境界間で始まることまたは終わることがある。サブバイト境界(SBB)は、最初の要素を第1のオペランド位置に記憶することに適用される。圧縮データ・ブロックはビット・ストリームである。ブロックの構成要素は、1ビットずつストレージにロードされる。一例として、このビット・ストリームは、ストレージのそれぞれのバイト内では右から左へロードされ、バイト順では左から右へロードされる。
SBBが0でないとき、第1のオペランド位置の最初のバイトの参照は更新参照(update reference)である。
第2のオペランド位置からの圧縮されていないデータが圧縮され、第1のオペランド位置に圧縮データ・シンボルとして記憶される。
命令の実行の開始時に第1のオペランド長が0のとき、第1のオペランドにはアクセスされず、汎用レジスタRおよびR+1の中の対応するそれぞれの第1のオペランド・アドレスおよび第1のオペランド長は変更されない。これは、命令の実行の開始時にCFフィールド373(図3L)の値が0または1のときに適用される。
命令の実行の開始時に第2のオペランド長が0のとき、第2のオペランドにはアクセスされず、汎用レジスタRおよびR+1の中の対応するそれぞれの第2のオペランド・アドレスおよび第2のオペランド長は変更されない。一例として、以下のケースに対しては、命令の実行の開始時に第2のオペランド長が0である。
・オペレーションを再開するために、命令が再実行されており(命令の実行の開始時にパラメータ・ブロックのCFフィールド373が1であり)、オペレーションの完了を、パラメータ・ブロックのCSBフィールド392を参照し、第2のオペランドを参照せずに実行することができる。
一実施形態では、プログラムが、以下のオペレーションを実行するためにDEFLATE変換呼出し命令を使用することではない。
・空の圧縮データ・ブロックを生成する。空の圧縮データ・ブロックは、例えば、ブロック・ヘッダ、DHTの圧縮フォーマット(適用可能なとき)およびEOBシンボルからなる。
・開いている圧縮データ・ブロックを閉じる。すなわち、圧縮データ・ブロックの終わりにEOBシンボルを記憶するだけである。
圧縮アルゴリズムは、第2のオペランド位置からの現在圧縮されているデータと一致するバイトのストリングを探して、最近に圧縮されたデータの更新後の履歴を探索することを含む。一実施形態では、圧縮オペレーションが始まる前または再開する前に、以下のことが当てはまる。
・新規タスク(NT)374が1のとき、参照に使用可能な初期履歴は存在しない。
・NTが0であり、汎用レジスタ0(HBT)のビット56が0(インライン)のとき、参照に使用可能な初期履歴は、第2のオペランドの左端バイトの左、第2のオペランドの左端バイトの隣に位置し、初期履歴の長さは、パラメータ・ブロックの履歴長(HL)フィールド385によって指定されている。
・NTが0であり、汎用レジスタ0(HBT)のビット56が1(循環)のとき、参照に使用可能な初期履歴は、第3のオペランド位置に、パラメータ・ブロックの履歴オフセット(HO)フィールド386および履歴長(HL)フィールド385によって指定されたとおりに位置する。
圧縮オペレーションを実行するために履歴のどのバイトが使用されるのかに関わりなく、圧縮オペレーション中に、履歴全体に対するフェッチ型参照を実施することができる。さらに、履歴バッファ・タイプが循環であるときには、圧縮オペレーションを実行するために履歴のどのバイトが使用されるのかに関わりなく、32キロバイト履歴バッファの全体に対するフェッチ型参照を実施することができる。
圧縮オペレーション中に履歴が更新される。汎用オペランド・データ例外条件に遭遇することなく、ソース・データの1つまたは複数のバイトをエンコードして圧縮データ・シンボルにした後、ソース・バイトが履歴の終わりに連結される。ソース・データの最も最近に処理された、最大32キロバイトまでのバイトは、ソース・データの後続のバイトを処理している間の参照に使用可能な更新後の履歴を構成する。
一例では、圧縮オペレーションが終了したとき、続いてオペレーションを再開するためまたは別のオペレーションを開始するために使用可能な結果として得られる履歴には、以下のことが適用される。
・HBTがインラインであるときには、履歴が更新されるときに、第2のオペランド位置に対するストレージ更新が必要ない。更新後の第2のオペランド・アドレスおよび更新後のHLが、結果として得られる履歴の更新後の位置および更新後の長さを指定する。
・HBTが循環であるときには、履歴が更新されるときに、第3のオペランド位置に対するストレージ更新が実行される。第3のオペランド・アドレス、更新後のHOおよび更新後のHLが、結果として得られる履歴の更新後の位置および更新後の長さを指定する。
例として、図14A~14Cは、DFLTCC-CMPR機能およびインライン履歴(例えばビット310=0)が指定された、DEFLATE変換呼出し命令の複数回の実行の前および後の、それぞれの実行が部分完了で終了したときの、第2のオペランドに対するインライン履歴バッファの位置を示している。例えば、図14Aは、DFLTCC-CMPR実行番号1の前のインライン履歴を示しており、図14Bは、DFLTCC-CMPR実行番号2の前、実行番号1の後のインライン履歴を示しており、図14Cは、DFLTCC-CMPR実行番号2の後のインライン履歴を示している。図14Cに示された説明は、図14Aおよび14Bにも適用される。
汎用レジスタ0のビット56によって指定されたHBT(履歴バッファ・タイプ)が循環(例えばビット310=1)であるとき、履歴は、例えば第3のオペランド位置に位置する32キロバイト・バッファの中に維持される。バッファ(HB)内の履歴の最初のバイトの位置は、例えば汎用レジスタRの内容と履歴オフセット(HO)386(図3L)との和によって指示される。履歴の最初のバイトは、バッファの中の、圧縮されていないデータの最も早く処理されたバイトである。一例として、バッファ内の履歴の最後のバイトの位置(HE)は、下式によって指示される。
HE=R+modulo32K(HO+HL-1)
履歴の最後のバイトは、バッファの中の、圧縮されていないデータの最も最近に処理されたバイトである。履歴オフセット(HO)386(図3L)と履歴長(HL)385との和が、第3のオペランドのサイズ(例えば32キロバイト)を超えるとき、履歴は、第3のオペランドの終わりから第3のオペランドの始まりにラップ(wrap)する。
例として、図15A~15Eは、DFLTCC-CMPR機能および循環履歴バッファ(ビット310=1)が指定された、DEFLATE変換呼出し命令の複数回の実行の前および後の、それぞれの実行が部分完了で終了したときの、循環履歴バッファ内の履歴の位置を示している。例えば、図15Aは、DFLTCC実行番号1の前の循環履歴バッファを示しており、図15Bは、DFLTCC実行番号2の前、実行番号1の後の循環バッファを示しており、図15Cは、DFLTCC実行番号3の前、実行番号2の後の循環バッファを示しており、図15Dは、DFLTCC実行番号4の前、実行番号3の後の循環バッファを示しており、図15Eは、DFLTCC実行番号4の後の循環バッファを示している。図15Eに示された説明は、図15A~15Dにも適用される。
一例では、HBTが循環であり、第2のオペランド位置からの処理されたバイトの数が例えば32,768よりも少ないときには、以下のことが適用される。
・第3のオペランド位置の中のバイトの範囲に記憶が実施される。このバイトの範囲は、例えば下式によって指示される位置を含み、その位置から始まる。
+modulo32K(HOO+HLO)、この式で、
HOO:命令実行前の履歴オフセット
HLO:命令実行前の履歴長
である。
このバイトの範囲は、例えば下式によって指示される位置を含み、その位置で終わる。
+modulo32K(HOO+HLO+BP-1)、この式で、
BP:命令の実行中に処理された、第2のオペランド位置からのバイトの数
である。
上で説明したバイトの範囲に実施される記憶は、一例として、ストア・タイプ・アクセス例外、PERストレージ変更イベントおよびセッティング変更ビットにさらされる。
・ストレージ位置の内容を変更しない記憶であって、必要でない記憶は、第3のオペランド位置の中の、上で説明した範囲に含まれないバイトに実施することができる。このような位置への記憶も、ストア・タイプ・アクセス例外、PERストレージ変更イベントおよびセッティング変更ビットにさらされる。
HBTが循環であり、第2のオペランド位置からの処理されたバイトの数が例えば32,768以上であるときには、第3のオペランド位置の全てのバイトに記憶が実施され、この記憶は、ストア・タイプ・アクセス例外、PERストレージ変更イベントおよびセッティング変更ビットにさらされる。
ブロック継続フラグ(BCF)377が0のときには、BFINALおよびそれに続くBTYPEを含む3ビット・ブロック・ヘッダが、第1のオペランド位置に記憶される。このブロック・ヘッダのBFINALビットは、パラメータ・ブロックのブロック・ヘッダ最終ビット(BHF)379に等しくなるようにセットされる。ハフマン表タイプ(HTT)376が0のときには、ブロック・ヘッダのBTYPEフィールドが例えば2進数01にセットされ、HTTが1のときには、ブロック・ヘッダのBTYPEフィールドが例えば2進数10にセットされる。ブロック・ヘッダが記憶されるとき、BFINALビットは、第1のオペランドの最初のバイトの中のSBBによって指定されたビットに記憶される。続いて、BTYPEが第1のオペランド位置に記憶される。BCFが1のときにはブロック・ヘッダが記憶されない。
ハフマン表タイプ(HTT)が1のときには、汎用オペランド・データ例外条件がないか、パラメータ・ブロックの中に指定された動的ハフマン表(DHT)367の圧縮フォーマットが調べられる。指定されたDHTの圧縮フォーマットに関して汎用オペランド・データ例外条件が存在するとき、その圧縮DHTは無効と称され、データの圧縮には使用されない。汎用オペランド・データ例外条件の例示的な定義が下でさらに説明される。適正な機能ハフマン・ツリーを指定するためにハフマン・アルゴリズムが必要とする長さよりも大きい、コード長に対するビット長、またはリテラル・バイト、EOBシンボル、重複ストリング長もしくは重複ストリング・ポインタ距離に対するコード長を、DHTの圧縮フォーマットが指定しているとき、圧縮DHTは、依然として、機能DHTを導出し、データを圧縮するために使用される。ブロック継続フラグ(BCF)が0、HTTが1のときには、パラメータ・ブロックのCDHTフィールド367の中に指定されたDHTの圧縮フォーマットが第1のオペランド位置に記憶される。
圧縮オペレーション中に、第2のオペランド位置からのソース・データが、圧縮データ・シンボルにエンコードされる。このエンコーディングの部分として、ソース・データは履歴と比較される。一致が見つからなかったとき、ソース・データの中間表現は、ソース・データと同じリテラル・バイトである。一致が見つかったとき、ソース・データの中間表現は、ソース・データの重複コピーを含む履歴内の位置を指すポインタである。ポインタは、長さおよび距離からなる。ポインタの長さは、履歴の中のストリングと一致するソース・データ・バイトの数である。ポインタの距離は、履歴の終わりから、ソース・データと一致するストリングの始まりまでのバイトの数である。一例では、ソース・データの中間表現をエンコードして圧縮データ・シンボルにするために、ハフマン表からの2つのハフマン・コード・ツリーが使用される。ハフマン表タイプ(HTT)が0のときには、DEFLATE規格によって記述されているように、固定ハフマン表(FHT)が、中間結果をエンコードするために使用される2つのハフマン・コード・ツリーを指定する。HTT376が1のときには、パラメータ・ブロックのCDHTフィールド367の中に指定されたDHTの圧縮表現から導出された動的ハフマン表(DHT)が、中間結果をエンコードするために使用される2つのハフマン・コード・ツリーを指定する。このエンコーディングは、DEFLATE規格によって記述されているとおりに実行される。ソース・データの中間表現をエンコードするために使用されるハフマン・コードを指定しない非ユニバーサルDHTが使用されたときには、汎用オペランド・データ例外が認識される。結果として得られる圧縮データ・シンボルのビットは、第1のオペランド位置に結果を記憶する前に、DEFLATE規格によって指定された順序で配置される。
一例では、重複ストリング長が3から258バイトの範囲にある。
本明細書に記載されているとおり、さらなるソース・データを処理する前に履歴は更新される。
このプロセスは、一例では全てのソース・バイトが処理されるまで、繰り返される。
ソース・バイト(例えば全てのソース・バイト)が処理され、ブロック終了制御(BCC)378が1にされた後、第1のオペランド位置に、エンド・オブ・ブロック(EOB)シンボルが記憶される。固定ハフマン表が使用されているときには、EOBシンボルに対して2進数0000000のハフマン・コードが使用される。動的ハフマン表(DHT)が使用されているときには、EOBシンボルに対して使用されるハフマン・コードが、DHTによって指定される。EOBシンボルのビットは、第1のオペランド位置にEOBシンボルを記憶する前に、DEFLATE規格によって指定された順序で配置される。
一例では、(EOBシンボルを含む)オペレーションの最後の圧縮データ・シンボルが、記憶する最後のバイトの一部分だけを占めるとき、最後のシンボルの一部分を含まないビットは0として記憶される。
一実施形態では、最後の圧縮データ・シンボルを処理した後、以下のことが起こる。
・パラメータ・ブロックのモデル・バージョン番号(MVN)フィールド363に、モデルに依存する値が記憶される。
・パラメータ・ブロックのサブバイト境界(SBB)フィールド381が更新される。
・パラメータ・ブロックのエンド・オブ・ブロック長(EOBL)フィールド389およびエンド・オブ・ブロック・シンボル(EOBS)フィールド388が更新される。
・汎用レジスタRの中のアドレスが、処理ビット0を含んだ第1のオペランドの処理されたバイト数だけインクリメントされ、汎用レジスタR+1の中の長さが、同じ数だけデクリメントされる。処理ビット0を含んだ第1のオペランドの処理されたバイトの数は、処理された出力ビットの数とSBBの元の値との和である被除数および値8である除数を用いた整数除算の結果得られる整数商である。
・汎用レジスタRの中のアドレスが、処理されたソース・バイトの数だけインクリメントされ、汎用レジスタR+1の中の長さが、同じ数だけデクリメントされる。
アドレスおよび長さの形成および更新はアドレシング・モードに依存する。
ソース・データを圧縮するのと同時に、ソース・データは、上で説明した32ビット検査値の生成に入力される。結果として得られる検査値は、パラメータ・ブロックの検査値フィールド387に記憶される。
データの復元
一実施形態では、圧縮データ・セットをデコードして、圧縮されていないデータにするために、DEFLATE変換呼出し命令の展開機能が使用される。第2のオペランド位置の圧縮データ・セットは、1つまたは複数の連続する圧縮データ・ブロックを含む。一例では、このデータ・セットのブロックが左から右へ処理され、ブロックのバイトが例えば左から右へ処理される。これらのブロックは、バイト境界で始まることも、もしくはバイト境界で始まらないこともあり、またはバイト境界で終わることも、もしくはバイト境界で終わらないこともある。それぞれのブロックは、データ・セットの中の他のブロックとは独立にデコードされる。汎用レジスタRは、データ・セットの中の第1のブロックの左端バイトの論理アドレスを指定する。データ・セットの中の最後のブロックは、処理中に、BFINALビットが1に等しいときに遭遇するブロックである。一例では、処理する3つのタイプのブロックが存在する。ブロックの内容をデコードする技術はブロック・タイプ(BTYPE)の関数である。
このオペレーションが始まるとき(例えばパラメータ・ブロックの継続フラグ・フィールド373が0のとき)、汎用レジスタR、新規タスク(NT)フィールド374およびサブバイト境界(SBB)フィールド381によって指示されたビットは、圧縮データ・ブロックの最初のビット(ブロック・ヘッダのBFINALビット)と解釈される。
展開機能は、最近デコードされた圧縮されていないデータの更新後の履歴を参照することを含む。一実施形態では、復元オペレーションが始まる前または再開する前に、以下のことが当てはまる。
・新規タスク(NT)374が1のとき、参照に使用可能な初期履歴は存在しない。
・NTが0であり、汎用レジスタ0(HBT)のビット56が0(インライン)のとき、参照に使用可能な初期履歴は、第1のオペランドの左端バイトの左、第1のオペランドの左端バイトの隣に位置し、初期履歴の長さは、パラメータ・ブロックの履歴長(HL)フィールド385によって指定されている。
・NTが0であり、汎用レジスタ0(HBT)のビット56が1(循環)のとき、参照に使用可能な初期履歴は、第3のオペランド位置に、パラメータ・ブロックの履歴オフセット(HO)フィールド386および履歴長(HL)フィールド385によって指定されたとおりに位置する。
オペレーションを実行するために履歴のどのバイトが使用されるのかに関わりなく、オペレーション中に、履歴全体に対するフェッチ型参照を実施することができる。さらに、履歴バッファ・タイプが循環であるときには、オペレーションを実行するために履歴のどのバイトが使用されるのかに関わりなく、履歴バッファ(例えば32キロバイト)の全体に対するフェッチ型参照を実施することができる。
復元オペレーション中に履歴が更新される。汎用オペランド・データ例外条件に遭遇することなくソース・データをデコードした後、結果として得られる圧縮されていないデータのバイトが、履歴の終わりに連結される。圧縮されていないデータの最も最近にデコードされた、例えば最大32キロバイトまでのバイトは、後続のソース・データを処理している間の参照に使用可能な更新後の履歴を構成する。
一例では、復元オペレーションが終了したとき、続いてオペレーションを再開するためまたは別のオペレーションを開始するために使用可能な結果として得られる履歴には、以下のことが適用される。
・HBTがインラインであるときには、第1のオペランド位置に対するストレージ更新も、結果として得られる履歴に対する更新を構成する。更新後の第1のオペランド・アドレスおよび更新後のHLが、結果として得られる履歴の更新後の位置および更新後の長さを指定する。
・HBTが循環であるときには、履歴が更新されるときに、第3のオペランド位置に対するストレージ更新が実行される。第3のオペランド・アドレス、更新後のHOおよび更新後のHLが、結果として得られる履歴の更新後の位置および更新後の長さを指定する。
例として、図16A~16Cは、DFLTCC-XPND機能およびインライン履歴が指定された、DEFLATE変換呼出し命令の複数回の実行の前および後の、それぞれの実行が部分完了で終了したときの、第1のオペランドに対するインライン履歴バッファの位置の例を示している。履歴長(HL)385は、オペレーション中に変更される。例えば、図16Aは、DFLTCC-XPND実行番号1の前のインライン履歴の一例を示しており、図16Bは、DFLTCC-XPND実行番号2の前、実行番号1の後のインライン履歴の例を示しており、図16Cは、DFLTCC-XPND実行番号2の後のインライン履歴の例を示している。図16Cに示された説明は、図16A~16Bにも適用される。
汎用レジスタ0のビット56によって指定されたHBTが循環であるとき、履歴は、例えば第3のオペランド位置に位置する32キロバイト・バッファの中に維持される。バッファ(HB)内の履歴の最初のバイトの位置は、汎用レジスタRの内容と履歴オフセット(HO)386との和によって指示される。履歴の最初のバイトは、バッファの中の、圧縮されていないデータの最も早く処理されたバイトである。バッファ内の履歴の最後のバイトの位置(HE)は、例えば下式によって指示される。
HE=R+modulo32K(HO+HL-1)
履歴の最後のバイトは、バッファの中の、圧縮されていないデータの最も最近に処理されたバイトである。履歴オフセット(HO)と履歴長(HL)との和が、第3のオペランドのサイズ(例えば32キロバイト)を超えるとき、履歴は、第3のオペランドの終わりから第3のオペランドの始まりにラップする。本明細書に記載された図15A~15Eは、DFLTCC-XPND機能および循環履歴バッファが指定された、DEFLATE変換呼出し命令の複数回の実行の前および後の、それぞれの実行が部分完了で終了したときの、循環履歴バッファ内の履歴の位置の例を示している。
一例では、HBTが循環であり、第1のオペランド位置に記憶されたバイトの数が例えば32,768よりも少ないときには、以下のことが適用される。
・第3のオペランド位置の中のバイトの範囲に記憶が実施される。このバイトの範囲は、下式によって指示される位置を含み、その位置から始まる。
+modulo32K(HOO+HLO)、上式で、
HOO:命令実行前の履歴オフセット
HLO:命令実行前の履歴長
である。
このバイトの範囲は、例えば下式によって指示される位置を含み、その位置で終わる。
+modulo32K(HOO+HLO+BP-1)、この式で、
BP:命令の実行中に第1のオペランド位置に記憶されたバイトの数
である。
上で説明したバイトの範囲に実施される記憶は、ストア・タイプ・アクセス例外、PERストレージ変更イベントおよびセッティング変更ビットにさらされる。
・ストレージ位置の内容を変更しない記憶であって、必要でない記憶は、第3のオペランド位置の中の、上で説明した範囲に含まれないバイトに実施することができる。このような位置への記憶も、ストア・タイプ・アクセス例外、PERストレージ変更イベントおよびセッティング変更ビットにさらされる。
HBTが循環であり、第1のオペランド位置に記憶されたバイトの数が例えば32,768以上であるときには、第3のオペランド位置の例えば全てのバイトに記憶が実施され、この記憶は、ストア・タイプ・アクセス例外、PERストレージ変更イベントおよびセッティング変更ビットにさらされる。
BTYPEが2進数00のとき、そのブロックは圧縮データを含まない。本明細書に記載された図6は、2進数00に等しいBTYPEを有するブロックの一例を示している。LENフィールドは、ブロックの中のリテラル・バイトの数を指定する。LENフィールドのバイト順はリトルエンディアンである。LENフィールドは、0リテラル・バイトを指定することができる。ブロックのリテラル・バイトは、第1のオペランド位置に置かれる。上述のとおり、ブロックのそれぞれのリテラル・バイトと一緒に履歴も更新される。
BTYPEが2進数01のとき、そのブロックは、固定ハフマン表(FHT)を使用して生成された圧縮データ・シンボルを含む。FHTは、DEFLATE規格によって定義されており、ブロックの部分ではない。本明細書に記載された図7は、2進数01に等しいBTYPEを有するブロックの一例を示している。ブロック・ヘッダを解釈した後、圧縮データ・シンボルが、ブロックの中でそれらが現れる順番でデコードされる。ブロックのバイトは例えば左から右へ処理され、ブロックのそれぞれのバイト内のビットは例えば右から左へ処理される。一例では、ブロックの中の次のシンボルを処理する前に、それぞれのシンボルが完全に処理される。エンド・オブ・ブロック(EOB)シンボルでないそれぞれのシンボルは、リテラル値、または履歴バッファ内で以前にデコードされたサブストリングを指すポインタを表す。以前にデコードされたサブストリングは重複ストリングとも呼ばれる。一例では、重複ストリング長が3から258バイトの範囲にある。ポインタは、サブストリング長と、履歴の終わりからサブストリングの始まりまでの距離とを表すコードからなる。シンボルが、履歴の中のサブストリングを表しているとき、そのサブストリングは履歴バッファから参照される。シンボルをデコードすることによって得られた圧縮されていないデータは、第1のオペランド位置に置かれる。
上述のとおり、さらなるソース・データを処理する前に履歴は更新される。
更新後の履歴は、ブロックの次のシンボルをデコードすることに適用される。EOBシンボルに遭遇したとき、ブロックの処理は完了である。
BTYPEが2進数10のとき、そのブロックは、動的ハフマン表(DHT)を使用して生成された圧縮データ・シンボルを含む。使用されたDHTの圧縮フォーマットは圧縮データ・ブロックの要素である。本明細書に記載された図8は、2進数10に等しいBTYPEを有するブロックの一例を示している。ブロック・ヘッダを解釈した後、汎用オペランド・データ例外条件がないか、圧縮データ・ブロック内に提供されたDHTの圧縮フォーマットが調べられる。提供されたDHTの圧縮フォーマットに関して汎用オペランド・データ例外条件が存在するとき、そのDHTの圧縮フォーマットは無効と称され、データの復元には使用されない。適正な機能ハフマン・ツリーを指定するためにハフマン・アルゴリズムが必要とする長さよりも大きい、コード長に対するビット長、またはリテラル・バイト、EOBシンボル、重複ストリング長もしくは重複ストリング・ポインタ距離に対するコード長を、DHTの圧縮フォーマットが指定しているとき、圧縮DHTは、依然として、機能DHTを導出し、データを圧縮するために使用される。DHTの圧縮フォーマットを調べた後、圧縮データ・シンボルが、ブロックの中でそれらが現れる順番でデコードされる。ブロックのバイトは例えば左から右へ処理され、ブロックのそれぞれのバイト内のビットは例えば右から左へ処理される。一例では、ブロックの中の次のシンボルを処理する前に、それぞれのシンボルが完全に処理される。2進数10のBTYPEを有するブロックの中のシンボルの処理は、以前に説明した2進数01のBTYPEを有するブロックの中のシンボルの処理と、前者が、シンボルをデコードするために提供されたDHTを使用し、後者が、シンボルをデコードするためにFHTを使用する点を除いて同じである。圧縮データ・シンボルをデコードするために使用されるハフマン・コードを指定しない非ユニバーサルDHTが提供されたときには、汎用オペランド・データ例外が認識される。
第2のオペランドを復元するのと同時に、復元されたデータは、検査値(例えば32ビット検査値)の生成に入力される。結果として得られる検査値は、パラメータ・ブロックの検査値フィールド387に記憶される。
一実施形態では、データ・セットの最後のブロックを処理した後、以下のことが起こる。
・パラメータ・ブロックのモデル・バージョン番号(MVN)フィールド363に、モデルに依存する値が記憶される。
・パラメータ・ブロックのサブバイト境界(SBB)フィールド381が更新される。
・汎用レジスタRの中のアドレスが、第1のオペランド位置に記憶されたバイトの数だけインクリメントされ、汎用レジスタR+1の中の長さが、同じ数だけデクリメントされる。
・汎用レジスタRの中のアドレスが、処理ビット0を含んだ第2のオペランドの処理されたバイトの数だけインクリメントされ、汎用レジスタR+1の中の長さが、同じ数だけデクリメントされる。処理ビット0を含んだ第2のオペランドの処理されたバイトの数は、処理された入力ビットの数とSBBの元の値との和である被除数および値8である除数を用いた整数除算の結果得られる整数商である。
アドレスおよび長さの形成および更新はアドレシング・モードに依存する。
命令の実行の開始時に第1のオペランド長が0のとき、第1のオペランドにはアクセスされず、汎用レジスタRおよびR+1の中の対応するそれぞれの第1のオペランド・アドレスおよび第1のオペランド長は変更されない。これは、命令の実行の開始時にCFフィールド373の値が0または1のときに適用される。
命令の実行の開始時に第2のオペランド長が0のとき、第2のオペランドにはアクセスされず、汎用レジスタRおよびR+1の中の対応するそれぞれの第2のオペランド・アドレスおよび第2のオペランド長は変更されない。一実施形態では、以下のケースに対して、命令の実行の開始時に第2のオペランド長が0である。
・命令が再実行されており(例えば命令の実行の開始時にパラメータ・ブロックのCFフィールド373が1であり)、命令が以前に実行されたときに第2のオペランドの全体が処理された。
たとえ第2のオペランド位置からのデータが処理されたとしても、復元オペレーションは、第1のオペランド位置に結果を記憶することなしに終了することができる。一例では、このことが、第2のオペランド位置から処理されたデータが、以下の圧縮データ・ブロック要素のいずれかの要素だけを含むときに起こる。
・ブロック・ヘッダ
・2進数00のブロック・タイプを有するブロックのLENフィールド
・2進数00のブロック・タイプを有するブロックのNLENフィールド
・動的ハフマン表の圧縮フォーマット
・エンド・オブ・ブロック(EOB)シンボル
1つまたは複数の実施形態では、以下の条件が、DEFLATE変換呼出し命令の実行に適用される。
一例では、DFLTCC-GDHT機能が指定されており、以下の条件が生じたときに、汎用オペランド・データ例外が認識される。
・パラメータ・ブロック・バージョン番号362によって指定されたパラメータ・ブロックのフォーマットが、モデルによってサポートされていない。
一例では、DFLTCC-CMPR機能は指定されており、以下の条件のうちのいずれかの条件が生じたときに、汎用オペランド・データ例外が認識される。
・パラメータ・ブロック・バージョン番号362によって指定されたパラメータ・ブロックのフォーマットが、モデルによってサポートされていない。
・NT374が0であり、HL385が例えば32,768よりも大きい。
・HTT376が1であり、CDHTL366が例えば42よりも小さく、または例えば2283よりも大きい。
・HTT376が1であり、CDHTL366が、CDHTフィールド367の中に指定されたDHTの圧縮フォーマットの長さに等しくない。
・HTT376が1であり、DHTの圧縮フォーマットのHLITサブ要素が例えば29よりも大きい(無効なDHT)。
・HTT376が1であり、DHTの圧縮フォーマットのHDISTサブ要素が例えば29よりも大きい(無効なDHT)。
・HTT376が1であり、DHTの圧縮フォーマット(CDHTフィールド367の内容)が、圧縮DHTに対して定義された可能なコード長、例えば19の可能なコード長に対するビット長を指定するコードのシーケンスの中のコードであって、機能ハフマン・ツリーを指定するためにハフマン・アルゴリズムが必要とする長さよりも短いコードを指定する(無効なDHT)。
・HTT376が1であり、DHTの圧縮フォーマット(CDHTフィールド367の内容)が、リテラル・バイト、EOBシンボルおよび重複ストリング長からなる要素のセットに対する最初のコード長としてコード長、例えば16を指定する(以前のコード長をコピーする)(無効なDHT)。
・HTT376が1であり、DHTの圧縮フォーマット(CDHTフィールド367の内容)が、リテラル・バイトに対するコード長を指定するコードのシーケンスの中のコードを指定しており、そのコードが、圧縮DHTの中で以前に指定された、参照されたコード長のセットを表すように決定されたどのコードとも一致しない(無効なDHT)。
・HTT376が1であり、DHTの圧縮フォーマット(CDHTフィールド367の内容)が、EOBシンボルにコード長0(CL0)を割り当てるコードを指定する。この場合、対応するDHTは、EOBシンボルを表すハフマン・コードを指定しない(無効なDHT)。
・HTT376が1であり、DHTの圧縮フォーマット(CDHTフィールド367の内容)が、重複ストリング長およびポインタ距離に対するコード長を指定するコードのシーケンスの中のコードを指定しており、そのコードが、圧縮DHTの中で以前に指定された、参照されたコード長のセットを表すように決定されたどのコードとも一致しない(無効なDHT)。
・HTT376が1であり、DHTの圧縮フォーマット(CDHTフィールド367の内容)が、HLITフィールドの中の値と、HDISTフィールドの中の値と例えば258と和によって指定される、DHTの中のハフマン・コードの数よりも大きいいくつかのコード長を指定する。例として、これは、コード長16、17および18の不適切な使用によって可能である(無効なDHT)。
・HTT376が1であり、DHTの圧縮フォーマット(CDHTフィールド367の内容)が、リテラル・バイト、EOBシンボルおよび重複ストリング長のセットに対するコード長であって、機能ハフマン・ツリーを指定するためにハフマン・アルゴリズムが必要とする長さよりも短いコード長を指定する(無効なDHT)。
・HTT376が1であり、DHTの圧縮フォーマット(CDHTフィールド367の内容)が、重複ストリング・ポインタ距離のセットに対するコード長であって、機能ハフマン・ツリーを指定するためにハフマン・アルゴリズムが必要とする長さよりも短いコード長を指定する(無効なDHT)。
・CPUが、第2のオペランドの中のリテラル・バイトを表す圧縮データ・シンボルを生成しようとしており、CDHTフィールドの内容から導出されたDHTが非ユニバーサルであり、そのリテラル・バイトに対応するハフマン・コードを指定しない。
・CPUが、第2のオペランドの中の重複ストリングを表す圧縮データ・シンボルを生成しようとしており、CDHTフィールドの内容から導出されたDHTが非ユニバーサルであり、その重複ストリングの長さまたはポインタ距離に対応するハフマン・コードを指定しない。
例として、例えば、DFLTCC-XPND機能が指定されており、以下の条件のうちのいずれかの条件が生じたときに、汎用オペランド・データ例外が認識される。
・パラメータ・ブロック・バージョン番号362によって指定されたパラメータ・ブロックのフォーマットが、モデルによってサポートされていない。
・NT374が0であり、HL385が例えば32,768よりも大きい。
・2進数11に等しいBTYPEを有する圧縮データ・ブロックに遭遇する。
・2進数00に等しいBTYPEおよびLENの1の補数に等しくないNLENを有する圧縮データ・ブロックに遭遇する。
・DHTの圧縮フォーマット(2進数10に等しいBTYPEを有する圧縮データ・ブロックの内容)に遭遇し、圧縮DHTのHLITサブ要素が例えば29よりも大きい(無効なDHT)。
・DHTの圧縮フォーマット(2進数10に等しいBTYPEを有する圧縮データ・ブロックの内容)に遭遇し、圧縮DHTのHDISTサブ要素が例えば29よりも大きい(無効なDHT)。
・圧縮DHTに対して定義された可能なコード長、例えば19の可能なコード長に対するビット長を指定するコードのシーケンスの中のコードであって、機能ハフマン・ツリーを指定するためにハフマン・アルゴリズムが必要とする長さよりも短いコードを指定する、DHTの圧縮フォーマット(2進数10に等しいBTYPEを有する圧縮データ・ブロックの内容)に遭遇する(無効なDHT)。
・リテラル・バイト、EOBシンボルおよび重複ストリング長からなる要素のセットに対する最初のコード長としてコード長、例えば16を指定する(以前のコード長をコピーする)、DHTの圧縮フォーマット(2進数10に等しいBTYPEを有する圧縮データ・ブロックの内容)に遭遇する(無効なDHT)。
・リテラル・バイトに対するコード長を指定するコードのシーケンスの中のコードを指定しており、そのコードが、圧縮DHTの中で以前に指定された、参照されたコード長のセットを表すように決定されたどのコードとも一致しない、DHTの圧縮フォーマット(2進数10に等しいBTYPEを有する圧縮データ・ブロックの内容)に遭遇する(無効なDHT)。
・EOBシンボルにコード長0(CL0)を割り当てるコードを指定する、DHTの圧縮フォーマット(2進数10に等しいBTYPEを有する圧縮データ・ブロックの内容)に遭遇する。この場合、対応するDHTは、EOBシンボルを表すハフマン・コードを指定しない(無効なDHT)。
・重複ストリング長およびポインタ距離に対するコード長を指定するコードのシーケンスの中のコードを指定しており、そのコードが、圧縮DHTの中で以前に指定された、参照されたコード長のセットを表すように決定されたどのコードとも一致しない、DHTの圧縮フォーマット(2進数10に等しいBTYPEを有する圧縮データ・ブロックの内容)に遭遇する(無効なDHT)。
・HLITフィールドの中の値と、HDISTフィールドの中の値と例えば258と和によって指定される、DHTの中のハフマン・コードの数よりも大きいいくつかのコード長を指定する、DHTの圧縮フォーマット(2進数10に等しいBTYPEを有する圧縮データ・ブロックの内容)に遭遇する。例として、これは、コード長16、17および18の不適切な使用によって可能である(無効なDHT)。
・リテラル・バイト、EOBシンボルおよび重複ストリング長のセットに対するコード長であって、機能ハフマン・ツリーを指定するためにハフマン・アルゴリズムが必要とする長さよりも短いコード長を指定する、DHTの圧縮フォーマット(2進数10に等しいBTYPEを有する圧縮データ・ブロックの内容)に遭遇する(無効なDHT)。
・重複ストリング・ポインタ距離のセットに対するコード長であって、機能ハフマン・ツリーを指定するためにハフマン・アルゴリズムが必要とする長さよりも短いコード長を指定する、DHTの圧縮フォーマット(2進数10に等しいBTYPEを有する圧縮データ・ブロックの内容)に遭遇する(無効なDHT)。
・2進数10に等しいBTYPEを有する圧縮データ・ブロックの中で遭遇する圧縮データ・シンボルが、同じブロックの中のDHTの圧縮フォーマットから導出された非ユニバーサルDHTによって定義されていないハフマン・コードを指定する。この場合、汎用オペランド・データ例外を認識するための処理に使用可能となる第2のオペランドのビットの数は、モデルに依存する。より詳細には、不定のコードをデコードしようとするモデルは、たとえより少数のビットを処理した後に例外を決定することができることもあるにせよ、例外を認識する前に、例えば15ビットを処理することがある。
・重複ストリング・ポインタであり、シンボルを処理する時点で使用可能な履歴長よりも長い距離を指定する、圧縮データ・シンボルに遭遇する。
・2進数01に等しいBTYPEを有する圧縮データ・ブロックの中で遭遇する圧縮データ・シンボルが、無効コード(例えば、重複ストリング長に対する2進数11000110または11000111のコード、または重複ストリング・ポインタ距離に対する2進数11110または11111のコード)を指定する。この場合、汎用オペランド・データ例外を認識するための処理に使用可能となる第2のオペランドのビットの数は、モデルに依存する。より詳細には、無効コードをデコードしようとするモデルは、たとえより少数のビットを処理した後に例外を決定することができることもあるにせよ、例外を認識する前に、例えば、重複ストリング長の場合には8ビット、または重複ストリング・ポインタ距離の場合には5ビットを処理することがある。
汎用オペランド・データ例外が認識されたときには、たとえ、パラメータ・ブロックのオペレーション終了補足コード(OESC)フィールド365およびモデル・バージョン番号(MVN)フィールド363が、例外に関連した追加情報を提供するように更新されたとしても、オペレーションは抑制されているとみなされる。
DFLTCC-CMPRまたはDFLTCC-XPND機能が実行されており、第2のオペランドに対して汎用オペランド・データ例外が認識されることになっているとき、その結果は、汎用オペランド・データ例外が認識されるか、またはオペレーションが部分完了で終了し、条件コード、例えば条件コード3がセットされるかのどちらかである。条件コード3がセットされた場合には、同じオペランドの処理を続けるために命令が再実行され、例外条件が依然として存在するときに、例外が認識される。
他の条件には例えば以下のものが含まれる。
命令の実行は中断可能である。中断が起こると、命令が再実行されたときに中断のところから命令が再開するように、汎用レジスタRおよびRの中のアドレス、汎用レジスタR+1およびR+1の中の長さ、およびパラメータ・ブロックの特定のフィールドが更新される。
DFLTCC-CMPRまたはDFLTCC-XPND機能が実行されており、第1または第2のオペランドに対してアクセス例外が認識されることになっているとき、その結果は、アクセス例外が認識されるか、またはオペレーションが部分完了で終了し、条件コード、例えば条件コード3がセットされるかのどちらかである。条件コード3がセットされた場合には、同じオペランドの処理を続けるために命令が再実行され、例外条件が依然として存在するときに、例外が認識される。
このCPU、他のCPUおよびチャネル・プログラムによって観察されるとき、パラメータ・ブロック、第1、第2および第3のオペランドに対する参照はマルチアクセス参照であることがあり、これらのストレージ位置に対するアクセスは、必ずしもブロック・コンカレント(block concurrent)であるというわけではなく、これらのアクセスまたは参照のシーケンスは不定である。
一実施形態では、DFLTCC-CMPRまたはDFLTCC-XPND機能が指定されており、以下のうちのいずれかが当てはまる場合、結果は予測不能である。
・パラメータ・ブロックが第1または第2のオペランドに重なる。
・第1のオペランドが第2のオペランドに重なる。
・指定された履歴バッファ・タイプ(HBT)が循環であり、第3のオペランドが、第1のオペランド、第2のオペランドまたはパラメータ・ブロックに重なる。
・指定された履歴バッファ・タイプ(HBT)がインラインであり、DFLTCC-CMPR機能が指定されており、履歴が、第1のオペランドまたはパラメータ・ブロックに重なる。
・指定された履歴バッファ・タイプ(HBT)がインラインであり、DFLTCC-XPND機能が指定されており、履歴が、第2のオペランドまたはパラメータ・ブロックに重なる。
ある種の状況では、CPUによって決定される処理されるバイトの数が0である状態でDEFLATE変換呼出し命令の実行を終了したにもかかわらず、第1のオペランド位置にデータが記憶されていることがあり、適用可能なときに、第3のオペランド位置にデータが記憶されていることがあり、適用可能なときに、対応する変更ビットがセットされている。これらのケースでは、パラメータ・ブロックおよび汎用レジスタの内容が、元の値から変更されていない。これらの状況は、DEFLATE変換呼出し命令を実行している間に、CPUが、静止オペレーションまたはCPU再試行を実行したときに起こることがある。
以下のコードは、DEFLATE変換呼出し命令を実行した結果として生じる例示的な条件コードである。
0 正常完了
1 第1のオペランド長が、オペレーションを完了するのに不十分である
2 第2のオペランド長が、オペレーション(DFLTCC-XPND)を完了するのに不十分である
3 CPUによって決定される量のデータが処理された
プログラム例外:
・アクセス(フェッチ、オペランド2、インライン履歴;フェッチおよびストア、パラメータ・ブロック、オペランド1、オペランド3)
・DXC0を有するデータ、汎用オペランド
・オペレーション(DEFLATE変換機能がインストールされていない場合)
・指定
・トランザクション制約
DEFLATE変換呼出し命令に対する実行の例示的な優先度を下に示す。
1.~6. 一般的なケースに対するプログラム中断条件の優先度と同じ優先度を有する例外
7.A 第2の命令ハーフワードに対するアクセス例外
7.B オペレーション例外
7.C トランザクション制約
8.A 無効な機能コードまたは無効なレジスタ番号による指定例外
8.B パラメータ・ブロックが4キロバイト境界に指示されてないことによる指定例外
8.C 循環履歴バッファが4キロバイト境界に指示されてないことによる指定例外
9. パラメータ・ブロックへのアクセスに対するアクセス例外
10. パラメータ・ブロックの指定されたフォーマットがモードによってサポートされていないときの汎用オペランド・データ例外
11. 命令の実行の開始時に第2のオペランド長が0に等しく、CFが0に等しいことによる指定例外
12. 命令の実行の開始時に第1のオペランド長が0に等しく、DFLTCC-CMPRが指定されていることによる条件コード1
13.A DFLTCC-CMPRまたはDFLTCC-XPNDが指定されているときに、履歴長フィールドが32,768よりも大きく、新規タスク・フィールドが0であることによる汎用オペランド・データ例外
13.B 第1のオペランドおよび第1のオペランド長へのアクセスが0でないことに対するアクセス例外
13.C 第2のオペランドおよび第2のオペランド長へのアクセスが0でないことに対するアクセス例外
13.D 命令の実行の開始時に指定されたインライン履歴へのアクセスに対するアクセス例外
13.E 第3のオペランドへのアクセスに対するアクセス例外
14.A 上記項目10および13.Aに含まれる条件以外の条件による汎用オペランド・データ例外
14.B 上記項目12に含まれる条件以外の条件による条件コード1、2または3
15. 条件コード0
使用前に、汎用オペランド・データ例外条件が存在しないか、DHTの圧縮フォーマットが調べられる。汎用オペランド・データ例外条件のために、DHTの圧縮フォーマットの長さが正確には定義されていないとき、解釈される長さは、条件およびモデルに依存することがあり、例えば286バイトを超えない。その結果として、DFLTCC-XPND機能が指定されており、汎用オペランド・データ例外条件を有するDHTの圧縮フォーマットに、第2のオペランドの例えば右端の286バイトの中で遭遇するときに、例外条件(優先度14.A)が認識されるのか、または条件コード2(優先度14.B)が認識されるのかは、モデルに依存する。
プログラミング上の例示的な留意事項を以下に示す。
1.データを圧縮または復元するときには、全体として、DEFLATE変換呼出し命令が実行される回数を最小にしてオペレーションを実行したときの方が効率的なことがある。言い換えると、小さなオペランドを用いてDFLTCCを複数回実行するよりも、大きなオペランドを用いてDFLTCCを実行した方が効率的なことがある。
2.圧縮および復元オペレーションに関して、条件コード3がセットされているときには、命令によって使用される汎用レジスタおよびパラメータ・ブロックが、プログラムが分岐して命令の上部に戻りオペレーションを続けることができるように、更新されている。
3.一実施形態では、DEFLATE変換呼出し命令は命令のパラメータによって指定された処理の、CPUによって決定されるサブ部分を実行した後に、この命令を完了させることができる。指定された全ての処理を実行する代わりに、CPUによって決定される量の処理だけを実行した後に命令が完了したときには、命令が、条件コード3をセットする。このように完了したときには、PSW(program status word)(プログラム・ステータス・ワード)の中の命令アドレスが、次順命令(next sequential instruction)を指示し、その命令のオペランド・パラメータは、分岐して命令の上部に戻って処理を再実行することによってその命令の処理を再開することができるように調整されている。指定された全ての処理を実行したとき、命令は、条件コード3以外の条件コードをセットする。
4.DFLTCC-CMPR機能が指定されており、このオペレーションが、パラメータ・ブロックのサブバイト境界(SBB)フィールドの中の値が0でない状態で終了したとき、オペレーションは、結果として得られる第1のオペランド・アドレスによって指示されたバイトに記憶することを含む。DFLTCC-XPND機能が指定されており、このオペレーションが、SBBの中の値が0でない状態で終了したとき、オペレーションは、結果として得られる第2のオペランド・アドレスによって指示されたバイトをフェッチすることを含む。
5.オペレーションが、0でない条件コードがセットされた状態で終了したときには、パラメータ・ブロックのCSBフィールド392が、部分的に処理されたデータを含むことがあり、オペレーションを再開するために、プログラムが命令を再実行することが予想される。
6.オペレーションが、0でない条件コードがセットされた状態で終了した後、オペレーションを再開するために命令を再実行する前に、プログラムは、パラメータ・ブロックのどのフィールドも変更せず、そうでない場合、結果は予測不能である。
7.DFLTCC-GDHT機能が指定されているとき、生成されたDHTの圧縮表現は、ハフマン・アルゴリズムに従って、3つのプロパーフル(proper-full)ハフマン・コード・ツリーを記述する。すなわち、アンダーフル(under-full)ハフマン・コード・ツリーは記述されない。アンダーフル・ハフマン・コード・ツリーは、適正な機能ハフマン・ツリーを指定するためにハフマン・アルゴリズムが必要とする長さよりも大きい、要素に対するコード長を指定するDHTの圧縮表現から導出される。
DFLTCC-CMPR機能が指定されており、HTTが1であり、DHTの圧縮表現が、アンダーフル・ハフマン・コード・ツリーの記述を含むときには、DFLTCC-XPND機能を使用することによって、圧縮データ結果を元の圧縮されていないデータに変換することができるが、DEFLATE規格に準拠した全てのデコーダが、圧縮データ結果を元の圧縮されていないデータに変換することができるわけではない。このことは、例えば、DFLTCC-CMPR機能に関して、プログラムによって指定されたDHTの圧縮表現が生成されなかったときに、DFLTCC-GDHT機能を実行した結果として起こることがある。
8.DFLTCC-CMPR機能が、条件コード1がセットされた状態で終了したとき、パラメータ・ブロックのサブバイト境界(SBB)フィールド381に記憶される結果は、2進数000である。このシナリオを認識することは、DEFLATE変換呼出し命令とともに使用するために出力バッファを割り振るプログラムに関連していることがある。
本明細書に記載されているとおり、一態様では、圧縮もしくは解凍オペレーションまたはその両方を汎用プロセッサを使用して実行するために、単一の命令(例えばハードウェア/ソフトウェア・インタフェースの単一のアーキテクト機械命令、例えばDEFLATE変換呼出し命令)が提供される。この命令は、例えば、命令セット・アーキテクチャ(ISA)の中に定義されたハードウェア命令である。その結果として、圧縮もしくは解凍オペレーションまたはその両方に関係するプログラムの複雑さが低減する。さらに、オペレーションの性能、したがってプロセッサの性能が向上する。
有利には、DEFLATE変換呼出し命令が、例えばプログラマによって、I/Oデバイス、I/Oインタフェースを通して接続された特定用途向けデバイス、または他のタイプの専用プロセッサなどの専用プロセッサ上ではなく、汎用プロセッサ(例えば中央処理ユニット。本明細書ではプロセッサと呼ぶ)上にディスパッチされる。ソフトウェア実装との比較では、開示された命令を実行すると、同じオペレーションを実行するのに実行サイクルが大幅に少なくて済む。さらに、I/Oデバイスにオペレーションをディスパッチすることとの比較では、開示された命令を実行すると、オペレーティング・システムによるI/Oオペレーションが必要なくなり、開示された命令の実行は、オペレーションが完了するのを待つ間にタスク切替えを実行するためにオペレーティング・システムをトリガしない。
さまざまなフィールドおよびレジスタを説明したが、本発明の1つまたは複数の態様は、他のフィールドもしくはレジスタ、追加のフィールドもしくはレジスタ、またはより少数のフィールドもしくはレジスタ、あるいは他のサイズのフィールドおよびレジスタなどを使用することができる。多くの変形形態が可能である。例えば、命令の明示的に指定されたレジスタもしくはフィールドの代わりに、暗黙のレジスタを使用することができ、または、暗黙のレジスタもしくはフィールドの代わりに、明示的に指定されたレジスタもしくはフィールドを使用することができ、あるいはその両方を使用することができる。他の変形形態も可能である。
DEFLATE変換呼出し命令の使用の一実施形態を、図17を参照して説明する。一例では、ステップ1700で、汎用プロセッサなどのプロセッサ上で実行されているプログラムが、ストレージの中のパラメータ・ブロックの中の実行するオペレーションの詳細を指定し、およびパラメータ・ブロックの位置を指定する。例えば、実行する機能に応じて、パラメータ・ブロック(例えばパラメータ・ブロック340、360または370)のフィールドのうちの1つまたは複数のフィールドを提供またはセットする。さらに、ステップ1702で、このプログラムが、実行するオペレーション(例えば照会、生成、圧縮、展開など)を指定する。さらに、ステップ1704で、このプログラムが、ストレージの中の入力データの位置および量を指定または更新し、ステップ1706で、ストレージの中の結果バッファの位置およびサイズを指定または更新する。
その後、ステップ1708で、プログラムが、DEFLATE変換呼出し(DFLTCC)命令を実行する。一例では、汎用プロセッサ上に命令をディスパッチする。例として、汎用プロセッサ上で命令を処理し、または、汎用プロセッサに結合されたハードウェアであり、I/Oインタフェースを使用することなしにアクセス可能なハードウェアによって少なくとも部分的に処理する。
命令の終了に基づいて、問合せ1710で、実行の結果得られた条件コードが、第1の定義値、例えば0に等しいかどうかを判定する。条件コードが第1の定義値に等しい場合には、ステップ1712で、命令の処理を完了する。しかしながら、条件コードが第1の定義値に等しくない場合には、問合せ1714で、条件コードが、第2の定義値、例えば3に等しいかどうかをさらに判定する。条件コードが第2の定義値に等しい場合、すなわち処理すべき追加のデータが存在する場合には、ステップ1708で、命令を再実行する。しかしながら、条件コードが第2の定義値に等しくない場合には、問合せ1716で、条件コードが、第3の定義値、例えば1に等しいかどうかをさらに判定する。条件コードが第3の定義値にセットされる場合、すなわち第1のオペランド長が不十分である場合には、ステップ1706から処理を続ける。条件コードが第3の定義値にセットされていない場合には、機能に対して第2のオペランド長が不十分であり、ステップ1704から処理を続ける。
示したとおり、単一のデータ・ストリームを圧縮または解凍するために、DEFLATE変換呼出し命令が複数回実行されることがある。したがって、一態様では、プログラムがバッファ(例えば32キロバイト・バッファ)を宣言するための機構を提供する属性をDEFLATE変換呼出し命令が含み、このバッファは、DEFLATE変換呼出し命令の複数回の実行にまたがるオペレーション中に処理された圧縮されていないデータの履歴を蓄積するために使用される。このバッファは例えば循環履歴バッファである。
一態様では、DEFLATE変換呼出し命令が、暗黙のレジスタ(例えばGR0.56)の中のインジケータ(例えばビット)を使用して、循環履歴バッファの使用を指示する。循環履歴バッファが指示され、DEFLATE変換呼出し命令によって実行される指定された機能が、データの圧縮またはデータの復元であるときには、命令のフィールド(例えばR)が、メモリ、例えば32キロバイト・バッファのメモリの中の位置を指定する。プロセッサは、このバッファを使用して、オペレーションの開始時にこのバッファから履歴をフェッチし、オペレーションの終了時にこのバッファに履歴を記憶する。循環履歴バッファ内の履歴の長さは、DEFLATE変換呼出し命令に関連したパラメータ・ブロックのフィールド(例えばHLフィールド385)によって指定され、バッファ内の履歴の始まりは、パラメータ・ブロックの別のフィールド(例えばHOフィールド386)に含まれるオフセットによって指定される。
循環履歴バッファの使用のさらなる詳細を、図18を参照して説明する。一例では、ステップ1800で、汎用プロセッサなどのプロセッサ上で実行されているプログラムが、ストレージの中のパラメータ・ブロックの中の実行するオペレーションの詳細、およびパラメータ・ブロックの位置を指定する。例えば、実行する機能に応じて、パラメータ・ブロック(例えばパラメータ・ブロック360または370)のフィールドのうちの1つまたは複数のフィールドを提供またはセットする。さらに、このプログラムは、実行するオペレーション(例えば圧縮、展開など)を指定する。
さらに、一例では、ステップ1802で、このプログラムが、予め定義されたサイズ(例えば32キロバイト)の循環バッファのメモリの中の位置を割り振り、指定する。さらに、ステップ1804で、このプログラムが、圧縮されていないデータ・ストリームの一部分をバッファに入れ、DEFLATE変換呼出し命令への入力として、そのバッファの位置およびサイズを指定し、ステップ1806で、ストレージの中の結果バッファの位置およびサイズを指定または更新する。
次いで、ステップ1808で、DEFLATE変換呼出し命令を実行する。この命令の実行に基づいて、ステップ1820で、プロセッサが、オペレーションへの入力として、履歴を、例えば循環履歴バッファからフェッチし、ステップ1822で、指定されたオペレーションを、本明細書に記載されたとおりに実行する。さらに、ステップ1824で、プロセッサが、オペレーションの出力として、循環履歴バッファの中の履歴を変更する。問合せ1826で、データ・ストリームの全体が処理されたかどうかを判定する。処理されていない場合には、ステップ1804から処理を続ける。データ・ストリームの全体が処理された場合、処理は完了となる。
循環履歴バッファの使用は、例として以下のことを提供する。
DEFLATE変換呼出し命令の個々の実行で使用するように指定された入力または出力バッファのサイズが比較的に小さい(例えば512バイトである)ときには、例えば最大32キロバイトのバッファリングされたデータの複数のセグメントにまたがる履歴を、少数のバイトを処理するDEFLATE変換呼出し命令への入力として使用することができる。
DEFLATE変換呼出し命令の個々の実行で使用するように指定された入力または出力バッファのサイズが比較的に大きい(例えば128キロバイトである)ときには、例えば最大32キロバイトのバッファリングされたデータの前のセグメントの履歴を、最初の32キロバイトのデータを処理しているDEFLATE変換呼出し命令への入力として使用することができる。
両方のケースで、そうしない場合に使用可能であると思われる履歴よりも多くの履歴が、データ処理に使用可能である。その結果として、重複ストリングを検出する有効性が向上し、その結果、全体的な圧縮比が改善される。このことは、コンピューティング環境内での処理を容易にし、性能を向上させる。
本発明の1つまたは複数の態様は、コンピュータ技術に不可分に結びついており、コンピュータ内での処理を容易にし、コンピュータ内での処理の性能を向上させる。単一のアーキテクト機械命令を使用して、圧縮もしくは解凍またはその両方を実行することは、コンピューティング環境内での性能を向上させる。圧縮/解凍されたデータは、データの管理もしくは使用またはその両方を実行する多くの技術分野、例えばコンピュータ処理、医療処理、セキュリティ、在庫管理などで使用することができる。圧縮/解凍の最適化を提供することにより、これらの技術分野は、実行時間を短縮することで改善される。
本発明の1つまたは複数の態様に関係しているためコンピューティング環境内での処理を容易にする1つの実施形態のさらなる詳細を、図19A~19Bを参照して説明する。
図19Aを参照すると、一実施形態では、コンピューティング環境の汎用プロセッサが、複数の機能のうちの機能を実行するための命令を取得し、この機能が、この命令によってサポートされている(1900)。この命令は、例えば、圧縮のための業界標準に準拠した命令セット・アーキテクチャの単一のアーキテクト命令である(1902)。この命令を実行する(1904)。この命令を実行することは、機能が圧縮機能であることまたは解凍機能であることに基づいて、入力データの状態を、入力データの圧縮されていない形態と入力データの圧縮された形態との間で変換して、変換された状態のデータを提供することを含む(1906)。タスクを実行する際に使用するために、この変換された状態のデータを出力として提供する(1908)。
一実施形態では、入力データの状態を変換することが、業界標準に準拠した圧縮フォーマットを使用する(1910)。この圧縮フォーマットは、例えば、DEFLATE圧縮フォーマットを含む(1912)。
例として、このタスクは、圧縮データを含む出力を使用する1つまたは複数のオペレーションを実行すること、出力を送信すること、圧縮されていないデータを含む出力を使用する1つまたは複数のオペレーションを実行することからなるタスクのグループから選択される(1914)。
一実施形態では、図19Bを参照すると、この命令は、オペレーションを指定するためのオペレーション・コードを含むオペレーション・コード・フィールドと、この命令によって使用される複数のレジスタを指定するための複数のレジスタ・フィールドとを含む(1920)。この複数のレジスタは、例えば、命令によって出力として使用される出力オペランド位置を識別するために使用される1つのレジスタと、命令によって入力として使用される入力オペランド位置を識別するために使用される別のレジスタとを含み、この入力は機能に依存する(1922)。
一例として、機能が圧縮機能であることに基づいて、入力が、入力オペランド位置からのデータを含み、このデータが、出力オペランド位置に記憶される圧縮データ・シンボルを提供するようにエンコードされ(1924)、機能が解凍機能であることに基づいて、入力が、入力オペランド位置からの圧縮データ・シンボルを含み、この圧縮データ・シンボルが、出力オペランド位置に記憶される圧縮されていないデータを提供するようにデコードされる(1926)。
さらに、一実施形態では、命令が、命令によって実行される複数の機能のうちの機能を示すための選択されたレジスタを使用する(1928)。この複数の機能は、例えば、照会機能、圧縮機能、動的ハフマン表生成機能および解凍機能を含む(1930)。さらに、一実施形態では、命令が、複数の機能のうちの1つまたは複数の機能に関して命令によって使用されるパラメータ・ブロックのアドレスを提供するための選択された別のレジスタを使用する(1932)。
さらなる態様では、実行される機能が動的ハフマン表生成機能であり、命令を実行することが、機能が動的ハフマン表生成機能であることに基づいて、命令の別の実行時に実行される機能が圧縮機能または解凍機能であるときに使用される動的ハフマン表の圧縮表現を生成することを含む(1934)。
他の変形形態および実施形態も可能である。
多くのタイプのコンピューティング環境が本発明の態様を使用することができる。本発明の1つまたは複数の態様を組み込み、使用するためのコンピューティング環境の別の実施形態を、図20Aを参照して説明する。この例では、コンピューティング環境10が、例えば、ネイティブ中央処理ユニット(CPU)12、メモリ14、および1つもしくは複数の入力/出力デバイスもしくはインタフェースまたはその両方16を含み、これらは、例えば1つもしくは複数のバス18もしくは他の接続またはその両方を介して互いに結合されている。例として、コンピューティング環境10は、米ニューヨーク州Armonkのインターナショナル・ビジネス・マシーンズ・コーポレーションによって提供されているPowerPC(R)プロセッサ、米カリフォルニア州Palo Altoのヒューレット・パッカード(Hewlett Packard Co.)によって提供されているHP Superdome with Intel Itanium II processors、もしくはインターナショナル・ビジネス・マシーンズ・コーポレーション、ヒューレット・パッカード、インテル・コーポレーション(Intel Corporation)、オラクル(Oracle)などによって提供されているアーキテクチャに基づく他の機械、またはこれらの組合せを含むことができる。IBM、z/Architecture、IBM Z、z/OS、PR/SMおよびPowerPCは、少なくとも1つの法域における、インターナショナル・ビジネス・マシーンズ・コーポレーションの商標または登録商標である。IntelおよびItaniumは、米国および他の国々における、インテル・コーポレーションまたはその子会社の商標または登録商標である。
ネイティブ中央処理ユニット12は、その環境内での処理中に使用される、1つもしくは複数の汎用レジスタまたは1つもしくは複数の専用レジスタあるいはその両方などの、1つもしくは複数のネイティブ・レジスタ20を含む。これらのレジスタは、特定の時点における環境の状態を表す情報を含む。
さらに、ネイティブ中央処理ユニット12は、メモリ14に記憶された命令およびコードを実行する。特定の1つの例では、中央処理ユニットが、メモリ14に記憶されたエミュレータ・コード22を実行する。このコードは、1つのアーキテクチャで構成されたコンピューティング環境が別のアーキテクチャをエミュレートすることを可能にする。例えば、エミュレータ・コード22は、z/Architectureハードウェア・アーキテクチャ以外のアーキテクチャに基づく、PowerPCプロセッサ、HP Superdomeサーバなどの機械が、z/Architectureハードウェア・アーキテクチャをエミュレートすること、ならびにz/Architectureハードウェア・アーキテクチャに基づいて開発されたソフトウェアおよび命令を実行することを可能にする。
エミュレータ・コード22に関するさらなる詳細を、図20Bを参照して説明する。メモリ14に記憶されたゲスト命令30は、ネイティブCPU12のアーキテクチャ以外のアーキテクチャで実行されるように開発された(例えば機械命令に相関する)ソフトウェア命令を含む。例えば、ゲスト命令30は、z/Architectureハードウェア・アーキテクチャに基づくプロセッサ上で実行されるように設計されたものだが、その代わりにネイティブCPU12上でエミュレートされている。ネイティブCPU12は例えばIntel Itanium IIプロセッサとすることができる。一例では、エミュレータ・コード22が、メモリ14から1つまたは複数のゲスト命令30を取得し、任意選択で、取得した命令に対するローカル・バッファリングを提供する命令フェッチ・ルーチン32を含む。エミュレータ・コード22はさらに、取得したゲスト命令のタイプを決定し、そのゲスト命令を、対応する1つまたは複数のネイティブ命令36に変換する命令変換ルーチン34を含む。この変換は、例えば、ゲスト命令が実行することになっている機能を識別すること、およびその機能を実行するネイティブ命令を選ぶことを含む。
さらに、エミュレータ・コード22は、ネイティブ命令を実行させるエミュレーション制御ルーチン40を含む。エミュレーション制御ルーチン40は、以前に取得した1つまたは複数のゲスト命令をエミュレートするネイティブ命令のルーチンを、ネイティブCPU12に実行させ、そのような実行の終わりに、次のゲスト命令または一群のゲスト命令の取得をエミュレートする命令フェッチ・ルーチンに制御を返すことができる。ネイティブ命令36の実行は、メモリ14からレジスタにデータをロードすること、レジスタからメモリにデータを再び記憶すること、または、変換ルーチンによって決定された、あるタイプの算術もしくは論理演算を実行することを含むことができる。
それぞれのルーチンは例えばソフトウェアに実装されており、そのソフトウェアは、メモリに記憶されており、ネイティブ中央処理ユニット12によって実行される。他の例では、これらのルーチンまたは演算のうちの1つまたは複数のルーチンまたは演算が、ファームウェア、ハードウェア、ソフトウェアまたはこれらの組合せに実装されている。エミュレートされたプロセッサのレジスタは、ネイティブCPUのレジスタ20を使用して、またはメモリ14の中の位置を使用することによってエミュレートすることができる。実施形態では、ゲスト命令30、ネイティブ命令36およびエミュレータ・コード22が同じメモリにあってもよく、または異なるメモリ・デバイスに分散していてもよい。
上で説明したコンピューティング環境は、使用することができるコンピューティング環境の例に過ぎない。限定はされないが、区分されていない(non-partitioned)他の環境、区分された他の環境もしくはエミュレートされた他の環境またはこれらの組合せを含む、他の環境を使用することもできる。実施形態は、いずれか1つの環境だけに限定されない。
本発明の1つまたは複数の態様を含むように、それぞれのコンピューティング環境を構成することができる。本発明の1つまたは複数の態様によれば、例えば、ソーティングもしくはマージングまたはその両方を提供するように、それぞれのコンピューティング環境を構成することができる。
1つまたは複数の態様は、クラウド・コンピューティングに関係している場合がある。
本開示はクラウド・コンピューティングに関する詳細な説明を含むが、本明細書に記載された教示の実施態様はクラウド・コンピューティング環境に限定されないことを理解すべきである。本発明の実施形態は、現在知られているまたは後に開発される他の任意のタイプのコンピューティング環境と併せて実施することができる。
クラウド・コンピューティングは、最小限の管理労力またはサービスのプロバイダとの最小限のインタラクションで迅速に供給およびリリースすることができる構成可能なコンピューティング・リソース(例えばネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、ストレージ、アプリケーション、仮想機械およびサービス)の共用プールへの都合のよいオンデマンド・ネットワーク・アクセスを可能にするサービス配信モデルである。このクラウド・モデルは、少なくとも5つの特徴、少なくとも3つのサービス・モデル、および少なくとも4つのデプロイメント(deployment)モデルを含むことができる。
特徴は以下のとおりである。
オンデマンド・セルフサービス:クラウド・コンシューマは、サーバ時間およびネットワーク・ストレージなどのコンピューティング機能の供給を、サービスのプロバイダとのヒューマン・インタラクションを必要とすることなく必要に応じて自動的に一方的に受けることができる。
ブロード・ネットワーク・アクセス:機能は、ネットワーク上で利用可能であり、異種のシンまたはシック・クライアント・プラットフォーム(例えば移動電話、ラップトップおよびPDA)による使用を促進する標準的機構を通してアクセスされる。
リソース・プーリング(resource pooling):マルチテナント・モデルを使用して多数のコンシューマにサービスを提供するため、プロバイダのコンピューティング・リソースはプールされており、要求に応じて、異なる物理的および仮想リソースが動的に割当ておよび再割当てされる。コンシューマは一般に、提供されたリソースの正確な位置を制御できずまたは正確な位置を知らないが、より高次の抽象化レベル(例えば国、州またはデータセンター)で位置を指定することができるという意味で、位置独立の感覚がある。
ラピッド・エラスティシティ(rapid elasticity):機能は、素早くスケールアウトするために迅速かつ弾力的に、場合によっては自動的に供給することができ、素早くスケールインするために迅速にリリースすることができる。コンシューマにとって、供給に利用可能な機能はしばしば無限であるように見え、いつでも好きな量だけ購入することができる。
メジャード・サービス(measured service):クラウド・システムは、サービスのタイプ(例えば、ストレージ、処理、帯域幅および使用中ユーザ・アカウント)に対して適切なある抽象化レベルで計測機能に介入することによって、リソースの使用状況を自動的に制御および最適化する。リソースの使用状況を監視、制御および報告して、利用されているサービスのプロバイダとコンシューマの両方に透明性を提供することができる。
サービス・モデルは以下のとおりである。
ソフトウェア・アズ・ア・サービス(SaaS):コンシューマに提供されるこの機能は、クラウド・インフラストラクチャ上でランしているプロバイダのアプリケーションを使用する機能である。ウェブ・ブラウザなどのシン・クライアント・インタフェース(例えばウェブ・ベースの電子メール)を通してさまざまなクライアント・デバイスからアプリケーションにアクセス可能である。場合によっては可能な限られたユーザ固有のアプリケーション構成の設定を除けば、コンシューマは、ネットワーク、サーバ、オペレーティング・システム、ストレージまたは個々のアプリケーション機能を含む基礎をなすクラウド・インフラストラクチャを管理もまたは制御もしない。
プラットフォーム・アズ・ア・サービス(PaaS):コンシューマに提供されるこの機能は、クラウド・インフラストラクチャ上で、プロバイダがサポートするプログラム言語およびツールを使用して作成されたコンシューマ作成または取得のアプリケーションをデプロイする機能である。コンシューマは、ネットワーク、サーバ、オペレーティング・システムまたはストレージを含む基礎をなすクラウド・インフラストラクチャを管理も制御もしないが、デプロイされたアプリケーションおよび場合によってはアプリケーション・ホスティング環境構成は制御することができる。
インフラストラクチャ・アズ・ア・サービス(IaaS):コンシューマに提供されるこの機能は、処理、ストレージ、ネットワークおよび他の基本的なコンピューティング・リソースを供給する機能であり、コンシューマは任意のソフトウェアをデプロイおよびランすることができ、このソフトウェアは、オペレーティング・システムおよびアプリケーションを含むことができる。コンシューマは、基礎をなすクラウド・インフラストラクチャを管理も制御もしないが、オペレーティング・システム、ストレージおよびデプロイされたアプリケーションは制御することができ、場合によっては、選択されたネットワーク構成要素(例えばホスト・ファイアウォール)を限定的に制御することができる。
デプロイメント・モデルは以下のとおりである。
プライベート・クラウド:このクラウド・インフラストラクチャは、組織体のためだけに運営される。インフラストラクチャは、その組織体または第三者が管理することができ、オンプレミス(on-premises)またはオフプレミス(off-premises)で存在することができる。
コミュニティ・クラウド:このクラウド・インフラストラクチャは、いくつかの組織体によって共有され、利害(例えばミッション、セキュリティ要件、ポリシーおよびコンプライアンス上の問題)を共有する特定のコミュニティをサポートする。インフラストラクチャは、その組織体または第三者が管理することができ、オンプレミスまたはオフプレミスで存在することができる。
パブリック・クラウド:このクラウド・インフラストラクチャは、一般大衆または大きな産業グループが利用可能であり、クラウド・サービスを販売している組織体によって所有される。
ハイブリッド・クラウド:このクラウド・インフラストラクチャは、固有の実体を維持しているが、データおよびアプリケーション・ポータビリティを可能にする標準化された技術または独占技術(例えばクラウド間のロード・バランシングのためのクラウド・バースティング(cloud bursting))によって1つに結合された2つ以上のクラウド(プライベート、コミュニティまたはパブリック)の合成体である。
クラウド・コンピューティング環境は、無国籍、低結合、モジュール性および意味論的相互運用性に重きを置くサービス指向の環境である。クラウド・コンピューティングの中心には、相互接続されたノードのネットワークを含むインフラストラクチャがある。
次に図21を参照すると、例示的なクラウド・コンピューティング環境50が示されている。示されているとおり、クラウド・コンピューティング環境50は1つまたは複数のクラウド・コンピューティング・ノード52を含み、クラウド・コンシューマによって使用されるローカル・コンピューティング・デバイス、例えばパーソナル・ディジタル・アシスタント(PDA)もしくは移動電話54A、デスクトップ・コンピュータ54B、ラップトップ・コンピュータ54Cまたは自動車コンピュータ・システム54Nあるいはこれらの組合せは、これらのノードと通信することができる。ノード52は互いに通信することができる。それらのノードは、上で説明したプライベート、コミュニティ、パブリックまたはハイブリッド・クラウドまたはこれらの組合せなどの1つまたは複数のネットワークに、物理的にまたは仮想的にグループ分けされていることがある(図示せず)。これによって、クラウド・コンピューティング環境50は、インフラストラクチャ、プラットフォームもしくはソフトウェアまたはこれらの組合せをサービスとして提供することができ、そのため、クラウド・コンシューマは、ローカル・コンピューティング・デバイス上にリソースを維持する必要がない。図21に示されたタイプのコンピューティング・デバイス54A~Nは単なる例であることが意図されていること、ならびにコンピューティング・ノード52およびクラウド・コンピューティング環境50は、任意のタイプのネットワーク上もしくはアドレス指定可能なネットワーク接続上またはその両方で(例えばウェブ・ブラウザを使用して)、コンピュータ化された任意のタイプのデバイスと通信することができることが理解される。
次に図22を参照すると、クラウド・コンピューティング環境50(図21)によって提供される一組の機能抽象化層が示されている。図22に示された構成要素、層および機能は単なる例であることが意図されており、本発明の実施形態はそれらに限定されないことを予め理解しておくべきである。図示のとおり、以下の層および対応する機能が提供される。
ハードウェアおよびソフトウェア層60は、ハードウェア構成要素およびソフトウェア構成要素を含む。ハードウェア構成要素の例は、メインフレーム61、RISC(縮小命令セット・コンピュータ)アーキテクチャ・ベースのサーバ62、サーバ63、ブレード・サーバ64、ストレージ・デバイス65ならびにネットワークおよびネットワーキング構成要素66を含む。いくつかの実施形態では、ソフトウェア構成要素が、ネットワーク・アプリケーション・サーバ・ソフトウェア67およびデータベース・ソフトウェア68を含む。
仮想化層70は抽象化層を提供し、この層から、仮想実体の以下の例を提供することができる:仮想サーバ71、仮想ストレージ72、仮想専用ネットワークを含む仮想ネットワーク73、仮想アプリケーションおよびオペレーティング・システム74、ならびに仮想クライアント75。
一例では、管理層80が以下の機能を提供することができる。リソース供給81は、クラウド・コンピューティング環境内でタスクを実行する目的に利用されるコンピューティング・リソースおよびその他のリソースの動的調達を提供する。計量および価格設定82は、クラウド・コンピューティング環境内でリソースが利用されたときの費用追跡、およびこれらのリソースの消費に対する課金または請求を提供する。一例では、これらのリソースがアプリケーション・ソフトウェア・ライセンスを含むことがある。セキュリティは、クラウド・コンシューマおよびタスクの識別確認ならびにデータおよび他のリソースの保護を提供する。ユーザ・ポータル83は、コンシューマおよびシステム管理者に、クラウド・コンピューティング環境へのアクセスを提供する。サービス水準管理84は、必要なサービス水準が達成されるようなクラウド・コンピューティング・リソースの割振りおよび管理を提供する。サービス水準合意(Service Level Agreement)(SLA)計画および履行85は、SLAによって将来必要になると予想されるクラウド・コンピューティング・リソースの事前調整および調達を提供する。
ワークロード層90は、クラウド・コンピューティング環境を利用することができる機能の例を提供する。この層から提供することができるワークロードおよび機能の例は、マッピングおよびナビゲーション91、ソフトウェア開発およびライフサイクル管理92、仮想教室教育配信93、データ解析処理94、トランザクション処理95、および圧縮/解凍処理96を含む。
本発明の態様は、インテグレーションの可能な技術的詳細レベルにおいて、システム、方法もしくはコンピュータ・プログラム製品、またはこれらの組合せであることができる。コンピュータ・プログラム製品は、本発明の態様をプロセッサに実行させるためのコンピュータ可読プログラム命令をその上に有するコンピュータ可読記憶媒体を含むことができる。
このコンピュータ可読記憶媒体は、命令実行デバイスが使用するための命令を保持および記憶することができる有形のデバイスとすることができる。このコンピュータ可読記憶媒体は、例えば、限定はされないが、電子ストレージ・デバイス、磁気ストレージ・デバイス、光学ストレージ・デバイス、電磁気ストレージ・デバイス、半導体ストレージ・デバイスまたはこれらの適当な組合せとすることができる。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、リードオンリー・メモリ(ROM)、消去可能なプログラマブル・リードオンリー・メモリ(EPROMまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク・リードオンリー・メモリ(CD-ROM)、ディジタル・バーサタイル・ディスク(DVD)、メモリ・スティック、フロッピー(R)・ディスク、機械的にエンコードされたデバイス、例えばパンチカードまたはその上に命令が記録された溝の中の一段高くなった構造体、およびこれらの適当な組合せを含む。本明細書で使用されるとき、コンピュータ可読記憶媒体は、それ自体が一過性の信号、例えば電波もしくは他の自由に伝搬する電磁波、ウェーブガイドもしくは他の伝送体内を伝搬する電磁波(例えば光ファイバ・ケーブル内を通る光パルス)、または電線を通して伝送される電気信号であると解釈されるべきではない。
本明細書に記載されたコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング/処理デバイスにダウンロードすることができ、またはネットワーク、例えばインターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワークもしくは無線ネットワークまたはそれらの組合せを介して外部コンピュータもしくは外部ストレージ・デバイスにダウンロードすることができる。このネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータもしくはエッジ・サーバ、またはこれらの組合せを含むことができる。それぞれのコンピューティング/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インタフェースは、コンピュータ可読プログラム命令をネットワークから受け取り、それらのコンピュータ可読プログラム命令を、それぞれのコンピューティング/処理デバイス内のコンピュータ可読記憶媒体に記憶するために転送する。
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、もしくは集積回路用の構成データであってもよく、またはSmalltalk(R)、C++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語または同種のプログラミング言語などの手続き型プログラミング言語を含む、1つまたは複数のプログラミング言語の任意の組合せで書かれた、ソース・コードもしくはオブジェクト・コードであってもよい。このコンピュータ可読プログラム命令は、全体がユーザのコンピュータ上で実行されてもよく、一部がユーザのコンピュータ上で実行されてもよく、独立型ソフトウェア・パッケージとして実行されてもよく、一部がユーザのコンピュータ上で、一部が遠隔コンピュータ上で実行されてもよく、または全体が遠隔コンピュータもしくは遠隔サーバ上で実行されてもよい。上記の最後のシナリオでは、遠隔コンピュータが、ローカル・エリア・ネットワーク(LAN)もしくはワイド・エリア・ネットワーク(WAN)を含む任意のタイプのネットワークを介してユーザのコンピュータに接続されてもよく、またはこの接続が、外部コンピュータに対して(例えばインターネット・サービス・プロバイダを使用してインターネットを介して)実施されてもよい。いくつかの実施形態では、本発明の態様を実施するために、例えばプログラム可能論理回路、フィールドプログラマブル・ゲート・アレイ(FPGA)またはプログラム可能論理アレイ(PLA)を含む電子回路が、このコンピュータ可読プログラム命令の状態情報を利用してその電子回路をパーソナライズすることにより、このコンピュータ可読プログラム命令を実行してもよい。
本明細書では、本発明の態様が、本発明の実施形態による方法、装置(システム)およびコンピュータ・プログラム製品の流れ図もしくはブロック図またはその両方の図を参照して説明される。それらの流れ図もしくはブロック図またはその両方の図のそれぞれのブロック、およびそれらの流れ図もしくはブロック図またはその両方の図のブロックの組合せは、コンピュータ可読プログラム命令によって実施することができることが理解される。
これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラム可能データ処理装置のプロセッサによって実行される命令が、流れ図もしくはブロック図またはその両方の図のブロックに指定された機能/動作を実施する手段を生成するように、汎用コンピュータ、専用コンピュータまたは他のプログラム可能データ処理装置のプロセッサに提供されて、マシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令はさらに、命令が記憶されたコンピュータ可読記憶媒体が、流れ図もしくはブロック図またはその両方の図のブロックに指定された機能/動作の態様を実施する命令を含む製品を含むように、コンピュータ可読記憶媒体に記憶され、コンピュータ、プログラム可能データ処理装置もしくは他のデバイスまたはこれらの組合せに特定の方式で機能するように指示することができるものであってもよい。
コンピュータ可読プログラム命令はさらに、コンピュータ、他のプログラム可能装置または他のデバイス上で実施される命令が、流れ図もしくはブロック図またはその両方の図のブロックに指定された機能/動作を実施するように、コンピュータによって実施されるプロセスを生み出すために、コンピュータ、他のプログラム可能データ処理装置または他のデバイス上にロードされ、コンピュータ、他のプログラム可能装置または他のデバイス上で一連の動作ステップを実行させるものであってもよい。
添付図中の流れ図およびブロック図は、本発明のさまざまな実施形態によるシステム、方法およびコンピュータ・プログラム製品の可能な実施態様のアーキテクチャ、機能および動作を示す。この点に関して、それらの流れ図またはブロック図のそれぞれのブロックは、指定された論理機能を実施する1つまたは複数の実行可能命令を含む、命令のモジュール、セグメントまたは部分を表すことがある。いくつかの代替実施態様では、ブロックに示された機能を、図に示された順序とは異なる順序で実施することができる。例えば、連続して示された2つのブロックが、実際は、実質的に同時に実行されることがあり、または、含まれる機能によってはそれらのブロックが逆の順序で実行されることもある。それらのブロック図もしくは流れ図またはその両方の図のそれぞれのブロック、ならびにそれらのブロック図もしくは流れ図またはその両方の図のブロックの組合せを、指定された機能もしくは動作を実行しまたは専用ハードウェアとコンピュータ命令の組合せを実施するハードウェアベースの専用システムによって実施することができることにも留意すべきである。
以上に加えて、顧客環境の管理を提供するサービス・プロバイダが、1つまたは複数の態様を、例えば提供し、提案し、デプロイし、管理し、供給することができる。例えば、サービス・プロバイダは、1または複数の顧客に対して、1つまたは複数の態様を実行するコンピュータ・コードもしくはコンピュータ・インフラストラクチャまたはその両方を、例えば生成し、維持し、サポートすることができる。見返りとして、サービス・プロバイダは、例として、サブスクリプション(subscription)契約もしくは料金(fee)契約またはその両方の下で顧客から支払いを受け取ることができる。それに加えて、またはその代わりに、サービス・プロバイダは、1または複数の第三者への広告内容の販売によって支払いを受け取ることもできる。
一態様では、1つまたは複数の実施形態を実行するためにアプリケーションをデプロイすることができる。一例として、このアプリケーションのデプロイは、1つまたは複数の実施形態を実行するように動作可能なコンピュータ・インフラストラクチャを提供することを含む。
さらなる態様として、コンピューティング・インフラストラクチャをデプロイすることができ、これは、コンピュータ可読コードをコンピューティング・システムに統合することを含み、このコンピュータ可読コードは、コンピューティング・システムとともに、1つまたは複数の実施形態を実行することができる。
さらなる態様として、コンピューティング・インフラストラクチャを統合するためのプロセスであって、コンピュータ可読コードをコンピューティング・システムに統合することを含むプロセスを提供することができる。このコンピュータ・システムはコンピュータ可読媒体を含み、このコンピュータ媒体は、1つまたは複数の実施形態を含む。このコンピュータ可読コードは、コンピュータ・システムとともに、1つまたは複数の実施形態を実行することができる。
以上に、さまざまな実施形態を説明したが、それらの実施形態は例に過ぎない。例えば、他のアーキテクチャのコンピューティング環境を使用して、1つまたは複数の実施形態を組み込み、使用することもできる。さらに、異なる命令またはオペレーションを使用することもできる。さらに、異なるレジスタを使用すること、もしくは(レジスタ番号以外の)他のタイプの指示を指定すること、あるいはその両方を実行することもできる。多くの変形形態が可能である。
さらに、他のタイプのコンピューティング環境が利点を得ること、および他のタイプのコンピューティング環境を使用することができる。一例として、プログラム・コードを記憶することもしくは実行することに適したデータ処理システム、またはその両方に適したデータ処理システムであって、メモリ要素に直接に結合されたまたはシステム・バスを通してメモリ要素に間接的に結合された少なくとも2つプロセッサを含むデータ処理システムが使用可能である。このメモリ要素は例えば、プログラム・コードの実際の実行中に使用されるローカル・メモリ、大容量ストレージ、およびキャッシュ・メモリを含み、キャッシュ・メモリは、実行中に大容量ストレージからコードを取り出さなければならない回数を減らすために、少なくとも一部のプログラム・コードの一時記憶を提供する。
(限定はされないが、キーボード、ディスプレイ、ポインティング・デバイス、DASD、テープ、CD、DVD、サム・ドライブ(thumb drive)および他のメモリ媒体などを含む)入力/出力デバイスないしI/Oデバイスを、直接にまたはI/Oコントローラを介在させて、システムに結合することができる。データ処理システムが、介在する専用または公衆ネットワークを通して他のデータ処理システムまたは遠隔プリンタもしくはストレージ・デバイスに結合されることを可能にするために、システムにネットワーク・アダプタを結合することもできる。モデム、ケーブル・モデムおよびEthernet(R)カードは、使用可能なタイプのネットワーク・アダプタの例である。
本明細書で使用される用語の目的は特定の実施形態を説明することだけであり、それらの用語が限定を目的とすることは意図されていない。文脈からそうでないことが明らかである場合を除き、本明細書で使用されるとき、単数形の「ある(a)」、「1つの(an)」および「その(the)」は複数形も含むことが意図されている。本明細書で使用されるとき、用語「備える(comprises)」もしくは「備えている(comprising)」またはその両方は、明示された特徴、完全体(integer)、ステップ、動作、要素もしくは構成要素またはこれらの組合せの存在を指定するが、他の1つもしくは複数の特徴、完全体、ステップ、動作、要素、構成要素もしくはこれらのグループ、またはこれらの組合せの存在または追加を排除しないこともさらに理解される。
特許請求の範囲に記載された全てのミーンズまたはステップ・プラス・ファンクション要素の対応する構造体、材料、動作、および均等物は、存在する場合には、特に特許請求の範囲に記載された他の請求の要素とともに機能を実行するための任意の構造体、材料または動作を含むことが意図されている。図示および説明のために1つまたは複数の実施形態の記述を提示したが、その記述が網羅的であること、または開示された形態に限定されることは意図されていない。当業者には、多くの変更および変形形態が明白である。実施形態は、さまざまな態様および実用的用途を最もよく説明するため、ならびに企図された特定の使用に適したさまざまな変更を有するさまざまな実施形態を当業者が理解することを可能にするために選択し、説明した。

Claims (17)

  1. コンピューティング環境内での処理を容易にするためのコンピュータ・プログラムを記録した、処理回路によって可読のコンピュータ可読記憶媒体であって、方法を実行するための命令を記憶していて、前記方法が、
    前記コンピューティング環境の汎用プロセッサによって、複数の機能のうちの機能を実行するための命令を取得することであって、前記機能が前記命令の実行に使用される暗黙の汎用レジスタの機能コードによって指定されており、前記命令が、圧縮のための業界標準に準拠した命令セット・アーキテクチャの単一のアーキテクト命令である、前記取得することと、
    前記命令を実行することと
    を含み、前記命令を実行することが、
    前記機能が圧縮機能であることまたは解凍機能であることに基づいて、入力データの状態を、前記入力データが現れる順番に、前記入力データの圧縮されていない形態と前記入力データの圧縮された形態との間で変換して、変換された状態のデータを提供すること、および
    タスクを実行する際に使用するために、前記変換された状態のデータを出力として提供すること
    を含
    前記複数の機能が、照会機能、前記圧縮機能、動的ハフマン表生成機能および前記解凍機能を含む、
    コンピュータ可読記憶媒体。
  2. 前記入力データの前記状態を変換することが、前記業界標準に準拠した圧縮フォーマットを使用する、請求項1に記載のコンピュータ可読記憶媒体。
  3. 前記圧縮フォーマットがDEFLATE圧縮フォーマットを含む、請求項2に記載のコンピュータ可読記憶媒体。
  4. 前記タスクが、圧縮データを含む前記出力を使用する1つまたは複数のオペレーションを実行すること、圧縮されていないデータを含む前記出力を使用する1つまたは複数のオペレーションを実行することからなるタスクのグループから選択される、請求項1に記載のコンピュータ可読記憶媒体。
  5. 前記命令が、オペレーションを指定するためのオペレーション・コードを含むオペレーション・コード・フィールドと、前記命令によって使用される複数のレジスタを指定するための複数のレジスタ・フィールドとを含む、請求項1に記載のコンピュータ可読記憶媒体。
  6. 前記複数のレジスタが、前記命令によって出力として使用される出力オペランド位置を識別するために使用される1つのレジスタと、前記命令によって入力として使用される入力オペランド位置を識別するために使用される別のレジスタとを含み、前記入力が、実行される前記機能に依存する、請求項5に記載のコンピュータ可読記憶媒体。
  7. 前記機能が前記圧縮機能であることに基づいて、前記入力が、前記入力オペランド位置からのデータを含み、前記データが、前記出力オペランド位置に記憶される圧縮データ・シンボルを提供するようにエンコードされ、前記機能が前記解凍機能であることに基づいて、前記入力が、前記入力オペランド位置からの前記圧縮データ・シンボルを含み、前記圧縮データ・シンボルが、前記出力オペランド位置に記憶される圧縮されていないデータを提供するようにデコードされる、請求項6に記載のコンピュータ可読記憶媒体。
  8. 前記命令が、前記汎用レジスタを選択し使用する、請求項5に記載のコンピュータ可読記憶媒体。
  9. 前記命令が、前記複数の機能のうちの1つまたは複数の機能に関して前記命令によって使用されるパラメータ・ブロックのアドレスを提供するための選択された別のレジスタをさらに使用する、請求項8に記載のコンピュータ可読記憶媒体。
  10. 実行される前記機能が前記動的ハフマン表生成機能であり、前記命令を実行することが、前記機能が前記動的ハフマン表生成機能であることに基づいて、前記命令の別の実行時に実行される前記機能が前記圧縮機能または前記解凍機能であるときに使用される動的ハフマン表の圧縮表現を生成することを含む、請求項1に記載のコンピュータ可読記憶媒体。
  11. コンピューティング環境内での処理を容易にするためのコンピュータ・システムであって、前記コンピュータ・システムが、
    メモリと、
    前記メモリに結合された汎用プロセッサと
    を備え、前記コンピュータ・システムが、方法を実行するように構成されており、前記方法が、
    前記汎用プロセッサによって、複数の機能のうちの機能を実行するための命令を取得することであって、前記機能が前記命令の実行に使用される暗黙の汎用レジスタの機能コードによって指定されており、前記命令が、圧縮のための業界標準に準拠した命令セット・アーキテクチャの単一のアーキテクト命令である、前記取得することと、
    前記命令を実行することと
    を含み、前記命令を実行することが、
    前記機能が圧縮機能であることまたは解凍機能であることに基づいて、入力データの状態を、前記入力データが現れる順番に、前記入力データの圧縮されていない形態と前記入力データの圧縮された形態との間で変換して、変換された状態のデータを提供すること、および
    タスクを実行する際に使用するために、前記変換された状態のデータを出力として提供すること
    を含
    実行される前記機能が動的ハフマン表生成機能であり、前記命令を実行することが、前記機能が前記動的ハフマン表生成機能であることに基づいて、前記命令の別の実行時に実行される前記機能が前記圧縮機能または前記解凍機能であるときに使用される動的ハフマン表の圧縮表現を生成することを含む、
    コンピュータ・システム。
  12. 前記入力データの前記状態を変換することが、前記業界標準に準拠した圧縮フォーマットを使用する、請求項1に記載のコンピュータ・システム。
  13. 前記命令が、オペレーションを指定するためのオペレーション・コードを含むオペレーション・コード・フィールドと、前記命令によって使用される複数のレジスタを指定するための複数のレジスタ・フィールドとを含む、請求項1に記載のコンピュータ・システム。
  14. 前記複数のレジスタが、前記命令によって出力として使用される出力オペランド位置を識別するために使用される1つのレジスタと、前記命令によって入力として使用される入力オペランド位置を識別するために使用される別のレジスタとを含み、前記入力が前記機能に依存し、前記機能が前記圧縮機能であることに基づいて、前記入力が、前記入力オペランド位置からのデータを含み、前記データが、前記出力オペランド位置に記憶される圧縮データ・シンボルを提供するようにエンコードされ、前記機能が前記解凍機能であることに基づいて、前記入力が、前記入力オペランド位置からの前記圧縮データ・シンボルを含み、前記圧縮データ・シンボルが、前記出力オペランド位置に記憶される圧縮されていないデータを提供するようにデコードされる、請求項1に記載のコンピュータ・システム。
  15. コンピューティング環境内での処理を容易にするコンピュータ実施方法であって、前記コンピュータ実施方法が、
    前記コンピューティング環境の汎用プロセッサによって、複数の機能のうちの機能を実行するための命令を取得することであって、前記機能が前記命令の実行に使用される暗黙の汎用レジスタの機能コードによって指定されており、前記命令が、圧縮のための業界標準に準拠した命令セット・アーキテクチャの単一のアーキテクト命令である、前記取得することと、
    前記命令を実行することと
    を含み、前記命令を実行することが、
    前記機能が圧縮機能であることまたは解凍機能であることに基づいて、入力データの状態を、前記入力データが現れる順番に、前記入力データの圧縮されていない形態と前記入力データの圧縮された形態との間で変換して、変換された状態のデータを提供すること、および
    タスクを実行する際に使用するために、前記変換された状態のデータを出力として提供すること
    を含
    実行される前記機能が動的ハフマン表生成機能であり、前記命令を実行することが、前記機能が前記動的ハフマン表生成機能であることに基づいて、前記命令の別の実行時に実行される前記機能が前記圧縮機能または前記解凍機能であるときに使用される動的ハフマン表の圧縮表現を生成することを含む、
    方法。
  16. 前記入力データの前記状態を変換することが、前記業界標準に準拠した圧縮フォーマットを使用する、請求項1に記載のコンピュータ実施方法。
  17. 前記命令が、オペレーションを指定するためのオペレーション・コードを含むオペレーション・コード・フィールドと、前記命令によって使用される複数のレジスタを指定するための複数のレジスタ・フィールドとを含み、前記複数のレジスタが、前記命令によって出力として使用される出力オペランド位置を識別するために使用される1つのレジスタと、前記命令によって入力として使用される入力オペランド位置を識別するために使用される別のレジスタとを含み、前記入力が前記機能に依存し、前記機能が前記圧縮機能であることに基づいて、前記入力が、前記入力オペランド位置からのデータを含み、前記データが、前記出力オペランド位置に記憶される圧縮データ・シンボルを提供するようにエンコードされ、前記機能が前記解凍機能であることに基づいて、前記入力が、前記入力オペランド位置からの前記圧縮データ・シンボルを含み、前記圧縮データ・シンボルが、前記出力オペランド位置に記憶される圧縮されていないデータを提供するようにデコードされる、請求項1に記載のコンピュータ実施方法。
JP2021532806A 2019-01-31 2020-01-23 圧縮/解凍オペレーションを実行するための汎用プロセッサ命令 Active JP7442526B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/263,735 2019-01-31
US16/263,735 US10630312B1 (en) 2019-01-31 2019-01-31 General-purpose processor instruction to perform compression/decompression operations
PCT/EP2020/051658 WO2020156926A1 (en) 2019-01-31 2020-01-23 General-purpose processor instruction to perform compression/decompression operations

Publications (2)

Publication Number Publication Date
JP2022518665A JP2022518665A (ja) 2022-03-16
JP7442526B2 true JP7442526B2 (ja) 2024-03-04

Family

ID=69192075

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021532806A Active JP7442526B2 (ja) 2019-01-31 2020-01-23 圧縮/解凍オペレーションを実行するための汎用プロセッサ命令

Country Status (14)

Country Link
US (1) US10630312B1 (ja)
EP (1) EP3918469A1 (ja)
JP (1) JP7442526B2 (ja)
KR (1) KR102598928B1 (ja)
CN (1) CN113383309A (ja)
AU (1) AU2020213853B2 (ja)
BR (1) BR112021015027A2 (ja)
CA (1) CA3127849A1 (ja)
IL (1) IL283617B2 (ja)
MX (1) MX2021009157A (ja)
SG (1) SG11202104106WA (ja)
TW (1) TWI764078B (ja)
WO (1) WO2020156926A1 (ja)
ZA (1) ZA202104999B (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10831497B2 (en) * 2019-01-31 2020-11-10 International Business Machines Corporation Compression/decompression instruction specifying a history buffer to be used in the compression/decompression of data
US11226839B2 (en) * 2019-02-27 2022-01-18 International Business Machines Corporation Maintaining compatibility for complex functions over multiple machine generations
US11663119B2 (en) * 2020-05-29 2023-05-30 International Business Machines Corporation Select decompression headers and symbol start indicators used in writing decompressed data
US11669331B2 (en) * 2021-06-17 2023-06-06 International Business Machines Corporation Neural network processing assist instruction
US20230267003A1 (en) * 2022-02-23 2023-08-24 International Business Machines Corporation Padding input data for artificial intelligence accelerators
TWI820994B (zh) * 2022-11-01 2023-11-01 大陸商星宸科技股份有限公司 指令壓縮方法、指令解壓縮方法及流程壓縮方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007080278A (ja) 2003-05-12 2007-03-29 Internatl Business Mach Corp <Ibm> 埋め込み符号を持ったコンピュータ命令値フィールド
JP2010258532A (ja) 2009-04-21 2010-11-11 Internatl Business Mach Corp <Ibm> ビット長を符号に変換する回路及び方法
JP2014182810A (ja) 2013-03-15 2014-09-29 Intel Corp デフレート圧縮のために高速で高圧縮のlz77トークン化及びハフマンエンコーディングを行う並列装置
JP2016213806A (ja) 2015-05-11 2016-12-15 ヴィア アライアンス セミコンダクター カンパニー リミテッド 入力ブロックのスキャンと同時にソート済みシンボル・リストを維持するハードウェア・データ圧縮器
US20170161362A1 (en) 2015-12-03 2017-06-08 International Business Machines Corporation Memory preserving parse tree based compression with entropy coding

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5926208A (en) * 1992-02-19 1999-07-20 Noonen; Michael Video compression and decompression arrangement having reconfigurable camera and low-bandwidth transmission capability
US5442350A (en) * 1992-10-29 1995-08-15 International Business Machines Corporation Method and means providing static dictionary structures for compressing character data and expanding compressed data
US6604158B1 (en) * 1999-03-11 2003-08-05 Realtime Data, Llc System and methods for accelerated data storage and retrieval
US20030185301A1 (en) * 2002-04-02 2003-10-02 Abrams Thomas Algie Video appliance
GB0513433D0 (en) * 2005-06-30 2005-08-10 Nokia Corp Signal message compressor
US7991622B2 (en) * 2007-03-20 2011-08-02 Microsoft Corporation Audio compression and decompression using integer-reversible modulated lapped transforms
US20100223237A1 (en) * 2007-11-05 2010-09-02 University Of Florida Research Foundation, Inc. Lossless data compression and real-time decompression
CN101977061B (zh) 2010-10-19 2012-12-26 广西师范大学 一种通用信息的无损压缩与解压缩方法
WO2012053015A2 (en) * 2010-10-22 2012-04-26 Jana, Tejaswini, Ramesh Compression and decompression of data at high speed in solid state storage
US9766812B2 (en) 2011-07-20 2017-09-19 Veritas Technologies Llc Method and system for storing data in compliance with a compression handling instruction
US20130099946A1 (en) * 2011-10-21 2013-04-25 International Business Machines Corporation Data Compression Utilizing Variable and Limited Length Codes
US10534606B2 (en) * 2011-12-08 2020-01-14 Oracle International Corporation Run-length encoding decompression
US8593308B1 (en) * 2012-05-31 2013-11-26 International Business Machines Corporation Method of accelerating dynamic Huffman decompaction within the inflate algorithm
US20140006536A1 (en) 2012-06-29 2014-01-02 Intel Corporation Techniques to accelerate lossless compression
US9154157B2 (en) * 2012-09-27 2015-10-06 Intel Corporation Search unit to accelerate variable length compression/decompression
US8947270B2 (en) * 2013-06-29 2015-02-03 Intel Corporation Apparatus and method to accelerate compression and decompression operations
US9374106B2 (en) 2013-08-28 2016-06-21 International Business Machines Corporation Efficient context save/restore during hardware decompression of DEFLATE encoded data
US9337862B2 (en) * 2014-06-09 2016-05-10 Tidal Systems, Inc. VLSI efficient Huffman encoding apparatus and method
US9306596B2 (en) 2014-06-27 2016-04-05 Intel Corporation Hybrid CAM assisted deflate decompression accelerator
US10102215B2 (en) * 2015-03-27 2018-10-16 Intel Corporation Apparatus for hardware implementation of lossless data compression
US9564917B1 (en) * 2015-12-18 2017-02-07 Intel Corporation Instruction and logic for accelerated compressed data decoding
CN105871382B (zh) 2016-03-29 2019-10-18 中海油信息科技有限公司 一种Micaps第四类格点数据无损压缩算法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007080278A (ja) 2003-05-12 2007-03-29 Internatl Business Mach Corp <Ibm> 埋め込み符号を持ったコンピュータ命令値フィールド
JP2010258532A (ja) 2009-04-21 2010-11-11 Internatl Business Mach Corp <Ibm> ビット長を符号に変換する回路及び方法
JP2014182810A (ja) 2013-03-15 2014-09-29 Intel Corp デフレート圧縮のために高速で高圧縮のlz77トークン化及びハフマンエンコーディングを行う並列装置
JP2016213806A (ja) 2015-05-11 2016-12-15 ヴィア アライアンス セミコンダクター カンパニー リミテッド 入力ブロックのスキャンと同時にソート済みシンボル・リストを維持するハードウェア・データ圧縮器
US20170161362A1 (en) 2015-12-03 2017-06-08 International Business Machines Corporation Memory preserving parse tree based compression with entropy coding

Also Published As

Publication number Publication date
TWI764078B (zh) 2022-05-11
MX2021009157A (es) 2022-03-17
IL283617B1 (en) 2023-10-01
JP2022518665A (ja) 2022-03-16
CN113383309A (zh) 2021-09-10
BR112021015027A2 (pt) 2021-10-05
IL283617B2 (en) 2024-02-01
US10630312B1 (en) 2020-04-21
CA3127849A1 (en) 2020-08-06
AU2020213853B2 (en) 2022-09-08
WO2020156926A1 (en) 2020-08-06
AU2020213853A1 (en) 2021-06-03
EP3918469A1 (en) 2021-12-08
IL283617A (en) 2021-07-29
SG11202104106WA (en) 2021-05-28
ZA202104999B (en) 2022-08-31
KR102598928B1 (ko) 2023-11-03
TW202034161A (zh) 2020-09-16
KR20210108995A (ko) 2021-09-03

Similar Documents

Publication Publication Date Title
JP7442526B2 (ja) 圧縮/解凍オペレーションを実行するための汎用プロセッサ命令
JP7442529B2 (ja) データの圧縮/解凍で使用する履歴バッファを指定する圧縮/解凍命令
US10698854B1 (en) Secure and efficient application data processing
JP7481073B2 (ja) メモリ境界の収容のためのオーバーフロー管理方法、システム、プログラム
US11449367B2 (en) Functional completion when retrying a non-interruptible instruction in a bi-modal execution environment
US11061685B2 (en) Extended asynchronous data mover functions compatibility indication
JP7430195B2 (ja) 複数のマシン世代にわたる複合体の機能の互換性の維持

Legal Events

Date Code Title Description
RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20220512

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220622

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20230428

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20230516

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230728

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20231031

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20240123

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20240205

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20240220

R150 Certificate of patent or registration of utility model

Ref document number: 7442526

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150