(57)【要約】  パックされたハーフワード加算および減算演算が、レジスタファイル（１９）の指定されたソースレジスタ（ＲＥＧＡ，ＲＥＧＢ）の指定された上部（＿Ｔ）または下部（＿Ｂ）ハーフワード位置から得られるハーフワードオペランドに対して並行して行なわれる。このような演算の和および差の結果は、指定された宛先レジスタ（ＤＳＴ＿ＲＥＧ）の上部および下部ハーフワード位置のそれぞれへとパックされる。マイクロプロセッサは、加算演算または減算演算のいずれかを選択されたハーフワードオペランド（ＯＰ  Ｂ  Ｔ，ＯＰ＿Ａ＿Ｔ，ＯＰ＿Ｂ＿Ｂ，ＯＰ＿ＡＢ）に対して行なうよう独立して選択可能な（ＡＤＤＳＵＢ＿ＣＴＬ＿Ｔ，ＡＤＤＳＵＢ  ＣＴＬ  Ｂ）別個のハーフワード加算器（１３，１５）に選択的に分割され得る加算器回路網を有する算術論理ユニット（ＡＬＵ１１）を含む。ＡＬＵのハーフワード加算器は、上部および下部ハーフワード位置の中から選択を行なうマルチプレクサ（２１−２６）の組を介してソースレジスタからオペランドにアクセスする。和および差の結果に対する２等分および飽和修正を伴う演算も与えられ得る。
2009527035.tif 000002
【特許請求の範囲】
【請求項１】
選択されたオペランドの対に対して、パックされたハーフワードの加算および減算演算を実行するようにされるプロセッサ回路であって、
２つのハーフワード加算器に選択的に分けられ得る加算器回路網を有する算術論理ユニット（ＡＬＵ）を含み、各ハーフワード加算器は前記ハーフワード加算器へのそれぞれのオペランド入力で受取られたオペランドに対して加算または減算演算のいずれかを行なうよう独立的に選択可能であり、ＡＬＵは、上部および下部ハーフワード記憶位置を有する選択可能なレジスタの組を有するレジスタファイルへのアクセスを有し、ＡＬＵのハーフワード加算器は、当該レジスタファイルにおける、命令が指定した宛先レジスタの上部および下部ハーフワード記憶位置のそれぞれに対して選択的に結合可能である出力を有し、前記プロセッサ回路はさらに、
レジスタファイルとＡＬＵのハーフワード加算器のオペランド入力との間に結合されるマルチプレクサの組を含み、マルチプレクサの組は、レジスタファイルの指定された第１のソースレジスタの指定された上部または下部ハーフワードからの第１のオペランド入力と、レジスタファイルの指定された第２のソースレジスタの指定された上部または下部ハーフワードからの第２のオペランド入力とを、命令が決定した制御信号に応答して選択するよう構成され、当該指定された第２のソースレジスタは必ずしも当該指定された第１のソースレジスタと同じではない、プロセッサ回路。
【請求項２】
マルチプレクサの組は、指定された第１および第２のソースレジスタからの上部および下部ハーフワードオペランドの間での選択のための上部／下部制御信号に応答するマルチプレクサの第１の組を含む、請求項１に記載のプロセッサ回路。
【請求項３】
マルチプレクサの組はさらに、指定された第１および第２のソースレジスタからのハーフワードおよびフルワードのオペランドの間での選択のためのハーフワード／フルワード制御信号に応答するマルチプレクサの第２の組を含む、請求項２に記載のプロセッサ回路。
【請求項４】
ＡＬＵは、下部ハーフワード加算器のキャリー出力と上部ハーフワード加算器のキャリー入力との間に結合されるマルチプレクサを含み、当該マルチプレクサは、フルワード加算器を作り出すようキャリー出力を伝搬することと、別個のハーフワード加算器を作り出すようキャリー出力を伝搬しないこととの間で選択を行うためのプロパゲート−キャリー制御信号に応答する、請求項１に記載のプロセッサ回路。
【請求項５】
２つのハーフワード加算器は、それぞれのハーフワード加算器によってオペランド入力の加算または減算を指定するための別個の加算／減算制御信号に応答する、請求項１に記載のプロセッサ回路。
【請求項６】
ＡＬＵの出力と宛先レジスタとの間に結合される結果修正論理をさらに含み、当該結果修正論理は、命令が指定する２等分、符号なし飽和、符号付き飽和、および修正なしのうちのいずれか１つ以上を、ＡＬＵのハーフワード出力のそれぞれに対して選択的に実現するよう構成される、請求項１に記載のプロセッサ回路。
【請求項７】
プロセッサ回路の単一演算サイクルにおけるパックされたハーフワードの加算および減算演算を実行する方法であって、
算術論理ユニット（ＡＬＵ）によってアクセス可能なレジスタファイルの指定された第１のソースレジスタの指定された上部または下部ハーフワードから第１のオペランドを、マルチプレクサの組を用いて選択するステップと、
当該レジスタファイルの指定された第２のソースレジスタの指定された上部または下部
ハーフワードから第２のオペランドをマルチプレクサの組を用いて選択するステップとを含み、当該指定された第２のソースレジスタは指定された第１のソースレジスタと必ずしも同じではなく、前記方法はさらに、
プロセッサ回路の単一演算サイクルにおいて、選択された第１および第２のオペランドのハーフワード加算およびハーフワード減算のそれぞれを、ＡＬＵにて並列に行なうステップと、
レジスタファイルの指定された宛先レジスタの上部および下部ハーフワード位置のそれぞれに対して、並列なハーフワードの加算およびハーフワードの減算演算の結果得られる和および差を与えるステップとを含む、方法。
【請求項８】
和および差を、指定された宛先レジスタの上部および下部ハーフワード位置のそれぞれに対して与える前に、ビットシフトを通じて２等分するステップをさらに含む、請求項７に記載の方法。
【請求項９】
和および差のそれぞれにおけるオーバーフローまたはアンダーフロー状態を検知し、かつ、もしこのような状態が検知されるならば、このような状態が起こる和または差を指定された宛先レジスタに与える前に、当該和または差を飽和させるステップをさらに含む、請求項７に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
技術背景
この発明は、一般的には、コンピュータ処理ハードウェアにおける命令処理および算術演算の実行と、このような演算の実行において効率性を改善するための、このような処理ハードウェアの具体的な適合例とに関する。この発明は、より特定的には、高速フーリエ変換および関係付けられる変換の実現例において特に用いられるバタフライ演算に関する。
【背景技術】
【０００２】
背景技術
音声および映像信号処理ならびにマルチメディアの圧縮から自動車の衝突検知に至るまで、今日、広範囲のアプリケーションが自身のアルゴリズムにおいて信号の離散変換を用いる。このような離散変換は、たとえば離散コサイン変換および離散フーリエ変換を含み、１秒あたり数十メガビットを超えるデータ速度でリアルタイムに実行されることがしばしば必要となる。これは、高クロック速度および高速なプロセッサを要求するだけでなく、変換計算における効率性およびこのようなプロセッサによるデータ処理における効率性も要求する。離散変換演算はしばしば、高速フーリエ変換（ＦＦＴ）を用いることにより効率的に計算され得る。これには、２つの基礎的な「性質」、すなわち時間間引き（クーリー−ターキー；Cooley-Tukey）と、周波数間引き（サンド−ターキー；Sande-Tukey）とがある。ＦＦＴの両方の性質は、基礎的な計算要素としていわゆる「バタフライ」計算を含む。バタフライ計算は、他の変換（たとえばウォルシュ−アダマール；Walsh-Hadamard）、およびビタビ符号化／復号化アルゴリズムにおいても用いられる。したがって、処理ハードウェアにおいてバタフライ計算を効率的に実行することには、多くのアプリケーションにおいて多大な価値がある。
【０００３】
基本的なバタフライ計算は、複素数のオペランドの実数および虚数成分の加算および減算の両方を伴う。たとえば、時間間引きのＦＦＴ変形例では、複素数値ａ、ｂ、ｃｉ、Ａ、およびＢを有する１つのバタフライ演算を行なうための代表的な擬似コードは以下のように与えられる。式中、Ｒｅ（  ）およびＩｍ（  ）は、複素数値の実数および虚数成分をそれぞれ示す。
【０００４】
【数１】
2009527035.tif 000003
【０００５】
この計算から、同じ入力オペランドに対して、加算および減算演算の両方について２つの発生があることがわかり得る。
【０００６】
計算において用いられる固定小数点オペランドの精度がマイクロプロセッサのワード長（wordlength）のそれの半分であり、かつマイクロプロセッサのＡＬＵが、パックされた
ハーフワードに対して演算を行うための単一命令複数データ（single-instruction, multiple-data；ＳＩＭＤ）命令をサポートするならば、マイクロプロセッサは１つの演算において加算および減算の両方を実行するよう用いられるかもしれない。たとえば、（英国の会社組織である）ＡＲＭリミテッド（ARM Limited）が提供するＡＲＭ１１プロセッサは、パックされたデータに対して同時にハーフワードの加算および減算を行ない得る命令を有する。したがって、命令ＳＡＤＤＳＵＢＸ  Ｒｄ，Ｒｎ，ＲｍおよびＵＡＤＤＳＵＢＸ  Ｒｄ，Ｒｎ，Ｒｍは、
【０００７】
【数２】
2009527035.tif 000004
【０００８】
の符号付きおよび符号なしのものをそれぞれ行なう。
同様に、命令ＳＳＵＢＡＤＤＸ  Ｒｄ，Ｒｎ，ＲｍおよびＵＳＵＢＡＤＤＸ  Ｒｄ，Ｒｎ，Ｒｍは、
【０００９】
【数３】
2009527035.tif 000005
【００１０】
の符号付きおよび符号なしのものをそれぞれ行なう。
【発明の開示】
【発明が解決しようとする課題】
【００１１】
しかしながらこれらの命令は、ハーフワードオペランドの両方が同じレジスタにパックされなければ、バタフライ演算の加減演算を実行し得ず、これにより、さらなる処理が必要になる。
【００１２】
米国特許出願公報第２００４／００７８４０４号（メーシー（Macy）ら）は、８点の時間間引きウォルシュ−アダマール変換が効率的に計算され得るように、多くの演算の中から水平またはイントラ加減演算を、第１のオペランドの４つのパックされたデータ要素（ｘ３，ｘ２，ｘ１，ｘ０）と、第２のオペランドの４つのパックされたデータ要素（ｙ３，ｙ２，ｙ１，ｙ０）とに対して行ない、４つのパックされたデータ要素（ｙ２＋ｙ３，ｙ１−ｙ０，ｘ２＋ｘ３，ｘ１−ｘ０）または代替的には（ｙ２−ｙ３，ｙ１＋ｙ０，ｘ２−ｘ３，ｘ１＋ｘ０）を含む結果を生成し得るプロセッサを示す。さらに、高速フーリエ変換の計算がＳＩＭＤ乗算演算との組合せにおいて示唆される。
【００１３】
米国特許第６，７５４，６８７号（キュラクＪｒ.（Kurak,Jr.）ら）は、二次元データマトリックスに対して効率的に逆離散コサイン変換を計算するための処理システムを記載する。この計算は、クワッドハーフワードデータ（４つのパックされた１６ビットのオペランド）またはデュアルワードデータ（２つの３２ビットのオペランド）のいずれかに対する別個の加算および減算演算からなるバタフライ（ＢＦＬＹＳ）命令を行なうことを含む。
【課題を解決するための手段】
【００１４】
発明の概要
この発明は、異なるソースレジスタに保存される場合でさえ、オペランドとしてどのハーフワードを用いるかを特定し得るパックされたハーフワード加算および減算演算を実行する方法を提供する。これらのハーフワードオペランドは、レジスタまたは他のアドレス指定可能な記憶位置の上または下部分のいずれかに位置し得る。それぞれの和および差の結果が、指定された宛先レジスタの上および下部分のそれぞれへとパックされる。加算および減算の両方は並行して行われる。当該和および差の結果に対する、２等分および符号付きまたは符号なし飽和修正を伴うハーフワード加算および減算演算も与えられてもよい。
【００１５】
この発明はさらに、このパックされたハーフワード加算および減算演算を実現するよう、マイクロプロセッサに対する修正例を提供する。プロセッサのＡＬＵは、２つのハーフワード加算器へと分けられ得、オペランドは、この演算のためのデコードされた命令に従って生成されるマルチプレクサの制御を介して、指定されるソースレジスタからアクセス可能である。これらハーフワード加算器は、一方の加算器では加算を行い、他方の加算器では減算を行うよう設定され得、これら加算器からの和および差の出力は、宛先レジスタの上および下部分のそれぞれに供給される。
【発明を実施するための最良の形態】
【００１６】
発明の詳細な説明
この発明は、高速フーリエ変換またはその他の類似の変換を行なうようしばしば用いられるバタフライ計算の部分を高速化するための手段および方法を提供する。特に、同じハーフワードオペランドに対する、パックされたハーフワードの加算および減算演算がマイクロプロセッサにおいて実現され得る。「マイクロプロセッサ」という用語は、ロード−ストア（ＲＩＳＣ）およびメモリ指向（ＣＩＳＣ）アーキテクチャの両方の様々なデータ処理ハードウェアと、汎用プロセッサ、およびデジタル信号プロセッサのようなアプリケーション独自のプロセッサの両方と、埋込プロセッサとを含むことを意図する。パックされた加減演算は、プロセッサの命令セット内の対応する命令によって、マイクロプロセッサに示され得る。
【００１７】
例示的なマイクロプロセッサ実現例は、１６ビット（ハーフワード）の精度と（１．１５）の形式とを有する計算で用いられる固定小数点数とともに、３２ビットのワード長を含んでもよい。これは、各ハーフワードの最上位ビットが符号を示すとともに、残る１５個のそれより下位ビットは小数部ビットであるということを意味する。ハーフワードはレジスタまたはメモリワードの上および下部分の両方にパックされ得、ビットにおける上部分［３１：１６］はビットにおける下部分［１５：０］とは別個の値である。いくつかの場合において、ある複素数の実数および虚数部分を同じレジスタまたはメモリワードの対応する上および下部分に入れることは便利であるように思われるかもしれないが、これはある値の実数および虚数部分を一緒に保つのに、絶対に必要というわけではなく、または演算の後にデータのリシャッフリングが必須であるために効率性の観点から望ましくもない。通常は、それらが配置され得るどのワードにおいても、それらの位置を追跡することが単純に最良である。この発明が提供する柔軟性により、ハーフワードオペランドが異なるレジスタに位置する場合でさえも、パックされた加減演算が行われることが可能になる。
【００１８】
図１を参照すると、この発明を効率的に実現するよう特別に適合された、マイクロプロセッサの関連部分が示される。算術論理ユニット（ＡＬＵ）１１は、２つのハーフワード加算器１３および１５の間に結合されるマルチプレクサ１７を有する。マルチプレクサ１７は制御信号ＰＲＯＰＡＧＡＴＥ＿ＣＡＲＲＹを受取る。この制御信号が１と等しい場合、下部ハーフワード加算器１５からのＣＡＲＲＹ＿ＯＵＴがＣＡＲＲＹ＿ＩＮとして上部ハーフワード加算器１３に供給され、これによりコンポーネント１３、１５、および１７
が通常のフルワード加算器となる。しかしながら、制御信号ＰＲＯＰＡＧＡＴＥ＿ＣＡＲＲＹが０に設定されるときはいつでも、下部ハーフワード加算器１５からのＣＡＲＲＹ＿ＯＵＴは上部ハーフワード加算器１３に伝搬されない。その代わり、上部ハーフワード加算器１３は、そのＣＡＲＲＹ＿ＩＮ値として、マルチプレクサ１７から０を受取る。効果的なことに、ＰＲＯＰＡＧＡＴＥ＿ＣＡＲＲＹを０に設定することにより、ワード加算器は２つの別個のハーフワード加算器１３および１５になる。この０の制御設定は、この発明に従ったパックされたハーフワードの加減演算を実行する際に用いられるものである。
【００１９】
上部および下部ハーフワード加算器１３および１５はさらに、加算または減算が行なわれるかどうか、すなわち、対応するハーフワードオペランド入力ＯＰ＿Ｂ＿ＴまたはＯＰ＿Ｂ＿Ｂが補完されることになるか否かを決定する制御信号ＡＤＤＳＵＢ＿ＣＴＬ＿ＴおよびＡＤＤＳＵＢ＿ＣＴＬ＿Ｂをそれぞれ受取る。制御信号のいずれかまたは両方が０に設定される場合、関連する入力ＯＰ＿Ｂ＿ＴまたはＯＰ＿Ｂ＿Ｂで与えられる値は変更されないままであり、加算（Ａ＋Ｂ）が行なわれる。制御信号のいずれかまたは両方が１に設定される場合、関連する入力ＯＰ＿Ｂ＿ＴまたはＯＰ＿Ｂ＿Ｂで与えられる値は補完され、減算（Ａ−Ｂ）が行なわれる。パックされたハーフワード加減演算の場合、上部および下部ハーフワード加算器１３および１５がハーフワードオペランドに対してそれぞれの加算および減算演算を行なうように、これらの制御信号のうちの１つ、たとえばＡＤＤＳＵＢ＿ＣＴＬ＿Ｔが加算のために設定され、これらの制御信号の他方、たとえばＡＤＤＳＵＢ＿ＣＴＬ＿Ｂが減算のために設定される。
【００２０】
ＡＬＵ１１は、さまざまなレジスタを含むレジスタファイル１９へのアクセスを有する。パックされたハーフワードの加減演算においては、ＲＥＧ  ＡおよびＲＥＧ  Ｂとしてここで指定される、レジスタファイル１９における２つのレジスタが、対応する命令によって、当該演算についてのソースレジスタとして示されるとともに、その一方ではＤＳＴ
ＲＥＧとして指定される、レジスタファイル１９における別のレジスタが、命令によって、当該演算の結果のための宛先レジスタとして示される。パックされたデータの場合、レジスタファイルにおけるレジスタの各々は、上部ハードワード、すなわち、ＲＥＧＡ＿Ｔ、ＲＥＧＢ＿Ｔ、およびＤＳＴ＿ＲＥＧ＿Ｔと、異なる下部ハーフワード、すなわち、ＲＥＧＡ＿Ｂ、ＲＥＧＢ＿Ｂ、およびＤＳＴ＿ＲＥＧ＿Ｂとの両方に対して指定される記憶位置を有する。
【００２１】
柔軟性の改善のために、ＡＬＵ１１は、ＲＥＧ  ＡおよびＲＥＧ  Ｂとして指定される、命令が特定したレジスタから、それぞれのソースレジスタＲＥＧ  ＡおよびＲＥＧ  Ｂからの選択されたハーフワードのオペランド入力を提供するマルチプレクサ２１−２６の組を介してオペランドに間接的にアクセスするようにされている。
【００２２】
マルチプレクサ２２、２３、２５、および２６に供給される制御信号ＨＡＬＦＷＯＲＤ＿ＡＤＤが０に設定される場合、当該制御信号によって、それぞれのレジスタＡおよびＢからのそれぞれの上部および下部ハーフワードがオペランド入力としてＡＬＵ１１の上部および下部ハーフワード加算器１３および１５のそれぞれに供給される。１に設定された制御信号ＰＲＯＰＡＧＡＴＥ＿ＣＡＲＲＹと組合せると、ＡＬＵ１１は通常のフルワード加算器として動作することになる。
【００２３】
しかしながら、ＨＡＬＦＷＯＲＤ＿ＡＤＤが１に設定されると、マルチプレクサ２２および２３は、ハーフワード加算器１３および１５の両方へのハーフワードオペランド入力として、ＲＥＧ  Ｂからマルチプレクサ２１によって選択される同じハーフワードを供給する。このハーフワードオペランドは上部ハーフワード加算器１３に入力される際にはＯＰ＿Ｂ＿Ｔとして指定され、下部ハーフワード加算器１５に入力される際にはＯＰ＿Ｂ＿Ｂとして指定される。（同じハーフワードがハーフワード加算器１３および１５の両方へ
のオペランド入力として選択されるこの場合には、当該オペランドは一般的にはＯＰ＿Ｂとしても指定され得る。）同様に、マルチプレクサ２５および２６は、ハーフワード加算器１３および１５の両方へのハーフワードオペランド入力として、ＲＥＧ  Ａからマルチプレクサ２４によって選択される同じハーフワードを供給する。このハーフワードオペランドは、上部ハーフワード加算器１３に入力される際にはＯＰ＿Ａ＿Ｔとして指定され、下部ハーフワード加算器１５に入力される際にはＯＰ＿Ａ＿Ｂとして指定される。（同様に、同じハーフワードがハーフワード加算器１３および１５の両方へのオペランド入力として選択される場合、当該オペランドはＯＰ＿Ａとしても指定され得る。）０に設定された制御信号ＰＲＯＰＡＧＡＴＥ＿ＣＡＲＲＹと組合せると、ＡＬＵ１１はハーフワード加算器の対として動作することになる。
【００２４】
マルチプレクサ２１および２４のそれぞれに供給される制御信号ＯＰ＿Ｂ＿ＴＯＰおよびＯＰ＿Ａ＿ＴＯＰは、レジスタＲＥＧ  ＢおよびＲＥＧ  Ａのそれぞれからの上部または下部ハーフワードが選択されるかどうか決定する。制御信号のいずれかまたは両方が１に設定されるならば、対応する上部ハーフワードは、関連するハーフワードオペランドとして選択されることになる。
【００２５】
したがって、対象のいくつかの制御信号の組合せは以下のものを含む。
【００２６】
【数４】
2009527035.tif 000006
【００２７】
これは和を計算する通常のフルワード加算器である。
【００２８】
【数５】
2009527035.tif 000007
【００２９】
これは差を計算する通常のフルワード加算器である。
【００３０】
【数６】
2009527035.tif 000008
【００３１】
これにより、レジスタＡおよびＢからの下部ハーフワードの和および差のそれぞれが、宛先レジスタの上部および下部ハーフワード位置のそれぞれに配置される。
【００３２】
（ｄ）以下の点を除いて、（ｃ）と同じである。
【００３３】
【数７】
2009527035.tif 000009
【００３４】
この変形例により、レジスタＡおよびＢからの下部ハーフワードの差および和のそれぞれが、宛先レジスタの上部および下部ハーフワード位置のそれぞれに配置される。
【００３５】
（ｅ）以下の点を除いて、（ｃ）と同じである。
【００３６】
【数８】
2009527035.tif 000010
【００３７】
これは、オペランドとしてレジスタＡおよびＢからの上部ハーフワードを用いる。和および差の宛先を反転させる、（ｄ）に類似した変形例も可能である。
【００３８】
（ｆ）以下の点を除いて、（ｃ）と同じである。
【００３９】
【数９】
2009527035.tif 000011
【００４０】
これは、オペランドとしてＲＥＧ  Ａからの下部ハーフワードと、ＲＥＧ  Ｂからの上部ハーフワードとを用いる。
【００４１】
同様に、
（ｇ）以下の点を除いて、（ｃ）と同じである。
【００４２】
【数１０】
2009527035.tif 000012
【００４３】
これは、オペランドとしてＲＥＧ  Ａからの上部ハーフワードと、ＲＥＧ  Ｂからの下部ハーフワードとを用いる。
【００４４】
変形例（ｆ）または（ｇ）のいずれかにおいて、ＡＤＤＳＵＢ＿ＣＴＬ＿Ｔ＝１であってＡＤＤＳＵＢ＿ＣＴＬ＿Ｂ＝０であるならば、（ｄ）でのように、差がＤＳＴ  ＲＥＧの上部ハーフワードに入るように和と差の宛先が反転され得る。
【００４５】
図１に示される適合例を有するマイクロプロセッサを用いると、変換関数を実行する際に用いられるバタフライ計算をより効率的に実行し得る。当該バタフライ計算は、以下の例示的なアセンブリコードに変形する。
【００４６】
【数１１】
2009527035.tif 000013
【００４７】
（！右へ１５ビット分シフトすることにより、３２ビットの固定小数点の積が乗算によって生成された後にオリジナルの１６ビット（１．１５）の形式が復元される。）
【００４８】
【数１２】
2009527035.tif 000014
【００４９】
特に、指定されたソースレジスタの上または下部分から同じハーフワードオペランドが選択されるパックされたハーフワードの加減演算（paddsub.h）が実行され得、和および差が、たとえば上記のオプション（ｃ）または（ｅ）のような、指定された宛先レジスタの上部および下部ハーフワードのそれぞれに（飽和なしで）パックされる。これにより、バタフライ計算
【００５０】
【数１３】
2009527035.tif 000015
【００５１】
の４つの以前には別個であった和および差の演算がここで組合され、パックされたハーフワード加減演算の対になる。
【００５２】
【数１４】
2009527035.tif 000016
【００５３】
式中、第１の言及されたパラメータは指定された宛先レジスタであり、最後の２つの言及されたパラメータは指定されたＡおよびＢのソースレジスタであり、これらはここでは指定されたＡおよびＢのソースレジスタからの下部ハーフワードを用いるとして識別される。
【００５４】
【数１５】
2009527035.tif 000017
【００５５】
である命令
【００５６】
【数１６】
2009527035.tif 000018
【００５７】
に対応する演算の均等な機能は擬似コードの項で簡便に以下のように記載され得る。
【００５８】
【数１７】
2009527035.tif 000019
【００５９】
（なお、しかしながら、プロセッサハードウェアは、ソフトウェアのような記述によって示唆される連続的なステップのシーケンスの代わりに、１つの演算クロックサイクルにおける単一の統合された動作としてこのパックされた加減演算を行なう。）この機能記述のｉｆ−ｅｌｓｅのラインは、ＡＬＵ１１へのＯｐ＿ＡおよびＯｐ＿Ｂハーフワードオペランド入力を選択するマルチプレクサ２１−２６によって、図１のプロセッサ回路網において行なわれる。機能記述の最後の２つのラインは、ハーフワード加算器１３および１５によって、かつ、和および差の結果を宛先レジスタＤＳＴ  ＲＥＧの上部および下部ハー
フワード位置のそれぞれに与えることによって行なわれる加減演算に対応する。
【００６０】
代替的には、対応する命令ＰＳＵＢＡＤＤ．Ｈが代わりに用いられ得る。これは、差の結果が上部ハーフワードに入り、和が下部ハーフワードに入るように和および差の結果の宛先が反転されるということを除いて、上述したパックされた加減演算ＰＡＤＤＳＵＢ．Ｈと同じである。
【００６１】
【数１８】
2009527035.tif 000020
【００６２】
これは、上述した変形例（ｄ）と、変形例（ｅ）、（ｆ）、または（ｇ）などの類似している、宛先が反転されたものとに対応する。
【００６３】
この発明に従ったパックされた加算および減算の他の変形例が可能である。たとえば、１つ以上の他の命令が、パックされた加減演算に２等分（ｐａｄｄｓｕｂｈ．ｓｈおよびｐｓｕｂａｄｄｈ．ｓｈ）を与え得る。２等分は、ハーフワードの和および差の結果を、それらを宛先レジスタに書込む前に、２で割る算術的除算（１ビット位置分だけ右にシフトすることにより実現される）を行なうことを伴う。この右への算術シフト（arithmetic
shift right; ａｓｒ）は、最上位ビットの符号を維持する。すなわち、
【００６４】
【数１９】
2009527035.tif 000021
【００６５】
｛ａ，ｂ｝は、ａおよびｂの連結を示す。２等分は、結果の成長の制限を可能にするので、しばしばデジタル信号処理（ＤＳＰ）アプリケーションにおいて用いられる。
【００６６】
１つ以上の他の命令が、パックされた加減演算に符号付きまたは符号なし飽和（ｐａｄｄｓｕｂｓ．ｓｈ，ｐａｄｄｓｕｂｓ．ｕｈ，ｐｓｕｂａｄｄｓ．ｓｈ，ｐｓｕｂａｄｄｓ．ｕｈ）を与え得る。飽和は、オーバーフローまたはアンダーフロー状態によって引起される誤差を最小限にするのに用いられる。２つのオペランドの和または差が数の形式によって示され得る範囲の外側にあるならば、和または差は、当該形式によって示され得る最大または最小の数値に設定される。
【００６７】
符号なし飽和の場合、ハーフワードの値００００HからＦＦＦＦHまでが、０から６５５３５までの範囲の自然数（または、０から６５５３５／６５５３６までの小数値）を示し得る。正の数の加算の間にオーバーフローが起こり得、その一方、正の数の減算の間にアンダーフローが起こり得る。オーバーフローまたはアンダーフロー状態は、関連するハーフワード加算器からのキャリー出力（carry output）の生成によって検知される。加算の結果発生するオーバーフローの場合、飽和値ＦＦＦＦH（最大の符号なしの数）が結果として割当てられる。減算の結果発生するアンダーフローの場合、飽和値０（最小の符号なしの数）が結果として割当てられる。
【００６８】
符号付き飽和の場合、ハーフワード値は、（符号付きビット８０００HからＦＦＦＦHまでと００００Hから７ＦＦＦHまでとによって示される）−３２７６８から３２７６７までの範囲にある。（均等な小数値が、これらの符号付きビットによって同様に示され得る。）２つの正の値の加算によって当該範囲の最大値を上回り得、それと同様に、ある正の値
から負の値の減算によっても当該最大値を上回り得る。その場合には、最も大きい（最大の正の）符号付きの数（７ＦＦＦHで示される）が結果に割当てられることになる。同様に、２つの負の値の加算、または負の値からの正の値の減算により、当該範囲における最小値を下回る和または差の結果が生み出され得る。その場合には、最も小さい（最小の負の）符号付きの数（８０００Hで示される）が結果の代わりに割当てられることになる。オーバーフローまたはアンダーフローの存在、したがって飽和についての必要性が、４つの状態、すなわち
【００６９】
【数２０】
2009527035.tif 000022
【００７０】
のいずれかを判断することによって検知される。
式中、〜は論理ＮＯＴを意味し、＆は論理ＡＮＤを意味し、｜は論理ＯＲを意味する。オーバーフロー／アンダーフロー状態は、各オペランドの符号ビット（ハーフワードビット１５）と和／差の結果との比較の際に示される。オーバーフローは、オペランドＡの符号ビットによって単純にアンダーフローと識別され得る。
【００７１】
【数２１】
2009527035.tif 000023
【００７２】
変形例を実現するよう、結果修正論理ユニット３１が、ＡＬＵ１１から出力される和／差の出力、ＳＵＭＤＩＦＦ＿ＴおよびＳＵＭＤＩＦＦ＿Ｂと、対応する宛先レジスタのハーフワード、ＤＳＴ＿ＲＥＧ＿ＴおよびＤＳＴ＿ＲＥＧ＿Ｂとの間に挿入されてもよい。この結果修正論理３１は、明確となるように図２にさらに詳細に示されるように、それぞれの結果ＳＵＭＤＩＦＦ＿ＴおよびＳＵＭＤＩＦＦ＿Ｂのそれぞれの上部および下部ハーフワード宛先のための、概して同じである結果変形論理サブユニット３１Ｔおよび３１Ｂである。図２はさらに、これらサブユニットが必要とするさまざまなパラメータおよび制御入力を示す。このような論理ユニット３１に加えられる制御信号ＨＷＭＯＤ［１：０］は、変形例のどれか、すなわち、修正なし、２等分、符号なし飽和、または符号付き飽和が適用されることになるかを決定する。ＡＬＵへのオペランド入力（符号ビット）も、それぞれのＡＤＤＳＵＢ＿ＣＴＬ信号とともに、論理サブユニット３１Ｔおよび３１Ｂに結合される。上部および下部出力ＳＵＭＤＩＦＦ＿ＴおよびＳＵＭＤＩＦＦ＿Ｂの両方に対応する論理は同じものである。このような論理ユニットからの修正された出力ＭＯＤＯＵＴ［１５：０］が、宛先レジスタＤＳＴ  ＲＥＧへの入力として用いられる。
【図面の簡単な説明】
【００７３】
【図１】この発明に従ったパックされた加減演算を実行するための、マイクロプロセッサハードウェアの関連部分の例示的な実現例の概略ブロック図である。
【図２】宛先レジスタにおける結果の記憶の前に、パックされた加減結果に対して２等分または飽和修正を行なうための、図１の実現例における結果修正論理をより詳細に示す概略ブロック図である。
【図１】
2009527035.tif 000024
【図２】
2009527035.tif 000025
【国際調査報告】
2009527035.tif 000026