(57)【特許請求の範囲】
【請求項１】
命令をデコードし、実行装置を作動させて演算を実行させるデコーダであって、前記実行装置が
プロセッサの数学的演算を実行する演算論理装置（ＡＬＵ）と、
一方向にデータをシフト或いは回転するように構成された単一方向回転子と、
前記デコーダに応答するセレクタであって、このセレクタが前記演算論理装置（ＡＬＵ）及び前記単一方向回転子の出力を多数のステージを含むパイプラインにスイッチする、セレクタと、
を含む、デコーダと、
メモリからのデータを格納する汎用レジスタファイルと、
前記汎用レジスタファイルに接続された第１の入力、前記パイプラインに接続された第２の入力、前記デコーダに接続された第３の入力或いはシフト修正ロジックに接続された第４の入力の１つを選定するように構成されているマルチプレクサと、
命令が前記一方向に前記データをシフト或いは回転させるレジスタベースの第１の命令、反対方向に前記データをシフト或いは回転させるレジスタベースの第２の命令、或いは、前記データをシフトするためのビット位置の数を含むインストラクション・ベースのシフト或いは回転の第３の命令のいずれかであるかを決定し、各々シフト値に基づいてシフト或いは回転する、前記マルチプレクサおよび前記マルチプレクサに結合されたラッチを制御し、前記単一方向回転子に対して、
前記命令が前記第２の命令である場合に、前記シフト値に基づいて前記シフト修正ロジックにより発生し、あたかも前記データが前記シフト値によって反対方向にシフト或いは回転されたのと同様の結果となるように前記単一方向回転子により使用可能である、第１の値、
前記命令が前記第１の命令である場合に、前記第１の入力或いは前記第２の入力、
前記命令が前記第３の命令である場合に、前記第３の入力、ここで前記デコーダは、反対方向へのシフト或いは回転を示す前記第３の命令に応答して、前記第３の命令の所定フィールドにある特定の値を前記第３の入力に供給するように構成される、
のうちの１つを提供するように構成されている制御ユニットと、
を具備するプロセッサ。
【請求項２】
前記制御ユニットが出力ステージ以外の前記複数のパイプラインのステージ中のあるステージからの前記シフト値を読むようにさらに構成されている請求項１のプロセッサ。
【請求項３】
前記シフト修正ロジックで発生された前記第１の値が前記マルチプレクサにフィードバックされ、および、
このマルチプレクサが前記シフト値或は前記第１の値の１つを選択的に前記単一方向回転子に供給するようにさらに構成されている請求項１のプロセッサ。
【請求項４】
前記単一方向回転子の出力は、前記制御ユニットが前記汎用レジスタファイル内に前記単一方向回転子の前記出力を格納する前に、前記パイプラインに導かれる請求項１のプロセッサ。
【請求項５】
前記マルチプレクサの第２の入力が前記パイプラインの出力に直接接続されている請求項１のプロセッサ。
【請求項６】
前記マルチプレクサが前記汎用レジスタファイルを含まない経路を介して前記パイプラインから前記単一方向回転子の出力を受け取るように構成されている請求項１のプロセッサ。
【請求項７】
前記経路は、前記セレクタを含む請求項６のプロセッサ。
【請求項８】
命令をデコードし、実行装置を作動させて演算を実行させるデコーダであって、前記実行装置が
プロセッサの数学的演算を実行する演算論理装置（ＡＬＵ）と、
一方向にデータをシフト或いは回転するように構成されたｎビットの単一方向回転子と、
前記デコーダに応答するセレクタであって、このセレクタが前記演算論理装置（ＡＬＵ）及び前記ｎビットの単一方向回転子の出力を多数のステージを含むパイプラインにスイッチする、セレクタと、
を含む、デコーダと、
メモリからのデータを格納する汎用レジスタファイルと、
前記汎用レジスタファイルに接続された第１の入力、前記パイプラインに接続された第２の入力、前記デコーダに接続された第３の入力或はシフト修正ロジックに接続された第４の入力の１つを選定するように構成されているマルチプレクサと、
命令が前記一方向に前記データをシフト或いは回転させるレジスタベースの第１の命令、反対方向に前記データをシフト或いは回転させるレジスタベースの第２の命令、或いは、前記データをシフトするためのビット位置の数を含むインストラクション・ベースのシフト或いは回転の第３の命令のいずれかであるかを決定し、各々シフト値ｍに基づいてシフト或いは回転する、前記マルチプレクサおよび前記マルチプレクサに結合されたラッチを制御し、前記ｎビットの単一方向回転子に対して、
前記命令が前記第２の命令である場合に、前記シフト値ｍに基づいて前記シフト修正ロジックにより発生した第１の値、前記第１の値は、（ｎ−ｍ）として決定され、あたかも前記データが前記シフト値ｍによって反対方向にシフト或いは回転されたのと同様の結果となるように前記ｎビットの単一方向回転子により使用可能である、
前記命令が前記第１の命令である場合に、前記第１の入力或いは前記第２の入力、
前記命令が前記第３の命令である場合に、前記第３の入力、ここで前記デコーダは、反対方向へのシフト或いは回転を示す特定の第３の命令に応答して、前記第３の命令の所定フィールドにある特定の値を前記第３の入力に供給するように構成される、
のうちの１つを提供するように構成されている制御ユニットと、
を具備するプロセッサ。
【請求項９】
前記制御ユニットが前記マルチプレクサを介する出力ステージ以外の前記複数のパイプラインのステージ中のあるステージからの前記シフト値ｍを読むようにさらに構成されている請求項８のプロセッサ。
【請求項１０】
前記マルチプレクサは、前記セレクタを含むが前記汎用レジスタファイルを含まない経路を介して前記パイプラインから前記ｎビットの単一方向回転子の出力を受信するように構成されている請求項８のプロセッサ。
【請求項１１】
前記シフト修正ロジックによって発生した前記第１の値が前記マルチプレクサにフィードバックされ、このマルチプレクサが前記シフト値ｍ或は前記第１の値の１つを選択的に前記ｎビットの単一方向回転子に供給するようにさらに構成されている請求項８のプロセッサ。
【請求項１２】
プロセッサによって、第１のシフト値だけ一方向にデータをシフト或いは回転するように構成されている単一方向回転子及び前記第１のシフト値に基づいて変更されたシフト値を発生するように構成されているシフト修正ロジックを用いてシフト或いは回転動作を実行する方法において、
デコーダで命令をデコードし、実行装置を作動させて演算論理装置（ＡＬＵ）及び前記単一方向回転子の１つ以上で演算を実行することと、
前記デコーダに応答して第１のマルチプレクサをスイッチすることであって、前記第１のマルチプレクサが前記演算論理装置（ＡＬＵ）及び前記単一方向回転子の出力を多数のステージを含むパイプラインにスイッチする、スイッチすることと、
メモリからのデータを格納するための汎用レジスタファイルに接続された第１の入力、前記パイプラインに接続された第２の入力、前記デコーダに接続された第３の入力或は前記シフト修正ロジックに接続された第４の入力の１つから前記第１のシフト値或いは変更されたシフト値の１つを選定するように構成されている第２のマルチプレクサをスイッチすることと、
命令が前記一方向に前記データをシフト或いは回転させる第１のレジスタベースの命令、反対方向に前記データをシフト或いは回転させる第２のレジスタベースの命令、或いは、前記データをシフト或いは回転するためのビット位置の数を含み、前記データをシフト或いは回転させる方向を示すインストラクション・ベースのシフト或いは回転命令のいずれかであるかを制御ユニットで決定することと、
前記命令が第２のレジスタベースの命令である場合に、前記シフト修正ロジックで前記第１のシフト値を変更することであって、前記単一方向回転子における前記データがあたかも前記第１のシフト値によって反対方向にシフト或いは回転されたのと同様の結果を生ずるように前記一方向に前記データを前記変更されたシフト値でシフト或いは回転させるように前記変更されたシフト値が前記単一方向回転子によって用いることが可能とされている、前記第１のシフト値を変更することと、
前記命令が前記データをシフト或いは回転する方向が前記反対方向であることを示す前記インストラクション・ベースのシフト或いは回転の命令である場合に、前記デコーダで前記第１のシフト値を変更することであって、前記第１のシフト値は出力ステージ以外の前記パイプラインの前記多数のステージ中のある１つのステージから取り出される、前記単一方向回転子における前記データがあたかも前記第１のシフト値によって前記反対方向にシフト或いは回転されたのと同様の結果を生ずるように前記一方向に前記データを前記変更されたシフト値でシフト或いは回転させるように前記変更されたシフト値が前記単一方向回転子によって用いることが可能とされている、前記第１のシフト値を変更することと、
前記第２のマルチプレクサの出力に接続された入力及び前記シフト修正ロジックに接続された出力を含むラッチで前記第１のシフト値を受け取り、前記第１のシフト値を前記シフト修正ロジック或は前記単一方向回転子の１つに選択的に与えて前記シフト修正ロジックを選択的にバイパスすることを具備し、
前記命令が、前記一方向に前記データをシフト或いは回転させる前記第１のレジスタベースの命令である、或いは、前記データをシフト或いは回転する前記方向を示す前記インストラクション・ベースのシフト或いは回転命令であるとの前記制御ユニットの決定に応答して前記シフト修正ロジックがバイパスされる、
方法。
【請求項１３】
ｎビットの単一方向回転子を作動するための命令をデコードするデコーダであって、前記ｎビットの単一方向回転子がデータを一方向にシフト或いは回転し、前記シフトされ、或いは、回転されたデータを複数のステージを含むパイプラインに供給するように構成されているデコーダと、
メモリからのデータを格納するための汎用レジスタファイルと、
前記汎用レジスタファイルに接続された第１の入力、前記パイプラインに接続された第２の入力、前記デコーダに接続された第３の入力或はシフト修正ロジックに接続された第４の入力の１つから、前記一方向に前記データをシフト或いは回転するシフト値ｍ或いは変更されたシフト値の１つを選定するように構成されているマルチプレクサと、
命令が前記一方向に前記データをシフト或いは回転させる第１のレジスタベースの命令、反対方向に前記データをシフト或いは回転させる第２のレジスタベースの命令、或いは、前記データをシフトするためのビット位置の数を含み、前記データをシフト或いは回転させる方向を示すインストラクション・ベースのシフト或いは回転命令のいずれかであるかを決定するように構成されている制御ユニットと、
前記命令が前記第２のレジスタベースの命令である場合に、前記シフト値ｍに基づいて変更されたシフト値を発生するように構成されている前記シフト修正ロジックであって、前記ｎビットの単一方向回転子における前記データがあたかも前記シフト値ｍによって反対方向にシフト或いは回転されると同様の結果を生ずるように、前記一方向に前記データを前記変更されたシフト値でシフト或いは回転させるように前記変更されたシフト値が前記ｎビットの単一方向回転子によって用いることが可能とされ、前記変更されたシフト値が（ｎ−ｍ）として決定されている、前記シフト修正ロジックと、および
前記マルチプレクサの出力に接続される入力及び前記シフト修正ロジックに接続された出力を含むラッチであって、前記ラッチが前記シフト値ｍを受け取るように構成され、また、前記シフト値ｍを選択的に前記シフト修正ロジック或は前記ｎビットの単一方向回転子の一つに与えるようにさらに構成された、ラッチと、
を具備し、
前記命令が前記一方向に前記データをシフト或いは回転させる前記第１のレジスタベースの命令である、或いは、前記データをシフト或いは回転させる前記方向を示す前記インストラクション・ベースのシフト或いは回転命令であるとの前記制御ユニットの決定に応答して前記シフト修正ロジックがバイパスされ、
前記命令が前記データをシフト或いは回転する前記方向が前記反対方向であることを示す前記インストラクション・ベースのシフト或いは回転命令である場合に、前記デコーダが前記シフト値ｍを修正するように構成され、前記変更されたシフト値が（ｎ−ｍ）として決定され、前記変更されたシフト値が出力ステージ以外の前記パイプラインの前記多数のステージ中のある１つのステージから取り出される、プロセッサ。
【請求項１４】
演算を実行する手段であって、
データに数学的演算を施す手段と、
一方向に前記データをシフト或いは回転する手段と、及び
多数のステージを含むパイプラインに、前記数学的演算を施す手段及び前記シフト或いは回転する手段の出力をスイッチする手段と、
を含む実行する手段と、
命令をデコードし、前記数学的演算を施す手段を動作させる手段であって、前記スイッチする手段が前記デコードする手段に応答している、デコードし、動作させる手段と、
前記データを格納する手段と、
第１のシフト値を修正する手段或はシフト或いは回転する手段の１つに前記第１のシフト値を供給する手段であって、前記第１のシフト値は、前記一方向に前記データをシフト或いは回転するためのビット位置の数を示し、前記第１のシフト値を供給する手段はさらに、
命令が前記一方向に前記データをシフト或いは回転させる第１のレジスタベースの命令、反対方向に前記データをシフト或いは回転させる第２のレジスタベースの命令、或いは、前記データをシフトするためのビット位置の数を含むインストラクション・ベースのシフト或いは回転命令のいずれかであるかを決定する手段と、
第１のシフト値を選定する手段であって、データを格納する前記手段に接続された第１の入力、前記パイプラインに接続された第２の入力、前記デコード手段に接続された第３の入力及び前記第１のシフト値を修正する手段に接続された第４の入力を含み、前記第１のシフト値を修正する手段は、前記第１のシフト値に基づいて変更されたシフト値を発生し、前記変更されたシフト値は前記第１のシフト値を選択するための前記手段にフィードバックされ、前記第１のシフト値を選定する手段が前記第１の入力、前記第２の入力、前記第３の入力或は前記第４の入力の１つから前記第１のシフト値或いは前記変更されたシフト値の１つを選定する、選定手段と、
から構成される供給する手段と、
を具備する装置において、
前記第１のシフト値を供給する手段は、前記命令が前記第２のレジスタベースの命令であるときに、前記第１のシフト値を修正する手段に前記第１のシフト値を供給し、あたかも前記シフト或いは回転手段が前記データを前記第１のシフト値によって反対方向にシフト或いは回転されたのと同様の結果を生ずるように、前記一方向に前記データを前記変更されたシフト値でシフト或いは回転させるように前記変更されたシフト値が前記シフト或いは回転手段によって用いることが可能とされ、
前記第１のシフト値を供給する手段は、前記命令が前記第２のレジスタベースの命令であるときに、前記変更されたシフト値を前記シフト或いは回転する手段に供給し、
前記第１のシフト値を供給する手段は、前記命令が前記第１のレジスタベースの命令或いは前記インストラクション・ベースのシフト或いは回転命令である場合に、前記第１のシフト値を前記シフト或いは回転手段に供給している、
前記第１のシフト値を供給する手段は、前記反対方向に前記データのシフト或いは回転を指示する第１のインストラクション・ベースのシフト或いは回転命令に応答して、前記第１のシフト値をシフト或いは回転手段に供給している、前記第１のシフト値は前記デコーダで変更され、前記第１のシフト値を供給する手段は、出力ステージ以外の前記パイプラインの前記多数のステージ中のある１つのステージから前記第１のシフト値を読む手段を更に具備する、
装置。
【請求項１５】
命令を記憶するコンピュータ可読記憶媒体において、プロセッサによって命令が実行された際に、
デコーダで命令をデコードすることであって、前記デコーダが第１のマルチプレクサを作動させて演算論理装置（ＡＬＵ）或は単一方向回転子の１つからの出力を複数のステージを含むパイプラインに供給し、前記単一方向回転子が第１のシフト値だけ一方向にデータをシフト或いは回転するように構成される、デコードすることと、
第２のマルチプレクサで、メモリからのデータを格納するための汎用レジスタファイルに接続されている前記第２のマルチプレクサの第１の入力、前記パイプラインに接続された前記第２のマルチプレクサの第２の入力、前記デコーダに接続された前記第２のマルチプレクサの第３の入力或はシフト修正ロジックに接続された前記第２のマルチプレクサの第４の入力の１つから、前記第１のシフト値或いは変更されたシフト値の１つを選定することと、
制御ユニットで、命令が前記一方向に前記データをシフト或いは回転させる第１のレジスタベースの命令、反対方向に前記データをシフト或いは回転させる第２のレジスタベースの命令、或いは、前記データをシフト或いは回転するためのビット位置の数を含み、前記データをシフト或いは回転させる方向を示すインストラクション・ベースのシフト或いは回転命令のいずれかであるかを決定することと、
前記命令が前記第２のレジスタベースの命令であるとの決定に応答して前記第１のシフト値を前記シフト修正ロジックに与えることであって、前記シフト修正ロジックが変更されたシフト値を発生し、前記単一方向回転子が前記データをあたかも前記第１のシフト値によって反対方向にシフト或いは回転されたのと同様の結果を生ずるように前記変更されたシフト値で前記一方向に前記データをシフト或いは回転させるように前記変更されたシフト値が前記単一方向回転子によって用いることが可能とされている、前記第１のシフト値を与えることと、
前記命令が前記第１のレジスタベースの命令あるいは前記インストラクション・ベースのシフト或いは回転命令であるとの決定に応答して、前記第１のシフト値を前記単一方向回転子に与えることと、
前記反対方向の前記データのシフト或は回転を指示する第１のインストラクション・ベースのシフト或いは回転命令に応答して前記第１のシフト値を前記単一方向回転子に与えることと、ここで前記第１のシフト値は前記デコーダで変更され、前記第１のシフト値が前記パイプラインの前記複数のステージ中の出力ステージではないあるステージから取り出される、及び
前記命令が前記第２のレジスタベースの命令であるとの決定に応答して前記変更されたシフト値を前記単一方向回転子に与えることと、
を前記命令が前記プロセッサに対して実施させる、コンピュータ可読記憶媒体。
【請求項１６】
制御ユニットと、
インストラクション・レジスタと、
汎用レジスタファイルと、及び
シフト値ｍだけ一方向にデータをシフト或いは回転し、前記シフト或いは回転データを複数のステージを含むパイプラインに供給するように構成されているｎビットの単一方向回転子を含む実行装置と、
を具備する装置において、
前記インストラクション・レジスタから取り出された命令が前記一方向に前記データをシフト或いは回転させる第１のレジスタベースの命令、反対方向に前記データをシフト或いは回転させる第２のレジスタベースの命令、或いは、前記データをシフトするためのビット位置の数を含むインストラクション・ベースのシフト或いは回転命令のいずれかであるかを決定すること、
前記汎用レジスタファイルに接続された第１の入力、前記パイプラインに接続された第２の入力、デコーダに接続された第３の入力或はシフト修正ロジックに接続された第４の入力の１つから前記一方向に前記データをシフト或いは回転する前記シフト値ｍ或いは変更されたシフト値の１つを選択すること、
前記命令が前記第２のレジスタベースの命令である場合に、前記シフト値ｍに基づいて変更されたシフト値を発生することと、この変更されたシフト値が（ｎ−ｍ）として決定される、発生することと、
前記命令が前記第１のレジスタベースの命令或いは前記インストラクション・ベースのシフト或いは回転命令であるとの決定に応答して、前記シフト値ｍを前記ｎビットの単一方向回転子に与えることと、
前記反対方向に前記データのシフト或は回転を指示する第１のインストラクション・ベースのシフト或いは回転命令に応答して前記シフト値ｍを前記ｎビットの単一方向回転子に与えることと、前記シフト値ｍは前記デコーダで変更され、前記シフト値ｍが前記パイプラインの前記複数のステージ中の出力ステージではないあるステージから取り出される、
前記命令が前記第２のレジスタベースの命令であるとの決定に応答して前記変更されたシフト値を前記ｎビットの単一方向回転子に与えることと、
をなすように前記制御ユニットが構成されている装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般にプロセッサに関し、より具体的には、単一方向回転子のためのレジスタベースのシフトに関する。
【背景技術】
【０００２】
プロセッサは、今日、ほとんどすべての電子応用において広く使用されている。
【０００３】
プロセッサは、プログラム命令、算術機能、およびメモリや周辺装置へのアクセスの実行をコントロールする。最も単純な形では、プロセッサはメモリに保存されたデータ上で1つ以上の算術機能を遂行することによりプログラム命令を実行する。プロセッサによって遂行される算術機能は、特定のアプリケーションに依存して変化する。プロセッサによって一般に遂行される算術機能の１つのタイプは、シフト(shifting)あるいは回転(rotating)演算(operation)である。シフトあるいは回転演算は、回転子とそれに関連するロジックによって遂行される。回転子は、シフト演算を要求するプログラム命令に応じてデータが完全にシフトされるように、それらの入力と出力が互いに接続されたマルチプレクサ要素の１つの配列である。
【０００４】
プログラム命令によって要求される特定のシフト演算は種々ある。例えば、プログラム命令は、データを個々のビット位置数だけ移動し、超過ビットは廃棄し、結果はゼロで埋めるよう論理シフト(logical shift)を要求することができる。算術シフト(arithmetic shift)は、右シフト動作中に符号ビット(sign bit)が左まで延長されて左シフト動作中に低位ビット位置にゼロが加えられる以外は、論理シフトに類似する。
【０００５】
回転子もまた、回転演算を要求するプログラム命令を実行するために使用される。
【０００６】
回転演算は、それが循環的である以外は、シフト演算に類似する。回転命令が実行されるとき、回転子の1つの端でシフトアウトされたビットは他方の端に返される。シフト命令と同様、回転命令は、左回転あるいは右回転の命令であり得る。
【０００７】
シフト演算、回転演算のためのプログラム命令が双方向であり得るため、いくつかのプロセッサは個別に左回転子と右回転子を組込む。しかしながら、両方を組込むことは、より多くの電力を消費し、また、より多くの面積あるいは空間を要求する。従って、この技術分野において、左右いずれの方向にもシフトあるいは回転の命令を実行させることができる、プロセッサベースの回転子が必要とされている。プロセッサベースの回転子は、シフト演算や回転演算の待ち時間(latencies)を最小化するように構成されるべきである。
【発明の概要】
【０００８】
プロセッサの1つの態様が示される。プロセッサは、データを一方向にシフトあるいは回転するように構成された単一方向回転子と、反対方向のレジスタベースのシフト命令あるいは回転命令で指定されたシフト値を変更するように構成されたロジックを有する制御ユニットとを含み、変更されたシフト値は、回転子によって一方向でデータをシフトあるいは回転させるために使用可能である。そしてそのために、あたかもレジスタベースの命令で指定された元々のシフト値を使って回転子中のデータが反対方向にシフトあるいは回転されたのと同じ結果を生成する。制御ユニットは、さらに、ロジックをバイパスし、レジスタベースでの命令によって指定されたシフト値を回転子に供給し、一方向でデータをシフトあるいは回転するように構成される。
【０００９】
プロセッサの他の態様が示される。プロセッサは、データを一方向にシフトあるいは回転させるように構成されたnビットの単一方向回転子と、反対方向のレジスタベースのシフト命令あるいは回転命令でmと指定されたシフト値を変更するように構成されたロジックを有する制御ユニットとを含み、変更されたシフト値は、回転子によって一方向で（n−m）だけデータをシフトあるいは回転させるために使用可能である。制御装置は、さらに、ロジックをバイパスし、一方向でのレジスタベースのシフト／回転命令で指定されたシフト値を回転子に供給するように構成される。
【００１０】
一方向でデータをシフト／回転させるように構成された単一方向回転子を使用してシフトあるいは回転演算を実行する1つの方法が開示される。その方法は、レジスタベースでの一方向のシフト／回転命令によって指定されたシフト値を検索することと、ロジックをバイパスして、検索されたシフト値を回転子に供給することとを含む。ロジックは、レジスタベースでの反対方向のシフト／回転命令で指定されたシフト値を変更するように構成され、変更されたシフト値は、回転子によって一方向でのデータのシフト／回転に使用される。その結果、あたかも回転子中のデータがレジスタベースの命令で指定された元々のシフト値で反対方向にシフト／回転されたのと同じ結果を生成する。
【００１１】
一方向でデータをシフト／回転させるように構成されたnビットの単一方向回転子を使用してシフトあるいは回転演算を実行する他の方法が開示される。その方法は、レジスタベースでの一方向のシフト／回転命令によって指定されたシフト値を検索することと、ロジックをバイパスして、検索されたシフト値を回転子に供給することとを含む。ロジックは、レジスタベースでの反対方向のシフト／回転命令で指定されたシフト値を変更するように構成され、変更されたシフト値は、回転子によって一方向でのデータを（n−m）だけシフト／回転するために使用される。
【００１２】
例示としてそのいくつかを示した以下の詳細な記述から、当業者において本開示の他の実施例は容易に明白となるであろう。理解されるように、他の、そして異なる実施例が可能であり、また、ここに含まれたいくつかの詳細は本開示の精神と範囲から外れることなく、様々な他の点で変更が可能である。従って、図面および詳細な記述は、限定的なものとしてではなく、本質を例示するものとしてみなされるべきである。
【００１３】
これらは、他の特徴と同様に、以下の実施例の詳細な記述および添付の図面から明らかになるであろう。
【図面の簡単な説明】
【００１４】
【図１】図1はプロセッサの例を示す簡略ブロック図。
【図２】図2A-2Cはプロセッサ中で回転子のオペレーションを示す図。
【図３】図3は、プロセッサ中の制御ユニットのオペレーションを示すフローチャート・ダイアグラム。
【発明を実施するための形態】
【００１５】
添付の図面に関連して以下に述べられた詳細な記述は、本開示の様々な実施例の記述として意図され、本開示が実行され得るただそれだけの実施例を表わすようには意図されない。詳細な記述は本開示についての完全な理解を提供する目的で特定の詳細を含んでいる。しかしながら、本開示がこれらの特定の詳細なしで実行されてもよいことは当業者にとって明白であろう。いくつかの場合、よく知られた構成や要素は本開示の概念を不明瞭にしないようにするためにブロック図の形で示される。
【００１６】
図1はプロセッサ100あるいは、情報の処理、検索および格納が可能な他の計算体系の例を示す簡略ブロック図である。プロセッサ100はスタンドアロンのコンポーネントでもよく、あるいは、コンピュータ、無線電話、携帯情報端末（ＰＤＡ）、ディジタルカメラ、ゲーム機あるいは他の計算デバイスのようなデバイス中に組み込まれることもできる。プロセッサ100はマイクロプロセッサあるいは他の処理構成であり得る。１つの実施例では、プロセッサ100は埋込み型ＲＩＳＣマイクロプロセッサである。
【００１７】
プロセッサ100の主機能は、データ上で多数のオペレーションを実行することにより、プログラム命令を実行することである。データは検索され、プロセッサ100内の汎用メモリ中のレジスタファイル102に保存される。レジスタファイル102は、外部メモリからのデータを一時的に格納するために使用される高速レジスタである。それらは、プロセッサ100によって要求される、データへの高速アクセスを提供する。レジスタ102の数（一般に総体として汎用レジスタファイルと呼ばれる）は、プロセッサアーキテクチャによって指定される。それぞれのレジスタは実行ユニット104によってアクセス可能であり、プロセッサ100が1つ以上の選択されたレジスタからデータを読み、データ上で実行しその結果を選択されたレジスタに書き込む。
【００１８】
実行ユニット104は、プロセッサ100の全ての数学的演算を実行するために、ＡＬＵ(算術/論理演算ユニット)あるいは他の計算上の構成を使用する。それは、一般的に、加算、減算、乗算、除算および他の計算を含む様々な機能を実行する複雑な回路類で構成される。実行ユニット104は、また、データをシフトあるいは回転させるために使用される。シフトおよび回転の機能は、実行ユニット104中の単一方向回転子106とそれに関連するロジック(図示せず）で実行される。
【００１９】
図１中で示される回転子106は、データを右に任意のビット数だけシフトあるいは回転させることができる単一方向回転子として示される。当業者は、この開示の全体にわたって記述された回転子106の機能性が、データを左にシフト／回転させる単一方向回転子まで及ぶことを容易に認識するであろう。
【００２０】
回転子の動作は図２Ａ〜２Ｃに関連して示される。図２Ａでは、8ビットの回転子202の内容が示される。8ビット回転子中のデータは右に２ビットだけ循環され、図２Ｂで示す結果となる。図２Ｂおよび２Ｃを参照すると、２ビットの右回転動作が６ビットの左回転動作と同じ結果を生むことが容易に分かる。言い換えれば、一方向にデータを回転させることができる回転子は、反対方向でのデータの回転をエミュレートするために使用することができる。したがって、nビットの単一方向回転子中のmビットの左回転動作は、データを(n-m)ビット右回転させることにより実行することができる。
【００２１】
シフト動作は、回転子中で最初に適正量だけデータを回転させておき、次に、適切なビットを廃棄することにより実行されてもよい。占有されていないビット位置はゼロを埋め込んでもよい。あるいは、算術右シフト動作においては、符号ビットが、占有されていないビット位置中に左に延長されてもよい。例えば、mビットの左シフト動作は、回転子中のデータを右に(n-m)ビット回転し、m-LSBを廃棄し、m-LSBビット位置にゼロを埋め込むことで実行できる。mビットの右シフト動作は、回転子中のデータを右にmビット回転させて、m-MSBを廃棄し、m-MSBビット位置にゼロを埋め込むことにより実行できる。算術右シフト動作の場合には、符号ビットが回転子中でm-MSBビット位置中に左に延長されてもよい。
【００２２】
図1に返って、実行ユニット104の動作は命令キャッシュ108に格納されたプログラム命令によって制御される。命令キャッシュ108は、プロセッサ100上の小さな高速メモリである。それは、外部メモリからフェッチされたプログラム命令のための一時的な高速蓄積装置を提供する。プログラム命令はデコーダ110に供給され、また、デコードされた命令は、数学的演算を実行するために実行ユニット104の活性化に使用される。
【００２３】
プログラム命令は、一般に、オペレーションコードとオペランドフィールドの２つの部分から構成される。オペレーションコードは、実行ユニット104によって実行される加算、減算、格納、回転、シフトのようなオペレーションを指定する。オペランドフィールドは、オペレーションコードによって指定されたオペレーションに関するより多くの詳細を提供する。例えば、シフト演算の場合には、オペランドフィールドは、シフトされるべきデータを汎用レジスタファイル102中のどのレジスタが保有しているか、シフトの方向、そしてデータをシフトするためのビット位置の数を示す。この例において、オペランドフィールドは、第１のレジスタ中のデータをmビット右にシフトするよう要求してもよい。あるいは、オペランドフィールドは、第１のレジスタのデータを第２のレジスタで指定された量だけシフトするよう要求してもよい。前のプログラム命令は一般に「インストラクションベースのシフト」("instruction-based shift")として引用され、また、後のプログラム命令は「レジスタベースのシフト」("register-based shift")として引用される。
【００２４】
制御ユニット(図示せず）が、プロセッサ内のプログラム命令とデータの流れを管轄する。制御ユニットの多くの機能のうちの1つは、算術命令のオペランドフィールド中で指定されたデータを実行ユニット104に提供することである。データはプロセッサのアーキテクチャに依存する任意のソースから提供されてもよい。例えば、データは、汎用レジスタファイル102、キャッシュあるいは他のメモリにあってもよい。いくつかの場合では、データは実行ユニット104のパイプライン122中に存在する。したがって、制御ユニットによって検索し、実行ユニット104の入力にフィードバックされなくてはならない。
【００２５】
制御ユニットは、パイプライン122中の任意のステージからデータを早期に回復することを可能にする何がしかのロジックを使用してもよい。制御ユニットは、一般に、デコーダ、マルチプレクサおよび関連するロジックの複合配置で実行される。図1において、デコーダ110、マルチプレクサ112、118、ラッチ114およびシフト修正ロジック116が制御ユニットの一部を形式する。
【００２６】
実行ユニット104へのデータの流れのコントロールに加えて、制御ユニットは、また、命令キャッシュ108中のプログラム命令のオペレーションコードを実行ユニット104中のマルチプレクサ118に供給する役割を負う。マルチプレクサ118は、制御ユニットが汎用レジスタファイル102に結果を格納する前に、回転子106の出力あるいは他の計算機能120を切り替えてパイプライン122に送るために使用される。インストラクションベースのシフトあるいは回転命令の場合は、オペランドフィールドはマルチプレクサ112を通過して回転子106に供給され、データを何ビット位置シフトするかを伝える。デコーダ110、あるいは他の構成は、シフト量を(n-m)だけ変更することによって左シフト／回転を右シフト／回転の命令に変換するために使用される。
【００２７】
今記述されたデコード機能は、インストラクションベースのシフトあるいは回転によく適している。なぜなら、プロセッサ100による実行に十分先立って、命令キャッシュ108内で命令が利用できるからである。しかしながら、レジスタベースのシフト／回転の場合は、もし現在のシフト／回転命令のためにシフト量を指定したデータが汎用ファイルレジスタ102に存在せず、実行ユニット104のパイプライン122のどこかに存在していると、ある時間遅れが経験される。
【００２８】
プロセッサ100の少なくとも1つの実施例では、制御ユニットは、レジスタードベースのシフト／回転命令を効率的に処理するよう構成される。例えば、シフト／回転命令のシフト値を変更する機能は、レジスタードベースのシフト／回転の場合は、デコーダ110ではなく、制御ユニットによって実行される。より具体的には、レジスタードベースのシフト／回転命令のためのオペランドフィールドは、制御ユニットに供給される。制御ユニットは、オペランドフィールドによって指定されたシフト値を汎用ファイルレジスタ102もしくは実行ユニットのパイプライン122のいずれかに配置し、そのシフト値をマルチプレクサ112を介してラッチ114の入力に送る。一旦、データがラッチ114の入力に送られれば、制御ユニットは次のクロックサイクルで実行ユニット104にデータをロードするか、それともまずシフト値を変更するかを決定する。
【００２９】
シフト／回転命令のためにシフト値を実行ユニットに送る処理について、図1および図3を参照して説明する。制御ユニットは、ステップ302で、命令がレジスタードベースかインストラクションベースかを決定する。もし制御ユニットが命令はインストラクションベースであると決定する場合は、シフト値はブロック304中の実行ユニット104に供給され、実行ユニット104はブロック305で回転子中のデータをシフト値によって指定された量だけ右にシフト／回転させる。インストラクションベースのシフト／回転命令が左方向であった場合は、シフト値はデコーダ110あるいは他の構成によって前もって変更されていてもよい。
【００３０】
もし制御ユニットがレジスタードベースの命令であると決定する場合は、制御ユニットは、ブロック306で、レジスタードベースの命令が右へのシフト／回転を要求しているか、それとも左へのシフト／回転を要求しているかを決定する。もし制御ユニットが、命令は右シフト／回転を要求していると決定する場合は、シフト値はブロック304で実行ユニット104に供給され、実行ユニット104はブロック305で回転子中のデータをシフト値によって指定された量だけ右にシフト／回転させる。
【００３１】
もし制御ユニットが、命令は左へのレジスタードベースの命令であると決定する場合は、シフト値はブロック307でシフト修正ロジック116に供給される。ブロック308でシフト値が(n-m)だけ変更される。ここで、nは回転子106のサイズで、mはシフト値である。変更されたシフト値はブロック304で実行ユニット104に供給され、実行ユニット104はブロック305で回転子中のデータをシフト値によって指定された量だけ右に回転させる。
【００３２】
ここに示された実施例に関係して記述された様々な例示の論理ブロック、モジュールおよび回路は、汎用プロセッサ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）あるいは他のプログラマブルロジックデバイス、ディスクリートゲート、トランジスタロジック、個別のハードウェア構成要素、あるいはここに記述された機能を実行するために設計されたそれらの任意の組合せによって実施することができる。汎用プロセッサはマイクロプロセッサであってよいが、代替として任意の従来のプロセッサ、コントローラ、マイクロコントローラあるいはステートマシンであってもよい。また、プロセッサは、計算デバイスの組み合わせ（例えばＤＳＰとマイクロプロセッサの組合せ）、複数のマイクロプロセッサ、ＤＳＰコアと協働する１つ以上のマイクロプロセッサあるいは他のそのような構成として実施することができる。
【００３３】
開示された実施例についての先の記述は、当業者が本発明を実施することを可能にするために提供されている。これらの実施例のついての様々な変更は当業者にとって容易に明白であり、ここに定義された包括的な原理は、本開示の精神あるいは範囲から外れずに他の実施例に適用されてもよい。したがって、本発明は、ここに開示示された実施例に制限されるようには意図されず、請求項と一致する十分な範囲を与えられるべきものであり、単数での要素の言及は、特にそのように明示されない限り「ただ１つのみ」を意味するようには意図されておらず、むしろ「１つ以上」を意図している。この開示を通して記述された様々な実施例の要素についての、当業者によって既に知られ、あるいは後に知られるようになる全ての構造的・機能的な均等物は、参照によってここに明白に組込まれ、また、請求項によって包含されるように意図される。さらに、ここに開示されたいかなるものも、そのような開示が請求項で明示的に記載されるか否かにかかわらず、公共に捧げられるようには意図されない。要素が明確に「means for」、あるいは方法クレームの場合は「step for」を使って記述されていない限り、請求項の要素は米国特許法第１１２条第６パラグラフの下で解釈されるべきではない。
以下に本件出願当初の特許請求の範囲に記載された発明を付記する。
［１］  データを一方向にシフト／回転させるように構成された単一方向回転子と、
レジスタードベースのシフト／回転命令によって指定された反対方向へのシフト値を変更するように構成されたロジックを有し、前記ロジックによって変更されたシフト値は前記データを前記一方向にシフト／回転するために前記回転子によって使用可能で、それによってあたかも前記回転子のデータが前記レジスタードベースの命令によって元々指定されたシフト値だけ前記反対方向にシフト／回転されたと同じ結果を生成する制御ユニットと、
を備え、
前記制御ユニットは、さらに、レジスタベースの命令によって前記データを前記一方向にシフト／回転させるために指定されたシフト値を、前記ロジックをバイパスして前記回転子に供給するように構成された、
プロセッサ。
［２］  パイプライン化された実行ユニットをさらに備え、前記制御ユニットはさらに前記レジスタードベースの命令によって指定された前記シフト値を前記パイプラインの出力ステージ以外のステージから回復するように構成された、［１］に記載のプロセッサ。
［３］  汎用レジスタファイルをさらに備え、前記制御ユニットは、前記レジスタベースの命令に応じて前記汎用レジスタファイルもしくは前記パイプラインのいずれかから前記シフト値を選択するマルチプレクサをさらに備えた、［２］に記載のプロセッサ。
［４］  前記マルチプレクサは、さらに、前記レジスタベースの命令に応じた前記汎用レジスタファイルからのシフト値、前記レジスタベースの命令に応じた前記パイプラインからのシフト値、インストラクション・ベースのシフト／回転命令によって指定されたシフト値のうちのいずれかを選択するように構成された、［３］に記載のプロセッサ。
［５］  前記インストラクション・ベースのシフト／回転命令が前記反対方向である場合、前記インストラクション・ベースのシフト／回転命令によって指定されたシフト値は前記マルチプレクサに供給される前に前記制御ユニットによって変更され、前記インストラクション・ベースのシフト／回転命令のための前記変更されたシフト値は前記回転子によって前記データを前記一方向にシフト／回転するために使用可能で、それによってあたかも前記回転子のデータが前記インストラクション・ベースのシフト／回転命令によって元々指定されたシフト値だけ前記反対方向にシフト／回転されたと同じ結果を生成する、［５］に記載のプロセッサ。
［６］  前記制御ユニットは、さらに、前記レジスタベースの前記一方向のシフト／回転命令に対する前記マルチプレクサによって選択された前記シフト値を前記回転子に供給し、また、前記レジスタベースの前記反対方向のシフト／回転命令に対する前記マルチプレクサによって選択された前記シフト値を前記ロジックに供給するように構成された、［３］に記載のプロセッサ。
［７］  前記ロジックによって生成された変更後の前記シフト値は前記マルチプレクサに戻され、前記マルチプレクサは、前記汎用ファイルレジスタもしくは前記パイプラインのいずれかから前記シフト値を選択し、または、前記変更後のシフト値を前記回転子に供給するように構成された、［６］に記載のプロセッサ。
［８］  前記マルチプレクサに結合された入力と前記ロジック及び前記回転子に結合された出力とを有するラッチをさらに備えた、［７］に記載のプロセッサ。
［９］  データを一方向にシフト／回転させるように構成されたnビットの単一方向回転子と、
レジスタードベースのシフト／回転命令によって指定された反対方向へのシフト値mを変更するように構成されたロジックを有し、前記ロジックによって変更されたシフト値は前記データを前記一方向に(n-m)だけシフト／回転するために前記回転子によって使用可能である制御ユニットと、
を備え、
前記制御ユニットは、さらに、レジスタベースの命令によって前記一方向にシフト／回転させるために指定されたシフト値を、前記ロジックをバイパスして前記回転子に供給するように構成された、プロセッサ。
［１０］  パイプライン化された実行ユニットをさらに備え、前記制御ユニットはさらに前記レジスタードベースの命令によって指定された前記シフト値を前記パイプラインの出力ステージ以外のステージから回復するように構成された、［９］に記載のプロセッサ。
［１１］  汎用レジスタファイルをさらに備え、前記制御ユニットは、前記レジスタベースの命令に応じて前記汎用レジスタファイルもしくは前記パイプラインのいずれかから前記シフト値を選択するマルチプレクサをさらに備えた、［１０］に記載のプロセッサ。
［１２］  前記マルチプレクサは、さらに、前記レジスタベースの命令に応じた前記汎用レジスタファイルからのシフト値、前記レジスタベースの命令に応じた前記パイプラインからのシフト値、インストラクション・ベースのシフトもしくは回転命令によって指定されたシフト値のうちのいずれかを選択するように構成された、［１１］に記載のプロセッサ。
［１３］  前記インストラクション・ベースのシフト／回転命令が前記反対方向である場合、前記インストラクション・ベースのシフト／回転命令によって指定されたシフト値は、前記マルチプレクサに供給される前に前記制御ユニットによって変更され、前記インストラクション・ベースのシフト／回転命令のための前記変更されたシフト値は前記回転子によって前記データを前記一方向にシフト／回転するために使用可能で、それによってあたかも前記回転子のデータが前記インストラクション・ベースのシフト／回転命令によって元々指定されたシフト値だけ前記反対方向にシフト／回転されたと同じ結果を生成する、［１２］に記載のプロセッサ。
［１４］  前記制御ユニットは、さらに、前記レジスタベースの前記一方向のシフト／回転命令のために前記マルチプレクサによって選択された前記シフト値を前記回転子に供給し、また、前記レジスタベースの前記反対方向のシフト／回転命令のために前記マルチプレクサによって選択された前記シフト値を前記シフト修正ロジックに供給するように構成された、［１１］に記載のプロセッサ。
［１５］  前記ロジックによって生成された変更後の前記シフト値は前記マルチプレクサに戻され、前記マルチプレクサは前記汎用ファイルレジスタもしくは前記パイプラインのいずれかから前記シフト値を選択し、または、前記変更後のシフト値を前記回転子に供給する、［１４］に記載のプロセッサ。
［１６］  前記マルチプレクサに結合された入力と前記ロジック及び前記回転子に結合された出力とを有するラッチをさらに備えた、［１５］に記載のプロセッサ。
［１７］  データを一方向にシフト／回転するように構成された単一方向回転子と、レジスタードベースの反対方向のシフト／回転命令によって指定されたシフト値を変更するように構成されたロジックとを使用し、かつ、変更された前記シフト値は前記回転子のデータを前記一方向にシフト／回転するために使用可能で、それによってあたかも前記回転子中のデータが前記レジスタードベースの命令によって元々指定されたシフト値だけ反対方向にシフト／回転されたと同じ結果を生みだすシフト／回転動作の実行方法であって、
前記方法は、
レジスタードベースの一方向のシフト／回転命令によって指定されたシフト値を検索することと、
前記ロジックをバイパスして、前記検索されたシフト値を前記回転子に供給することと、
を備える。
［１８］  前記レジスタードベースの前記一方向のシフト／回転命令のシフト値は、前記回転子を含む実行ユニット中のパイプラインの出力ステージ以外のステージから検索される、［１７］に記載の方法。
［１９］  前記レジスタードベースの前記一方向のシフト／回転命令のシフト値は、汎用ファイルレジスタから検索される、［１７］に記載の方法。
［２０］  前記レジスタードベースの前記一方向のシフト／回転命令のシフト値を前記汎用ファイルレジスタから検索するか、前記回転子を含む実行ユニット中のパイプラインの出力ステージ以外のステージから検索するかを決定することをさらに備えた、［１７］に記載の方法。
［２１］  その後に続くレジスタベースの一方向のシフト／回転命令のシフト値を検索することと、前記その後に続くレジスタベースの命令に先行するレジスタベースの反対方向のシフト／回転命令に応答して、前記ロジックによって変更されたシフト値を前記回転子に供給するように決定することと、をさらに含む、［１７］に記載の方法。
［２２］  データを一方向にシフト／回転するように構成されたnビットの単一方向回転子と、レジスタードベースの反対方向のシフト／回転命令によって指定されたシフト値mを変更するように構成されたロジックとを使用し、かつ、変更された前記シフト値は前記回転子のデータを前記一方向に(n-m)だけシフト／回転するために使用可能であるシフト／回転動作の実行方法であって、
前記方法は、
レジスタードベースの前記一方向のシフト／回転命令によって指定されたシフト値を検索することと、
前記ロジックをバイパスして前記検索されたシフト値を前記回転子に供給することと、
を備える。
［２３］  前記レジスタードベースの前記一方向のシフト／回転命令のシフト値は、前記回転子を含む実行ユニット中のパイプラインの出力ステージ以外のステージから検索される、［２２］に記載の方法。
［２４］  前記レジスタードベースの前記一方向のシフト／回転命令のシフト値は、汎用ファイルレジスタから検索される、［２２］に記載の方法。
［２５］  前記レジスタードベースの前記一方向のシフト／回転命令のシフト値を前記汎用ファイルレジスタから検索するか、前記回転子を含む実行ユニット中のパイプラインの出力ステージ以外のステージから検索するかを決定することをさらに備えた、［２２］に記載の方法。
［２６］  その後に続くレジスタベースの一方向のシフト／回転命令のシフト値を検索することと、前記その後に続くレジスタベースの命令に先行するレジスタベースの反対方向のシフト／回転命令に応じて、前記ロジックによって変更されたシフト値を前記回転子に供給するように決定することとをさらに含む、［２２］に記載の方法。
【００３４】
開示された実施例についての先の記述は、当業者が本発明を実施することを可能にするために提供されている。これらの実施例のついての様々な変更は当業者にとって容易に明白であり、ここに定義された包括的な原理は、本開示の精神あるいは範囲から外れずに他の実施例に適用されてもよい。したがって、本発明は、ここに開示示された実施例に制限されるようには意図されず、請求項と一致する十分な範囲を与えられるべきものであり、単数での要素の言及は、特にそのように明示されない限り「ただ１つのみ」を意味するようには意図されておらず、むしろ「１つ以上」を意図している。この開示を通して記述された様々な実施例の要素についての、当業者によって既に知られ、あるいは後に知られるようになる全ての構造的・機能的な均等物は、参照によってここに明白に組込まれ、また、請求項によって包含されるように意図される。さらに、ここに開示されたいかなるものも、そのような開示が請求項で明示的に記載されるか否かにかかわらず、公共に捧げられるようには意図されない。要素が明確に「means for」、あるいは方法クレームの場合は「step for」を使って記述されていない限り、請求項の要素は米国特許法第１１２条第６パラグラフの下で解釈されるべきではない。
【図１】
0005996484.tif 000002
【図２】
0005996484.tif 000003
【図３】
0005996484.tif 000004