(57)【特許請求の範囲】
【請求項１】
複数のデータ要素をそれぞれ有するパック・データを含むデータの記憶用の記憶域を備え；
汎用プロセッサの実行装置であって、第１のソース・データおよび第２のソース・データを識別できるフォーマットのパック・データ命令セットによって指定された演算を実行する実行装置を備え、この実行装置で実行できる前記パック・データ命令セットには、少なくとも、
アンパックの結果パック・データの生成、すなわち、前記第１のソース・データにおける全データ要素よりも少ない数のデータ要素に、当該データ要素に対応する、前記第２のソース・データ中のデータ要素を、インタリーブさせて得られる結果パック・データの生成をさせ、そして、その結果パック・データを前記記憶域へ記憶させる、１または複数のアンパック・タイプの演算と；
パックの結果パック・データの生成、すなわち、前記第１のソース・データおよび前記第２のソース・データにおける各データ要素から導出した複数ビット部分を含んで構成される結果パック・データの生成をさせ、そして、その結果パック・データを前記記憶域へ記憶させる、１または複数のパック・タイプの演算と；
パック乗算の結果パック・データの生成、すなわち、個々の結果要素として、前記第１のソース・データの各データ要素に、当該データ要素に対応する、前記第２のソース・データ中のデータ要素を、乗算して得られたものの上位ビットまたは下位ビットを含んでいる、結果パック・データの生成をさせ、そして、その結果パック・データを前記記憶域へ記憶させる、１または複数のパック乗算タイプの演算と；
パック加算の結果パック・データの生成、すなわち、個々の結果要素として、前記第１のソース・データの各データ要素に、当該データ要素に対応する、前記第２のソース・データ中のデータ要素を、加算して得られたものを含んでいる、結果パック・データの生成をさせ、そして、その結果パック・データを前記記憶域へ記憶させる、１または複数のパック加算タイプの演算と；
パック減算の結果パック・データの生成、すなわち、個々の結果要素として、前記第１のソース・データの各データ要素から、当該データ要素に対応する、前記第２のソース・データ中のデータ要素を、減算して得られたものを含んでいる、結果パック・データの生成をさせ、そして、その結果パック・データを前記記憶域へ記憶させる、１または複数のパック減算タイプの演算と；
パック比較の結果パック・データの生成、すなわち、個々の結果要素が、前記第１のソース・データの各データ要素と、当該データ要素に対応する、前記第２のソース・データ中のデータ要素との比較結果を表すマスクを含み、各マスクにおいて、対応する比較が真であったときは全てのビットが第１の所定値であり、対応する比較が偽であったときは全てのビットが第２の所定値であるようにされている結果パック・データの生成をさせ、そして、その結果パック・データを前記記憶域へ記憶させる、１または複数のパック比較タイプの演算と；
乗算−加算の結果パック・データの生成、すなわち、第１および第２の結果要素を相互に加算せずに個別に格納できるように含み、前記第１の結果要素は、前記第１および第２のソース・データそれぞれからの相互に対応している対のデータ要素の２対について、対ごとに乗算をして加算したものを表し、かつ、前記第２の結果要素は、前記第１および第２のソース・データそれぞれからの相互に対応している対のデータ要素の、他の２対について、対ごとに乗算をして加算したものを表しており、前記第１および第２の結果要素はそれらの生成に用いた対のデータ要素に比べて高精度であるようにされている結果パック・データの生成をさせ、そして、その結果パック・データを前記記憶域へ記憶させる、１または複数の乗算−加算・タイプの演算と；
パック・シフトの結果パック・データの生成、すなわち、個々の結果要素として、前記第１のソース・データの各データ要素を、前記第２のソース・データにより指定されたビット数だけシフトさせたものであって、必要があれば前記ビット数のビットに充填がされている、結果パック・データの生成をさせ、そして、その結果パック・データを前記記憶域へ記憶させる、１または複数のパック・シフト・タイプの演算と
が含まれている、ことを特徴とする装置。
【請求項２】
パック加算、乗算−加算及びアンパックのタイプの演算は、乗算累算の効率的演算に有用であり、
乗算−加算、パック・シフト、パックのタイプの演算は、複素数の乗算の効率的演算に有用であり、
パック加算、乗算−加算、パック・シフトのタイプの演算は、ドット積の効率的演算に有用であり、
パック、アンパック、パック・シフト、パック加算のタイプの演算は、二次元ループ・フィルタの効率的演算に有用であり、
乗算−加算、パック・シフト、アンパックのタイプの演算は、離散余弦変換の効率的演算に有用である
ことを特徴とする請求項１に記載の装置。
【請求項３】
複数のデータ要素をそれぞれ有するパック・データを含むデータの記憶用の記憶域を備え；
汎用プロセッサの実行装置であって、パック・データ命令によって指定された演算を実行するため、
１または複数のアンパック・タイプの演算を実行する手段であって、第１のソース・データおよび第２のソース・データを識別できるフォーマットのアンパック命令に応じて、(a)前記第１のソース・データにおける全データ要素よりも少ない数のデータ要素に、当該データ要素に対応する、前記第２のソース・データ中のデータ要素を、インタリーブさせて、アンパック命令の結果パック・データを生成し、(b)生成されたアンパック命令の結果パック・データを前記記憶域へ記憶させる、アンパック・タイプ演算の実行手段と、
１または複数のパック・タイプの演算を実行する手段であって、第１のソース・データおよび第２のソース・データを識別できるフォーマットのパック命令に応じて、(a)前記第１のソース・データおよび前記第２のソース・データにおける各データ要素から複数ビット部分を導出し、その複数ビット部分を含んで構成される、パック命令の結果パック・データを生成し、(b)生成されたパック命令の結果パック・データを前記記憶域へ記憶させる、パック・タイプ演算の実行手段と、
１または複数のパック乗算タイプの演算を実行する手段であって、第１のソース・データおよび第２のソース・データを識別できるフォーマットのパック乗算命令に応じて、(a)前記第１のソース・データの各データ要素に、当該データ要素に対応する、前記第２のソース・データ中のデータ要素を、乗算して得られたものの上位ビットまたは下位ビットを、個々の結果要素に含めて成る、パック乗算命令の結果パック・データを生成し、(b)生成されたパック乗算命令の結果パック・データを前記記憶域へ記憶させる、パック乗算タイプ演算の実行手段と、
１または複数のパック加算タイプの演算を実行する手段であって、第１のソース・データおよび第２のソース・データを識別できるフォーマットのパック加算命令に応じて、(a)前記第１のソース・データの各データ要素に、当該データ要素に対応する、前記第２のソース・データ中のデータ要素を、加算して得られたものを、個々の結果要素に含めて成る、パック加算命令の結果パック・データを生成し、(b)生成されたパック加算命令の結果パック・データを前記記憶域へ記憶させる、パック加算タイプ演算の実行手段と、
１または複数のパック減算タイプの演算を実行する手段であって、第１のソース・データおよび第２のソース・データを識別できるフォーマットのパック減算命令に応じて、(a)前記第１のソース・データの各データ要素から、当該データ要素に対応する、前記第２のソース・データ中のデータ要素を、減算して得られたものを、個々の結果要素に含めて成る、パック命令の結果パック・データを生成し、(b)生成されたパック減算命令の結果パック・データを前記記憶域へ記憶させる、パック減算タイプ演算の実行手段と、
１または複数のパック比較タイプの演算を実行する手段であって、第１のソース・データおよび第２のソース・データを識別できるフォーマットのパック比較命令に応じて、(a)前記第１のソース・データの各データ要素と、当該データ要素に対応する、前記第２のソース・データ中のデータ要素との比較結果を表すマスクを、個々の結果要素に含めて成り、各マスクにおいて、対応する比較が真であったときは全てのビットが第１の所定値であり、対応する比較が偽であったときは全てのビットが第２の所定値であるようにされている、パック比較命令の結果パック・データを生成し、(b)生成されたパック比較命令の結果パック・データを前記記憶域へ記憶させる、パック比較タイプ演算の実行手段と、
１または複数の乗算−加算タイプの演算を実行する手段であって、第１のソース・データおよび第２のソース・データを識別できるフォーマットの乗算−加算命令に応じて、(a)乗算−加算命令の結果パック・データの生成、すなわち、第１および第２の結果要素を相互に加算せずに個別に格納できるように含み、前記第１の結果要素は、前記第１および第２のソース・データそれぞれからの相互に対応している対のデータ要素の２対について、対ごとに乗算をして加算したものを表し、かつ、前記第２の結果要素は、前記第１および第２のソース・データそれぞれからの相互に対応している対のデータ要素の、他の２対について、対ごとに乗算をして加算したものを表しており、前記第１および第２の結果要素はそれらの生成に用いた対のデータ要素に比べて高精度であるようにされている、乗算−加算命令の結果パック・データの生成を行い、(b)生成をされた乗算−加算命令の結果パック・データを前記記憶域へ記憶させる、乗算−加算タイプ演算の実行手段と、
１または複数のパック・シフト・タイプの演算を実行する手段であって、第１のソース・データおよび第２のソース・データを識別できるフォーマットのパック・シフト命令に応じて、(a)前記第１のソース・データの各データ要素を、前記第２のソース・データにより指定されたビット数だけシフトさせたものであって、必要により前記ビット数のビットに充填がされたものを、個々の結果要素に含めて構成される、パック・シフト命令の結果パック・データを生成し、(b)生成されたパック・シフト命令の結果パック・データを前記記憶域へ記憶させる、パック・シフト・タイプ演算の実行手段と、
を有している実行装置を備える、ことを特徴とする装置。
【請求項４】
パック加算タイプ演算の実行手段、乗算−加算タイプ演算の実行手段及びアンパックタイプ演算の実行手段は、乗算累算の効率的演算に有用であり、
乗算−加算タイプ演算の実行手段、パック・シフト・タイプ演算の実行手段、パック・タイプ演算の実行手段は、複素数の乗算の効率的演算に有用であり、
パック加算タイプ演算の実行手段、乗算−加算タイプ演算の実行手段、パック・シフト・タイプ演算の実行手段は、ドット積の効率的演算に有用であり、
パック・タイプ演算の実行手段、アンパック・タイプ演算の実行手段、パック・シフト・タイプ演算の実行手段、パック加算タイプ演算の実行手段は、二次元ループ・フィルタの効率的演算に有用であり、
乗算−加算タイプ演算の実行手段、パック・シフト・タイプ演算の実行手段、アンパック・タイプ演算の実行手段は、離散余弦変換の効率的演算に有用である実行装置を備えている、ことを特徴とする請求項３に記載の装置。
【請求項５】
前記１または複数のアンパック・タイプの演算の少なくとも１つにおいて、結果パック・データが前記第１のソース・データおよび前記第２のソース・データの両方の上半分または下半分を含むことを特徴とする請求項１〜４の何れか１項に記載の装置。
【請求項６】
前記１または複数のパック・タイプの演算の少なくとも１つにおいて、前記第１および第２のソース・データの各データ要素がＮビットのデータ要素であり、前記複数ビット部分それぞれがＮ／２ビットの結果要素であることを特徴とする請求項１〜４の何れか１項に記載の装置。
【請求項７】
前記１または複数の乗算−加算タイプの演算の少なくとも１つにおいて、前記第１および第２のソース・データの各データ要素がＮビットのデータ要素を含み、前記第１の結果要素と第２の結果要素のそれぞれが２Ｎビットの結果要素であることを特徴とする請求項１〜６の何れか１項に記載の装置。
【請求項８】
前記記憶域が１つまたは複数のレジスタの集合であることを特徴とする請求項１〜７のいずれか１項に記載の装置。
【請求項９】
前記フォーマットが、第１の記憶位置をソース−宛先オペランドとして指定し、第２の記憶位置をソース・オペランドとして指定することを含むことを特徴とする請求項１〜８の何れか１項に記載の装置。
【請求項１０】
前記ソース・オペランドと前記ソース−宛先オペランドのそれぞれがレジスタ番号として指定され、前記ソース・オペランドは演算コード・バイトの０から２のビットによって指定され、前記ソース−宛先オペランドは前記演算コード・バイトの３から５のビットによって指定されることを特徴とする請求項９に記載の装置。
【請求項１１】
前記１または複数のパック・シフト・タイプの演算には：
個々の結果要素が、前記第１のソース・データの各データ要素を、前記第２のソース・データにより指定されたビット数だけ右シフトさせたものであって、必要があれば前記ビット数の上位ビットに符号値の充填がされて構成される、結果パック・データを生成する、パック右シフト演算タイプの演算と、
個々の結果要素が、前記第１のソース・データの各データ要素を、前記第２のソース・データにより指定されたビット数だけ左シフトさせたものであって、必要があれば前記ビット数の下位ビットにゼロ充填がされて構成される、結果パック・データを生成する、パック左シフト・タイプの演算と、
個々の結果要素が、前記第１のソース・データの各データ要素を、前記第２のソース・データにより指定されたビット数だけ右シフトさせたものであって、必要があれば前記ビット数の上位ビットにゼロ充填がされて構成される、結果パック・データを生成する、パック右シフト論理タイプの演算と、
が含まれることを特徴とする請求項１〜１０の何れか１項に記載の装置。
【請求項１２】
複数の命令シーケンスを記憶する記憶装置と；
表示装置と；
音声再生装置と；
前記記憶装置、前記表示装置、および前記音声再生装置に結合されたプロセッサと
を備えたシステムであって、前記プロセッサが、
複数のデータ要素をそれぞれ有するパック・データを含むデータの記憶用の記憶域と；
汎用プロセッサの実行装置であって、第１のソース・データおよび第２のソース・データを識別できるフォーマットのパック・データ命令セットによって指定された演算を実行する実行装置と
を備え、この実行装置で実行できる前記パック・データ命令セットには、少なくとも、
アンパックの結果パック・データの生成、すなわち、前記第１のソース・データにおける全データ要素よりも少ない数のデータ要素に、当該データ要素に対応する、前記第２のソース・データ中のデータ要素を、インタリーブさせて得られる結果パック・データの生成をさせ、そして、その結果パック・データを前記記憶域へ記憶させる、１または複数のアンパック・タイプの演算と；
パックの結果パック・データの生成、すなわち、前記第１のソース・データおよび前記第２のソース・データにおける各データ要素から導出した複数ビット部分を含んで構成される結果パック・データの生成をさせ、そして、その結果パック・データを前記記憶域へ記憶させる、１または複数のパック・タイプの演算と；
パック乗算の結果パック・データの生成、すなわち、個々の結果要素として、前記第１のソース・データの各データ要素に、当該データ要素に対応する、前記第２のソース・データ中のデータ要素を、乗算して得られたものの上位ビットまたは下位ビットを含んでいる、結果パック・データの生成をさせ、そして、その結果パック・データを前記記憶域へ記憶させる、１または複数のパック乗算タイプの演算と；
パック加算の結果パック・データの生成、すなわち、個々の結果要素として、前記第１のソース・データの各データ要素に、当該データ要素に対応する、前記第２のソース・データ中のデータ要素を、加算して得られたものを含んでいる、結果パック・データの生成をさせ、そして、その結果パック・データを前記記憶域へ記憶させる、１または複数のパック加算タイプの演算と；
パック減算の結果パック・データの生成、すなわち、個々の結果要素として、前記第１のソース・データの各データ要素から、当該データ要素に対応する、前記第２のソース・データ中のデータ要素を、減算して得られたものを含んでいる、結果パック・データの生成をさせ、そして、その結果パック・データを前記記憶域へ記憶させる、１または複数のパック減算タイプの演算と；
パック比較の結果パック・データの生成、すなわち、個々の結果要素が、前記第１のソース・データの各データ要素と、当該データ要素に対応する、前記第２のソース・データ中のデータ要素との比較結果を表すマスクを含み、各マスクにおいて、対応する比較が真であったときは全てのビットが第１の所定値であり、対応する比較が偽であったときは全てのビットが第２の所定値であるようにされている、結果パック・データの生成をさせ、そして、その結果パック・データを前記記憶域へ記憶させる、１または複数のパック比較タイプの演算と；
乗算−加算の結果パック・データの生成、すなわち、第１および第２の結果要素を相互に加算せずに個別に格納して含み、前記第１の結果要素は、前記第１および第２のソース・データそれぞれからの相互に対応している対のデータ要素の２対について、対ごとに乗算をして加算したものを表し、かつ、前記第２の結果要素は、前記第１および第２のソース・データそれぞれからの相互に対応している対のデータ要素の、他の２対について、対ごとに乗算をして加算したものを表しており、前記第１および第２の結果要素はそれらの生成に用いた対のデータ要素に比べて高精度であるようにされている、結果パック・データの生成をさせ、そして、その結果パック・データを前記記憶域へ記憶させる、１または複数の乗算−加算・タイプの演算と；
パック・シフトの結果パック・データの生成、すなわち、個々の結果要素として、前記第１のソース・データの各データ要素を、前記第２のソース・データにより指定されたビット数だけシフトさせたものであって、必要があれば前記ビット数のビットに充填がされて構成される、結果パック・データの生成をさせ、そして、その結果パック・データを前記記憶域へ記憶させる、１または複数のパック・シフト・タイプの演算と；
が含まれている、ことを特徴とするシステム。
【請求項１３】
パック加算、乗算−加算及びアンパックのタイプの演算は、乗算累算の効率的演算に有用であり、
乗算−加算、パック・シフト、パックのタイプの演算は、複素数の乗算の効率的演算に有用であり、
パック加算、乗算−加算、パック・シフトのタイプの演算は、ドット積の効率的演算に有用であり、
パック、アンパック、パック・シフト、パック加算のタイプの演算は、二次元ループ・フィルタの効率的演算に有用であり、
乗算−加算、パック・シフト、アンパックのタイプの演算は、離散余弦変換の効率的演算に有用である
ことを特徴とする請求項１２に記載のシステム。
【請求項１４】
前記１または複数のアンパック・タイプの演算の少なくとも１つにおいて、結果パック・データが前記第１のソース・データおよび前記第２のソース・データの両方の上半分または下半分を含み；
前記１または複数のパック・タイプの演算の少なくとも１つにおいて、前記第１および第２のソース・データの各データ要素がＮビットのデータ要素であり、前記複数ビット部分のそれぞれがＮ／２ビットの結果要素であり；
前記１または複数の乗算−加算タイプの演算の少なくとも１つにおいて、前記第１および第２のソース・データの各データ要素がＮビットのデータ要素を含み、前記第１の結果要素と第２の結果要素のそれぞれが２Ｎビットの結果要素であることを特徴とする請求項１２または１３に記載のシステム。
【請求項１５】
前記記憶域が１つまたは複数のレジスタの集合であることを特徴とする請求項１２〜１４のいずれか１項に記載のシステム。
【請求項１６】
前記フォーマットが、第１の記憶位置をソース−宛先オペランドとして指定し、第２の記憶位置をソース・オペランドとして指定することを含むことを特徴とする請求項１２〜１５のいずれか１項に記載のシステム。
【請求項１７】
前記ソース・オペランドと前記ソース−宛先オペランドのそれぞれがレジスタ番号として指定され、前記ソース・オペランドは演算コード・バイトの０から２のビットによって指定され、前記ソース−宛先オペランドは前記演算コード・バイトの３から５のビットによって指定されることを特徴とする請求項１６に記載の装置。
【請求項１８】
前記１または複数のパック・シフト・タイプの演算には：
個々の結果要素が、前記第１のソース・データの各データ要素を、前記第２のソース・データにより指定されたビット数だけ右シフトさせたものであって、必要があれば前記ビット数の上位ビットに符号値の充填がされて構成される、結果パック・データを生成する、パック右シフト演算タイプの演算と、
個々の結果要素が、前記第１のソース・データの各データ要素を、前記第２のソース・データにより指定されたビット数だけ左シフトさせたものであって、必要があれば前記ビット数の下位ビットにゼロ充填がされて構成される、結果パック・データを生成する、パック左シフト・タイプの演算と、
個々の結果要素が、前記第１のソース・データの各データ要素を、前記第２のソース・データにより指定されたビット数だけ右シフトさせたものであって、必要があれば前記ビット数の上位ビットにゼロ充填がされて構成される結果パック・データを、生成するパック右シフト論理タイプの演算と、
が含まれることを特徴とする請求項１２〜１７のいずれか１項に記載の装置。
【請求項１９】
前記記憶装置が複素数乗算のルーチンを記憶し、その複素数乗算のルーチンには、少なくとも２つの複素数を乗算するために前記１つまたは複数の乗算−加算タイプの演算の１つを指定する命令を含まれることを特徴とする請求項１８に記載のシステム。
【請求項２０】
前記記憶装置が乗算累算ルーチンを記憶し、その乗算累算ルーチンには、前記アンパック・タイプの演算および乗算−加算タイプの演算それぞれから少なくとも１つのタイプを指定する命令が含まれることを特徴とする請求項１８に記載のシステム。
【請求項２１】
前記記憶装置がドット積ルーチンを記憶し、そのドット積ルーチンには、前記乗算−加算、パック・シフト、およびパック加算タイプの演算それぞれから少なくとも１つのタイプを指定する命令が含まれることを特徴とする請求項１８に記載のシステム。
【請求項２２】
前記記憶装置がループ・フィルタ・ルーチンを記憶し、そのループ・フィルタ・ルーチンには、前記アンパック、パック・シフト、およびパック加算タイプの演算それぞれから少なくとも１つのタイプを指定する命令が含まれることを特徴とする請求項１８に記載のシステム。
【請求項２３】
前記記憶装置が動き推定ルーチンを記憶し、その動き推定ルーチンは、前記アンパック、飽和のパック減算、およびパック加算タイプの演算並びにパック論理タイプの演算それぞれから少なくとも１つのタイプを指定する命令を含み、前記表示装置上に表示可能なデータを処理することを特徴とする請求項１８に記載のシステム。
【請求項２４】
前記記憶装置が離散余弦変換ルーチンを記憶し、その離散余弦変換ルーチンは、前記パック・シフトタイプの演算および乗算−加算タイプの演算それぞれから少なくとも１つのタイプを指定する命令を含み、前記表示装置上に表示可能なデータを処理することを特徴とする請求項１８に記載のシステム。
【請求項２５】
複数のパック・データ命令であって、第１のソース・データおよび第２のソース・データと、それらについて実行すべき演算とをそれぞれ指定する複数のパック・データ命令を受信するステップを備え、前記複数のパック・データ命令が指定する演算には、少なくとも、
アンパック・タイプの演算にして、(a)その結果パック・データの生成をし、その生成において、前記第１のソース・データにおける全データ要素よりも少ない数のデータ要素に、当該データ要素に対応する、前記第２のソース・データ中のデータ要素を、インタリーブさせ、そして、(b)生成をした結果パック・データを前記記憶域へ記憶させる、１または複数のアンパック・タイプの演算と、
パック・タイプの演算にして、(a)その結果パック・データの生成をし、その生成において、前記第１のソース・データおよび前記第２のソース・データにおける各データ要素から複数ビット部分を導出し、そして、(b)生成をした結果パック・データを前記記憶域へ記憶させる、１または複数のパック・タイプの演算と、
パック乗算タイプの演算にして、(a)その結果パック・データの生成をし、その生成において、個々の結果要素として、前記第１のソース・データの各データ要素に、当該データ要素に対応する、前記第２のソース・データ中のデータ要素を、乗算して得られたものの上位ビットまたは下位ビットを発生させ、そして、(b)生成をした結果パック・データを前記記憶域へ記憶させる、１または複数のパック乗算タイプの演算と、
パック加算タイプの演算にして、(a)その結果パック・データの生成をし、その生成において、個々の結果要素を、前記第１のソース・データの各データ要素に、当該データ要素に対応する、前記第２のソース・データ中のデータ要素を、加算して得られたものでもって構成し、そして、(b)生成をした結果パック・データを前記記憶域へ記憶させる、１または複数のパック加算タイプの演算と、
パック減算タイプの演算にして、(a)その結果パック・データの生成をし、その生成において、個々の結果要素を、前記第１のソース・データの各データ要素から、当該データ要素に対応する、前記第２のソース・データ中のデータ要素を、減算して得られたものでもって構成し、そして、(b)生成をした結果パック・データを前記記憶域へ記憶させる、１または複数のパック減算タイプの演算と、
パック比較タイプの演算にして、(a)その結果パック・データの生成をし、その生成において、個々の結果要素として、前記第１のソース・データの各データ要素と、当該データ要素に対応する、前記第２のソース・データ中のデータ要素との比較結果を表すマスクを発生させ、各マスクにおいては、対応する比較が真であったときは全てのビットが第１の所定値であり、対応する比較が偽であったときは全てのビットが第２の所定値であるようにされており、そして、(b)生成をした結果パック・データを前記記憶域へ記憶させる、１または複数のパック比較タイプの演算と、
乗算−加算タイプの演算にして、(a)その結果パック・データの生成をし、その生成において、前記第１および第２のソース・データそれぞれからの相互に対応している対のデータ要素の２対について、対ごとに乗算をして加算して得られる第１の結果要素を発生し、前記第１および第２のソース・データそれぞれからの相互に対応している対のデータ要素の、他の２対について、対ごとに乗算をして加算して得られる第２の結果要素を発生し、前記第１および第２の結果要素はそれらの生成に用いた対のデータ要素に比べて高精度であるようにされており、そして、(b)生成をした結果パック・データの前記記憶域への記憶をさせ、その記憶において、前記第１および第２の結果要素を相互に加算せずに個別に格納する、１または複数の乗算−加算タイプの演算と、
パック・シフト・タイプの演算にして、(a)その結果パック・データの生成をし、その生成において、前記第１のソース・データの各データ要素を、前記第２のソース・データにより指定されたビット数だけシフトさせたものであって、必要があれば前記ビット数のビットに充填がされて構成される個々の結果要素を発生させ、そして、(b)生成をした結果パック・データを前記記憶域へ記憶させる、１または複数のパック・シフト・タイプの演算と
が含まれており；
前記複数のパック・データ命令の受信に応答して、前記複数のパック・データ命令のそれぞれが指定した演算を実行するステップを備える、
ことを特徴とする方法。
【請求項２６】
前記１または複数のアンパック・タイプの演算の少なくとも１つにおいて、結果パック・データが前記第１のソース・データおよび前記第２のソース・データの両方の上半分または下半分を含むことを特徴とする請求項２５に記載の方法。
【請求項２７】
前記１または複数のパック・タイプの演算の少なくとも１つにおいて、前記第１および第２のソース・データの各データ要素がＮビットのデータ要素であり、前記複数ビット部分それぞれがＮ／２ビットの結果要素であることを特徴とする請求項２５に記載の方法。
【請求項２８】
前記１または複数の乗算−加算タイプの演算の少なくとも１つにおいて、前記第１および第２のソース・データの各データ要素がＮビットのデータ要素を含み、前記第１の結果要素と第２の結果要素のそれぞれが２Ｎビットの結果要素であることを特徴とする請求項２５〜２７の何れか１項に記載の方法。
【請求項２９】
前記記憶域が１つまたは複数のレジスタの集合であることを特徴とする請求項２５〜２８のいずれかに記載の方法。
【請求項３０】
前記複数のパック・データ命令のそれぞれが、ある記憶位置をソース−宛先オペランドとして指定し、他の記憶位置をソース・オペランドとして指定することを特徴とする請求項２５〜２９の何れか１項に記載の方法。
【請求項３１】
前記ソース・オペランドおよび前記ソース−宛先オペランドのそれぞれがレジスタ番号として指定され、前記ソース・オペランドは演算コード・バイトの０から２のビットによって指定され、前記ソース−宛先オペランドは前記演算コード・バイトの３から５のビットによって指定されることを特徴とする請求項３０に記載の方法。
【請求項３２】
前記１または複数のパック・シフト・タイプの演算には：
個々の結果要素が、前記第１のソース・データの各データ要素を、前記第２のソース・データにより指定されたビット数だけ右シフトさせたものであって、必要があれば前記ビット数の上位ビットに符号値の充填がされて構成される、結果パック・データを生成する、パック右シフト演算タイプの演算と、
個々の結果要素が、前記第１のソース・データの各データ要素を、前記第２のソース・データにより指定されたビット数だけ左シフトさせたものであって、必要があれば前記ビット数の下位ビットにゼロ充填がされて構成される、結果パック・データを生成する、パック左シフト・タイプの演算と、
個々の結果要素が、前記第１のソース・データの各データ要素を、前記第２のソース・データにより指定されたビット数だけ右シフトさせたものであって、必要があれば前記ビット数の上位ビットにゼロ充填がされて構成される、結果パック・データを生成する、パック右シフト論理タイプの演算と、
が含まれることを特徴とする請求項２５〜３１のいずれか１項に記載の方法。
【請求項３３】
複数のデータ要素をそれぞれ有するパック・データを含むデータの記憶用の記憶域と；
第１のソース・データおよび第２のソース・データを識別できるフォーマットのアンパック命令を受け、前記第１のソース・データにおける全データ要素よりも少ない数のデータ要素に、当該データ要素に対応する、前記第２のソース・データ中のデータ要素を、インタリーブさせて得られる結果パック・データを生成し、そして、その結果パック・データを前記記憶域へ記憶させる、第１の回路と、
第１のソース・データおよび第２のソース・データを識別できるフォーマットのパック命令を受け、前記第１のソース・データおよび前記第２のソース・データにおける各データ要素から導出した複数ビット部分を含んで構成される結果パック・データを生成させ、そして、その結果パック・データを前記記憶域へ記憶させる、第２の回路と、
第１のソース・データおよび第２のソース・データを識別できるフォーマットのパック乗算命令を受け、前記第１のソース・データの各データ要素に、当該データ要素に対応する、前記第２のソース・データ中のデータ要素を、乗算して得られたものの上位ビットまたは下位ビットを、個々の結果要素に含めて成る結果パック・データを生成させ、そして、その結果パック・データを前記記憶域へ記憶させる、第３の回路と、
第１のソース・データおよび第２のソース・データを識別できるフォーマットのパック加算命令を受け、前記第１のソース・データの各データ要素に、当該データ要素に対応する、前記第２のソース・データ中のデータ要素を、加算して得られたものを、個々の結果要素に含めて成る結果パック・データを生成させ、そして、その結果パック・データを前記記憶域へ記憶させる、第４の回路と、
第１のソース・データおよび第２のソース・データを識別できるフォーマットのパック減算命令を受け、前記第１のソース・データの各データ要素から、当該データ要素に対応する、前記第２のソース・データ中のデータ要素を、減算して得られたものを、個々の結果要素に含めて成る結果パック・データを生成させ、そして、その結果パック・データを前記記憶域へ記憶させる、第５の回路と、
第１のソース・データおよび第２のソース・データを識別できるフォーマットのパック比較命令を受け、前記第１のソース・データの各データ要素と、当該データ要素に対応する、前記第２のソース・データ中のデータ要素との比較結果を表すマスクを個々の結果要素に含めて成り、各マスクにおいて、対応する比較が真であったときは全てのビットが第１の所定値であり、対応する比較が偽であったときは全てのビットが第２の所定値であるようにされている結果パック・データ生成させ、そして、その結果パック・データを前記記憶域へ記憶させる、第６の回路と、
第１のソース・データおよび第２のソース・データを識別できるフォーマットの乗算−加算命令を受け、その結果パック・データの生成、すなわち、第１および第２の結果要素を相互に加算せずに個別に格納できるように含み、前記第１の結果要素は、前記第１および第２のソース・データそれぞれからの相互に対応している対のデータ要素の２対について、対ごとに乗算をして加算したものを表し、かつ、前記第２の結果要素は、前記第１および第２のソース・データそれぞれからの相互に対応している対のデータ要素の、他の２対について、対ごとに乗算をして加算したものを表しており、前記第１および第２の結果要素はそれらの生成に用いた対のデータ要素に比べて高精度であるようにされている結果パック・データの生成をさせ、そして、その結果パック・データを前記記憶域へ記憶させる、第７の回路と、
第１のソース・データおよび第２のソース・データを識別できるフォーマットのパック・シフト命令を受け、前記第１のソース・データの各データ要素を、前記第２のソース・データにより指定されたビット数だけシフトさせたものであって、必要により前記ビット数のビットに充填がされたものを、個々の結果要素に含めて構成される結果パック・データを生成させ、そして、その結果パック・データを前記記憶域へ記憶させる、第８の回路と
を含む装置。
【請求項３４】
第１の回路〜第８の回路が個別の回路であることを特徴とする請求項３３に記載の装置。
【発明の詳細な説明】
発明の背景
１．発明の分野
本発明は特に、コンピュータ・システムの分野に関する。詳細には、本発明はパック・データ処理の分野に関する。
２．関連技術の説明
典型的なコンピュータ・システムでは、ある結果を生成する命令を使用して多数のビット（たとえば、６４）で表された値を処理するプロセッサが実装されている。たとえば、加算命令を実行すると、第１の６４ビット値と第２の６４ビット値が加算され、結果が第３の６４ビット値として記憶される。しかし、マルチメディア・アプリケーション（たとえば、ＣＳＣ（テレビ会議と混合メディア・データ処理を統合したもの）、２Ｄ／３Ｄグラフィックス、画像処理、ビデオ圧縮／圧縮解除、認識アルゴリズム、オーディオ処理を目標とするアプリケーション）では、小数のビットで表すことのできる大量のデータを処理する必要がある。たとえば、通常、グラフィカル・データには８ビットまたは１６ビットが必要であり、音声データには８ビットまたは１６ビットが必要である。これらのマルチメディアアプリケーションはそれぞれ、１つまたは複数のアルゴリズムを必要とし、これらのアルゴリズムはそれぞれ、いくつかの演算を必要とする。たとえば、アルゴリズムには加算、比較演算、シフト演算が必要である。
従来技術のプロセッサは、マルチメディア・アプリケーション（ならびに同じ特徴を有する他のアプリケーション）の効率を向上させるために、パック・データ・フォーマットを使用する。パック・データ・フォーマットとは、通常、単一の値を表すために使用されるビットが、それぞれ、別々の値を表す、いくつかの固定サイズのデータ要素に分解されるフォーマットである。たとえば、６４ビット・レジスタは、それぞれ、別々の３２ビット値を表す、２つの３２ビット要素に分解することができる。また、このような従来技術のプロセッサは、これらのパック・データ・タイプの各要素を並行して別々に処理する命令を与える。たとえば、パック加算命令は、第１のパック・データおよび第２のパック・データから得た対応するデータ要素を加算する。したがって、マルチメディア・アルゴリズムが多数のデータ要素に対して実行しなければならない５つの演算を含むループを必要とする場合、データをパックし、パック・データ命令を使用してこれらの演算を並行して実行することが望ましい。このように、このようなプロセッサはマルチメディア・アプリケーションをより効率的に処理することができる。
しかし、演算のループが、プロセッサではパック・データに対して実行することのできない演算を含む（すなわち、プロセッサに適切な命令が欠落している）場合、データをアンパックしてその演算を実行する必要がある。たとえば、マルチメディア・アルゴリズムに加算が必要であり、前述のパック加算命令が使用できない場合、プログラマは第１のパック・データと第２のパック・データの両方をアンパックし（すなわち、第１のパック・データと第２のパック・データの両方を含む要素を分離し）、分離された要素どうしを個別に加算し、次いで結果をパックし、パック結果を得て、さらにパック処理できるようにする。そのようなパック処理およびアンパック処理を実行するのに必要な処理時間のために、パック・データ・フォーマットを使用することによる性能上の利点が無効になることが多い。したがって、典型的なマルチメディア・アルゴリズムに必要なすべての演算を与える１組のパック・データ命令を汎用プロセッサ上に組み込むことが望ましい。しかし、現在のマイクロプロセッサ上ではダイ面積が限られているので、追加できる命令の数は限られている。
パック・データ命令を含む１つの汎用プロセッサは、Ｓａｎｔａ  Ｃｌａｒａ，ＣａｌｉｆｏｒｎｉａのＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎによって製造されているｉ８６０ＸＰTMプロセッサである。ｉ８６０ＸＰプロセッサは要素サイズの異なるいくつかのタイプのパック・データを含む。また、ｉ８６０ＸＰプロセッサはパック加算命令とパック比較命令とを含む。しかし、パック加算命令は桁上げチェーンを破壊せず、したがってプログラマは、ソフトウェアが実行している演算によってオーバフローが生じることがないようにし、すなわち、演算によってパック・データ内のある要素のビットがパック・データの次の要素にオーバフローしないようにする必要がある。たとえば、「１１１１１１１１」を記憶している８ビット・パック・データ要素に値１を加算した場合、オーバフローが起こり、結果は「１００００００００」になる。また、ｉ８６０ＸＰプロセッサによってサポートされるパック・データ・タイプの小数点の位置は固定される（すなわち、ｉ８６０ＸＰプロセッサがサポートする８．８数、６．１０数、８．２４数。この場合、ｉ．ｊ数は、ｉ個の最上位ビットと小数点の後のｊ個のビットを含む）。したがって、プログラマは、表すことのできる値に関して制限される。ｉ８６０ＸＰプロセッサはこの２つの命令しかサポートしないので、パック・データを使用するマルチメディア・アルゴリズムで必要とされる多数の演算を実行することはできない。
パック・データをサポートする他の汎用プロセッサは、Ｍｏｔｏｒｏｌａ，Ｉｎｃ．によって製造されているＭＣ８８１１０TMプロセッサである。ＭＣ８８１１０プロセッサは、それぞれの異なるサイズの要素を有するいくつかの異なるパック・データ・フォーマットをサポートする。また、ＭＣ８８１１０プロセッサによってサポートされる１組のパック命令には、パックと、アンパックと、パック加算と、パック減算と、パック乗算と、パック比較と、パック・ローテートが含まれる。
ＭＣ８８１１０プロセッサのパック・コマンドは、第１のレジスタ対内の各要素の（ｔ＊ｒ）／６４（ｔはパック・データの要素内のビット数である）個の最上位ビットを連結して幅ｒのフィールドを生成することによって動作する。このフィールドは、第２のレジスタ対に記憶されているパック・データの最上位ビットに置き換わる。このパック・データは次いで、第３のレジスタ対に記憶され、左にｒビットだけローテートされる。ｔおよびｒに関してサポートされる値の表と、この命令の処理の例を下記の表１および表示２に示す。
0003711147.tif 000002
0003711147.tif 000003
パック命令のこの処理系は２つの欠点を有する。第１の欠点は、命令の終わりでローテートを実行するときに追加論理が必要であることである。
第２の欠点は、パック・データ結果を生成するために必要な命令の数である。たとえば、４つの３２ビット値を使用して（上記で図示した）第３のレジスタの結果を生成することが望ましい場合、下記の表３に示したようにｔ＝３２およびｒ＝３２を含む２つの命令が必要になる。
0003711147.tif 000004
ＭＣ８８１１０プロセッサのアンパック・コマンドは、パック・データから得た４ビット・データ要素、８ビット・データ要素、または１６ビット・データ要素を２倍の大きさ（８ビット、１６ビット、または３２ビット）のデータ内の要素の下半分に入れ、それらの上位ビットに零を充填することによって動作する。このアンパック・コマンドの動作の例を表４に示す。
0003711147.tif 000005
ＭＣ８８１１０プロセッサのパック乗算命令は、表５に示したように、パック・データが単一の値を表す場合と同様に、６４ビット・パック・データの各要素に３２ビット値を乗じる。
0003711147.tif 000006
この乗算命令は２つの欠点を有する。第１に、この乗算命令は桁上げチェーンを破壊しないように、すなわち、プログラマは、パック・データに対して実行される演算によってオーバフローが生じることがないようにしなければならない。その結果、プログラマは場合によっては、このオーバフローを防止するために追加命令を含める必要がある。第２に、この乗算命令はパック・データ内の各要素に単一の値（すなわち、３２ビット値）を乗じる。その結果、ユーザがパック・データ内のどの要素に３２ビット値を乗じるかを自由に選択することはできない。したがって、プログラマは、パック・データ内のあらゆる要素上で同じ乗算が必要になるようにデータを準備し、あるいはデータ内の一部の要素に対して乗算が必要になるたびにデータをアンパックして処理時間を浪費しなければならない。したがって、プログラマは複数のマルチプライヤを並行して使用して複数の乗算を実行することができなかった。たとえば、それぞれ長さが１ワードの８つの異なるデータを乗じるには、４回の別々の乗算が必要である。各演算が２つのワードを一度に乗じることによって、ビット１６よりも上位のビットに使用されるデータ線および回路が有効に使用される。
ＭＣ８８１１０プロセッサのパック比較命令は、第１のパック・データおよび第２のパック・データから得た対応する３２ビット・データ要素どうしを比較する。２回の比較はそれぞれ、未満（＜）と以上（≧）のどちらかを返すことができ、そのため４つの可能な組合せが得られる。この命令は８ビット結果文字列を返し、このうちの４ビットは、４つの可能な条件のうちのどれが満たされたかを示し、４ビットはそれらのビットの補数を示す。この命令の結果に対する条件付き分岐は、１）条件付き分岐のシーケンスを用い、あるいは２）ジャンプ・テーブルを用いる２つの方法で実施することができる。この命令に関する問題は、ｉｆ  Ｙ＞Ａ  ｔｈｅｎ  Ｘ＝Ｘ＋Ｂ  ｅｌｓｅ  Ｘ＝Ｘなどの関数を実行するときにデータに基づく条件付き分岐が必要であることである。この関数の擬似コードコンパイル済み表現は下記のとおりである。
0003711147.tif 000007
新しいマイクロプロセッサは、分岐がどこへ進むかをスペキュラティブに予想することによって実行を加速しようとする。予想が正しい場合、性能は失われず、性能が向上する可能性がある。しかし、予想が誤っている場合、性能が失われる。したがって、予想を正しく行うための誘因は大きい。しかし、（上記のような）データに基づく分岐は、予想アルゴリズムを破壊し、さらに誤った予想を生じさせる予想できない方法で動作する。そのため、この比較命令を使用してデータに対する条件付き分岐をセットアップすると、性能が著しく低下する。
ＭＣ８８１１０プロセッサのローテート命令は、６４ビット値を０ビットと６０ビットとの間のモジュロ４へローテートさせる（たとえば、下記の表６を参照されたい）。
0003711147.tif 000008
ローテート命令では、レジスタからシフトされた上位ビットがレジスタの下位ビットにシフトされるので、ＭＣ８８１１０プロセッサはパック・データ内の各要素を個別にシフトさせることはサポートしない。そのため、パック・データ・タイプ内の各要素を個別にシフトさせる必要があるプログラミング・アルゴリズムでは、１）データをアンパックし、２）各要素に対するシフトを個別に実行し、３）結果をパックした結果パック・データを得て、さらにパック・データ処理できるようにする必要がある。
発明の概要
典型的なマルチメディア・アプリケーションで必要とされる演算をサポートする１組のパック・データ命令をプロセッサに含める方法および装置について説明する。一実施態様では、本発明はプロセッサと記憶領域とを含む。記憶領域は、パック・データを処理するためにプロセッサによって実行されるいくつかの命令を含む。この実施態様では、これらの命令には、パックと、アンパックと、パック加算と、パック減算と、パック乗算と、パック・シフトと、パック比較が含まれる。
プロセッサは、パック命令を受け取ったことに応答して、少なくとも２つのパック・データ内のデータ要素から得たビットの一部をパックし、第３のパック・データを形成する。これに対して、プロセッサは、アンパック命令を受け取ったことに応答して、第１のパック・データ・オペランドから得た少なくとも１つのデータ要素と第２のパック・データ・オペランドから得た少なくとも１つの対応するデータ要素とを含む第４のパック・データを生成する。
プロセッサは、パック加算命令を受け取ったことに応答して、少なくとも２つのパック・データから得た対応するデータ要素を並行して別々に加算する。これに対して、プロセッサは、パック減算命令を受け取ったことに応答して、少なくとも２つのパック・データから得た対応するデータ要素を並行して別々に減算する。
プロセッサは、パック乗算命令を受け取ったことに応答して、少なくとも２つのパック・データから得た対応するデータ要素を並行して別々に乗算する。
プロセッサは、パック・シフト命令を受け取ったことに応答して、パック・データ・オペランド内の各データ要素を、指示されたカウントだけ並行して別々にシフトする。
プロセッサは、パック比較命令を受け取ったことに応答して、指示された関係に従って少なくとも２つのパック・データから得た対応するデータ要素を並行して別々に比較し、この結果としてパック・マスクを第１のレジスタに記憶する。パック・マスクは、少なくとも第１のマスク要素と第２のマスク要素とを含む。第１のマスク要素内の各ビットは１組の対応するデータ要素を比較した結果を示し、それに対して、第２のマスク要素内の各ビットは第２の１組のデータ要素を比較した結果を示す。
【図面の簡単な説明】
本発明を制限ではなく一例として図示する。同じ参照符号は同様な要素を示す。
第１図は、本発明の一実施形態による例示的なコンピュータ・システムを示す図である。
第２図は、本発明の一実施形態によるプロセッサのレジスタ・ファイルを示す図である。
第３図は、本発明の一実施形態によってデータを処理するためにプロセッサによって使用される一般的なステップを示す流れ図である。
第４図は、本発明の一実施形態によるパック・データ・タイプを示す図である。
第５ａ図は、本発明の一実施形態によるレジスタ内パック・データ表現を示す図である。
第５ｂ図は、本発明の一実施形態によるレジスタ内パック・データ表現を示す図である。
第５ｃ図は、本発明の一実施形態によるレジスタ内パック・データ表現を示す図である。
第６ａ図は、本発明の一実施形態によるパック・データの使用法を示す制御信号フォーマットを示す図である。
第６ｂ図は、本発明の一実施形態によるパック・データの使用法を示す第２の制御信号フォーマットを示す図である。
パック加減算
第７ａ図は、本発明の一実施形態によってパック加算を実行する方法を示す図である。
第７ｂ図は、本発明の一実施形態によってパック減算を実行する方法を示す図である。
第８図は、本発明の一実施形態によってパック・データの個別のビットに対してパック加算およびパック減算を実行する回路を示す図である。
第９図は、本発明の一実施形態によってパック・バイト・データに対してパック加算およびパック減算を実行する回路を示す図である。
第１０図は、本発明の一実施形態によってパック・ワード・データに対してパック加算およびパック減算を実行する回路を示す論理図である。
第１１図は、本発明の一実施形態によってパック・ダブルワード・データに対してパック加算およびパック減算を実行する回路を示す論理図である。
パック乗算
第１２図は、本発明の一実施形態によってパック・データに対してパック乗算を実行する方法を示す流れ図である。
第１３図は、本発明の一実施形態によってパック乗算を実行する回路を示す図である。
乗算−加減算
第１４図は、本発明の一実施形態によってパック・データに対して乗算加算および乗算減算を実行する方法を示す流れ図である。
第１５図は、本発明の一実施形態によってパック・データに対して乗算加算または乗算減算、あるいはその両方を実行する回路を示す図である。
パック・シフト
第１６図は、本発明の一実施形態によってパック・データに対してパック・シフト演算を実行する方法を示す流れ図である。
第１７図は、本発明の一実施形態によってパック・データの個別のバイトに対してパック・シフトを実行する回路を示す流れ図である。
パック
第１８図は、本発明の一実施形態によってパック・データに対してパック演算を実行する方法を示す流れ図である。
第１９ａ図は、本発明の一実施形態によってパック・バイト・データに対してパック演算を実行する回路を示す図である。
第１９ｂ図は、本発明の一実施形態によってパック・ワード・データに対してパック演算を実行する回路を示す図である。
アンパック
第２０図は、本発明の一実施形態によってパック・データに対してアンパック演算を実行する方法を示す流れ図である。
第２１図は、本発明の一実施形態によってパック・データに対してアンパック演算を実行する回路を示す図である。
ポピュレーション・カウント
第２２図は、本発明の一実施形態によってパック・データに対してポピュレーション・カウント演算を実行する方法を示す流れ図である。
第２３図は、本発明の一実施形態によって、パック・データのあるデータ要素に対してポピュレーション・カウント演算を実行し結果パック・データ用の単一の結果データ要素を生成する方法を示す流れ図である。
第２４図は、本発明の一実施形態によって、４つのワード・データ要素を有するパック・データに対してポピュレーション・カウント演算を実行する回路を示す図である。
第２５図は、本発明の一実施形態によってパック・データの１つのワード・データ要素に対してポピュレーション・カウント演算を実行する詳細な回路を示す図である。
パック論理演算
第２６図は、本発明の一実施形態によってパック・データに対していくつかの論理演算を実行する方法を示す流れ図である。
第２７図は、本発明の一実施形態によってパック・データに対して論理演算を実行する回路を示す図である。
パック比較
第２８図は、本発明の一実施形態によってパック・データに対してパック比較演算を実行する方法を示す流れ図である。
第２９図は、本発明の一実施形態によってパック・データの個別のバイトに対してパック比較演算を実行する回路を示す図である。
詳細な説明
本出願は、典型的なマルチメディア・アプリケーションで必要とされるパック・データに対する演算をサポートする１組の命令をプロセッサに含める方法および装置について説明するものである。下記の説明では、本発明を完全に理解していただくために多数の特定の詳細について述べる。しかし、これらの特定の詳細なしに本発明を実施できることが理解されよう。他の例では、本発明を不必要に曖昧にしないように、周知の回路、構造、技法は詳しく示していない。
定義
本発明の実施形態の説明を理解するための基礎として、下記の定義を与える。ビットＸないしビットＹ：
バイナリ数のサブフィールドを定義する。たとえば、バイト００１１１０１０2（基数２で示されている）のビット０からビット６までは、サブフィールド１１１０１０2を表す。バイナリ数の後に続く「２」は基数２を表す。したがって、１０００2は８10に等しく、それに対してＦ16は１５10に等しい。
Ｒｘ：
レジスタ。レジスタとは、データを記憶し与えることができる装置である。レジスタの他の機能については下記で説明する。レジスタは必ずしもプロセッサのパッケージの一部ではない。
ＳＲＣ１、ＳＲＣ２、ＤＥＳＴ：
記憶領域を識別する（たとえば、メモリ・アドレス、レジスタなど）
ソース１−ｉおよび結果１−ｉ：
データを表す。
コンピュータ・システム
第１図は、本発明の一実施形態による例示的なコンピュータ・システム１００を示す。コンピュータ・システム１００は、バス１０１、または情報を伝達するその他の通信ハードウェアおよびソフトウェアと、情報を処理するためにバス１０１に結合されたプロセッサ１０９とを含む。プロセッサ１０９は、ＣＩＳＣ形アーキテクチャやＲＩＳＣ形アーキテクチャを含め任意のタイプのアーキテクチャの中央演算処置装置を表す。コンピュータ・システム１００はさらに、プロセッサ１０９が実行すべき情報および命令を記憶するためにバス１０１に結合されたランダム・アクセス・メモリ（ＲＡＭ）またはその他の動的記憶装置（メイン・メモリ１０４と呼ぶ）を含む。メイン・メモリ１０４は、プロセッサ１０９による命令の実行時に一時変数またはその他の中間情報を記憶するために使用することもできる。コンピュータ・システム１００は、プロセッサ１０９に関する静的情報および命令を記憶するためにバス１０１に結合された読取り専用メモリ（ＲＯＭ）１０６またはその他の静的記憶装置、あるいはその両方も含む。データ記憶装置１０７は情報および命令を記憶するためにバス１０１に結合される。
第１図は、プロセッサ１０９が実行装置１３０と、レジスタ・ファイル１５０と、キャッシュ１６０と、デコーダ２０２と、内部バス１７０とを含むことも示す。もちろん、プロセッサ１０９は、本発明を曖昧にしないように図示されていない追加回路を含む。
実行装置１３０は、プロセッサ１０９が受け取った命令を実行するために使用される。実行装置１３０は、汎用プロセッサで通常実施される命令を認識するだけでなく、パック・データ・フォーマットに対する演算を実行するためにパック命令セット１４０内の命令を認識する。一実施形態では、パック命令セット１４０は、パック演算、アンパック演算、パック加算、パック乗算、パック・シフト演算、パック比較演算、乗算加算、乗算減算、ポピュレーション・カウント演算、１組のパック論理演算（パックＡＮＤと、パックＡＮＤＮＯＴと、パックＯＲと、パックＸＯＲを含む）を下記で説明するようにサポートする命令を含む。パック命令セット１４０がこれらの命令を含む一実施形態について説明するが、代替実施形態は、これらの命令のサブセットまたはスーパーセットを含むことができる。
これらの命令を含めることによって、マルチメディア・アプリケーションで使用される多数のアルゴリズムで必要とされる演算を、パック・データを使用して実行することができる。したがって、パック・データをアンパックして１つのデータ要素に対して一度に１つまたは複数の演算を実行する必要なしに、必要なデータをパックし、そのパック・データに対して必要な演算を実行するようにアルゴリズムを書くことができる。前述のように、この場合、ある種のマルチメディア・アルゴリズムで必要とされるパック・データ演算をサポートしない従来技術の汎用プロセッサに対する性能上の利点が与えられる。すなわち、マルチメディア・アルゴリズムが、パック・データに対して実行できない演算を必要とする場合、プログラムはデータをアンパックし、別々の要素に対して個別に演算を実行し、次いで結果をパックしてパック結果を得て、さらにパック処理できるようにしなければならない。また、これらの命令のうちのいくつかが実行される開示した方法では、多数のマルチメディア・アプリケーションの性能が向上する。
実行装置１３０は、内部バス１７０によってレジスタ・ファイル１５０に結合される。レジスタ・ファイル１５０は、データを含む情報を記憶するためのプロセッサ１０９上の記憶領域を表す。本発明の一態様が、パック・データを処理する前述の命令セットであることを理解されたい。本発明のこの態様によれば、パック・データを記憶するために使用される記憶領域は重大ではない。しかし、レジスタ・ファイル１５０の一実施形態については下記で第２図を参照して説明する。実行装置１３０はキャッシュ１６０およびデコーダ２０２に結合される。キャッシュ１６０は、たとえばメイン・メモリ１０４からのデータまたは制御信号、あるいはその両方をキャッシュするために使用される。デコーダ２０２は、プロセッサ１０９が受け取った命令を制御信号またはマイクロコード入口点として復号するために使用される。実行装置１３０は、このような制御信号またはマイクロコード入口点に応答して、適切な演算を実行する。たとえば、加算命令を受け取った場合、デコーダ２０２は実行装置１３０に必要な加算を実行させ、減算命令を受け取った場合、デコーダ２０２は実行装置１３０に必要な減算を実行させ、以下同様である。デコーダ２０２は、いくつかの異なる機構（たとえば、参照テーブル、ハードウェア処理系、ＰＬＡなど）を使用して実装される。したがって、デコーダおよび実行装置による様々な命令の実行は一連のｉｆ／ｔｈｅｎ文で表されるが、このようなｉｆ／ｔｈｅｎ文のシリアル処理の必要なしに命令を実行できることが理解されよう。このｉｆ／ｔｈｅｎ処理を論理的に実行する機構は本発明の範囲内であるとみなされる。
第１図は、磁気ディスクや光ディスクなどのデータ記憶装置１０７と、それに対応するディスク・ドライブも示す。コンピュータ・システム１００をバス１０１を介して表示装置１２１に結合し、コンピュータ・ユーザに情報を表示することもできる。表示装置１２１は、フレーム・バッファ、または特殊グラフィックス・レンダリング装置、または陰極線管（ＣＲＴ）、またはフラット・パネル・ディスプレイ、あるいはそれらの組合せを含むことができる。英数字入力装置１２２は、英数字キーとその他のキーを含み、通常、選択された情報およびコマンドをプロセッサ１０９に伝達するためにバス１０１に結合される。他のタイプのユーザ入力装置は、選択された方向情報およびコマンドをプロセッサ１０９に伝達し、表示装置１２１上のカーソルの移動を制御するマウスや、トラックボールや、ペンや、タッチ・スクリーンや、カーソル方向キーなどのカーソル・コントロール１２３である。この入力装置は通常、２つの軸、すなわち第１の軸（たとえば、ｘ）と第２の軸（たとえば、ｙ）において２自由度を有し、それによって平面内の位置を指定することができる。しかし、本発明は２自由度のみを含む入力装置には限らない。
バス１０１に結合できる他の装置は、紙、フィルム、または同様なタイプの媒体上に命令、データ、またはその他の情報を印刷するために使用できるハード・コピー装置１２４である。コンピュータ・システム１００は、録音用装置、または情報を記録するためにマイクロフォンに結合されたオーディオ・ディジタイザなどの再生装置１２５、あるいはその両方に結合することもできる。さらに、この装置は、ディジタル化音声を再生するためにディジタル・アナログ（Ｄ／Ａ）変換器に結合されたスピーカを含むことができる。
コンピュータ・システム１００はコンピュータ・ネットワーク（たとえば、ＬＡＮ）内の端末であってもよい。コンピュータ・システム１００はその場合、コンピュータ・ネットワークのコンピュータ・サブシステムである。コンピュータ・システム１００は任意選択でビデオ・ディジタル化装置１２６を含む。ビデオ・ディジタル化装置１２６を使用して、コンピュータ・ネットワーク上の他のユーザへ伝送できるビデオ画像を取り込むことができる。
一実施形態では、プロセッサ１０９は、ｘ８６命令セット（Ｓａｎｔａ  Ｃｌａｒａ，ＣａｌｉｆｏｒｎｉａのＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎによって製造されているＰｅｎｔｉｕｍ(R)プロセッサなど既存のマイクロプロセッサで使用されている命令セット）と互換性のある命令セットもサポートする。したがって、一実施形態では、プロセッサ１０９は、Ｓａｎｔａ  Ｃｌａｒａ，ＣａｌｉｆｏｒｎｉａのＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎによって定義されたＩＡTM−Ｉｎｔｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅでサポートされるすべての演算をサポートする（Ｓａｎｔａ  Ｃｌａｒａ，ＣａｌｉｆｏｒｎｉａのＩｎｔｅｌから入手可能なＭｉｃｒｏｐｒｏｃｅｓｓｏｒｓ、Ｉｎｔｅｌ  Ｄａｔａ  Ｂｏｏｋｓ第１巻および第２巻（１９９２年および１９９３年）を参照されたい）。そのため、プロセッサ１０９は本発明の演算だけでなく既存のｘ８６演算もサポートすることができる。本発明をｘ８６ベースの命令セットに組み込まれるものとして説明しているが、代替実施形態は本発明を他の命令セットに組み込むことができる。たとえば、本発明は、新しい命令セットを使用する６４ビット・プロセッサに組み込むことができる。
第２図は、本発明の一実施形態によるプロセッサのレジスタ・ファイルを示す。レジスタ・ファイル１５０は、制御／状況情報、整数データ、浮動小数点データ、パック・データを含む情報を記憶するために使用される。第２図に示した実施形態では、レジスタ・ファイル１５０は整数レジスタ２０１と、レジスタ２０９と、状況レジスタ２０８と、命令ポインタ・レジスタ２１１とを含む。状況レジスタ２０８はプロセッサ１０９の状況を示す。命令ポインタ・レジスタ２１１は、次に実行すべき命令のアドレスを記憶する。整数レジスタ２０１、レジスタ２０９、状況レジスタ２０８、命令ポインタ・レジスタ２１１はすべて内部バス１７０に結合される。任意の追加レジスタも内部バス１７０に結合される。
一実施形態では、レジスタ２０９はパック・データと浮動小数点データの両方に使用される。そのような一実施形態では、プロセッサ１０９は、任意の所与の時間に、レジスタ２０９をスタック参照浮動小数点レジスタと非スタック参照パック・データ・レジスタのどちらかとして扱わなければならない。この実施形態には、スタック参照浮動小数点レジスタとしてのレジスタ２０９の処理と非スタック参照パック・データ・レジスタとしてのレジスタ２０９の処理との間でプロセッサ１０９を切り換えられるようにする機構が含まれる。他の実施形態では、プロセッサ１０９はレジスタ２０９を非スタック参照浮動小数点レジスタおよび非スタック参照パック・データ・レジスタとして同時に処理することができる。他の例として、他の実施形態では、これらの同じレジスタを使用して整数データを記憶することができる。
もちろん、これよりも多くあるいは少ない数の組のレジスタを含む代替実施形態を実施することができる。たとえば、代替実施形態では、浮動小数点データを記憶する独立した１組の浮動小数点レジスタを含むことができる。他の例として、代替実施形態は、それぞれ、制御／状況情報を記憶する、第１の１組のレジスタと、それぞれ、整数、浮動小数点、パック・データを記憶することができる、第２の１組のレジスタとを含むことができる。話を明確にするために、実施形態のレジスタは、意味のうえで特定のタイプの回路に制限すべきではない。実施形態のレジスタはデータを記憶して与え、本明細書で説明する機能を実行できるだけでよい。
いくつかの異なる数のレジスタまたはいくつかの異なるサイズのレジスタ、あるいはその両方を含む様々な数組のレジスタ（たとえば、整数レジスタ２０１、レジスタ２０９）を実装することができる。たとえば、一実施形態では、３２ビットを記憶するために整数レジスタ２０１が実装され、８ビットを記憶するためにレジスタ２０９が実装される（すべての８ビットは浮動小数点データを記憶するために使用され、それに対してパック・データには６４ビットのみが使用される）。レジスタ２０９は８つのレジスタＲ0２１２ａないしＲ7２１２ｈも含む。Ｒ1２１２ａ、Ｒ2２１２ｂ、Ｒ3２１２ｃはレジスタ２０９内の個別のレジスタの例である。あるレジスタ２０９の３２ビットをある整数レジスタ２０１内へ移動させることができる。同様に、整数レジスタ内の値をあるレジスタ２０９の３２ビット内へ移動させることができる。他の実施形態では、整数レジスタ２０１はそれぞれ、６４ビットを含み、６４ビット・データを整数レジスタ２０１とレジスタ２０９との間で移動させることができる。
第３図は、本発明の一実施形態によってデータを処理するためにプロセッサによって使用される一般的なステップを示す流れ図である。たとえば、このような演算には、レジスタ・ファイル１５０内のレジスタにキャッシュ１６０、メイン・メモリ１０４、読取り専用メモリ（ＲＯＭ）１０６、またはデータ記憶装置１０７からのデータをロードするロード演算が含まれる。
ステップ３０１で、デコーダ２０２はキャッシュ１６０とバス１０１のどちらかから制御信号２０７を受け取る。デコーダ２０２は制御信号を復号し、実行すべき演算を判定する。
ステップ３０２で、デコーダ２０２はレジスタ・ファイル１５０、またはメモリ内の位置にアクセスする。レジスタ・ファイル１５０内のレジスタ、またはメモリ内のメモリ位置は、制御信号２０７に指定されたレジスタ・アドレスに応じてアクセスされる。たとえば、パック・データに対する演算では、制御信号２０７はＳＲＣ１レジスタ・アドレスと、ＳＲＣ２レジスタ・アドレスと、ＤＥＳＴレジスタ・アドレスとを含むことができる。ＳＲＣ１は第１のソース・レジスタのアドレスである。ＳＲＣ２は第２のソース・レジスタのアドレスである。すべての演算で２つのソース・アドレスが必要であるわけではないので、いくつかのケースではＳＲＣ２は任意選択である。演算にＳＲＣ２アドレスが必要でない場合、ＳＲＣ１アドレスのみが使用される。ＤＥＳＴは、結果データが記憶される宛先レジスタのアドレスである。一実施形態では、ＳＲＣ１またはＳＲＣ２がＤＥＳＴとしても使用される。ＳＲＣ１、ＳＲＣ２、ＤＥＳＴについては第６ａ図および第６ｂ図に関して詳しく説明する。対応するレジスタに記憶されているデータをそれぞれ、ソース１、ソース２、結果と呼ぶ。これらのデータはそれぞれ、長さが６４ビットである。
本発明の他の実施形態では、ＳＲＣ１、ＳＲＣ２、ＤＥＳＴのどれかあるいはすべてが、プロセッサ１０９のアドレス可能なメモリ空間内のメモリ位置を定義することができる。たとえば、ＳＲＣ１はメイン・メモリ１０４内のメモリ位置を識別することができ、それに対してＳＲＣ２は整数レジスタ２０１内の第１のレジスタを識別し、ＤＥＳＴはレジスタ２０９内の第２のレジスタを識別する。本明細書の説明を簡単にするために、本発明をレジスタ・ファイル１５０のアクセスに関して説明する。しかし、このようなアクセスをメモリに対して行うことができる。
ステップ３０３で、実行装置１３０がイネーブルされ、アクセスされたデータに対する演算を実行する。ステップ３０４で、結果が、制御信号２０７の要件に応じて再びレジスタ・ファイル１５０に記憶される。
データ・フォーマットおよび記憶フォーマット
第４図は、本発明の一実施形態によるパック・データ・タイプを示す。パック・バイト４０１、パック・ワード４０２、パック・ダブルワード４０３の３つのパック・データ・フォーマットが示されている。パック・バイトは、本発明の一実施形態では、長さが６４ビットであり８つのデータを含む。各データ要素の長さは１バイトである。一般に、データ要素とは、同じ長さの他のデータ要素と共に単一のレジスタ（またはメモリ位置）に記憶される個別のデータである。本発明の一実施形態では、レジスタに記憶されるデータ要素の数は、６４ビットをデータ要素のビット単位の長さで除した値である。
パック・ワード４０２は長さが６４ビットであり、４つのワード４０２データ要素を含む。各ワード４０２データ要素は１６ビットの情報を含む。
パック・ダブルワード４０３は長さが６４ビットであり、２つのダブルワード４０３データ要素を含む。各ダブルワード４０３データ要素は３２ビットの情報を含む。
第５ａ図ないし第５ｃ図は、本発明の一実施形態によるレジスタ内パック・データ記憶表現を示す。符号なしパック・データ・レジスタ内表現５１０は、レジスタＲ0２１２ａないしＲ7２１２ｈのうちの１つでの符号なしパック・バイト４０１の記憶を示す。各バイト・データ要素ごとの情報は、バイト０ではビット７ないしビット０に記憶され、バイト１ではビット１５ないしビット８に記憶され、バイト２ではビット２３ないしビット１６に記憶され、バイト３ではビット３１ないしビット２４に記憶され、バイト４ではビット３９ないしビット３２に記憶され、バイト５ではビット４７ないしビット４０に記憶され、バイト６ではビット５５ないしビット４８に記憶され、バイト７ではビット６３ないしビット５６に記憶される。したがって、レジスタ内のすべての利用可能なビットが使用される。この記憶構成はプロセッサの記憶効率を向上させる。同様に、８つのデータ要素にアクセスする場合、８つのデータ要素に対して１つの演算を同時に実行することができる。符号付きパック・バイト・レジスタ内表現５１１は符号付きパック・バイト４０１の記憶を示す。符号インジケータにはあらゆるバイト・データ要素の８ビットしか必要とされないことに留意されたい。
符号なしパック・ワード・レジスタ内表現５１２は、あるレジスタ２０９内にワード３ないしワード０がどのように記憶されるかを示す。ビット１５ないしビット０はワード０に関するデータ要素情報を含み、ビット３２ないしビット１６はデータ要素ワード１に関する情報を含み、ビット３７ないしビット３２はデータ要素ワード２に関する情報を含み、ビット６３ないしビット４８はデータ要素ワード３に関する情報を含む。符号付きパック・ワード・レジスタ内表現５１３は符号なしパック・ワード・レジスタ内表現５１４に類似している。符号インジケータに各ワード・データ要素の１６ビットしか必要とされないことに留意されたい。
符号なしパック・ダブルワード・レジスタ内表現５１４は、レジスタ２０９がどのように２つのダブルワード・データ要素を記憶するかを示す。ダブルワード０はレジスタのビット３１なしビット０に記憶される。ダブルワード１はレジスタのビット６３ないしビット３２に記憶される。符号付きパック・ダブルワード・レジスタ内表現５１５は符号なしパック・ダブルワード・レジスタ内表現５１４に類似している。必要な符号ビットがダブルワード・データ要素の３２番目のビットであることに留意されたい。
前述のように、レジスタ２０９はパック・データと浮動小数点データの両方に使用することができる。本発明のこの実施形態では、アドレスされたレジスタ、たとえばＲ0２１２ａがパック・データを記憶しているか、それとも浮動小数点データを記憶しているかを追跡するために個別のプログラミング・プロセッサ１０９が必要になることがある。代替実施形態では、プロセッサ１０９はレジスタ２０９内の個別のレジスタに記憶されているデータのタイプを追跡することができる。その場合、この代替実施形態は、たとえば浮動小数点データに対して加算が試みられた場合にエラーを生成する恐れがある。
制御信号フォーマット
下記で、パック・データを処理するためにプロセッサ１０９によって使用される制御信号フォーマットの一実施形態について説明する。本発明の一実施形態では、制御信号を３２ビットとして表される。デコーダ２０２はバス１０１から制御信号２０７を受け取ることができる。他の実施形態では、デコーダ２０２はキャッシュ１６０からそのような制御信号を受け取ることもできる。
第６ａ図は、本発明の一実施形態によるパック・データの使用法を示す制御信号フォーマットを示す。ビット３１ないしビット３６の演算フィールドＯＰ６０１は、たとえばパック加算、パック減算など、プロセッサ１０９によって実行すべき演算に関する情報を与える。ビット２５ないしビット２０のＳＲＣ１  ６０２は、あるレジスタ２０９のソース・レジスタ・アドレスを与える。このソース・レジスタは制御信号の実行時に使用すべき第１のパック・データ、すなわちソース１を含む。同様に、ビット１９ないしビット１４のＳＲＣ２  ６０３はあるレジスタ２０９のアドレスを含む。この第２のソース・レジスタは演算の実行時に使用すべきパック・データ、すなわちソース２を含む。ビット５ないしビット０のＤＥＳＴ６０５はあるレジスタ２０９のアドレスを含む。この宛先レジスタは、パック・データ演算の結果パック・データ、すなわち結果を記憶する。
ビット１２とビット１３の制御ビットＳＺ６１０は、第１と第２のパック・データ・ソース・レジスタ内のデータ要素の長さを示す。ＳＺ６１０が０１2に等しい場合、パック・データはパック・バイト４０１としてフォーマットされる。ＳＺ６１０が１０2に等しい場合、パック・データはパック・ワード４０２としてフォーマットされる。しかし、他の実施形態では、００2または１１2に等しいＳＺ６１０が予約され、これらの値のうちの一方を使用してパック・ダブルワード４０３を示すことができる。
ビット１１の制御ビットＴ６１１は、飽和モードを用いて演算を実行するかどうかを示す。Ｔ６１１が１に等しい場合、飽和演算が実行される。Ｔ６１１が零に等しい場合、飽和演算が実行される。飽和演算については下記で説明する。
ビット１０の制御ビットＳ６１２は符号付き演算の使用を示す。Ｓ６１２が１に等しい場合は、符号付き演算が実行される。Ｓ６１２が０に等しい場合は、符号なしの演算が実行される。
第６ｂ図は、本発明の一実施形態によるパック・データの使用法を示す第２の制御信号フォーマットを示す。このフォーマットは、Ｉｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ、Ｌｉｔｅｒａｔｕｒｅ  Ｓａｌｅｓ（Ｐ．Ｏ．Ｂｏｘ７６４１、Ｍｔ．ｐｒｏｓｐｅｃｔ、ＩＬ、６００５６−７６４１）から市販されている「Ｐｅｎｔｉｕｍ  Ｐｒｏｃｅｓｓｏｒ  Ｆａｍｉｌｙ  Ｕｓｅｒ’ｓ  Ｍａｎｕａｌ」に記載された一般的な整数命令コード・フォーマットに対応する。ＯＰ６０１、ＳＺ６１０、Ｔ６１１、Ｓ６１２がすべて１つの大きなフィールドとして組み合わされることに留意されたい。いくつかの制御信号では、ビット３ないしビット５はＳＲＣ１  ６０２である。ＳＲＣ１  ６０２アドレスがある一実施形態では、ビット３ないしビット５はＤＥＳＴ６０５に対応する。ＳＲＣ２  ６０３アドレスがある代替実施形態では、ビット０ないしビット２もＤＥＳＴ６０５に対応する。他の制御信号では、パック・シフト即値演算と同様に、ビット３ないしビット５は命令コード・フィールドへのエクステンションを表す。一実施形態では、このエクステンションによって、プログラマは、シフト・カウント値など制御信号を含む即値を含めることができる。一実施形態では、この即値は制御信号の後に続く。これは、「Ｐｅｎｔｉｕｍ  Ｐｒｏｃｅｓｓｏｒ  Ｆａｍｉｌｙ  Ｕｓｅｒ’ｓ  Ｍａｎｕａｌ」の付録Ｆ、Ｆ−１ページないしＦ−３ページに詳しく記載されている。ビット０〜２はＳＲＣ２  ６０３を表す。この一般的なフォーマットによって、レジスタ間アドレス指定、メモリ・レジスタ間アドレス指定、レジスタ・バイ・メモリ・アドレス指定、レジスタ・バイ・レジスタ・アドレス指定、レジスタ・バイ即値アドレス指定、レジスタ・メモリ間アドレス指定が可能になる。一実施形態では、この一般的なフォーマットは整数レジスタ・レジスタ間アドレス指定とレジスタ整数レジスタ間アドレス指定をサポートすることもできる。
飽和／非飽和の説明
前述のように、Ｔ６１１は演算が任意選択で飽和するかどうかを示す。飽和がイネーブルされた状態で、演算の結果がデータの範囲に対してオーバフローまたはアンダーフローした場合、結果はクランプされる。クランプとは、結果が範囲の最大値または最小値を超えた場合に結果を最大値または最小値に設定することを意味する。アンダーフローの場合、飽和によって結果が範囲内の最低値にクランプされ、オーバフローの場合は最高値にクランプされる。各データ・フォーマットの許容範囲を表７に示す。
0003711147.tif 000009
前述のように、Ｔ６１１は、飽和演算が実行されるかどうかを示す。したがって、符号なしデータ・フォーマットを使用すると、演算の結果＝２５８であり、飽和がイネーブルされている場合、結果は演算の宛先レジスタに記憶される前に２５５にクランプされる。同様に、演算の結果＝−３２９９９であり、プロセッサ１０９が飽和をイネーブルした状態で符号付きワード・データ・フォーマットを使用した場合、結果は演算の宛先レジスタに記憶される前に−３２７６８にクランプされる。
パック加算
パック加算演算
本発明の一実施形態では、実行装置１３０でパック加算を実行することができる。すなわち、本発明では、第１のパック・データの各データ要素を個別に、第２のパック・データの各データ要素に加算することができる。
第７ａ図は、本発明の一実施形態によってパック加算を実行する方法を示す。ステップ７０１で、デコーダ２０２は、プロセッサ１０９から受け取った制御信号２０７を復号する。したがって、デコーダ２０２はパック加算に関する命令コードと、レジスタ２０９内のＳＲＣ１  ６０２アドレス、ＳＲＣ２  ６０３アドレス、ＤＥＳＴ６０５アドレスと、パック・データ内のデータの飽和／不飽和、符号付き／符号なし、長さを復号する。ステップ７０２で、デコーダ２０２は、ＳＲＣ１  ６０２アドレスおよびＳＲＣ２  ６０３アドレスが与えられた場合に、内部バス１７０を介してレジスタ・ファイル１５０内のレジスタ２０９にアクセスする。レジスタ２０９は、レジスタのこれらのアドレスに記憶されているパック・データ、すなわちそれぞれソース１およびソース２を実行装置１３０に与える。すなわち、レジスタ２０９はパック・データを内部バス１７０を介して実行装置１３０に伝達する。
ステップ７０３で、デコーダ２０２は実行装置１３０がパック加算を実行できるようにする。デコーダ２０２はさらに、パック・データ要素の長さ、飽和を使用するかどうか、符号付き演算を使用するかどうかを内部バス１７０を介して伝達する。ステップ７０４で、データ要素の長さによって、どのステップを次に実行するかが決定される。パック・データ内のデータ要素の長さが８ビットである（バイト・データ）場合、実行装置１３０はステップ７０５ａを実行する。しかし、パック・データ内のデータ要素の長さが１６ビットである（ワード・データ）場合、実行装置１３０はステップ７０５ａを実行する。本発明の一実施形態では、８ビット・データ要素長および１６ビット・データ要素長のパック加算しかサポートされない。しかし、代替実施形態は異なる長さまたは他の長さをサポートすることができる。たとえば、代替実施形態では３２ビット・データ要素長のパック加算をサポートすることもできる。
データ要素の長さが８ビットであると仮定した場合、ステップ７０５ａが実行される。実行装置１３０はＳＲＣ２のビット７ないしビット０にソース１のビット７ないしビット０を加算し、結果パック・データのビット７ないしビット０を生成する。この加算と並行して、実行装置１３０はソース２のビット１５ないしビット８にソース１のビット１５ないしビット８を加算し、結果パック・データのビット１５ないしビット８を生成する。これらの加算と並行して、実行装置１３０はソース２のビット２３ないしビット１６にソース１のビット２３ないしビット１６を加算し、結果パック・データのビット２３ないしビット１６を生成する。これらの加算と並行して、実行装置１３０はソース２のビット３１ないしビット２４にソース１のビット３１ないしビット２４を加算し、結果パック・データのビット３１ないしビット２４を生成する。これらの加算と並行して、実行装置１３０はソース２のビット３９ないしビット３２にソース１のビット３９ないしビット３２を加算し、結果パック・データのビット３９ないしビット３２を生成する。これらの加算と並行して、実行装置１３０はソース２のビット４７ないしビット４０にソース１のビット４７ないしビット４０を加算し、結果パック・データのビット４７ないしビット４０を生成する。これらの加算と並行して、実行装置１３０はソース２のビット５５ないしビット４８にソース１のビット５５ないしビット４８を加算し、結果パック・データのビット５５ないしビット４８を生成する。これらの加算と並行して、実行装置１３０はソース２のビット６３ないしビット５６にソース１のビット６３ないしビット５６を加算し、結果パック・データのビット６３ないしビット５６を生成する。
データ要素の長さが１６ビットであると仮定した場合、ステップ７０５ｂが実行される。実行装置１３０はＳＲＣ２のビット１５ないしビット０にソース１のビット１５ないしビット０を加算し、結果パック・データのビット１５ないしビット０を生成する。この加算と並行して、実行装置１３０はソース２のビット３１ないしビット１６にソース１のビット３１ないしビット１６を加算し、結果パック・データのビット３１ないしビット１６を生成する。これらの加算と並行して、実行装置１３０はソース２のビット４７ないしビット３２にソース１のビット４７ないしビット３２を加算し、結果パック・データのビット４７ないしビット３２を生成する。これらの加算と並行して、実行装置１３０はソース２のビット６３ないしビット４８にソース１のビット６３ないしビット４８を加算し、結果パック・データのビット６３ないしビット４８を生成する。
ステップ７０６で、デコーダ２０２は、宛先レジスタのＤＥＳＴ６０５アドレス
を含むあるレジスタ２０９をイネーブルする。したがって、結果は、ＤＥＳＴ６０５からアドレスされるレジスタに記憶される。
表８ａは、パック加算のレジスタ内表現を示す。第１のビット行はソース１パック・データのパック・データ表現である。第２のビット行はソース２パック・データのパック・データ表現である。第３のビット行は結果パック・データのパック・データ表現である。各データ要素の下方の数はデータ要素番号である。たとえば、ソース１データ要素０は１０００１０００2である。したがって、データ要素の長さが８ビットであり（バイト・データ）、符号なし不飽和加算を実行する場合、実行装置１３０は図のような結果パック・データを生成する。
本発明の一実施形態では、結果がオーバフローまたはアンダーフローし、演算が不飽和演算を使用し、結果が単に打ち切られることに留意されたい。すなわち、桁上げビットは無視される。たとえば、第８ａでは、結果データ要素１のレジスタ内表現は１０００１０００2＋１０００１０００2＝００００１０００2である。同様に、アンダーフローの場合、結果は打ち切られる。この打ち切り形式によって、プログラマは容易にモジュール演算を実行することができる。たとえば、結果データ要素１の数式は（ソース１データ要素１＋ソース２データ要素１）ｍｏｄ２５６＝結果データ要素１として表すことができる。さらに、当業者なら、この説明から、状況レジスタ内にエラー・ビットをセットすることによってオーバフローおよびアンダーフローを検出できることが理解されよう。
0003711147.tif 000010
表８ｂは、パック・ワード・データ加算のレジスタ内表現を示す。したがって、データ要素の長さが１６ビットであり（ワード・データ）、符号なし不飽和加算を実行する場合、実行装置１３０は図のような結果パック・データを生成する。ワード・データ要素２で、ビット７からの桁上げ（下記の強調表示されたビット１を参照されたい）がビット８に伝搬し、データ要素２をオーバフローさせている（下記の強調表示された「オーバフロー」を参照されたい）ことに留意されたい。
0003711147.tif 000011
表８ｃは、パック・ダブルワード・データ加算のレジスタ内表現を示す。この演算は本発明の代替実施形態でサポートされる。したがって、データ要素の長さが３２ビットであり（すなわち、ダブルワード・データ）、符号なし不飽和加算を実行する場合、実行装置１３０は図のような結果パック・データを生成する。ダブルワード・データ要素のビット７およびビット１５からの桁上げがそれぞれ、ビット８およびに伝搬していることに留意されたい。
0003711147.tif 000012
パック加算と通常の加算との違いをより明確に示すために、上記の例のデータを表９で重複する。しかし、この場合、データに対して通常の加算（６４ビット）が実行される。ビット７、ビット１５、ビット２３、ビット３１、ビット３９、ビット４７からの桁上げがそれぞれ、ビット８、ビット１６、ビット２４、ビット３２、ビット４０、ビット４８に対して行われることに留意されたい。
0003711147.tif 000013
符号付き／不飽和パック加算
表１０は、パック・データのデータ要素長が８ビットである符号付きパック加算の例を示す。飽和は使用されない。したがって、結果はオーバフローすることも、アンダーフローすることもできる。表１０は、表８ａないし８ｃおよび表９とは異なるデータを使用する。
0003711147.tif 000014
符号付き／飽和パック加算
表１１は、パック・データのデータ要素長が８ビットである符号付きパック加算の例を示す。飽和は使用されず、したがってオーバフローは最大値にクランプされ、アンダーフローは最小値にクランプされる。表１１は表１０と同じデータを使用する。この場合、データ要素０およびデータ要素２は最小値にクランプされ、それに対してデータ要素４およびデータ要素６は最大値にクランプされる。
0003711147.tif 000015
パック減算
パック減算演算
本発明の一実施形態では、実行装置１３０でパック減算を実行することができる。すなわち、本発明では、第１のパック・データの各データ要素から第２のパック・データの各データ要素を個別に減算することができる。
第７ｂ図は、本発明の一実施形態によってパック減算を実行する方法を示す。ステップ７１０ないし７１３がステップ７０１ないし７０４に類似していることに留意されたい。
本発明のこの実施形態では、８ビット・データ要素長および１６ビット・データ要素長のパック減算しかサポートされない。しかし、代替実施形態は異なる長さまたは他の長さをサポートすることができる。たとえば、代替実施形態では３２ビット・データ要素長のパック減算をサポートすることもできる。
データ要素長が８ビットであると仮定した場合、ステップ７１４ａおよび７１５ａが実行される。実行装置１３０は、ソース２のビット７ないしビット０の２の補数をとる。この２の補数と並行して、実行装置１３０はソース２のビット１５ないしビット８の２の補数をとる。これらの２の補数と並行して、実行装置１３０はソース２のビット２３ないしビット１６の２の補数をとる。この２の補数と並行して、実行装置１３０はソース２のビット３１ないしビット２４の２の補数をとる。これらの２の補数と並行して、実行装置１３０はソース２のビット３９ないしビット３２の２の補数をとる。この２の補数と並行して、実行装置１３０はソース２のビット４７ないしビット４０の２の補数をとる。これらの２の補数と並行して、実行装置１３０はソース２のビット５５ないしビット４８の２の補数をとる。この２の補数と並行して、実行装置１３０はソース２のビット６３ないしビット５６の２の補数をとる。ステップ７１５ａで、実行装置１３０は、ステップ７０５ａに関して概略的に説明したように、ソース２の２の補数ビットをソース１のビットに加算する。
データ要素長が１６ビットであると仮定した場合、ステップ７１４ｂおよび７１５ｂが実行される。実行装置１３０は、ソース２のビット１５ないしビット０の２の補数をとる。この２の補数と並行して、実行装置１３０はソース２のビット３１ないしビット１６の２の補数をとる。これらの２の補数と並行して、実行装置１３０はソース２のビット４７ないしビット３２の２の補数をとる。この２の補数と並行して、実行装置１３０はソース２のビット６３ないしビット４８の２の補数をとる。ステップ７１５ｂで、実行装置１３０は、ステップ７０５ｂに関して概略的に説明したように、ソース２の２の補数ビットをソース１のビットに加算する。
ステップ７１４および７１５が、第２の数から第１の数を減算するために本発明の一実施形態で使用される方法であることに留意されたい。しかし、当技術分野では他の減算形式が知られており、本発明を、２の補数演算を使用することに限られるとみなすべきではない。
ステップ７１６で、デコーダ２０２は宛先レジスタの宛先アドレスを含むレジスタ２０９をイネーブルする。したがって、結果パック・データはレジスタ２０９のＤＥＳＴレジスタに記憶される。
表１２はパック減算のレジスタ内表現を示す。データ要素の長さが８ビットであり（バイト・データ）、符号なし不飽和減算を実行すると仮定した場合、実行装置１３０は図のような結果パック・データを生成する。
0003711147.tif 000016
パック・データ加減算回路
第８図は、本発明の一実施形態によってパック・データの個別に対してパック加算およびパック減算を実行する回路を示す。第８図は、修正ビット・スライス加減算器８００を示す。加減算器８０１ａないし８０１ｂによって、ソース２の２つのビットをソース１に加算し、あるいはソース１から減算することができる。演算桁上げ制御装置８０３は、制御装置８０９ａへ制御信号を送り加算または減算をイネーブルする。したがって、加減算器８０１ａは、ソース２ｉ８０５ａ上で受け取ったビットｉをソース１ｉ８０４ａ上で受け取ったビットｉに対して加算または減算し、結果ｉ８０６ａ上で送られる結果ビットを生成する。Ｃｉｎ８０７ａないしＣｉｎ８０７ｂおよびＣｏｕｔ８０８ａないしＣｏｕｔ８０８ｂは、加算器および減算器で一般に使用される桁上げ制御回路を表す。
ビット制御装置８０２は、Ｃｉｎi+1８０７ｂおよびＣｏｕｔｉを制御するためにパック・データ・イネーブル８１１を介して演算桁上げ制御装置８０３からイネーブルされる。たとえば表１３ａで、符号なしパック・バイト加算が実行される。加減算器８０１ａがソース２のビット７にソース１のビット７を加算した場合、演算桁上げ制御装置８０３はビット制御装置８０２をイネーブルし、桁上げのビット７からビット８への伝搬を停止する。
0003711147.tif 000017
しかし、符号なしパック・ワード加算が実行され、加減算器８０１ａが同様に、ソース２のビット７にソース１のビット７を加算するために使用される場合、ビット制御装置８０２は桁上げをビット８へ伝搬させる。表１３ｂはこの結果を示す。この伝搬は、パック・ダブルワード加算とアンパック加算に対して許可される。
0003711147.tif 000018
加減算器８０１ａは、まずソース２i８０５ａを反転させることによってソース２i８０５ａの２の補数を形成し１を加算することによって、ソース１i８０４ａからビット・ソース２i８０５ａを減算する。次いで、加減算器８０１ａはこの結果をソース１i８０４ａに加算する。ビット・スライス２の補数技法は当技術分野で良く知られており、当業者には、そのようなビット・スライス２の補数回路をどのように設計すべきかが理解されよう。桁上げの伝搬がビット制御装置８０２および演算桁上げ制御装置８０３によって制御されることに留意されたい。
第９図は、本発明の一実施形態によってパック・バイト・データに対してパック加算およびパック減算を実行する回路を示す。ソース１バス９０１およびソース２バス９０２はそれぞれ、情報信号をソース１in９０６ａないし９０６ｈおよびソース２in９０５ａないし９０５ｈを介して加減算器９０８ａないし９０８ｈへ送る。したがって、加減算器９０８ａは、ソース２のビット７ないしビット０をソース１のビット７ないしビット０に対して加減算し、加減算器９０８ｂは、ソース２のビット１５ないしビット８をソース１のビット１５ないしビット８に対して加減算し、以下同様である。ＣＴＲＬ９０４ａないし９０４ｈは、桁上げの伝搬をイネーブルし、飽和をイネーブル／ディスエーブルし、符号付き／符号なし演算をイネーブル／ディスエーブルする制御信号をパック制御装置９１１を介して演算制御装置９０３から受け取る。演算制御装置９０３は、ＣＴＲＬ９０４ａないし９０４ｈから桁上げ情報を受け取り、それを次の上位加減算器９０８ａないし９０８ｈに伝搬させないことによって、桁上げの伝搬をディスエーブルする。したがって、演算制御装置９０３は６４ビット・パック・データに対して演算桁上げ制御装置８０３およびビット制御装置８０２の演算を実行する。当業者なら、第１図ないし第９図および上記の説明で例示したそのような回路を作製することができよう。
加減算器９０８ａないし９０８ｈは結果情報を様々なパック加算の結果出力９０７ａないし９０７ｈを介して結果レジスタ９０１ａないし９１０ｈへ伝達する。各結果レジスタ９１０ａないし９１０ｈは結果情報を記憶し、次いで結果バス９０９上へ送る。この結果情報は次いで、ＤＥＳＴ６０５レジスタ・アドレスによって指定された整数レジスタに記憶される。
第１０図は、本発明の一実施形態によってパック・ワード・データに対してパック加算およびパック減算を実行する回路の論理図である。この場合、パック・ワード演算が実行される。ビット８とビット７との間、ビット２４とビット２３との間、ビット４０とビット３９との間、ビット５６とビット５５との間の桁上げの伝搬は演算制御装置９０３によってイネーブルされる。したがって、仮想加減算器１００８ａとして示した加減算器９０８ａおよび９０８ｂは協働し、パック・ワード・データ・ソース２の第１のワード（ビット１５ないしビット０）をパック・ワード・データ・ソース１の第１のワード（ビット１５ないしビット０）に対して加減算し、仮想加減算器１００８ｂとして示した加減算器９０８ｃおよび９０８ｄは協働し、パック・ワード・データ・ソース２の第２のワード（ビット３１ないしビット１６）をパック・ワード・データ・ソース１の第２のワード（ビット３１ないしビット１６）に対して加減算し、以下同様である。
仮想加減算器１００８ａないし１００８ｄは結果情報を結果出力１００７ａないし１００７ｄ（組合せ結果出力９０７ａないし９０７ｂ、９０７ｃないし９０７ｄ、９０７ｅないし９０７ｆ、９０７ｇないし９０７ｈ）を介して仮想結果レジスタ１０１０ａないし１０１０ｄへ伝達する。各仮想結果レジスタ１０１０ａないし１０１０ｄ（組合せ結果レジスタ９１０ａないし９１０ｂ、９１０ｃないし９１０ｄ、９１０ｅないし９１０ｆ、９１０ｇないし９１０ｈ）は、結果バス９０９上へ伝達すべき１６ビット結果データ要素を記憶する。
第１１図は、本発明の一実施形態によってパック・ダブルワード・データに対してパック加算およびパック減算を実行する回路の論理図である。ビット８とビット７との間、ビット１６とビット１５との間、ビット２４とビット２３との間、ビット４０とビット３９との間、ビット４８とビット４７との間、ビット５６とビット５５との間の桁上げの伝搬は演算制御装置９０３によってイネーブルされる。したがって、仮想加減算器１１０８ａとして示した加減算器９０８ａないし９０８ｄは協働し、パック・ダブルワード・データ・ソース２の第１のダブルワード（ビット３１ないしビット０）をパック・ダブルワード・データ・ソース１の第１のダブルワード（ビット３１ないしビット０）に対して加減算し、仮想加減算器１１０８ｂとして示した加減算器９０８ｅないし９０８ｈは協働し、パック・ダブルワード・データ・ソース２の第２のダブルワード（ビット６３ないしビット３２）をパック・ダブルワード・データ・ソース１の第２のワード（ビット６３ないしビット３２）に対して加減算し、以下同様である。
仮想加減算器１１０８ａないし１１０８ｂは結果情報を結果出力１１０７ａないし１１０７ｂ（組合せ結果出力９０７ａないし９０７ｄ、および９０７ｅないし９０７ｈ）を介して仮想結果レジスタ１１１０ａないし１１１０ｂへ伝達する。各仮想結果レジスタ１１１０ａないし１１１０ｂ（組合せ結果レジスタ９１０ａないし９１０ｄ、および９１０ｅないし９１０ｈ）は、結果バス９０９上へ伝達すべき３２ビット結果データ要素を記憶する。
パック乗算
パック乗算演算
本発明の一実施形態では、ＳＲＣ１レジスタは被乗数データ（ソース１）を含み、ＳＲＣ２は乗数データ（ソース２）を含み、ＤＥＳＴレジスタは乗算の積の一部（結果）を含む。すなわち、ソース１は、ソース２のそれぞれのデータ要素が独立に乗算される各データ要素を有する。乗算のタイプに応じて、結果は積の上位ビットまたは下位ビットを含む。
本発明の一実施形態では、上位符号なしパック乗算、上位符号付きパック乗算、下位パック乗算の各乗算がサポートされる。上位｜下位は、乗算の積のどのビットを結果に含めるかを示す。これが必要であるのは、２つのＮビット数の乗算の結果、２Ｎ個のビットを有する積が得られるからである。各結果データ要素が被乗数および乗数のデータ要素と同じサイズを有するので、結果では積の半分しか表すことができない。上位では上位ビットが結果として出力される。下位では下位ビットが結果として出力される。たとえば、ソース１［７：０］とソース２［７：０］との符号なし上位パック乗算では、積の上位ビットが結果［７：０］に記憶される。
本発明の一実施形態では、上位｜下位演算修飾子を使用することによって、あるデータ要素から次に上位のデータ要素へのオーバフローが起こる可能性がなくなる。すなわち、この修飾子によって、プログラマはオーバフローに気を使わずに積のどのビットを結果に含めるかを選択することができる。プログラマは、パック乗算の組合せを使用して完全な２Ｎビット積を生成することができる。たとえば、上位符号なしパック乗算を使用し、次いで同じソース１およびソース２を用いた下位パック乗算を使用して、完全な（２Ｎ）積を得ることができる。上位演算を行うのは、積の重要な部分が積の上位ビットだけであることが多いからである。プログラマは、多くの場合非パック・データ演算で必要とされるように最初に打ち切りを実行する必要なしに、積の上位ビットを得ることができる。
本発明の一実施形態では、ソース２の各データ要素は異なる値を有することができる。このため、プログラマはソース１の各被乗数に対する乗数として異なる値を有することができる。
第１２図は、本発明の一実施形態によってパック・データに対してパック乗算を実行する方法を示す流れ図である。
ステップ１２０１で、デコーダ２０２は、プロセッサ１０９から受け取った制御信号２０７を復号する。したがって、デコーダ２０２は適切な乗算に関する命令コードと、レジスタ２０９内のＳＲＣ１  ６０２アドレス、ＳＲＣ２  ６０３アドレス、ＤＥＳＴ６０５アドレスと、パック・データ内のデータ要素の符号付き／符号なし、上位｜下位、長さを復号する。
ステップ１２０２で、デコーダ２０２は、ＳＲＣ１  ６０２アドレスおよびＳＲＣ２  ６０３アドレスが与えられた場合に、内部バス１７０を介してレジスタ・ファイル１５０内のレジスタ２０９にアクセスする。レジスタ２０９は、ＳＲＣ１  ６０２レジスタに記憶されているパック・データ（ソース１）と、ＳＲＣ２  ６０３レジスタに記憶されているパック・データ（ソース２）を実行装置１３０に与える。すなわち、レジスタ２０９はパック・データを内部バス１７０を介して実行装置１３０に伝達する。
ステップ１２０３で、デコーダ２０２は実行装置１３０が適切なパック乗算を実行できるようにする。デコーダ２０２はさらに、乗算に関するデータ要素のサイズおよび上位｜下位を内部バス１７０を介して伝達する。
ステップ１２１０で、データ要素のサイズによって、どのステップを次に実行するかが決定される。データ要素のサイズが８ビットである（バイト・データ）場合、実行装置１３０はステップ１２１２を実行する。しかし、パック・データ内のデータ要素の長さが１６ビットである（ワード・データ）場合、実行装置１３０はステップ１２１４を実行する。一実施形態では、１６ビット・データ要素サイズのパック乗算しかサポートされない。他の実施形態では、８ビット・データ要素サイズおよび１６ビット・データ要素サイズのパック乗算がサポートされる。しかし、他の実施形態では、３２ビット・データ要素サイズのパック乗算もサポートされる。
データ要素のサイズが８ビットであると仮定した場合、ステップ１２１２が実行される。ステップ１２１２では下記のことが実行される。ソース１のビット７ないしビット０にソース２のビット７ないしビット０が乗算され、結果のビット７ないしビット０が生成される。ソース１のビット１５ないしビット８にソース２のビット１５ないしビット８が乗算され、結果のビット１５ないしビット８が生成される。ソース１のビット２３ないしビット１６にソース２のビット２３ないしビット１６が乗算され、結果のビット２３ないしビット１６が生成される。ソース１のビット３１ないしビット２４にソース２のビット３１ないしビット２４が乗算され、結果のビット３１ないしビット２４が生成される。ソース１のビット３９ないしビット３２にソース２のビット３９ないしビット３２が乗算され、結果のビット３９ないしビット３２が生成される。ソース１のビット４７ないしビット４０にソース２のビット４７ないしビット４０が乗算され、結果のビット４７ないしビット４０が生成される。ソース１のビット５５ないしビット４８にソース２のビット５５ないしビット４８が乗算され、結果のビット５５ないしビット４８が生成される。ソース１のビット６３ないしビット５６にソース２のビット６３ないしビット５６が乗算され、結果のビット６３ないしビット５６が生成される。
データ要素のサイズが１６ビットであると仮定した場合、ステップ１２１４が実行される。ステップ１２１４では下記のことが実行される。ソース１のビット１５ないしビット０にソース２のビット１５ないしビット０が乗算され、結果のビット１５ないしビット０が生成される。ソース１のビット３１ないしビット１６にソース２のビット３１ないしビット１６が乗算され、結果のビット３１ないしビット１６が生成される。ソース１のビット４７ないしビット３２にソース２のビット４７ないしビット３２が乗算され、結果のビット４７ないしビット３２が生成される。ソース１のビット６３ないしビット４８にソース２のビット６３ないしビット４８が乗算され、結果のビット６３ないしビット４８が生成される。
一実施形態では、ステップ１２１２の乗算が同時に実行される。しかし、他の実施形態ではこれらの乗算が順次実行される。他の実施形態では、これらの乗算のいくつかが同時に実行され、いくつかが順次実行される。この議論はステップ１２１４の乗算にも当てはまる。
ステップ１２２０で、ＤＥＳＴレジスタに結果が記憶される。
表１４は、パック・ワード・データに対する符号なし上位パック乗算のレジスタ内表現を示す。第１のビット行はソース１のパック・データ表現である。第２のビット行はソース２のデータ表現である。第３のビット行は結果のパック・データ表現である。各データ要素ビットの下方の数はデータ要素番号である。たとえば、ソース１データ要素２は１１１１１１１１  ００００００００2である。
0003711147.tif 000019
表１５は、パック・ワード・データに対する上位符号付きパック乗算のレジスタ内表現である。
0003711147.tif 000020
表１６は、パック・ワード・データに対する下位パック乗算のレジスタ内表現である。
0003711147.tif 000021
パック・データ乗算回路
一実施形態では、アンパック・データに対する単一の乗算と同じ数のクロック・サイクルで複数のデータ要素に対して乗算を行うことができる。同じ数のクロック・サイクルで乗算を実行するために並行処理が使用される。すなわち、各レジスタは、データ要素に対して乗算を実行するよう同時に命令される。このことについて下記で詳しく説明する。
第１３図は、本発明の一実施形態によってパック乗算を実行する回路を示す。演算制御装置１３００は、乗算を実行する回路を制御する。演算制御装置１３００は乗算用の制御信号を処理し、上位｜下位イネーブル１３８０、バイトワード・イネーブル１３８１、符号イネーブル１３８２の各出力を有する。上位｜下位イネーブル１３８０は、結果に積の上位ビットを含めるか、それとも下位ビットを含めるかを識別する。バイトワード・イネーブル１３８１は、バイト・パック・データ乗算を実行するか、それともワード・パック・データ乗算を実行するかを識別する。符号イネーブル１３８２は、符号付き乗算を使用すべきかどうかを識別する。
パック・ワード・マルチプライヤ１３０１は４つのワード・データ要素を同時に乗算する。パック・バイト・マルチプライヤ１３０２は８つのバイト・データ要素を乗算する。パック・ワード・マルチプライヤ１３０１とパック・バイト・マルチプライヤ１３０２は共に、ソース１［６３：０］１３３１、ソース２［６３：０］１３３３、符号イネーブル１３８２、上位｜下位イネーブル１３８０の各入力を有する。
パック・ワード・マルチプライヤ１３０１は、１６×１６マルチプライヤＡ１３１０、１６×１６マルチプライヤＢ１３１１、１６×１６マルチプライヤＣ１３１２、１６×１６マルチプライヤＤ１３１３の４つの１６×１６マルチプライヤ回路を含む。１６×１６マルチプライヤＡ１３１０は入力としてソース１［１５：０］とソース２［１５：０］とを有する。１６×１６マルチプライヤＢ１３１１は入力としてソース［３１：１６］とソース２［３１：１６］とを有する。１６×１６マルチプライヤＣ１３１２は入力としてソース１［４７：３２］とソース２［４７：３２］とを有する。１６×１６マルチプライヤＤ１３１３は入力としてソース１［６３：４８］とソース２［６３：４８］とを有する。各１６×１６マルチプライヤは符号イネーブル１３８２に結合される。各１６×１６マルチプライヤは３２ビット積を生成する。各マルチプライヤごとに、マルチプレクサ（それぞれ、Ｍ×０  １３５０、Ｍ×１  １３５１、Ｍ×２  １３５２、Ｍ×３  １３５３）は３２ビットの結果を受け取る。上位｜下位イネーブル１３８０の値に応じて、各マルチプレクサは積の上位１６ビットまたは下位１６ビットを出力する。４つのマルチプレクサの出力は１つの６４ビット結果として組み合わされる。この結果は任意選択で結果レジスタ１  １３７１に記憶される。
パック・バイト・マルチプライヤ１３０２は８つの８×８マルチプライヤ回路、すなわち８×８マルチプライヤＡ１３２０ないし８×８マルチプライヤＨ１３２７を含む。各８×８マルチプライヤはソース１［６３：０］１３３１およびソース２［６３：０］１３３３のそれぞれからの８ビット入力を有する。たとえば、８×８マルチプライヤＡ１３２０は入力としてソース１［７：０］およびソース２［７：０］を有し、それに対して８×８マルチプライヤＨ１３２７は入力としてソース１［６３：５６］およびソース２［６３：５６］を有する。各８×８マルチプライヤは符号イネーブル１３８２に結合される。各８×８マルチプライヤは１６ビットの積を生成する。各マルチプライヤごとに、マルチプレクサ（たとえば、Ｍ×４  １３６０およびＭ×１１  １３６７）は１６ビットの結果を受け取る。上位｜下位イネーブル１３８０の値に応じて、各マルチプレクサは積の上位８ビットまたは下位８ビットを出力する。８つのマルチプレクサの出力は１つの６４ビット結果として組み合わされる。この結果は任意選択で結果レジスタ２  １３７２に記憶される。バイトワード・イネーブル１３８１は、演算で必要とされるデータ要素のサイズに応じて特定の結果レジスタをイネーブルする。
一実施形態では、乗算を実現するために使用される面積が、２つの８×８数の両方または１つの１６×１６数を乗算することのできる回路を作製することによって削減される。すなわち、２つの８×８マルチプライヤおよび１つの８×８マルチプライヤが１つの８×８・１６×１６マルチプレクサとして組み合わされる。演算制御装置１３００は乗算に適切なサイズをイネーブルする。そのような実施形態では、マルチプレクサが使用する物理的面積が削減されるが、パック・バイト乗算およびパック・ワード乗算を実行することは困難である。パック・ダブルワード乗算をサポートする他の実施形態では、１つのマルチプライヤが４つの８×８乗算、２つの１６×１６乗算、または１つの３２×３２乗算を実行することができる。
一実施形態では、パック・ワード乗算しか行われない。この実施形態には、パック・バイト・マルチプライヤ１３０２および結果レジスタ２  １３７２は含まれない。
前述のパック乗算を命令セットに含めることの利点
したがって、前述のパック乗算命令では、ソース１内の各データ要素にソース２内のそれぞれのデータ要素を独立に乗算することができる。もちろん、ソース２の各要素に同じ数を記憶することによって、ソース１内の各要素に同じ数を乗算することを必要とするアルゴリズムを実行することができる。また、この乗算命令では、桁上げチェーンを破壊することによってオーバフローが防止され、それによってプログラマがこの責任から解放され、命令によってデータをオーバフローを防止するように準備することが不要になり、よりロバストなコードが得られる。
これに対して、そのような命令をサポートしない従来技術の汎用プロセッサは、データ要素をアンパックし、乗算を実行し、次いで結果を将来パック処理できるようにパックすることによってこの演算を実行する必要がある。したがって、プロセッサ１０９は、１つの命令を使用しそれぞれの異なるマルチプライヤによってパック・データのそれぞれの異なるデータ要素を並行して乗算することができる。
典型的なマルチメディア・アルゴリズムは多数の乗算を実行する。したがって、これらの乗算を実行する必要がある命令の数を削減することによって、このようなマルチメディア・アルゴリズムの性能は向上する。したがって、プロセッサ１０９は、それ自体がサポートする命令セットにこの乗算命令を与えることによって、この機能を必要とするアルゴリズムをより高い性能レベルで実行することができる。
乗算−加減算
乗算−加減算演算
一実施形態では、下記で表１７ａおよび表１７ｂに示すように単一の乗算−加算命令を使用して２つの乗算−加算演算が実行される。表１７ａは、開示された乗算−加算命令の簡略化表現を示し、それに対して表１７ｂは、開示された乗算−加算命令のビット・レベル例を示す。
0003711147.tif 000022
0003711147.tif 000023
乗算−減算演算は、加算が減算で置き換えられることを除いて乗算−加算演算と同じである。２つの乗算−減算演算を実行する乗算−減算命令の例の演算を表１８に示す。
0003711147.tif 000024
本発明の一実施形態では、ＳＲＣ１レジスタはパック・データ（ソース１）を含み、ＳＲＣ２レジスタはパック・データ（ソース２）を含み、ＤＥＳＴレジスタはソース１およびソース２に対して乗算−加算命令または乗算−減算命令を実行した結果を含む。乗算−加算命令または乗算−減算命令の第１のステップで、ソース１の各データ要素がソース２のそれぞれのデータ要素と独立に乗算され、１組のそれぞれの中間結果が生成される。乗算−加算命令を実行する際、これらの中間結果が対ごとに合計され、結果的に得られる２つのデータ要素が生成され結果のデータ要素として記憶される。これに対して、乗算−減算命令を実行する際、これらの中間結果が対ごとに減算され、結果的に得られる２つのデータ要素が生成され結果のデータ要素として記憶される。
代替実施形態では、データ要素のビット数、または中間結果のビット数、または結果内のデータ要素のビット数、あるいはそれらの組合せを変更することができる。代替実施形態では、ソース１のデータ要素の数、ソース２のデータ要素の数、結果のデータ要素の数を変更することができる。たとえば、ソース１およびソース２がそれぞれ８つのデータ要素を有する場合、乗算−加減算命令を実施して４つのデータ要素を含む結果を生成することも（結果の各データ要素は２つの中間結果の加算を表す）、２つのデータ要素を含む結果を生成する（結果の各データ要素は４つの中間結果の加算を表す）こともでき、以下同様である。
第１４図は、本発明の一実施形態によってパック・データに対して乗算−加算演算および乗算−減算演算を実行する方法を示す流れ図である。
ステップ１４０１で、デコーダ２０２は、プロセッサ１０９が受け取った制御信号２０７を復号する。したがって、デコーダ２０２は乗算−加算命令または乗算−減算命令に関する命令コードを復号する。
ステップ１４０２で、デコーダ２０２はＳＲＣ１  ６０２アドレスおよびＳＲＣ２  ６０３アドレスが与えられた場合に内部バス１７０を介してレジスタ・ファイル１５０内のレジスタ２０９にアクセスする。レジスタ２０９は、ＳＲＣ１  ６０２レジスタに記憶されているパック・データ（ソース１）と、ＳＲＣ２  ６０３レジスタに記憶されているパック・データ（ソース２）を実行装置１３０に与える。すなわち、レジスタ２０９はパック・データを内部バス１７０を介して実行装置１３０に伝達する。
ステップ１４０３で、デコーダ２０２は実行装置１３０が命令を実行できるようにする。命令が乗算−加算命令である場合、フローはステップ１４１４へ移る。しかし、命令が乗算−減算命令である場合、フローはステップ１４１５へ移る。
ステップ１４１４で下記のことが実行される。ソース１のビット１５ないしビット０にソース２のビット１５ないしビット０が乗算され、第１の３２ビット中間結果（中間結果１）が生成される。ソース１のビット３１ないしビット１６にソース２のビット３１ないしビット１６が乗算され、第２の３２ビット中間結果（中間結果２）が生成される。ソース１のビット４７ないしビット３２にソース２のビット４７ないしビット３２が乗算され、第３の３２ビット中間結果（中間結果３）が生成される。ソース１のビット６３ないしビット４８にソース２のビット６３ないしビット４８が乗算され、第４の３２ビット中間結果（中間結果４）が生成される。中間結果１が中間結果２に加算され、結果のビット３１ないしビット０が生成され、中間結果３が中間結果４に加算され、結果のビット６３ないしビット３２が生成される。
ステップ１４１５は、中間結果１と中間結果２が減算されて結果の３１ビットないしビット０が生成され、結果３と中間結果４が減算されて結果の６３ビットないしビット３２が生成されることを除いて、ステップ１４１４と同じである。
いくつかの異なる実施形態では、乗算および加減算を順次行うことも、あるいは並行して行うことも、あるいは順次演算と並行演算のある組合せとして行うこともできる。
ステップ１４２０で、ＤＥＳＴレジスタに結果が記憶される。
パック・データ乗算−加減算回路
一実施形態では、アンパック・データに対する単一の乗算と同じ数のクロック・サイクルで複数のデータ要素に対して乗算−加算命令および乗算−減算命令をそれぞれ行うことができる。同じ数のクロック・サイクルでこれらの命令を実行するために並行処理が使用される。すなわち、各レジスタは、データ要素に対して乗算−加算演算または乗算−減算演算を実行するよう同時に命令される。このことについて下記で詳しく説明する。
第１５図は、本発明の一実施形態によってパック・データに対して乗算−加算演算または乗算−減算演算あるいはその両方を実行する回路を示す。演算制御装置１５００は、乗算−加算命令および乗算−減算命令に関する制御信号を処理する。演算制御装置１５００はイネーブル線１５８０上で、パック乗算−加減算器１５０１を制御する信号を出力する。
パック乗算−加減算器１５０１は、ソース１［６３：０］１５３１、ソース２［６３：０］１５３３、イネーブル１５８０の各入力を有する。パック乗算−加減算器１５０１は、１６×１６マルチプライヤＡ１５１０、１６×１６マルチプライヤＢ１５１１、１６×１６マルチプライヤＣ１５１２、１６×１６マルチプライヤＤ１５１３の４つの１６×１６マルチプライヤ回路を含む。１６×１６マルチプライヤＡ１５１０は入力としてソース１［１５：０］とソース２［１５：０］とを有する。１６×１６マルチプライヤＢ１５１１は入力としてソース１［３１：１６］とソース２［３１：１６］とを有する。１６×１６マルチプライヤＣ１５１２は入力としてソース１［４７：３２］とソース２［４７：３２］とを有する。１６×１６マルチプライヤＤ１５１３は入力としてソース１［６３：４８］とソース２［６３：４８］とを有する。１６×１６マルチプライヤＡ１５１０および１６×１６マルチプライヤＢ１５１１が生成した３２ビット中間結果は仮想加減算器１５５０によって受け取られ、それに対して１６×１６マルチプライヤＣ１５１２および１６×１６マルチプライヤＤ１５１３が生成した３２ビット中間結果は仮想加減算器１５５１によって受け取られる。
現在の命令が乗算−加算命令であるか、それとも乗算−減算命令であるかに基づいて、仮想加減算器１５５０および仮想加減算器１５５１はそれぞれの３２ビット入力を加算または減算する。仮想加減算器１５５０の出力（すなわち、結果のビット３１ないしビット０）と仮想加減算器１５５１の出力（すなわち、結果のビット６３ないしビット３２）は６４ビット結果として組み合わされ、結果レジスタ１５７１へ伝達される。
一実施形態では、仮想加減算器１５５１および仮想加減算器１５５０は仮想加減算器１１０８ｂおよび仮想加減算器１１０８ａと同様に実施される（すなわち、仮想加減算器１５５１および仮想加減算器１５５０はそれぞれ、適切な伝搬遅延を含む４つの８ビット加算器で構成される）。しかし、代替実施形態では、仮想加減算器１５５１および仮想加減算器１５５０を任意の数の方法で実施することができる。
アンパック・データを処理する従来技術のプロセッサ上でこれらの乗算−加算命令または乗算−減算命令の等価物を実行するには、４回の別々の６４ビット乗算および２回の６４ビット加算または減算と、必要なロード演算およびストア演算が必要である。この場合、ソース１およびソース２のビット１６より上位のビットと結果のビット３２より上位のビットに使用されるデータ線および回路が無駄になる。同様に、そのような従来技術のプロセッサによって生成される６４ビット結果全体がプログラマにとって有用ではないこともある。したがって、プログラマは各結果を打ち切る必要がある。
前述の乗算−加算演算を命令セットに含めることの利点
前述の乗算−加減算命令はいくつかの目的に使用することができる。たとえば、乗算−加算命令は、複素数の乗算と値の乗算および累算に使用することができる。乗算−加算命令を使用するいくつかのアルゴリズムについては下記で説明する。
したがって、プロセッサ１０９によってサポートされる命令セットに前述の乗算−加算命令または乗算−減算命令あるいはその両方を含めることによって、これらの命令を有さない従来技術の汎用プロセッサより少ない命令で多数の機能を実行することができる。
パック・シフト
パック・シフト演算
本発明の一実施形態では、ＳＲＣ１レジスタはシフトすべきデータ（ソース１）を含み、ＳＲＣ２レジスタは、シフト・カウントを表すデータ（ソース２）を含み、ＤＥＳＴレジスタはシフトの結果（結果）を含む。すなわち、ソース１の各データ要素は独立にシフト・カウントだけシフトされる。一実施形態では、ソース２は符号なし６４ビット・スカラとして解釈される。他の実施形態では、ソース２はパック・データであり、ソース１内の対応する各データ要素ごとのシフト・カウントを含む。
本発明の一実施形態では、演算シフトと論理シフトの両方がサポートされる。演算シフトは、各データ要素のビットを、指定された数だけシフトダウンし、各データ要素の上位ビットに符号ビットの初期値を充填する。シフト・カウントがパック・バイト・データに関して７より大きく、あるいはパック・ワード・データに関して１５より大きく、あるいはパック・ダブルワードに関して３１より大きい場合、各結果データ要素に符号ビットの初期値が充填される。論理シフトは、ビットをシフトアップまたはシフトダウンすることによって動作することができる。右シフト論理演算では、各データ要素の上位ビットに零が充填される。左シフト論理演算では、各データ要素の下位ビットに零が充填される。
本発明の一実施形態では、パック・バイトおよびバック・ワードに関して右シフト演算、右シフト論理演算、左シフト論理演算がサポートされる。本発明の他の実施形態では、パック・ダブルワードに関してもこれらの演算がサポートされる。
第１６図は、本発明の一実施形態によってパック・データに対してパック・シフト演算を実行する方法を示す流れ図である。
ステップ１６０１で、デコーダ２０２は、プロセッサ１０９が受け取った制御信号２０７を復号する。したがって、デコーダ２０２は、適切なシフト演算に関する命令コード、レジスタ２０９内のＳＲＣ１  ６０２アドレス、ＳＲＣ２  ６０３アドレス、ＤＥＳＴ６０５アドレス、パック・データ内のデータ要素の飽和／非飽和（必ずしもシフト演算に必要ではない）、符号付き／符号なし（これも必ずしも必要ではない）、長さを復号する。
ステップ１６０２で、デコーダ２０２は、ＳＲＣ１  ６０２アドレスおよびＳＲＣ２  ６０３アドレスが与えられた場合、内部バス１７０を介してレジスタ・ファイル１５０内のレジスタ２０９にアクセスする。レジスタ２０９はＳＲＣ１  ６０２レジスタ（ソース１）に記憶されているパック・データと、ＳＲＣ２  ６０３レジスタ（ソース２）に記憶されているスケーラ・シフト・カウントを実行装置１３０に与える。すなわち、レジスタ２０９は内部バス１７０を介して実行装置１３０にパック・データを伝達する。
ステップ１６０３で、デコーダ２０２は実行装置１３０が適切なパック・シフト演算を実行できるようにする。デコーダ２０２はさらに、内部バス１７０を介してデータ要素のサイズ、シフト演算のタイプ、（論理シフトの場合の）シフトの方向を伝達する。
ステップ１６１０で、データ要素のサイズによって、次にどのステップを実行するかが決定される。データ要素のサイズが８ビット（バイト・データ）である場合、実行装置１３０はステップ１６１２を実行する。しかし、パック・データ内のデータ要素のサイズが１６ビット（ワード・データ）である場合、実行装置１３０はステップ１６１４を実行する。一実施形態では、８ビット・データ要素サイズ・パック・シフトおよび１６ビット・データ要素サイズ・パック・シフトしかサポートされない。しかし、他の実施形態では、３２ビット・データ要素サイズもサポートされる。
データ要素のサイズが８ビットであると仮定すると、ステップ１６１２が実行される。ステップ１６１２で、下記のことが実行される。ソース１ビット７ないし０がシフト・カウントだけシフトされ（ソース２ビット６３ないし０）、結果ビット７ないし０が生成される。ソース１ビット１５ないし８がシフト・カウントだけシフトされ、結果ビット１５ないし８が生成される。ソース１ビット２３ないし１６がシフト・カウントだけシフトされ、結果ビット２３ないし１６が生成される。ソース１ビット３１ないし２４がシフト・カウントだけシフトされ、結果ビット３１ないし２４が生成される。ソース１ビット３９ないし３２がシフト・カウントだけシフトされ、結果ビット３９ないし３２が生成される。ソース１ビット４７ないし４０がシフト・カウントだけシフトされ、結果ビット４７ないし４０が生成される。ソース１ビット５５ないし４８がシフト・カウントだけシフトされ、結果ビット５５ないし４８が生成される。ソース１ビット６３ないし５６がシフト・カウントだけシフトされ、結果ビット６３ないし５６が生成される。
データ要素のサイズが１６ビットであると仮定すると、ステップ１６１４が実行される。ステップ１６１４で、下記のことが実行される。ソース１ビット１５ないし０がシフト・カウントだけシフトされ、結果ビット１５ないし０が生成される。ソース１ビット３１ないし１６がシフト・カウントだけシフトされ、結果ビット３１ないし１６が生成される。ソース１ビット４７ないし３２がシフト・カウントだけシフトされ、結果ビット４７ないし３２が生成される。ソース１ビット６３ないし４８がシフト・カウントだけシフトされ、結果ビット６３ないし４８が生成される。
一実施形態では、ステップ１６１２の各シフトが同時に実行される。しかし、他の実施形態では、これらのシフトが順次実行される。他の実施形態では、これらのシフトのうちのいくつかが同時に実行され、いくつかが順次実行される。この議論はステップ１６１４のシフトにも当てはまる。
ステップ１６２０で、結果がＤＥＳＴレジスタに記憶される。
表１９はバイト・パック右シフト演算のレジスタ内表現を示す。第１のビット行はソース１のパック・データ表現である。第２のビット行はソース２のデータ表現である。第３のビット行は結果の表現である。各データ要素ビットの下方の数はデータ要素番号である。たとえば、ソース１データ要素３は１０００００００2である。
0003711147.tif 000025
表２０は、パック・バイト・データに対するパック右シフト論理演算のレジスタ内表現を示す。
0003711147.tif 000026
表２１は、パック・バイト・データに対するパック左シフト論理演算のレジスタ内表現を示す。
0003711147.tif 000027
パック・データ・シフト回路
一実施形態では、非パック・データに対する単一のシフト演算と同じクロック・サイクル数で、複数のデータ要素に対してシフト演算が行われる。同じクロック・サイクル数で実行するために、並行処理が使用される。すなわち、各レジスタは、データ要素に対してシフト演算を実行するよう同時に命令される。これについて下記で詳しく論じる。
第１７図は、本発明の一実施形態によってパック・データの個別のバイトに対してパック・シフトを実行する回路を示す。第１７図は、修正バイト・スライス・シフト回路、すなわちバイト・スライス段i１７９９の使用法を示す。各バイト・スライスは、最上位データ要素バイト・スライスを除いて、シフト装置とビット制御回路とを含む。最上位データ要素バイト・スライスに必要なのはシフト装置だけである。
シフト装置i１７１１およびシフト装置i+1１７７１はそれぞれ、ソース１の８ビットをシフト・カウントだけシフトできるようにする。一実施形態では、各シフト装置は既知の８ビット・シフト回路と同様に動作する。各シフト装置はソース１入力と、ソース２入力と、制御入力と、次段信号と、前段信号と、結果出力とを有する。したがって、シフト装置i１７７１はソース１i１７３１入力と、ソース２［６３：０］１７３３入力と、制御i１７０１入力と、次段i１７１３信号と、前段i１７１２入力と、結果レジスタi１７５１に記憶されている結果とを有する。したがって、シフト装置i+1１７１１はソース１i+1１７３２入力と、ソース２［６３：０］１７３３入力と、制御i+1１７０２入力と、次段i+1１７７３信号と、前段i+1１７７２入力と、結果レジスタi+1１７５２に記憶されている結果とを有する。
ソース１入力は通常、ソース１の８ビット部分である。この８ビットは最小データ要素タイプ、すなわち１パック・バイト・データ要素を表す。ソース２入力はシフト・カウントを表す。一実施形態では、各シフト装置はソース２［６３：０］１７３３から同じシフト・カウントを受け取る。演算制御回路１７００は各シフト装置が必要なシフトを実行できるようにする制御信号を伝送する。制御信号はシフトのタイプ（演算／論理）およびシフトの方向から決定される。次段信号は、そのシフト装置のビット制御回路から受け取られる。シフト装置は、シフトの方向（左右）に応じて次段信号上の最上位ビット出力／入力をシフトする。同様に、各シフト装置は、シフトの方向（右左）に応じて前段信号上の最下位ビット出力／入力をシフトする。前段信号は、前段のビット制御装置から受け取られる。結果出力は、シフト装置が作用しているソース１の部分に対するシフト演算の結果を表す。
ビット制御回路i１７２０は、パック・データイネーブル回路i１７０６を介して演算制御回路１７００からイネーブルされる。ビット制御回路i１７２０は次段i１７１３および前段i+1１７７２を制御する。たとえば、シフト装置i１７１１はソース１の下位８ビットに責任を負い、シフト装置i+1１７７１はソース１の次の８ビットに責任を負う。パック・データに対するシフトを実行する場合、ビット制御回路i１７２０では、シフト装置i+1１７７１の下位ビットをシフト装置i１７１１の上位ビットへ移すことはできない。しかし、パック・ワードに対するシフトを実行する場合、ビット制御回路i１７２０によって、シフト装置i+1１７７１の最下位ビットをシフト装置i１７１１の最上位ビットへ移すことができる。
たとえば、表２２で、パック・データ右シフト演算が実行される。シフト装置i+1１７７１がデータ要素１に作用し、シフト装置i１７１１がデータ要素０に作用すると仮定する。シフト装置i+1１７７１はその最下位ビット出力をシフトアウトする。しかし、演算制御回路１７００はビット制御回路i１７２０に、前段i+1１７２１から受け取ったそのビットの次段i１７１３への伝搬を停止させる。その代わりに、シフト装置i１７１１は上位ビットに符号ビット、すなわちソース１［７］を充填する。
0003711147.tif 000028
しかし、パック・ワードシフト演算を実行する場合、シフト装置i+1１７７１の最下位ビットはシフト装置i１７１１の最上位ビットへ移される。表２３はこの結果を示している。この処理はパック・ダブルワード・シフトでも行うことができる。
0003711147.tif 000029
各シフト装置は任意選択で結果レジスタに結合される。結果レジスタは完全結果信号、すなわち結果［６３：０］１７６０をＤＥＳＴレジスタへ伝送できるようになるまでシフト演算の結果を一時的に記憶する。
完全６４ビット・パック・シフト回路では、８つのシフト装置および７つのビット制御装置が使用される。そのような回路を使用して６４ビット非パック・データに対するシフトを実行し、それによって、同じ回路を使用して非パック・シフト演算とパック・シフト演算を実行することもできる。
前述のシフト演算を命令セットに含めることの利点
前述のパック・シフト命令では、ソース１の各要素が、指示されたシフト・カウントだけシフトされる。この命令を命令セットに含めることによって、単一の命令を使用してパック・データの各要素をシフトすることができる。これに対して、そのような演算をサポートしない従来技術の汎用プロセッサは多数の命令を実行してソース１をアンパックし、各アンパック・データ要素を個別にシフトし、次いで、結果をさらにパック処理できるようにパック・データ・フォーマットにパックしなければならない。
移動演算
移動演算では、レジスタ２０９との間でデータが転送される。一実施形態では、ＳＲＣ２  ６０３は、ソース・データを含むアドレスであり、ＤＥＳＴ６０５は、データが転送されるアドレスである。この実施形態では、ＳＲＣ１  ６０２は使用されない。他の実施形態では、ＳＲＣ１  ６０２はＤＥＳＴ６０５に等しい。
移動演算の説明のために、レジスタとメモリ位置を区別する。レジスタはレジスタ・ファイル１５０内に存在するものであり、それに対してメモリはたとえば、キャッシュ１６０、メイン・メモリ１０４、ＲＯＭ１０６、データ記憶装置１０７でよい。
移動演算では、メモリからレジスタ２０９へ、レジスタ２０９からメモリへ、レジスタ２０９内のあるレジスタからレジスタ２０９内の第２のレジスタへデータを移動させることができる。一実施形態では、パック・データが、整数データを記憶するために使用されるレジスタとは異なるレジスタに記憶される。この実施形態では、移動演算で整数レジスタ２０１からレジスタ２０９にデータを移動することができる。たとえば、プロセッサ１０９では、パック・データをレジスタ２０９に記憶し、整数データを整数レジスタ２０１に記憶する場合、移動命令を使用してデータを整数レジスタ２０１からレジスタ２０９へ移動させることができ、逆もまた同様である。
一実施形態では、メモリ・アドレスを移動の対象として示すと、そのメモリ位置（下位バイトを含むメモリ位置）にある８バイト・データがレジスタ２０９内のレジスタにロードされ、あるいはそのレジスタから格納される。レジスタ２０９内のあるレジスタを指示すると、そのレジスタの内容がレジスタ２０９内の第２のレジスタへ移動され、あるいはそのレジスタからロードされる。整数レジスタ２０１の長さが６４ビットであり、整数レジスタを指定した場合、その整数レジスタ内の８バイト・データがレジスタ２０９内のあるレジスタにロードされ、あるいはそのレジスタから格納される。
一実施形態では、整数は３２ビットとして表される。レジスタ２０９から整数レジスタ２０１への移動演算を実行すると、パック・データの下位３２ビットのみが、指定された整数レジスタへ移動される。一実施形態では、上位３２ビットは零になる。同時に、整数レジスタ２０１からレジスタ２０９への移動を実行すると、レジスタ２０９内のレジスタの下位３２ビットのみがロードされる。一実施形態では、プロセッサ１０９はレジスタ２０９内のレジスタとメモリとの間の３２ビット移動演算をサポートする。他の実施形態では、パック・データの上位３２ビットに対して３２ビットのみの移動が実行される。
パック演算
本発明の一実施形態では、ＳＲＣ１  ６０２レジスタはデータ（ソース１）を含み、ＳＲＣ２  ６０３レジスタはデータ（ソース２）を含み、ＤＥＳＴ６０５レジスタは演算の結果データ（結果）を含む。すなわち、ソース１の各部とソース２の各部がパックされ結果が生成される。
一実施形態では、パック演算により、ソース・パック・ワード（またはダブルワード）の下位バイト（またはワード）を結果のバイト（またはワード）としてパックすることによって、パック・ワード（またはダブルワード）がパック・バイト（またはワード）に変換される。一実施形態では、パック演算でカド・パック・ワードをパック・ダブルワードに変換する。この演算は任意選択で、符号付きデータを用いて実行することができる。さらに、この演算は任意選択で、飽和を用いて実行することができる。代替実施形態では、各データ要素の上位部分に作用する追加パック演算が含められる。
第１８図は、本発明の一実施形態によってパック・データに対してパック演算を実行する方法を示す流れ図である。
ステップ１８０１で、デコーダ２０２は、プロセッサ１０９が受け取った制御信号２０７を復号する。したがって、デコーダ２０２は、適切なパック演算に関する命令コード、レジスタ２０９内のＳＲＣ１  ６０２アドレス、ＳＲＣ２  ６０３アドレス、ＤＥＳＴ６０５アドレス、パック・データ内のデータ要素の飽和／非飽和、符号付き／符号なし、長さを復号する。前述のように、ＳＲＣ１  ６０２（またはＳＲＣ２  ６０３）をＤＥＳＴ６０５とみなすことができる。
ステップ１８０２で、デコーダ２０２は、ＳＲＣ１  ６０２アドレスおよびＳＲＣ２  ６０３アドレスが与えられた場合、内部バス１７０を介してレジスタ・ファイル１５０内のレジスタ２０９にアクセスする。レジスタ２０９はＳＲＣ１  ６０２レジスタ（ソース１）に記憶されているパック・データと、ＳＲＣ２  ６０３レジスタ（ソース２）に記憶されているパック・データを実行装置１３０に与える。すなわち、レジスタ２０９は内部バス１７０を介して実行装置１３０にパック・データを伝達する。
ステップ１８０３で、デコーダ２０２は実行装置１３０が適切なパック演算を実行できるようにする。デコーダ２０２はさらに、内部バス１７０を介してソース１およびソース２内のデータ要素の飽和およびサイズを伝達する。飽和は任意選択で、結果データ要素内のデータの値を最大にするために使用される。ソース１またはソース２内のデータ要素の値が、結果のデータ要素が表すことのできる値の範囲よりも大きく、あるいは小さい場合の、対応する結果データ要素はその最高値またはまたは最低値に設定される。たとえば、ソース１およびソース２のワード・データ要素内の符号付き値が０ｘ８０（あるいはダブルワードの場合は０ｘ８０００）より小さい場合、結果バイト（またはワード）データ要素は０ｘ８０（あるいはダブルワードの場合は０ｘ８０００）にクランプされる。ソース１およびソース２のワード・データ要素内の符号付き値が０ｘ７Ｆ（あるいはダブルワードの場合は０ｘ７ＦＦＦ）より小さい場合、結果バイト（またはワード）データ要素は０ｘ７Ｆ（あるいはダブルワードの場合は０ｘ７ＦＦＦ）にクランプされる。
ステップ１８１０で、データ要素のサイズによって、次にどのステップを実行するかが決定される。データ要素のサイズが１６ビット（パック・ワード４０２データ）である場合、実行装置１３０はステップ１８１２を実行する。しかし、パック・データ内のデータ要素のサイズが３２ビット（パック・ダブルワード４０３データ）である場合、実行装置１３０はステップ１８１４を実行する。
ソース・データ要素のサイズが１６ビットであると仮定すると、ステップ１８１２が実行される。ステップ１８１２では下記のことが実行される。ソース１ビット７ないし０が結果ビット７ないし０になる。ソース１ビット２３ないし１６が結果ビット１５ないし８になる。ソース１ビット３９ないし３２が結果ビット２３ないし１６になる。ソース１ビット６３ないし５６が結果ビット３１ないし２４になる。ソース２ビット７ないし０が結果ビット３９ないし３２になる。ソース２ビット２３ないし１６が結果ビット４７ないし４０になる。ソース２ビット３９ないし３２が結果ビット５５ないし４８になる。ソース２ビット６３ないし５６が結果ビット３１ないし２４になる。飽和がセットされている場合、各ワードの上位ビットが試験され、結果データ要素をクランプすべきかどうかが判定される。
ソース・データ要素のサイズが３２ビットであると仮定すると、ステップ１８１４が実行される。ステップ１８１４では下記のことが実行される。ソース１ビット１５ないし０が結果ビット１５ないし０になる。ソース１ビット４７ないし３２が結果ビット３１ないし１６になる。ソース２ビット１５ないし０が結果ビット４７ないし３２になる。ソース２ビット４７ないし３２が結果ビット６３ないし４８になる。飽和がセットされている場合、各ダブルワードの上位ビットが試験され、結果データ要素をクランプすべきかどうかが判定される。
一実施形態では、ステップ１８１２のパッキングが同時に実行される。しかし、他の実施形態では、このパッキングが順次実行される。他の実施形態では、いくつかのパッキングが同時に実行され、いくつかのパッキングが順次実行される。この議論はステップ１８１４のパッキングにも当てはまる。
ステップ１８２０で、結果がＤＥＳＴ６０５レジスタに記憶される。
表２４はワード・パック演算のレジスタ内表現を示す。下付き文字付きのＨｓおよびＬｓはそれぞれ、ソース１およびソース２内の各１６ビット・データ要素の上位ビットおよび下位ビットを表す。たとえば、ＡLはソース１内のデータ要素Ａの下位８ビットを表す。
0003711147.tif 000030
表２５は、ダブルワード・パック演算のレジスタ内表現を示し、下付き文字付きのＨｓおよびＬｓはそれぞれ、ソース１およびソース２内の各３２ビット・データ要素の上位ビットおよび下位ビットを表す。
0003711147.tif 000031
パック回路
本発明の一実施形態では、パック演算を効率的に実行するために、並行処理が使用される。第１９ａ図および第１９ｂ図は、本発明の一実施形態によってパック・データに対してパック演算を実行する回路を示す。この回路は任意選択で、飽和を用いてパック演算を実行する。
第１９ａ図および第１９ｂ図は、演算制御回路１９００と、結果レジスタ１９５２と、結果レジスタ１９５３と、８つの１６ビット・８ビット試験飽和回路と、４つの３２ビット・１６ビット試験飽和回路とを含む。
演算制御回路１９００は、パック演算をイネーブルする情報をデコーダ２０２から受け取る。演算制御回路１９００は飽和値を使用して各試験飽和回路の飽和試験をイネーブルする。ソース・パック・データのサイズがワード・パック・データ５０３である場合、演算制御回路１９００によって出力イネーブル信号１９３１がセットされる。これによって結果レジスタ１９５２の出力がイネーブルされる。ソース・パック・データのサイズがダブルワード・パック・データ５０４である場合、演算制御回路１９００によって出力イネーブル信号１９３２がセットされる。これによって結果レジスタ１９５３の出力がイネーブルされる。
各試験飽和回路は選択的に飽和に関する試験を行うことができる。飽和に関する試験をディスエーブルした場合、各試験飽和回路は下位ビットを結果レジスタ内の対応する位置へ通過させるに過ぎない。飽和に関する試験をイネーブルした場合、各試験飽和回路は上位ビットを試験して、結果をクランプすべきかどうかを判定する。
試験飽和回路１９１０ないし試験飽和回路１９１７は１６ビット入力と８ビット出力とを有する。８ビット出力は、入力の下位８ビットであり、あるいは任意選択でクランプ値（０×８０、０×７Ｆ、または０×ＦＦ）である。試験飽和回路１９１０はソース１ビット１５ないし０を受け取り、結果レジスタ１９５２のビット７ないし０を出力する。試験飽和回路１９１１はソース１ビット３１ないし１６を受け取り、結果レジスタ１９５２のビット１５ないし８を出力する。試験飽和回路１９１２はソース１ビット４７ないし３２を受け取り、結果レジスタ１９５２のビット３２ないし１６を出力する。試験飽和回路１９１３はソース１ビット６３ないし４８を受け取り、結果レジスタ１９５２のビット３１ないし２４を出力する。試験飽和回路１９１４はソース２ビット１５ないし０を受け取り、結果レジスタ１９５２のビット３９ないし３２を出力する。試験飽和回路１９１５はソース２ビット３１ないし１６を受け取り、結果レジスタ１９５２のビット４７ないし４０を出力する。試験飽和回路１９１６はソース２ビット４７ないし３２を受け取り、結果レジスタ１９５２のビット５５ないし４８を出力する。試験飽和回路１９１７はソース２ビット６３ないし４８を受け取り、結果レジスタ１９５２のビット６３ないし５６を出力する。
試験飽和回路１９２０ないし試験飽和回路１９２３は３２ビット入力と１６ビット出力とを有する。１６ビット出力は、入力の下位１６ビットであり、あるいは任意選択でクランプ値（０×８０００、０×７ＦＦＦ、または０×ＦＦＦＦ）である。試験飽和回路１９２０はソース１ビット３１ないし０を受け取り、結果レジスタ１９５３のビット１５ないし０を出力する。試験飽和回路１９２１はソース１ビット６３ないし３２を受け取り、結果レジスタ１９５３のビット３１ないし１６を出力する。試験飽和回路１９２２はソース２ビット３１ないし０を受け取り、結果レジスタ１９５３のビット４７ないし３２を出力する。試験飽和回路１９２３はソース２ビット６３ないし３２を受け取り、結果レジスタ１９５３のビット６３ないし４８を出力する。
たとえば、表２６では、飽和しない符号なしパック・ワードが実行される。演算制御回路１９００は結果レジスタ１９５２が結果［６３：０］１９６０を出力できるようにする。
0003711147.tif 000032
しかし、飽和しない符号なしパック・ダブルワードを実行する場合、演算制御回路１９００は結果レジスタ１９５３が結果［６３：０］１９６０を出力できるようにする。
表２７はこの結果を示す。
0003711147.tif 000033
前述のパック演算を命令セットに含めることの利点
前述のパック命令では、ソース１およびソース２内の各データ要素から所定数のビットがパックされ、結果が生成される。このように、プロセッサ１０９は、従来技術の汎用プロセッサが必要とする命令の半分程度にデータをパックすることができる。たとえば、４つの１６ビット要素を含む結果を４つの３２ビットデータ要素から生成する場合、下記に示したように（２つの命令ではなく）１つの命令しか必要とされない。
0003711147.tif 000034
典型的なマルチメディア・アプリケーションは大量のデータをパックする。したがって、このデータをパックするのに必要な命令の数を２分の１程度削減することによって、マルチメディア・アプリケーションの性能が向上する。
アンパック演算
アンパック演算
一実施形態では、アンパック演算によって、２つのソース・パック・データの下位パック・バイト、ワード、またはダブルワードがインタリーブされ、結果パック・バイト、ワード、またはダブルワードが生成される。この演算を本明細書では下位アンパック演算と呼ぶ。他の実施形態では、アンパック演算は上位要素をインタリーブすることもできる（上位アンパック演算と呼ぶ）。
第２０図は、本発明の一実施形態によってパック・データに対するアンパック演算を実行する方法を示す流れ図である。
まずステップ２００１およびステップ２００２が実行される。ステップ２００３で、デコーダ２０２は実行装置１３０がアンパック演算を実行できるようにする。デコーダ２０２は内部バス１７０を介して、ソース１およびソース２内のデータ要素のサイズを伝達する。
ステップ２０１０で、データ要素のサイズによって、次にどのステップを実行すべきかが決定される。データ要素のサイズが８ビットである場合（パック・バイト４０１データ）、実行装置１３０はステップ２０１２を実行する。しかし、パック・データ内のデータ要素のサイズが１６ビットである場合（パック・ワード４０２データ）、実行装置１３０はステップ２０１４を実行する。しかし、パック・データ内のデータ要素のサイズが３２ビットである場合（パック・ダブルワード５０３データ）、実行装置１３０はステップ２０１６を実行する。
ソース・データ要素のサイズが８ビットであると仮定すると、ステップ２０１２が実行される。ステップ２０１２では下記のことが実行される。ソース１ビット７ないし０が結果ビット７ないし０になる。ソース２ビット７ないし０が結果ビット１５ないし８になる。ソース１ビット１５ないし８が結果ビット２３ないし１６になる。ソース２ビット１５ないし８が結果ビット３１ないし２４になる。ソース１ビット２３ないし１６が結果ビット３９ないし３２になる。ソース２ビット２３ないし１６が結果ビット４７ないし４０になる。ソース１ビット３１ないし２４が結果ビット５５ないし４８になる。ソース２ビット３１ないし２４が結果ビット６３ないし５６になる。
ソース・データ要素のサイズが１６ビットであると仮定すると、ステップ２０１４が実行される。ステップ２０１４では下記のことが実行される。ソース１ビット１５ないし０が結果ビット１５ないし０になる。ソース２ビット１５ないし０が結果ビット３１ないし１６になる。ソース１ビット３１ないし１６が結果ビット４７ないし３２になる。ソース２ビット３１ないし１６が結果ビット６３ないし４８になる。
ソース・データ要素のサイズが３２ビットであると仮定すると、ステップ２０１６が実行される。ステップ２０１６では下記のことが実行される。ソース１ビット３１ないし０が結果ビット３１ないし０になる。ソース２ビット３１ないし０が結果ビット６３ないし３２になる。
一実施形態では、ステップ２０１２のアンパッキングが同時に実行される。しかし、他の実施形態では、このアンパッキングが順次実行される。他の実施形態では、いくつかのアンパッキングが同時に実行され、いくつかのアンパッキングが順次実行される。この議論はステップ２０１４およびステップ２０１６のアンパッキングにも当てはまる。
ステップ２０２０で、結果がＤＥＳＴ６０５レジスタに記憶される。
表２９はダブルワード・アンパック演算のレジスタ内表現を示す（データ要素Ａ０ないし１およびＢ０ないし１はそれぞれ３２ビットを含む。
0003711147.tif 000035
表３０は、ワード・アンパック演算のレジスタ内表現を示す（データ要素Ａ０ないし３およびＢ０ないし３はそれぞれ１６ビットを含む）。
0003711147.tif 000036
表３１は、バイト・アンパック演算のレジスタ内表現を示す（データ要素Ａ０ないし７およびＢ０ないし７はそれぞれ８ビットを含む）。
0003711147.tif 000037
アンパック回路
第２１図は、本発明の一実施形態によってパック・データに対してアンパック演算を実行する回路を示す。第２１図のこの回路は、演算制御回路２１００と、結果レジスタ２１５２と、結果レジスタ２１５３と、結果レジスタ２１５４とを含む。
演算制御回路２１００は、アンパック演算をイネーブルする情報をデコーダ３０２から受け取る。ソース・パック・データのサイズがバイト・パック・データ５０２である場合、演算制御回路２１００によって出力イネーブル信号２１３２がセットされる。これによって結果レジスタ２１５２の出力がイネーブルされる。ソース・パック・データのサイズがワード・パック・データ５０３である場合、演算制御回路２１００によって出力イネーブル信号２１３３がセットされる。これによって結果レジスタ２１５３の出力がイネーブルされる。ソース・パック・データのサイズがダブルワード・パック・データ５０４である場合、演算制御回路２１００によって出力イネーブル信号２１３４がセットされる。これによって結果レジスタ２１５４の出力がイネーブルされる。
結果レジスタ２１５２は下記の入力を有する。ソース１ビット７ないし０は結果レジスタ２１５２のビット７ないし０である。ソース２ビット７ないし０は結果レジスタ２１５２のビット１５ないし８である。ソース１ビット１５ないし８は結果レジスタ２１５２のビット２３ないし１６である。ソース２ビット１５ないし８は結果レジスタ２１５２のビット３１ないし２４である。ソース１ビット２３ないし１６は結果レジスタ２１５２のビット３９ないし３２である。ソース２ビット２３ないし１６は結果レジスタ２１５２のビット４７ないし４０である。ソース１ビット３１ないし２４は結果レジスタ２１５２のビット５５ないし４８である。ソース２ビット３１ないし２４は結果レジスタ２１５２のビット６３ないし５６である。
結果レジスタ２１５３は下記の入力を有する。ソース１ビット１５ないし０は結果レジスタ２１５３のビット１５ないし０である。ソース２ビット１５ないし０は結果レジスタ２１５３のビット３１ないし１６である。ソース１ビット３１ないし１６は結果レジスタ２１５３のビット４７ないし３２である。ソース２ビット３１ないし１６は結果レジスタ１９５３のビット６３ないし４８である。
結果レジスタ２１５４は下記の入力を有する。ソース１ビット３１ないし０は結果レジスタ２１５４のビット３１ないし０である。ソース２ビット３１ないし０は結果レジスタ２１５４のビット６３ないし３２である。
たとえば、表３２では、ワード・アンパック演算が実行される。演算制御回路２１００は結果レジスタ２１５３が結果［６３：０］２１６０を出力できるようにする。
0003711147.tif 000038
しかし、ダブルワード・アンパック演算を実行する場合、演算制御回路２１００は結果レジスタ２１５４が結果［６３：０］２１６０を出力できるようにする。
表３３はこの結果を示す。
0003711147.tif 000039
前述のアンパック命令を命令セットに含めることの利点
前述のアンパック命令を命令セットに含めることによって、パック・データをインタリーブまたはアンパックすることができる。このアンパック命令を使用し、ソース２内のすべてのデータ要素をすべて零にすることによってパック・データをアンパックすることができる。バイトのアンパックの例を下記の表３４ａに示す。
0003711147.tif 000040
この同じアンパック命令を使用して、表３４ｂに示したようにデータをインタリーブすることができる。インタリーブは、いくつかのマルチメディア・アルゴリズムで有用である。たとえば、インタリーブは行列を交差させ画素を補間する場合に有用である。
0003711147.tif 000041
したがって、プロセッサ１０９によってサポートされる命令セットにこのアンパック命令を与えることによって、プロセッサ１０９はより融通が利くようになり、この機能を必要とするアルゴリズムをより高い性能レベルで実行することができる。
ポピュレーション・カウント
ポピュレーション・カウント
本発明の一実施形態では、パック・データに対してポピュレーション・カウント演算を実行することができる。すなわち、本発明は第１のパック・データの各データ要素ごとに結果データ要素を生成する。各結果データ要素は、第１のパック・データの対応する各データ要素内にセットされたビットの数を表す。一実施形態では、１にセットされたビットの総数がカウントされる。
表３５ａは、パック・データに対するポピュレーション・カウント演算のレジスタ内表現を示す。第１のビット行はソース１パック・データのパック・データ表現である。第２のビット行は結果パック・データのパック・データ表現である。各データ要素ビットの下方の数はデータ要素番号である。たとえば、ソース１データ要素０は１０００１１１１１０００１０００2である。したがって、データ要素の長さが１６ビットであり（ワード・データ）、ポピュレーション・カウント演算を実行する場合、実行装置１３０は表のように結果パック・データを生成する。
0003711147.tif 000042
他の実施形態では、８ビット・データ要素に対してポピュレーション・カウントが実行される。表３５ｂは、８つの８ビット・パック・データ要素を有するパック・データに対するポピュレーション・カウントのレジスタ内表現を示す。
0003711147.tif 000043
他の実施形態では、３２ビット・データ要素に対してポピュレーション・カウントが実行される。表３５ｃは、２つの３２ビット・パック・データ要素を有するパック・データに対するポピュレーション・カウントのレジスタ内表現を示す。
0003711147.tif 000044
ポピュレーション・カウントは６４ビット整数データにも実行される。すなわち、６４ビット・データにおける、１にセットされたビットの数が合計される。表３５ｄは、６４ビット整数データに対するポピュレーション・カウントのレジスタ内表現を示す。
0003711147.tif 000045
ポピュレーション・カウントを実行する方法
第２２図は、本発明の一実施形態によってパック・データに対してポピュレーション・カウントを実行する方法を示す流れ図である。ステップ２２０１で、デコーダ２０２が、制御信号２０７を受け取ったことに応答して、その制御信号２０７を復号する。一実施形態では、制御信号２０７はバス１０１を介して供給される。別の実施態様では、制御信号２０７はキャッシュ１６０から供給される。したがって、デコーダ２０２はポピュレーション・カウントに関する命令コードと、レジスタ２０９内のＳＲＣ１  ６０２アドレスおよびＤＥＳＴ６０５を復号する。本発明のこの実施形態ではＳＲＣ２  ６０３が使用されないことに留意されたい。同様に、この実施形態では、データ要素の飽和／非飽和、符号付き／符号なし、長さも使用されない。本発明のこの実施形態では、１６ビット・データ要素長パック加算しかサポートされない。しかし、当業者には、８つのパック・バイト・データ要素または２つのパック・ダブルワード・データ要素を有するパック・データに対してポピュレーション・カウントを実行できることが理解されよう。
ステップ２２０２で、ＳＲＣ１  ６０２が与えられた場合、内部バス１７０を介してデコーダ２０２はレジスタ・ファイル１５０内のレジスタ２０９にアクセスする。レジスタ２０９は、レジスタのこのアドレスに記憶されているパック・データ、すなわちソース１を実行装置１３０に与える。すなわち、レジスタ２０９は内部バス１７０を介して実行装置１３０にパック・データを伝達する。
ステップ２１３０で、デコーダ２０２は実行装置１３０がポピュレーション・カウント演算を実行できるようにする。代替実施形態では、デコーダ２０２はさらに、内部バス１７０を介してパック・データ要素の長さを伝達する。
ステップ２２０５で、データ要素の長さが１６ビットであると仮定すると、実行装置１３０はソース１のビット１５ないしビット０のうちの、セットされているビットの数を合計し、結果パック・データのビット１５ないしビット０を生成する。実行装置１３０は、この合計と並行して、ソース１のビット３１ないしビット１６を合計し、結果パック・データのビット３１ないしビット１６を生成する。実行装置１３０は、この合計と並行して、ソース１のビット４７ないしビット３２を合計し、結果パック・データのビット４７ないしビット３２を生成する。実行装置１３０は、この合計と並行して、ソース１のビット６３ないしビット４８を合計し、結果パック・データのビット６３ないしビット４８を生成する。
ステップ２２０６で、デコーダ２０２は、宛先レジスタのＤＥＳＴ６０５アドレスを有するレジスタ２０９内のレジスタをイネーブルする。したがって、結果パック・データは、ＤＥＳＴ６０５によってアドレス指定されたレジスタに記憶される。
１つのデータ要素に対してポピュレーション・カウントを実行する方法
第２３図は、パック・データの１つのデータ要素に対してポピュレーション・カウント演算を実行し、本発明の一実施形態によって結果パック・データの単一の結果データ要素を生成する方法を示す流れ図である。ステップ２３１０ａで、ソース１ビット１５、１４、１３、１２から列和ＣＳｕｍｌａおよび列桁上げＣＣａｒｒｙ１ａが生成される。ステップ２３１０ｂで、ソース１ビット１１、１０、９、８から列和ＣＳｕｍｌｂおよび列桁上げＣＣａｒｒｙ１ｂが生成される。ステップ２３１０ｃで、ソース１ビット７、６、５、４から列和ＣＳｕｍｌｃおよび列桁上げＣＣａｒｒｙ１ｃが生成される。ステップ２３１０ｄで、ソース１ビット３、２、１、０から列和ＣＳｕｍｌｄおよび列桁上げＣＣａｒｒｙ１ｄが生成される。本発明の一実施形態ではステップ２３１０ａないしｄは並行して実行される。ステップ２３２０ａで、ＣＳｕｍ１ａ、ＣＣａｒｒｙ１ａ、ＣＳｕｍ１ｂ、ＣＣａｒｒｙ１ｂから列和ＣＳｕｍ２ａおよび列桁上げＣＣａｒｒｙ２ｂが生成される。ステップ２３２０ｂで、ＣＳｕｍ１ｃ、ＣＣａｒｒｙ１、ＣＳｕｍ１ｄ、ＣＣａｒｒｙ１ｄから列和ＣＳｕｍ２ｂおよび列桁上げＣＣａｒｒｙ２ｂが生成される。一実施形態では、ステップ２３２０ａないしｂは並行して実行される。ステップ２３３０で、ＣＳｕｍ２ａ、ＣＣａｒｒｙ２ａ、ＣＳｕｍ２ｂ、ＣＣａｒｒｙ２ｂから列和ＣＳｕｍ３および列桁上げＣＣａｒｒｙ３が生成される。ステップ２３４０で、ＣＳｕｍ３およびＣＣａｒｒｙ３から結果が生成される。一実施形態では、結果は１６ビットで表される。この実施形態では、ソース１内のセットされているビットの最大数を表すのにビット４ないしビット０しか必要ないので、ビット１５ないし５は零にセットされる。ソース１の最大ビット数は１６である。これは、ソース１が１１１１１１１１１１１１１１１１2に等しいときに生じる。この結果は１６であり、０００００００００００１００００2で表される。
したがって、６４ビット・パック・データに対するポピュレーション・カウント演算の４つの結果データ要素を算出するために、パック・データ内の各データ要素ごとに第２３図のステップが実行される。一実施形態では、４つの１６ビット結果データ要素が並行して計算される。
ポピュレーション・カウントを実行する回路
第２４図は、本発明の一実施形態によって４つのワード・データ要素を有するパック・データに対してポピュレーション・カウント演算を実行する回路を示す。第２５図は、本発明の一実施形態によってパック・データの１つのワード・データ要素に対してポピュレーション・カウント演算を実行する詳細な回路を示す。
第２４図は、ソース１バス２４０１がソース１IN２４０６ａないしｄを介してｐｏｐｃｎｔ回路２４０８ａないしｄへ信号を搬送する回路を示す。したがって、ｐｏｐｃｎｔ回路２４０８ａはソース１のビット１５ないしビット０のうちのセットされているビットの数を合計し、結果のビット１５ないしビット０を生成する。ｐｏｐｃｎｔ回路２４０８ｂはソース１のビット３１ないしビット１６のうちセットされているビットの数を合計し、結果のビット３１ないしビット１６を生成する。ｐｏｐｃｎｔ回路２４０８ｃはソースの１ビット４７ないしビット３２のうちのセットされているビットの数を合計し、結果のビット４７ないしビット３２を生成する。ｐｏｐｃｎｔ回路２４０８ｄはソース１のビット６３ないしビット４９のうちのセットされているビットの数を合計し、結果のビット６３ないしビット４８を生成する。イネーブル入力２４０４ａないしｄは、ｐｏｐｃｎｔ回路２４０８ａないしｄがポピュレーション・カウント演算を実行し、結果を結果バス２４０９上に置くことができるようにする制御信号を制御回路２４０３を介して演算制御回路２４１０から受け取る。当業者なら、上記の説明および第１図ないし第６ｂ図および第２３図ないし第２５図の例示が与えられれば、そのような回路を製作することができる。
ｐｏｐｃｎｔ回路２４０８ａないしｄはパック・ポピュレーション・カウント演算の結果情報を結果出力２４０７ａないしｄを介して結果バス２４０９上に伝達する。この結果情報は次いで、ＤＥＳＴ６０５レジスタ・アドレスで指定された整数レジスタに記憶される。
１つのデータ要素に対してポピュレーション・カウントを実行する回路
第２５図は、パック・データ要素の１つのワード・データ要素に対してポピュレーション・カウント演算を実行する詳細な回路を示す。特に、第２５図はｐｏｐｃｎｔ回路２４０８ａの一部を示す。ポピュレーション・カウント演算を使用するアプリケーションの最大性能を達成するには、演算を１クロック・サイクル内に完了すべきである。したがって、レジスタにアクセスし結果を記憶するのに１クロック・サイクルのうちのある割合が必要である場合、第２４図の回路は１クロック周期の約８０％内に演算を完了する。この回路は、プロセッサ１０９が４つの１６ビット・データ要素に対するポピュレーション・カウント演算を１クロック・サイクルで実行できるようにするという利点を有する。
ｐｏｐｃｎｔ回路２４０８ａは４−＞２桁上げ−保存加算器（特に明示しないかぎり、ＣＳＡは４−＞２桁上げ−保存加算器を指す）を使用する。４−＞２桁上げ−保存加算器は、ｐｏｐｃｎｔ回路２４０８ａないしｄで使用することができ、当技術分野で良く知られている。４−＞２桁上げ−保存加算器とは、４つのオペランドを加算し２つの和を得る加算器である。ｐｏｐｃｎｔ回路２４０８ａでのポピュレーション・カウント演算では１６ビットが使用されるので、第１のレベルには４つの４−＞２桁上げ−保存加算器が含まれる。この４つの４−＞２桁上げ−保存加算器は１６個の１ビット・オペランドを８つの２ビット和に変換する。第２のレベルは４つの３ビット和を２つの４ビット和に変換する。次いで、４ビット全加算器が２つの４ビット和を加算し最終結果を生成する。
４−＞２桁上げ−保存加算器が使用されるが、代替実施形態では３−＞２桁上げ−保存加算器を使用することができる。別法として、いくつかの全加算器を使用することができる。しかし、この構成は、第２５図に示した実施形態ほど迅速に結果を与えるわけではない。
ソース１IN15-0 24０６ａはソース１のビット１５ないしビット０を桁上げする。最初の４ビットは４−＞２桁上げ−保存加算器（ＣＳＡ２５１０ａ）の入力に結合される。次の４ビットはＣＳＡ２５１０ｂに結合される。次の４ビットはＣＳＡ２５１０ｃに結合される。最後の４ビットはＣＳＡ２５１０ｄの入力に結合される。各ＣＳＡ２５１０ａないしｄは２つの２ビット出力を生成する。ＣＳＡ２５１０ａの２つの２ビット出力はＣＳＡ２５２０ａの２つの入力に結合される。ＣＳＡ２５１０ｂの２つの２ビット出力はＣＳＡ２５２０ａの他の２つの入力に結合される。ＣＳＡ２５１０ｃの２つの２ビット出力はＣＳＡ２５２０ｂの２つの入力に結合される。ＣＳＡ２５１０ｄの２つの２ビット出力はＣＳＡ２５２０ｂの他の２つの入力に結合される。各ＣＳＡ２５２０ａないしｂは２つの３ビット出力を生成する。２５２０ａの２つの３ビット出力はＣＳＡ２５３０の２つの入力に結合される。２５２０ｂの２つの３ビット出力はＣＳＡ２５３０の他の２つの入力に結合される。ＣＳＡ２５３０は２つの４ビット出力を生成する。
この２つの４ビット出力は全加算器（ＦＡ２５５０）の２つの入力に結合される。ＦＡ２５５０は２つの４ビット入力を加算し、結果出力２４０７ａのビット３ないしビット０を２つの４ビット入力の加算結果として伝達する。ＦＡ２５５０は桁上げ（ＣＯ２５５２）を通じて結果出力２４０７ａのビット４を生成する。代替実施形態では、５ビット全加算器を使用して結果出力２４０７ａのビット４ないしビット０が生成される。いずれの場合も、結果出力２４０７ａのビット１５ないしビット５は零に結合される。同様に、全加算器への桁上げ入力も零に結合される。
第２５図には示していないが、当業者なら、結果出力２４０７ａを結果バス２４０９上に多重化またはバッファできることが理解されよう。マルチプレクサはイネーブル入力２４０４ａによって制御される。これによって、他の実行装置回路は結果バス２４０９にデータを書き込むことができる。
前述のポピュレーション・カウント演算を命令セットに含めることの利点
前述のポピュレーション・カウント命令は、ソース１などのパック・データの各データ要素内のセットされているビットの数を算出する。したがって、この命令を命令セットに含めることによって、単一の命令でパック・データに対してポピュレーション・カウント演算を実行することができる。これに対して、従来技術の汎用プロセッサは、多数の命令を実行してソース１をアンパックし、各アンパック・データ要素に対して個別に関数を実行し、次いで結果をさらにパック処理できるようにパックしなければならない。
したがって、プロセッサ１０９によってサポートされる命令セットにこのポピュレーション・カウント命令を与えることによって、この機能を必要とするアルゴリズムの性能が向上する。
論理演算
論理演算
本発明の一実施形態では、ＳＲＣ１レジスタはパック・データ（ソース１）を含み、ＳＲＣ２レジスタはパック・データ（ソース２）を含み、ＤＥＳＴレジスタは、選択された論理演算をソース１およびソース２に対して実行した結果（結果）を含む。たとえば、論理ＡＮＤ演算が選択された場合、ソース１がソース２と論理ＡＮＤされる。
本発明の一実施形態では、論理ＡＮＤ、論理ＡＮＤＮ、論理ＯＲ、論理ＸＯＲの各論理演算がサポートされる。論理ＡＮＤ演算、論理ＯＲ演算、論理ＸＯＲ演算は当技術分野で良く知られている。論理ＡＮＤＮ演算では、ソース２がソース１の論理逆数とＡＮＤされる。これらの論理演算に関連して本発明を説明するが、代替実施形態では他の論理演算を実施することができる。
第２６図は、本発明の一実施形態によってパック・データに対していくつかの論理演算を実行する方法を示す流れ図である。
ステップ２６０１で、デコーダ２０２は、プロセッサ１０９が受け取った制御信号２０７を復号する。したがって、デコーダ２０２は適切な論理演算（すなわち、ＡＮＤ、ＡＮＤＮ、ＯＲ、またはＸＯＲ）に関する命令コードと、レジスタ２０９内のＳＲＣ１  ６０２アドレス、ＳＲＣ２  ６０３アドレス、ＤＥＳＴ６０５アドレスを復号する。
ステップ２６０２で、ＳＲＣ１  ６０２アドレスおよびＳＲＣ２  ６０３アドレスが与えられた場合、デコーダ２０２は内部バス１７０を介してレジスタ・ファイル１５０内のレジスタ２０９にアクセスする。レジスタ２０９は、ＳＲＣ１  ６０２レジスタに記憶されているパック・データ（ソース１）およびＳＲＣ２  ６０３に記憶されているパック・データ（ソース２）を実行装置１３０に与える。すなわち、レジスタ２０９は内部バス１７０を介して実行装置１３０にパック・データを伝達する。
ステップ２６０３で、デコーダ２０２は、実行装置１３０が、選択された１つのパック論理演算を実行できるようにする。
ステップ２６１０で、選択された１つのパック論理演算によって、次にどのステップを実行すべきかが決定される。実行装置１３０は、論理ＡＮＤ演算が選択された場合にはステップ２６１２を実行する。実行装置１３０は、論理ＡＮＤＮ演算が選択された場合にはステップ２６１３を実行する。実行装置１３０は、論理ＯＲ演算が選択された場合にはステップ２６１４を実行する。実行装置１３０は、論理ＸＯＲ演算が選択された場合にはステップ２６１５を実行する。
論理ＡＮＤ演算が選択されたと仮定すると、ステップ２６１２が実行される。ステップ２６１２で、ソース１ビット６３ないし０がソース２ビット６３ないし０とＡＮＤされ、結果ビット６３ないし０が生成される。
論理ＡＮＤＮ演算が選択されたと仮定すると、ステップ２６１３が実行される。ステップ２６１３で、ソース１ビット６３ないし０がソース２ビット６３ないし０とＡＮＤＮされ、結果ビット６３ないし０が生成される。
論理ＯＲ演算が選択されたと仮定すると、ステップ２６１４が実行される。ステップ２６１４で、ソース１ビット６３ないし０がソース２ビット６３ないし０とＯＲされ、結果ビット６３ないし０が生成される。
論理ＸＯＲ演算が選択されたと仮定すると、ステップ２６１５が実行される。ステップ２６１５で、ソース１ビット６３ないし０がソース２ビット６３ないし０とＸＯＲされ、結果ビット６３ないし０が生成される。
ステップ２６２０で、結果がＤＥＳＴレジスタに記憶される。
表３６は、パック・データに対する論理ＡＮＤＮ演算のレジスタ内表現を示す。第１のビット行はソース１のパック・データ表現である。表２のビット行はソース２のパック・データ表現である。第３のビット行は結果のパック・データ表現である。各データ要素の下方の数はデータ要素番号である。たとえば、ソース１データ要素は１１１１１１１１００００００００2である。
0003711147.tif 000046
ソース１およびソース２内の対応するデータ要素に対して同じ論理演算を実行することに関連して本発明を説明しているが、代替実施形態では、対応するデータ要素に対して実行される論理演算を要素ごとに選択できるようにする命令をサポートすることができる。
パック・データ論理回路
一実施形態では、アンパック・データに対する単一の論理演算と同じクロック・サイクル数で複数のデータ要素に対して前述の論理演算を行うことができる。同じクロック・サイクル数で実行するために、並行処理が使用される。
第２７図は、本発明の一実施形態によってパック・データに対して論理演算を実行する回路を示す。演算制御回路２７００は、論理演算を実行する回路を制御する。演算制御回路２７００は制御信号を処理し、制御線２７８０上で選択信号を出力する。このような選択信号は、ＡＮＤ演算、ＡＮＤＮ演算、ＯＲ演算、ＸＯＲ演算のうちの選択された演算を論理演算回路２７０１に伝達する。
論理演算回路２７０１はソース１［６３：０］およびソース２［６３：０］を受け取り、選択信号によって指示された論理演算を実行し結果を生成する。論理演算回路２７０１は結果レジスタ２７３１に結果［６３：０］を伝達する。
前述の論理演算を命令セットに含めることの利点
前述の論理命令は論理ＡＮＤ、論理ＡＮＤ  ＮＯＴ、論理ＯＲ、論理ＯＲ  ＮＯＴを実行する。これらの命令は、データの論理処理を必要とするアプリケーションで有用である。プロセッサ１０９によってサポートされる命令セットにこれらの命令を含めることによって、１つの命令でパック・データに対してこれらの演算を実行することができる。
パック比較
パック比較演算
本発明の一実施形態では、ＳＲＣ１  ６０２レジスタは、比較される一方のデータ（ソース１）を含み、ＳＲＣ２  ６０３レジスタは、比較される他方のデータ（ソース２を含み、ＤＥＳＴ６０５は比較の結果（結果）を含む。すなわち、ソース１の各データ要素は、指示された関係に従って、ソース２の各データ要素と独立に比較される。
本発明の一実施形態では、「等しい」、「符号付きより大）」、「符号付き以上）」、「符号なしより大」、「符号なし以下」の各比較関係がサポートされる。この関係は、各対応データ要素対において試験される。たとえば、ソース１［７：０］はソース２［７：０］より大きく、結果は結果［７：０］になる。比較の結果がこの関係を満たす場合、一実施形態では、結果内の対応するデータ要素がすべて１にセットされる。比較の結果がこの関係を満たさない場合、結果内の対応するデータ要素はすべて零にセットされる。
第２８図は、本発明の一実施形態によってパック・データに対してパック比較演算を実行する方法を示す流れ図である。
ステップ２８０１で、デコーダ２０２は、プロセッサ１０９が受け取った制御信号２０７を復号する。したがって、デコーダ２０２は適切な比較演算に関する命令コードと、レジスタ２０９内のＳＲＣ１  ６０２アドレス、ＳＲＣ２  ６０３アドレス、ＤＥＳＴ６０５アドレスと、パック・データ内のデータ要素の飽和／非飽和（必ずしも比較演算には必要ではない）、符号付き／符号なし、長さを復号する。前述のように、ＳＲＣ１  ６０２（またはＳＲＣ２  ６０３）をＤＥＳＴ６０５として使用することができる。
ステップ２８０２で、ＳＲＣ１  ６０２アドレスおよびＳＲＣ２  ６０３アドレスが与えられた場合、デコーダ２０２は内部バス１７０を介してレジスタ・ファイル１５０内のレジスタ２０９にアクセスする。レジスタ２０９は、ＳＲＣ１  ６０２レジスタに記憶されているパック・データ（ソース１）およびＳＲＣ２  ６０３に記憶されているパック・データ（ソース２）を実行装置１３０に与える。すなわち、レジスタ２０９は内部バス１７０を介して実行装置１３０にパック・データを伝達する。
ステップ２８０３で、デコーダ２０２は、実行装置１３０が適切なパック比較演算を実行できるようにする。デコーダ２０２はさらに、データ要素のサイズおよび比較演算に関する関係を内部バス１７０を介して伝達する。
ステップ２８１０で、データ要素のサイズによって、次にどのステップを実行すべきかが決定される。データ要素のサイズが８ビットである場合（パック・バイト４０１データ）、実行装置１３０はステップ２８１２を実行する。しかし、パック・データ内のデータ要素のサイズが１６ビットである場合（パック・ワード４０２データ）、実行装置１３０はステップ２８１４を実行する。一実施形態では、８ビット・データ要素サイズ・パック比較および１６ビット・データ要素サイズ・パック比較しかサポートされない。しかし、他の実施形態では３２ビット・データ要素サイズ・パック演算もサポートされる（パック・ダブルワード４０３）。
データ要素のサイズが８ビットであると仮定すると、ステップ２８１２が実行される。ステップ２８１２で、下記のことが実行される。ソース１ビット７ないし０がソース２ビット７ないし０と比較され、結果ビット７ないし０が生成される。ソース１ビット１５ないし８がソース２ビット１５ないし８と比較され、結果ビット１５ないし８が生成される。ソース１ビット２３ないし１６がソース２ビット２３ないし１６と比較され、結果ビット２３ないし１６が生成される。ソース１ビット３１ないし２４がソース２ビット３１ないし２４と比較され、結果ビット３１ないし２４が生成される。ソース１ビット３９ないし３２がソース２ビット３９ないし３２と比較され、結果ビット３９ないし３２が生成される。ソース１ビット４７ないし４０がソース２ビット４７ないし４０と比較され、結果ビット４７ないし４０が生成される。ソース１ビット５５ないし４８がソース２ビット５５ないし４８と比較され、結果ビット５５ないし４８が生成される。ソース１ビット６３ないし５６がソース２ビット６３ないし５６と比較され、結果ビット６３ないし５６が生成される。
データ要素のサイズが１６ビットであると仮定すると、ステップ２８１４が実行される。ステップ２８１４で、下記のことが実行される。ソース１ビット１５ないし０がソース２ビット１５ないし０と比較され、結果ビット１５ないし０が生成される。ソース１ビット３１ないし１６がソース２ビット３１ないし１６と比較され、結果ビット３１ないし１６が生成される。ソース１ビット４７ないし３２がソース２ビット４７ないし３２と比較され、結果ビット４７ないし３２が生成される。ソース１ビット６３ないし４８がソース２ビット６３ないし４８と比較され、結果ビット６３ないし４８が生成される。
一実施形態では、ステップ２８１２の各比較が同時に実行される。しかし、他の実施形態では、これらの比較が順次実行される。他の実施形態では、これらの比較のうちのいくつかが同時に実行され、いくつかが順次実行される。この議論はステップ２８１４の比較にも当てはまる。
ステップ２８２０で、結果がＤＥＳＴ６０５レジスタに記憶される。
表３７はパック比較符号なしより大演算のレジスタ内表現である。第１のビット行はソース１のパック・データ表現である。第２のビット行はソース２のパック・データ表現である。第３のビット行は結果のパック・データ表現である。各データ要素ビットの下方の数はデータ要素番号である。たとえば、ソース１データ要素３は１０００００００2である。
0003711147.tif 000047
表３８はパック・バイト・データに対するパック比較符号付き以上演算のレジスタ内表現を示す。
0003711147.tif 000048
パック・データ比較回路
一実施形態では、アンパック・データに対する単一の比較演算と同じクロック・サイクル数で複数のデータ要素に対して比較演算を行うことができる。同じクロック・サイクル数で実行するために、並行処理が使用される。すなわち、各レジスタは、データ要素に対して比較演算を実行するよう同時に命令される。このことについて下記で詳しく説明する。
第２９図は、本発明の一実施形態によってパック・データの個別のバイトに対してパック比較演算を実行する回路を示す。第２９図は、修正バイト・スライス比較回路、すなわちバイト・スライス段i２９９９の使用法を示す。各バイト・スライスは、最上位データ要素バイト・スライスを除いて、比較装置とビット制御装置とを含む。最上位データ要素バイト・スライスに必要なのは比較装置だけである。
比較装置i２９１１および比較装置i+1２９７１はそれぞれ、ソース１の８ビットをソース２の対応する８ビットと比較できるようにする。一実施形態では、各比較装置は既知の８ビット比較回路と同様に動作する。そのような既知の８ビット比較回路は、ソース１からソース２を減算できるようにするバイト・スライス回路を含む。減算の結果は、比較演算の結果を求めるように処理される。一実施形態では、減算の結果にオーバフロー情報が含まれる。このオーバフロー情報が試験され、比較演算の結果が真であるかどうかが判定される。
各比較装置はソース１入力と、ソース２入力と、制御入力と、次段信号と、前段信号と、結果出力とを有する。したがって、比較装置i２９１１はソース１i２９３１入力と、ソース２i２９３３入力と、制御i２９０１入力と、次段i２９１３信号と、前段i２９１２入力と、結果レジスタi２９５１に記憶されている結果とを有する。したがって、比較装置i+1２９７１はソース１i+1２９３２入力と、ソース２i+1２９３４入力と、制御i+1２９０２入力と、次段i+1２９７３信号と、前記i+1２９７２入力と、結果レジスタi+1２９５２に記憶されている結果とを有する。
ソース１n入力は通常、ソース１の８ビット部分である。この８ビットは、最小のデータ要素タイプ、すなわち１パック・バイト４０１データ要素を表す。ソース２入力は、ソース２の対応する８ビット部分である。演算制御回路２９００は、各比較装置が必要な比較を実行できるようにする制御信号を伝送する。この制御信号は、比較に関する関係（たとえば、符号付きより大）とデータ要素のサイズ（たとえば、バイトまたはワード）から決定される。次段信号は、その比較装置のビット制御装置から与えられる。比較装置は、バイトより大きなサイズのデータ要素が使用されるときにはビット制御装置によって有効に組み合わされる。たとえば、ワード・パック・データを比較する際、第１の比較装置と第２の比較装置との間のビット制御装置によって、この２つの比較装置は１つの１６ビット比較装置として働く。同様に、第３の比較装置と第４の比較装置との間のビット制御装置によって、この２つの比較装置は１つの比較装置として働く。これは４つのパック・ワード・データ要素に対して同様に行われる。
比較装置は、ソース１とソース２の所望の関係および値に応じて、上位の比較装置の結果を下位の比較装置へ伝搬させ、あるいはその逆を同様に行うことによって比較を実行する。すなわち、各比較装置は、ビット制御装置i２９２０から伝達される情報を使用して比較の結果を与える。ダブルワード・パック・データを使用する場合、４つの比較装置は協働して各データ要素ごとに１つの３２ビット長比較装置を形成する。各比較装置の結果出力は、その比較装置が作用しているソース１およびソース２の部分に対する比較演算の結果を表す。
ビット制御装置i２９２０はパック・データ・イネーブル信号i２９０６を介して演算制御回路２９００からイネーブルされる。ビット制御装置i２９２０は次段i２９１３および前段i+1２９７２を制御する。たとえば、制御装置i２９１１がソース１およびソース２の最下位８ビットに責任を負い、比較装置i+1２９７１がソース１およびソース２の次の８ビットに責任を負うと仮定する。パック・バイト・データに対する比較を実行する場合、ビット制御装置i２９２０は比較装置i+1２９７１からの結果情報を比較装置i２９１１に伝達することを許容せず、逆もまた同様である。しかし、パック・ワードに対する比較を実行する場合、ビット制御装置i２９２０は比較装置i２９１１からの結果（一実施形態ではオーバフロー）情報を比較装置i+1に伝達することを許容し、かつ比較装置i+1２９７１からの結果（一実施形態ではオーバフロー）情報を比較装置i２９１１に伝達することを許容する。
たとえば表３９では、符号付きパック・バイトの比較が実行される。比較装置i+1２９７１がデータ要素１に作用し、比較装置i２９１１がデータ要素０に作用すると仮定する。比較装置i+1２９７１はワードの上位８ビットを比較し、前段i+1２９７２を介して結果情報を伝達する。比較装置i２９１１はワードの下位８ビットを比較し、次段i２９１３を介して結果情報を伝達する。しかし、演算制御回路２９００はビット制御装置i２９２０に、前段i+1２９７２および次段i２９１３から受け取った結果情報の、比較装置間での伝搬を停止させる。
0003711147.tif 000049
しかし、符号付きパック・ワードの比較を実行する場合は、比較装置i+1２９７１の結果が比較装置i２９１１に伝達され、逆もまた同様である。表４０はこの結果を示す。この種の伝達はパック・ダブルワードでも可能である。
0003711147.tif 000050
各比較装置は任意選択で結果レジスタに結合される。結果レジスタは、完全結果信号、すなわち結果［６３：０］２９６０をＤＥＳＴ６０５レジスタへ伝送できるようになるまで比較演算の結果を一時的に記憶する。
完全６４ビット・パック比較回路では、８つの比較回路および７つのビット制御装置が使用される。そのような回路を使用して、６４ビット・アンパック・データに対して比較を実行し、それによって、同じ回路を使用してアンパック比較演算とパック比較演算を実行することができる。
前述のパック比較演算を命令セットに含めることの利点
前述のパック比較命令では、ソース１とソース２を比較した結果がパック・マスクとして記憶される。前述のように、データに関する条件付き分岐は予測不能であり、したがって、分岐予測アルゴリズムを破壊するためプロセッサ性能に影響を及ぼす。しかし、パック・マスクを生成することによって、この比較命令はデータに基づいて必要な条件付き分岐の数を減少させる。たとえば、下記の表４１に示すようにパック・データに対して関数（ｉｆ  Ｙ＞Ａ  ｔｈｅｎ  Ｘ＝Ｘ＋Ｂ；ｅｌｓｅ  Ｘ＝Ｘ）を実行することができる（表４１に示した値は１６進表記で示されている）。
0003711147.tif 000051
上記の例から分かるように、条件付き分岐はもはや必要とされない。分岐命令が必要とされないので、分岐をスペキュラティブに予想するプロセッサは、この比較命令を使用してこのおよび他の同様な演算を実行しても性能が低下することがない。したがって、プロセッサ１０９によってサポートされる命令セットにこの比較命令を与えることによって、プロセッサ１０９は、この機能を必要とするアルゴリズムをより高い性能レベルで実行することができる。
マルチメディア・アルゴリズムの例
開示した命令セットの融通性を示すために、いくつかのマルチメディア・アルゴリズムの例について下記で説明する。いくつかのケースでは、同様なパック・データ命令を使用してこのようなアルゴリズムにおけるあるステップを実行することができる。下記の例では、データ移動、ルーピング、条件付き分岐を管理する場合に汎用プロセッサ命令を使用する必要があるいくつかのステップを省略した。
１）複素数の乗算
開示した乗算−加算命令を使用して、表４２ａに示したように、単一の命令で２つの複素数を乗算することができる。２つの複素数（たとえばｒ1ｉ1およびｒ2ｉ2）の乗算は下記の数式に従って実行される。
実成分＝ｒ1・ｒ2−ｉ1・ｉ2
虚成分＝ｒ1・ｉ2＋ｒ2・ｉ1
この命令をあらゆるクロック・サイクルで完了するように実施する場合、本発明はあらゆるクロック・サイクルで２つの複素数を乗算することができる。
0003711147.tif 000052
他の例として、表４２ｂは、３つの複素数を乗算するために使用される命令を示す。
0003711147.tif 000053
0003711147.tif 000054
２）乗算累算演算
開示した命令を使用して値を乗算し累算することもできる。たとえば、下記の表４３に示したように２組の４つのデータ要素（Ａ1-4およびＢ1-4）を乗算し累算することができる。一実施形態では、表４３に示した命令のそれぞれが実施され各クロック・サイクルが完了する。
0003711147.tif 000055
各組のデータ要素の数が８よりも多く、かつ４の倍数である場合に、これらの組の乗算および累算を下記の表４４に示したように実行する場合、必要な命令の数が少なくなる。
0003711147.tif 000056
0003711147.tif 000057
他の例として、表４５はセットＡおよびＢならびにセットＣおよびＤの別々の乗算および累算を示す。これらのセットはそれぞれ、２つのデータ要素を含む。
0003711147.tif 000058
他の例として、表４６はセットＡおよびＢならびにセットＣおよびＤの別々の乗算および累算を示す。これらのセットはそれぞれ、４つのデータ要素を含む。
0003711147.tif 000059
３）ドット積アルゴリズム
ドット積（内積とも呼ぶ）は信号処理および行列演算に使用される。たとえば、ドット積は、行列の積を算出する際や、ディジタル・フィルタリング演算（ＦＩＲフィルタリングやＩＩＲフィルタリングなど）を行う際や、相関シーケンスを算出する際に使用される。多数の音声圧縮アルゴリズム（たとえば、ＧＳＭや、Ｇ．７２８や、ＣＥＬＰや、ＶＳＥＬＰ）およびハイファイ圧縮アルゴリズム（たとえば、ＭＰＥＧや副バンド・コーディング）でディジタル・フィルタリング演算および相関演算が広く使用されているので、ドット積の性能が向上することによってこれらのアルゴリズムの性能が向上する。
２つの長さＮシーケンスＡおよびＢのドット積は次式のように定義される。
0003711147.tif 000060
ドット積演算の実行では、各シーケンスの対応する要素が互いに乗算され結果が累算されドット積結果が形成される乗算累算演算が広く使用されている。
本発明では、移動演算、パック加算、乗算加算演算、パック・シフト演算を含めることによって、パック・データを使用してドット積演算を実行することができる。たとえば、４つの１６ビット要素を含むパック・データ・タイプを使用する場合、
１）移動命令を用いて、Ａシーケンスの４つの１６ビット値にアクセスしてソース１を生成し、
２）移動命令を用いて、Ｂシーケンスの４つの１６ビット値にアクセスしてソース２を生成し、
３）乗算−加算命令、パック加算命令、シフト命令を使用して、前述のように乗算および累算を行うことによって、それぞれ、４つの値を含む、２つのシーケンスに対してドット積演算を実行することができる。
多数の要素を含むベクトルに関しては、表４６に示した方法が使用され、最後に最終結果どうしが合計される。他のサポート命令には、累算器レジスタを初期設定するパックＯＲ命令およびパックＸＯＲ命令と、計算の最後の段階で不要な値をシフトオフするパック・シフト命令が含まれる。ループ制御演算は、プロセッサ１０９の命令セットにすでに存在する命令を使用して行われる。
４）二次元ループ・フィルタ
ある種のマルチメディア・アルゴリズムでは二次元ループ・フィルタが使用される。たとえば、下記の表４７に示したフィルタ係数をビデオ会議アルゴリズムで使用して、画素データに対して低域フィルタを実行することができる。
0003711147.tif 000061
位置（ｘ，ｙ）にある画素の新しい値を算出するために、下記の数式が使用される。
結果ピクセル＝（ｘ−１，ｙ−１）＋２（ｘ，ｙ−１）＋（ｘ＋１，ｙ−１）＋２（ｘ−１，ｙ）＋４（ｘ，ｙ）＋２（ｘ＋１，ｙ）＋（ｘ−１，ｙ＋１）＋２（ｘ，ｙ＋１）＋（ｘ＋１，ｙ＋１）
結果的に得られる画素
本発明では、パック、アンパック、移動、パック・シフト、パック加算を含めることによって、パック・データを使用して二次元ループ・フィルタを実施することができる。前述のループ・フィルタの一実施形態によれば、このループ・フィルタは２つの簡単な一次元フィルタとして適用され、すなわち上記の二次元フィルタを２つの１２１フィルタとして適用することができる。第１のフィルタは水平方向にあり、それに対して第２のフィルタは垂直方向にある。
表４８は、８×８ブロックの画素データの表現を示す。
0003711147.tif 000062
この８×８ブロックの画素データに対してフィルタの水平パスを実行するときは、下記のステップが実行される。
１）移動命令を使用して８つの８ビット画素値にパック・データとしてアクセスし、
２）累算時の精度を維持するために、８つの８ビット画素を、４つの８ビット画素を含む１６ビット・パック・データとしてアンパックし（ソース１）、
３）ソース１を２倍してソース２およびソース３を生成し、
４）ソース１に対してアンパック１６ビット右シフトを実行し、
５）ソース３に対してアンパック１６ビット左シフトを実行し、
６）ａ）ソース１＝ソース１＋ソース２
ｂ）ソース１＝ソース１＋ソース２
ｃ）ソース１＝ソース１＋ソース３
の各パック加算を実行することによって（ソース１＋２＊ソース２＋ソース３）を生成し、
７）結果的に得られたパック・ワード・データを８×８中間結果アレイとして記憶し、
８）下記の表４９に示したように８×８中間結果アレイ全体が生成されるまで（たとえば、１Ａ0は表４９のＡ0の中間結果を表す）これらのステップを繰り返す。
0003711147.tif 000063
この８×８中間結果アレイに対してフィルタの垂直パスを実行するときは、下記のステップが実行される。
１）移動命令を用いて、中間結果アレイの４×４データ・ブロックにパック・データとしてアクセスしてソース１、ソース２、ソース３を生成し（一例として表５０を参照されたい）、
0003711147.tif 000064
２）ａ）ソース１＝ソース１＋ソース２
ｂ）ソース１＝ソース１＋ソース２
ｃ）ソース１＝ソース１＋ソース３
の各パック加算を実行することによって（ソース１＋２＊ソース２＋ソース３）を生成し、
３）結果的に得られたソース１に対してパック４ビット右シフトを実行して加重の和を生成し（これは実際上、１６で除算される）、
４）結果的に得られたソース１を飽和を用いてパックして１６ビット値を８ビット画素値に変換し、
６）結果的に得られたパック・ワード・データを８×８結果アレイとして記憶し（表５０に示した例に関しては、この４バイトはＢ0、Ｂ1、Ｂ2、Ｂ3の新しい画素値を表す）、
７）８×８結果アレイ全体が生成されるまでこれらのステップを繰り返す。
８×８結果アレイの１番上の行および１番下の行が、本発明を曖昧にしないように本明細書には記載していない異なるアルゴリズムを使用して求められることに留意されたい。
したがって、本発明は、パック命令、アンパック命令、移動命令、パック・シフト命令、パック加算命令をプロセッサ１０９上に与えることによって、そのようなフィルタが必要とする演算を一度に１データ要素ずつ実行しなければならない従来技術の汎用プロセッサと比べて性能を著しく向上させることができる。
５）運動推定
いくつかのマルチメディアアプリケーション（たとえば、ビデオ会議やＭＰＥＧ（高品質ビデオ再生））で運動推定が使用されている。ビデオ会議に関しては、運動推定を使用して、端末間で伝送しなければならないデータの量が低減される。運動推定は、ビデオ・フレームを固定サイズのビデオ・ブロックに分割することによって行われる。フレーム１内の各ブロックごとに、フレーム２に同様な画像を含むブロックがあるかどうかが判定される。フレーム２にそのようなブロックが含まれる場合、運動ベクトル基準を用いてそのブロックをフレーム１に記述することができる。したがって、そのブロックを表すすべてのデータを伝送するのではなく、運動ベクトルを受信側端末へ伝送するだけでよい。たとえば、フレーム１内のあるブロックがフレーム２内のあるブロックに類似しており、後者のブロックと同じ画面座標にある場合、そのブロックへ送る必要があるのは運動ベクトル０だけである。しかし、フレーム１内のあるブロックがフレーム２内のあるブロックに類似しているが後者のブロックとは異なる画面座標にある場合、そのブロックの新しい位置を示す運動ベクトルを送るだけでよい。一実施形態によれば、フレーム１内のあるブロックＡがフレーム２内のあるブロックＢに類似しているかどうかを判定するために、画素値間の絶対差の和が求められる。この和が小さければ小さいほど、ブロックＡはブロックＢに類似している（すなわち、この和が零である場合、ブロックＡはブロックＢと同一である）。
本発明では、飽和演算および論理演算を含む移動、アンパック、パック加算、パック減算を含めることによって、パック・データを使用して運動推定を実行することができる。たとえば、２つの１６×１６ビデオ・ブロックを、パック・データとして記憶されている２つの８ビット画素値アレイとして表す場合、これらのブロック内の画素値は、
１）移動命令を用いて、ブロックＡの８つの８ビット値にアクセスしてソース１を生成し、
２）移動命令を用いて、ブロックＢの８つの８ビット値にアクセスしてソース２を生成し、
３）パック減算を飽和と共に実行し、ソース２からソース１を減算してソース３を生成し（飽和を用いて減算することによって、ソース３にはこの減算の正の結果しか含まれない（すなわち、負の結果は零になる））、
４）パック減算を飽和と共に実行し、ソース１からソース２を減算してソース４を生成し（飽和を用いて減算することによって、ソース４にはこの減算の正の結果しか含まれない（すなわち、負の結果は零になる））、
５）ソース３およびソース４に対してパックＯＲ演算を実行してソース５を生成し（このＯＲ演算を実行することによって、ソース５にはソース１およびソース２の絶対値が含まれる）、
６）１６×１６ブロックが処理されるまでこれらのステップを繰り返すことによって算出することができる。
結果的に得られた８ビット絶対値は、１６ビット精度が得られるように１６ビット・データ要素としてアンパックされ、次いでパック加算を使用して加算される。
したがって、本発明は、飽和を含む移動、アンパック、パック加算、パック減算をプロセッサ１０９上に与えることによって、運動推定演算の加算および絶対差を一度に１データ要素ずつ実行しなければならない従来技術の汎用プロセッサと比べて性能を著しく向上させることができる。
６）離散余弦変換
離散余弦変換（ＤＣＴ）は、多数の信号処理アルゴリズムで使用されている周知の機能である。特に、ビデオ圧縮アルゴリズムおよび画像圧縮アルゴリズムではこの変換が広く使用されている。
画像圧縮アルゴリズムおよびビデオ圧縮アルゴリズムでは、ＤＣＴを使用して画素のブロックが空間表現から周波数表現に変換される。周波数変換では、画像情報が周波数成分に分割され、このうちのいくつかの成分は他の成分よりも重要である。圧縮アルゴリズムは、再構築された画像内容に悪影響を与えない周波数成分を選択的に量子化または破棄する。このように、圧縮が行われる。
ＤＣＴの多数の実施形態があり、そのうちで最も広く使用されているのは、高速フーリエ変換（ＦＦＴ）計算フローに基づいてモデル化されたある種の高速変換方法である。この高速変換では、オーダーＮ変換がオーダーＮ／２変換の組合せに分解され、結果が再び組み合わされる。この分解は、最小のオーダー２変換に達するまで行うことができる。この基本２変換カーネルはしばしば、蝶形演算と呼ばれる。蝶形演算は次式のように表される。
Ｘ＝ａ*Ｘ＋ｂ*ｙ
Ｙ＝ｃ*ｘ−ｄ*ｙ
上式で、ａ、ｂ、ｃ、ｄは係数と呼ばれ、ｘおよびｙは入力データであり、ＸおよびＹは変換出力である。
本発明では、移動演算、乗算−加算演算、パック・シフト演算、アンパック演算を含めることによって、パック・データを使用して下記のようにＤＣＴ演算を実行することができる。
１）移動命令およびアンパック命令を用いて、ｘおよびｙを表す２つの１６ビット値にアクセスしてソース１を生成し（下記の表５１を参照されたい）、
２）下記の表５１に示したようにソース２を生成し（いくつかの蝶形演算にわたってソース２を再使用できることに留意されたい）、
３）ソース１およびソース２を用いて演算−加算命令を実行して結果を生成する（下記の表５１を参照されたい）。
0003711147.tif 000065
いくつかの状況では、蝶形演算の係数は１である。この場合、蝶形演算は、パック加算命令およびパック減算命令を使用して実行できる加算および減算のみに縮退する。
ＩＥＥＥ文書において、ビデオ会議に関して逆ＤＣＴを実行する場合の精度が指定されている（ＩＥＥＥ  Ｃｉｒｃｕｉｔｓ  ａｎｄ  Ｓｙｓｔｅｍｓ  Ｓｏｃｉｅｔｙ、「ＩＥＥＥ  Ｓｔａｎｄａｒｄ  Ｓｐｅｃｉｆｉｃａｔｉｏｎｓ  ｆｏｒ  ｔｈｅ  Ｉｍｐｌｅｍｅｎｔａｔｉｏｎｓ  ｏｆ  ８×８  Ｉｎｖｅｒｓｅ  Ｄｉｓｃｒｅｔｅ  Ｃｏｓｉｎｅ  Ｔｒａｎｓｆｏｒｍ」（ＩＥＥＥ  Ｓｔｄ．１１８０年−１９９０年、ＩＥＥＥ  Ｉｎｃ．３４５  Ｅａｓｔ  ４７ｔｈ  Ｓｔ．、ＮＹ、ＮＹ１００１７、米国、１９９１年３月１８日）を参照されたい）。必要な精度は、開示した演算−加算命令によって満たされる。なぜなら、この命令が１６ビット入力を使用して３２ビット出力を生成するからである。
したがって、本発明は、移動演算、乗算−加算演算、パック・シフト演算をプロセッサ１０９上に与えることによって、ＤＣＴ演算の加算および乗算を一度に１データ要素ずつ実行しなければならない従来技術の汎用プロセッサと比べて性能を著しく向上させることができる。
代替実施形態
それぞれの異なる演算が別々の回路を有するものとして本発明を説明したが、ある回路がいくつかの異なる演算によって共用されるように代替実施形態を実施することができる。たとえば、一実施形態では、１）パック加算、パック減算、パック比較演算、パック論理演算を実行する単一の論理演算装置（ＡＬＵ）、２）パック演算、アンパック演算、パック・シフト演算を実行する回路装置、３）パック乗算演算および乗算−加算演算を実行する回路装置、４）ポピュレーション・カウント演算を実行する回路装置の各回路が使用される。
「対応する」および「それぞれの」の語は本明細書では、２つ以上のパック・データに記憶されているデータ要素間の所定の関係を指すために使用される。一実施形態では、この関係はパック・データ内のデータ要素のビット位置に基づくものである。たとえば、第１のパック・データの（たとえば、パック・バイト・フォーマットでビット位置０ないし７に記憶された）データ要素０は、第２のパック・データの（たとえば、パック・バイト・フォーマットでビット位置０ないし７に記憶された）データ要素０に対応する。しかし、この関係は代替実施形態では異なる。たとえば、第１のパック・データおよび第２のパック・データ内の対応するデータ要素はそれぞれの異なるサイズのものでよい。他の例として、第１のパック・データの最下位データ要素が第２のパック・データの最下位データ要素に対応する（以下同様）のではなく、第１および第２のパック・データ内のデータ要素が他の何らかのオーダーで互いに対応することができる。他の例として、第１および第２のパック・データ内のデータ要素は、１対１で対応するのではなく異なる比で対応することができる（たとえば、第１のパック・データは、第２のパック・データ内の２つ以上の異なるデータ要素に対応する１つまたは複数のデータ要素を有することができる）。
本発明をいくつかの実施形態に関して説明したが、当業者には、本発明が前述の実施形態に限らないことが認識されよう。本発明の方法および装置は、添付の請求の範囲の趣旨および範囲内で修正および変更を加えて実施することができる。したがって、この説明は本発明を制限するものではなく例示的なものとみなされる。
【図１】
0003711147.tif 000066
【図２】
0003711147.tif 000067
【図３】
0003711147.tif 000068
【図４】
0003711147.tif 000069
【図５ａ】
0003711147.tif 000070
【図５ｂ】
0003711147.tif 000071
【図５ｃ】
0003711147.tif 000072
【図６ａ】
0003711147.tif 000073
【図６ｂ】
0003711147.tif 000074
【図７ａ】
0003711147.tif 000075
【図７ｂ】
0003711147.tif 000076
【図８】
0003711147.tif 000077
【図９】
0003711147.tif 000078
【図１０】
0003711147.tif 000079
【図１１】
0003711147.tif 000080
【図１２】
0003711147.tif 000081
【図１３】
0003711147.tif 000082
【図１４】
0003711147.tif 000083
【図１５】
0003711147.tif 000084
【図１６】
0003711147.tif 000085
【図１７】
0003711147.tif 000086
【図１８】
0003711147.tif 000087
【図１９ａ】
0003711147.tif 000088
【図１９ｂ】
0003711147.tif 000089
【図２０】
0003711147.tif 000090
【図２１】
0003711147.tif 000091
【図２２】
0003711147.tif 000092
【図２３】
0003711147.tif 000093
【図２４】
0003711147.tif 000094
【図２５】
0003711147.tif 000095
【図２６】
0003711147.tif 000096
【図２７】
0003711147.tif 000097
【図２８】
0003711147.tif 000098
【図２９】
0003711147.tif 000099